-
-
Notifications
You must be signed in to change notification settings - Fork 89
AROSTCP
This is a checklist of items that are not implemented / stubbed / missing / broken.
All are ENOSYS stubs; no kernel BPF engine or hook points exist.
-
bpf_open() -
bpf_close() -
bpf_read() -
bpf_write() -
bpf_set_notify_mask() -
bpf_set_interrupt_mask() -
bpf_ioctl() -
bpf_data_waiting()
Work required (kernel/user boundary):
- Add BPF VM/interpreter in kernel
- Add attach/detach hooks in network RX/TX paths
- Maintain per-interface filter lists and dispatch captured frames to readers
- Implement notify/interrupt semantics required by API
All are ENOSYS stubs; routing table exists internally but is not exposed.
-
AddRouteTagList() -
DeleteRouteTagList() -
ChangeRouteTagList()(undocumented in spec but present) -
FreeRouteInfo() -
GetRouteInfo()(currently returns NULL)
Work required:
- TagItem-based wrapper over internal routing table
- Optional: implement RTM-style messaging support (BSD 4.4-like)
All are ENOSYS stubs; AROSTCP currently relies on IoctlSocket() (IPv4) and db/interfaces at startup.
-
AddInterfaceTagList() -
ConfigureInterfaceTagList() -
QueryInterfaceTagList() -
ObtainInterfaceList()(currently returns NULL) -
ReleaseInterfaceList() -
BeginInterfaceConfig() -
AbortInterfaceConfig() -
CreateAddrAllocMessageA() -
DeleteAddrAllocMessage() -
RemoveInterface()
Work required:
- Dynamic SANA-II device open/close and interface lifecycle mgmt
- TagItem parsing and validation
- Runtime address allocation / configuration hooks
All are ENOSYS stubs.
-
AddNetMonitorHookTagList() -
RemoveNetMonitorHook() -
GetNetworkStatistics()
Work required:
- Stats wrapper over existing
if_datacounters (low effort) - Monitor hook callback injection points into RX/TX paths (medium effort)
All are ENOSYS stubs; resolver reads db/nameservers file today.
-
AddDomainNameServer() -
RemoveDomainNameServer() -
ObtainDomainNameServerList()(currently returns NULL) -
ReleaseDomainNameServerList() -
GetDefaultDomainName() -
SetDefaultDomainName()
Work required:
- Maintain in-memory resolver configuration alongside file-based list
- Provide list obtain/release semantics expected by API
ip6_ctloutput() silently accepts all options but does nothing.
-
IPV6_JOIN_GROUP— join IPv6 multicast group -
IPV6_LEAVE_GROUP— leave IPv6 multicast group -
IPV6_MULTICAST_IF— select multicast output interface -
IPV6_MULTICAST_HOPS— set multicast hop limit -
IPV6_MULTICAST_LOOP— multicast loopback enable/disable -
IPV6_V6ONLY— restrict socket to IPv6-only -
IPV6_RECVPKTINFO— receive destination address info -
IPV6_TCLASS— traffic class -
IPV6_UNICAST_HOPS— set unicast hop limit -
IPV6_HOPLIMIT— get/set hop limit
Work required:
- Implement real
ip6_ctloutput()behavior and backing kernel state
Multicast joins are discarded; packets are not delivered to sockets.
- Per-socket IPv6 group membership list
- Per-interface multicast group table
- MLD (Multicast Listener Discovery) implementation
- Input demux/delivery to sockets for multicast destinations
IPv4 ioctls are implemented; IPv6 equivalents are not.
-
SIOCGIFADDR_IN6 -
SIOCAIFADDR_IN6 -
SIOCDIFADDR_IN6 -
SIOCGLIFADDR
Work required:
- Implement IPv6 address enumeration and configuration via ioctl
Not implemented or incomplete:
-
MiamiSysCtl()— stub/error -
MiamiGetHardwareLen()— returns 0 -
MiamiSetSocksConn()— error -
MiamiOpenSSL()/MiamiCloseSSL()— error -
sockatmark()—ENOSYS -
MiamiPFAddHook()/MiamiPFRemoveHook()— partial interception (coverage incomplete)
These exist in bsdsocket.doc.txt but have no implementation in AROSTCP.
-
ProcessIsServer() -
ObtainServerSocket() -
ChangeRoadshowData() -
ObtainRoadshowData() -
ReleaseRoadshowData()
Work required:
- Add entry points to avoid link-time failures/null vectors
- Implement minimal viable semantics (RoadshowData likely needs compatibility shim)
Spec documents socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC); AROSTCP has no PF_ROUTE domain registered.
- Register PF_ROUTE domain
- Implement RTM_* routing messages (RTM_ADD/DELETE/CHANGE/GET/etc.)
- Plumb routing table change notifications to listeners
Not an “unimplemented function”, but notable difference vs common Linux UDP semantics:
-
UDP port sharing requires
SO_REUSEPORTon both sockets;SO_REUSEADDRalone does not enable shared binds. -
Decide whether to:
- Keep behavior and document it, or
- Adjust PCB/bind logic for Linux-like UDP reuse semantics
- Implement IPv6 socket options (
ip6_ctloutput, backing state) - Implement DNS server management API (Add/Remove/List/Default)
- Implement IPv6 multicast (membership tables + MLD + delivery)
- Implement route management API (TagList wrapper; optional RTM plumbing)
- Implement PF_ROUTE socket domain + RTM messaging
- Implement interface management API (TagList; dynamic SANA-II lifecycle)
- Implement network monitoring hooks + statistics wrapper
- Implement BPF (kernel VM + hooks + per-interface filters)
- Add missing spec functions (
ProcessIsServer,ObtainServerSocket, RoadshowData*) - Implement IPv6 ioctls (
SIOCGIFADDR_IN6,SIOCAIFADDR_IN6, etc.)