add chaos_calmer branch
[15.05/openwrt.git] / package / libs / libnl-tiny / src / include / netlink / netlink-kernel.h
1 #ifndef __LINUX_NETLINK_H
2 #define __LINUX_NETLINK_H
3
4 /**
5  * Netlink socket address
6  * @ingroup nl
7  */
8 struct sockaddr_nl
9 {
10         /** socket family (AF_NETLINK) */
11         sa_family_t     nl_family;
12
13         /** Padding (unused) */
14         unsigned short  nl_pad;
15
16         /** Unique process ID  */
17         uint32_t        nl_pid;
18
19         /** Multicast group subscriptions */
20         uint32_t        nl_groups;
21 };
22
23 /**
24  * Netlink message header
25  * @ingroup msg
26  */
27 struct nlmsghdr
28 {
29         /**
30          * Length of message including header.
31          */
32         uint32_t        nlmsg_len;
33
34         /**
35          * Message type (content type)
36          */
37         uint16_t        nlmsg_type;
38
39         /**
40          * Message flags
41          */
42         uint16_t        nlmsg_flags;
43
44         /**
45          * Sequence number
46          */
47         uint32_t        nlmsg_seq;
48
49         /**
50          * Netlink PID of the proccess sending the message.
51          */
52         uint32_t        nlmsg_pid;
53 };
54
55 /**
56  * @name Standard message flags
57  * @{
58  */
59
60 /**
61  * Must be set on all request messages (typically from user space to
62  * kernel space).
63  * @ingroup msg
64  */
65 #define NLM_F_REQUEST           1
66
67 /**
68  * Indicates the message is part of a multipart message terminated
69  * by NLMSG_DONE.
70  */
71 #define NLM_F_MULTI             2
72
73 /**
74  * Request for an acknowledgment on success.
75  */
76 #define NLM_F_ACK               4
77
78 /**
79  * Echo this request
80  */
81 #define NLM_F_ECHO              8
82
83 /** @} */
84
85 /**
86  * @name Additional message flags for GET requests
87  * @{
88  */
89
90 /**
91  * Return the complete table instead of a single entry.
92  * @ingroup msg
93  */
94 #define NLM_F_ROOT      0x100
95
96 /**
97  * Return all entries matching criteria passed in message content.
98  */
99 #define NLM_F_MATCH     0x200
100
101 /**
102  * Return an atomic snapshot of the table being referenced. This
103  * may require special privileges because it has the potential to
104  * interrupt service in the FE for a longer time.
105  */
106 #define NLM_F_ATOMIC    0x400
107
108 /**
109  * Dump all entries
110  */
111 #define NLM_F_DUMP      (NLM_F_ROOT|NLM_F_MATCH)
112
113 /** @} */
114
115 /**
116  * @name Additional messsage flags for NEW requests
117  * @{
118  */
119
120 /**
121  * Replace existing matching config object with this request.
122  * @ingroup msg
123  */
124 #define NLM_F_REPLACE   0x100
125
126 /**
127  * Don't replace the config object if it already exists.
128  */
129 #define NLM_F_EXCL      0x200
130
131 /**
132  * Create config object if it doesn't already exist.
133  */
134 #define NLM_F_CREATE    0x400
135
136 /**
137  * Add to the end of the object list.
138  */
139 #define NLM_F_APPEND    0x800
140
141 /** @} */
142
143 /**
144  * @name Standard Message types
145  * @{
146  */
147
148 /**
149  * No operation, message must be ignored
150  * @ingroup msg
151  */
152 #define NLMSG_NOOP              0x1
153
154 /**
155  * The message signals an error and the payload contains a nlmsgerr
156  * structure. This can be looked at as a NACK and typically it is
157  * from FEC to CPC.
158  */
159 #define NLMSG_ERROR             0x2
160
161 /**
162  * Message terminates a multipart message.
163  */
164 #define NLMSG_DONE              0x3
165
166 /**
167  * The message signals that data got lost
168  */
169 #define NLMSG_OVERRUN           0x4
170
171 /**
172  * Lower limit of reserved message types
173  */
174 #define NLMSG_MIN_TYPE          0x10
175
176 /** @} */
177
178 /**
179  * Netlink error message
180  * @ingroup msg
181  */
182 struct nlmsgerr
183 {
184         /** Error code (errno number) */
185         int             error;
186
187         /** Original netlink message causing the error */
188         struct nlmsghdr msg;
189 };
190
191 struct nl_pktinfo
192 {
193         __u32   group;
194 };
195
196 #endif  /* __LINUX_NETLINK_H */