294 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			294 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __NETLINK_KERNEL_H_
 | |
| #define __NETLINK_KERNEL_H_
 | |
| 
 | |
| #if 0
 | |
| 
 | |
| /*
 | |
|  * FIXME: Goal is to preseve the documentation but make it simple
 | |
|  * to keep linux/netlink.h in sync. Maybe use named documentation
 | |
|  * sections.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Netlink socket address
 | |
|  * @ingroup nl
 | |
|  */
 | |
| struct sockaddr_nl
 | |
| {
 | |
| 	/** socket family (AF_NETLINK) */
 | |
| 	sa_family_t     nl_family;
 | |
| 
 | |
| 	/** Padding (unused) */
 | |
| 	unsigned short  nl_pad;
 | |
| 
 | |
| 	/** Unique process ID  */
 | |
| 	uint32_t        nl_pid;
 | |
| 
 | |
| 	/** Multicast group subscriptions */
 | |
| 	uint32_t        nl_groups;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @addtogroup msg
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Netlink message header
 | |
|  */
 | |
| struct nlmsghdr
 | |
| {
 | |
| 	/** Length of message including header and padding. */
 | |
| 	uint32_t	nlmsg_len;
 | |
| 
 | |
| 	/** Message type (content type) */
 | |
| 	uint16_t	nlmsg_type;
 | |
| 
 | |
| 	/** Message flags */
 | |
| 	uint16_t	nlmsg_flags;
 | |
| 
 | |
| 	/** Sequence number of message \see core_sk_seq_num. */
 | |
| 	uint32_t	nlmsg_seq;
 | |
| 
 | |
| 	/** Netlink port */
 | |
| 	uint32_t	nlmsg_pid;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @name Standard message flags
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Must be set on all request messages (typically from user space to
 | |
|  * kernel space).
 | |
|  */
 | |
| #define NLM_F_REQUEST		1
 | |
| 
 | |
| /**
 | |
|  * Indicates the message is part of a multipart message terminated
 | |
|  * by NLMSG_DONE.
 | |
|  */
 | |
| #define NLM_F_MULTI		2
 | |
| 
 | |
| /**
 | |
|  * Request for an acknowledgment on success.
 | |
|  */
 | |
| #define NLM_F_ACK		4
 | |
| 
 | |
| /**
 | |
|  * Echo this request
 | |
|  */
 | |
| #define NLM_F_ECHO		8
 | |
| 
 | |
| /** @} */
 | |
| 
 | |
| /**
 | |
|  * @name Additional message flags for GET requests
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Return the complete table instead of a single entry.
 | |
|  */
 | |
| #define NLM_F_ROOT	0x100
 | |
| 
 | |
| /**
 | |
|  * Return all entries matching criteria passed in message content.
 | |
|  */
 | |
| #define NLM_F_MATCH	0x200
 | |
| 
 | |
| /**
 | |
|  * Return an atomic snapshot of the table being referenced. This
 | |
|  * may require special privileges because it has the potential to
 | |
|  * interrupt service in the FE for a longer time.
 | |
|  */
 | |
| #define NLM_F_ATOMIC	0x400
 | |
| 
 | |
| /**
 | |
|  * Dump all entries
 | |
|  */
 | |
| #define NLM_F_DUMP	(NLM_F_ROOT|NLM_F_MATCH)
 | |
| 
 | |
| /** @} */
 | |
| 
 | |
| /**
 | |
|  * @name Additional messsage flags for NEW requests
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Replace existing matching config object with this request.
 | |
|  */
 | |
| #define NLM_F_REPLACE	0x100
 | |
| 
 | |
| /**
 | |
|  * Don't replace the config object if it already exists.
 | |
|  */
 | |
| #define NLM_F_EXCL	0x200
 | |
| 
 | |
| /**
 | |
|  * Create config object if it doesn't already exist.
 | |
|  */
 | |
| #define NLM_F_CREATE	0x400
 | |
| 
 | |
| /**
 | |
|  * Add to the end of the object list.
 | |
|  */
 | |
| #define NLM_F_APPEND	0x800
 | |
| 
 | |
| /** @} */
 | |
| 
 | |
| /**
 | |
|  * @name Standard Message types
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * No operation, message must be ignored
 | |
|  */
 | |
| #define NLMSG_NOOP		0x1
 | |
| 
 | |
| /**
 | |
|  * The message signals an error and the payload contains a nlmsgerr
 | |
|  * structure. This can be looked at as a NACK and typically it is
 | |
|  * from FEC to CPC.
 | |
|  */
 | |
| #define NLMSG_ERROR		0x2
 | |
| 
 | |
| /**
 | |
|  * Message terminates a multipart message.
 | |
|  */
 | |
| #define NLMSG_DONE		0x3
 | |
| 
 | |
| /**
 | |
|  * The message signals that data got lost
 | |
|  */
 | |
| #define NLMSG_OVERRUN		0x4
 | |
| 
 | |
| /**
 | |
|  * Lower limit of reserved message types
 | |
|  */
 | |
| #define NLMSG_MIN_TYPE		0x10
 | |
| 
 | |
| /** @} */
 | |
| 
 | |
| /**
 | |
|  * Netlink error message header
 | |
|  */
 | |
| struct nlmsgerr
 | |
| {
 | |
| 	/** Error code (errno number) */
 | |
| 	int		error;
 | |
| 
 | |
| 	/** Original netlink message causing the error */
 | |
| 	struct nlmsghdr	msg;
 | |
| };
 | |
| 
 | |
| struct nl_pktinfo
 | |
| {
 | |
| 	__u32	group;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Netlink alignment constant, all boundries within messages must be align to this.
 | |
|  *
 | |
|  * See \ref core_msg_fmt_align for more information on message alignment.
 | |
|  */
 | |
| #define NLMSG_ALIGNTO	4
 | |
| 
 | |
| /**
 | |
|  * Returns \p len properly aligned to NLMSG_ALIGNTO.
 | |
|  *
 | |
|  * See \ref core_msg_fmt_align for more information on message alignment.
 | |
|  */
 | |
| #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
 | |
| 
 | |
| /**
 | |
|  * Length of a netlink message header including padding.
 | |
|  *
 | |
|  * See \ref core_msg_fmt_align for more information on message alignment.
 | |
|  */
 | |
| #define NLMSG_HDRLEN	 ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
 | |
| 
 | |
| /** @} */
 | |
| 
 | |
| /**
 | |
|  * @addtogroup attr
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Netlink attribute structure
 | |
|  *
 | |
|  * @code
 | |
|  *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
 | |
|  * +---------------------+- - -+- - - - - - - - - -+- - -+
 | |
|  * |        Header       | Pad |     Payload       | Pad |
 | |
|  * |   (struct nlattr)   | ing |                   | ing |
 | |
|  * +---------------------+- - -+- - - - - - - - - -+- - -+
 | |
|  *  <-------------- nlattr->nla_len -------------->
 | |
|  * @endcode
 | |
|  */
 | |
| struct nlattr {
 | |
| 	/**
 | |
| 	 * Attribute length in bytes including header
 | |
| 	 */
 | |
| 	__u16           nla_len;
 | |
| 
 | |
| 	/**
 | |
| 	 * Netlink attribute type
 | |
| 	 */
 | |
| 	__u16           nla_type;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @name Attribute Type Flags
 | |
|  *
 | |
|  * @code
 | |
|  * nla_type (16 bits)
 | |
|  * +---+---+-------------------------------+
 | |
|  * | N | O | Attribute Type                |
 | |
|  * +---+---+-------------------------------+
 | |
|  * N := Carries nested attributes
 | |
|  * O := Payload stored in network byte order
 | |
|  * @endcode
 | |
|  *
 | |
|  * @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)
 | |
| 
 | |
| /** @} */
 | |
| 
 | |
| #define NLA_ALIGNTO		4
 | |
| 
 | |
| /**
 | |
|  * Returns \p len properly aligned to NLA_ALIGNTO.
 | |
|  *
 | |
|  * See \ref core_msg_fmt_align for more information on message alignment.
 | |
|  */
 | |
| #define NLA_ALIGN(len)		(((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
 | |
| 
 | |
| /**
 | |
|  * Length of a netlink attribute header including padding.
 | |
|  *
 | |
|  * See \ref core_msg_fmt_align for more information on message alignment.
 | |
|  */
 | |
| #define NLA_HDRLEN		((int) NLA_ALIGN(sizeof(struct nlattr)))
 | |
| 
 | |
| /** @} */
 | |
| 
 | |
| #endif
 | |
| #endif	/* __LINUX_NETLINK_H */
 | 
