211 Commits
Author SHA1 Message Date
Dean e0a11b3fba Merge pull request #9515 from EagleBearerYS/fix/libkernel-getsockopt-net-sockets
fix(libkernel): getsockopt reads options of libSceNet sockets
2026-10-29 18:49:11 +13:00
MarcZX10 c1e321f26d feat(libSceNet): implement sceNetGetStatisticsInfo
sceNetGetStatisticsInfo threw NotImplemented_nid_no_patch. It now fills
the six 32-bit fields of the statistics block (kernel memory free and
minimum free, packet count, QoS packet count, library memory free and
minimum free) and fails with NET_EFAULT, setting errno, for a null
pointer. The layout and the "plenty free, nothing queued" answer follow
shadPS4's net.cpp and net_types.h; the host has no counter for the
console's network memory, so the values are not measured. The debt file
records this, and the test checks the null pointer, the field
invariants and that the flags argument is ignored.
2026-10-28 13:07:48 +00:00
MarcZX10 d7c13a621e feat(libSceNet): implement the pool-checked Show*WithMemory diagnostics
sceNetShowIfconfigWithMemory, sceNetShowPolicyWithMemory and
sceNetShowRoute6WithMemory threw NotImplemented_nid_no_patch. They now
behave like the existing sceNetShowRouteWithMemory: an unknown memory
pool id fails with NET_EBADF (errno set), a live pool returns success
without printing. The behaviour follows shadPS4's net.cpp, which does
the same for these three. The new silent stubs are listed in the
libSceNet technical debt file, and the tests cover the invalid id, live
pool and destroyed pool cases.
2026-10-28 13:07:48 +00:00
frankea 2129d1f7b5 fix(libSceNet): print the interface and socket tables from sceNetShowIfconfig and sceNetShowNetstat
Since #9137 both throw after sceNetInit. A PS5 on firmware 13.40
returns 0 from each and prints plain-text tables to stdout. They now
print the console's layout with what the emulator knows: ifconfig an
eth0 block from the host interface sceNetCtlGetInfo reports (the same
MAC, address, netmask and MTU), the console's lo0 block and the DNS
servers; netstat the header and one entry per socket and epoll of the
title, with the self and non-blocking flags, addresses, buffer sizes and
the names given to sceNetSocket and sceNetEpollCreate, which are now
kept. The debt entry lists what the console prints that is left out.

guest_sce_net captures both outputs: the lo0 block and DNS section, a
named unbound UDP socket, a non-blocking listening TCP socket bound to
127.0.0.1, an epoll, a 40-character name cut to 31, and the entries gone
after close.
2026-10-28 09:05:58 +01:00
Yunus Shaikh 4432e8aa57 Merge main into fix/libkernel-getsockopt-net-sockets 2026-10-27 21:03:12 -07:00
Dean 5283d89b95 Merge pull request #11569 from olegon85/test-net-byte-order
test(libSceNet): cover the sceNetHton and sceNetNtoh byte-order conversions
2026-10-27 19:08:55 +13:00
MaxandClaude Opus 5.5 ff5e67de15 fix(libSceNet): keep the iovec copy empty for a receive without iovecs
Copy the iovec table only when there is one, and receive a datagram
with no iovecs in guest_sce_net: it returns 0 with MSG_TRUNC and the
sender's address.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 00:21:05 +01:00
MaxandClaude Opus 5.5 3d2b723f71 fix(libSceNet): receive sceNetRecvmsg through the iovecs it had at entry
sceNetRecvmsg guarded the destinations of the iovec table it saw at
entry, then read the live table again to scatter the received bytes.
When an earlier destination overlapped a later iovec, the received
bytes replaced that iovec and the rest of the data went to an address
that was never guarded, which crashed the host when that address was
not writable. Copy the header and the iovec table once, as FreeBSD
11.4's sys_recvmsg does with copyin and copyiniov, use that copy for
the guards, the scatter and the address, and write the header back
from it as sys_recvmsg's copyout does.

Fixes #11610

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 23:53:11 +01:00
Dean abfa119d02 Merge pull request #11243 from parl0v/fix/getsockopt-kernel-sockets
fix(libSceNet): read an option of a libkernel socket through sceNetGetsockopt
2026-10-27 11:05:26 +13:00
Dean d9c7bb5ffe Merge pull request #11242 from parl0v/fix/epoll-kernel-sockets
fix(libSceNet): register libkernel sockets with sceNetEpollControl
2026-10-27 11:05:08 +13:00
Dean 998e9e5da4 Merge pull request #11037 from Bram910/fix/net-send-nosignal
fix(libSceNet): accept MSG_NOSIGNAL in send, sendto and sendmsg
2026-10-27 10:59:36 +13:00
Oleg ba681f4003 test(libSceNet): cover the sceNetHton and sceNetNtoh byte-order conversions 2026-10-27 02:05:28 +05:00
Bram910 98c0bc2d4e Merge origin/main into fix/net-send-nosignal 2026-10-26 12:11:05 +01:00
Yunus Shaikh 6f3771820a fix(libSceNet): return -1 from sceNetConfigGetIfFlags for an interface number of 10 or more
Firmware 13.42's module looks the name up with sceNetGetIfName, which
has none past 9, then issues SIOCGIFFLAGS on the empty name. That ioctl
fails, and the call returns -1 with the flags untouched. Return the
same instead of throwing. Interfaces 1 to 9 still throw, and the test
no longer asserts that for 1 and 4, which the console answers from the
kernel.

Asked for in oneandonlydean's review, from BunnyFl's read of the
module.
2026-10-25 23:10:45 -07:00
Yunus Shaikh bf0f293edd Merge main into feat/scenet-config-and-ether-calls 2026-10-25 16:23:19 -07:00
Adrià b76f08cf33 Merge pull request #9727 from KernelPanicNT/fix/net-reject-unsupported-flags
fix(libSceNet): reject the flags and names the module rejects
2026-10-26 00:07:35 +01:00
Josip Parlov 3cbd5a4be3 fix(libkernel): retire epoll registrations of a socket closed with sceKernelClose 2026-10-25 23:35:48 +01:00
Josip Parlov 6cbb4ff7fd fix(libSceNet): read an option of a libkernel socket through sceNetGetsockopt
Human Fall Flat (PPSA02429) opens its sockets with libkernel's socket()
and reads options of them with sceNetGetsockopt. libSceNet only looked
in its own socket table, so each call failed with SCE_NET_ERROR_EBADF.
On the console both calls work on the same kernel sockets, the position
sceNetSetsockopt already takes for MXGP 26 (PPSA30839).

A descriptor libSceNet does not own but libkernel has open as a socket
now goes to libkernel's getsockopt(), which answers the options it
models. Anything else still fails with EBADF. The fallback runs after
g_mutex is released.

guest_sce_net reads SO_SNDBUF and TCP_NODELAY of a libkernel TCP socket
through sceNetGetsockopt, checks that an unknown level fails with
EINVAL, and that the call fails with EBADF once the socket is closed.
2026-10-25 23:28:23 +01:00
Josip Parlov b0ab88d650 fix(libSceNet): register libkernel sockets with sceNetEpollControl
Human Fall Flat (PPSA02429) opens its sockets with libkernel's socket()
and registers them with sceNetEpollControl. libSceNet only looked in its
own socket table, so every ADD and DEL failed with SCE_NET_ERROR_EBADF.
The game retries without pause: on box 2 it made more than 1.6 million
failing calls on 14 descriptors in its first seconds, all of them
libkernel sockets.

sceNetEpollControl now accepts a descriptor libkernel has open as a
socket, as sceNetSocketClose and sceNetSetsockopt already do for MXGP 26
(PPSA30839). sceNetEpollWait looks up the host socket of such a
registration through libkernel after g_mutex is released, because that
lookup asks libSceNet's own table for descriptors libkernel does not
own, and keeps the owner alive across the host poll. libkernel's close()
retires the registrations of the closed socket; a wait drops a
registration whose socket is gone.

guest_sce_net registers a libkernel UDP socket, waits for it to become
readable and then writable, deletes it twice, closes registered sockets
through close() and sceKernelClose and waits again, and checks that a
descriptor that was never open still fails with EBADF.
2026-10-25 23:28:22 +01:00
KernelPanicNT 6e8ec6d213 fix(libSceNet): reject the flags and names the module rejects
sceNetEpollCreate fails with EINVAL for a null name or non-zero flags,
sceNetResolverCreate and sceNetGetMacAddress for non-zero flags, and
sceNetResolverStartNtoa, before any other check, for a negative timeout
or retry count or a flag bit outside 0x10001, as prosper reads the
libSceNet module. The two accepted resolver flag bits are still ignored,
which the debt file now records.
2026-10-25 19:52:23 +01:00
Braxton Atkinson 67c149465e feat(net): store DNS overrides and match firmware argument checks
Apply the firmware 13.42 module-probe report in PR #9506: all four DNS calls check initialization first; getters return EINVAL for null outputs or nonzero flags; setters reject flags before reading guest memory. Keep the checked input copy and document EFAULT as host safety, not firmware behavior. Use the current public Net.hpp declarations in the regression.

Rebased onto upstream e7e3e9c198. Ubuntu 24.04, GCC 13.3, Release: actual libc/libkernel/libSceNet libraries and both focused test executables built. guest_sce_net passes. A separate harness linked against those unmodified libraries passes initialization, errno, invalid flags, unreadable-input flag precedence, null clearing and unchanged-output checks. The full guest_net_dns_info test is blocked here: process_vm_readv is denied with EPERM by the execution environment. No full DNS regression pass is claimed. Public-header audit, conventions, test registration and whitespace checks pass.

The resolver still uses host DNS; IPv6 host-server discovery and firmware server-count behavior remain debt. Firmware evidence: https://github.com/boykopovar/AnyPS5/pull/9506#issuecomment-6390574180

AI-assisted: yes
2026-10-25 18:56:14 +01:00
Adrià f50caac5c2 Merge pull request #9494 from EagleBearerYS/fix/libscenet-inet-text-rules
fix(libSceNet): follow FreeBSD inet text rules for IPv6
2026-10-25 18:23:21 +01:00
Adrià 0c1563e357 Merge pull request #9493 from EagleBearerYS/fix/libscenet-closed-stream-readable
fix(libSceNet): report a stream whose peer closed as readable on Windows
2026-10-25 18:22:51 +01:00
Bram910andClaude Opus 5.5 32744645c4 fix(libSceNet): accept MSG_NOSIGNAL in send, sendto and sendmsg
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 15:21:43 +01:00
Yunus Shaikh fc881b9259 Merge main into fix/libscenet-inet-text-rules
Main's #10706 removes the local declarations at the top of libSceNet's
Export.cpp, where this branch had added __inet_pton and __inet_ntop.
libkernel's Api.hpp, which Export.cpp includes, now declares both, so the
merge takes main's side there.
2026-10-25 07:07:33 -07:00
Yunus Shaikh be3f208b02 fix(libSceNet): answer sceNetInitParam and a null sceNetConfigGetIfFlags as measured
BunnyFl measured both calls in firmware 13.42 libSceNet.sprx, run in an
emulator on the module itself. sceNetInitParam returns 0x80410116 for a
null parameter. The first non-null call copies the first 32 bytes of the
parameter and returns 0, and every later call returns 0x80410110, with a
null parameter and after sceNetTerm too, because the flag is never
cleared. sceNetConfigGetIfFlags returns 0x8041130E for a null flags
pointer before anything else. Both replace throws that stood in for the
unknown answers.

The first successful sceNetInitParam still marks the library initialized,
as sceNetInit does here, because the other calls check it. The module
reads only bit 0 of the stored copy's first word, to raise the pool limit
of sceNetPoolCreate from 32 to 128; that limit is recorded as not
modelled, as sceNetPoolCreate here has none.
2026-10-25 05:11:17 -07:00
Yunus Shaikh 00924d8f9f Merge main into fix/libkernel-getsockopt-net-sockets
Main extends the libkernel debt entry on libSceNet sockets with poll and
fcntl, where this branch adds getsockopt to the same entry; the merge keeps
both.
2026-10-25 03:59:43 -07:00
Dean e599efd64d Merge pull request #10572 from ZSWolt/fix/libscenet-usleep-negative-log
fix(libSceNet): print the console's line for a negative sceNetUsleep
2026-10-25 19:06:10 +13:00
Yunus Shaikh e9db171018 feat(libSceNet): report the loopback interface's flags
sceNetConfigGetIfFlags answers interface 0, lo0 in the sceNetGetIfName
numbering, with IFF_UP | IFF_LOOPBACK | IFF_RUNNING | IFF_MULTICAST, the
flags FreeBSD 11 gives a configured loopback. Other interfaces and a null
flags pointer throw: the library models no other interface.
2026-10-25 03:00:00 +00:00
Yunus Shaikh 64f42541ae feat(libSceNet): initialize the library through sceNetInitParam
sceNetInitParam initializes the library as sceNetInit does and returns
its result. NetInitializeParameter's layout is unknown, so its fields are
not read; a null parameter throws because its console result is unknown.
2026-10-25 03:00:00 +00:00
Yunus Shaikh fc47c2f491 Merge main into fix/libkernel-getsockopt-net-sockets
Main's #10706 declares getsockopt_nid_postfix and sceNetGetsockopt in the libraries' public headers, so this branch's local declarations of them in GuestSceNet.cpp and libSceNet's Export.cpp go.
2026-10-24 17:34:28 -07:00
boykopovar fdf9ca7574 fix(sdk): reconcile public headers after rebase 2026-10-24 23:17:47 +03:00
boykopovar f38d29fd08 refactor(sdk): add canonical headers for remaining libraries 2026-10-24 23:17:42 +03:00
boykopovar 35cf8d56cd refactor(sdk): add canonical headers for core libraries 2026-10-24 23:17:37 +03:00
Yunus Shaikh abbb7ac6b5 Merge main into fix/libkernel-getsockopt-net-sockets 2026-10-24 10:41:17 -07:00
Adrià 8f2e9cd077 Merge pull request #8398 from Chikimaro/feat/libscenetctl-nptoolkit-callbacks
feat(libSceNetCtl): implement the NpToolkit callback register, unregister and check
2026-10-24 18:42:46 +02:00
Adrià d4b85d2b29 Merge pull request #8362 from MarrasFederico/feat/net-get-sock-info6
feat(libSceNet): list IPv6 sockets in sceNetGetSockInfo6
2026-10-24 18:41:46 +02:00
Adrià 3102f39af0 Merge pull request #8235 from jagrat04/feat/libSceNet-show-route-with-memory
feat(libSceNet): implement sceNetShowRouteWithMemory
2026-10-24 17:17:45 +02:00
ZSWoltandClaude Opus 5.5 412c3cd91f fix(libSceNet): print the console's line for a negative sceNetUsleep
After sceNetInit, the console's sceNetUsleep prints
"[LIBNET] usleep <count>" to standard output for a negative count
before failing with EINVAL, as a payload measured on firmware 13.60
(#9076). AnyPS5 failed without printing it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 13:30:52 +03:00
jagrat Singh 32455327e4 feat(libSceNet): implement sceNetShowNetstatEx 2026-10-24 12:20:53 +02:00
Adrià 2dc8e456b5 Merge pull request #8225 from jagrat04/feat/libSceNet-show-policy
feat(libSceNet): implement sceNetShowPolicy
2026-10-24 12:18:48 +02:00
Yunus Shaikh fca8266468 Merge main into fix/libscenet-inet-text-rules 2026-10-23 19:15:30 -07:00
orezraeyandClaude Opus 5.5 b2dc84b68d fix(libSceNet): read sceNetInetPton text and null outputs as measured on a PS5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 13:17:24 -03:00
orezraeyandClaude Opus 5.5 d4321c6569 docs(libSceNet): separate the PS4 and PS5 measurements of sceNetInetPtonEx
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 13:10:40 -03:00
orezraeyandClaude Opus 5.5 dd9716e1c3 fix(libSceNet): convert sceNetInetPtonEx without an output as measured on a PS5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 13:10:40 -03:00
Yunus Shaikh efd999c8ed Merge main into fix/libkernel-getsockopt-net-sockets
# Conflicts:
#	docs/dev/debt/libkernel.md
2026-10-23 06:49:51 -07:00
Dean da46482789 Merge pull request #9872 from MarcZX10/test/net-resolver-family-coverage
test(net): preserve resolver address-family coverage
2026-10-24 01:13:52 +13:00
Arnab Ghosh 5dfa258d9f feat(libSceNet): implement sceNetIoctl 2026-10-23 10:07:18 +06:00
Dean 1da03c6f34 Merge pull request #9076 from orezraey/fix/net-utilities-measured-ps5
fix(libSceNet): accept every sceNetMemoryAllocate flag as measured on a PS5
2026-10-23 09:22:21 +13:00
Dean 5d40eb3fdc Merge pull request #9106 from Retr0G28/fix/scenet-stream-recv-timeout-eagain
fix(libSceNet): report EAGAIN when a stream receive times out on Windows
2026-10-23 09:22:12 +13:00