| #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 */ |