Annotation of embedaddon/strongswan/src/include/linux/rtnetlink.h, revision 1.1.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>