get_ip_address had three independent implementations (shellui, util, daemon) because each module also carried its own copy of SceNetCtlInfo and its own prototype for sceNetCtlGetInfo, with the pointer typed as SceNetCtlInfo* in two of them and void* in the third. The shellui and util copies stored the result in an unsigned int and tested `ret < 0`, which is never true for an unsigned value. Their error branch was unreachable, so a failed lookup returned success, left not_connected clear, and copied an uninitialised SceNetCtlInfo to the caller instead of the IP NOT FOUND placeholder. util's rest-mode network-recovery retry keys off that return value and therefore never ran. Declare the netctl ABI once in source/include/ps5/net_ctl.h, add onion_net_get_ip_address to libonion_platform with an explicit buffer-size contract, and keep util's not_connected latch in util where it belongs. Cover the status mapping, the placeholder length and buffer validation with host tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
OnionHEN — source tree
This directory is the CMake project for OnionHEN, a community continuation of etaHEN (LightningMods), licensed under GPLv3.
OnionHEN is based on etaHEN’s open-source release. See the root README for project goals, credits to GoldHEN and etaHEN, and full documentation.
Layout
| Path | Description |
|---|---|
bootstrapper/ |
Main payload bootstrapper |
daemon/ |
Main daemon |
util/ |
Utility daemon (cheats, IPC, …) |
shellui/ |
Toolbox / ShellUI hooks |
unpacker/ |
Payload unpacker |
libhijacker/, libNineS/, libNidResolver/ |
Internal static libs |
include/ |
Shared headers |
common/ |
Shared low-level implementations |
platform/ps5/stubs/ |
PS5 system-library link stubs |
External source and prebuilt dependencies live in the repository-level
third_party/ directory. Downloaded dependency blobs are
cached under .cache/dependencies/; they are never stored in source/.
Repository-side generators and build helpers live in ../tools/.
Build
Requires a Prospero / PS5 payload SDK (PS5_PAYLOAD_SDK) and clang targeting x86_64-sie-ps5.
Full pipeline (preferred) from the repo root:
export PS5_PAYLOAD_SDK=/path/to/ps5-payload-sdk
./scripts/build.sh
Stages external embeds, then shellui → daemon/util → bootstrapper → unpacker.
See ../third_party/README.md and
./scripts/build.sh --help.
Manual CMake:
./scripts/ps5_cmake.sh -S source -B build -G Ninja -DV_FW=0x3000000
cmake --build build
Build products go under build/bin/ and build/lib/ (repo root; gitignored).
Further reading
- Project overview & credits:
../README.md - Writeups:
../docs/ - Upstream lineage: etaHEN · GoldHEN