Blame view

include/linux/netlink.h 8.85 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
  #ifndef __LINUX_NETLINK_H
  #define __LINUX_NETLINK_H
  
  #include <linux/socket.h> /* for sa_family_t */
  #include <linux/types.h>
  
  #define NETLINK_ROUTE		0	/* Routing/device hook				*/
bb5427b54   Evgeniy Polyakov   [PATCH] w1: netli...
8
  #define NETLINK_UNUSED		1	/* Unused number				*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
  #define NETLINK_USERSOCK	2	/* Reserved for user mode socket protocols 	*/
  #define NETLINK_FIREWALL	3	/* Firewalling hook				*/
73c1f4a03   Arnaldo Carvalho de Melo   [TCPDIAG]: Just r...
11
  #define NETLINK_INET_DIAG	4	/* INET socket monitoring			*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
13
14
  #define NETLINK_NFLOG		5	/* netfilter/iptables ULOG */
  #define NETLINK_XFRM		6	/* ipsec */
  #define NETLINK_SELINUX		7	/* SELinux event notifications */
4d479e40e   David S. Miller   [NETLINK]: Alloca...
15
  #define NETLINK_ISCSI		8	/* Open-iSCSI */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
  #define NETLINK_AUDIT		9	/* auditing */
246955fe4   Robert Olsson   [NETLINK]: fib_lo...
17
  #define NETLINK_FIB_LOOKUP	10	
7672d0b54   Evgeniy Polyakov   [NET]: Add netlin...
18
  #define NETLINK_CONNECTOR	11
63522f7fd   David S. Miller   [NETLINK]: Reserv...
19
  #define NETLINK_NETFILTER	12	/* netfilter subsystem */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
21
22
  #define NETLINK_IP6_FW		13
  #define NETLINK_DNRTMSG		14	/* DECnet routing messages */
  #define NETLINK_KOBJECT_UEVENT	15	/* Kernel messages to userspace */
20ae975df   David S. Miller   [NETLINK]: Reserv...
23
  #define NETLINK_GENERIC		16
84314fd47   James Smart   [SCSI] SCSI and F...
24
25
  /* leave room for NETLINK_DM (DM Events) */
  #define NETLINK_SCSITRANSPORT	18	/* SCSI Transports */
88b4a07e6   Michael Halcrow   [PATCH] eCryptfs:...
26
  #define NETLINK_ECRYPTFS	19
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
27
28
  
  #define MAX_LINKS 32		
b4b510290   Eric W. Biederman   [NET]: Support mu...
29
  struct net;
d94d9fee9   Eric Dumazet   net: cleanup incl...
30
  struct sockaddr_nl {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
32
  	sa_family_t	nl_family;	/* AF_NETLINK	*/
  	unsigned short	nl_pad;		/* zero		*/
cf130cb10   Herbert Xu   [NETLINK]: Remove...
33
  	__u32		nl_pid;		/* port ID	*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34
35
         	__u32		nl_groups;	/* multicast groups mask */
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
36
  struct nlmsghdr {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
37
38
39
40
  	__u32		nlmsg_len;	/* Length of message including header */
  	__u16		nlmsg_type;	/* Message content */
  	__u16		nlmsg_flags;	/* Additional flags */
  	__u32		nlmsg_seq;	/* Sequence number */
cf130cb10   Herbert Xu   [NETLINK]: Remove...
41
  	__u32		nlmsg_pid;	/* Sending process port ID */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  };
  
  /* Flags values */
  
  #define NLM_F_REQUEST		1	/* It is request message. 	*/
  #define NLM_F_MULTI		2	/* Multipart message, terminated by NLMSG_DONE */
  #define NLM_F_ACK		4	/* Reply with ack, with zero or error code */
  #define NLM_F_ECHO		8	/* Echo this request 		*/
  
  /* Modifiers to GET request */
  #define NLM_F_ROOT	0x100	/* specify tree	root	*/
  #define NLM_F_MATCH	0x200	/* return all matching	*/
  #define NLM_F_ATOMIC	0x400	/* atomic GET		*/
  #define NLM_F_DUMP	(NLM_F_ROOT|NLM_F_MATCH)
  
  /* Modifiers to NEW request */
  #define NLM_F_REPLACE	0x100	/* Override existing		*/
  #define NLM_F_EXCL	0x200	/* Do not touch, if it exists	*/
  #define NLM_F_CREATE	0x400	/* Create, if it does not exist	*/
  #define NLM_F_APPEND	0x800	/* Add to end of list		*/
  
  /*
     4.4BSD ADD		NLM_F_CREATE|NLM_F_EXCL
     4.4BSD CHANGE	NLM_F_REPLACE
  
     True CHANGE		NLM_F_CREATE|NLM_F_REPLACE
     Append		NLM_F_CREATE
     Check		NLM_F_EXCL
   */
  
  #define NLMSG_ALIGNTO	4
  #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
bfa83a9e0   Thomas Graf   [NETLINK]: Type-s...
74
75
  #define NLMSG_HDRLEN	 ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
  #define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
78
79
80
81
82
83
84
85
86
87
88
  #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
  #define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
  #define NLMSG_NEXT(nlh,len)	 ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
  				  (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
  #define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
  			   (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
  			   (nlh)->nlmsg_len <= (len))
  #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
  
  #define NLMSG_NOOP		0x1	/* Nothing.		*/
  #define NLMSG_ERROR		0x2	/* Error		*/
  #define NLMSG_DONE		0x3	/* End of a dump	*/
  #define NLMSG_OVERRUN		0x4	/* Data lost		*/
bfa83a9e0   Thomas Graf   [NETLINK]: Type-s...
89
  #define NLMSG_MIN_TYPE		0x10	/* < 0x10: reserved control messages */
d94d9fee9   Eric Dumazet   net: cleanup incl...
90
  struct nlmsgerr {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
91
92
93
  	int		error;
  	struct nlmsghdr msg;
  };
9a4595bc7   Patrick McHardy   [NETLINK]: Add se...
94
95
96
  #define NETLINK_ADD_MEMBERSHIP	1
  #define NETLINK_DROP_MEMBERSHIP	2
  #define NETLINK_PKTINFO		3
be0c22a46   Pablo Neira Ayuso   netlink: add NETL...
97
  #define NETLINK_BROADCAST_ERROR	4
38938bfe3   Pablo Neira Ayuso   netlink: add NETL...
98
  #define NETLINK_NO_ENOBUFS	5
9a4595bc7   Patrick McHardy   [NETLINK]: Add se...
99

d94d9fee9   Eric Dumazet   net: cleanup incl...
100
  struct nl_pktinfo {
9a4595bc7   Patrick McHardy   [NETLINK]: Add se...
101
102
  	__u32	group;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
105
106
107
108
  #define NET_MAJOR 36		/* Major 36 is reserved for networking 						*/
  
  enum {
  	NETLINK_UNCONNECTED = 0,
  	NETLINK_CONNECTED,
  };
bfa83a9e0   Thomas Graf   [NETLINK]: Type-s...
109
110
111
112
113
114
115
116
  /*
   *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
   * +---------------------+- - -+- - - - - - - - - -+- - -+
   * |        Header       | Pad |     Payload       | Pad |
   * |   (struct nlattr)   | ing |                   | ing |
   * +---------------------+- - -+- - - - - - - - - -+- - -+
   *  <-------------- nlattr->nla_len -------------->
   */
d94d9fee9   Eric Dumazet   net: cleanup incl...
117
  struct nlattr {
bfa83a9e0   Thomas Graf   [NETLINK]: Type-s...
118
119
120
  	__u16           nla_len;
  	__u16           nla_type;
  };
8f4c1f9b0   Thomas Graf   [NETLINK]: Introd...
121
122
123
124
125
126
127
128
129
130
131
132
133
  /*
   * nla_type (16 bits)
   * +---+---+-------------------------------+
   * | N | O | Attribute Type                |
   * +---+---+-------------------------------+
   * N := Carries nested attributes
   * O := Payload stored in network byte order
   *
   * Note: The N and O flag are mutually exclusive.
   */
  #define NLA_F_NESTED		(1 << 15)
  #define NLA_F_NET_BYTEORDER	(1 << 14)
  #define NLA_TYPE_MASK		~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
bfa83a9e0   Thomas Graf   [NETLINK]: Type-s...
134
135
136
  #define NLA_ALIGNTO		4
  #define NLA_ALIGN(len)		(((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
  #define NLA_HDRLEN		((int) NLA_ALIGN(sizeof(struct nlattr)))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137
138
139
140
  #ifdef __KERNEL__
  
  #include <linux/capability.h>
  #include <linux/skbuff.h>
b529ccf27   Arnaldo Carvalho de Melo   [NETLINK]: Introd...
141
142
143
144
  static inline struct nlmsghdr *nlmsg_hdr(const struct sk_buff *skb)
  {
  	return (struct nlmsghdr *)skb->data;
  }
d94d9fee9   Eric Dumazet   net: cleanup incl...
145
  struct netlink_skb_parms {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
146
147
  	struct ucred		creds;		/* Skb credentials	*/
  	__u32			pid;
d629b836d   Patrick McHardy   [NETLINK]: Use gr...
148
  	__u32			dst_group;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
149
  	kernel_cap_t		eff_cap;
c94c257c8   Serge Hallyn   Add audit uid to ...
150
  	__u32			loginuid;	/* Login (audit) uid */
2532386f4   Eric Paris   Audit: collect se...
151
  	__u32			sessionid;	/* Session id (audit) */
e7c349701   Steve Grubb   [PATCH] Reworked ...
152
  	__u32			sid;		/* SELinux security id */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
153
154
155
156
  };
  
  #define NETLINK_CB(skb)		(*(struct netlink_skb_parms*)&((skb)->cb))
  #define NETLINK_CREDS(skb)	(&NETLINK_CB((skb)).creds)
d136f1bd3   Johannes Berg   genetlink: fix ne...
157
158
  extern void netlink_table_grab(void);
  extern void netlink_table_ungrab(void);
b4b510290   Eric W. Biederman   [NET]: Support mu...
159
160
  extern struct sock *netlink_kernel_create(struct net *net,
  					  int unit,unsigned int groups,
cd40b7d39   Denis V. Lunev   [NET]: make netli...
161
  					  void (*input)(struct sk_buff *skb),
af65bdfce   Patrick McHardy   [NETLINK]: Switch...
162
163
  					  struct mutex *cb_mutex,
  					  struct module *module);
b7c6ba6eb   Denis V. Lunev   [NETNS]: Consolid...
164
  extern void netlink_kernel_release(struct sock *sk);
d136f1bd3   Johannes Berg   genetlink: fix ne...
165
  extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups);
b4ff4f041   Johannes Berg   [NETLINK]: alloca...
166
  extern int netlink_change_ngroups(struct sock *sk, unsigned int groups);
b8273570f   Johannes Berg   genetlink: fix ne...
167
  extern void __netlink_clear_multicast_users(struct sock *sk, unsigned int group);
84659eb52   Johannes Berg   [NETLIKN]: Allow ...
168
  extern void netlink_clear_multicast_users(struct sock *sk, unsigned int group);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
169
  extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err);
4277a083e   Patrick McHardy   [NETLINK]: Add ne...
170
  extern int netlink_has_listeners(struct sock *sk, unsigned int group);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
171
172
  extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock);
  extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid,
dd0fc66fb   Al Viro   [PATCH] gfp flags...
173
  			     __u32 group, gfp_t allocation);
910a7e905   Eric W. Biederman   netlink: Implment...
174
175
176
177
  extern int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb,
  	__u32 pid, __u32 group, gfp_t allocation,
  	int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data),
  	void *filter_data);
1a50307ba   Pablo Neira Ayuso   netlink: fix NETL...
178
  extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
179
180
181
182
183
  extern int netlink_register_notifier(struct notifier_block *nb);
  extern int netlink_unregister_notifier(struct notifier_block *nb);
  
  /* finegrained unicast helpers: */
  struct sock *netlink_getsockbyfilp(struct file *filp);
9457afee8   Denis V. Lunev   netlink: Remove n...
184
  int netlink_attachskb(struct sock *sk, struct sk_buff *skb,
c3d8d1e30   Patrick McHardy   [NETLINK]: Fix un...
185
  		      long *timeo, struct sock *ssk);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
186
  void netlink_detachskb(struct sock *sk, struct sk_buff *skb);
7ee015e0f   Denis V. Lunev   [NET]: cleanup 3r...
187
  int netlink_sendskb(struct sock *sk, struct sk_buff *skb);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
188
189
190
  
  /*
   *	skb should fit one page. This choice is good for headerless malloc.
fc910a278   David S. Miller   [NETLINK]: Limit ...
191
192
193
   *	But we should limit to 8K so that userspace does not have to
   *	use enormous buffer sizes on recvmsg() calls just to avoid
   *	MSG_TRUNC when PAGE_SIZE is very large.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
194
   */
fc910a278   David S. Miller   [NETLINK]: Limit ...
195
196
197
198
199
  #if PAGE_SIZE < 8192UL
  #define NLMSG_GOODSIZE	SKB_WITH_OVERHEAD(PAGE_SIZE)
  #else
  #define NLMSG_GOODSIZE	SKB_WITH_OVERHEAD(8192UL)
  #endif
339bf98ff   Thomas Graf   [NETLINK]: Do pre...
200
  #define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
201

d94d9fee9   Eric Dumazet   net: cleanup incl...
202
  struct netlink_callback {
3a6c2b419   Patrick McHardy   netlink: constify...
203
204
205
206
207
208
209
  	struct sk_buff		*skb;
  	const struct nlmsghdr	*nlh;
  	int			(*dump)(struct sk_buff * skb,
  					struct netlink_callback *cb);
  	int			(*done)(struct netlink_callback *cb);
  	int			family;
  	long			args[6];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
210
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
211
  struct netlink_notify {
b4b510290   Eric W. Biederman   [NET]: Support mu...
212
  	struct net *net;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
213
214
215
216
217
  	int pid;
  	int protocol;
  };
  
  static __inline__ struct nlmsghdr *
1797754ea   Thomas Graf   [NETLINK]: Introd...
218
  __nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
219
220
221
222
223
224
225
  {
  	struct nlmsghdr *nlh;
  	int size = NLMSG_LENGTH(len);
  
  	nlh = (struct nlmsghdr*)skb_put(skb, NLMSG_ALIGN(size));
  	nlh->nlmsg_type = type;
  	nlh->nlmsg_len = size;
1797754ea   Thomas Graf   [NETLINK]: Introd...
226
  	nlh->nlmsg_flags = flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
227
228
  	nlh->nlmsg_pid = pid;
  	nlh->nlmsg_seq = seq;
0c19b0adb   Patrick McHardy   netlink: avoid me...
229
230
  	if (!__builtin_constant_p(size) || NLMSG_ALIGN(size) - size != 0)
  		memset(NLMSG_DATA(nlh) + len, 0, NLMSG_ALIGN(size) - size);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
231
232
  	return nlh;
  }
1797754ea   Thomas Graf   [NETLINK]: Introd...
233
  #define NLMSG_NEW(skb, pid, seq, type, len, flags) \
f4d900a2c   Patrick McHardy   [NETLINK]: Mark a...
234
  ({	if (unlikely(skb_tailroom(skb) < (int)NLMSG_SPACE(len))) \
f88a10d65   Thomas Graf   [NETLINK]: New me...
235
  		goto nlmsg_failure; \
1797754ea   Thomas Graf   [NETLINK]: Introd...
236
237
238
239
  	__nlmsg_put(skb, pid, seq, type, len, flags); })
  
  #define NLMSG_PUT(skb, pid, seq, type, len) \
  	NLMSG_NEW(skb, pid, seq, type, len, 0)
f88a10d65   Thomas Graf   [NETLINK]: New me...
240

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
241
  extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
3a6c2b419   Patrick McHardy   netlink: constify...
242
  			      const struct nlmsghdr *nlh,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
243
244
245
246
247
248
249
250
251
252
253
  			      int (*dump)(struct sk_buff *skb, struct netlink_callback*),
  			      int (*done)(struct netlink_callback*));
  
  
  #define NL_NONROOT_RECV 0x1
  #define NL_NONROOT_SEND 0x2
  extern void netlink_set_nonroot(int protocol, unsigned flag);
  
  #endif /* __KERNEL__ */
  
  #endif	/* __LINUX_NETLINK_H */