-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Thomas Graf
authored and
Thomas Graf
committed
Nov 10, 2005
1 parent
6477f76
commit ffcc712
Showing
5 changed files
with
786 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 9ac4a16983ea4edf719c390a1a234d956947688d | ||
refs/heads/master: 482a8524f85a7d8c40c6fb5d072e85bc2fef327f |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
#ifndef __LINUX_GENERIC_NETLINK_H | ||
#define __LINUX_GENERIC_NETLINK_H | ||
|
||
#include <linux/netlink.h> | ||
|
||
#define GENL_NAMSIZ 16 /* length of family name */ | ||
|
||
#define GENL_MIN_ID NLMSG_MIN_TYPE | ||
#define GENL_MAX_ID 1023 | ||
|
||
struct genlmsghdr { | ||
__u8 cmd; | ||
__u8 version; | ||
__u16 reserved; | ||
}; | ||
|
||
#define GENL_HDRLEN NLMSG_ALIGN(sizeof(struct genlmsghdr)) | ||
|
||
/* | ||
* List of reserved static generic netlink identifiers: | ||
*/ | ||
#define GENL_ID_GENERATE 0 | ||
#define GENL_ID_CTRL NLMSG_MIN_TYPE | ||
|
||
/************************************************************************** | ||
* Controller | ||
**************************************************************************/ | ||
|
||
enum { | ||
CTRL_CMD_UNSPEC, | ||
CTRL_CMD_NEWFAMILY, | ||
CTRL_CMD_DELFAMILY, | ||
CTRL_CMD_GETFAMILY, | ||
CTRL_CMD_NEWOPS, | ||
CTRL_CMD_DELOPS, | ||
CTRL_CMD_GETOPS, | ||
__CTRL_CMD_MAX, | ||
}; | ||
|
||
#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1) | ||
|
||
enum { | ||
CTRL_ATTR_UNSPEC, | ||
CTRL_ATTR_FAMILY_ID, | ||
CTRL_ATTR_FAMILY_NAME, | ||
__CTRL_ATTR_MAX, | ||
}; | ||
|
||
#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1) | ||
|
||
#endif /* __LINUX_GENERIC_NETLINK_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
#ifndef __NET_GENERIC_NETLINK_H | ||
#define __NET_GENERIC_NETLINK_H | ||
|
||
#include <linux/genetlink.h> | ||
#include <net/netlink.h> | ||
|
||
/** | ||
* struct genl_family - generic netlink family | ||
* @id: protocol family idenfitier | ||
* @hdrsize: length of user specific header in bytes | ||
* @name: name of family | ||
* @version: protocol version | ||
* @maxattr: maximum number of attributes supported | ||
* @attrbuf: buffer to store parsed attributes | ||
* @ops_list: list of all assigned operations | ||
* @family_list: family list | ||
*/ | ||
struct genl_family | ||
{ | ||
unsigned int id; | ||
unsigned int hdrsize; | ||
char name[GENL_NAMSIZ]; | ||
unsigned int version; | ||
unsigned int maxattr; | ||
struct module * owner; | ||
struct nlattr ** attrbuf; /* private */ | ||
struct list_head ops_list; /* private */ | ||
struct list_head family_list; /* private */ | ||
}; | ||
|
||
#define GENL_ADMIN_PERM 0x01 | ||
|
||
/** | ||
* struct genl_info - receiving information | ||
* @snd_seq: sending sequence number | ||
* @snd_pid: netlink pid of sender | ||
* @nlhdr: netlink message header | ||
* @genlhdr: generic netlink message header | ||
* @userhdr: user specific header | ||
* @attrs: netlink attributes | ||
*/ | ||
struct genl_info | ||
{ | ||
u32 snd_seq; | ||
u32 snd_pid; | ||
struct nlmsghdr * nlhdr; | ||
struct genlmsghdr * genlhdr; | ||
void * userhdr; | ||
struct nlattr ** attrs; | ||
}; | ||
|
||
/** | ||
* struct genl_ops - generic netlink operations | ||
* @cmd: command identifier | ||
* @flags: flags | ||
* @policy: attribute validation policy | ||
* @doit: standard command callback | ||
* @dumpit: callback for dumpers | ||
* @ops_list: operations list | ||
*/ | ||
struct genl_ops | ||
{ | ||
unsigned int cmd; | ||
unsigned int flags; | ||
struct nla_policy *policy; | ||
int (*doit)(struct sk_buff *skb, | ||
struct genl_info *info); | ||
int (*dumpit)(struct sk_buff *skb, | ||
struct netlink_callback *cb); | ||
struct list_head ops_list; | ||
}; | ||
|
||
extern int genl_register_family(struct genl_family *family); | ||
extern int genl_unregister_family(struct genl_family *family); | ||
extern int genl_register_ops(struct genl_family *, struct genl_ops *ops); | ||
extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops); | ||
|
||
extern struct sock *genl_sock; | ||
|
||
/** | ||
* genlmsg_put - Add generic netlink header to netlink message | ||
* @skb: socket buffer holding the message | ||
* @pid: netlink pid the message is addressed to | ||
* @seq: sequence number (usually the one of the sender) | ||
* @type: netlink message type | ||
* @hdrlen: length of the user specific header | ||
* @flags netlink message flags | ||
* @cmd: generic netlink command | ||
* @version: version | ||
* | ||
* Returns pointer to user specific header | ||
*/ | ||
static inline void *genlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, | ||
int type, int hdrlen, int flags, | ||
u8 cmd, u8 version) | ||
{ | ||
struct nlmsghdr *nlh; | ||
struct genlmsghdr *hdr; | ||
|
||
nlh = nlmsg_put(skb, pid, seq, type, GENL_HDRLEN + hdrlen, flags); | ||
if (nlh == NULL) | ||
return NULL; | ||
|
||
hdr = nlmsg_data(nlh); | ||
hdr->cmd = cmd; | ||
hdr->version = version; | ||
hdr->reserved = 0; | ||
|
||
return (char *) hdr + GENL_HDRLEN; | ||
} | ||
|
||
/** | ||
* genlmsg_end - Finalize a generic netlink message | ||
* @skb: socket buffer the message is stored in | ||
* @hdr: user specific header | ||
*/ | ||
static inline int genlmsg_end(struct sk_buff *skb, void *hdr) | ||
{ | ||
return nlmsg_end(skb, hdr - GENL_HDRLEN - NLMSG_HDRLEN); | ||
} | ||
|
||
/** | ||
* genlmsg_cancel - Cancel construction of a generic netlink message | ||
* @skb: socket buffer the message is stored in | ||
* @hdr: generic netlink message header | ||
*/ | ||
static inline int genlmsg_cancel(struct sk_buff *skb, void *hdr) | ||
{ | ||
return nlmsg_cancel(skb, hdr - GENL_HDRLEN - NLMSG_HDRLEN); | ||
} | ||
|
||
/** | ||
* genlmsg_multicast - multicast a netlink message | ||
* @skb: netlink message as socket buffer | ||
* @pid: own netlink pid to avoid sending to yourself | ||
* @group: multicast group id | ||
*/ | ||
static inline int genlmsg_multicast(struct sk_buff *skb, u32 pid, | ||
unsigned int group) | ||
{ | ||
return nlmsg_multicast(genl_sock, skb, pid, group); | ||
} | ||
|
||
/** | ||
* genlmsg_unicast - unicast a netlink message | ||
* @skb: netlink message as socket buffer | ||
* @pid: netlink pid of the destination socket | ||
*/ | ||
static inline int genlmsg_unicast(struct sk_buff *skb, u32 pid) | ||
{ | ||
return nlmsg_unicast(genl_sock, skb, pid); | ||
} | ||
|
||
#endif /* __NET_GENERIC_NETLINK_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,4 +2,4 @@ | |
# Makefile for the netlink driver. | ||
# | ||
|
||
obj-y := af_netlink.o attr.o | ||
obj-y := af_netlink.o attr.o genetlink.o |
Oops, something went wrong.