You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
294 lines
5.2 KiB
294 lines
5.2 KiB
#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 */
|