-
-
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 aros-wiki-arostcp.md. For Miami compatibility library, see Miami TODO.
Last updated against codebase: March 2026.
Primary source file: api/amiga_roadshow.c (2105 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 (stub), endnetent (stub), getnetent (stub), setprotoent (stub), getprotoent (real -- in amiga_ndbent.c), setservent (stub), endservent (stub), getservent (stub).
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 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)
- Implement remaining network database enumeration (
setnetent/endnetent/getnetent,setservent/endservent/getservent)
| 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 |