OpenWrt – Rev 1

Subversion Repositories:
Rev:
#ifndef __LINUX_NETLINK_H
#define __LINUX_NETLINK_H

/**
 * 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;
};

/**
 * Netlink message header
 * @ingroup msg
 */
struct nlmsghdr
{
        /**
         * Length of message including header.
         */
        uint32_t        nlmsg_len;

        /**
         * Message type (content type)
         */
        uint16_t        nlmsg_type;

        /**
         * Message flags
         */
        uint16_t        nlmsg_flags;

        /**
         * Sequence number
         */
        uint32_t        nlmsg_seq;

        /**
         * Netlink PID of the proccess sending the message.
         */
        uint32_t        nlmsg_pid;
};

/**
 * @name Standard message flags
 * @{
 */

/**
 * Must be set on all request messages (typically from user space to
 * kernel space).
 * @ingroup msg
 */
#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.
 * @ingroup msg
 */
#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.
 * @ingroup msg
 */
#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
 * @ingroup msg
 */
#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
 * @ingroup msg
 */
struct nlmsgerr
{
        /** Error code (errno number) */
        int             error;

        /** Original netlink message causing the error */
        struct nlmsghdr msg;
};

struct nl_pktinfo
{
        __u32   group;
};

#endif  /* __LINUX_NETLINK_H */