Annotation of embedaddon/strongswan/src/include/linux/rtnetlink.h, revision 1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>