-define(TABLE, 1). %% sys/types.h -define(U_CHAR, 8/little-unsigned-integer). -define(U_SHORT, 16/little-unsigned-integer). -define(U_LONG, 64/little-unsigned-integer). -define(INT, 32/little-signed-integer). -define(PID_T, ?INT). -define(UINT8, 8/little-unsigned-integer). -define(UINT16, 16/little-unsigned-integer). -define(UINT32, 32/little-unsigned-integer). -define(UINT64, 64/little-unsigned-integer). %% usr/include/sys/socket.h -define(AF_UNSPEC, 0). -define(AF_INET, 2). -define(AF_LINK, 18). -define(AF_INET6, 30). -define(SOCK_RAW, 3). -define(PF_ROUTE, 17). %% Constants and structs are mostly defined in `net/route.h`. %% /Library/Developer/CommandLineTools/SDKs/MacOSX12.0.sdk/usr/include/net/route.h -define(RTM_VERSION, 5). %% PF_ROUTE messages types -define(RTM_ADD, 1). -define(RTM_DELETE, 2). -define(RTM_CHANGE, 3). -define(RTM_GET, 4). -define(RTM_REDIRECT, 6). -define(RTM_MISS, 7). -define(RTM_RESOLVE, 16#b). -define(RTM_NEWADDR, 16#c). -define(RTM_DELADDR, 16#d). -define(RTM_IFINFO, 16#e). -define(RTM_NEWMADDR, 16#f). -define(RTM_DELMADDR, 16#10). -define(RTM_IFINFO2, 16#12). -define(RTM_NEWMADDR2, 16#13). -define(RTM_GET2, 16#14). -define(RTM, #{ ?RTM_ADD => add, ?RTM_DELETE => delete, ?RTM_CHANGE => change, ?RTM_GET => get, ?RTM_REDIRECT => redirect, ?RTM_MISS => miss, ?RTM_RESOLVE => resolve, ?RTM_NEWADDR => newaddr, ?RTM_DELADDR => deladdr, ?RTM_IFINFO => ifinfo, ?RTM_NEWMADDR => newmaddr, ?RTM_DELMADDR => delmaddr, ?RTM_IFINFO2 => ifinfo2, ?RTM_NEWMADDR2 => newmaddr2, ?RTM_GET2 => get2 }). %% Bitmask values for flags -define(RTF_UP, 1). -define(RTF_GATEWAY, 2). -define(RTF_HOST, 4). -define(RTF_REJECT, 8). -define(RTF_DYNAMIC, 16#10). -define(RTF_MODIFIED, 16#20). -define(RTF_DONE, 16#40). -define(RTF_DELCLONE, 16#80). -define(RTF_CLONING, 16#100). -define(RTF_XRESOLVE, 16#200). -define(RTF_LLDATA, 16#400). -define(RTF_STATIC, 16#800). -define(RTF_BLACKHOLE, 16#1000). -define(RTF_NOIFREF, 16#2000). -define(RTF_PROTO2, 16#4000). -define(RTF_PROTO1, 16#8000). -define(RTF_PRCLONING, 16#10000). -define(RTF_WASCLONED, 16#20000). -define(RTF_PROTO3, 16#40000). -define(RTF_PINNED, 16#100000). -define(RTF_LOCAL, 16#200000). -define(RTF_BROADCAST, 16#400000). -define(RTF_MULTICAST, 16#800000). -define(RTF_IFSCOPE, 16#1000000). -define(RTF_CONDEMNED, 16#2000000). -define(RTF_IFREF, 16#4000000). -define(RTF_PROXY, 16#8000000). -define(RTF_ROUTER, 16#10000000). -define(RTF_DEAD, 16#20000000). -define(RTF_GLOBAL, 16#40000000). -define(RTF, [{?RTF_UP, up}, {?RTF_GATEWAY, gateway}, {?RTF_HOST, host}, {?RTF_REJECT, reject}, {?RTF_DYNAMIC, dynamic}, {?RTF_MODIFIED, modified}, {?RTF_DONE, done}, {?RTF_DELCLONE, delclone}, {?RTF_CLONING, cloning}, {?RTF_XRESOLVE, xresolve}, {?RTF_LLDATA, lldata}, {?RTF_STATIC, static}, {?RTF_BLACKHOLE, blackhole}, {?RTF_NOIFREF, noifref}, {?RTF_PROTO2, proto2}, {?RTF_PROTO1, proto1}, {?RTF_PRCLONING, prcloning}, {?RTF_WASCLONED, wascloned}, {?RTF_PROTO3, proto3}, {?RTF_PINNED, pinned}, {?RTF_LOCAL, local}, {?RTF_BROADCAST, broadcast}, {?RTF_MULTICAST, multicast}, {?RTF_IFSCOPE, ifscope}, {?RTF_CONDEMNED, condemned}, {?RTF_IFREF, ifref}, {?RTF_PROXY, proxy}, {?RTF_ROUTER, router}, {?RTF_DEAD, dead}, {?RTF_GLOBAL, global}]). %% Bitmask values, rtm_inits and rtm_locks -define(RTV_MTU, 1). -define(RTV_HOPCOUNT, 2). -define(RTV_EXPIRE, 4). -define(RTV_RPIPE, 8). -define(RTV_SPIPE, 16#10). -define(RTV_SSTHRESH, 16#20). -define(RTV_RTT, 16#40). -define(RTV_RTTVAR, 16#80). -define(RTV, [{?RTV_MTU, mtu}, {?RTV_HOPCOUNT, hopcount}, {?RTV_EXPIRE, expire}, {?RTV_RPIPE, recvpipe}, {?RTV_SPIPE, sendpipe}, {?RTV_SSTHRESH, ssthresh}, {?RTV_RTT, rtt}, {?RTV_RTTVAR, rttvar}]). %% Bitmask values for rtm_addrs -define(RTA_DST, 1). % destination sockaddr present -define(RTA_GATEWAY, 2). % gateway sockaddr present -define(RTA_NETMASK, 4). % netmask sockaddr present -define(RTA_GENMASK, 8). % cloning mask sockaddr present -define(RTA_IFP, 16#10). % interface name sockaddr present -define(RTA_IFA, 16#20). % interface addr sockaddr present -define(RTA_AUTHOR, 16#40). % sockaddr for addr of redirect -define(RTA_BRD, 16#80). % for NEWADDR, broadcast or p-p dest addr -define(RTA, [{?RTA_DST, destination}, {?RTA_GATEWAY, gateway}, {?RTA_NETMASK, netmask}, {?RTA_GENMASK, genmask}, {?RTA_IFP, ifp}, {?RTA_IFA, ifa}, {?RTA_AUTHOR, author}, {?RTA_BRD, brd}]). -record(macos_rt, {type, % Message type, atom flags, % Route flags addrs, % Addresses list pid, % Originating pid seq, % user data errno, % error number refcount, % reference count (msghdr2) parent_flags, % flags of the parent route (msghdr2) use, % documented as: "from rentry" % Metrics metrics_init, % metrics that are initializing metrics_lock, % metrics that are locked mtu, % mtu hopcount, % max hops expected expire, % lifetime for route recvpipe, % inbound delay-bandwith product sendpipe, % outbound delay-bandwith product ssthresh, % outbound gateway buffer limit rtt, % estimated round trip time rttvar, % estimated rtt variance pksent, % packets sent using this route state, % route state filler, % "will be used for TCP's peer-MSS cache" % Addresses destination, % Destination gateway, % Gateway netmask, % netmask clonemask, % (C: genmask) cloning mask ifp, % interface name ifp_index, % (C: index) Scope for associated ifp, if present ifa, % interface address author, % author of redirect brd % (only for type=newaddr) broadcast or p-p destination address }). -record(macos_link, {index, % system index for interface type, % interface type name, % interface name address, % link level address selector % link layer selector, }). %% net/if.h -define(IFF_UP, 16#1). -define(IFF_BROADCAST, 16#2). -define(IFF_DEBUG, 16#4). -define(IFF_LOOPBACK, 16#8). -define(IFF_POINTOPOINT, 16#10). -define(IFF_NOTRAILERS, 16#20). -define(IFF_RUNNING, 16#40). -define(IFF_NOARP, 16#80). -define(IFF_PROMISC, 16#100). -define(IFF_ALLMULTI, 16#200). -define(IFF_OACTIVE, 16#400). -define(IFF_SIMPLEX, 16#800). -define(IFF_LINK0, 16#1000). -define(IFF_LINK1, 16#2000). -define(IFF_LINK2, 16#4000). -define(IFF_MULTICAST, 16#8000). -define(IFF, [{?IFF_UP, up}, {?IFF_BROADCAST, broadcast}, {?IFF_DEBUG, debug}, {?IFF_LOOPBACK, loopback}, {?IFF_POINTOPOINT, pointopoint}, {?IFF_NOTRAILERS, notrailers}, {?IFF_RUNNING, running}, {?IFF_NOARP, noarp}, {?IFF_PROMISC, promisc}, {?IFF_ALLMULTI, allmulti}, {?IFF_OACTIVE, oactive}, {?IFF_SIMPLEX, simplex}, {?IFF_LINK0, link0}, {?IFF_LINK1, link1}, {?IFF_LINK2, link2}, {?IFF_MULTICAST, multicast}]). -record(macos_if, {type, flags, addrs, index, typelen, physical, addrlen, hdrlen, recvquota, xmitquota, mtu, metric, baudrate, ipackets, ierrors, opackets, oerrors, ibytes, obytes, imcasts, omcasts, iqdrops, noproto, recvtiming, xmittiming}). -record(macos_ifa, {type, flags, addrs, index, metric, netmask, ifp, ifa}). -record(macos_ifma, {type, flags, addrs, index, refcount, netmask, ifp, ifa}).