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