| 1 |
|
| 2 | #ifndef _UAPI__LINUX_NETLINK_H
|
| 3 | #define _UAPI__LINUX_NETLINK_H
|
| 4 |
|
| 5 | #include <linux/kernel.h>
|
| 6 | #include <linux/socket.h>
|
| 7 | #include <linux/types.h>
|
| 8 |
|
| 9 | #define NETLINK_ROUTE 0
|
| 10 | #define NETLINK_UNUSED 1
|
| 11 | #define NETLINK_USERSOCK 2
|
| 12 | #define NETLINK_FIREWALL 3
|
| 13 | #define NETLINK_SOCK_DIAG 4
|
| 14 | #define NETLINK_NFLOG 5
|
| 15 | #define NETLINK_XFRM 6
|
| 16 | #define NETLINK_SELINUX 7
|
| 17 | #define NETLINK_ISCSI 8
|
| 18 | #define NETLINK_AUDIT 9
|
| 19 | #define NETLINK_FIB_LOOKUP 10
|
| 20 | #define NETLINK_CONNECTOR 11
|
| 21 | #define NETLINK_NETFILTER 12
|
| 22 | #define NETLINK_IP6_FW 13
|
| 23 | #define NETLINK_DNRTMSG 14
|
| 24 | #define NETLINK_KOBJECT_UEVENT 15
|
| 25 | #define NETLINK_GENERIC 16
|
| 26 |
|
| 27 | #define NETLINK_SCSITRANSPORT 18
|
| 28 | #define NETLINK_ECRYPTFS 19
|
| 29 | #define NETLINK_RDMA 20
|
| 30 | #define NETLINK_CRYPTO 21
|
| 31 | #define NETLINK_SMC 22
|
| 32 |
|
| 33 | #define NETLINK_INET_DIAG NETLINK_SOCK_DIAG
|
| 34 |
|
| 35 | #define MAX_LINKS 32
|
| 36 |
|
| 37 | struct sockaddr_nl {
|
| 38 | __kernel_sa_family_t nl_family;
|
| 39 | unsigned short nl_pad;
|
| 40 | __u32 nl_pid;
|
| 41 | __u32 nl_groups;
|
| 42 | };
|
| 43 |
|
| 44 | struct nlmsghdr {
|
| 45 | __u32 nlmsg_len;
|
| 46 | __u16 nlmsg_type;
|
| 47 | __u16 nlmsg_flags;
|
| 48 | __u32 nlmsg_seq;
|
| 49 | __u32 nlmsg_pid;
|
| 50 | };
|
| 51 |
|
| 52 |
|
| 53 |
|
| 54 | #define NLM_F_REQUEST 0x01
|
| 55 | #define NLM_F_MULTI 0x02
|
| 56 | #define NLM_F_ACK 0x04
|
| 57 | #define NLM_F_ECHO 0x08
|
| 58 | #define NLM_F_DUMP_INTR 0x10
|
| 59 | #define NLM_F_DUMP_FILTERED 0x20
|
| 60 |
|
| 61 |
|
| 62 | #define NLM_F_ROOT 0x100
|
| 63 | #define NLM_F_MATCH 0x200
|
| 64 | #define NLM_F_ATOMIC 0x400
|
| 65 | #define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH)
|
| 66 |
|
| 67 |
|
| 68 | #define NLM_F_REPLACE 0x100
|
| 69 | #define NLM_F_EXCL 0x200
|
| 70 | #define NLM_F_CREATE 0x400
|
| 71 | #define NLM_F_APPEND 0x800
|
| 72 |
|
| 73 |
|
| 74 | #define NLM_F_NONREC 0x100
|
| 75 |
|
| 76 |
|
| 77 | #define NLM_F_CAPPED 0x100
|
| 78 | #define NLM_F_ACK_TLVS 0x200
|
| 79 |
|
| 80 | |
| 81 | 4.4BSD ADD NLM_F_CREATE|NLM_F_EXCL
|
| 82 | 4.4BSD CHANGE NLM_F_REPLACE
|
| 83 |
|
| 84 | True CHANGE NLM_F_CREATE|NLM_F_REPLACE
|
| 85 | Append NLM_F_CREATE
|
| 86 | Check NLM_F_EXCL
|
| 87 |
|
| 88 |
|
| 89 | #define NLMSG_ALIGNTO 4U
|
| 90 | #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
|
| 91 | #define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
|
| 92 | #define NLMSG_LENGTH(len) ((len) + NLMSG_HDRLEN)
|
| 93 | #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
|
| 94 | #define NLMSG_DATA(nlh) ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
|
| 95 | #define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
|
| 96 | (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
|
| 97 | #define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
|
| 98 | (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
|
| 99 | (nlh)->nlmsg_len <= (len))
|
| 100 | #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
|
| 101 |
|
| 102 | #define NLMSG_NOOP 0x1
|
| 103 | #define NLMSG_ERROR 0x2
|
| 104 | #define NLMSG_DONE 0x3
|
| 105 | #define NLMSG_OVERRUN 0x4
|
| 106 |
|
| 107 | #define NLMSG_MIN_TYPE 0x10
|
| 108 |
|
| 109 | struct nlmsgerr {
|
| 110 | int error;
|
| 111 | struct nlmsghdr msg;
|
| 112 | |
| 113 | * followed by the message contents unless NETLINK_CAP_ACK was set
|
| 114 | * or the ACK indicates success (error == 0)
|
| 115 | * message length is aligned with NLMSG_ALIGN()
|
| 116 |
|
| 117 | |
| 118 | * followed by TLVs defined in enum nlmsgerr_attrs
|
| 119 | * if NETLINK_EXT_ACK was set
|
| 120 |
|
| 121 | };
|
| 122 |
|
| 123 | |
| 124 | * enum nlmsgerr_attrs - nlmsgerr attributes
|
| 125 | * @NLMSGERR_ATTR_UNUSED: unused
|
| 126 | * @NLMSGERR_ATTR_MSG: error message string (string)
|
| 127 | * @NLMSGERR_ATTR_OFFS: offset of the invalid attribute in the original
|
| 128 | * message, counting from the beginning of the header (u32)
|
| 129 | * @NLMSGERR_ATTR_COOKIE: arbitrary subsystem specific cookie to
|
| 130 | * be used - in the success case - to identify a created
|
| 131 | * object or operation or similar (binary)
|
| 132 | * @__NLMSGERR_ATTR_MAX: number of attributes
|
| 133 | * @NLMSGERR_ATTR_MAX: highest attribute number
|
| 134 |
|
| 135 | enum nlmsgerr_attrs {
|
| 136 | NLMSGERR_ATTR_UNUSED,
|
| 137 | NLMSGERR_ATTR_MSG,
|
| 138 | NLMSGERR_ATTR_OFFS,
|
| 139 | NLMSGERR_ATTR_COOKIE,
|
| 140 |
|
| 141 | __NLMSGERR_ATTR_MAX,
|
| 142 | NLMSGERR_ATTR_MAX = __NLMSGERR_ATTR_MAX - 1
|
| 143 | };
|
| 144 |
|
| 145 | #define NETLINK_ADD_MEMBERSHIP 1
|
| 146 | #define NETLINK_DROP_MEMBERSHIP 2
|
| 147 | #define NETLINK_PKTINFO 3
|
| 148 | #define NETLINK_BROADCAST_ERROR 4
|
| 149 | #define NETLINK_NO_ENOBUFS 5
|
| 150 | #ifndef __KERNEL__
|
| 151 | #define NETLINK_RX_RING 6
|
| 152 | #define NETLINK_TX_RING 7
|
| 153 | #endif
|
| 154 | #define NETLINK_LISTEN_ALL_NSID 8
|
| 155 | #define NETLINK_LIST_MEMBERSHIPS 9
|
| 156 | #define NETLINK_CAP_ACK 10
|
| 157 | #define NETLINK_EXT_ACK 11
|
| 158 | #define NETLINK_GET_STRICT_CHK 12
|
| 159 |
|
| 160 | struct nl_pktinfo {
|
| 161 | __u32 group;
|
| 162 | };
|
| 163 |
|
| 164 | struct nl_mmap_req {
|
| 165 | unsigned int nm_block_size;
|
| 166 | unsigned int nm_block_nr;
|
| 167 | unsigned int nm_frame_size;
|
| 168 | unsigned int nm_frame_nr;
|
| 169 | };
|
| 170 |
|
| 171 | struct nl_mmap_hdr {
|
| 172 | unsigned int nm_status;
|
| 173 | unsigned int nm_len;
|
| 174 | __u32 nm_group;
|
| 175 |
|
| 176 | __u32 nm_pid;
|
| 177 | __u32 nm_uid;
|
| 178 | __u32 nm_gid;
|
| 179 | };
|
| 180 |
|
| 181 | #ifndef __KERNEL__
|
| 182 | enum nl_mmap_status {
|
| 183 | NL_MMAP_STATUS_UNUSED,
|
| 184 | NL_MMAP_STATUS_RESERVED,
|
| 185 | NL_MMAP_STATUS_VALID,
|
| 186 | NL_MMAP_STATUS_COPY,
|
| 187 | NL_MMAP_STATUS_SKIP,
|
| 188 | };
|
| 189 |
|
| 190 | #define NL_MMAP_MSG_ALIGNMENT NLMSG_ALIGNTO
|
| 191 | #define NL_MMAP_MSG_ALIGN(sz) __ALIGN_KERNEL(sz, NL_MMAP_MSG_ALIGNMENT)
|
| 192 | #define NL_MMAP_HDRLEN NL_MMAP_MSG_ALIGN(sizeof(struct nl_mmap_hdr))
|
| 193 | #endif
|
| 194 |
|
| 195 | #define NET_MAJOR 36
|
| 196 |
|
| 197 | enum {
|
| 198 | NETLINK_UNCONNECTED = 0,
|
| 199 | NETLINK_CONNECTED,
|
| 200 | };
|
| 201 |
|
| 202 | |
| 203 | * <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
|
| 204 | * +---------------------+- - -+- - - - - - - - - -+- - -+
|
| 205 | * | Header | Pad | Payload | Pad |
|
| 206 | * | (struct nlattr) | ing | | ing |
|
| 207 | * +---------------------+- - -+- - - - - - - - - -+- - -+
|
| 208 | * <-------------- nlattr->nla_len -------------->
|
| 209 |
|
| 210 |
|
| 211 | struct nlattr {
|
| 212 | __u16 nla_len;
|
| 213 | __u16 nla_type;
|
| 214 | };
|
| 215 |
|
| 216 | |
| 217 | * nla_type (16 bits)
|
| 218 | * +---+---+-------------------------------+
|
| 219 | * | N | O | Attribute Type |
|
| 220 | * +---+---+-------------------------------+
|
| 221 | * N := Carries nested attributes
|
| 222 | * O := Payload stored in network byte order
|
| 223 | *
|
| 224 | * Note: The N and O flag are mutually exclusive.
|
| 225 |
|
| 226 | #define NLA_F_NESTED (1 << 15)
|
| 227 | #define NLA_F_NET_BYTEORDER (1 << 14)
|
| 228 | #define NLA_TYPE_MASK ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
|
| 229 |
|
| 230 | #define NLA_ALIGNTO 4
|
| 231 | #define NLA_ALIGN(len) (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
|
| 232 | #define NLA_HDRLEN ((int) NLA_ALIGN(sizeof(struct nlattr)))
|
| 233 |
|
| 234 | |
| 235 | *
|
| 236 | * The value is a bitmap that defines the values being set
|
| 237 | * The selector is a bitmask that defines which value is legit
|
| 238 | *
|
| 239 | * Examples:
|
| 240 | * value = 0x0, and selector = 0x1
|
| 241 | * implies we are selecting bit 1 and we want to set its value to 0.
|
| 242 | *
|
| 243 | * value = 0x2, and selector = 0x2
|
| 244 | * implies we are selecting bit 2 and we want to set its value to 1.
|
| 245 | *
|
| 246 |
|
| 247 | struct nla_bitfield32 {
|
| 248 | __u32 value;
|
| 249 | __u32 selector;
|
| 250 | };
|
| 251 |
|
| 252 | #endif
|