Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 #ifndef _UAPI__LINUX_RTNETLINK_H
0003 #define _UAPI__LINUX_RTNETLINK_H
0004 
0005 #include <linux/types.h>
0006 #include <linux/netlink.h>
0007 #include <linux/if_link.h>
0008 #include <linux/if_addr.h>
0009 #include <linux/neighbour.h>
0010 
0011 /* rtnetlink families. Values up to 127 are reserved for real address
0012  * families, values above 128 may be used arbitrarily.
0013  */
0014 #define RTNL_FAMILY_IPMR        128
0015 #define RTNL_FAMILY_IP6MR       129
0016 #define RTNL_FAMILY_MAX         129
0017 
0018 /****
0019  *      Routing/neighbour discovery messages.
0020  ****/
0021 
0022 /* Types of messages */
0023 
0024 enum {
0025     RTM_BASE    = 16,
0026 #define RTM_BASE    RTM_BASE
0027 
0028     RTM_NEWLINK = 16,
0029 #define RTM_NEWLINK RTM_NEWLINK
0030     RTM_DELLINK,
0031 #define RTM_DELLINK RTM_DELLINK
0032     RTM_GETLINK,
0033 #define RTM_GETLINK RTM_GETLINK
0034     RTM_SETLINK,
0035 #define RTM_SETLINK RTM_SETLINK
0036 
0037     RTM_NEWADDR = 20,
0038 #define RTM_NEWADDR RTM_NEWADDR
0039     RTM_DELADDR,
0040 #define RTM_DELADDR RTM_DELADDR
0041     RTM_GETADDR,
0042 #define RTM_GETADDR RTM_GETADDR
0043 
0044     RTM_NEWROUTE    = 24,
0045 #define RTM_NEWROUTE    RTM_NEWROUTE
0046     RTM_DELROUTE,
0047 #define RTM_DELROUTE    RTM_DELROUTE
0048     RTM_GETROUTE,
0049 #define RTM_GETROUTE    RTM_GETROUTE
0050 
0051     RTM_NEWNEIGH    = 28,
0052 #define RTM_NEWNEIGH    RTM_NEWNEIGH
0053     RTM_DELNEIGH,
0054 #define RTM_DELNEIGH    RTM_DELNEIGH
0055     RTM_GETNEIGH,
0056 #define RTM_GETNEIGH    RTM_GETNEIGH
0057 
0058     RTM_NEWRULE = 32,
0059 #define RTM_NEWRULE RTM_NEWRULE
0060     RTM_DELRULE,
0061 #define RTM_DELRULE RTM_DELRULE
0062     RTM_GETRULE,
0063 #define RTM_GETRULE RTM_GETRULE
0064 
0065     RTM_NEWQDISC    = 36,
0066 #define RTM_NEWQDISC    RTM_NEWQDISC
0067     RTM_DELQDISC,
0068 #define RTM_DELQDISC    RTM_DELQDISC
0069     RTM_GETQDISC,
0070 #define RTM_GETQDISC    RTM_GETQDISC
0071 
0072     RTM_NEWTCLASS   = 40,
0073 #define RTM_NEWTCLASS   RTM_NEWTCLASS
0074     RTM_DELTCLASS,
0075 #define RTM_DELTCLASS   RTM_DELTCLASS
0076     RTM_GETTCLASS,
0077 #define RTM_GETTCLASS   RTM_GETTCLASS
0078 
0079     RTM_NEWTFILTER  = 44,
0080 #define RTM_NEWTFILTER  RTM_NEWTFILTER
0081     RTM_DELTFILTER,
0082 #define RTM_DELTFILTER  RTM_DELTFILTER
0083     RTM_GETTFILTER,
0084 #define RTM_GETTFILTER  RTM_GETTFILTER
0085 
0086     RTM_NEWACTION   = 48,
0087 #define RTM_NEWACTION   RTM_NEWACTION
0088     RTM_DELACTION,
0089 #define RTM_DELACTION   RTM_DELACTION
0090     RTM_GETACTION,
0091 #define RTM_GETACTION   RTM_GETACTION
0092 
0093     RTM_NEWPREFIX   = 52,
0094 #define RTM_NEWPREFIX   RTM_NEWPREFIX
0095 
0096     RTM_GETMULTICAST = 58,
0097 #define RTM_GETMULTICAST RTM_GETMULTICAST
0098 
0099     RTM_GETANYCAST  = 62,
0100 #define RTM_GETANYCAST  RTM_GETANYCAST
0101 
0102     RTM_NEWNEIGHTBL = 64,
0103 #define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBL
0104     RTM_GETNEIGHTBL = 66,
0105 #define RTM_GETNEIGHTBL RTM_GETNEIGHTBL
0106     RTM_SETNEIGHTBL,
0107 #define RTM_SETNEIGHTBL RTM_SETNEIGHTBL
0108 
0109     RTM_NEWNDUSEROPT = 68,
0110 #define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
0111 
0112     RTM_NEWADDRLABEL = 72,
0113 #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
0114     RTM_DELADDRLABEL,
0115 #define RTM_DELADDRLABEL RTM_DELADDRLABEL
0116     RTM_GETADDRLABEL,
0117 #define RTM_GETADDRLABEL RTM_GETADDRLABEL
0118 
0119     RTM_GETDCB = 78,
0120 #define RTM_GETDCB RTM_GETDCB
0121     RTM_SETDCB,
0122 #define RTM_SETDCB RTM_SETDCB
0123 
0124     RTM_NEWNETCONF = 80,
0125 #define RTM_NEWNETCONF RTM_NEWNETCONF
0126     RTM_DELNETCONF,
0127 #define RTM_DELNETCONF RTM_DELNETCONF
0128     RTM_GETNETCONF = 82,
0129 #define RTM_GETNETCONF RTM_GETNETCONF
0130 
0131     RTM_NEWMDB = 84,
0132 #define RTM_NEWMDB RTM_NEWMDB
0133     RTM_DELMDB = 85,
0134 #define RTM_DELMDB RTM_DELMDB
0135     RTM_GETMDB = 86,
0136 #define RTM_GETMDB RTM_GETMDB
0137 
0138     RTM_NEWNSID = 88,
0139 #define RTM_NEWNSID RTM_NEWNSID
0140     RTM_DELNSID = 89,
0141 #define RTM_DELNSID RTM_DELNSID
0142     RTM_GETNSID = 90,
0143 #define RTM_GETNSID RTM_GETNSID
0144 
0145     RTM_NEWSTATS = 92,
0146 #define RTM_NEWSTATS RTM_NEWSTATS
0147     RTM_GETSTATS = 94,
0148 #define RTM_GETSTATS RTM_GETSTATS
0149     RTM_SETSTATS,
0150 #define RTM_SETSTATS RTM_SETSTATS
0151 
0152     RTM_NEWCACHEREPORT = 96,
0153 #define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
0154 
0155     RTM_NEWCHAIN = 100,
0156 #define RTM_NEWCHAIN RTM_NEWCHAIN
0157     RTM_DELCHAIN,
0158 #define RTM_DELCHAIN RTM_DELCHAIN
0159     RTM_GETCHAIN,
0160 #define RTM_GETCHAIN RTM_GETCHAIN
0161 
0162     RTM_NEWNEXTHOP = 104,
0163 #define RTM_NEWNEXTHOP  RTM_NEWNEXTHOP
0164     RTM_DELNEXTHOP,
0165 #define RTM_DELNEXTHOP  RTM_DELNEXTHOP
0166     RTM_GETNEXTHOP,
0167 #define RTM_GETNEXTHOP  RTM_GETNEXTHOP
0168 
0169     RTM_NEWLINKPROP = 108,
0170 #define RTM_NEWLINKPROP RTM_NEWLINKPROP
0171     RTM_DELLINKPROP,
0172 #define RTM_DELLINKPROP RTM_DELLINKPROP
0173     RTM_GETLINKPROP,
0174 #define RTM_GETLINKPROP RTM_GETLINKPROP
0175 
0176     RTM_NEWVLAN = 112,
0177 #define RTM_NEWNVLAN    RTM_NEWVLAN
0178     RTM_DELVLAN,
0179 #define RTM_DELVLAN RTM_DELVLAN
0180     RTM_GETVLAN,
0181 #define RTM_GETVLAN RTM_GETVLAN
0182 
0183     RTM_NEWNEXTHOPBUCKET = 116,
0184 #define RTM_NEWNEXTHOPBUCKET    RTM_NEWNEXTHOPBUCKET
0185     RTM_DELNEXTHOPBUCKET,
0186 #define RTM_DELNEXTHOPBUCKET    RTM_DELNEXTHOPBUCKET
0187     RTM_GETNEXTHOPBUCKET,
0188 #define RTM_GETNEXTHOPBUCKET    RTM_GETNEXTHOPBUCKET
0189 
0190     RTM_NEWTUNNEL = 120,
0191 #define RTM_NEWTUNNEL   RTM_NEWTUNNEL
0192     RTM_DELTUNNEL,
0193 #define RTM_DELTUNNEL   RTM_DELTUNNEL
0194     RTM_GETTUNNEL,
0195 #define RTM_GETTUNNEL   RTM_GETTUNNEL
0196 
0197     __RTM_MAX,
0198 #define RTM_MAX     (((__RTM_MAX + 3) & ~3) - 1)
0199 };
0200 
0201 #define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE)
0202 #define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2)
0203 #define RTM_FAM(cmd)    (((cmd) - RTM_BASE) >> 2)
0204 
0205 /* 
0206    Generic structure for encapsulation of optional route information.
0207    It is reminiscent of sockaddr, but with sa_family replaced
0208    with attribute type.
0209  */
0210 
0211 struct rtattr {
0212     unsigned short  rta_len;
0213     unsigned short  rta_type;
0214 };
0215 
0216 /* Macros to handle rtattributes */
0217 
0218 #define RTA_ALIGNTO 4U
0219 #define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
0220 #define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
0221              (rta)->rta_len >= sizeof(struct rtattr) && \
0222              (rta)->rta_len <= (len))
0223 #define RTA_NEXT(rta,attrlen)   ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
0224                  (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
0225 #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
0226 #define RTA_SPACE(len)  RTA_ALIGN(RTA_LENGTH(len))
0227 #define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
0228 #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
0229 
0230 
0231 
0232 
0233 /******************************************************************************
0234  *      Definitions used in routing table administration.
0235  ****/
0236 
0237 struct rtmsg {
0238     unsigned char       rtm_family;
0239     unsigned char       rtm_dst_len;
0240     unsigned char       rtm_src_len;
0241     unsigned char       rtm_tos;
0242 
0243     unsigned char       rtm_table;  /* Routing table id */
0244     unsigned char       rtm_protocol;   /* Routing protocol; see below  */
0245     unsigned char       rtm_scope;  /* See below */ 
0246     unsigned char       rtm_type;   /* See below    */
0247 
0248     unsigned        rtm_flags;
0249 };
0250 
0251 /* rtm_type */
0252 
0253 enum {
0254     RTN_UNSPEC,
0255     RTN_UNICAST,        /* Gateway or direct route  */
0256     RTN_LOCAL,      /* Accept locally       */
0257     RTN_BROADCAST,      /* Accept locally as broadcast,
0258                    send as broadcast */
0259     RTN_ANYCAST,        /* Accept locally as broadcast,
0260                    but send as unicast */
0261     RTN_MULTICAST,      /* Multicast route      */
0262     RTN_BLACKHOLE,      /* Drop             */
0263     RTN_UNREACHABLE,    /* Destination is unreachable   */
0264     RTN_PROHIBIT,       /* Administratively prohibited  */
0265     RTN_THROW,      /* Not in this table        */
0266     RTN_NAT,        /* Translate this address   */
0267     RTN_XRESOLVE,       /* Use external resolver    */
0268     __RTN_MAX
0269 };
0270 
0271 #define RTN_MAX (__RTN_MAX - 1)
0272 
0273 
0274 /* rtm_protocol */
0275 
0276 #define RTPROT_UNSPEC       0
0277 #define RTPROT_REDIRECT     1   /* Route installed by ICMP redirects;
0278                        not used by current IPv4 */
0279 #define RTPROT_KERNEL       2   /* Route installed by kernel        */
0280 #define RTPROT_BOOT     3   /* Route installed during boot      */
0281 #define RTPROT_STATIC       4   /* Route installed by administrator */
0282 
0283 /* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
0284    they are just passed from user and back as is.
0285    It will be used by hypothetical multiple routing daemons.
0286    Note that protocol values should be standardized in order to
0287    avoid conflicts.
0288  */
0289 
0290 #define RTPROT_GATED        8   /* Apparently, GateD */
0291 #define RTPROT_RA       9   /* RDISC/ND router advertisements */
0292 #define RTPROT_MRT      10  /* Merit MRT */
0293 #define RTPROT_ZEBRA        11  /* Zebra */
0294 #define RTPROT_BIRD     12  /* BIRD */
0295 #define RTPROT_DNROUTED     13  /* DECnet routing daemon */
0296 #define RTPROT_XORP     14  /* XORP */
0297 #define RTPROT_NTK      15  /* Netsukuku */
0298 #define RTPROT_DHCP     16  /* DHCP client */
0299 #define RTPROT_MROUTED      17  /* Multicast daemon */
0300 #define RTPROT_KEEPALIVED   18  /* Keepalived daemon */
0301 #define RTPROT_BABEL        42  /* Babel daemon */
0302 #define RTPROT_OPENR        99  /* Open Routing (Open/R) Routes */
0303 #define RTPROT_BGP      186 /* BGP Routes */
0304 #define RTPROT_ISIS     187 /* ISIS Routes */
0305 #define RTPROT_OSPF     188 /* OSPF Routes */
0306 #define RTPROT_RIP      189 /* RIP Routes */
0307 #define RTPROT_EIGRP        192 /* EIGRP Routes */
0308 
0309 /* rtm_scope
0310 
0311    Really it is not scope, but sort of distance to the destination.
0312    NOWHERE are reserved for not existing destinations, HOST is our
0313    local addresses, LINK are destinations, located on directly attached
0314    link and UNIVERSE is everywhere in the Universe.
0315 
0316    Intermediate values are also possible f.e. interior routes
0317    could be assigned a value between UNIVERSE and LINK.
0318 */
0319 
0320 enum rt_scope_t {
0321     RT_SCOPE_UNIVERSE=0,
0322 /* User defined values  */
0323     RT_SCOPE_SITE=200,
0324     RT_SCOPE_LINK=253,
0325     RT_SCOPE_HOST=254,
0326     RT_SCOPE_NOWHERE=255
0327 };
0328 
0329 /* rtm_flags */
0330 
0331 #define RTM_F_NOTIFY        0x100   /* Notify user of route change  */
0332 #define RTM_F_CLONED        0x200   /* This route is cloned     */
0333 #define RTM_F_EQUALIZE      0x400   /* Multipath equalizer: NI  */
0334 #define RTM_F_PREFIX        0x800   /* Prefix addresses     */
0335 #define RTM_F_LOOKUP_TABLE  0x1000  /* set rtm_table to FIB lookup result */
0336 #define RTM_F_FIB_MATCH         0x2000  /* return full fib lookup match */
0337 #define RTM_F_OFFLOAD       0x4000  /* route is offloaded */
0338 #define RTM_F_TRAP      0x8000  /* route is trapping packets */
0339 #define RTM_F_OFFLOAD_FAILED    0x20000000 /* route offload failed, this value
0340                         * is chosen to avoid conflicts with
0341                         * other flags defined in
0342                         * include/uapi/linux/ipv6_route.h
0343                         */
0344 
0345 /* Reserved table identifiers */
0346 
0347 enum rt_class_t {
0348     RT_TABLE_UNSPEC=0,
0349 /* User defined values */
0350     RT_TABLE_COMPAT=252,
0351     RT_TABLE_DEFAULT=253,
0352     RT_TABLE_MAIN=254,
0353     RT_TABLE_LOCAL=255,
0354     RT_TABLE_MAX=0xFFFFFFFF
0355 };
0356 
0357 
0358 /* Routing message attributes */
0359 
0360 enum rtattr_type_t {
0361     RTA_UNSPEC,
0362     RTA_DST,
0363     RTA_SRC,
0364     RTA_IIF,
0365     RTA_OIF,
0366     RTA_GATEWAY,
0367     RTA_PRIORITY,
0368     RTA_PREFSRC,
0369     RTA_METRICS,
0370     RTA_MULTIPATH,
0371     RTA_PROTOINFO, /* no longer used */
0372     RTA_FLOW,
0373     RTA_CACHEINFO,
0374     RTA_SESSION, /* no longer used */
0375     RTA_MP_ALGO, /* no longer used */
0376     RTA_TABLE,
0377     RTA_MARK,
0378     RTA_MFC_STATS,
0379     RTA_VIA,
0380     RTA_NEWDST,
0381     RTA_PREF,
0382     RTA_ENCAP_TYPE,
0383     RTA_ENCAP,
0384     RTA_EXPIRES,
0385     RTA_PAD,
0386     RTA_UID,
0387     RTA_TTL_PROPAGATE,
0388     RTA_IP_PROTO,
0389     RTA_SPORT,
0390     RTA_DPORT,
0391     RTA_NH_ID,
0392     __RTA_MAX
0393 };
0394 
0395 #define RTA_MAX (__RTA_MAX - 1)
0396 
0397 #define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
0398 #define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
0399 
0400 /* RTM_MULTIPATH --- array of struct rtnexthop.
0401  *
0402  * "struct rtnexthop" describes all necessary nexthop information,
0403  * i.e. parameters of path to a destination via this nexthop.
0404  *
0405  * At the moment it is impossible to set different prefsrc, mtu, window
0406  * and rtt for different paths from multipath.
0407  */
0408 
0409 struct rtnexthop {
0410     unsigned short      rtnh_len;
0411     unsigned char       rtnh_flags;
0412     unsigned char       rtnh_hops;
0413     int         rtnh_ifindex;
0414 };
0415 
0416 /* rtnh_flags */
0417 
0418 #define RTNH_F_DEAD     1   /* Nexthop is dead (used by multipath)  */
0419 #define RTNH_F_PERVASIVE    2   /* Do recursive gateway lookup  */
0420 #define RTNH_F_ONLINK       4   /* Gateway is forced on link    */
0421 #define RTNH_F_OFFLOAD      8   /* Nexthop is offloaded */
0422 #define RTNH_F_LINKDOWN     16  /* carrier-down on nexthop */
0423 #define RTNH_F_UNRESOLVED   32  /* The entry is unresolved (ipmr) */
0424 #define RTNH_F_TRAP     64  /* Nexthop is trapping packets */
0425 
0426 #define RTNH_COMPARE_MASK   (RTNH_F_DEAD | RTNH_F_LINKDOWN | \
0427                  RTNH_F_OFFLOAD | RTNH_F_TRAP)
0428 
0429 /* Macros to handle hexthops */
0430 
0431 #define RTNH_ALIGNTO    4
0432 #define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
0433 #define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
0434                ((int)(rtnh)->rtnh_len) <= (len))
0435 #define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
0436 #define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
0437 #define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len))
0438 #define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
0439 
0440 /* RTA_VIA */
0441 struct rtvia {
0442     __kernel_sa_family_t    rtvia_family;
0443     __u8            rtvia_addr[];
0444 };
0445 
0446 /* RTM_CACHEINFO */
0447 
0448 struct rta_cacheinfo {
0449     __u32   rta_clntref;
0450     __u32   rta_lastuse;
0451     __s32   rta_expires;
0452     __u32   rta_error;
0453     __u32   rta_used;
0454 
0455 #define RTNETLINK_HAVE_PEERINFO 1
0456     __u32   rta_id;
0457     __u32   rta_ts;
0458     __u32   rta_tsage;
0459 };
0460 
0461 /* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
0462 
0463 enum {
0464     RTAX_UNSPEC,
0465 #define RTAX_UNSPEC RTAX_UNSPEC
0466     RTAX_LOCK,
0467 #define RTAX_LOCK RTAX_LOCK
0468     RTAX_MTU,
0469 #define RTAX_MTU RTAX_MTU
0470     RTAX_WINDOW,
0471 #define RTAX_WINDOW RTAX_WINDOW
0472     RTAX_RTT,
0473 #define RTAX_RTT RTAX_RTT
0474     RTAX_RTTVAR,
0475 #define RTAX_RTTVAR RTAX_RTTVAR
0476     RTAX_SSTHRESH,
0477 #define RTAX_SSTHRESH RTAX_SSTHRESH
0478     RTAX_CWND,
0479 #define RTAX_CWND RTAX_CWND
0480     RTAX_ADVMSS,
0481 #define RTAX_ADVMSS RTAX_ADVMSS
0482     RTAX_REORDERING,
0483 #define RTAX_REORDERING RTAX_REORDERING
0484     RTAX_HOPLIMIT,
0485 #define RTAX_HOPLIMIT RTAX_HOPLIMIT
0486     RTAX_INITCWND,
0487 #define RTAX_INITCWND RTAX_INITCWND
0488     RTAX_FEATURES,
0489 #define RTAX_FEATURES RTAX_FEATURES
0490     RTAX_RTO_MIN,
0491 #define RTAX_RTO_MIN RTAX_RTO_MIN
0492     RTAX_INITRWND,
0493 #define RTAX_INITRWND RTAX_INITRWND
0494     RTAX_QUICKACK,
0495 #define RTAX_QUICKACK RTAX_QUICKACK
0496     RTAX_CC_ALGO,
0497 #define RTAX_CC_ALGO RTAX_CC_ALGO
0498     RTAX_FASTOPEN_NO_COOKIE,
0499 #define RTAX_FASTOPEN_NO_COOKIE RTAX_FASTOPEN_NO_COOKIE
0500     __RTAX_MAX
0501 };
0502 
0503 #define RTAX_MAX (__RTAX_MAX - 1)
0504 
0505 #define RTAX_FEATURE_ECN    (1 << 0)
0506 #define RTAX_FEATURE_SACK   (1 << 1)
0507 #define RTAX_FEATURE_TIMESTAMP  (1 << 2)
0508 #define RTAX_FEATURE_ALLFRAG    (1 << 3)
0509 
0510 #define RTAX_FEATURE_MASK   (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \
0511                  RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
0512 
0513 struct rta_session {
0514     __u8    proto;
0515     __u8    pad1;
0516     __u16   pad2;
0517 
0518     union {
0519         struct {
0520             __u16   sport;
0521             __u16   dport;
0522         } ports;
0523 
0524         struct {
0525             __u8    type;
0526             __u8    code;
0527             __u16   ident;
0528         } icmpt;
0529 
0530         __u32       spi;
0531     } u;
0532 };
0533 
0534 struct rta_mfc_stats {
0535     __u64   mfcs_packets;
0536     __u64   mfcs_bytes;
0537     __u64   mfcs_wrong_if;
0538 };
0539 
0540 /****
0541  *      General form of address family dependent message.
0542  ****/
0543 
0544 struct rtgenmsg {
0545     unsigned char       rtgen_family;
0546 };
0547 
0548 /*****************************************************************
0549  *      Link layer specific messages.
0550  ****/
0551 
0552 /* struct ifinfomsg
0553  * passes link level specific information, not dependent
0554  * on network protocol.
0555  */
0556 
0557 struct ifinfomsg {
0558     unsigned char   ifi_family;
0559     unsigned char   __ifi_pad;
0560     unsigned short  ifi_type;       /* ARPHRD_* */
0561     int     ifi_index;      /* Link index   */
0562     unsigned    ifi_flags;      /* IFF_* flags  */
0563     unsigned    ifi_change;     /* IFF_* change mask */
0564 };
0565 
0566 /********************************************************************
0567  *      prefix information 
0568  ****/
0569 
0570 struct prefixmsg {
0571     unsigned char   prefix_family;
0572     unsigned char   prefix_pad1;
0573     unsigned short  prefix_pad2;
0574     int     prefix_ifindex;
0575     unsigned char   prefix_type;
0576     unsigned char   prefix_len;
0577     unsigned char   prefix_flags;
0578     unsigned char   prefix_pad3;
0579 };
0580 
0581 enum 
0582 {
0583     PREFIX_UNSPEC,
0584     PREFIX_ADDRESS,
0585     PREFIX_CACHEINFO,
0586     __PREFIX_MAX
0587 };
0588 
0589 #define PREFIX_MAX  (__PREFIX_MAX - 1)
0590 
0591 struct prefix_cacheinfo {
0592     __u32   preferred_time;
0593     __u32   valid_time;
0594 };
0595 
0596 
0597 /*****************************************************************
0598  *      Traffic control messages.
0599  ****/
0600 
0601 struct tcmsg {
0602     unsigned char   tcm_family;
0603     unsigned char   tcm__pad1;
0604     unsigned short  tcm__pad2;
0605     int     tcm_ifindex;
0606     __u32       tcm_handle;
0607     __u32       tcm_parent;
0608 /* tcm_block_index is used instead of tcm_parent
0609  * in case tcm_ifindex == TCM_IFINDEX_MAGIC_BLOCK
0610  */
0611 #define tcm_block_index tcm_parent
0612     __u32       tcm_info;
0613 };
0614 
0615 /* For manipulation of filters in shared block, tcm_ifindex is set to
0616  * TCM_IFINDEX_MAGIC_BLOCK, and tcm_parent is aliased to tcm_block_index
0617  * which is the block index.
0618  */
0619 #define TCM_IFINDEX_MAGIC_BLOCK (0xFFFFFFFFU)
0620 
0621 enum {
0622     TCA_UNSPEC,
0623     TCA_KIND,
0624     TCA_OPTIONS,
0625     TCA_STATS,
0626     TCA_XSTATS,
0627     TCA_RATE,
0628     TCA_FCNT,
0629     TCA_STATS2,
0630     TCA_STAB,
0631     TCA_PAD,
0632     TCA_DUMP_INVISIBLE,
0633     TCA_CHAIN,
0634     TCA_HW_OFFLOAD,
0635     TCA_INGRESS_BLOCK,
0636     TCA_EGRESS_BLOCK,
0637     TCA_DUMP_FLAGS,
0638     __TCA_MAX
0639 };
0640 
0641 #define TCA_MAX (__TCA_MAX - 1)
0642 
0643 #define TCA_DUMP_FLAGS_TERSE (1 << 0) /* Means that in dump user gets only basic
0644                        * data necessary to identify the objects
0645                        * (handle, cookie, etc.) and stats.
0646                        */
0647 
0648 #define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
0649 #define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
0650 
0651 /********************************************************************
0652  *      Neighbor Discovery userland options
0653  ****/
0654 
0655 struct nduseroptmsg {
0656     unsigned char   nduseropt_family;
0657     unsigned char   nduseropt_pad1;
0658     unsigned short  nduseropt_opts_len; /* Total length of options */
0659     int     nduseropt_ifindex;
0660     __u8        nduseropt_icmp_type;
0661     __u8        nduseropt_icmp_code;
0662     unsigned short  nduseropt_pad2;
0663     unsigned int    nduseropt_pad3;
0664     /* Followed by one or more ND options */
0665 };
0666 
0667 enum {
0668     NDUSEROPT_UNSPEC,
0669     NDUSEROPT_SRCADDR,
0670     __NDUSEROPT_MAX
0671 };
0672 
0673 #define NDUSEROPT_MAX   (__NDUSEROPT_MAX - 1)
0674 
0675 #ifndef __KERNEL__
0676 /* RTnetlink multicast groups - backwards compatibility for userspace */
0677 #define RTMGRP_LINK     1
0678 #define RTMGRP_NOTIFY       2
0679 #define RTMGRP_NEIGH        4
0680 #define RTMGRP_TC       8
0681 
0682 #define RTMGRP_IPV4_IFADDR  0x10
0683 #define RTMGRP_IPV4_MROUTE  0x20
0684 #define RTMGRP_IPV4_ROUTE   0x40
0685 #define RTMGRP_IPV4_RULE    0x80
0686 
0687 #define RTMGRP_IPV6_IFADDR  0x100
0688 #define RTMGRP_IPV6_MROUTE  0x200
0689 #define RTMGRP_IPV6_ROUTE   0x400
0690 #define RTMGRP_IPV6_IFINFO  0x800
0691 
0692 #define RTMGRP_DECnet_IFADDR    0x1000
0693 #define RTMGRP_DECnet_ROUTE     0x4000
0694 
0695 #define RTMGRP_IPV6_PREFIX  0x20000
0696 #endif
0697 
0698 /* RTnetlink multicast groups */
0699 enum rtnetlink_groups {
0700     RTNLGRP_NONE,
0701 #define RTNLGRP_NONE        RTNLGRP_NONE
0702     RTNLGRP_LINK,
0703 #define RTNLGRP_LINK        RTNLGRP_LINK
0704     RTNLGRP_NOTIFY,
0705 #define RTNLGRP_NOTIFY      RTNLGRP_NOTIFY
0706     RTNLGRP_NEIGH,
0707 #define RTNLGRP_NEIGH       RTNLGRP_NEIGH
0708     RTNLGRP_TC,
0709 #define RTNLGRP_TC      RTNLGRP_TC
0710     RTNLGRP_IPV4_IFADDR,
0711 #define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR
0712     RTNLGRP_IPV4_MROUTE,
0713 #define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE
0714     RTNLGRP_IPV4_ROUTE,
0715 #define RTNLGRP_IPV4_ROUTE  RTNLGRP_IPV4_ROUTE
0716     RTNLGRP_IPV4_RULE,
0717 #define RTNLGRP_IPV4_RULE   RTNLGRP_IPV4_RULE
0718     RTNLGRP_IPV6_IFADDR,
0719 #define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR
0720     RTNLGRP_IPV6_MROUTE,
0721 #define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE
0722     RTNLGRP_IPV6_ROUTE,
0723 #define RTNLGRP_IPV6_ROUTE  RTNLGRP_IPV6_ROUTE
0724     RTNLGRP_IPV6_IFINFO,
0725 #define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO
0726     RTNLGRP_DECnet_IFADDR,
0727 #define RTNLGRP_DECnet_IFADDR   RTNLGRP_DECnet_IFADDR
0728     RTNLGRP_NOP2,
0729     RTNLGRP_DECnet_ROUTE,
0730 #define RTNLGRP_DECnet_ROUTE    RTNLGRP_DECnet_ROUTE
0731     RTNLGRP_DECnet_RULE,
0732 #define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE
0733     RTNLGRP_NOP4,
0734     RTNLGRP_IPV6_PREFIX,
0735 #define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX
0736     RTNLGRP_IPV6_RULE,
0737 #define RTNLGRP_IPV6_RULE   RTNLGRP_IPV6_RULE
0738     RTNLGRP_ND_USEROPT,
0739 #define RTNLGRP_ND_USEROPT  RTNLGRP_ND_USEROPT
0740     RTNLGRP_PHONET_IFADDR,
0741 #define RTNLGRP_PHONET_IFADDR   RTNLGRP_PHONET_IFADDR
0742     RTNLGRP_PHONET_ROUTE,
0743 #define RTNLGRP_PHONET_ROUTE    RTNLGRP_PHONET_ROUTE
0744     RTNLGRP_DCB,
0745 #define RTNLGRP_DCB     RTNLGRP_DCB
0746     RTNLGRP_IPV4_NETCONF,
0747 #define RTNLGRP_IPV4_NETCONF    RTNLGRP_IPV4_NETCONF
0748     RTNLGRP_IPV6_NETCONF,
0749 #define RTNLGRP_IPV6_NETCONF    RTNLGRP_IPV6_NETCONF
0750     RTNLGRP_MDB,
0751 #define RTNLGRP_MDB     RTNLGRP_MDB
0752     RTNLGRP_MPLS_ROUTE,
0753 #define RTNLGRP_MPLS_ROUTE  RTNLGRP_MPLS_ROUTE
0754     RTNLGRP_NSID,
0755 #define RTNLGRP_NSID        RTNLGRP_NSID
0756     RTNLGRP_MPLS_NETCONF,
0757 #define RTNLGRP_MPLS_NETCONF    RTNLGRP_MPLS_NETCONF
0758     RTNLGRP_IPV4_MROUTE_R,
0759 #define RTNLGRP_IPV4_MROUTE_R   RTNLGRP_IPV4_MROUTE_R
0760     RTNLGRP_IPV6_MROUTE_R,
0761 #define RTNLGRP_IPV6_MROUTE_R   RTNLGRP_IPV6_MROUTE_R
0762     RTNLGRP_NEXTHOP,
0763 #define RTNLGRP_NEXTHOP     RTNLGRP_NEXTHOP
0764     RTNLGRP_BRVLAN,
0765 #define RTNLGRP_BRVLAN      RTNLGRP_BRVLAN
0766     RTNLGRP_MCTP_IFADDR,
0767 #define RTNLGRP_MCTP_IFADDR RTNLGRP_MCTP_IFADDR
0768     RTNLGRP_TUNNEL,
0769 #define RTNLGRP_TUNNEL      RTNLGRP_TUNNEL
0770     RTNLGRP_STATS,
0771 #define RTNLGRP_STATS       RTNLGRP_STATS
0772     __RTNLGRP_MAX
0773 };
0774 #define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
0775 
0776 /* TC action piece */
0777 struct tcamsg {
0778     unsigned char   tca_family;
0779     unsigned char   tca__pad1;
0780     unsigned short  tca__pad2;
0781 };
0782 
0783 enum {
0784     TCA_ROOT_UNSPEC,
0785     TCA_ROOT_TAB,
0786 #define TCA_ACT_TAB TCA_ROOT_TAB
0787 #define TCAA_MAX TCA_ROOT_TAB
0788     TCA_ROOT_FLAGS,
0789     TCA_ROOT_COUNT,
0790     TCA_ROOT_TIME_DELTA, /* in msecs */
0791     __TCA_ROOT_MAX,
0792 #define TCA_ROOT_MAX (__TCA_ROOT_MAX - 1)
0793 };
0794 
0795 #define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
0796 #define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
0797 /* tcamsg flags stored in attribute TCA_ROOT_FLAGS
0798  *
0799  * TCA_ACT_FLAG_LARGE_DUMP_ON user->kernel to request for larger than
0800  * TCA_ACT_MAX_PRIO actions in a dump. All dump responses will contain the
0801  * number of actions being dumped stored in for user app's consumption in
0802  * TCA_ROOT_COUNT
0803  *
0804  * TCA_ACT_FLAG_TERSE_DUMP user->kernel to request terse (brief) dump that only
0805  * includes essential action info (kind, index, etc.)
0806  *
0807  */
0808 #define TCA_FLAG_LARGE_DUMP_ON      (1 << 0)
0809 #define TCA_ACT_FLAG_LARGE_DUMP_ON  TCA_FLAG_LARGE_DUMP_ON
0810 #define TCA_ACT_FLAG_TERSE_DUMP     (1 << 1)
0811 
0812 /* New extended info filters for IFLA_EXT_MASK */
0813 #define RTEXT_FILTER_VF     (1 << 0)
0814 #define RTEXT_FILTER_BRVLAN (1 << 1)
0815 #define RTEXT_FILTER_BRVLAN_COMPRESSED  (1 << 2)
0816 #define RTEXT_FILTER_SKIP_STATS (1 << 3)
0817 #define RTEXT_FILTER_MRP    (1 << 4)
0818 #define RTEXT_FILTER_CFM_CONFIG (1 << 5)
0819 #define RTEXT_FILTER_CFM_STATUS (1 << 6)
0820 #define RTEXT_FILTER_MST    (1 << 7)
0821 
0822 /* End of information exported to user level */
0823 
0824 
0825 
0826 #endif /* _UAPI__LINUX_RTNETLINK_H */