xref: /aosp_15_r20/external/libnl/include/netlink/netlink-kernel.h (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
1*4dc78e53SAndroid Build Coastguard Worker #ifndef __NETLINK_KERNEL_H_
2*4dc78e53SAndroid Build Coastguard Worker #define __NETLINK_KERNEL_H_
3*4dc78e53SAndroid Build Coastguard Worker 
4*4dc78e53SAndroid Build Coastguard Worker #if 0
5*4dc78e53SAndroid Build Coastguard Worker 
6*4dc78e53SAndroid Build Coastguard Worker /*
7*4dc78e53SAndroid Build Coastguard Worker  * FIXME: Goal is to preseve the documentation but make it simple
8*4dc78e53SAndroid Build Coastguard Worker  * to keep linux/netlink.h in sync. Maybe use named documentation
9*4dc78e53SAndroid Build Coastguard Worker  * sections.
10*4dc78e53SAndroid Build Coastguard Worker  */
11*4dc78e53SAndroid Build Coastguard Worker 
12*4dc78e53SAndroid Build Coastguard Worker /**
13*4dc78e53SAndroid Build Coastguard Worker  * Netlink socket address
14*4dc78e53SAndroid Build Coastguard Worker  * @ingroup nl
15*4dc78e53SAndroid Build Coastguard Worker  */
16*4dc78e53SAndroid Build Coastguard Worker struct sockaddr_nl
17*4dc78e53SAndroid Build Coastguard Worker {
18*4dc78e53SAndroid Build Coastguard Worker 	/** socket family (AF_NETLINK) */
19*4dc78e53SAndroid Build Coastguard Worker 	sa_family_t     nl_family;
20*4dc78e53SAndroid Build Coastguard Worker 
21*4dc78e53SAndroid Build Coastguard Worker 	/** Padding (unused) */
22*4dc78e53SAndroid Build Coastguard Worker 	unsigned short  nl_pad;
23*4dc78e53SAndroid Build Coastguard Worker 
24*4dc78e53SAndroid Build Coastguard Worker 	/** Unique process ID  */
25*4dc78e53SAndroid Build Coastguard Worker 	uint32_t        nl_pid;
26*4dc78e53SAndroid Build Coastguard Worker 
27*4dc78e53SAndroid Build Coastguard Worker 	/** Multicast group subscriptions */
28*4dc78e53SAndroid Build Coastguard Worker 	uint32_t        nl_groups;
29*4dc78e53SAndroid Build Coastguard Worker };
30*4dc78e53SAndroid Build Coastguard Worker 
31*4dc78e53SAndroid Build Coastguard Worker /**
32*4dc78e53SAndroid Build Coastguard Worker  * @addtogroup msg
33*4dc78e53SAndroid Build Coastguard Worker  * @{
34*4dc78e53SAndroid Build Coastguard Worker  */
35*4dc78e53SAndroid Build Coastguard Worker 
36*4dc78e53SAndroid Build Coastguard Worker 
37*4dc78e53SAndroid Build Coastguard Worker /**
38*4dc78e53SAndroid Build Coastguard Worker  * Netlink message header
39*4dc78e53SAndroid Build Coastguard Worker  */
40*4dc78e53SAndroid Build Coastguard Worker struct nlmsghdr
41*4dc78e53SAndroid Build Coastguard Worker {
42*4dc78e53SAndroid Build Coastguard Worker 	/** Length of message including header and padding. */
43*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	nlmsg_len;
44*4dc78e53SAndroid Build Coastguard Worker 
45*4dc78e53SAndroid Build Coastguard Worker 	/** Message type (content type) */
46*4dc78e53SAndroid Build Coastguard Worker 	uint16_t	nlmsg_type;
47*4dc78e53SAndroid Build Coastguard Worker 
48*4dc78e53SAndroid Build Coastguard Worker 	/** Message flags */
49*4dc78e53SAndroid Build Coastguard Worker 	uint16_t	nlmsg_flags;
50*4dc78e53SAndroid Build Coastguard Worker 
51*4dc78e53SAndroid Build Coastguard Worker 	/** Sequence number of message \see core_sk_seq_num. */
52*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	nlmsg_seq;
53*4dc78e53SAndroid Build Coastguard Worker 
54*4dc78e53SAndroid Build Coastguard Worker 	/** Netlink port */
55*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	nlmsg_pid;
56*4dc78e53SAndroid Build Coastguard Worker };
57*4dc78e53SAndroid Build Coastguard Worker 
58*4dc78e53SAndroid Build Coastguard Worker /**
59*4dc78e53SAndroid Build Coastguard Worker  * @name Standard message flags
60*4dc78e53SAndroid Build Coastguard Worker  * @{
61*4dc78e53SAndroid Build Coastguard Worker  */
62*4dc78e53SAndroid Build Coastguard Worker 
63*4dc78e53SAndroid Build Coastguard Worker /**
64*4dc78e53SAndroid Build Coastguard Worker  * Must be set on all request messages (typically from user space to
65*4dc78e53SAndroid Build Coastguard Worker  * kernel space).
66*4dc78e53SAndroid Build Coastguard Worker  */
67*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_REQUEST		1
68*4dc78e53SAndroid Build Coastguard Worker 
69*4dc78e53SAndroid Build Coastguard Worker /**
70*4dc78e53SAndroid Build Coastguard Worker  * Indicates the message is part of a multipart message terminated
71*4dc78e53SAndroid Build Coastguard Worker  * by NLMSG_DONE.
72*4dc78e53SAndroid Build Coastguard Worker  */
73*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_MULTI		2
74*4dc78e53SAndroid Build Coastguard Worker 
75*4dc78e53SAndroid Build Coastguard Worker /**
76*4dc78e53SAndroid Build Coastguard Worker  * Request for an acknowledgment on success.
77*4dc78e53SAndroid Build Coastguard Worker  */
78*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_ACK		4
79*4dc78e53SAndroid Build Coastguard Worker 
80*4dc78e53SAndroid Build Coastguard Worker /**
81*4dc78e53SAndroid Build Coastguard Worker  * Echo this request
82*4dc78e53SAndroid Build Coastguard Worker  */
83*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_ECHO		8
84*4dc78e53SAndroid Build Coastguard Worker 
85*4dc78e53SAndroid Build Coastguard Worker /** @} */
86*4dc78e53SAndroid Build Coastguard Worker 
87*4dc78e53SAndroid Build Coastguard Worker /**
88*4dc78e53SAndroid Build Coastguard Worker  * @name Additional message flags for GET requests
89*4dc78e53SAndroid Build Coastguard Worker  * @{
90*4dc78e53SAndroid Build Coastguard Worker  */
91*4dc78e53SAndroid Build Coastguard Worker 
92*4dc78e53SAndroid Build Coastguard Worker /**
93*4dc78e53SAndroid Build Coastguard Worker  * Return the complete table instead of a single entry.
94*4dc78e53SAndroid Build Coastguard Worker  */
95*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_ROOT	0x100
96*4dc78e53SAndroid Build Coastguard Worker 
97*4dc78e53SAndroid Build Coastguard Worker /**
98*4dc78e53SAndroid Build Coastguard Worker  * Return all entries matching criteria passed in message content.
99*4dc78e53SAndroid Build Coastguard Worker  */
100*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_MATCH	0x200
101*4dc78e53SAndroid Build Coastguard Worker 
102*4dc78e53SAndroid Build Coastguard Worker /**
103*4dc78e53SAndroid Build Coastguard Worker  * Return an atomic snapshot of the table being referenced. This
104*4dc78e53SAndroid Build Coastguard Worker  * may require special privileges because it has the potential to
105*4dc78e53SAndroid Build Coastguard Worker  * interrupt service in the FE for a longer time.
106*4dc78e53SAndroid Build Coastguard Worker  */
107*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_ATOMIC	0x400
108*4dc78e53SAndroid Build Coastguard Worker 
109*4dc78e53SAndroid Build Coastguard Worker /**
110*4dc78e53SAndroid Build Coastguard Worker  * Dump all entries
111*4dc78e53SAndroid Build Coastguard Worker  */
112*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_DUMP	(NLM_F_ROOT|NLM_F_MATCH)
113*4dc78e53SAndroid Build Coastguard Worker 
114*4dc78e53SAndroid Build Coastguard Worker /** @} */
115*4dc78e53SAndroid Build Coastguard Worker 
116*4dc78e53SAndroid Build Coastguard Worker /**
117*4dc78e53SAndroid Build Coastguard Worker  * @name Additional messsage flags for NEW requests
118*4dc78e53SAndroid Build Coastguard Worker  * @{
119*4dc78e53SAndroid Build Coastguard Worker  */
120*4dc78e53SAndroid Build Coastguard Worker 
121*4dc78e53SAndroid Build Coastguard Worker /**
122*4dc78e53SAndroid Build Coastguard Worker  * Replace existing matching config object with this request.
123*4dc78e53SAndroid Build Coastguard Worker  */
124*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_REPLACE	0x100
125*4dc78e53SAndroid Build Coastguard Worker 
126*4dc78e53SAndroid Build Coastguard Worker /**
127*4dc78e53SAndroid Build Coastguard Worker  * Don't replace the config object if it already exists.
128*4dc78e53SAndroid Build Coastguard Worker  */
129*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_EXCL	0x200
130*4dc78e53SAndroid Build Coastguard Worker 
131*4dc78e53SAndroid Build Coastguard Worker /**
132*4dc78e53SAndroid Build Coastguard Worker  * Create config object if it doesn't already exist.
133*4dc78e53SAndroid Build Coastguard Worker  */
134*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_CREATE	0x400
135*4dc78e53SAndroid Build Coastguard Worker 
136*4dc78e53SAndroid Build Coastguard Worker /**
137*4dc78e53SAndroid Build Coastguard Worker  * Add to the end of the object list.
138*4dc78e53SAndroid Build Coastguard Worker  */
139*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_APPEND	0x800
140*4dc78e53SAndroid Build Coastguard Worker 
141*4dc78e53SAndroid Build Coastguard Worker /** @} */
142*4dc78e53SAndroid Build Coastguard Worker 
143*4dc78e53SAndroid Build Coastguard Worker /**
144*4dc78e53SAndroid Build Coastguard Worker  * @name Standard Message types
145*4dc78e53SAndroid Build Coastguard Worker  * @{
146*4dc78e53SAndroid Build Coastguard Worker  */
147*4dc78e53SAndroid Build Coastguard Worker 
148*4dc78e53SAndroid Build Coastguard Worker /**
149*4dc78e53SAndroid Build Coastguard Worker  * No operation, message must be ignored
150*4dc78e53SAndroid Build Coastguard Worker  */
151*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_NOOP		0x1
152*4dc78e53SAndroid Build Coastguard Worker 
153*4dc78e53SAndroid Build Coastguard Worker /**
154*4dc78e53SAndroid Build Coastguard Worker  * The message signals an error and the payload contains a nlmsgerr
155*4dc78e53SAndroid Build Coastguard Worker  * structure. This can be looked at as a NACK and typically it is
156*4dc78e53SAndroid Build Coastguard Worker  * from FEC to CPC.
157*4dc78e53SAndroid Build Coastguard Worker  */
158*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_ERROR		0x2
159*4dc78e53SAndroid Build Coastguard Worker 
160*4dc78e53SAndroid Build Coastguard Worker /**
161*4dc78e53SAndroid Build Coastguard Worker  * Message terminates a multipart message.
162*4dc78e53SAndroid Build Coastguard Worker  */
163*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_DONE		0x3
164*4dc78e53SAndroid Build Coastguard Worker 
165*4dc78e53SAndroid Build Coastguard Worker /**
166*4dc78e53SAndroid Build Coastguard Worker  * The message signals that data got lost
167*4dc78e53SAndroid Build Coastguard Worker  */
168*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_OVERRUN		0x4
169*4dc78e53SAndroid Build Coastguard Worker 
170*4dc78e53SAndroid Build Coastguard Worker /**
171*4dc78e53SAndroid Build Coastguard Worker  * Lower limit of reserved message types
172*4dc78e53SAndroid Build Coastguard Worker  */
173*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_MIN_TYPE		0x10
174*4dc78e53SAndroid Build Coastguard Worker 
175*4dc78e53SAndroid Build Coastguard Worker /** @} */
176*4dc78e53SAndroid Build Coastguard Worker 
177*4dc78e53SAndroid Build Coastguard Worker /**
178*4dc78e53SAndroid Build Coastguard Worker  * Netlink error message header
179*4dc78e53SAndroid Build Coastguard Worker  */
180*4dc78e53SAndroid Build Coastguard Worker struct nlmsgerr
181*4dc78e53SAndroid Build Coastguard Worker {
182*4dc78e53SAndroid Build Coastguard Worker 	/** Error code (errno number) */
183*4dc78e53SAndroid Build Coastguard Worker 	int		error;
184*4dc78e53SAndroid Build Coastguard Worker 
185*4dc78e53SAndroid Build Coastguard Worker 	/** Original netlink message causing the error */
186*4dc78e53SAndroid Build Coastguard Worker 	struct nlmsghdr	msg;
187*4dc78e53SAndroid Build Coastguard Worker };
188*4dc78e53SAndroid Build Coastguard Worker 
189*4dc78e53SAndroid Build Coastguard Worker struct nl_pktinfo
190*4dc78e53SAndroid Build Coastguard Worker {
191*4dc78e53SAndroid Build Coastguard Worker 	__u32	group;
192*4dc78e53SAndroid Build Coastguard Worker };
193*4dc78e53SAndroid Build Coastguard Worker 
194*4dc78e53SAndroid Build Coastguard Worker /**
195*4dc78e53SAndroid Build Coastguard Worker  * Netlink alignment constant, all boundries within messages must be align to this.
196*4dc78e53SAndroid Build Coastguard Worker  *
197*4dc78e53SAndroid Build Coastguard Worker  * See \ref core_msg_fmt_align for more information on message alignment.
198*4dc78e53SAndroid Build Coastguard Worker  */
199*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_ALIGNTO	4
200*4dc78e53SAndroid Build Coastguard Worker 
201*4dc78e53SAndroid Build Coastguard Worker /**
202*4dc78e53SAndroid Build Coastguard Worker  * Returns \p len properly aligned to NLMSG_ALIGNTO.
203*4dc78e53SAndroid Build Coastguard Worker  *
204*4dc78e53SAndroid Build Coastguard Worker  * See \ref core_msg_fmt_align for more information on message alignment.
205*4dc78e53SAndroid Build Coastguard Worker  */
206*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
207*4dc78e53SAndroid Build Coastguard Worker 
208*4dc78e53SAndroid Build Coastguard Worker /**
209*4dc78e53SAndroid Build Coastguard Worker  * Length of a netlink message header including padding.
210*4dc78e53SAndroid Build Coastguard Worker  *
211*4dc78e53SAndroid Build Coastguard Worker  * See \ref core_msg_fmt_align for more information on message alignment.
212*4dc78e53SAndroid Build Coastguard Worker  */
213*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_HDRLEN	 ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
214*4dc78e53SAndroid Build Coastguard Worker 
215*4dc78e53SAndroid Build Coastguard Worker /** @} */
216*4dc78e53SAndroid Build Coastguard Worker 
217*4dc78e53SAndroid Build Coastguard Worker /**
218*4dc78e53SAndroid Build Coastguard Worker  * @addtogroup attr
219*4dc78e53SAndroid Build Coastguard Worker  * @{
220*4dc78e53SAndroid Build Coastguard Worker  */
221*4dc78e53SAndroid Build Coastguard Worker 
222*4dc78e53SAndroid Build Coastguard Worker /*
223*4dc78e53SAndroid Build Coastguard Worker  */
224*4dc78e53SAndroid Build Coastguard Worker 
225*4dc78e53SAndroid Build Coastguard Worker /**
226*4dc78e53SAndroid Build Coastguard Worker  * Netlink attribute structure
227*4dc78e53SAndroid Build Coastguard Worker  *
228*4dc78e53SAndroid Build Coastguard Worker  * @code
229*4dc78e53SAndroid Build Coastguard Worker  *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
230*4dc78e53SAndroid Build Coastguard Worker  * +---------------------+- - -+- - - - - - - - - -+- - -+
231*4dc78e53SAndroid Build Coastguard Worker  * |        Header       | Pad |     Payload       | Pad |
232*4dc78e53SAndroid Build Coastguard Worker  * |   (struct nlattr)   | ing |                   | ing |
233*4dc78e53SAndroid Build Coastguard Worker  * +---------------------+- - -+- - - - - - - - - -+- - -+
234*4dc78e53SAndroid Build Coastguard Worker  *  <-------------- nlattr->nla_len -------------->
235*4dc78e53SAndroid Build Coastguard Worker  * @endcode
236*4dc78e53SAndroid Build Coastguard Worker  */
237*4dc78e53SAndroid Build Coastguard Worker struct nlattr {
238*4dc78e53SAndroid Build Coastguard Worker 	/**
239*4dc78e53SAndroid Build Coastguard Worker 	 * Attribute length in bytes including header
240*4dc78e53SAndroid Build Coastguard Worker 	 */
241*4dc78e53SAndroid Build Coastguard Worker 	__u16           nla_len;
242*4dc78e53SAndroid Build Coastguard Worker 
243*4dc78e53SAndroid Build Coastguard Worker 	/**
244*4dc78e53SAndroid Build Coastguard Worker 	 * Netlink attribute type
245*4dc78e53SAndroid Build Coastguard Worker 	 */
246*4dc78e53SAndroid Build Coastguard Worker 	__u16           nla_type;
247*4dc78e53SAndroid Build Coastguard Worker };
248*4dc78e53SAndroid Build Coastguard Worker 
249*4dc78e53SAndroid Build Coastguard Worker /**
250*4dc78e53SAndroid Build Coastguard Worker  * @name Attribute Type Flags
251*4dc78e53SAndroid Build Coastguard Worker  *
252*4dc78e53SAndroid Build Coastguard Worker  * @code
253*4dc78e53SAndroid Build Coastguard Worker  * nla_type (16 bits)
254*4dc78e53SAndroid Build Coastguard Worker  * +---+---+-------------------------------+
255*4dc78e53SAndroid Build Coastguard Worker  * | N | O | Attribute Type                |
256*4dc78e53SAndroid Build Coastguard Worker  * +---+---+-------------------------------+
257*4dc78e53SAndroid Build Coastguard Worker  * N := Carries nested attributes
258*4dc78e53SAndroid Build Coastguard Worker  * O := Payload stored in network byte order
259*4dc78e53SAndroid Build Coastguard Worker  * @endcode
260*4dc78e53SAndroid Build Coastguard Worker  *
261*4dc78e53SAndroid Build Coastguard Worker  * @note The N and O flag are mutually exclusive.
262*4dc78e53SAndroid Build Coastguard Worker  *
263*4dc78e53SAndroid Build Coastguard Worker  * @{
264*4dc78e53SAndroid Build Coastguard Worker  */
265*4dc78e53SAndroid Build Coastguard Worker 
266*4dc78e53SAndroid Build Coastguard Worker /*
267*4dc78e53SAndroid Build Coastguard Worker  */
268*4dc78e53SAndroid Build Coastguard Worker #define NLA_F_NESTED		(1 << 15)
269*4dc78e53SAndroid Build Coastguard Worker #define NLA_F_NET_BYTEORDER	(1 << 14)
270*4dc78e53SAndroid Build Coastguard Worker #define NLA_TYPE_MASK		~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
271*4dc78e53SAndroid Build Coastguard Worker 
272*4dc78e53SAndroid Build Coastguard Worker /** @} */
273*4dc78e53SAndroid Build Coastguard Worker 
274*4dc78e53SAndroid Build Coastguard Worker #define NLA_ALIGNTO		4
275*4dc78e53SAndroid Build Coastguard Worker 
276*4dc78e53SAndroid Build Coastguard Worker /**
277*4dc78e53SAndroid Build Coastguard Worker  * Returns \p len properly aligned to NLA_ALIGNTO.
278*4dc78e53SAndroid Build Coastguard Worker  *
279*4dc78e53SAndroid Build Coastguard Worker  * See \ref core_msg_fmt_align for more information on message alignment.
280*4dc78e53SAndroid Build Coastguard Worker  */
281*4dc78e53SAndroid Build Coastguard Worker #define NLA_ALIGN(len)		(((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
282*4dc78e53SAndroid Build Coastguard Worker 
283*4dc78e53SAndroid Build Coastguard Worker /**
284*4dc78e53SAndroid Build Coastguard Worker  * Length of a netlink attribute header including padding.
285*4dc78e53SAndroid Build Coastguard Worker  *
286*4dc78e53SAndroid Build Coastguard Worker  * See \ref core_msg_fmt_align for more information on message alignment.
287*4dc78e53SAndroid Build Coastguard Worker  */
288*4dc78e53SAndroid Build Coastguard Worker #define NLA_HDRLEN		((int) NLA_ALIGN(sizeof(struct nlattr)))
289*4dc78e53SAndroid Build Coastguard Worker 
290*4dc78e53SAndroid Build Coastguard Worker /** @} */
291*4dc78e53SAndroid Build Coastguard Worker 
292*4dc78e53SAndroid Build Coastguard Worker #endif
293*4dc78e53SAndroid Build Coastguard Worker #endif	/* __LINUX_NETLINK_H */
294