%% 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). %% sys/socket.h -define(AF_UNSPEC, 0). -define(AF_INET, 2). -define(AF_LINK, 18). -define(AF_INET6, 31). -define(SOCK_RAW, 3). -define(PF_ROUTE, 17). %% net/route.h -define(RTM_VERSION, 5). -define(RTM_ADD, 16#1). % add route -define(RTM_DELETE, 16#2). % delete route -define(RTM_CHANGE, 16#3). % change metrics or flags -define(RTM_GET, 16#4). % 1 report metrics -define(RTM_LOSING, 16#5). % 1 kernel suspects partitionning -define(RTM_REDIRECT, 16#6). % 1 told to use different route -define(RTM_MISS, 16#7). % 1 lookup failed on this address -define(RTM_LOCK, 16#8). % 1 fix specified metrics -define(RTM_RESOLVE, 16#b). % 1 req to resolve dst to LL addr -define(RTM_NEWADDR, 16#c). % 2 address being added to iface -define(RTM_DELADDR, 16#d). % 2 address being removed from iface -define(RTM_IFINFO, 16#e). % 3 iface going up/down -define(RTM_NEWMADDR, 16#f). % 4 mcast group membership being added -define(RTM_DELMADDR, 16#10). % 4mcast group membership being deleted -define(RTM_IFANNOUNCE, 16#11). % 5 iface arrival/departure -define(RTM_IEEE80211, 16#12). % 5 IEEE80211 wireless event -define(RTM, #{?RTM_ADD => add, ?RTM_DELETE => delete, ?RTM_CHANGE => change, ?RTM_GET => get, ?RTM_LOSING => losing, ?RTM_REDIRECT => redirect, ?RTM_MISS => miss, ?RTM_LOCK => lock, ?RTM_RESOLVE => resolve, ?RTM_NEWADDR => newaddr, ?RTM_DELADDR => deladdr, ?RTM_IFINFO => ifinfo, ?RTM_NEWMADDR => newmaddr, ?RTM_DELMADDR => delmaddr, ?RTM_IFANNOUNCE => ifannounce, ?RTM_IEEE80211 => ieee80211}). -define(RT_MSGHDRS, [?RTM_ADD, ?RTM_DELETE, ?RTM_CHANGE, ?RTM_GET, ?RTM_LOSING, ?RTM_REDIRECT, ?RTM_MISS, ?RTM_LOCK, ?RTM_RESOLVE]). -define(IFA_MSGHDRS, [?RTM_NEWADDR, ?RTM_DELADDR]). -define(IF_MSGHDRS, [?RTM_IFINFO]). -define(IFMA_MSGHDRS, [?RTM_NEWMADDR, ?RTM_DELMADDR]). -define(IF_ANNOUNCEMSGHDRS, [?RTM_IFANNOUNCE, ?RTM_IEEE80211]). % Bitmask values for flags -define(RTF_UP, 16#1). % route usable -define(RTF_GATEWAY, 16#2). % destination is a gateway -define(RTF_HOST, 16#4). % host entry -define(RTF_REJECT, 16#8). % host or net unreachable -define(RTF_DYNAMIC, 16#10). % created dynamically (by redirect) -define(RTF_MODIFIED, 16#20). % modified dynamically (by redirect) -define(RTF_DONE, 16#40). % message confirmed -define(RTF_DELCLONE, 16#80). % unused, was RTF_DELCLONE -define(RTF_CLONING, 16#100). % unused, was RTF_CLONING -define(RTF_XRESOLVE, 16#200). % external daemon resolves name -define(RTF_LLINFO, 16#400). % deprecated -define(RTF_LLDATA, 16#400). % used by apps to add/del L2 entries -define(RTF_STATIC, 16#800). % manually added -define(RTF_BLACKHOLE, 16#1000). % just discard pkts -define(RTF_PROTO2, 16#4000). % protocole specific routing flag -define(RTF_PROTO1, 16#8000). % protocol specific routing flag -define(RTF_PRCLONING, 16#10000). % deprecated -define(RTF_WASCLONED, 16#20000). % deprecated -define(RTF_PROTO3, 16#40000). % protocol specific routing flag -define(RTF_FIXEDMTU, 16#80000). % mtu was explicitly specified -define(RTF_PINNED, 16#100000). % route is immutable -define(RTF_LOCAL, 16#200000). % route represents a local address -define(RTF_BROADCAST, 16#400000). % route represents a bcast address -define(RTF_MULTICAST, 16#800000). % route represents a mcast address -define(RTF_STICKY, 16#10000000). % always route dst->src -define(RTF_GWFLAG_COMPAT, 16#80000000). % compatibility bit for interacting with existing routing apps (?) -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_LLINFO, llinfo}, {?RTF_LLDATA, lldata}, {?RTF_STATIC, static}, {?RTF_BLACKHOLE, blackhole}, {?RTF_PROTO2, proto2}, {?RTF_PROTO1, proto1}, {?RTF_PRCLONING, prcloning}, {?RTF_WASCLONED, wascloned}, {?RTF_PROTO3, proto3}, {?RTF_FIXEDMTU, fixed_mtu}, {?RTF_PINNED, pinned}, {?RTF_LOCAL, local}, {?RTF_BROADCAST, broadcast}, {?RTF_MULTICAST, multicast}, {?RTF_STICKY, sticky}, {?RTF_GWFLAG_COMPAT, gw_flag_compat}]). -define(RTF_CAN_CHANGE, [proto1, proto2, proto3, blackhole, reject, static, sticky]). % fib_ nexthob info flags -define(NHF_MULTIPATH, 16#0008). % Nexhop is a nexthop group -define(NFH_REJECT, 16#0010). % RTF_REJECT -define(NFH_BLACKHOLE, 16#0020). % RTF_BLACKHOLE -define(NFH_REDIRECT, 16#0040). % RTF_DYNAMIC|RTF_MODIFIED -define(NHF_DEFAULT, 16#0080). % Default route -define(NHF_BROADCAST, 16#0100). % RTF_BROADCAST -define(NHF_GATEWAY, 16#0200). % RTF_GATEWAY -define(NHF_HOST, 16#0400). % RTF_HOST -define(NHF, [{?NHF_MULTIPATH, multipath}, {?NHF_REJECT, reject}, {?NHF_BLACKHOLE, blackhole}, {?NHF_REDIRECT, redirect}, {?NHF_DEFAULT, default}, {?NHF_BROADCAST, broadcast}, {?NHF_GATEWAY, gateway}, {?NHF_HOST, host}]). % nexthop request flags -define(NHR_NONE, 16#00). % empty flags field -define(NHR_REF, 16#01). % reference nexhop -define(NHR_NODEFAULT, 16#02). % uRPF: do not consider default route % control plane route request flags -define(NHR_COPY, 16#100). % copy rte data -define(NHR_UNLOCKED, 16#200). % do not lock table -define(NHR, [{?NHR_NONE, none}, {?NHR_REF, reference}, {?NHR_NODEFAULT, no_default}, {?NHR_COPY, copy}, {?NHR_UNLOCKED, unlocked}]). % Bitmask values for rtm_inits and rmx_locks. -define(RTV_MTU, 16#1). -define(RTV_HOPCOUNT, 16#2). -define(RTV_EXPIRE, 16#4). -define(RTV_RPIPE, 16#8). -define(RTV_SPIPE, 16#10). -define(RTV_SSTHRESH, 16#20). -define(RTV_RTT, 16#40). -define(RTV_RTTVAR, 16#80). -define(RTV_WEIGHT, 16#100). -define(RTV, [{?RTV_MTU, mtu}, {?RTV_HOPCOUNT, hopcount}, {?RTV_EXPIRE, expire}, {?RTV_RPIPE, rpipe}, {?RTV_SPIPE, spipe}, {?RTV_SSTHRESH, ssthresh}, {?RTV_RTT, rtt}, {?RTV_RTTVAR, rttvar}, {?RTV_WEIGHT, weight}]). % Bitmask values for rtm_addrs. -define(RTA_DST, 16#1). -define(RTA_GATEWAY, 16#2). -define(RTA_NETMASK, 16#4). -define(RTA_GENMASK, 16#8). -define(RTA_IFP, 16#10). -define(RTA_IFA, 16#20). -define(RTA_AUTHOR, 16#40). -define(RTA_BRD, 16#80). -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}]). % rt_msghdr -record(freebsd_rt, {type, flags, addrs, pid, seq, errno, fmask, metrics_init, %% metrics metrics_lock, mtu, hopcount, expire, recvpipe, sendpipe, ssthresh, rtt, rttvar, pksent, weight, nhidx, filler, %% addrs destination, netmask, gateway, genmask, ifp, ifp_index, ifa, author, brd}). % sockaddr_dl -record(freebsd_link, {index, type, name, address, selector}). % net/if.h %% if flags -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_KNOWSEPOCH, 16#20). -define(IFF_DRV_RUNNING, 16#40). -define(IFF_NOARP, 16#80). -define(IFF_PROMISC, 16#100). -define(IFF_ALLMULTI, 16#200). -define(IFF_DRV_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_ALTPHYS, IFF_LINK2). -define(IFF_MULTICAST, 16#8000). -define(IFF_CANTCONFIG, 16#10000). -define(IFF_PPROMISC, 16#20000). -define(IFF_MONITOR, 16#40000). -define(IFF_STATICARP, 16#80000). -define(IFF_DYING, 16#200000). -define(IFF_RENAMING, 16#400000). -define(IFF, [{?IFF_UP, up}, {?IFF_BROADCAST, broadcast}, {?IFF_DEBUG, debug}, {?IFF_LOOPBACK, loopback}, {?IFF_POINTOPOINT, pointopoint}, {?IFF_KNOWSEPOCH, knowsepoch}, {?IFF_DRV_RUNNING, drv_running}, {?IFF_NOARP, noarp}, {?IFF_PROMISC, promisc}, {?IFF_ALLMULTI, allmulti}, {?IFF_DRV_OACTIVE, drv_oactive}, {?IFF_SIMPLEX, simplex}, {?IFF_LINK0, link0}, {?IFF_LINK1, link1}, {?IFF_LINK2, link2}, {?IFF_MULTICAST, multicast}, {?IFF_CANTCONFIG, cantconfig}, {?IFF_PPROMISC, ppromisc}, {?IFF_MONITOR, monitor}, {?IFF_STATICARP, staticarp}, {?IFF_DYING, dying}, {?IFF_RENAMING, renaming}]). -define(LINK_STATE_UNKNOWN, 0). -define(LINK_STATE_DOWN, 1). -define(LINK_STATE_UP, 2). -define(LINK_STATE, #{?LINK_STATE_UNKNOWN => unknown, ?LINK_STATE_DOWN => down, ?LINK_STATE_UP => up}). % if_msghdr + ifm_data -record(freebsd_if, {index, addrs, flags, % if_data: generic interface information type, physical, addrlen, hdrlen, linkstate, vhid, datalen, mtu, metric, baudrate, % if_data: volatile statistics ipackets, ierrors, opackets, oerrors, collisions, ibytes, obytes, imcasts, omcasts, iqdrops, oqdrops, noproto, hwassist }). % ifa_msghdr -record(freebsd_ifa, {addrs, flags, index, metric}). % ifma_msghdr -record(freebsd_ifma, {addrs, flags, index}). % ifannounce_msghdr -record(freebsd_ifannounce, {index, name, announcement}). %% 0 Arrival 1 departure