1  /*
2   * wpa_supplicant - Private copy of Linux netlink/rtnetlink definitions.
3   * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
4   *
5   * This software may be distributed under the terms of the BSD license.
6   * See README for more details.
7   */
8  
9  #ifndef PRIV_NETLINK_H
10  #define PRIV_NETLINK_H
11  
12  /*
13   * This should be replaced with user space header once one is available with C
14   * library, etc..
15   */
16  
17  #ifndef IFF_LOWER_UP
18  #define IFF_LOWER_UP   0x10000         /* driver signals L1 up         */
19  #endif
20  #ifndef IFF_DORMANT
21  #define IFF_DORMANT    0x20000         /* driver signals dormant       */
22  #endif
23  
24  #ifndef IFLA_IFNAME
25  #define IFLA_IFNAME 3
26  #endif
27  #ifndef IFLA_WIRELESS
28  #define IFLA_WIRELESS 11
29  #endif
30  #ifndef IFLA_OPERSTATE
31  #define IFLA_OPERSTATE 16
32  #endif
33  #ifndef IFLA_LINKMODE
34  #define IFLA_LINKMODE 17
35  #define IF_OPER_DORMANT 5
36  #define IF_OPER_UP 6
37  #endif
38  
39  #define NLM_F_REQUEST 1
40  
41  #define NETLINK_ROUTE 0
42  #define RTMGRP_LINK 1
43  #define RTM_BASE 0x10
44  #define RTM_NEWLINK (RTM_BASE + 0)
45  #define RTM_DELLINK (RTM_BASE + 1)
46  #define RTM_SETLINK (RTM_BASE + 3)
47  
48  #define NLMSG_ALIGNTO 4
49  #define NLMSG_ALIGN(len) (((len) + NLMSG_ALIGNTO - 1) & ~(NLMSG_ALIGNTO - 1))
50  #define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
51  #define NLMSG_LENGTH(len) ((len) + NLMSG_ALIGN(sizeof(struct nlmsghdr)))
52  #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
53  #define NLMSG_DATA(nlh) ((void*) (((char*) nlh) + NLMSG_LENGTH(0)))
54  #define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
55  			     (struct nlmsghdr *) \
56  			     (((char *)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
57  #define NLMSG_OK(nlh,len) ((len) >= (int) sizeof(struct nlmsghdr) && \
58  			   (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
59  			   (int) (nlh)->nlmsg_len <= (len))
60  #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
61  
62  #define RTA_ALIGNTO 4
63  #define RTA_ALIGN(len) (((len) + RTA_ALIGNTO - 1) & ~(RTA_ALIGNTO - 1))
64  #define RTA_OK(rta,len) \
65  ((len) > 0 && (rta)->rta_len >= sizeof(struct rtattr) && \
66  (rta)->rta_len <= (len))
67  #define RTA_NEXT(rta,attrlen) \
68  ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
69  (struct rtattr *) (((char *)(rta)) + RTA_ALIGN((rta)->rta_len)))
70  #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
71  #define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))
72  #define RTA_DATA(rta) ((void *) (((char *) (rta)) + RTA_LENGTH(0)))
73  #define RTA_PAYLOAD(rta) ((int) ((rta)->rta_len) - RTA_LENGTH(0))
74  
75  
76  struct sockaddr_nl
77  {
78  	sa_family_t nl_family;
79  	unsigned short nl_pad;
80  	u32 nl_pid;
81  	u32 nl_groups;
82  };
83  
84  struct nlmsghdr
85  {
86  	u32 nlmsg_len;
87  	u16 nlmsg_type;
88  	u16 nlmsg_flags;
89  	u32 nlmsg_seq;
90  	u32 nlmsg_pid;
91  };
92  
93  struct ifinfomsg
94  {
95  	unsigned char ifi_family;
96  	unsigned char __ifi_pad;
97  	unsigned short ifi_type;
98  	int ifi_index;
99  	unsigned ifi_flags;
100  	unsigned ifi_change;
101  };
102  
103  struct rtattr
104  {
105  	unsigned short rta_len;
106  	unsigned short rta_type;
107  };
108  
109  #endif /* PRIV_NETLINK_H */
110