linux/include/linux/genetlink.h
<<
>>
Prefs
   1#ifndef __LINUX_GENERIC_NETLINK_H
   2#define __LINUX_GENERIC_NETLINK_H
   3
   4#include <linux/types.h>
   5#include <linux/netlink.h>
   6
   7#define GENL_NAMSIZ     16      /* length of family name */
   8
   9#define GENL_MIN_ID     NLMSG_MIN_TYPE
  10#define GENL_MAX_ID     1023
  11
  12struct genlmsghdr {
  13        __u8    cmd;
  14        __u8    version;
  15        __u16   reserved;
  16};
  17
  18#define GENL_HDRLEN     NLMSG_ALIGN(sizeof(struct genlmsghdr))
  19
  20#define GENL_ADMIN_PERM         0x01
  21#define GENL_CMD_CAP_DO         0x02
  22#define GENL_CMD_CAP_DUMP       0x04
  23#define GENL_CMD_CAP_HASPOL     0x08
  24
  25/*
  26 * List of reserved static generic netlink identifiers:
  27 */
  28#define GENL_ID_GENERATE        0
  29#define GENL_ID_CTRL            NLMSG_MIN_TYPE
  30
  31/**************************************************************************
  32 * Controller
  33 **************************************************************************/
  34
  35enum {
  36        CTRL_CMD_UNSPEC,
  37        CTRL_CMD_NEWFAMILY,
  38        CTRL_CMD_DELFAMILY,
  39        CTRL_CMD_GETFAMILY,
  40        CTRL_CMD_NEWOPS,
  41        CTRL_CMD_DELOPS,
  42        CTRL_CMD_GETOPS,
  43        CTRL_CMD_NEWMCAST_GRP,
  44        CTRL_CMD_DELMCAST_GRP,
  45        CTRL_CMD_GETMCAST_GRP, /* unused */
  46        __CTRL_CMD_MAX,
  47};
  48
  49#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1)
  50
  51enum {
  52        CTRL_ATTR_UNSPEC,
  53        CTRL_ATTR_FAMILY_ID,
  54        CTRL_ATTR_FAMILY_NAME,
  55        CTRL_ATTR_VERSION,
  56        CTRL_ATTR_HDRSIZE,
  57        CTRL_ATTR_MAXATTR,
  58        CTRL_ATTR_OPS,
  59        CTRL_ATTR_MCAST_GROUPS,
  60        __CTRL_ATTR_MAX,
  61};
  62
  63#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
  64
  65enum {
  66        CTRL_ATTR_OP_UNSPEC,
  67        CTRL_ATTR_OP_ID,
  68        CTRL_ATTR_OP_FLAGS,
  69        __CTRL_ATTR_OP_MAX,
  70};
  71
  72#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
  73
  74enum {
  75        CTRL_ATTR_MCAST_GRP_UNSPEC,
  76        CTRL_ATTR_MCAST_GRP_NAME,
  77        CTRL_ATTR_MCAST_GRP_ID,
  78        __CTRL_ATTR_MCAST_GRP_MAX,
  79};
  80
  81#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
  82
  83#ifdef __KERNEL__
  84
  85/* All generic netlink requests are serialized by a global lock.  */
  86extern void genl_lock(void);
  87extern void genl_unlock(void);
  88#ifdef CONFIG_PROVE_LOCKING
  89extern int lockdep_genl_is_held(void);
  90#endif
  91
  92/**
  93 * rcu_dereference_genl - rcu_dereference with debug checking
  94 * @p: The pointer to read, prior to dereferencing
  95 *
  96 * Do an rcu_dereference(p), but check caller either holds rcu_read_lock()
  97 * or genl mutex. Note : Please prefer genl_dereference() or rcu_dereference()
  98 */
  99#define rcu_dereference_genl(p)                                 \
 100        rcu_dereference_check(p, lockdep_genl_is_held())
 101
 102/**
 103 * genl_dereference - fetch RCU pointer when updates are prevented by genl mutex
 104 * @p: The pointer to read, prior to dereferencing
 105 *
 106 * Return the value of the specified RCU-protected pointer, but omit
 107 * both the smp_read_barrier_depends() and the ACCESS_ONCE(), because
 108 * caller holds genl mutex.
 109 */
 110#define genl_dereference(p)                                     \
 111        rcu_dereference_protected(p, lockdep_genl_is_held())
 112
 113#define MODULE_ALIAS_GENL_FAMILY(family)\
 114 MODULE_ALIAS_NET_PF_PROTO_NAME(PF_NETLINK, NETLINK_GENERIC, "-family-" family)
 115
 116#endif /* __KERNEL__ */
 117
 118#endif  /* __LINUX_GENERIC_NETLINK_H */
 119