Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at b3c29d85bf0dcce9e99cbfba2811aeefae017aaa 154 lines 4.1 kB view raw
1#ifndef __NET_GENERIC_NETLINK_H 2#define __NET_GENERIC_NETLINK_H 3 4#include <linux/genetlink.h> 5#include <net/netlink.h> 6 7/** 8 * struct genl_family - generic netlink family 9 * @id: protocol family idenfitier 10 * @hdrsize: length of user specific header in bytes 11 * @name: name of family 12 * @version: protocol version 13 * @maxattr: maximum number of attributes supported 14 * @attrbuf: buffer to store parsed attributes 15 * @ops_list: list of all assigned operations 16 * @family_list: family list 17 */ 18struct genl_family 19{ 20 unsigned int id; 21 unsigned int hdrsize; 22 char name[GENL_NAMSIZ]; 23 unsigned int version; 24 unsigned int maxattr; 25 struct module * owner; 26 struct nlattr ** attrbuf; /* private */ 27 struct list_head ops_list; /* private */ 28 struct list_head family_list; /* private */ 29}; 30 31#define GENL_ADMIN_PERM 0x01 32 33/** 34 * struct genl_info - receiving information 35 * @snd_seq: sending sequence number 36 * @snd_pid: netlink pid of sender 37 * @nlhdr: netlink message header 38 * @genlhdr: generic netlink message header 39 * @userhdr: user specific header 40 * @attrs: netlink attributes 41 */ 42struct genl_info 43{ 44 u32 snd_seq; 45 u32 snd_pid; 46 struct nlmsghdr * nlhdr; 47 struct genlmsghdr * genlhdr; 48 void * userhdr; 49 struct nlattr ** attrs; 50}; 51 52/** 53 * struct genl_ops - generic netlink operations 54 * @cmd: command identifier 55 * @flags: flags 56 * @policy: attribute validation policy 57 * @doit: standard command callback 58 * @dumpit: callback for dumpers 59 * @ops_list: operations list 60 */ 61struct genl_ops 62{ 63 u8 cmd; 64 unsigned int flags; 65 struct nla_policy *policy; 66 int (*doit)(struct sk_buff *skb, 67 struct genl_info *info); 68 int (*dumpit)(struct sk_buff *skb, 69 struct netlink_callback *cb); 70 struct list_head ops_list; 71}; 72 73extern int genl_register_family(struct genl_family *family); 74extern int genl_unregister_family(struct genl_family *family); 75extern int genl_register_ops(struct genl_family *, struct genl_ops *ops); 76extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops); 77 78extern struct sock *genl_sock; 79 80/** 81 * genlmsg_put - Add generic netlink header to netlink message 82 * @skb: socket buffer holding the message 83 * @pid: netlink pid the message is addressed to 84 * @seq: sequence number (usually the one of the sender) 85 * @type: netlink message type 86 * @hdrlen: length of the user specific header 87 * @flags netlink message flags 88 * @cmd: generic netlink command 89 * @version: version 90 * 91 * Returns pointer to user specific header 92 */ 93static inline void *genlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, 94 int type, int hdrlen, int flags, 95 u8 cmd, u8 version) 96{ 97 struct nlmsghdr *nlh; 98 struct genlmsghdr *hdr; 99 100 nlh = nlmsg_put(skb, pid, seq, type, GENL_HDRLEN + hdrlen, flags); 101 if (nlh == NULL) 102 return NULL; 103 104 hdr = nlmsg_data(nlh); 105 hdr->cmd = cmd; 106 hdr->version = version; 107 hdr->reserved = 0; 108 109 return (char *) hdr + GENL_HDRLEN; 110} 111 112/** 113 * genlmsg_end - Finalize a generic netlink message 114 * @skb: socket buffer the message is stored in 115 * @hdr: user specific header 116 */ 117static inline int genlmsg_end(struct sk_buff *skb, void *hdr) 118{ 119 return nlmsg_end(skb, hdr - GENL_HDRLEN - NLMSG_HDRLEN); 120} 121 122/** 123 * genlmsg_cancel - Cancel construction of a generic netlink message 124 * @skb: socket buffer the message is stored in 125 * @hdr: generic netlink message header 126 */ 127static inline int genlmsg_cancel(struct sk_buff *skb, void *hdr) 128{ 129 return nlmsg_cancel(skb, hdr - GENL_HDRLEN - NLMSG_HDRLEN); 130} 131 132/** 133 * genlmsg_multicast - multicast a netlink message 134 * @skb: netlink message as socket buffer 135 * @pid: own netlink pid to avoid sending to yourself 136 * @group: multicast group id 137 */ 138static inline int genlmsg_multicast(struct sk_buff *skb, u32 pid, 139 unsigned int group) 140{ 141 return nlmsg_multicast(genl_sock, skb, pid, group); 142} 143 144/** 145 * genlmsg_unicast - unicast a netlink message 146 * @skb: netlink message as socket buffer 147 * @pid: netlink pid of the destination socket 148 */ 149static inline int genlmsg_unicast(struct sk_buff *skb, u32 pid) 150{ 151 return nlmsg_unicast(genl_sock, skb, pid); 152} 153 154#endif /* __NET_GENERIC_NETLINK_H */