Home | History | Annotate | Download | only in netlink
      1 #ifndef __LINUX_NETLINK_H
      2 #define __LINUX_NETLINK_H
      3 
      4 /**
      5  * Netlink socket address
      6  * @ingroup nl
      7  */
      8 struct sockaddr_nl
      9 {
     10 	/** socket family (AF_NETLINK) */
     11 	sa_family_t     nl_family;
     12 
     13 	/** Padding (unused) */
     14 	unsigned short  nl_pad;
     15 
     16 	/** Unique process ID  */
     17 	uint32_t        nl_pid;
     18 
     19 	/** Multicast group subscriptions */
     20 	uint32_t        nl_groups;
     21 };
     22 
     23 /**
     24  * Netlink message header
     25  * @ingroup msg
     26  */
     27 struct nlmsghdr
     28 {
     29 	/**
     30 	 * Length of message including header.
     31 	 */
     32 	uint32_t	nlmsg_len;
     33 
     34 	/**
     35 	 * Message type (content type)
     36 	 */
     37 	uint16_t	nlmsg_type;
     38 
     39 	/**
     40 	 * Message flags
     41 	 */
     42 	uint16_t	nlmsg_flags;
     43 
     44 	/**
     45 	 * Sequence number
     46 	 */
     47 	uint32_t	nlmsg_seq;
     48 
     49 	/**
     50 	 * Netlink PID of the proccess sending the message.
     51 	 */
     52 	uint32_t	nlmsg_pid;
     53 };
     54 
     55 /**
     56  * @name Standard message flags
     57  * @{
     58  */
     59 
     60 /**
     61  * Must be set on all request messages (typically from user space to
     62  * kernel space).
     63  * @ingroup msg
     64  */
     65 #define NLM_F_REQUEST		1
     66 
     67 /**
     68  * Indicates the message is part of a multipart message terminated
     69  * by NLMSG_DONE.
     70  */
     71 #define NLM_F_MULTI		2
     72 
     73 /**
     74  * Request for an acknowledgment on success.
     75  */
     76 #define NLM_F_ACK		4
     77 
     78 /**
     79  * Echo this request
     80  */
     81 #define NLM_F_ECHO		8
     82 
     83 /** @} */
     84 
     85 /**
     86  * @name Additional message flags for GET requests
     87  * @{
     88  */
     89 
     90 /**
     91  * Return the complete table instead of a single entry.
     92  * @ingroup msg
     93  */
     94 #define NLM_F_ROOT	0x100
     95 
     96 /**
     97  * Return all entries matching criteria passed in message content.
     98  */
     99 #define NLM_F_MATCH	0x200
    100 
    101 /**
    102  * Return an atomic snapshot of the table being referenced. This
    103  * may require special privileges because it has the potential to
    104  * interrupt service in the FE for a longer time.
    105  */
    106 #define NLM_F_ATOMIC	0x400
    107 
    108 /**
    109  * Dump all entries
    110  */
    111 #define NLM_F_DUMP	(NLM_F_ROOT|NLM_F_MATCH)
    112 
    113 /** @} */
    114 
    115 /**
    116  * @name Additional messsage flags for NEW requests
    117  * @{
    118  */
    119 
    120 /**
    121  * Replace existing matching config object with this request.
    122  * @ingroup msg
    123  */
    124 #define NLM_F_REPLACE	0x100
    125 
    126 /**
    127  * Don't replace the config object if it already exists.
    128  */
    129 #define NLM_F_EXCL	0x200
    130 
    131 /**
    132  * Create config object if it doesn't already exist.
    133  */
    134 #define NLM_F_CREATE	0x400
    135 
    136 /**
    137  * Add to the end of the object list.
    138  */
    139 #define NLM_F_APPEND	0x800
    140 
    141 /** @} */
    142 
    143 /**
    144  * @name Standard Message types
    145  * @{
    146  */
    147 
    148 /**
    149  * No operation, message must be ignored
    150  * @ingroup msg
    151  */
    152 #define NLMSG_NOOP		0x1
    153 
    154 /**
    155  * The message signals an error and the payload contains a nlmsgerr
    156  * structure. This can be looked at as a NACK and typically it is
    157  * from FEC to CPC.
    158  */
    159 #define NLMSG_ERROR		0x2
    160 
    161 /**
    162  * Message terminates a multipart message.
    163  */
    164 #define NLMSG_DONE		0x3
    165 
    166 /**
    167  * The message signals that data got lost
    168  */
    169 #define NLMSG_OVERRUN		0x4
    170 
    171 /**
    172  * Lower limit of reserved message types
    173  */
    174 #define NLMSG_MIN_TYPE		0x10
    175 
    176 /** @} */
    177 
    178 /**
    179  * Netlink error message
    180  * @ingroup msg
    181  */
    182 struct nlmsgerr
    183 {
    184 	/** Error code (errno number) */
    185 	int		error;
    186 
    187 	/** Original netlink message causing the error */
    188 	struct nlmsghdr	msg;
    189 };
    190 
    191 struct nl_pktinfo
    192 {
    193 	__u32	group;
    194 };
    195 
    196 #endif	/* __LINUX_NETLINK_H */
    197