1*c9945492SAndroid Build Coastguard Worker #include <stdint.h> 2*c9945492SAndroid Build Coastguard Worker 3*c9945492SAndroid Build Coastguard Worker /* linux/netlink.h */ 4*c9945492SAndroid Build Coastguard Worker 5*c9945492SAndroid Build Coastguard Worker #define NETLINK_ROUTE 0 6*c9945492SAndroid Build Coastguard Worker 7*c9945492SAndroid Build Coastguard Worker struct nlmsghdr { 8*c9945492SAndroid Build Coastguard Worker uint32_t nlmsg_len; 9*c9945492SAndroid Build Coastguard Worker uint16_t nlmsg_type; 10*c9945492SAndroid Build Coastguard Worker uint16_t nlmsg_flags; 11*c9945492SAndroid Build Coastguard Worker uint32_t nlmsg_seq; 12*c9945492SAndroid Build Coastguard Worker uint32_t nlmsg_pid; 13*c9945492SAndroid Build Coastguard Worker }; 14*c9945492SAndroid Build Coastguard Worker 15*c9945492SAndroid Build Coastguard Worker #define NLM_F_REQUEST 1 16*c9945492SAndroid Build Coastguard Worker #define NLM_F_MULTI 2 17*c9945492SAndroid Build Coastguard Worker #define NLM_F_ACK 4 18*c9945492SAndroid Build Coastguard Worker 19*c9945492SAndroid Build Coastguard Worker #define NLM_F_ROOT 0x100 20*c9945492SAndroid Build Coastguard Worker #define NLM_F_MATCH 0x200 21*c9945492SAndroid Build Coastguard Worker #define NLM_F_ATOMIC 0x400 22*c9945492SAndroid Build Coastguard Worker #define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH) 23*c9945492SAndroid Build Coastguard Worker 24*c9945492SAndroid Build Coastguard Worker #define NLMSG_NOOP 0x1 25*c9945492SAndroid Build Coastguard Worker #define NLMSG_ERROR 0x2 26*c9945492SAndroid Build Coastguard Worker #define NLMSG_DONE 0x3 27*c9945492SAndroid Build Coastguard Worker #define NLMSG_OVERRUN 0x4 28*c9945492SAndroid Build Coastguard Worker 29*c9945492SAndroid Build Coastguard Worker /* linux/rtnetlink.h */ 30*c9945492SAndroid Build Coastguard Worker 31*c9945492SAndroid Build Coastguard Worker #define RTM_NEWLINK 16 32*c9945492SAndroid Build Coastguard Worker #define RTM_GETLINK 18 33*c9945492SAndroid Build Coastguard Worker #define RTM_NEWADDR 20 34*c9945492SAndroid Build Coastguard Worker #define RTM_GETADDR 22 35*c9945492SAndroid Build Coastguard Worker 36*c9945492SAndroid Build Coastguard Worker struct rtattr { 37*c9945492SAndroid Build Coastguard Worker unsigned short rta_len; 38*c9945492SAndroid Build Coastguard Worker unsigned short rta_type; 39*c9945492SAndroid Build Coastguard Worker }; 40*c9945492SAndroid Build Coastguard Worker 41*c9945492SAndroid Build Coastguard Worker struct rtgenmsg { 42*c9945492SAndroid Build Coastguard Worker unsigned char rtgen_family; 43*c9945492SAndroid Build Coastguard Worker }; 44*c9945492SAndroid Build Coastguard Worker 45*c9945492SAndroid Build Coastguard Worker struct ifinfomsg { 46*c9945492SAndroid Build Coastguard Worker unsigned char ifi_family; 47*c9945492SAndroid Build Coastguard Worker unsigned char __ifi_pad; 48*c9945492SAndroid Build Coastguard Worker unsigned short ifi_type; 49*c9945492SAndroid Build Coastguard Worker int ifi_index; 50*c9945492SAndroid Build Coastguard Worker unsigned ifi_flags; 51*c9945492SAndroid Build Coastguard Worker unsigned ifi_change; 52*c9945492SAndroid Build Coastguard Worker }; 53*c9945492SAndroid Build Coastguard Worker 54*c9945492SAndroid Build Coastguard Worker /* linux/if_link.h */ 55*c9945492SAndroid Build Coastguard Worker 56*c9945492SAndroid Build Coastguard Worker #define IFLA_ADDRESS 1 57*c9945492SAndroid Build Coastguard Worker #define IFLA_BROADCAST 2 58*c9945492SAndroid Build Coastguard Worker #define IFLA_IFNAME 3 59*c9945492SAndroid Build Coastguard Worker #define IFLA_STATS 7 60*c9945492SAndroid Build Coastguard Worker 61*c9945492SAndroid Build Coastguard Worker /* linux/if_addr.h */ 62*c9945492SAndroid Build Coastguard Worker 63*c9945492SAndroid Build Coastguard Worker struct ifaddrmsg { 64*c9945492SAndroid Build Coastguard Worker uint8_t ifa_family; 65*c9945492SAndroid Build Coastguard Worker uint8_t ifa_prefixlen; 66*c9945492SAndroid Build Coastguard Worker uint8_t ifa_flags; 67*c9945492SAndroid Build Coastguard Worker uint8_t ifa_scope; 68*c9945492SAndroid Build Coastguard Worker uint32_t ifa_index; 69*c9945492SAndroid Build Coastguard Worker }; 70*c9945492SAndroid Build Coastguard Worker 71*c9945492SAndroid Build Coastguard Worker #define IFA_ADDRESS 1 72*c9945492SAndroid Build Coastguard Worker #define IFA_LOCAL 2 73*c9945492SAndroid Build Coastguard Worker #define IFA_LABEL 3 74*c9945492SAndroid Build Coastguard Worker #define IFA_BROADCAST 4 75*c9945492SAndroid Build Coastguard Worker 76*c9945492SAndroid Build Coastguard Worker /* musl */ 77*c9945492SAndroid Build Coastguard Worker 78*c9945492SAndroid Build Coastguard Worker #define NETLINK_ALIGN(len) (((len)+3) & ~3) 79*c9945492SAndroid Build Coastguard Worker #define NLMSG_DATA(nlh) ((void*)((char*)(nlh)+sizeof(struct nlmsghdr))) 80*c9945492SAndroid Build Coastguard Worker #define NLMSG_DATALEN(nlh) ((nlh)->nlmsg_len-sizeof(struct nlmsghdr)) 81*c9945492SAndroid Build Coastguard Worker #define NLMSG_DATAEND(nlh) ((char*)(nlh)+(nlh)->nlmsg_len) 82*c9945492SAndroid Build Coastguard Worker #define NLMSG_NEXT(nlh) (struct nlmsghdr*)((char*)(nlh)+NETLINK_ALIGN((nlh)->nlmsg_len)) 83*c9945492SAndroid Build Coastguard Worker #define NLMSG_OK(nlh,end) ((char*)(end)-(char*)(nlh) >= sizeof(struct nlmsghdr)) 84*c9945492SAndroid Build Coastguard Worker 85*c9945492SAndroid Build Coastguard Worker #define RTA_DATA(rta) ((void*)((char*)(rta)+sizeof(struct rtattr))) 86*c9945492SAndroid Build Coastguard Worker #define RTA_DATALEN(rta) ((rta)->rta_len-sizeof(struct rtattr)) 87*c9945492SAndroid Build Coastguard Worker #define RTA_DATAEND(rta) ((char*)(rta)+(rta)->rta_len) 88*c9945492SAndroid Build Coastguard Worker #define RTA_NEXT(rta) (struct rtattr*)((char*)(rta)+NETLINK_ALIGN((rta)->rta_len)) 89*c9945492SAndroid Build Coastguard Worker #define RTA_OK(rta,end) ((char*)(end)-(char*)(rta) >= sizeof(struct rtattr)) 90*c9945492SAndroid Build Coastguard Worker 91*c9945492SAndroid Build Coastguard Worker #define NLMSG_RTA(nlh,len) ((void*)((char*)(nlh)+sizeof(struct nlmsghdr)+NETLINK_ALIGN(len))) 92*c9945492SAndroid Build Coastguard Worker #define NLMSG_RTAOK(rta,nlh) RTA_OK(rta,NLMSG_DATAEND(nlh)) 93*c9945492SAndroid Build Coastguard Worker 94*c9945492SAndroid Build Coastguard Worker hidden int __rtnetlink_enumerate(int link_af, int addr_af, int (*cb)(void *ctx, struct nlmsghdr *h), void *ctx); 95