0001
0002 #ifndef _UAPI__LINUX_NETLINK_H
0003 #define _UAPI__LINUX_NETLINK_H
0004
0005 #include <linux/const.h>
0006 #include <linux/socket.h> /* for __kernel_sa_family_t */
0007 #include <linux/types.h>
0008
0009 #define NETLINK_ROUTE 0
0010 #define NETLINK_UNUSED 1
0011 #define NETLINK_USERSOCK 2
0012 #define NETLINK_FIREWALL 3
0013 #define NETLINK_SOCK_DIAG 4
0014 #define NETLINK_NFLOG 5
0015 #define NETLINK_XFRM 6
0016 #define NETLINK_SELINUX 7
0017 #define NETLINK_ISCSI 8
0018 #define NETLINK_AUDIT 9
0019 #define NETLINK_FIB_LOOKUP 10
0020 #define NETLINK_CONNECTOR 11
0021 #define NETLINK_NETFILTER 12
0022 #define NETLINK_IP6_FW 13
0023 #define NETLINK_DNRTMSG 14
0024 #define NETLINK_KOBJECT_UEVENT 15
0025 #define NETLINK_GENERIC 16
0026
0027 #define NETLINK_SCSITRANSPORT 18
0028 #define NETLINK_ECRYPTFS 19
0029 #define NETLINK_RDMA 20
0030 #define NETLINK_CRYPTO 21
0031 #define NETLINK_SMC 22
0032
0033 #define NETLINK_INET_DIAG NETLINK_SOCK_DIAG
0034
0035 #define MAX_LINKS 32
0036
0037 struct sockaddr_nl {
0038 __kernel_sa_family_t nl_family;
0039 unsigned short nl_pad;
0040 __u32 nl_pid;
0041 __u32 nl_groups;
0042 };
0043
0044 struct nlmsghdr {
0045 __u32 nlmsg_len;
0046 __u16 nlmsg_type;
0047 __u16 nlmsg_flags;
0048 __u32 nlmsg_seq;
0049 __u32 nlmsg_pid;
0050 };
0051
0052
0053
0054 #define NLM_F_REQUEST 0x01
0055 #define NLM_F_MULTI 0x02
0056 #define NLM_F_ACK 0x04
0057 #define NLM_F_ECHO 0x08
0058 #define NLM_F_DUMP_INTR 0x10
0059 #define NLM_F_DUMP_FILTERED 0x20
0060
0061
0062 #define NLM_F_ROOT 0x100
0063 #define NLM_F_MATCH 0x200
0064 #define NLM_F_ATOMIC 0x400
0065 #define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH)
0066
0067
0068 #define NLM_F_REPLACE 0x100
0069 #define NLM_F_EXCL 0x200
0070 #define NLM_F_CREATE 0x400
0071 #define NLM_F_APPEND 0x800
0072
0073
0074 #define NLM_F_NONREC 0x100
0075 #define NLM_F_BULK 0x200
0076
0077
0078 #define NLM_F_CAPPED 0x100
0079 #define NLM_F_ACK_TLVS 0x200
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090 #define NLMSG_ALIGNTO 4U
0091 #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
0092 #define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
0093 #define NLMSG_LENGTH(len) ((len) + NLMSG_HDRLEN)
0094 #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
0095 #define NLMSG_DATA(nlh) ((void *)(((char *)nlh) + NLMSG_HDRLEN))
0096 #define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
0097 (struct nlmsghdr *)(((char *)(nlh)) + \
0098 NLMSG_ALIGN((nlh)->nlmsg_len)))
0099 #define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
0100 (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
0101 (nlh)->nlmsg_len <= (len))
0102 #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
0103
0104 #define NLMSG_NOOP 0x1
0105 #define NLMSG_ERROR 0x2
0106 #define NLMSG_DONE 0x3
0107 #define NLMSG_OVERRUN 0x4
0108
0109 #define NLMSG_MIN_TYPE 0x10
0110
0111 struct nlmsgerr {
0112 int error;
0113 struct nlmsghdr msg;
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123 };
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138 enum nlmsgerr_attrs {
0139 NLMSGERR_ATTR_UNUSED,
0140 NLMSGERR_ATTR_MSG,
0141 NLMSGERR_ATTR_OFFS,
0142 NLMSGERR_ATTR_COOKIE,
0143 NLMSGERR_ATTR_POLICY,
0144
0145 __NLMSGERR_ATTR_MAX,
0146 NLMSGERR_ATTR_MAX = __NLMSGERR_ATTR_MAX - 1
0147 };
0148
0149 #define NETLINK_ADD_MEMBERSHIP 1
0150 #define NETLINK_DROP_MEMBERSHIP 2
0151 #define NETLINK_PKTINFO 3
0152 #define NETLINK_BROADCAST_ERROR 4
0153 #define NETLINK_NO_ENOBUFS 5
0154 #ifndef __KERNEL__
0155 #define NETLINK_RX_RING 6
0156 #define NETLINK_TX_RING 7
0157 #endif
0158 #define NETLINK_LISTEN_ALL_NSID 8
0159 #define NETLINK_LIST_MEMBERSHIPS 9
0160 #define NETLINK_CAP_ACK 10
0161 #define NETLINK_EXT_ACK 11
0162 #define NETLINK_GET_STRICT_CHK 12
0163
0164 struct nl_pktinfo {
0165 __u32 group;
0166 };
0167
0168 struct nl_mmap_req {
0169 unsigned int nm_block_size;
0170 unsigned int nm_block_nr;
0171 unsigned int nm_frame_size;
0172 unsigned int nm_frame_nr;
0173 };
0174
0175 struct nl_mmap_hdr {
0176 unsigned int nm_status;
0177 unsigned int nm_len;
0178 __u32 nm_group;
0179
0180 __u32 nm_pid;
0181 __u32 nm_uid;
0182 __u32 nm_gid;
0183 };
0184
0185 #ifndef __KERNEL__
0186 enum nl_mmap_status {
0187 NL_MMAP_STATUS_UNUSED,
0188 NL_MMAP_STATUS_RESERVED,
0189 NL_MMAP_STATUS_VALID,
0190 NL_MMAP_STATUS_COPY,
0191 NL_MMAP_STATUS_SKIP,
0192 };
0193
0194 #define NL_MMAP_MSG_ALIGNMENT NLMSG_ALIGNTO
0195 #define NL_MMAP_MSG_ALIGN(sz) __ALIGN_KERNEL(sz, NL_MMAP_MSG_ALIGNMENT)
0196 #define NL_MMAP_HDRLEN NL_MMAP_MSG_ALIGN(sizeof(struct nl_mmap_hdr))
0197 #endif
0198
0199 #define NET_MAJOR 36
0200
0201 enum {
0202 NETLINK_UNCONNECTED = 0,
0203 NETLINK_CONNECTED,
0204 };
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215 struct nlattr {
0216 __u16 nla_len;
0217 __u16 nla_type;
0218 };
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230 #define NLA_F_NESTED (1 << 15)
0231 #define NLA_F_NET_BYTEORDER (1 << 14)
0232 #define NLA_TYPE_MASK ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
0233
0234 #define NLA_ALIGNTO 4
0235 #define NLA_ALIGN(len) (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
0236 #define NLA_HDRLEN ((int) NLA_ALIGN(sizeof(struct nlattr)))
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251 struct nla_bitfield32 {
0252 __u32 value;
0253 __u32 selector;
0254 };
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288 enum netlink_attribute_type {
0289 NL_ATTR_TYPE_INVALID,
0290
0291 NL_ATTR_TYPE_FLAG,
0292
0293 NL_ATTR_TYPE_U8,
0294 NL_ATTR_TYPE_U16,
0295 NL_ATTR_TYPE_U32,
0296 NL_ATTR_TYPE_U64,
0297
0298 NL_ATTR_TYPE_S8,
0299 NL_ATTR_TYPE_S16,
0300 NL_ATTR_TYPE_S32,
0301 NL_ATTR_TYPE_S64,
0302
0303 NL_ATTR_TYPE_BINARY,
0304 NL_ATTR_TYPE_STRING,
0305 NL_ATTR_TYPE_NUL_STRING,
0306
0307 NL_ATTR_TYPE_NESTED,
0308 NL_ATTR_TYPE_NESTED_ARRAY,
0309
0310 NL_ATTR_TYPE_BITFIELD32,
0311 };
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341 enum netlink_policy_type_attr {
0342 NL_POLICY_TYPE_ATTR_UNSPEC,
0343 NL_POLICY_TYPE_ATTR_TYPE,
0344 NL_POLICY_TYPE_ATTR_MIN_VALUE_S,
0345 NL_POLICY_TYPE_ATTR_MAX_VALUE_S,
0346 NL_POLICY_TYPE_ATTR_MIN_VALUE_U,
0347 NL_POLICY_TYPE_ATTR_MAX_VALUE_U,
0348 NL_POLICY_TYPE_ATTR_MIN_LENGTH,
0349 NL_POLICY_TYPE_ATTR_MAX_LENGTH,
0350 NL_POLICY_TYPE_ATTR_POLICY_IDX,
0351 NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE,
0352 NL_POLICY_TYPE_ATTR_BITFIELD32_MASK,
0353 NL_POLICY_TYPE_ATTR_PAD,
0354 NL_POLICY_TYPE_ATTR_MASK,
0355
0356
0357 __NL_POLICY_TYPE_ATTR_MAX,
0358 NL_POLICY_TYPE_ATTR_MAX = __NL_POLICY_TYPE_ATTR_MAX - 1
0359 };
0360
0361 #endif