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