1*4dc78e53SAndroid Build Coastguard Worker #ifndef __NETLINK_KERNEL_H_ 2*4dc78e53SAndroid Build Coastguard Worker #define __NETLINK_KERNEL_H_ 3*4dc78e53SAndroid Build Coastguard Worker 4*4dc78e53SAndroid Build Coastguard Worker #if 0 5*4dc78e53SAndroid Build Coastguard Worker 6*4dc78e53SAndroid Build Coastguard Worker /* 7*4dc78e53SAndroid Build Coastguard Worker * FIXME: Goal is to preseve the documentation but make it simple 8*4dc78e53SAndroid Build Coastguard Worker * to keep linux/netlink.h in sync. Maybe use named documentation 9*4dc78e53SAndroid Build Coastguard Worker * sections. 10*4dc78e53SAndroid Build Coastguard Worker */ 11*4dc78e53SAndroid Build Coastguard Worker 12*4dc78e53SAndroid Build Coastguard Worker /** 13*4dc78e53SAndroid Build Coastguard Worker * Netlink socket address 14*4dc78e53SAndroid Build Coastguard Worker * @ingroup nl 15*4dc78e53SAndroid Build Coastguard Worker */ 16*4dc78e53SAndroid Build Coastguard Worker struct sockaddr_nl 17*4dc78e53SAndroid Build Coastguard Worker { 18*4dc78e53SAndroid Build Coastguard Worker /** socket family (AF_NETLINK) */ 19*4dc78e53SAndroid Build Coastguard Worker sa_family_t nl_family; 20*4dc78e53SAndroid Build Coastguard Worker 21*4dc78e53SAndroid Build Coastguard Worker /** Padding (unused) */ 22*4dc78e53SAndroid Build Coastguard Worker unsigned short nl_pad; 23*4dc78e53SAndroid Build Coastguard Worker 24*4dc78e53SAndroid Build Coastguard Worker /** Unique process ID */ 25*4dc78e53SAndroid Build Coastguard Worker uint32_t nl_pid; 26*4dc78e53SAndroid Build Coastguard Worker 27*4dc78e53SAndroid Build Coastguard Worker /** Multicast group subscriptions */ 28*4dc78e53SAndroid Build Coastguard Worker uint32_t nl_groups; 29*4dc78e53SAndroid Build Coastguard Worker }; 30*4dc78e53SAndroid Build Coastguard Worker 31*4dc78e53SAndroid Build Coastguard Worker /** 32*4dc78e53SAndroid Build Coastguard Worker * @addtogroup msg 33*4dc78e53SAndroid Build Coastguard Worker * @{ 34*4dc78e53SAndroid Build Coastguard Worker */ 35*4dc78e53SAndroid Build Coastguard Worker 36*4dc78e53SAndroid Build Coastguard Worker 37*4dc78e53SAndroid Build Coastguard Worker /** 38*4dc78e53SAndroid Build Coastguard Worker * Netlink message header 39*4dc78e53SAndroid Build Coastguard Worker */ 40*4dc78e53SAndroid Build Coastguard Worker struct nlmsghdr 41*4dc78e53SAndroid Build Coastguard Worker { 42*4dc78e53SAndroid Build Coastguard Worker /** Length of message including header and padding. */ 43*4dc78e53SAndroid Build Coastguard Worker uint32_t nlmsg_len; 44*4dc78e53SAndroid Build Coastguard Worker 45*4dc78e53SAndroid Build Coastguard Worker /** Message type (content type) */ 46*4dc78e53SAndroid Build Coastguard Worker uint16_t nlmsg_type; 47*4dc78e53SAndroid Build Coastguard Worker 48*4dc78e53SAndroid Build Coastguard Worker /** Message flags */ 49*4dc78e53SAndroid Build Coastguard Worker uint16_t nlmsg_flags; 50*4dc78e53SAndroid Build Coastguard Worker 51*4dc78e53SAndroid Build Coastguard Worker /** Sequence number of message \see core_sk_seq_num. */ 52*4dc78e53SAndroid Build Coastguard Worker uint32_t nlmsg_seq; 53*4dc78e53SAndroid Build Coastguard Worker 54*4dc78e53SAndroid Build Coastguard Worker /** Netlink port */ 55*4dc78e53SAndroid Build Coastguard Worker uint32_t nlmsg_pid; 56*4dc78e53SAndroid Build Coastguard Worker }; 57*4dc78e53SAndroid Build Coastguard Worker 58*4dc78e53SAndroid Build Coastguard Worker /** 59*4dc78e53SAndroid Build Coastguard Worker * @name Standard message flags 60*4dc78e53SAndroid Build Coastguard Worker * @{ 61*4dc78e53SAndroid Build Coastguard Worker */ 62*4dc78e53SAndroid Build Coastguard Worker 63*4dc78e53SAndroid Build Coastguard Worker /** 64*4dc78e53SAndroid Build Coastguard Worker * Must be set on all request messages (typically from user space to 65*4dc78e53SAndroid Build Coastguard Worker * kernel space). 66*4dc78e53SAndroid Build Coastguard Worker */ 67*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_REQUEST 1 68*4dc78e53SAndroid Build Coastguard Worker 69*4dc78e53SAndroid Build Coastguard Worker /** 70*4dc78e53SAndroid Build Coastguard Worker * Indicates the message is part of a multipart message terminated 71*4dc78e53SAndroid Build Coastguard Worker * by NLMSG_DONE. 72*4dc78e53SAndroid Build Coastguard Worker */ 73*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_MULTI 2 74*4dc78e53SAndroid Build Coastguard Worker 75*4dc78e53SAndroid Build Coastguard Worker /** 76*4dc78e53SAndroid Build Coastguard Worker * Request for an acknowledgment on success. 77*4dc78e53SAndroid Build Coastguard Worker */ 78*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_ACK 4 79*4dc78e53SAndroid Build Coastguard Worker 80*4dc78e53SAndroid Build Coastguard Worker /** 81*4dc78e53SAndroid Build Coastguard Worker * Echo this request 82*4dc78e53SAndroid Build Coastguard Worker */ 83*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_ECHO 8 84*4dc78e53SAndroid Build Coastguard Worker 85*4dc78e53SAndroid Build Coastguard Worker /** @} */ 86*4dc78e53SAndroid Build Coastguard Worker 87*4dc78e53SAndroid Build Coastguard Worker /** 88*4dc78e53SAndroid Build Coastguard Worker * @name Additional message flags for GET requests 89*4dc78e53SAndroid Build Coastguard Worker * @{ 90*4dc78e53SAndroid Build Coastguard Worker */ 91*4dc78e53SAndroid Build Coastguard Worker 92*4dc78e53SAndroid Build Coastguard Worker /** 93*4dc78e53SAndroid Build Coastguard Worker * Return the complete table instead of a single entry. 94*4dc78e53SAndroid Build Coastguard Worker */ 95*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_ROOT 0x100 96*4dc78e53SAndroid Build Coastguard Worker 97*4dc78e53SAndroid Build Coastguard Worker /** 98*4dc78e53SAndroid Build Coastguard Worker * Return all entries matching criteria passed in message content. 99*4dc78e53SAndroid Build Coastguard Worker */ 100*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_MATCH 0x200 101*4dc78e53SAndroid Build Coastguard Worker 102*4dc78e53SAndroid Build Coastguard Worker /** 103*4dc78e53SAndroid Build Coastguard Worker * Return an atomic snapshot of the table being referenced. This 104*4dc78e53SAndroid Build Coastguard Worker * may require special privileges because it has the potential to 105*4dc78e53SAndroid Build Coastguard Worker * interrupt service in the FE for a longer time. 106*4dc78e53SAndroid Build Coastguard Worker */ 107*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_ATOMIC 0x400 108*4dc78e53SAndroid Build Coastguard Worker 109*4dc78e53SAndroid Build Coastguard Worker /** 110*4dc78e53SAndroid Build Coastguard Worker * Dump all entries 111*4dc78e53SAndroid Build Coastguard Worker */ 112*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH) 113*4dc78e53SAndroid Build Coastguard Worker 114*4dc78e53SAndroid Build Coastguard Worker /** @} */ 115*4dc78e53SAndroid Build Coastguard Worker 116*4dc78e53SAndroid Build Coastguard Worker /** 117*4dc78e53SAndroid Build Coastguard Worker * @name Additional messsage flags for NEW requests 118*4dc78e53SAndroid Build Coastguard Worker * @{ 119*4dc78e53SAndroid Build Coastguard Worker */ 120*4dc78e53SAndroid Build Coastguard Worker 121*4dc78e53SAndroid Build Coastguard Worker /** 122*4dc78e53SAndroid Build Coastguard Worker * Replace existing matching config object with this request. 123*4dc78e53SAndroid Build Coastguard Worker */ 124*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_REPLACE 0x100 125*4dc78e53SAndroid Build Coastguard Worker 126*4dc78e53SAndroid Build Coastguard Worker /** 127*4dc78e53SAndroid Build Coastguard Worker * Don't replace the config object if it already exists. 128*4dc78e53SAndroid Build Coastguard Worker */ 129*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_EXCL 0x200 130*4dc78e53SAndroid Build Coastguard Worker 131*4dc78e53SAndroid Build Coastguard Worker /** 132*4dc78e53SAndroid Build Coastguard Worker * Create config object if it doesn't already exist. 133*4dc78e53SAndroid Build Coastguard Worker */ 134*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_CREATE 0x400 135*4dc78e53SAndroid Build Coastguard Worker 136*4dc78e53SAndroid Build Coastguard Worker /** 137*4dc78e53SAndroid Build Coastguard Worker * Add to the end of the object list. 138*4dc78e53SAndroid Build Coastguard Worker */ 139*4dc78e53SAndroid Build Coastguard Worker #define NLM_F_APPEND 0x800 140*4dc78e53SAndroid Build Coastguard Worker 141*4dc78e53SAndroid Build Coastguard Worker /** @} */ 142*4dc78e53SAndroid Build Coastguard Worker 143*4dc78e53SAndroid Build Coastguard Worker /** 144*4dc78e53SAndroid Build Coastguard Worker * @name Standard Message types 145*4dc78e53SAndroid Build Coastguard Worker * @{ 146*4dc78e53SAndroid Build Coastguard Worker */ 147*4dc78e53SAndroid Build Coastguard Worker 148*4dc78e53SAndroid Build Coastguard Worker /** 149*4dc78e53SAndroid Build Coastguard Worker * No operation, message must be ignored 150*4dc78e53SAndroid Build Coastguard Worker */ 151*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_NOOP 0x1 152*4dc78e53SAndroid Build Coastguard Worker 153*4dc78e53SAndroid Build Coastguard Worker /** 154*4dc78e53SAndroid Build Coastguard Worker * The message signals an error and the payload contains a nlmsgerr 155*4dc78e53SAndroid Build Coastguard Worker * structure. This can be looked at as a NACK and typically it is 156*4dc78e53SAndroid Build Coastguard Worker * from FEC to CPC. 157*4dc78e53SAndroid Build Coastguard Worker */ 158*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_ERROR 0x2 159*4dc78e53SAndroid Build Coastguard Worker 160*4dc78e53SAndroid Build Coastguard Worker /** 161*4dc78e53SAndroid Build Coastguard Worker * Message terminates a multipart message. 162*4dc78e53SAndroid Build Coastguard Worker */ 163*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_DONE 0x3 164*4dc78e53SAndroid Build Coastguard Worker 165*4dc78e53SAndroid Build Coastguard Worker /** 166*4dc78e53SAndroid Build Coastguard Worker * The message signals that data got lost 167*4dc78e53SAndroid Build Coastguard Worker */ 168*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_OVERRUN 0x4 169*4dc78e53SAndroid Build Coastguard Worker 170*4dc78e53SAndroid Build Coastguard Worker /** 171*4dc78e53SAndroid Build Coastguard Worker * Lower limit of reserved message types 172*4dc78e53SAndroid Build Coastguard Worker */ 173*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_MIN_TYPE 0x10 174*4dc78e53SAndroid Build Coastguard Worker 175*4dc78e53SAndroid Build Coastguard Worker /** @} */ 176*4dc78e53SAndroid Build Coastguard Worker 177*4dc78e53SAndroid Build Coastguard Worker /** 178*4dc78e53SAndroid Build Coastguard Worker * Netlink error message header 179*4dc78e53SAndroid Build Coastguard Worker */ 180*4dc78e53SAndroid Build Coastguard Worker struct nlmsgerr 181*4dc78e53SAndroid Build Coastguard Worker { 182*4dc78e53SAndroid Build Coastguard Worker /** Error code (errno number) */ 183*4dc78e53SAndroid Build Coastguard Worker int error; 184*4dc78e53SAndroid Build Coastguard Worker 185*4dc78e53SAndroid Build Coastguard Worker /** Original netlink message causing the error */ 186*4dc78e53SAndroid Build Coastguard Worker struct nlmsghdr msg; 187*4dc78e53SAndroid Build Coastguard Worker }; 188*4dc78e53SAndroid Build Coastguard Worker 189*4dc78e53SAndroid Build Coastguard Worker struct nl_pktinfo 190*4dc78e53SAndroid Build Coastguard Worker { 191*4dc78e53SAndroid Build Coastguard Worker __u32 group; 192*4dc78e53SAndroid Build Coastguard Worker }; 193*4dc78e53SAndroid Build Coastguard Worker 194*4dc78e53SAndroid Build Coastguard Worker /** 195*4dc78e53SAndroid Build Coastguard Worker * Netlink alignment constant, all boundries within messages must be align to this. 196*4dc78e53SAndroid Build Coastguard Worker * 197*4dc78e53SAndroid Build Coastguard Worker * See \ref core_msg_fmt_align for more information on message alignment. 198*4dc78e53SAndroid Build Coastguard Worker */ 199*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_ALIGNTO 4 200*4dc78e53SAndroid Build Coastguard Worker 201*4dc78e53SAndroid Build Coastguard Worker /** 202*4dc78e53SAndroid Build Coastguard Worker * Returns \p len properly aligned to NLMSG_ALIGNTO. 203*4dc78e53SAndroid Build Coastguard Worker * 204*4dc78e53SAndroid Build Coastguard Worker * See \ref core_msg_fmt_align for more information on message alignment. 205*4dc78e53SAndroid Build Coastguard Worker */ 206*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) ) 207*4dc78e53SAndroid Build Coastguard Worker 208*4dc78e53SAndroid Build Coastguard Worker /** 209*4dc78e53SAndroid Build Coastguard Worker * Length of a netlink message header including padding. 210*4dc78e53SAndroid Build Coastguard Worker * 211*4dc78e53SAndroid Build Coastguard Worker * See \ref core_msg_fmt_align for more information on message alignment. 212*4dc78e53SAndroid Build Coastguard Worker */ 213*4dc78e53SAndroid Build Coastguard Worker #define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr))) 214*4dc78e53SAndroid Build Coastguard Worker 215*4dc78e53SAndroid Build Coastguard Worker /** @} */ 216*4dc78e53SAndroid Build Coastguard Worker 217*4dc78e53SAndroid Build Coastguard Worker /** 218*4dc78e53SAndroid Build Coastguard Worker * @addtogroup attr 219*4dc78e53SAndroid Build Coastguard Worker * @{ 220*4dc78e53SAndroid Build Coastguard Worker */ 221*4dc78e53SAndroid Build Coastguard Worker 222*4dc78e53SAndroid Build Coastguard Worker /* 223*4dc78e53SAndroid Build Coastguard Worker */ 224*4dc78e53SAndroid Build Coastguard Worker 225*4dc78e53SAndroid Build Coastguard Worker /** 226*4dc78e53SAndroid Build Coastguard Worker * Netlink attribute structure 227*4dc78e53SAndroid Build Coastguard Worker * 228*4dc78e53SAndroid Build Coastguard Worker * @code 229*4dc78e53SAndroid Build Coastguard Worker * <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)--> 230*4dc78e53SAndroid Build Coastguard Worker * +---------------------+- - -+- - - - - - - - - -+- - -+ 231*4dc78e53SAndroid Build Coastguard Worker * | Header | Pad | Payload | Pad | 232*4dc78e53SAndroid Build Coastguard Worker * | (struct nlattr) | ing | | ing | 233*4dc78e53SAndroid Build Coastguard Worker * +---------------------+- - -+- - - - - - - - - -+- - -+ 234*4dc78e53SAndroid Build Coastguard Worker * <-------------- nlattr->nla_len --------------> 235*4dc78e53SAndroid Build Coastguard Worker * @endcode 236*4dc78e53SAndroid Build Coastguard Worker */ 237*4dc78e53SAndroid Build Coastguard Worker struct nlattr { 238*4dc78e53SAndroid Build Coastguard Worker /** 239*4dc78e53SAndroid Build Coastguard Worker * Attribute length in bytes including header 240*4dc78e53SAndroid Build Coastguard Worker */ 241*4dc78e53SAndroid Build Coastguard Worker __u16 nla_len; 242*4dc78e53SAndroid Build Coastguard Worker 243*4dc78e53SAndroid Build Coastguard Worker /** 244*4dc78e53SAndroid Build Coastguard Worker * Netlink attribute type 245*4dc78e53SAndroid Build Coastguard Worker */ 246*4dc78e53SAndroid Build Coastguard Worker __u16 nla_type; 247*4dc78e53SAndroid Build Coastguard Worker }; 248*4dc78e53SAndroid Build Coastguard Worker 249*4dc78e53SAndroid Build Coastguard Worker /** 250*4dc78e53SAndroid Build Coastguard Worker * @name Attribute Type Flags 251*4dc78e53SAndroid Build Coastguard Worker * 252*4dc78e53SAndroid Build Coastguard Worker * @code 253*4dc78e53SAndroid Build Coastguard Worker * nla_type (16 bits) 254*4dc78e53SAndroid Build Coastguard Worker * +---+---+-------------------------------+ 255*4dc78e53SAndroid Build Coastguard Worker * | N | O | Attribute Type | 256*4dc78e53SAndroid Build Coastguard Worker * +---+---+-------------------------------+ 257*4dc78e53SAndroid Build Coastguard Worker * N := Carries nested attributes 258*4dc78e53SAndroid Build Coastguard Worker * O := Payload stored in network byte order 259*4dc78e53SAndroid Build Coastguard Worker * @endcode 260*4dc78e53SAndroid Build Coastguard Worker * 261*4dc78e53SAndroid Build Coastguard Worker * @note The N and O flag are mutually exclusive. 262*4dc78e53SAndroid Build Coastguard Worker * 263*4dc78e53SAndroid Build Coastguard Worker * @{ 264*4dc78e53SAndroid Build Coastguard Worker */ 265*4dc78e53SAndroid Build Coastguard Worker 266*4dc78e53SAndroid Build Coastguard Worker /* 267*4dc78e53SAndroid Build Coastguard Worker */ 268*4dc78e53SAndroid Build Coastguard Worker #define NLA_F_NESTED (1 << 15) 269*4dc78e53SAndroid Build Coastguard Worker #define NLA_F_NET_BYTEORDER (1 << 14) 270*4dc78e53SAndroid Build Coastguard Worker #define NLA_TYPE_MASK ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER) 271*4dc78e53SAndroid Build Coastguard Worker 272*4dc78e53SAndroid Build Coastguard Worker /** @} */ 273*4dc78e53SAndroid Build Coastguard Worker 274*4dc78e53SAndroid Build Coastguard Worker #define NLA_ALIGNTO 4 275*4dc78e53SAndroid Build Coastguard Worker 276*4dc78e53SAndroid Build Coastguard Worker /** 277*4dc78e53SAndroid Build Coastguard Worker * Returns \p len properly aligned to NLA_ALIGNTO. 278*4dc78e53SAndroid Build Coastguard Worker * 279*4dc78e53SAndroid Build Coastguard Worker * See \ref core_msg_fmt_align for more information on message alignment. 280*4dc78e53SAndroid Build Coastguard Worker */ 281*4dc78e53SAndroid Build Coastguard Worker #define NLA_ALIGN(len) (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1)) 282*4dc78e53SAndroid Build Coastguard Worker 283*4dc78e53SAndroid Build Coastguard Worker /** 284*4dc78e53SAndroid Build Coastguard Worker * Length of a netlink attribute header including padding. 285*4dc78e53SAndroid Build Coastguard Worker * 286*4dc78e53SAndroid Build Coastguard Worker * See \ref core_msg_fmt_align for more information on message alignment. 287*4dc78e53SAndroid Build Coastguard Worker */ 288*4dc78e53SAndroid Build Coastguard Worker #define NLA_HDRLEN ((int) NLA_ALIGN(sizeof(struct nlattr))) 289*4dc78e53SAndroid Build Coastguard Worker 290*4dc78e53SAndroid Build Coastguard Worker /** @} */ 291*4dc78e53SAndroid Build Coastguard Worker 292*4dc78e53SAndroid Build Coastguard Worker #endif 293*4dc78e53SAndroid Build Coastguard Worker #endif /* __LINUX_NETLINK_H */ 294