1/* 2 * This header was generated from the Linux kernel headers by update_headers.py, 3 * to provide necessary information from kernel to userspace, such as constants, 4 * structures, and macros, and thus, contains no copyrightable information. 5 */ 6#ifndef _UAPI__LINUX_RTNETLINK_H 7#define _UAPI__LINUX_RTNETLINK_H 8#include <linux/types.h> 9#include <linux/netlink.h> 10#include <linux/if_link.h> 11#include <linux/if_addr.h> 12#include <linux/neighbour.h> 13#define RTNL_FAMILY_IPMR 128 14#define RTNL_FAMILY_IP6MR 129 15#define RTNL_FAMILY_MAX 129 16enum { 17 RTM_BASE = 16, 18#define RTM_BASE RTM_BASE 19 RTM_NEWLINK = 16, 20#define RTM_NEWLINK RTM_NEWLINK 21 RTM_DELLINK, 22#define RTM_DELLINK RTM_DELLINK 23 RTM_GETLINK, 24#define RTM_GETLINK RTM_GETLINK 25 RTM_SETLINK, 26#define RTM_SETLINK RTM_SETLINK 27 RTM_NEWADDR = 20, 28#define RTM_NEWADDR RTM_NEWADDR 29 RTM_DELADDR, 30#define RTM_DELADDR RTM_DELADDR 31 RTM_GETADDR, 32#define RTM_GETADDR RTM_GETADDR 33 RTM_NEWROUTE = 24, 34#define RTM_NEWROUTE RTM_NEWROUTE 35 RTM_DELROUTE, 36#define RTM_DELROUTE RTM_DELROUTE 37 RTM_GETROUTE, 38#define RTM_GETROUTE RTM_GETROUTE 39 RTM_NEWNEIGH = 28, 40#define RTM_NEWNEIGH RTM_NEWNEIGH 41 RTM_DELNEIGH, 42#define RTM_DELNEIGH RTM_DELNEIGH 43 RTM_GETNEIGH, 44#define RTM_GETNEIGH RTM_GETNEIGH 45 RTM_NEWRULE = 32, 46#define RTM_NEWRULE RTM_NEWRULE 47 RTM_DELRULE, 48#define RTM_DELRULE RTM_DELRULE 49 RTM_GETRULE, 50#define RTM_GETRULE RTM_GETRULE 51 RTM_NEWQDISC = 36, 52#define RTM_NEWQDISC RTM_NEWQDISC 53 RTM_DELQDISC, 54#define RTM_DELQDISC RTM_DELQDISC 55 RTM_GETQDISC, 56#define RTM_GETQDISC RTM_GETQDISC 57 RTM_NEWTCLASS = 40, 58#define RTM_NEWTCLASS RTM_NEWTCLASS 59 RTM_DELTCLASS, 60#define RTM_DELTCLASS RTM_DELTCLASS 61 RTM_GETTCLASS, 62#define RTM_GETTCLASS RTM_GETTCLASS 63 RTM_NEWTFILTER = 44, 64#define RTM_NEWTFILTER RTM_NEWTFILTER 65 RTM_DELTFILTER, 66#define RTM_DELTFILTER RTM_DELTFILTER 67 RTM_GETTFILTER, 68#define RTM_GETTFILTER RTM_GETTFILTER 69 RTM_NEWACTION = 48, 70#define RTM_NEWACTION RTM_NEWACTION 71 RTM_DELACTION, 72#define RTM_DELACTION RTM_DELACTION 73 RTM_GETACTION, 74#define RTM_GETACTION RTM_GETACTION 75 RTM_NEWPREFIX = 52, 76#define RTM_NEWPREFIX RTM_NEWPREFIX 77 RTM_GETMULTICAST = 58, 78#define RTM_GETMULTICAST RTM_GETMULTICAST 79 RTM_GETANYCAST = 62, 80#define RTM_GETANYCAST RTM_GETANYCAST 81 RTM_NEWNEIGHTBL = 64, 82#define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBL 83 RTM_GETNEIGHTBL = 66, 84#define RTM_GETNEIGHTBL RTM_GETNEIGHTBL 85 RTM_SETNEIGHTBL, 86#define RTM_SETNEIGHTBL RTM_SETNEIGHTBL 87 RTM_NEWNDUSEROPT = 68, 88#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT 89 RTM_NEWADDRLABEL = 72, 90#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL 91 RTM_DELADDRLABEL, 92#define RTM_DELADDRLABEL RTM_DELADDRLABEL 93 RTM_GETADDRLABEL, 94#define RTM_GETADDRLABEL RTM_GETADDRLABEL 95 RTM_GETDCB = 78, 96#define RTM_GETDCB RTM_GETDCB 97 RTM_SETDCB, 98#define RTM_SETDCB RTM_SETDCB 99 RTM_NEWNETCONF = 80, 100#define RTM_NEWNETCONF RTM_NEWNETCONF 101 RTM_DELNETCONF, 102#define RTM_DELNETCONF RTM_DELNETCONF 103 RTM_GETNETCONF = 82, 104#define RTM_GETNETCONF RTM_GETNETCONF 105 RTM_NEWMDB = 84, 106#define RTM_NEWMDB RTM_NEWMDB 107 RTM_DELMDB = 85, 108#define RTM_DELMDB RTM_DELMDB 109 RTM_GETMDB = 86, 110#define RTM_GETMDB RTM_GETMDB 111 RTM_NEWNSID = 88, 112#define RTM_NEWNSID RTM_NEWNSID 113 RTM_DELNSID = 89, 114#define RTM_DELNSID RTM_DELNSID 115 RTM_GETNSID = 90, 116#define RTM_GETNSID RTM_GETNSID 117 RTM_NEWSTATS = 92, 118#define RTM_NEWSTATS RTM_NEWSTATS 119 RTM_GETSTATS = 94, 120#define RTM_GETSTATS RTM_GETSTATS 121 RTM_NEWCACHEREPORT = 96, 122#define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT 123 RTM_NEWCHAIN = 100, 124#define RTM_NEWCHAIN RTM_NEWCHAIN 125 RTM_DELCHAIN, 126#define RTM_DELCHAIN RTM_DELCHAIN 127 RTM_GETCHAIN, 128#define RTM_GETCHAIN RTM_GETCHAIN 129 __RTM_MAX, 130#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1) 131}; 132#define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE) 133#define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2) 134#define RTM_FAM(cmd) (((cmd) - RTM_BASE) >> 2) 135struct rtattr { 136 unsigned short rta_len; 137 unsigned short rta_type; 138}; 139#define RTA_ALIGNTO 4U 140#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) ) 141#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \ 142 (rta)->rta_len >= sizeof(struct rtattr) && \ 143 (rta)->rta_len <= (len)) 144#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \ 145 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len))) 146#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len)) 147#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len)) 148#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0))) 149#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0)) 150struct rtmsg { 151 unsigned char rtm_family; 152 unsigned char rtm_dst_len; 153 unsigned char rtm_src_len; 154 unsigned char rtm_tos; 155 unsigned char rtm_table; 156 unsigned char rtm_protocol; 157 unsigned char rtm_scope; 158 unsigned char rtm_type; 159 unsigned rtm_flags; 160}; 161enum { 162 RTN_UNSPEC, 163 RTN_UNICAST, 164 RTN_LOCAL, 165 RTN_BROADCAST, 166 RTN_ANYCAST, 167 RTN_MULTICAST, 168 RTN_BLACKHOLE, 169 RTN_UNREACHABLE, 170 RTN_PROHIBIT, 171 RTN_THROW, 172 RTN_NAT, 173 RTN_XRESOLVE, 174 __RTN_MAX 175}; 176#define RTN_MAX (__RTN_MAX - 1) 177#define RTPROT_UNSPEC 0 178#define RTPROT_REDIRECT 1 179#define RTPROT_KERNEL 2 180#define RTPROT_BOOT 3 181#define RTPROT_STATIC 4 182#define RTPROT_GATED 8 183#define RTPROT_RA 9 184#define RTPROT_MRT 10 185#define RTPROT_ZEBRA 11 186#define RTPROT_BIRD 12 187#define RTPROT_DNROUTED 13 188#define RTPROT_XORP 14 189#define RTPROT_NTK 15 190#define RTPROT_DHCP 16 191#define RTPROT_MROUTED 17 192#define RTPROT_BABEL 42 193#define RTPROT_BGP 186 194#define RTPROT_ISIS 187 195#define RTPROT_OSPF 188 196#define RTPROT_RIP 189 197#define RTPROT_EIGRP 192 198enum rt_scope_t { 199 RT_SCOPE_UNIVERSE=0, 200 RT_SCOPE_SITE=200, 201 RT_SCOPE_LINK=253, 202 RT_SCOPE_HOST=254, 203 RT_SCOPE_NOWHERE=255 204}; 205#define RTM_F_NOTIFY 0x100 206#define RTM_F_CLONED 0x200 207#define RTM_F_EQUALIZE 0x400 208#define RTM_F_PREFIX 0x800 209#define RTM_F_LOOKUP_TABLE 0x1000 210#define RTM_F_FIB_MATCH 0x2000 211enum rt_class_t { 212 RT_TABLE_UNSPEC=0, 213 RT_TABLE_COMPAT=252, 214 RT_TABLE_DEFAULT=253, 215 RT_TABLE_MAIN=254, 216 RT_TABLE_LOCAL=255, 217 RT_TABLE_MAX=0xFFFFFFFF 218}; 219enum rtattr_type_t { 220 RTA_UNSPEC, 221 RTA_DST, 222 RTA_SRC, 223 RTA_IIF, 224 RTA_OIF, 225 RTA_GATEWAY, 226 RTA_PRIORITY, 227 RTA_PREFSRC, 228 RTA_METRICS, 229 RTA_MULTIPATH, 230 RTA_PROTOINFO, 231 RTA_FLOW, 232 RTA_CACHEINFO, 233 RTA_SESSION, 234 RTA_MP_ALGO, 235 RTA_TABLE, 236 RTA_MARK, 237 RTA_MFC_STATS, 238 RTA_VIA, 239 RTA_NEWDST, 240 RTA_PREF, 241 RTA_ENCAP_TYPE, 242 RTA_ENCAP, 243 RTA_EXPIRES, 244 RTA_PAD, 245 RTA_UID, 246 RTA_TTL_PROPAGATE, 247 RTA_IP_PROTO, 248 RTA_SPORT, 249 RTA_DPORT, 250 __RTA_MAX 251}; 252#define RTA_MAX (__RTA_MAX - 1) 253#define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg)))) 254#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg)) 255struct rtnexthop { 256 unsigned short rtnh_len; 257 unsigned char rtnh_flags; 258 unsigned char rtnh_hops; 259 int rtnh_ifindex; 260}; 261#define RTNH_F_DEAD 1 262#define RTNH_F_PERVASIVE 2 263#define RTNH_F_ONLINK 4 264#define RTNH_F_OFFLOAD 8 265#define RTNH_F_LINKDOWN 16 266#define RTNH_F_UNRESOLVED 32 267#define RTNH_COMPARE_MASK (RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD) 268#define RTNH_ALIGNTO 4 269#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) ) 270#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \ 271 ((int)(rtnh)->rtnh_len) <= (len)) 272#define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len))) 273#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len)) 274#define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len)) 275#define RTNH_DATA(rtnh) ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0))) 276struct rtvia { 277 __kernel_sa_family_t rtvia_family; 278 __u8 rtvia_addr[0]; 279}; 280struct rta_cacheinfo { 281 __u32 rta_clntref; 282 __u32 rta_lastuse; 283 __s32 rta_expires; 284 __u32 rta_error; 285 __u32 rta_used; 286#define RTNETLINK_HAVE_PEERINFO 1 287 __u32 rta_id; 288 __u32 rta_ts; 289 __u32 rta_tsage; 290}; 291enum { 292 RTAX_UNSPEC, 293#define RTAX_UNSPEC RTAX_UNSPEC 294 RTAX_LOCK, 295#define RTAX_LOCK RTAX_LOCK 296 RTAX_MTU, 297#define RTAX_MTU RTAX_MTU 298 RTAX_WINDOW, 299#define RTAX_WINDOW RTAX_WINDOW 300 RTAX_RTT, 301#define RTAX_RTT RTAX_RTT 302 RTAX_RTTVAR, 303#define RTAX_RTTVAR RTAX_RTTVAR 304 RTAX_SSTHRESH, 305#define RTAX_SSTHRESH RTAX_SSTHRESH 306 RTAX_CWND, 307#define RTAX_CWND RTAX_CWND 308 RTAX_ADVMSS, 309#define RTAX_ADVMSS RTAX_ADVMSS 310 RTAX_REORDERING, 311#define RTAX_REORDERING RTAX_REORDERING 312 RTAX_HOPLIMIT, 313#define RTAX_HOPLIMIT RTAX_HOPLIMIT 314 RTAX_INITCWND, 315#define RTAX_INITCWND RTAX_INITCWND 316 RTAX_FEATURES, 317#define RTAX_FEATURES RTAX_FEATURES 318 RTAX_RTO_MIN, 319#define RTAX_RTO_MIN RTAX_RTO_MIN 320 RTAX_INITRWND, 321#define RTAX_INITRWND RTAX_INITRWND 322 RTAX_QUICKACK, 323#define RTAX_QUICKACK RTAX_QUICKACK 324 RTAX_CC_ALGO, 325#define RTAX_CC_ALGO RTAX_CC_ALGO 326 RTAX_FASTOPEN_NO_COOKIE, 327#define RTAX_FASTOPEN_NO_COOKIE RTAX_FASTOPEN_NO_COOKIE 328 __RTAX_MAX 329}; 330#define RTAX_MAX (__RTAX_MAX - 1) 331#define RTAX_FEATURE_ECN (1 << 0) 332#define RTAX_FEATURE_SACK (1 << 1) 333#define RTAX_FEATURE_TIMESTAMP (1 << 2) 334#define RTAX_FEATURE_ALLFRAG (1 << 3) 335#define RTAX_FEATURE_MASK (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \ 336 RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG) 337struct rta_session { 338 __u8 proto; 339 __u8 pad1; 340 __u16 pad2; 341 union { 342 struct { 343 __u16 sport; 344 __u16 dport; 345 } ports; 346 struct { 347 __u8 type; 348 __u8 code; 349 __u16 ident; 350 } icmpt; 351 __u32 spi; 352 } u; 353}; 354struct rta_mfc_stats { 355 __u64 mfcs_packets; 356 __u64 mfcs_bytes; 357 __u64 mfcs_wrong_if; 358}; 359struct rtgenmsg { 360 unsigned char rtgen_family; 361}; 362struct ifinfomsg { 363 unsigned char ifi_family; 364 unsigned char __ifi_pad; 365 unsigned short ifi_type; 366 int ifi_index; 367 unsigned ifi_flags; 368 unsigned ifi_change; 369}; 370struct prefixmsg { 371 unsigned char prefix_family; 372 unsigned char prefix_pad1; 373 unsigned short prefix_pad2; 374 int prefix_ifindex; 375 unsigned char prefix_type; 376 unsigned char prefix_len; 377 unsigned char prefix_flags; 378 unsigned char prefix_pad3; 379}; 380enum 381{ 382 PREFIX_UNSPEC, 383 PREFIX_ADDRESS, 384 PREFIX_CACHEINFO, 385 __PREFIX_MAX 386}; 387#define PREFIX_MAX (__PREFIX_MAX - 1) 388struct prefix_cacheinfo { 389 __u32 preferred_time; 390 __u32 valid_time; 391}; 392struct tcmsg { 393 unsigned char tcm_family; 394 unsigned char tcm__pad1; 395 unsigned short tcm__pad2; 396 int tcm_ifindex; 397 __u32 tcm_handle; 398 __u32 tcm_parent; 399#define tcm_block_index tcm_parent 400 __u32 tcm_info; 401}; 402#define TCM_IFINDEX_MAGIC_BLOCK (0xFFFFFFFFU) 403enum { 404 TCA_UNSPEC, 405 TCA_KIND, 406 TCA_OPTIONS, 407 TCA_STATS, 408 TCA_XSTATS, 409 TCA_RATE, 410 TCA_FCNT, 411 TCA_STATS2, 412 TCA_STAB, 413 TCA_PAD, 414 TCA_DUMP_INVISIBLE, 415 TCA_CHAIN, 416 TCA_HW_OFFLOAD, 417 TCA_INGRESS_BLOCK, 418 TCA_EGRESS_BLOCK, 419 __TCA_MAX 420}; 421#define TCA_MAX (__TCA_MAX - 1) 422#define TCA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg)))) 423#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg)) 424struct nduseroptmsg { 425 unsigned char nduseropt_family; 426 unsigned char nduseropt_pad1; 427 unsigned short nduseropt_opts_len; 428 int nduseropt_ifindex; 429 __u8 nduseropt_icmp_type; 430 __u8 nduseropt_icmp_code; 431 unsigned short nduseropt_pad2; 432 unsigned int nduseropt_pad3; 433 434}; 435enum { 436 NDUSEROPT_UNSPEC, 437 NDUSEROPT_SRCADDR, 438 __NDUSEROPT_MAX 439}; 440#define NDUSEROPT_MAX (__NDUSEROPT_MAX - 1) 441#ifndef __KERNEL__ 442#define RTMGRP_LINK 1 443#define RTMGRP_NOTIFY 2 444#define RTMGRP_NEIGH 4 445#define RTMGRP_TC 8 446#define RTMGRP_IPV4_IFADDR 0x10 447#define RTMGRP_IPV4_MROUTE 0x20 448#define RTMGRP_IPV4_ROUTE 0x40 449#define RTMGRP_IPV4_RULE 0x80 450#define RTMGRP_IPV6_IFADDR 0x100 451#define RTMGRP_IPV6_MROUTE 0x200 452#define RTMGRP_IPV6_ROUTE 0x400 453#define RTMGRP_IPV6_IFINFO 0x800 454#define RTMGRP_DECnet_IFADDR 0x1000 455#define RTMGRP_DECnet_ROUTE 0x4000 456#define RTMGRP_IPV6_PREFIX 0x20000 457#endif 458enum rtnetlink_groups { 459 RTNLGRP_NONE, 460#define RTNLGRP_NONE RTNLGRP_NONE 461 RTNLGRP_LINK, 462#define RTNLGRP_LINK RTNLGRP_LINK 463 RTNLGRP_NOTIFY, 464#define RTNLGRP_NOTIFY RTNLGRP_NOTIFY 465 RTNLGRP_NEIGH, 466#define RTNLGRP_NEIGH RTNLGRP_NEIGH 467 RTNLGRP_TC, 468#define RTNLGRP_TC RTNLGRP_TC 469 RTNLGRP_IPV4_IFADDR, 470#define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR 471 RTNLGRP_IPV4_MROUTE, 472#define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE 473 RTNLGRP_IPV4_ROUTE, 474#define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE 475 RTNLGRP_IPV4_RULE, 476#define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE 477 RTNLGRP_IPV6_IFADDR, 478#define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR 479 RTNLGRP_IPV6_MROUTE, 480#define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE 481 RTNLGRP_IPV6_ROUTE, 482#define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE 483 RTNLGRP_IPV6_IFINFO, 484#define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO 485 RTNLGRP_DECnet_IFADDR, 486#define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR 487 RTNLGRP_NOP2, 488 RTNLGRP_DECnet_ROUTE, 489#define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE 490 RTNLGRP_DECnet_RULE, 491#define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE 492 RTNLGRP_NOP4, 493 RTNLGRP_IPV6_PREFIX, 494#define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX 495 RTNLGRP_IPV6_RULE, 496#define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE 497 RTNLGRP_ND_USEROPT, 498#define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT 499 RTNLGRP_PHONET_IFADDR, 500#define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR 501 RTNLGRP_PHONET_ROUTE, 502#define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE 503 RTNLGRP_DCB, 504#define RTNLGRP_DCB RTNLGRP_DCB 505 RTNLGRP_IPV4_NETCONF, 506#define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF 507 RTNLGRP_IPV6_NETCONF, 508#define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF 509 RTNLGRP_MDB, 510#define RTNLGRP_MDB RTNLGRP_MDB 511 RTNLGRP_MPLS_ROUTE, 512#define RTNLGRP_MPLS_ROUTE RTNLGRP_MPLS_ROUTE 513 RTNLGRP_NSID, 514#define RTNLGRP_NSID RTNLGRP_NSID 515 RTNLGRP_MPLS_NETCONF, 516#define RTNLGRP_MPLS_NETCONF RTNLGRP_MPLS_NETCONF 517 RTNLGRP_IPV4_MROUTE_R, 518#define RTNLGRP_IPV4_MROUTE_R RTNLGRP_IPV4_MROUTE_R 519 RTNLGRP_IPV6_MROUTE_R, 520#define RTNLGRP_IPV6_MROUTE_R RTNLGRP_IPV6_MROUTE_R 521 __RTNLGRP_MAX 522}; 523#define RTNLGRP_MAX (__RTNLGRP_MAX - 1) 524struct tcamsg { 525 unsigned char tca_family; 526 unsigned char tca__pad1; 527 unsigned short tca__pad2; 528}; 529enum { 530 TCA_ROOT_UNSPEC, 531 TCA_ROOT_TAB, 532#define TCA_ACT_TAB TCA_ROOT_TAB 533#define TCAA_MAX TCA_ROOT_TAB 534 TCA_ROOT_FLAGS, 535 TCA_ROOT_COUNT, 536 TCA_ROOT_TIME_DELTA, 537 __TCA_ROOT_MAX, 538#define TCA_ROOT_MAX (__TCA_ROOT_MAX - 1) 539}; 540#define TA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg)))) 541#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg)) 542#define TCA_FLAG_LARGE_DUMP_ON (1 << 0) 543#define RTEXT_FILTER_VF (1 << 0) 544#define RTEXT_FILTER_BRVLAN (1 << 1) 545#define RTEXT_FILTER_BRVLAN_COMPRESSED (1 << 2) 546#define RTEXT_FILTER_SKIP_STATS (1 << 3) 547#endif 548