diff options
author | Thomas Graf <tgraf@suug.ch> | 2010-11-27 09:18:07 (GMT) |
---|---|---|
committer | Thomas Graf <tgraf@suug.ch> | 2010-11-27 09:18:07 (GMT) |
commit | 5644578190c3364300128799967d4e7b5e920242 (patch) | |
tree | 9972036e0000c249cf776cb55e8340875c54cd5f /include | |
parent | 7105aea116208422812a3803ef1e58f08b45c75e (diff) | |
download | libnl-5644578190c3364300128799967d4e7b5e920242.zip libnl-5644578190c3364300128799967d4e7b5e920242.tar.gz libnl-5644578190c3364300128799967d4e7b5e920242.tar.bz2 |
Tons of documentation
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/netlink.h | 94 | ||||
-rw-r--r-- | include/netlink/netlink-kernel.h | 136 |
2 files changed, 112 insertions, 118 deletions
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 893686f..971a94f 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h @@ -29,52 +29,6 @@ struct net; -struct sockaddr_nl { - sa_family_t nl_family; /* AF_NETLINK */ - unsigned short nl_pad; /* zero */ - __u32 nl_pid; /* port ID */ - __u32 nl_groups; /* multicast groups mask */ -}; - -struct nlmsghdr { - __u32 nlmsg_len; /* Length of message including header */ - __u16 nlmsg_type; /* Message content */ - __u16 nlmsg_flags; /* Additional flags */ - __u32 nlmsg_seq; /* Sequence number */ - __u32 nlmsg_pid; /* Sending process port ID */ -}; - -/* Flags values */ - -#define NLM_F_REQUEST 1 /* It is request message. */ -#define NLM_F_MULTI 2 /* Multipart message, terminated by NLMSG_DONE */ -#define NLM_F_ACK 4 /* Reply with ack, with zero or error code */ -#define NLM_F_ECHO 8 /* Echo this request */ - -/* Modifiers to GET request */ -#define NLM_F_ROOT 0x100 /* specify tree root */ -#define NLM_F_MATCH 0x200 /* return all matching */ -#define NLM_F_ATOMIC 0x400 /* atomic GET */ -#define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH) - -/* Modifiers to NEW request */ -#define NLM_F_REPLACE 0x100 /* Override existing */ -#define NLM_F_EXCL 0x200 /* Do not touch, if it exists */ -#define NLM_F_CREATE 0x400 /* Create, if it does not exist */ -#define NLM_F_APPEND 0x800 /* Add to end of list */ - -/* - 4.4BSD ADD NLM_F_CREATE|NLM_F_EXCL - 4.4BSD CHANGE NLM_F_REPLACE - - True CHANGE NLM_F_CREATE|NLM_F_REPLACE - Append NLM_F_CREATE - Check NLM_F_EXCL - */ - -#define NLMSG_ALIGNTO 4 -#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) ) -#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr))) #define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN)) #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len)) #define NLMSG_DATA(nlh) ((void*)(((char*)nlh) + NLMSG_LENGTH(0))) @@ -85,28 +39,12 @@ struct nlmsghdr { (nlh)->nlmsg_len <= (len)) #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len))) -#define NLMSG_NOOP 0x1 /* Nothing. */ -#define NLMSG_ERROR 0x2 /* Error */ -#define NLMSG_DONE 0x3 /* End of a dump */ -#define NLMSG_OVERRUN 0x4 /* Data lost */ - -#define NLMSG_MIN_TYPE 0x10 /* < 0x10: reserved control messages */ - -struct nlmsgerr { - int error; - struct nlmsghdr msg; -}; - #define NETLINK_ADD_MEMBERSHIP 1 #define NETLINK_DROP_MEMBERSHIP 2 #define NETLINK_PKTINFO 3 #define NETLINK_BROADCAST_ERROR 4 #define NETLINK_NO_ENOBUFS 5 -struct nl_pktinfo { - __u32 group; -}; - #define NET_MAJOR 36 /* Major 36 is reserved for networking */ enum { @@ -114,36 +52,4 @@ enum { NETLINK_CONNECTED, }; -/* - * <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)--> - * +---------------------+- - -+- - - - - - - - - -+- - -+ - * | Header | Pad | Payload | Pad | - * | (struct nlattr) | ing | | ing | - * +---------------------+- - -+- - - - - - - - - -+- - -+ - * <-------------- nlattr->nla_len --------------> - */ - -struct nlattr { - __u16 nla_len; - __u16 nla_type; -}; - -/* - * nla_type (16 bits) - * +---+---+-------------------------------+ - * | N | O | Attribute Type | - * +---+---+-------------------------------+ - * N := Carries nested attributes - * O := Payload stored in network byte order - * - * 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 -#define NLA_ALIGN(len) (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1)) -#define NLA_HDRLEN ((int) NLA_ALIGN(sizeof(struct nlattr))) - #endif /* __LINUX_NETLINK_H */ diff --git a/include/netlink/netlink-kernel.h b/include/netlink/netlink-kernel.h index a0f5535..d3a4128 100644 --- a/include/netlink/netlink-kernel.h +++ b/include/netlink/netlink-kernel.h @@ -1,5 +1,5 @@ -#ifndef __LINUX_NETLINK_H -#define __LINUX_NETLINK_H +#ifndef __NETLINK_KERNEL_H_ +#define __NETLINK_KERNEL_H_ /** * Netlink socket address @@ -21,34 +21,29 @@ struct sockaddr_nl }; /** + * @addtogroup msg + * @{ + */ + + +/** * Netlink message header - * @ingroup msg */ struct nlmsghdr { - /** - * Length of message including header. - */ + /** Length of message including header and padding. */ uint32_t nlmsg_len; - /** - * Message type (content type) - */ + /** Message type (content type) */ uint16_t nlmsg_type; - /** - * Message flags - */ + /** Message flags */ uint16_t nlmsg_flags; - /** - * Sequence number - */ + /** Sequence number of message \see core_sk_seq_num. */ uint32_t nlmsg_seq; - /** - * Netlink PID of the proccess sending the message. - */ + /** Netlink port */ uint32_t nlmsg_pid; }; @@ -60,7 +55,6 @@ struct nlmsghdr /** * Must be set on all request messages (typically from user space to * kernel space). - * @ingroup msg */ #define NLM_F_REQUEST 1 @@ -89,7 +83,6 @@ struct nlmsghdr /** * Return the complete table instead of a single entry. - * @ingroup msg */ #define NLM_F_ROOT 0x100 @@ -119,7 +112,6 @@ struct nlmsghdr /** * Replace existing matching config object with this request. - * @ingroup msg */ #define NLM_F_REPLACE 0x100 @@ -147,7 +139,6 @@ struct nlmsghdr /** * No operation, message must be ignored - * @ingroup msg */ #define NLMSG_NOOP 0x1 @@ -176,8 +167,7 @@ struct nlmsghdr /** @} */ /** - * Netlink error message - * @ingroup msg + * Netlink error message header */ struct nlmsgerr { @@ -193,4 +183,102 @@ 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 /* __LINUX_NETLINK_H */ |