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 */
197