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