-
-
Notifications
You must be signed in to change notification settings - Fork 89
roadshow
This document covers the Roadshow bsdsocket.library extended API (slots 51-138): BPF, routing, interface management, DNS, mbuf access, address conversion, name resolution, and more.
For AmiTCP core stack and protocols, see AROSTCP TODO. For Miami compatibility library, see Miami TODO.
Last updated against codebase: March 2026.
Primary source file: api/amiga_roadshow.c (2042 lines, 71 AROS_LH functions)
Function table: api/amiga_libtables.c (slots 51-138 in UserLibrary_funcTable)
Prototypes: clib/bsdsocket_protos.h (AROS_LP macros for all functions)
The library dispatch table contains 138 slots (plus sentinel). All slots have entry points -- no null vectors remain for documented functions.
Legacy Miami reserved slots.
bpf_open, bpf_close, bpf_read, bpf_write, bpf_set_notify_mask, bpf_set_interrupt_mask, bpf_ioctl, bpf_data_waiting.
AddRouteTagList, DeleteRouteTagList, ChangeRouteTagList, FreeRouteInfo, GetRouteInfo.
AddInterfaceTagList (stub), ConfigureInterfaceTagList (stub), ReleaseInterfaceList (stub), ObtainInterfaceList (stub), QueryInterfaceTagList (real -- in amiga_netstat.c), CreateAddrAllocMessageA (stub), DeleteAddrAllocMessage (stub), BeginInterfaceConfig (stub), AbortInterfaceConfig (stub).
AddNetMonitorHookTagList, RemoveNetMonitorHook, GetNetworkStatistics.
AddDomainNameServer (real), RemoveDomainNameServer (real), ReleaseDomainNameServerList (real), ObtainDomainNameServerList (real), setnetent (real -- in amiga_ndbent.c), endnetent (real -- in amiga_ndbent.c), getnetent (real -- in amiga_ndbent.c), setprotoent (real), getprotoent (real -- in amiga_ndbent.c), setservent (real -- in amiga_ndbent.c), endservent (real -- in amiga_ndbent.c), getservent (real -- in amiga_ndbent.c).
inet_aton (real -- in amiga_libcalls.c).
inet_ntop (wrapper to __inet_ntop), inet_pton (wrapper to __inet_pton).
In_LocalAddr (wrapper to in_localaddr), In_CanForward (wrapper to in_canforward).
mbuf_copym, mbuf_copydata, mbuf_copyback, mbuf_free, mbuf_freem, mbuf_get, mbuf_gethdr, mbuf_prepend, mbuf_adj, mbuf_cat, mbuf_pullup.
ProcessIsServer (returns FALSE), ObtainServerSocket (returns -1/ENOSYS).
GetDefaultDomainName (real), SetDefaultDomainName (no-op).
ObtainRoadshowData (ENOSYS), ReleaseRoadshowData (no-op), ChangeRoadshowData (ENOSYS).
RemoveInterface (returns ENOSYS).
gethostbyname_r (ENOSYS), gethostbyaddr_r (ENOSYS).
ipf_open, ipf_close, ipf_read, ipf_write, ipf_ioctl, ipf_set_notify_mask, ipf_set_interrupt_mask -- all ENOSYS.
freeaddrinfo (real), getaddrinfo (real), gai_strerror (real), getnameinfo (real).
Full kernel BPF engine with RX/TX hook points and Roadshow API layer.
-
bpf_open()-- allocates & initializes BPF descriptor -
bpf_close()-- closes descriptor and frees resources -
bpf_read()-- reads captured packets from hold buffer -
bpf_write()-- transmits raw packets via interface -
bpf_set_notify_mask()-- sets EXEC signal notification -
bpf_set_interrupt_mask()-- sets interrupt mask -
bpf_ioctl()-- handles 16+ ioctl commands (BIOCGBLEN, BIOCSBLEN, BIOCSETF, BIOCFLUSH, BIOCPROMISC, BIOCGDLT, BIOCSETIF, BIOCGSTATS, BIOCVERSION, etc.) -
bpf_data_waiting()-- returns bytes available for reading
Kernel infrastructure:
- BPF VM/interpreter (
net/bpf_filter.c-- full instruction set, 401 lines) - Attach/detach hooks in SANA-II RX/TX paths (
net/if_sana.c) - Per-interface filter lists and frame dispatch (
net/bpf.c, 493 lines) - Notify/interrupt signal semantics
Full TagItem-based route API with BSD 4.4 routing socket support.
-
AddRouteTagList()-- parses tags, callsrtrequest(RTM_ADD, ...) -
DeleteRouteTagList()-- parses tags, callsrtrequest(RTM_DELETE, ...) -
ChangeRouteTagList()-- atomic delete+re-add under splnet -
FreeRouteInfo()-- frees allocated route info buffer viabsd_free() -
GetRouteInfo()-- two-pass radix walk, returnsrt_msghdrarray with filtering
Kernel infrastructure:
- PF_ROUTE domain registered (
net/rtsock.c, 886 lines) - RTM_ADD / RTM_DELETE / RTM_GET / RTM_CHANGE / RTM_LOCK messages
- RTM_MISS / RTM_RESOLVE / RTM_REDIRECT / RTM_IFINFO / RTM_NEWADDR / RTM_DELADDR notifications
Most are stubs; QueryInterfaceTagList and RemoveInterface entry points exist.
-
AddInterfaceTagList()-- STUB (returns -1, ENOSYS) -
ConfigureInterfaceTagList()-- STUB (returns -1, ENOSYS) -
QueryInterfaceTagList()-- IMPLEMENTED (full implementation inamiga_netstat.c) -
ObtainInterfaceList()-- STUB (returns NULL) -
ReleaseInterfaceList()-- STUB -
BeginInterfaceConfig()-- STUB -
AbortInterfaceConfig()-- STUB -
CreateAddrAllocMessageA()-- STUB (returns 0) -
DeleteAddrAllocMessage()-- STUB -
RemoveInterface()-- STUB (entry point present, returns ENOSYS)
Work remaining:
- Dynamic SANA-II device open/close and interface lifecycle management
- TagItem parsing for Add/Configure
- Runtime address allocation / configuration hooks
- ObtainInterfaceList / ReleaseInterfaceList list management
All are stubs.
-
AddNetMonitorHookTagList()-- STUB (returns -1, ENOSYS) -
RemoveNetMonitorHook()-- STUB -
GetNetworkStatistics()-- STUB (returns -1, ENOSYS)
Work required:
- Stats wrapper over existing
if_datacounters (low effort) - Monitor hook callback injection points into RX/TX paths (medium effort)
Runtime add/remove/list and default domain name API are all present.
-
AddDomainNameServer()-- IMPLEMENTED (parses address, adds to DynDB.dyn_NameServers) -
RemoveDomainNameServer()-- IMPLEMENTED (finds and removes from list) -
ObtainDomainNameServerList()-- IMPLEMENTED (returns populated list from static + dynamic entries) -
ReleaseDomainNameServerList()-- IMPLEMENTED (walks list, frees all nodes) -
GetDefaultDomainName()-- IMPLEMENTED (reads first domain from NDB->ndb_Domains) -
SetDefaultDomainName()-- NO-OP (entry point present, but does nothing -- would need domain list rebuild)
All nine enumeration functions are fully implemented in api/amiga_ndbent.c. Each triplet follows the same pattern: acquire semaphore, iterate the NDB linked list, release semaphore.
Network entries (slots 90-92):
-
setnetent()-- resets iteration to start ofNDB->ndb_Networks -
endnetent()-- clears iterator, releases semaphore -
getnetent()-- returns nextstruct netentfrom network database
Protocol entries (slots 93-94 + existing getprotoent):
-
setprotoent()-- resets iteration to start ofNDB->ndb_Protocols -
endprotoent()-- clears iterator, releases semaphore -
getprotoent()-- returns nextstruct protoentfrom protocol database
Service entries (slots 95-97):
-
setservent()-- resets iteration to start ofNDB->ndb_Services -
endservent()-- clears iterator, releases semaphore -
getservent()-- returns nextstruct serventfrom service database
All have entry points and delegate to internal kernel functions.
-
inet_aton()-- delegates to__inet_aton(inamiga_libcalls.c) -
inet_ntop()-- delegates to__inet_ntop(ininet_ntop.c) -
inet_pton()-- delegates to__inet_pton(ininet_ntop.c) -
In_LocalAddr()-- delegates toin_localaddr()kernel function -
In_CanForward()-- delegates toin_canforward()kernel function
All 11 mbuf functions delegate to kernel m_* equivalents with simplified Roadshow calling conventions (no wait/type parameters).
-
mbuf_copym()--m_copym(buffer, offset, length, M_DONTWAIT) -
mbuf_copydata()--m_copydata(buffer, offset, length, dest) -
mbuf_copyback()--m_copyback(buffer, offset, length, src) -
mbuf_free()--m_free(buffer) -
mbuf_freem()--m_freem(buffer) -
mbuf_get()--m_get(M_DONTWAIT, MT_DATA) -
mbuf_gethdr()--m_gethdr(M_DONTWAIT, MT_DATA) -
mbuf_prepend()--M_PREPEND(buffer, length, M_DONTWAIT) -
mbuf_adj()--m_adj(buffer, length) -
mbuf_cat()--m_cat(first, second) -
mbuf_pullup()--m_pullup(buffer, length)
Entry points exist but return error/no-op.
-
ProcessIsServer()-- STUB (always returns FALSE) -
ObtainServerSocket()-- STUB (returns -1, ENOSYS) -
ObtainRoadshowData()-- STUB (returns NULL, ENOSYS) -
ReleaseRoadshowData()-- NO-OP (accepts call, does nothing) -
ChangeRoadshowData()-- STUB (returns 0, ENOSYS)
-
gethostbyname_r()-- STUB (returns NULL, ENOSYS) -
gethostbyaddr_r()-- STUB (returns NULL, ENOSYS)
The IPF API is intentionally undocumented per Roadshow spec ("subject to change, intentionally not documented or otherwise supported by public source code"). All 7 functions return ENOSYS.
Note: The kernel-side packet filter framework (net/pfil.c, net/ipfilter.c) is fully implemented and accessible via MiamiPFAddHook/MiamiPFRemoveHook. The IPF user-space API stubs are a separate access path that has not been implemented.
-
ipf_open()-- STUB -
ipf_close()-- STUB -
ipf_read()-- STUB -
ipf_write()-- STUB -
ipf_ioctl()-- STUB -
ipf_set_notify_mask()-- STUB -
ipf_set_interrupt_mask()-- STUB
Full implementations with IPv4/IPv6 support, independent of Miami equivalents.
-
freeaddrinfo()-- walks addrinfo chain, frees all nodes -
getaddrinfo()-- 150+ line implementation with hints processing, hostname resolution, service lookup -
gai_strerror()-- returns static error strings for all EAI_* codes -
getnameinfo()-- 70+ line implementation with NI_NUMERICHOST, NI_NUMERICSERV, NI_NAMEREQD flags
- Implement real
SetDefaultDomainName()(currently no-op; would need domain list rebuild) - Implement interface management API (
AddInterfaceTagList,ConfigureInterfaceTagList,ObtainInterfaceList,RemoveInterface, etc.) - Implement network monitoring hooks + statistics wrapper (
GetNetworkStatistics,AddNetMonitorHookTagList) - Implement
ProcessIsServer()/ObtainServerSocket()(currently return FALSE/-1) - Implement RoadshowData API (
ObtainRoadshowData,ReleaseRoadshowData,ChangeRoadshowData) - Implement thread-safe resolvers (
gethostbyname_r,gethostbyaddr_r) - Implement IPF user-space API (if/when specification is finalized)
| Item | Status Change |
|---|---|
| BPF (all 8 API functions + kernel engine) | NOT IMPLEMENTED -> IMPLEMENTED |
| Route management (all 5 API functions) | NOT IMPLEMENTED -> IMPLEMENTED |
| PF_ROUTE routing socket + RTM messages | NOT IMPLEMENTED -> IMPLEMENTED |
| DNS server management (all 6 functions) | NOT IMPLEMENTED -> IMPLEMENTED (5 real + 1 no-op) |
QueryInterfaceTagList() |
NOT IMPLEMENTED -> IMPLEMENTED |
| Packet filter framework (pfil + ipfilter) | (not listed) -> IMPLEMENTED |
| Missing spec functions (5 functions) | NOT PRESENT -> ENTRY POINTS ADDED (stubs) |
RemoveInterface() |
NOT PRESENT -> ENTRY POINT ADDED (stub) |
| Roadshow slots 100-138 (39 entries) | NOT PRESENT -> ALL POPULATED |
| inet_ntop/inet_pton (Roadshow slots) | NOT PRESENT -> IMPLEMENTED |
| In_LocalAddr / In_CanForward | NOT PRESENT -> IMPLEMENTED |
| mbuf_* access API (11 functions) | NOT PRESENT -> IMPLEMENTED |
| getaddrinfo/getnameinfo family | NOT PRESENT -> IMPLEMENTED |
| GetDefaultDomainName | NOT PRESENT -> IMPLEMENTED |
| Network database enumeration (9 functions) | STUBS -> IMPLEMENTED (setnetent/endnetent/getnetent, setprotoent/endprotoent/getprotoent, setservent/endservent/getservent) |