Skip to content

feat(libSceNet): implement the Ex and Internal socket forms, sceNetSysctl, scope-ID text and the default route - #9578

Open
EagleBearerYS wants to merge 13 commits into
boykopovar:mainfrom
EagleBearerYS:feat/libscenet-ex-forwards
Open

EagleBearerYS wants to merge 13 commits into
boykopovar:mainfrom
EagleBearerYS:feat/libscenet-ex-forwards

Conversation

@EagleBearerYS

@EagleBearerYS EagleBearerYS commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

What

This implements 7 libSceNet functions that threw. 4 more from the same batch stay throwing, because their answer would be a guess.

  • The Ex and Internal forms: sceNetSocketInternal, sceNetGetsockoptEx and sceNetSetsockoptEx forward to sceNetSocket, sceNetGetsockopt and sceNetSetsockopt. Their restored argument lists match the public ones. How the console tells them apart is recorded as debt.
  • sceNetSysctl calls libkernel's sysctl (FreeBSD sysctl(3) arguments). A failure is reported as 0x80410100 | errno, like the library's other calls.
  • The scope-ID forms: sceNetInetNtopWithScopeId and sceNetInetPtonWithScopeId convert IPv6 text with a numeric zone (fe80::1%2, RFC 4007 section 11) through sceNetInetNtop and sceNetInetPton. They print and parse it as FreeBSD's getnameinfo with NI_NUMERICSCOPE and getaddrinfo do. Interface-name zones and AF_INET throw.
  • sceNetConfigGetDefaultRoute reports the IPv4 gateway of the host interface that sceNetCtlGetInfo describes as DEFAULT_ROUTE. It goes through a libSceNetCtl helper next to the DNS one. Without a gateway, or for a null pointer, it throws.

Still throwing:

  • sceNetConfigGetDefaultRoute6: NetCtl has no IPv6 model.
  • sceNetConfigGetIfFlags and sceNetGetIfnameNumList: the console's interface numbering isn't known.
  • sceNetInitParam: NetInitializeParameter's layout isn't known.

This is stacked on #9494 and #9515. The scope-ID forms use #9494's text rules through sceNetInetNtop and sceNetInetPton.

Related: #9231 changes sceNetSocket's errors and, on macOS, sceNetInetPton's IPv4 path. sceNetSocketInternal follows whatever sceNetSocket returns.

Overlap: checked with git merge-tree against every open PR touching these files, on main 6ef5a1c. The conflicts the check reports all come from #9515's commits in this branch's base, not from this PR's own commits: #9365, #9099 and #8359 in docs/dev/debt/libkernel.md, and #7511 in Socket/src/Udp.cpp. This PR's commits change only libSceNet, libSceNetCtl, GuestSceNet.cpp and libSceNet's debt file. #9231 merges cleanly with this PR and with #9494, whose IPv6 path in sceNetInetPton its macOS IPv4 check sits next to, and Gonic0 agreed that neither waits for the other (comment). #9542 (Queuse) duplicates the sceNetGetsockopt readback of #9515's e887616, which this branch carries. Under the order agreed on #9515 (comment), #9523 → #9542 → #9515 → this PR, #9515 drops that hunk once #9542 lands, and this PR follows at its next merge of main.

Tested

  • GitHub's Linux and Windows runners (run), against the merge of fix(libSceNet): follow FreeBSD inet text rules for IPv6 #9494 and fix(libkernel): getsockopt reads options of libSceNet sockets #9515: guest_sce_net fails ×2 on both with the stubs, and passes ×5 on both with this PR.
  • Linux (Ubuntu 24.04, Release): guest_sce_net_tests gains these cases:
    • the Ex and Internal forms equal their twins;
    • sceNetSysctl against libkernel's sysctl on hw.pagesize, with its error cases;
    • the fe80::1%2 round trip, with rejected and boundary texts;
    • the default route against sceNetCtlGetInfo's DEFAULT_ROUTE.
    • Each function reverted alone fails (7 of 7), and the PR passes 10 of 10 repeats.
    • That machine has no IPv6 loopback, so the test's existing IPv6 socket checks skip there, as on main. None of the new cases needs IPv6 networking.
    • The no-gateway branch of the default-route case wasn't exercised.
    • Full ctest under CI's configure has only that machine's IPv6 failures, plus one AGC fill test that passes on rerun.
  • 43ea777, main 8b3e398 merged in (clean; the PR's own diff is unchanged), on GitHub's runners (run): guest_sce_net and guest_net_ctl pass 10 of 10 on Linux and Windows, none skipped. On its one run with main's implementation, guest_sce_net fails on both runners and guest_net_ctl passes. libkernel's suite passes on both, and libc's on Windows.
    • On Linux, libc's precise_wait failed on the fix arm only in the run's first attempt. It's a runner timing test outside the files this PR touches, and in run 39788040462 it failed with main's implementation as well. The rerun of the Linux job passed.
  • check_conventions.py passes, with no comment lines added.
  • Not tested with a title.
  • dda8c45, a merge of fix(libkernel): getsockopt reads options of libSceNet sockets #9515's merge of main 938812d (efd999c). It brings no conflict of its own, and the PR's own diff is unchanged. On GitHub's runners (run), guest_net_ctl, guest_sce_net, guest_socket_options and guest_socket_error pass 10 runs in a row on Linux and on Windows, 4 of 4, none skipped. The libc and libkernel suites pass on both (119 and 201 tests on Linux, 146 and 211 on Windows), run with APS5_SKIP_TIMING_TESTS=1, which relaxes precise_wait's median bounds on GitHub's hosted runners.

Checklist

sceNetInetPton and sceNetInetNtop called Winsock's InetPtonA and
InetNtopA on Windows. Those print IPv4-translated and ISATAP addresses
with a dotted tail, print ::ffff:0.0.0.1 as ::ffff:0:1, and accept a
leading zero in a dotted tail, where FreeBSD does neither. Both now
convert with libkernel's inet_pton and inet_ntop, which follow the
FreeBSD 11.4 rules since boykopovar#3530.
boykopovar#5124 adds an entry after sceNetShowNetstat at the end of the unknown function info list, so adding the inet entry there made the two pull requests conflict.
…ockopt

sceNetSetsockopt takes both, but sceNetGetsockopt failed them with EOPNOTSUPP. It now reads them from the host socket. FreeBSD's sogetopt returns so_options & option for the boolean options, so they read back as 0x4 and 0x20 when set.
setsockopt reaches a socket created with sceNetSocket through the option setter libSceNet registers, but getsockopt looked the descriptor up only among libkernel's own sockets and failed, so a title could set an option on such a socket through the BSD call and not read it back. libSceNet now registers an option getter with libkernel next to its setter, which answers through sceNetGetsockopt, so SO_RCVTIMEO and SO_SNDTIMEO come back as a struct timeval.
…ards

Base for the libSceNet Ex/Internal forwards: upstream main 94fbb8c with fix/libscenet-inet-text-rules (ef49574) and fix/libkernel-getsockopt-net-sockets (aea804d).
…ns to their public twins

sceNetSocketInternal, sceNetGetsockoptEx and sceNetSetsockoptEx threw.
Their argument lists, restored with the rest of the firmware exports in
4d6942f, are the same as sceNetSocket, sceNetGetsockopt and
sceNetSetsockopt, so they now call those. Nothing in the tree records
how the console tells the entry points apart (for example by the
calling process); the debt file says so.

Tested: guest_sce_net_tests creates a datagram socket through
sceNetSocketInternal, sets SO_REUSEADDR and SO_RCVTIMEO through
sceNetSetsockoptEx and reads them back through sceNetGetsockoptEx and
sceNetGetsockopt with the same values. On a closed socket and on -1,
and for an unsupported family and type, each Ex/Internal call returns
the same error and errno as its public twin.
sceNetSysctl threw. Its restored argument list is FreeBSD's sysctl(3)
(name, name length, old value and size, new value and size), so it now
calls libkernel's sysctl. It answers exactly the MIBs libkernel models,
and a failure is returned as the library's other calls return one
(0x80410100 | errno, with the errno set).

Tested: guest_sce_net_tests reads hw.pagesize (6.7) through both
sysctl and sceNetSysctl and gets the same value and size, including a
size-only query. A one-level name gives EINVAL, a null name EFAULT, a
write EPERM and a one-byte buffer ENOMEM, each as 0x804101xx with the
errno set.
sceNetInetNtopWithScopeId and sceNetInetPtonWithScopeId threw. They now
handle AF_INET6 text with an RFC 4007 numeric zone (fe80::1%2): the
address part goes through sceNetInetNtop and sceNetInetPton, so it
follows the FreeBSD inet text rules, and the zone is printed and parsed
as FreeBSD 11.4's getnameinfo (NI_NUMERICSCOPE) and getaddrinfo do. A
zero scope ID prints the address alone and text without a zone parses
to scope ID 0. An empty zone, one above 2^32 - 1, or an invalid address
part returns 0 and leaves both outputs untouched; a buffer too small
for the scoped text gives ENOSPC.

A zone given as an interface name, and AF_INET, still throw: the tree
has no mapping from interface names to the console's interface indexes
and no answer for an IPv4 zone. The debt file says so.

Tested: guest_sce_net_tests round-trips fe80::1%2 (same address bytes
as fe80::1, scope ID 2) and ff02::1%4294967295, checks the exact
buffer size and ENOSPC one byte short, the unscoped forms, four
rejected texts with untouched outputs, EINVAL for null pointers, and
that an interface-name zone and AF_INET throw.
…ultRoute

sceNetConfigGetDefaultRoute threw. It now writes the IPv4 gateway of the
host interface that libSceNetCtl's sceNetCtlGetInfo already describes as
DEFAULT_ROUTE, in network byte order, the order sceNetInetPton writes an
AF_INET address in, and returns 0. libSceNetCtl exports
NetCtlHostIpv4Gateway_nid_no_patch for it, next to the DNS helper
sceNetGetDnsInfo uses. Without a gateway, or for a null pointer, it
still throws: the console's answer for a missing route is not measured.

Tested: guest_sce_net_tests, after sceNetCtlInit, prints the gateway
with sceNetInetNtop and compares it with sceNetCtlGetInfo's
DEFAULT_ROUTE text (192.0.2.1 on this host); a null pointer throws.
On a host without a default route the case checks that the call
throws and leaves the output untouched.
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Progress report (3b6613e → dda8c45)

📈 System libraries: 47.47% (+0.06%, +7 implemented functions)

✅ 7 implemented
Library Name
libSceNet sceNetConfigGetDefaultRoute
libSceNet sceNetGetsockoptEx
libSceNet sceNetInetNtopWithScopeId
libSceNet sceNetInetPtonWithScopeId
libSceNet sceNetSetsockoptEx
libSceNet sceNetSocketInternal
libSceNet sceNetSysctl

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 4630 docs/dev/debt/libkernel.md
PR 5021 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 5836 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 6044 core/libs/tests/GuestSceNet.cpp
PR 6149 docs/dev/debt/libkernel.md
PR 6586 docs/dev/debt/libkernel.md
PR 6740 docs/dev/debt/libkernel.md
PR 6830 docs/dev/debt/libkernel.md
PR 6936 docs/dev/debt/libkernel.md
PR 7049 docs/dev/debt/libkernel.md
PR 7088 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 7090 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 7105 docs/dev/debt/libkernel.md
PR 7121 docs/dev/debt/libkernel.md
PR 7135 docs/dev/debt/libkernel.md
PR 7149 docs/dev/debt/libkernel.md
PR 7192 docs/dev/debt/libkernel.md
PR 7201 core/libs/prx/libSceNet/Export.cpp
core/libs/prx/libSceNetCtl/Export.cpp
core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 7299 docs/dev/debt/libkernel.md
PR 7447 docs/dev/debt/libkernel.md
PR 7464 docs/dev/debt/libkernel.md
PR 7475 core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 7485 core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 7490 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
PR 7502 core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 7507 core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 7509 docs/dev/debt/libkernel.md
PR 7530 docs/dev/debt/libkernel.md
PR 7532 docs/dev/debt/libkernel.md
PR 7565 docs/dev/debt/libkernel.md
PR 7605 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 7653 docs/dev/debt/libkernel.md
PR 7804 docs/dev/debt/libkernel.md
PR 7853 docs/dev/debt/libkernel.md
PR 8010 docs/dev/debt/libkernel.md
PR 8225 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 8232 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 8234 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 8235 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 8254 core/libs/prx/libSceNet/Export.cpp
docs/dev/debt/libSceNet.md
PR 8344 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 8362 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 8373 docs/dev/debt/libkernel.md
PR 8398 core/libs/prx/libSceNetCtl/Export.cpp
core/libs/tests/GuestSceNet.cpp
PR 8408 docs/dev/debt/libkernel.md
PR 8448 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 8463 core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 8520 docs/dev/debt/libkernel.md
PR 8533 docs/dev/debt/libkernel.md
PR 8553 docs/dev/debt/libkernel.md
PR 8605 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 8686 core/libs/prx/libSceNet/Export.cpp
docs/dev/debt/libSceNet.md
PR 8725 docs/dev/debt/libkernel.md
PR 8726 docs/dev/debt/libkernel.md
PR 8728 docs/dev/debt/libkernel.md
PR 8742 docs/dev/debt/libkernel.md
PR 8872 docs/dev/debt/libkernel.md
PR 8916 docs/dev/debt/libkernel.md
PR 8921 docs/dev/debt/libkernel.md
PR 9001 docs/dev/debt/libkernel.md
PR 9059 docs/dev/debt/libkernel.md
PR 9074 docs/dev/debt/libkernel.md
PR 9095 docs/dev/debt/libkernel.md
PR 9099 docs/dev/debt/libkernel.md
PR 9105 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 9123 docs/dev/debt/libkernel.md
PR 9127 docs/dev/debt/libkernel.md
PR 9133 docs/dev/debt/libkernel.md
PR 9153 docs/dev/debt/libkernel.md
PR 9156 docs/dev/debt/libkernel.md
PR 9160 docs/dev/debt/libkernel.md
PR 9164 docs/dev/debt/libkernel.md
PR 9165 docs/dev/debt/libkernel.md
PR 9167 docs/dev/debt/libkernel.md
PR 9169 core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 9187 docs/dev/debt/libkernel.md
PR 9199 docs/dev/debt/libkernel.md
PR 9231 core/libs/prx/libSceNet/Export.cpp
PR 9239 docs/dev/debt/libkernel.md
PR 9242 docs/dev/debt/libkernel.md
PR 9256 docs/dev/debt/libkernel.md
PR 9263 docs/dev/debt/libkernel.md
PR 9284 docs/dev/debt/libkernel.md
PR 9293 docs/dev/debt/libkernel.md
PR 9297 docs/dev/debt/libkernel.md
PR 9298 docs/dev/debt/libkernel.md
PR 9302 docs/dev/debt/libkernel.md
PR 9326 docs/dev/debt/libkernel.md
PR 9357 docs/dev/debt/libSceNet.md
PR 9359 docs/dev/debt/libkernel.md
PR 9363 docs/dev/debt/libkernel.md
PR 9378 docs/dev/debt/libkernel.md
PR 9389 docs/dev/debt/libkernel.md
PR 9442 docs/dev/debt/libkernel.md
PR 9461 docs/dev/debt/libkernel.md
PR 9482 docs/dev/debt/libkernel.md
PR 9506 core/libs/prx/libSceNet/Export.cpp
core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libSceNet.md
PR 9509 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 9525 core/libs/prx/libSceNet/Export.cpp
docs/dev/debt/libSceNet.md
PR 9543 core/libs/prx/libSceNet/Export.cpp
docs/dev/debt/libSceNet.md
PR 9557 docs/dev/debt/libkernel.md
PR 9561 docs/dev/debt/libkernel.md
PR 9566 docs/dev/debt/libkernel.md
PR 9573 docs/dev/debt/libkernel.md
PR 9575 docs/dev/debt/libkernel.md
PR 9625 core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 9651 docs/dev/debt/libSceNet.md
PR 9669 docs/dev/debt/libkernel.md
PR 9682 docs/dev/debt/libkernel.md
PR 9684 docs/dev/debt/libkernel.md
PR 9693 docs/dev/debt/libkernel.md
PR 9713 core/libs/prx/libkernel/Socket/src/Udp.cpp
PR 9715 core/libs/prx/libSceNet/Export.cpp
PR 9727 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 9728 core/libs/prx/libSceNetCtl/Export.cpp
PR 9732 docs/dev/debt/libkernel.md
PR 9733 core/libs/prx/libSceNet/Export.cpp
docs/dev/debt/libSceNet.md
PR 9794 docs/dev/debt/libkernel.md
PR 9843 docs/dev/debt/libkernel.md
PR 9876 docs/dev/debt/libkernel.md
PR 9882 docs/dev/debt/libkernel.md
PR 9930 core/libs/prx/libSceNet/Export.cpp
docs/dev/debt/libSceNet.md
PR 9931 core/libs/prx/libSceNet/Export.cpp
docs/dev/debt/libSceNet.md
PR 9932 core/libs/prx/libSceNet/Export.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 9938 docs/dev/debt/libkernel.md
PR 9947 docs/dev/debt/libkernel.md
PR 9948 core/libs/prx/libSceNet/Export.cpp
core/libs/prx/libkernel/Socket/include/SocketPoll.hpp
core/libs/prx/libkernel/Socket/src/Udp.cpp
core/libs/tests/GuestSceNet.cpp
docs/dev/debt/libSceNet.md
PR 9962 docs/dev/debt/libkernel.md
PR 10018 docs/dev/debt/libkernel.md
PR 10025 docs/dev/debt/libkernel.md
PR 10061 docs/dev/debt/libkernel.md
PR 10089 docs/dev/debt/libkernel.md
PR 10097 docs/dev/debt/libSceNet.md
PR 10105 docs/dev/debt/libkernel.md
PR 10107 docs/dev/debt/libkernel.md
PR 10110 docs/dev/debt/libkernel.md
PR 10121 docs/dev/debt/libkernel.md
PR 10130 docs/dev/debt/libkernel.md
PR 10132 docs/dev/debt/libkernel.md
PR 10133 docs/dev/debt/libkernel.md
PR 10137 docs/dev/debt/libkernel.md
PR 10162 docs/dev/debt/libkernel.md
PR 10177 docs/dev/debt/libkernel.md
PR 10179 docs/dev/debt/libkernel.md
PR 10187 core/libs/prx/libSceNet/Export.cpp
PR 10192 docs/dev/debt/libkernel.md
PR 10198 docs/dev/debt/libkernel.md
PR 10230 docs/dev/debt/libkernel.md
PR 10243 docs/dev/debt/libkernel.md
PR 10246 docs/dev/debt/libkernel.md
PR 10299 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10302 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10305 docs/dev/debt/libkernel.md
PR 10308 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10310 docs/dev/debt/libkernel.md
PR 10319 docs/dev/debt/libkernel.md
PR 10320 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10327 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10330 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10331 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10350 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10385 docs/dev/debt/libkernel.md
PR 10425 core/libs/prx/libkernel/Socket/src/Udp.cpp
docs/dev/debt/libkernel.md
PR 10442 docs/dev/debt/libkernel.md

@MarcZX10

Copy link
Copy Markdown
Contributor

I reviewed the current overlap report against the declared dependency branches. #9515 changes libSceNet/Export.cpp and Socket/src/Udp.cpp, which are also in this PR's aggregate diff because #9578 is stacked on it. The relevant work composes in principle: the new getsockopt getter uses the socket-option hook added by #9515, and the Ex forwarding methods use the sceNetGetsockopt implementation updated there. Please keep #9515's hook and option behavior intact when reconciling; the required dependency is already declared.

One additional overlap needs coordination: #9231 remains open and changes sceNetInetPton in the same Export.cpp, while this PR changes that function's IPv6 conversion path to use libkernel's parser. Its change is Apple-only and should compose with the family-specific IPv6 delegation, but that needs an agreed order/rebase and retention of the leading-zero IPv4 behavior. Please coordinate with #9231's author and record a dependency if either PR must land first.

The no-gateway branch of sceNetConfigGetDefaultRoute is explicitly not exercised in the reported Linux run. Its helper correctly leaves the caller's output untouched when it finds no route, and the code throws in that case; keep the debt statement that this result is unverified.

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the eight-commit diff and the focused coverage. The Ex/Internal forms are explicit forwards with uncertainty recorded; sysctl is routed through the existing libkernel implementation and its error mapping is documented as unverified; scope IDs are deliberately numeric-only with unsupported interface-name/AF_INET paths left throwing; and the default-route helper writes only after finding a gateway, with its no-route and null behavior kept explicitly unimplemented. The tests include boundaries/rejections, focused red-green controls, repeats, and accurately disclose the missing no-gateway execution and IPv6 environment limitation. The checklist declares the stacked prerequisites #9494 and #9515 and correctly says no title unblock. Eligibility, conventions, intake, labels and report checks pass; product build jobs are skipped. The Linux/Windows comparisons in the description are author-reported; I did not run tests locally. No actionable issue found in this review.

@EagleBearerYS

Copy link
Copy Markdown
Contributor Author

Thanks, @MarcZX10. Gonic0 agreed on #9231 that neither PR waits for the other (comment): its macOS check of an IPv4 address's leading zeros runs before the host conversion, which this stack leaves IPv4 to, and the two merge cleanly with this PR and with #9494. The Overlap section and Depends on now say so, here and on #9494, where the sceNetInetPton IPv6 change comes from.

@MarcZX10 MarcZX10 left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Follow-up to my earlier approval after refreshing upstream/main and rerunning the focused target on this exact head. The local guest_sce_net_tests target builds successfully from this PR head. CTest starts the test, but the process aborts in HostCpu before test assertions because this host lacks LZCNT, BMI1/2, MOVBE, AVX2 and FMA. The PR's Linux/Windows test matrix is reported as author-run on a merge of #9494 and #9515; current required eligibility, conventions, intake, labels and report checks pass, while product and relinker jobs are skipped by path policy. Please refresh the branch against current main and rerun the focused Linux/Windows checks before merge. check_main_sync.py reports 10 ahead / 116 behind (merge base 94fbb8cea), despite a clean merge. Since the PR's last checked base 6ef5a1c and that merge base, main changed libSceNet/Export.cpp, libSceNetCtl/Export.cpp, GuestSceNet.cpp and both debt files. In particular, GuestSceNet.cpp now has additional tests, and libSceNetCtl initialization changed; please verify the new cases and the default-route helper still behave as intended after rebasing. My prior review found no code defect on the then-current base. The focused Linux/Windows checks in the PR description are useful evidence; the remaining requests are for current-base validation only. I withdraw the queue-based hold; it is fine to keep submitting PRs and they will be handled in due course.

I’ve noticed that holding this PR because of #5239 isn’t necessary. It’s fine for PRs to keep coming in; they’ll be handled in due course. Please disregard my earlier request to hold or defer it.

@MarcZX10

MarcZX10 commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

I also withdraw the stale-base request. The current head 43ea7772bbca1d830872b3af6ae35dbd258e92d6 merges current upstream/main 8b3e39832af85f404c6195418d11b3e1ebd1924d (zero commits behind); current diff-check and conventions pass. The 11-commit PR stack includes #9494 and #9515, which remain open as the declared prerequisites, so preserve their changes and rerun the focused matrix after their integration. The existing author Linux/Windows red-green reports cover the merged dependency state. My local guest_sce_net_tests target built on this exact head, but CTest aborted during HostCpu initialization before assertions because this host lacks the required LZCNT/BMI/MOVBE/AVX2/FMA features; this is an environment-blocked run, not a passing test or assertion failure. Hosted product jobs are skipped. The agreed #9231 order is recorded, and the no-gateway branch remains accurately marked untested in the PR description.

@EagleBearerYS

Copy link
Copy Markdown
Contributor Author

main is merged (8b3e398, 43ea777), with the PR's own diff unchanged; guest_sce_net and guest_net_ctl pass 10 of 10 on GitHub's Linux and Windows runners (run).

@MarcZX10

Copy link
Copy Markdown
Contributor

I’ve noticed that asking you to hold this PR was unnecessary. It’s fine to keep submitting PRs; maintainers will handle them in due course.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs libkernel needs rebase Conflicts with main, rebase needed prx

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants