linux/include/uapi/linux/rtnetlink.h
<<
>>
Prefs
   1#ifndef _UAPI__LINUX_RTNETLINK_H
   2#define _UAPI__LINUX_RTNETLINK_H
   3
   4#include <linux/types.h>
   5#include <linux/netlink.h>
   6#include <linux/if_link.h>
   7#include <linux/if_addr.h>
   8#include <linux/neighbour.h>
   9
  10/* rtnetlink families. Values up to 127 are reserved for real address
  11 * families, values above 128 may be used arbitrarily.
  12 */
  13#define RTNL_FAMILY_IPMR                128
  14#define RTNL_FAMILY_IP6MR               129
  15#define RTNL_FAMILY_MAX                 129
  16
  17/****
  18 *              Routing/neighbour discovery messages.
  19 ****/
  20
  21/* Types of messages */
  22
  23enum {
  24        RTM_BASE        = 16,
  25#define RTM_BASE        RTM_BASE
  26
  27        RTM_NEWLINK     = 16,
  28#define RTM_NEWLINK     RTM_NEWLINK
  29        RTM_DELLINK,
  30#define RTM_DELLINK     RTM_DELLINK
  31        RTM_GETLINK,
  32#define RTM_GETLINK     RTM_GETLINK
  33        RTM_SETLINK,
  34#define RTM_SETLINK     RTM_SETLINK
  35
  36        RTM_NEWADDR     = 20,
  37#define RTM_NEWADDR     RTM_NEWADDR
  38        RTM_DELADDR,
  39#define RTM_DELADDR     RTM_DELADDR
  40        RTM_GETADDR,
  41#define RTM_GETADDR     RTM_GETADDR
  42
  43        RTM_NEWROUTE    = 24,
  44#define RTM_NEWROUTE    RTM_NEWROUTE
  45        RTM_DELROUTE,
  46#define RTM_DELROUTE    RTM_DELROUTE
  47        RTM_GETROUTE,
  48#define RTM_GETROUTE    RTM_GETROUTE
  49
  50        RTM_NEWNEIGH    = 28,
  51#define RTM_NEWNEIGH    RTM_NEWNEIGH
  52        RTM_DELNEIGH,
  53#define RTM_DELNEIGH    RTM_DELNEIGH
  54        RTM_GETNEIGH,
  55#define RTM_GETNEIGH    RTM_GETNEIGH
  56
  57        RTM_NEWRULE     = 32,
  58#define RTM_NEWRULE     RTM_NEWRULE
  59        RTM_DELRULE,
  60#define RTM_DELRULE     RTM_DELRULE
  61        RTM_GETRULE,
  62#define RTM_GETRULE     RTM_GETRULE
  63
  64        RTM_NEWQDISC    = 36,
  65#define RTM_NEWQDISC    RTM_NEWQDISC
  66        RTM_DELQDISC,
  67#define RTM_DELQDISC    RTM_DELQDISC
  68        RTM_GETQDISC,
  69#define RTM_GETQDISC    RTM_GETQDISC
  70
  71        RTM_NEWTCLASS   = 40,
  72#define RTM_NEWTCLASS   RTM_NEWTCLASS
  73        RTM_DELTCLASS,
  74#define RTM_DELTCLASS   RTM_DELTCLASS
  75        RTM_GETTCLASS,
  76#define RTM_GETTCLASS   RTM_GETTCLASS
  77
  78        RTM_NEWTFILTER  = 44,
  79#define RTM_NEWTFILTER  RTM_NEWTFILTER
  80        RTM_DELTFILTER,
  81#define RTM_DELTFILTER  RTM_DELTFILTER
  82        RTM_GETTFILTER,
  83#define RTM_GETTFILTER  RTM_GETTFILTER
  84
  85        RTM_NEWACTION   = 48,
  86#define RTM_NEWACTION   RTM_NEWACTION
  87        RTM_DELACTION,
  88#define RTM_DELACTION   RTM_DELACTION
  89        RTM_GETACTION,
  90#define RTM_GETACTION   RTM_GETACTION
  91
  92        RTM_NEWPREFIX   = 52,
  93#define RTM_NEWPREFIX   RTM_NEWPREFIX
  94
  95        RTM_GETMULTICAST = 58,
  96#define RTM_GETMULTICAST RTM_GETMULTICAST
  97
  98        RTM_GETANYCAST  = 62,
  99#define RTM_GETANYCAST  RTM_GETANYCAST
 100
 101        RTM_NEWNEIGHTBL = 64,
 102#define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBL
 103        RTM_GETNEIGHTBL = 66,
 104#define RTM_GETNEIGHTBL RTM_GETNEIGHTBL
 105        RTM_SETNEIGHTBL,
 106#define RTM_SETNEIGHTBL RTM_SETNEIGHTBL
 107
 108        RTM_NEWNDUSEROPT = 68,
 109#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
 110
 111        RTM_NEWADDRLABEL = 72,
 112#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
 113        RTM_DELADDRLABEL,
 114#define RTM_DELADDRLABEL RTM_DELADDRLABEL
 115        RTM_GETADDRLABEL,
 116#define RTM_GETADDRLABEL RTM_GETADDRLABEL
 117
 118        RTM_GETDCB = 78,
 119#define RTM_GETDCB RTM_GETDCB
 120        RTM_SETDCB,
 121#define RTM_SETDCB RTM_SETDCB
 122
 123        RTM_NEWNETCONF = 80,
 124#define RTM_NEWNETCONF RTM_NEWNETCONF
 125        RTM_GETNETCONF = 82,
 126#define RTM_GETNETCONF RTM_GETNETCONF
 127
 128        RTM_NEWMDB = 84,
 129#define RTM_NEWMDB RTM_NEWMDB
 130        RTM_DELMDB = 85,
 131#define RTM_DELMDB RTM_DELMDB
 132        RTM_GETMDB = 86,
 133#define RTM_GETMDB RTM_GETMDB
 134
 135        RTM_NEWNSID = 88,
 136#define RTM_NEWNSID RTM_NEWNSID
 137        RTM_DELNSID = 89,
 138#define RTM_DELNSID RTM_DELNSID
 139        RTM_GETNSID = 90,
 140#define RTM_GETNSID RTM_GETNSID
 141
 142        __RTM_MAX,
 143#define RTM_MAX         (((__RTM_MAX + 3) & ~3) - 1)
 144};
 145
 146#define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE)
 147#define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2)
 148#define RTM_FAM(cmd)    (((cmd) - RTM_BASE) >> 2)
 149
 150/* 
 151   Generic structure for encapsulation of optional route information.
 152   It is reminiscent of sockaddr, but with sa_family replaced
 153   with attribute type.
 154 */
 155
 156struct rtattr {
 157        unsigned short  rta_len;
 158        unsigned short  rta_type;
 159};
 160
 161/* Macros to handle rtattributes */
 162
 163#define RTA_ALIGNTO     4U
 164#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
 165#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
 166                         (rta)->rta_len >= sizeof(struct rtattr) && \
 167                         (rta)->rta_len <= (len))
 168#define RTA_NEXT(rta,attrlen)   ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
 169                                 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
 170#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
 171#define RTA_SPACE(len)  RTA_ALIGN(RTA_LENGTH(len))
 172#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
 173#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
 174
 175
 176
 177
 178/******************************************************************************
 179 *              Definitions used in routing table administration.
 180 ****/
 181
 182struct rtmsg {
 183        unsigned char           rtm_family;
 184        unsigned char           rtm_dst_len;
 185        unsigned char           rtm_src_len;
 186        unsigned char           rtm_tos;
 187
 188        unsigned char           rtm_table;      /* Routing table id */
 189        unsigned char           rtm_protocol;   /* Routing protocol; see below  */
 190        unsigned char           rtm_scope;      /* See below */ 
 191        unsigned char           rtm_type;       /* See below    */
 192
 193        unsigned                rtm_flags;
 194};
 195
 196/* rtm_type */
 197
 198enum {
 199        RTN_UNSPEC,
 200        RTN_UNICAST,            /* Gateway or direct route      */
 201        RTN_LOCAL,              /* Accept locally               */
 202        RTN_BROADCAST,          /* Accept locally as broadcast,
 203                                   send as broadcast */
 204        RTN_ANYCAST,            /* Accept locally as broadcast,
 205                                   but send as unicast */
 206        RTN_MULTICAST,          /* Multicast route              */
 207        RTN_BLACKHOLE,          /* Drop                         */
 208        RTN_UNREACHABLE,        /* Destination is unreachable   */
 209        RTN_PROHIBIT,           /* Administratively prohibited  */
 210        RTN_THROW,              /* Not in this table            */
 211        RTN_NAT,                /* Translate this address       */
 212        RTN_XRESOLVE,           /* Use external resolver        */
 213        __RTN_MAX
 214};
 215
 216#define RTN_MAX (__RTN_MAX - 1)
 217
 218
 219/* rtm_protocol */
 220
 221#define RTPROT_UNSPEC   0
 222#define RTPROT_REDIRECT 1       /* Route installed by ICMP redirects;
 223                                   not used by current IPv4 */
 224#define RTPROT_KERNEL   2       /* Route installed by kernel            */
 225#define RTPROT_BOOT     3       /* Route installed during boot          */
 226#define RTPROT_STATIC   4       /* Route installed by administrator     */
 227
 228/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
 229   they are just passed from user and back as is.
 230   It will be used by hypothetical multiple routing daemons.
 231   Note that protocol values should be standardized in order to
 232   avoid conflicts.
 233 */
 234
 235#define RTPROT_GATED    8       /* Apparently, GateD */
 236#define RTPROT_RA       9       /* RDISC/ND router advertisements */
 237#define RTPROT_MRT      10      /* Merit MRT */
 238#define RTPROT_ZEBRA    11      /* Zebra */
 239#define RTPROT_BIRD     12      /* BIRD */
 240#define RTPROT_DNROUTED 13      /* DECnet routing daemon */
 241#define RTPROT_XORP     14      /* XORP */
 242#define RTPROT_NTK      15      /* Netsukuku */
 243#define RTPROT_DHCP     16      /* DHCP client */
 244#define RTPROT_MROUTED  17      /* Multicast daemon */
 245#define RTPROT_BABEL    42      /* Babel daemon */
 246
 247/* rtm_scope
 248
 249   Really it is not scope, but sort of distance to the destination.
 250   NOWHERE are reserved for not existing destinations, HOST is our
 251   local addresses, LINK are destinations, located on directly attached
 252   link and UNIVERSE is everywhere in the Universe.
 253
 254   Intermediate values are also possible f.e. interior routes
 255   could be assigned a value between UNIVERSE and LINK.
 256*/
 257
 258enum rt_scope_t {
 259        RT_SCOPE_UNIVERSE=0,
 260/* User defined values  */
 261        RT_SCOPE_SITE=200,
 262        RT_SCOPE_LINK=253,
 263        RT_SCOPE_HOST=254,
 264        RT_SCOPE_NOWHERE=255
 265};
 266
 267/* rtm_flags */
 268
 269#define RTM_F_NOTIFY            0x100   /* Notify user of route change  */
 270#define RTM_F_CLONED            0x200   /* This route is cloned         */
 271#define RTM_F_EQUALIZE          0x400   /* Multipath equalizer: NI      */
 272#define RTM_F_PREFIX            0x800   /* Prefix addresses             */
 273#define RTM_F_LOOKUP_TABLE      0x1000  /* set rtm_table to FIB lookup result */
 274
 275/* Reserved table identifiers */
 276
 277enum rt_class_t {
 278        RT_TABLE_UNSPEC=0,
 279/* User defined values */
 280        RT_TABLE_COMPAT=252,
 281        RT_TABLE_DEFAULT=253,
 282        RT_TABLE_MAIN=254,
 283        RT_TABLE_LOCAL=255,
 284        RT_TABLE_MAX=0xFFFFFFFF
 285};
 286
 287
 288/* Routing message attributes */
 289
 290enum rtattr_type_t {
 291        RTA_UNSPEC,
 292        RTA_DST,
 293        RTA_SRC,
 294        RTA_IIF,
 295        RTA_OIF,
 296        RTA_GATEWAY,
 297        RTA_PRIORITY,
 298        RTA_PREFSRC,
 299        RTA_METRICS,
 300        RTA_MULTIPATH,
 301        RTA_PROTOINFO, /* no longer used */
 302        RTA_FLOW,
 303        RTA_CACHEINFO,
 304        RTA_SESSION, /* no longer used */
 305        RTA_MP_ALGO, /* no longer used */
 306        RTA_TABLE,
 307        RTA_MARK,
 308        RTA_MFC_STATS,
 309        RTA_VIA,
 310        RTA_NEWDST,
 311        RTA_PREF,
 312        RTA_ENCAP_TYPE,
 313        RTA_ENCAP,
 314        RTA_EXPIRES,
 315        __RTA_MAX
 316};
 317
 318#define RTA_MAX (__RTA_MAX - 1)
 319
 320#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
 321#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
 322
 323/* RTM_MULTIPATH --- array of struct rtnexthop.
 324 *
 325 * "struct rtnexthop" describes all necessary nexthop information,
 326 * i.e. parameters of path to a destination via this nexthop.
 327 *
 328 * At the moment it is impossible to set different prefsrc, mtu, window
 329 * and rtt for different paths from multipath.
 330 */
 331
 332struct rtnexthop {
 333        unsigned short          rtnh_len;
 334        unsigned char           rtnh_flags;
 335        unsigned char           rtnh_hops;
 336        int                     rtnh_ifindex;
 337};
 338
 339/* rtnh_flags */
 340
 341#define RTNH_F_DEAD             1       /* Nexthop is dead (used by multipath)  */
 342#define RTNH_F_PERVASIVE        2       /* Do recursive gateway lookup  */
 343#define RTNH_F_ONLINK           4       /* Gateway is forced on link    */
 344#define RTNH_F_OFFLOAD          8       /* offloaded route */
 345#define RTNH_F_LINKDOWN         16      /* carrier-down on nexthop */
 346
 347#define RTNH_COMPARE_MASK       (RTNH_F_DEAD | RTNH_F_LINKDOWN)
 348
 349/* Macros to handle hexthops */
 350
 351#define RTNH_ALIGNTO    4
 352#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
 353#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
 354                           ((int)(rtnh)->rtnh_len) <= (len))
 355#define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
 356#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
 357#define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len))
 358#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
 359
 360/* RTA_VIA */
 361struct rtvia {
 362        __kernel_sa_family_t    rtvia_family;
 363        __u8                    rtvia_addr[0];
 364};
 365
 366/* RTM_CACHEINFO */
 367
 368struct rta_cacheinfo {
 369        __u32   rta_clntref;
 370        __u32   rta_lastuse;
 371        __s32   rta_expires;
 372        __u32   rta_error;
 373        __u32   rta_used;
 374
 375#define RTNETLINK_HAVE_PEERINFO 1
 376        __u32   rta_id;
 377        __u32   rta_ts;
 378        __u32   rta_tsage;
 379};
 380
 381/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
 382
 383enum {
 384        RTAX_UNSPEC,
 385#define RTAX_UNSPEC RTAX_UNSPEC
 386        RTAX_LOCK,
 387#define RTAX_LOCK RTAX_LOCK
 388        RTAX_MTU,
 389#define RTAX_MTU RTAX_MTU
 390        RTAX_WINDOW,
 391#define RTAX_WINDOW RTAX_WINDOW
 392        RTAX_RTT,
 393#define RTAX_RTT RTAX_RTT
 394        RTAX_RTTVAR,
 395#define RTAX_RTTVAR RTAX_RTTVAR
 396        RTAX_SSTHRESH,
 397#define RTAX_SSTHRESH RTAX_SSTHRESH
 398        RTAX_CWND,
 399#define RTAX_CWND RTAX_CWND
 400        RTAX_ADVMSS,
 401#define RTAX_ADVMSS RTAX_ADVMSS
 402        RTAX_REORDERING,
 403#define RTAX_REORDERING RTAX_REORDERING
 404        RTAX_HOPLIMIT,
 405#define RTAX_HOPLIMIT RTAX_HOPLIMIT
 406        RTAX_INITCWND,
 407#define RTAX_INITCWND RTAX_INITCWND
 408        RTAX_FEATURES,
 409#define RTAX_FEATURES RTAX_FEATURES
 410        RTAX_RTO_MIN,
 411#define RTAX_RTO_MIN RTAX_RTO_MIN
 412        RTAX_INITRWND,
 413#define RTAX_INITRWND RTAX_INITRWND
 414        RTAX_QUICKACK,
 415#define RTAX_QUICKACK RTAX_QUICKACK
 416        RTAX_CC_ALGO,
 417#define RTAX_CC_ALGO RTAX_CC_ALGO
 418        __RTAX_MAX
 419};
 420
 421#define RTAX_MAX (__RTAX_MAX - 1)
 422
 423#define RTAX_FEATURE_ECN        (1 << 0)
 424#define RTAX_FEATURE_SACK       (1 << 1)
 425#define RTAX_FEATURE_TIMESTAMP  (1 << 2)
 426#define RTAX_FEATURE_ALLFRAG    (1 << 3)
 427
 428#define RTAX_FEATURE_MASK       (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \
 429                                 RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
 430
 431struct rta_session {
 432        __u8    proto;
 433        __u8    pad1;
 434        __u16   pad2;
 435
 436        union {
 437                struct {
 438                        __u16   sport;
 439                        __u16   dport;
 440                } ports;
 441
 442                struct {
 443                        __u8    type;
 444                        __u8    code;
 445                        __u16   ident;
 446                } icmpt;
 447
 448                __u32           spi;
 449        } u;
 450};
 451
 452struct rta_mfc_stats {
 453        __u64   mfcs_packets;
 454        __u64   mfcs_bytes;
 455        __u64   mfcs_wrong_if;
 456};
 457
 458/****
 459 *              General form of address family dependent message.
 460 ****/
 461
 462struct rtgenmsg {
 463        unsigned char           rtgen_family;
 464};
 465
 466/*****************************************************************
 467 *              Link layer specific messages.
 468 ****/
 469
 470/* struct ifinfomsg
 471 * passes link level specific information, not dependent
 472 * on network protocol.
 473 */
 474
 475struct ifinfomsg {
 476        unsigned char   ifi_family;
 477        unsigned char   __ifi_pad;
 478        unsigned short  ifi_type;               /* ARPHRD_* */
 479        int             ifi_index;              /* Link index   */
 480        unsigned        ifi_flags;              /* IFF_* flags  */
 481        unsigned        ifi_change;             /* IFF_* change mask */
 482};
 483
 484/********************************************************************
 485 *              prefix information 
 486 ****/
 487
 488struct prefixmsg {
 489        unsigned char   prefix_family;
 490        unsigned char   prefix_pad1;
 491        unsigned short  prefix_pad2;
 492        int             prefix_ifindex;
 493        unsigned char   prefix_type;
 494        unsigned char   prefix_len;
 495        unsigned char   prefix_flags;
 496        unsigned char   prefix_pad3;
 497};
 498
 499enum 
 500{
 501        PREFIX_UNSPEC,
 502        PREFIX_ADDRESS,
 503        PREFIX_CACHEINFO,
 504        __PREFIX_MAX
 505};
 506
 507#define PREFIX_MAX      (__PREFIX_MAX - 1)
 508
 509struct prefix_cacheinfo {
 510        __u32   preferred_time;
 511        __u32   valid_time;
 512};
 513
 514
 515/*****************************************************************
 516 *              Traffic control messages.
 517 ****/
 518
 519struct tcmsg {
 520        unsigned char   tcm_family;
 521        unsigned char   tcm__pad1;
 522        unsigned short  tcm__pad2;
 523        int             tcm_ifindex;
 524        __u32           tcm_handle;
 525        __u32           tcm_parent;
 526        __u32           tcm_info;
 527};
 528
 529enum {
 530        TCA_UNSPEC,
 531        TCA_KIND,
 532        TCA_OPTIONS,
 533        TCA_STATS,
 534        TCA_XSTATS,
 535        TCA_RATE,
 536        TCA_FCNT,
 537        TCA_STATS2,
 538        TCA_STAB,
 539        __TCA_MAX
 540};
 541
 542#define TCA_MAX (__TCA_MAX - 1)
 543
 544#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
 545#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
 546
 547/********************************************************************
 548 *              Neighbor Discovery userland options
 549 ****/
 550
 551struct nduseroptmsg {
 552        unsigned char   nduseropt_family;
 553        unsigned char   nduseropt_pad1;
 554        unsigned short  nduseropt_opts_len;     /* Total length of options */
 555        int             nduseropt_ifindex;
 556        __u8            nduseropt_icmp_type;
 557        __u8            nduseropt_icmp_code;
 558        unsigned short  nduseropt_pad2;
 559        unsigned int    nduseropt_pad3;
 560        /* Followed by one or more ND options */
 561};
 562
 563enum {
 564        NDUSEROPT_UNSPEC,
 565        NDUSEROPT_SRCADDR,
 566        __NDUSEROPT_MAX
 567};
 568
 569#define NDUSEROPT_MAX   (__NDUSEROPT_MAX - 1)
 570
 571#ifndef __KERNEL__
 572/* RTnetlink multicast groups - backwards compatibility for userspace */
 573#define RTMGRP_LINK             1
 574#define RTMGRP_NOTIFY           2
 575#define RTMGRP_NEIGH            4
 576#define RTMGRP_TC               8
 577
 578#define RTMGRP_IPV4_IFADDR      0x10
 579#define RTMGRP_IPV4_MROUTE      0x20
 580#define RTMGRP_IPV4_ROUTE       0x40
 581#define RTMGRP_IPV4_RULE        0x80
 582
 583#define RTMGRP_IPV6_IFADDR      0x100
 584#define RTMGRP_IPV6_MROUTE      0x200
 585#define RTMGRP_IPV6_ROUTE       0x400
 586#define RTMGRP_IPV6_IFINFO      0x800
 587
 588#define RTMGRP_DECnet_IFADDR    0x1000
 589#define RTMGRP_DECnet_ROUTE     0x4000
 590
 591#define RTMGRP_IPV6_PREFIX      0x20000
 592#endif
 593
 594/* RTnetlink multicast groups */
 595enum rtnetlink_groups {
 596        RTNLGRP_NONE,
 597#define RTNLGRP_NONE            RTNLGRP_NONE
 598        RTNLGRP_LINK,
 599#define RTNLGRP_LINK            RTNLGRP_LINK
 600        RTNLGRP_NOTIFY,
 601#define RTNLGRP_NOTIFY          RTNLGRP_NOTIFY
 602        RTNLGRP_NEIGH,
 603#define RTNLGRP_NEIGH           RTNLGRP_NEIGH
 604        RTNLGRP_TC,
 605#define RTNLGRP_TC              RTNLGRP_TC
 606        RTNLGRP_IPV4_IFADDR,
 607#define RTNLGRP_IPV4_IFADDR     RTNLGRP_IPV4_IFADDR
 608        RTNLGRP_IPV4_MROUTE,
 609#define RTNLGRP_IPV4_MROUTE     RTNLGRP_IPV4_MROUTE
 610        RTNLGRP_IPV4_ROUTE,
 611#define RTNLGRP_IPV4_ROUTE      RTNLGRP_IPV4_ROUTE
 612        RTNLGRP_IPV4_RULE,
 613#define RTNLGRP_IPV4_RULE       RTNLGRP_IPV4_RULE
 614        RTNLGRP_IPV6_IFADDR,
 615#define RTNLGRP_IPV6_IFADDR     RTNLGRP_IPV6_IFADDR
 616        RTNLGRP_IPV6_MROUTE,
 617#define RTNLGRP_IPV6_MROUTE     RTNLGRP_IPV6_MROUTE
 618        RTNLGRP_IPV6_ROUTE,
 619#define RTNLGRP_IPV6_ROUTE      RTNLGRP_IPV6_ROUTE
 620        RTNLGRP_IPV6_IFINFO,
 621#define RTNLGRP_IPV6_IFINFO     RTNLGRP_IPV6_IFINFO
 622        RTNLGRP_DECnet_IFADDR,
 623#define RTNLGRP_DECnet_IFADDR   RTNLGRP_DECnet_IFADDR
 624        RTNLGRP_NOP2,
 625        RTNLGRP_DECnet_ROUTE,
 626#define RTNLGRP_DECnet_ROUTE    RTNLGRP_DECnet_ROUTE
 627        RTNLGRP_DECnet_RULE,
 628#define RTNLGRP_DECnet_RULE     RTNLGRP_DECnet_RULE
 629        RTNLGRP_NOP4,
 630        RTNLGRP_IPV6_PREFIX,
 631#define RTNLGRP_IPV6_PREFIX     RTNLGRP_IPV6_PREFIX
 632        RTNLGRP_IPV6_RULE,
 633#define RTNLGRP_IPV6_RULE       RTNLGRP_IPV6_RULE
 634        RTNLGRP_ND_USEROPT,
 635#define RTNLGRP_ND_USEROPT      RTNLGRP_ND_USEROPT
 636        RTNLGRP_PHONET_IFADDR,
 637#define RTNLGRP_PHONET_IFADDR   RTNLGRP_PHONET_IFADDR
 638        RTNLGRP_PHONET_ROUTE,
 639#define RTNLGRP_PHONET_ROUTE    RTNLGRP_PHONET_ROUTE
 640        RTNLGRP_DCB,
 641#define RTNLGRP_DCB             RTNLGRP_DCB
 642        RTNLGRP_IPV4_NETCONF,
 643#define RTNLGRP_IPV4_NETCONF    RTNLGRP_IPV4_NETCONF
 644        RTNLGRP_IPV6_NETCONF,
 645#define RTNLGRP_IPV6_NETCONF    RTNLGRP_IPV6_NETCONF
 646        RTNLGRP_MDB,
 647#define RTNLGRP_MDB             RTNLGRP_MDB
 648        RTNLGRP_MPLS_ROUTE,
 649#define RTNLGRP_MPLS_ROUTE      RTNLGRP_MPLS_ROUTE
 650        RTNLGRP_NSID,
 651#define RTNLGRP_NSID            RTNLGRP_NSID
 652        __RTNLGRP_MAX
 653};
 654#define RTNLGRP_MAX     (__RTNLGRP_MAX - 1)
 655
 656/* TC action piece */
 657struct tcamsg {
 658        unsigned char   tca_family;
 659        unsigned char   tca__pad1;
 660        unsigned short  tca__pad2;
 661};
 662#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
 663#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
 664#define TCA_ACT_TAB 1 /* attr type must be >=1 */       
 665#define TCAA_MAX 1
 666
 667/* New extended info filters for IFLA_EXT_MASK */
 668#define RTEXT_FILTER_VF         (1 << 0)
 669#define RTEXT_FILTER_BRVLAN     (1 << 1)
 670#define RTEXT_FILTER_BRVLAN_COMPRESSED  (1 << 2)
 671#define RTEXT_FILTER_SKIP_STATS (1 << 3)
 672
 673/* End of information exported to user level */
 674
 675
 676
 677#endif /* _UAPI__LINUX_RTNETLINK_H */
 678