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