linux-headers (unknown)

(root)/
include/
linux/
netlink.h
       1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
       2  #ifndef __LINUX_NETLINK_H
       3  #define __LINUX_NETLINK_H
       4  
       5  #include <linux/const.h>
       6  #include <linux/socket.h> /* for __kernel_sa_family_t */
       7  #include <linux/types.h>
       8  
       9  #define NETLINK_ROUTE		0	/* Routing/device hook				*/
      10  #define NETLINK_UNUSED		1	/* Unused number				*/
      11  #define NETLINK_USERSOCK	2	/* Reserved for user mode socket protocols 	*/
      12  #define NETLINK_FIREWALL	3	/* Unused number, formerly ip_queue		*/
      13  #define NETLINK_SOCK_DIAG	4	/* socket monitoring				*/
      14  #define NETLINK_NFLOG		5	/* netfilter/iptables ULOG */
      15  #define NETLINK_XFRM		6	/* ipsec */
      16  #define NETLINK_SELINUX		7	/* SELinux event notifications */
      17  #define NETLINK_ISCSI		8	/* Open-iSCSI */
      18  #define NETLINK_AUDIT		9	/* auditing */
      19  #define NETLINK_FIB_LOOKUP	10	
      20  #define NETLINK_CONNECTOR	11
      21  #define NETLINK_NETFILTER	12	/* netfilter subsystem */
      22  #define NETLINK_IP6_FW		13
      23  #define NETLINK_DNRTMSG		14	/* DECnet routing messages (obsolete) */
      24  #define NETLINK_KOBJECT_UEVENT	15	/* Kernel messages to userspace */
      25  #define NETLINK_GENERIC		16
      26  /* leave room for NETLINK_DM (DM Events) */
      27  #define NETLINK_SCSITRANSPORT	18	/* SCSI Transports */
      28  #define NETLINK_ECRYPTFS	19
      29  #define NETLINK_RDMA		20
      30  #define NETLINK_CRYPTO		21	/* Crypto layer */
      31  #define NETLINK_SMC		22	/* SMC monitoring */
      32  
      33  #define NETLINK_INET_DIAG	NETLINK_SOCK_DIAG
      34  
      35  #define MAX_LINKS 32		
      36  
      37  struct sockaddr_nl {
      38  	__kernel_sa_family_t	nl_family;	/* AF_NETLINK	*/
      39  	unsigned short	nl_pad;		/* zero		*/
      40  	__u32		nl_pid;		/* port ID	*/
      41         	__u32		nl_groups;	/* multicast groups mask */
      42  };
      43  
      44  /**
      45   * struct nlmsghdr - fixed format metadata header of Netlink messages
      46   * @nlmsg_len:   Length of message including header
      47   * @nlmsg_type:  Message content type
      48   * @nlmsg_flags: Additional flags
      49   * @nlmsg_seq:   Sequence number
      50   * @nlmsg_pid:   Sending process port ID
      51   */
      52  struct nlmsghdr {
      53  	__u32		nlmsg_len;
      54  	__u16		nlmsg_type;
      55  	__u16		nlmsg_flags;
      56  	__u32		nlmsg_seq;
      57  	__u32		nlmsg_pid;
      58  };
      59  
      60  /* Flags values */
      61  
      62  #define NLM_F_REQUEST		0x01	/* It is request message. 	*/
      63  #define NLM_F_MULTI		0x02	/* Multipart message, terminated by NLMSG_DONE */
      64  #define NLM_F_ACK		0x04	/* Reply with ack, with zero or error code */
      65  #define NLM_F_ECHO		0x08	/* Receive resulting notifications */
      66  #define NLM_F_DUMP_INTR		0x10	/* Dump was inconsistent due to sequence change */
      67  #define NLM_F_DUMP_FILTERED	0x20	/* Dump was filtered as requested */
      68  
      69  /* Modifiers to GET request */
      70  #define NLM_F_ROOT	0x100	/* specify tree	root	*/
      71  #define NLM_F_MATCH	0x200	/* return all matching	*/
      72  #define NLM_F_ATOMIC	0x400	/* atomic GET		*/
      73  #define NLM_F_DUMP	(NLM_F_ROOT|NLM_F_MATCH)
      74  
      75  /* Modifiers to NEW request */
      76  #define NLM_F_REPLACE	0x100	/* Override existing		*/
      77  #define NLM_F_EXCL	0x200	/* Do not touch, if it exists	*/
      78  #define NLM_F_CREATE	0x400	/* Create, if it does not exist	*/
      79  #define NLM_F_APPEND	0x800	/* Add to end of list		*/
      80  
      81  /* Modifiers to DELETE request */
      82  #define NLM_F_NONREC	0x100	/* Do not delete recursively	*/
      83  #define NLM_F_BULK	0x200	/* Delete multiple objects	*/
      84  
      85  /* Flags for ACK message */
      86  #define NLM_F_CAPPED	0x100	/* request was capped */
      87  #define NLM_F_ACK_TLVS	0x200	/* extended ACK TVLs were included */
      88  
      89  /*
      90     4.4BSD ADD		NLM_F_CREATE|NLM_F_EXCL
      91     4.4BSD CHANGE	NLM_F_REPLACE
      92  
      93     True CHANGE		NLM_F_CREATE|NLM_F_REPLACE
      94     Append		NLM_F_CREATE
      95     Check		NLM_F_EXCL
      96   */
      97  
      98  #define NLMSG_ALIGNTO	4U
      99  #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
     100  #define NLMSG_HDRLEN	 ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
     101  #define NLMSG_LENGTH(len) ((len) + NLMSG_HDRLEN)
     102  #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
     103  #define NLMSG_DATA(nlh)  ((void *)(((char *)nlh) + NLMSG_HDRLEN))
     104  #define NLMSG_NEXT(nlh,len)	 ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
     105  				  (struct nlmsghdr *)(((char *)(nlh)) + \
     106  				  NLMSG_ALIGN((nlh)->nlmsg_len)))
     107  #define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
     108  			   (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
     109  			   (nlh)->nlmsg_len <= (len))
     110  #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
     111  
     112  #define NLMSG_NOOP		0x1	/* Nothing.		*/
     113  #define NLMSG_ERROR		0x2	/* Error		*/
     114  #define NLMSG_DONE		0x3	/* End of a dump	*/
     115  #define NLMSG_OVERRUN		0x4	/* Data lost		*/
     116  
     117  #define NLMSG_MIN_TYPE		0x10	/* < 0x10: reserved control messages */
     118  
     119  struct nlmsgerr {
     120  	int		error;
     121  	struct nlmsghdr msg;
     122  	/*
     123  	 * followed by the message contents unless NETLINK_CAP_ACK was set
     124  	 * or the ACK indicates success (error == 0)
     125  	 * message length is aligned with NLMSG_ALIGN()
     126  	 */
     127  	/*
     128  	 * followed by TLVs defined in enum nlmsgerr_attrs
     129  	 * if NETLINK_EXT_ACK was set
     130  	 */
     131  };
     132  
     133  /**
     134   * enum nlmsgerr_attrs - nlmsgerr attributes
     135   * @NLMSGERR_ATTR_UNUSED: unused
     136   * @NLMSGERR_ATTR_MSG: error message string (string)
     137   * @NLMSGERR_ATTR_OFFS: offset of the invalid attribute in the original
     138   *	 message, counting from the beginning of the header (u32)
     139   * @NLMSGERR_ATTR_COOKIE: arbitrary subsystem specific cookie to
     140   *	be used - in the success case - to identify a created
     141   *	object or operation or similar (binary)
     142   * @NLMSGERR_ATTR_POLICY: policy for a rejected attribute
     143   * @NLMSGERR_ATTR_MISS_TYPE: type of a missing required attribute,
     144   *	%NLMSGERR_ATTR_MISS_NEST will not be present if the attribute was
     145   *	missing at the message level
     146   * @NLMSGERR_ATTR_MISS_NEST: offset of the nest where attribute was missing
     147   * @__NLMSGERR_ATTR_MAX: number of attributes
     148   * @NLMSGERR_ATTR_MAX: highest attribute number
     149   */
     150  enum nlmsgerr_attrs {
     151  	NLMSGERR_ATTR_UNUSED,
     152  	NLMSGERR_ATTR_MSG,
     153  	NLMSGERR_ATTR_OFFS,
     154  	NLMSGERR_ATTR_COOKIE,
     155  	NLMSGERR_ATTR_POLICY,
     156  	NLMSGERR_ATTR_MISS_TYPE,
     157  	NLMSGERR_ATTR_MISS_NEST,
     158  
     159  	__NLMSGERR_ATTR_MAX,
     160  	NLMSGERR_ATTR_MAX = __NLMSGERR_ATTR_MAX - 1
     161  };
     162  
     163  #define NETLINK_ADD_MEMBERSHIP		1
     164  #define NETLINK_DROP_MEMBERSHIP		2
     165  #define NETLINK_PKTINFO			3
     166  #define NETLINK_BROADCAST_ERROR		4
     167  #define NETLINK_NO_ENOBUFS		5
     168  #define NETLINK_RX_RING			6
     169  #define NETLINK_TX_RING			7
     170  #define NETLINK_LISTEN_ALL_NSID		8
     171  #define NETLINK_LIST_MEMBERSHIPS	9
     172  #define NETLINK_CAP_ACK			10
     173  #define NETLINK_EXT_ACK			11
     174  #define NETLINK_GET_STRICT_CHK		12
     175  
     176  struct nl_pktinfo {
     177  	__u32	group;
     178  };
     179  
     180  struct nl_mmap_req {
     181  	unsigned int	nm_block_size;
     182  	unsigned int	nm_block_nr;
     183  	unsigned int	nm_frame_size;
     184  	unsigned int	nm_frame_nr;
     185  };
     186  
     187  struct nl_mmap_hdr {
     188  	unsigned int	nm_status;
     189  	unsigned int	nm_len;
     190  	__u32		nm_group;
     191  	/* credentials */
     192  	__u32		nm_pid;
     193  	__u32		nm_uid;
     194  	__u32		nm_gid;
     195  };
     196  
     197  enum nl_mmap_status {
     198  	NL_MMAP_STATUS_UNUSED,
     199  	NL_MMAP_STATUS_RESERVED,
     200  	NL_MMAP_STATUS_VALID,
     201  	NL_MMAP_STATUS_COPY,
     202  	NL_MMAP_STATUS_SKIP,
     203  };
     204  
     205  #define NL_MMAP_MSG_ALIGNMENT		NLMSG_ALIGNTO
     206  #define NL_MMAP_MSG_ALIGN(sz)		__ALIGN_KERNEL(sz, NL_MMAP_MSG_ALIGNMENT)
     207  #define NL_MMAP_HDRLEN			NL_MMAP_MSG_ALIGN(sizeof(struct nl_mmap_hdr))
     208  
     209  #define NET_MAJOR 36		/* Major 36 is reserved for networking 						*/
     210  
     211  enum {
     212  	NETLINK_UNCONNECTED = 0,
     213  	NETLINK_CONNECTED,
     214  };
     215  
     216  /*
     217   *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
     218   * +---------------------+- - -+- - - - - - - - - -+- - -+
     219   * |        Header       | Pad |     Payload       | Pad |
     220   * |   (struct nlattr)   | ing |                   | ing |
     221   * +---------------------+- - -+- - - - - - - - - -+- - -+
     222   *  <-------------- nlattr->nla_len -------------->
     223   */
     224  
     225  struct nlattr {
     226  	__u16           nla_len;
     227  	__u16           nla_type;
     228  };
     229  
     230  /*
     231   * nla_type (16 bits)
     232   * +---+---+-------------------------------+
     233   * | N | O | Attribute Type                |
     234   * +---+---+-------------------------------+
     235   * N := Carries nested attributes
     236   * O := Payload stored in network byte order
     237   *
     238   * Note: The N and O flag are mutually exclusive.
     239   */
     240  #define NLA_F_NESTED		(1 << 15)
     241  #define NLA_F_NET_BYTEORDER	(1 << 14)
     242  #define NLA_TYPE_MASK		~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
     243  
     244  #define NLA_ALIGNTO		4
     245  #define NLA_ALIGN(len)		(((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
     246  #define NLA_HDRLEN		((int) NLA_ALIGN(sizeof(struct nlattr)))
     247  
     248  /* Generic 32 bitflags attribute content sent to the kernel.
     249   *
     250   * The value is a bitmap that defines the values being set
     251   * The selector is a bitmask that defines which value is legit
     252   *
     253   * Examples:
     254   *  value = 0x0, and selector = 0x1
     255   *  implies we are selecting bit 1 and we want to set its value to 0.
     256   *
     257   *  value = 0x2, and selector = 0x2
     258   *  implies we are selecting bit 2 and we want to set its value to 1.
     259   *
     260   */
     261  struct nla_bitfield32 {
     262  	__u32 value;
     263  	__u32 selector;
     264  };
     265  
     266  /*
     267   * policy descriptions - it's specific to each family how this is used
     268   * Normally, it should be retrieved via a dump inside another attribute
     269   * specifying where it applies.
     270   */
     271  
     272  /**
     273   * enum netlink_attribute_type - type of an attribute
     274   * @NL_ATTR_TYPE_INVALID: unused
     275   * @NL_ATTR_TYPE_FLAG: flag attribute (present/not present)
     276   * @NL_ATTR_TYPE_U8: 8-bit unsigned attribute
     277   * @NL_ATTR_TYPE_U16: 16-bit unsigned attribute
     278   * @NL_ATTR_TYPE_U32: 32-bit unsigned attribute
     279   * @NL_ATTR_TYPE_U64: 64-bit unsigned attribute
     280   * @NL_ATTR_TYPE_S8: 8-bit signed attribute
     281   * @NL_ATTR_TYPE_S16: 16-bit signed attribute
     282   * @NL_ATTR_TYPE_S32: 32-bit signed attribute
     283   * @NL_ATTR_TYPE_S64: 64-bit signed attribute
     284   * @NL_ATTR_TYPE_BINARY: binary data, min/max length may be specified
     285   * @NL_ATTR_TYPE_STRING: string, min/max length may be specified
     286   * @NL_ATTR_TYPE_NUL_STRING: NUL-terminated string,
     287   *	min/max length may be specified
     288   * @NL_ATTR_TYPE_NESTED: nested, i.e. the content of this attribute
     289   *	consists of sub-attributes. The nested policy and maxtype
     290   *	inside may be specified.
     291   * @NL_ATTR_TYPE_NESTED_ARRAY: nested array, i.e. the content of this
     292   *	attribute contains sub-attributes whose type is irrelevant
     293   *	(just used to separate the array entries) and each such array
     294   *	entry has attributes again, the policy for those inner ones
     295   *	and the corresponding maxtype may be specified.
     296   * @NL_ATTR_TYPE_BITFIELD32: &struct nla_bitfield32 attribute
     297   */
     298  enum netlink_attribute_type {
     299  	NL_ATTR_TYPE_INVALID,
     300  
     301  	NL_ATTR_TYPE_FLAG,
     302  
     303  	NL_ATTR_TYPE_U8,
     304  	NL_ATTR_TYPE_U16,
     305  	NL_ATTR_TYPE_U32,
     306  	NL_ATTR_TYPE_U64,
     307  
     308  	NL_ATTR_TYPE_S8,
     309  	NL_ATTR_TYPE_S16,
     310  	NL_ATTR_TYPE_S32,
     311  	NL_ATTR_TYPE_S64,
     312  
     313  	NL_ATTR_TYPE_BINARY,
     314  	NL_ATTR_TYPE_STRING,
     315  	NL_ATTR_TYPE_NUL_STRING,
     316  
     317  	NL_ATTR_TYPE_NESTED,
     318  	NL_ATTR_TYPE_NESTED_ARRAY,
     319  
     320  	NL_ATTR_TYPE_BITFIELD32,
     321  };
     322  
     323  /**
     324   * enum netlink_policy_type_attr - policy type attributes
     325   * @NL_POLICY_TYPE_ATTR_UNSPEC: unused
     326   * @NL_POLICY_TYPE_ATTR_TYPE: type of the attribute,
     327   *	&enum netlink_attribute_type (U32)
     328   * @NL_POLICY_TYPE_ATTR_MIN_VALUE_S: minimum value for signed
     329   *	integers (S64)
     330   * @NL_POLICY_TYPE_ATTR_MAX_VALUE_S: maximum value for signed
     331   *	integers (S64)
     332   * @NL_POLICY_TYPE_ATTR_MIN_VALUE_U: minimum value for unsigned
     333   *	integers (U64)
     334   * @NL_POLICY_TYPE_ATTR_MAX_VALUE_U: maximum value for unsigned
     335   *	integers (U64)
     336   * @NL_POLICY_TYPE_ATTR_MIN_LENGTH: minimum length for binary
     337   *	attributes, no minimum if not given (U32)
     338   * @NL_POLICY_TYPE_ATTR_MAX_LENGTH: maximum length for binary
     339   *	attributes, no maximum if not given (U32)
     340   * @NL_POLICY_TYPE_ATTR_POLICY_IDX: sub policy for nested and
     341   *	nested array types (U32)
     342   * @NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE: maximum sub policy
     343   *	attribute for nested and nested array types, this can
     344   *	in theory be < the size of the policy pointed to by
     345   *	the index, if limited inside the nesting (U32)
     346   * @NL_POLICY_TYPE_ATTR_BITFIELD32_MASK: valid mask for the
     347   *	bitfield32 type (U32)
     348   * @NL_POLICY_TYPE_ATTR_MASK: mask of valid bits for unsigned integers (U64)
     349   * @NL_POLICY_TYPE_ATTR_PAD: pad attribute for 64-bit alignment
     350   *
     351   * @__NL_POLICY_TYPE_ATTR_MAX: number of attributes
     352   * @NL_POLICY_TYPE_ATTR_MAX: highest attribute number
     353   */
     354  enum netlink_policy_type_attr {
     355  	NL_POLICY_TYPE_ATTR_UNSPEC,
     356  	NL_POLICY_TYPE_ATTR_TYPE,
     357  	NL_POLICY_TYPE_ATTR_MIN_VALUE_S,
     358  	NL_POLICY_TYPE_ATTR_MAX_VALUE_S,
     359  	NL_POLICY_TYPE_ATTR_MIN_VALUE_U,
     360  	NL_POLICY_TYPE_ATTR_MAX_VALUE_U,
     361  	NL_POLICY_TYPE_ATTR_MIN_LENGTH,
     362  	NL_POLICY_TYPE_ATTR_MAX_LENGTH,
     363  	NL_POLICY_TYPE_ATTR_POLICY_IDX,
     364  	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE,
     365  	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK,
     366  	NL_POLICY_TYPE_ATTR_PAD,
     367  	NL_POLICY_TYPE_ATTR_MASK,
     368  
     369  	/* keep last */
     370  	__NL_POLICY_TYPE_ATTR_MAX,
     371  	NL_POLICY_TYPE_ATTR_MAX = __NL_POLICY_TYPE_ATTR_MAX - 1
     372  };
     373  
     374  #endif /* __LINUX_NETLINK_H */