144d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef __LINUX_RTNETLINK_H 244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define __LINUX_RTNETLINK_H 344d362409d5469aed47d19e7908d19bd194493aThomas Graf 444d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/netlink.h> 544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/if_link.h> 644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/if_addr.h> 744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/neighbour.h> 844d362409d5469aed47d19e7908d19bd194493aThomas Graf 944d362409d5469aed47d19e7908d19bd194493aThomas Graf/**** 1044d362409d5469aed47d19e7908d19bd194493aThomas Graf * Routing/neighbour discovery messages. 1144d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/ 1244d362409d5469aed47d19e7908d19bd194493aThomas Graf 1344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Types of messages */ 1444d362409d5469aed47d19e7908d19bd194493aThomas Graf 1544d362409d5469aed47d19e7908d19bd194493aThomas Grafenum { 1644d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_BASE = 16, 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_BASE RTM_BASE 1844d362409d5469aed47d19e7908d19bd194493aThomas Graf 1944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWLINK = 16, 2044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWLINK RTM_NEWLINK 2144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELLINK, 2244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELLINK RTM_DELLINK 2344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETLINK, 2444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETLINK RTM_GETLINK 2544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_SETLINK, 2644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_SETLINK RTM_SETLINK 2744d362409d5469aed47d19e7908d19bd194493aThomas Graf 2844d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWADDR = 20, 2944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWADDR RTM_NEWADDR 3044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELADDR, 3144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELADDR RTM_DELADDR 3244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETADDR, 3344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETADDR RTM_GETADDR 3444d362409d5469aed47d19e7908d19bd194493aThomas Graf 3544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWROUTE = 24, 3644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWROUTE RTM_NEWROUTE 3744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELROUTE, 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELROUTE RTM_DELROUTE 3944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETROUTE, 4044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETROUTE RTM_GETROUTE 4144d362409d5469aed47d19e7908d19bd194493aThomas Graf 4244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWNEIGH = 28, 4344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWNEIGH RTM_NEWNEIGH 4444d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELNEIGH, 4544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELNEIGH RTM_DELNEIGH 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETNEIGH, 4744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETNEIGH RTM_GETNEIGH 4844d362409d5469aed47d19e7908d19bd194493aThomas Graf 4944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWRULE = 32, 5044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWRULE RTM_NEWRULE 5144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELRULE, 5244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELRULE RTM_DELRULE 5344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETRULE, 5444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETRULE RTM_GETRULE 5544d362409d5469aed47d19e7908d19bd194493aThomas Graf 5644d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWQDISC = 36, 5744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWQDISC RTM_NEWQDISC 5844d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELQDISC, 5944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELQDISC RTM_DELQDISC 6044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETQDISC, 6144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETQDISC RTM_GETQDISC 6244d362409d5469aed47d19e7908d19bd194493aThomas Graf 6344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWTCLASS = 40, 6444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWTCLASS RTM_NEWTCLASS 6544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELTCLASS, 6644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELTCLASS RTM_DELTCLASS 6744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETTCLASS, 6844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETTCLASS RTM_GETTCLASS 6944d362409d5469aed47d19e7908d19bd194493aThomas Graf 7044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWTFILTER = 44, 7144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWTFILTER RTM_NEWTFILTER 7244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELTFILTER, 7344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELTFILTER RTM_DELTFILTER 7444d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETTFILTER, 7544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETTFILTER RTM_GETTFILTER 7644d362409d5469aed47d19e7908d19bd194493aThomas Graf 7744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWACTION = 48, 7844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWACTION RTM_NEWACTION 7944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_DELACTION, 8044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELACTION RTM_DELACTION 8144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETACTION, 8244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETACTION RTM_GETACTION 8344d362409d5469aed47d19e7908d19bd194493aThomas Graf 8444d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWPREFIX = 52, 8544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWPREFIX RTM_NEWPREFIX 8644d362409d5469aed47d19e7908d19bd194493aThomas Graf 8744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETMULTICAST = 58, 8844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETMULTICAST RTM_GETMULTICAST 8944d362409d5469aed47d19e7908d19bd194493aThomas Graf 9044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETANYCAST = 62, 9144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETANYCAST RTM_GETANYCAST 9244d362409d5469aed47d19e7908d19bd194493aThomas Graf 9344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_NEWNEIGHTBL = 64, 9444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBL 9544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_GETNEIGHTBL = 66, 9644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETNEIGHTBL RTM_GETNEIGHTBL 9744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTM_SETNEIGHTBL, 9844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_SETNEIGHTBL RTM_SETNEIGHTBL 9944d362409d5469aed47d19e7908d19bd194493aThomas Graf 100639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf RTM_NEWNDUSEROPT = 68, 101639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT 102639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf 103639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf RTM_NEWADDRLABEL = 72, 104639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL 105639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf RTM_DELADDRLABEL, 106639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL 107639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf RTM_GETADDRLABEL, 108639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTM_GETADDRLABEL RTM_GETADDRLABEL 109639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf 11044d362409d5469aed47d19e7908d19bd194493aThomas Graf __RTM_MAX, 11144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1) 11244d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 11344d362409d5469aed47d19e7908d19bd194493aThomas Graf 11444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE) 11544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2) 11644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_FAM(cmd) (((cmd) - RTM_BASE) >> 2) 11744d362409d5469aed47d19e7908d19bd194493aThomas Graf 11844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* 11944d362409d5469aed47d19e7908d19bd194493aThomas Graf Generic structure for encapsulation of optional route information. 12044d362409d5469aed47d19e7908d19bd194493aThomas Graf It is reminiscent of sockaddr, but with sa_family replaced 12144d362409d5469aed47d19e7908d19bd194493aThomas Graf with attribute type. 12244d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 12344d362409d5469aed47d19e7908d19bd194493aThomas Graf 12444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtattr 12544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 12644d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned short rta_len; 12744d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned short rta_type; 12844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 12944d362409d5469aed47d19e7908d19bd194493aThomas Graf 13044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Macros to handle rtattributes */ 13144d362409d5469aed47d19e7908d19bd194493aThomas Graf 13244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_ALIGNTO 4 13344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) ) 13444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \ 13544d362409d5469aed47d19e7908d19bd194493aThomas Graf (rta)->rta_len >= sizeof(struct rtattr) && \ 13644d362409d5469aed47d19e7908d19bd194493aThomas Graf (rta)->rta_len <= (len)) 13744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \ 13844d362409d5469aed47d19e7908d19bd194493aThomas Graf (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len))) 13944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len)) 14044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len)) 14144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0))) 14244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0)) 14344d362409d5469aed47d19e7908d19bd194493aThomas Graf 14444d362409d5469aed47d19e7908d19bd194493aThomas Graf 14544d362409d5469aed47d19e7908d19bd194493aThomas Graf 14644d362409d5469aed47d19e7908d19bd194493aThomas Graf 14744d362409d5469aed47d19e7908d19bd194493aThomas Graf/****************************************************************************** 14844d362409d5469aed47d19e7908d19bd194493aThomas Graf * Definitions used in routing table administration. 14944d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/ 15044d362409d5469aed47d19e7908d19bd194493aThomas Graf 15144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtmsg 15244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 15344d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtm_family; 15444d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtm_dst_len; 15544d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtm_src_len; 15644d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtm_tos; 15744d362409d5469aed47d19e7908d19bd194493aThomas Graf 15844d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtm_table; /* Routing table id */ 15944d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtm_protocol; /* Routing protocol; see below */ 16044d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtm_scope; /* See below */ 16144d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtm_type; /* See below */ 16244d362409d5469aed47d19e7908d19bd194493aThomas Graf 16344d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned rtm_flags; 16444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 16544d362409d5469aed47d19e7908d19bd194493aThomas Graf 16644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtm_type */ 16744d362409d5469aed47d19e7908d19bd194493aThomas Graf 16844d362409d5469aed47d19e7908d19bd194493aThomas Grafenum 16944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 17044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_UNSPEC, 17144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_UNICAST, /* Gateway or direct route */ 17244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_LOCAL, /* Accept locally */ 17344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_BROADCAST, /* Accept locally as broadcast, 17444d362409d5469aed47d19e7908d19bd194493aThomas Graf send as broadcast */ 17544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_ANYCAST, /* Accept locally as broadcast, 17644d362409d5469aed47d19e7908d19bd194493aThomas Graf but send as unicast */ 17744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_MULTICAST, /* Multicast route */ 17844d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_BLACKHOLE, /* Drop */ 17944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_UNREACHABLE, /* Destination is unreachable */ 18044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_PROHIBIT, /* Administratively prohibited */ 18144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_THROW, /* Not in this table */ 18244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_NAT, /* Translate this address */ 18344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTN_XRESOLVE, /* Use external resolver */ 18444d362409d5469aed47d19e7908d19bd194493aThomas Graf __RTN_MAX 18544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 18644d362409d5469aed47d19e7908d19bd194493aThomas Graf 18744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTN_MAX (__RTN_MAX - 1) 18844d362409d5469aed47d19e7908d19bd194493aThomas Graf 18944d362409d5469aed47d19e7908d19bd194493aThomas Graf 19044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtm_protocol */ 19144d362409d5469aed47d19e7908d19bd194493aThomas Graf 19244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_UNSPEC 0 19344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_REDIRECT 1 /* Route installed by ICMP redirects; 19444d362409d5469aed47d19e7908d19bd194493aThomas Graf not used by current IPv4 */ 19544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_KERNEL 2 /* Route installed by kernel */ 19644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_BOOT 3 /* Route installed during boot */ 19744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_STATIC 4 /* Route installed by administrator */ 19844d362409d5469aed47d19e7908d19bd194493aThomas Graf 19944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel; 20044d362409d5469aed47d19e7908d19bd194493aThomas Graf they are just passed from user and back as is. 20144d362409d5469aed47d19e7908d19bd194493aThomas Graf It will be used by hypothetical multiple routing daemons. 20244d362409d5469aed47d19e7908d19bd194493aThomas Graf Note that protocol values should be standardized in order to 20344d362409d5469aed47d19e7908d19bd194493aThomas Graf avoid conflicts. 20444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 20544d362409d5469aed47d19e7908d19bd194493aThomas Graf 20644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_GATED 8 /* Apparently, GateD */ 20744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_RA 9 /* RDISC/ND router advertisements */ 20844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_MRT 10 /* Merit MRT */ 20944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_ZEBRA 11 /* Zebra */ 21044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_BIRD 12 /* BIRD */ 21144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_DNROUTED 13 /* DECnet routing daemon */ 21244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_XORP 14 /* XORP */ 21344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_NTK 15 /* Netsukuku */ 21444d362409d5469aed47d19e7908d19bd194493aThomas Graf 21544d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtm_scope 21644d362409d5469aed47d19e7908d19bd194493aThomas Graf 21744d362409d5469aed47d19e7908d19bd194493aThomas Graf Really it is not scope, but sort of distance to the destination. 21844d362409d5469aed47d19e7908d19bd194493aThomas Graf NOWHERE are reserved for not existing destinations, HOST is our 21944d362409d5469aed47d19e7908d19bd194493aThomas Graf local addresses, LINK are destinations, located on directly attached 22044d362409d5469aed47d19e7908d19bd194493aThomas Graf link and UNIVERSE is everywhere in the Universe. 22144d362409d5469aed47d19e7908d19bd194493aThomas Graf 22244d362409d5469aed47d19e7908d19bd194493aThomas Graf Intermediate values are also possible f.e. interior routes 22344d362409d5469aed47d19e7908d19bd194493aThomas Graf could be assigned a value between UNIVERSE and LINK. 22444d362409d5469aed47d19e7908d19bd194493aThomas Graf*/ 22544d362409d5469aed47d19e7908d19bd194493aThomas Graf 22644d362409d5469aed47d19e7908d19bd194493aThomas Grafenum rt_scope_t 22744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 22844d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_SCOPE_UNIVERSE=0, 22944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* User defined values */ 23044d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_SCOPE_SITE=200, 23144d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_SCOPE_LINK=253, 23244d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_SCOPE_HOST=254, 23344d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_SCOPE_NOWHERE=255 23444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 23544d362409d5469aed47d19e7908d19bd194493aThomas Graf 23644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtm_flags */ 23744d362409d5469aed47d19e7908d19bd194493aThomas Graf 23844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_F_NOTIFY 0x100 /* Notify user of route change */ 23944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_F_CLONED 0x200 /* This route is cloned */ 24044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_F_EQUALIZE 0x400 /* Multipath equalizer: NI */ 24144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_F_PREFIX 0x800 /* Prefix addresses */ 24244d362409d5469aed47d19e7908d19bd194493aThomas Graf 24344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Reserved table identifiers */ 24444d362409d5469aed47d19e7908d19bd194493aThomas Graf 24544d362409d5469aed47d19e7908d19bd194493aThomas Grafenum rt_class_t 24644d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 24744d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_TABLE_UNSPEC=0, 24844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* User defined values */ 24944d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_TABLE_DEFAULT=253, 25044d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_TABLE_MAIN=254, 25144d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_TABLE_LOCAL=255, 25244d362409d5469aed47d19e7908d19bd194493aThomas Graf RT_TABLE_MAX=0xFFFFFFFF 25344d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 25444d362409d5469aed47d19e7908d19bd194493aThomas Graf 25544d362409d5469aed47d19e7908d19bd194493aThomas Graf 25644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Routing message attributes */ 25744d362409d5469aed47d19e7908d19bd194493aThomas Graf 25844d362409d5469aed47d19e7908d19bd194493aThomas Grafenum rtattr_type_t 25944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 26044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_UNSPEC, 26144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_DST, 26244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_SRC, 26344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_IIF, 26444d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_OIF, 26544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_GATEWAY, 26644d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_PRIORITY, 26744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_PREFSRC, 26844d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_METRICS, 26944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_MULTIPATH, 270b145f63312d887ef08ff5372516d52096e182917Thomas Graf RTA_PROTOINFO, /* no longer used */ 27144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_FLOW, 27244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_CACHEINFO, 273b145f63312d887ef08ff5372516d52096e182917Thomas Graf RTA_SESSION, /* no longer used */ 274639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf RTA_MP_ALGO, /* no longer used */ 27544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTA_TABLE, 276b145f63312d887ef08ff5372516d52096e182917Thomas Graf RTA_GENERATION, 27744d362409d5469aed47d19e7908d19bd194493aThomas Graf __RTA_MAX 27844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 27944d362409d5469aed47d19e7908d19bd194493aThomas Graf 28044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_MAX (__RTA_MAX - 1) 28144d362409d5469aed47d19e7908d19bd194493aThomas Graf 28244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg)))) 28344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg)) 28444d362409d5469aed47d19e7908d19bd194493aThomas Graf 28544d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTM_MULTIPATH --- array of struct rtnexthop. 28644d362409d5469aed47d19e7908d19bd194493aThomas Graf * 28744d362409d5469aed47d19e7908d19bd194493aThomas Graf * "struct rtnexthop" describes all necessary nexthop information, 28844d362409d5469aed47d19e7908d19bd194493aThomas Graf * i.e. parameters of path to a destination via this nexthop. 28944d362409d5469aed47d19e7908d19bd194493aThomas Graf * 29044d362409d5469aed47d19e7908d19bd194493aThomas Graf * At the moment it is impossible to set different prefsrc, mtu, window 29144d362409d5469aed47d19e7908d19bd194493aThomas Graf * and rtt for different paths from multipath. 29244d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 29344d362409d5469aed47d19e7908d19bd194493aThomas Graf 29444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnexthop 29544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 29644d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned short rtnh_len; 29744d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtnh_flags; 29844d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtnh_hops; 29944d362409d5469aed47d19e7908d19bd194493aThomas Graf int rtnh_ifindex; 30044d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 30144d362409d5469aed47d19e7908d19bd194493aThomas Graf 30244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtnh_flags */ 30344d362409d5469aed47d19e7908d19bd194493aThomas Graf 30444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_F_DEAD 1 /* Nexthop is dead (used by multipath) */ 30544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_F_PERVASIVE 2 /* Do recursive gateway lookup */ 30644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_F_ONLINK 4 /* Gateway is forced on link */ 30744d362409d5469aed47d19e7908d19bd194493aThomas Graf 30844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Macros to handle hexthops */ 30944d362409d5469aed47d19e7908d19bd194493aThomas Graf 31044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_ALIGNTO 4 31144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) ) 31244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \ 31344d362409d5469aed47d19e7908d19bd194493aThomas Graf ((int)(rtnh)->rtnh_len) <= (len)) 31444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len))) 31544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len)) 31644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len)) 31744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_DATA(rtnh) ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0))) 31844d362409d5469aed47d19e7908d19bd194493aThomas Graf 31944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTM_CACHEINFO */ 32044d362409d5469aed47d19e7908d19bd194493aThomas Graf 32144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rta_cacheinfo 32244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 32344d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 rta_clntref; 32444d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 rta_lastuse; 32544d362409d5469aed47d19e7908d19bd194493aThomas Graf __s32 rta_expires; 32644d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 rta_error; 32744d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 rta_used; 32844d362409d5469aed47d19e7908d19bd194493aThomas Graf 32944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNETLINK_HAVE_PEERINFO 1 33044d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 rta_id; 33144d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 rta_ts; 33244d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 rta_tsage; 33344d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 33444d362409d5469aed47d19e7908d19bd194493aThomas Graf 33544d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */ 33644d362409d5469aed47d19e7908d19bd194493aThomas Graf 33744d362409d5469aed47d19e7908d19bd194493aThomas Grafenum 33844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 33944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_UNSPEC, 34044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_UNSPEC RTAX_UNSPEC 34144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_LOCK, 34244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_LOCK RTAX_LOCK 34344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_MTU, 34444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_MTU RTAX_MTU 34544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_WINDOW, 34644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_WINDOW RTAX_WINDOW 34744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_RTT, 34844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_RTT RTAX_RTT 34944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_RTTVAR, 35044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_RTTVAR RTAX_RTTVAR 35144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_SSTHRESH, 35244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_SSTHRESH RTAX_SSTHRESH 35344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_CWND, 35444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_CWND RTAX_CWND 35544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_ADVMSS, 35644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_ADVMSS RTAX_ADVMSS 35744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_REORDERING, 35844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_REORDERING RTAX_REORDERING 35944d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_HOPLIMIT, 36044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_HOPLIMIT RTAX_HOPLIMIT 36144d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_INITCWND, 36244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_INITCWND RTAX_INITCWND 36344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTAX_FEATURES, 36444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURES RTAX_FEATURES 365639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf RTAX_RTO_MIN, 366639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTAX_RTO_MIN RTAX_RTO_MIN 36744d362409d5469aed47d19e7908d19bd194493aThomas Graf __RTAX_MAX 36844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 36944d362409d5469aed47d19e7908d19bd194493aThomas Graf 37044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_MAX (__RTAX_MAX - 1) 37144d362409d5469aed47d19e7908d19bd194493aThomas Graf 37244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURE_ECN 0x00000001 37344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURE_SACK 0x00000002 37444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURE_TIMESTAMP 0x00000004 37544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURE_ALLFRAG 0x00000008 37644d362409d5469aed47d19e7908d19bd194493aThomas Graf 37744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rta_session 37844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 37944d362409d5469aed47d19e7908d19bd194493aThomas Graf __u8 proto; 38044d362409d5469aed47d19e7908d19bd194493aThomas Graf __u8 pad1; 38144d362409d5469aed47d19e7908d19bd194493aThomas Graf __u16 pad2; 38244d362409d5469aed47d19e7908d19bd194493aThomas Graf 38344d362409d5469aed47d19e7908d19bd194493aThomas Graf union { 38444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct { 38544d362409d5469aed47d19e7908d19bd194493aThomas Graf __u16 sport; 38644d362409d5469aed47d19e7908d19bd194493aThomas Graf __u16 dport; 38744d362409d5469aed47d19e7908d19bd194493aThomas Graf } ports; 38844d362409d5469aed47d19e7908d19bd194493aThomas Graf 38944d362409d5469aed47d19e7908d19bd194493aThomas Graf struct { 39044d362409d5469aed47d19e7908d19bd194493aThomas Graf __u8 type; 39144d362409d5469aed47d19e7908d19bd194493aThomas Graf __u8 code; 39244d362409d5469aed47d19e7908d19bd194493aThomas Graf __u16 ident; 39344d362409d5469aed47d19e7908d19bd194493aThomas Graf } icmpt; 39444d362409d5469aed47d19e7908d19bd194493aThomas Graf 39544d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 spi; 39644d362409d5469aed47d19e7908d19bd194493aThomas Graf } u; 39744d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 39844d362409d5469aed47d19e7908d19bd194493aThomas Graf 39944d362409d5469aed47d19e7908d19bd194493aThomas Graf/**** 40044d362409d5469aed47d19e7908d19bd194493aThomas Graf * General form of address family dependent message. 40144d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/ 40244d362409d5469aed47d19e7908d19bd194493aThomas Graf 40344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtgenmsg 40444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 40544d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char rtgen_family; 40644d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 40744d362409d5469aed47d19e7908d19bd194493aThomas Graf 40844d362409d5469aed47d19e7908d19bd194493aThomas Graf/***************************************************************** 40944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Link layer specific messages. 41044d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/ 41144d362409d5469aed47d19e7908d19bd194493aThomas Graf 41244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* struct ifinfomsg 41344d362409d5469aed47d19e7908d19bd194493aThomas Graf * passes link level specific information, not dependent 41444d362409d5469aed47d19e7908d19bd194493aThomas Graf * on network protocol. 41544d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 41644d362409d5469aed47d19e7908d19bd194493aThomas Graf 41744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct ifinfomsg 41844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 41944d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char ifi_family; 42044d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char __ifi_pad; 42144d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned short ifi_type; /* ARPHRD_* */ 42244d362409d5469aed47d19e7908d19bd194493aThomas Graf int ifi_index; /* Link index */ 42344d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned ifi_flags; /* IFF_* flags */ 42444d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned ifi_change; /* IFF_* change mask */ 42544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 42644d362409d5469aed47d19e7908d19bd194493aThomas Graf 42744d362409d5469aed47d19e7908d19bd194493aThomas Graf/******************************************************************** 42844d362409d5469aed47d19e7908d19bd194493aThomas Graf * prefix information 42944d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/ 43044d362409d5469aed47d19e7908d19bd194493aThomas Graf 43144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct prefixmsg 43244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 43344d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char prefix_family; 43444d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char prefix_pad1; 43544d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned short prefix_pad2; 43644d362409d5469aed47d19e7908d19bd194493aThomas Graf int prefix_ifindex; 43744d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char prefix_type; 43844d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char prefix_len; 43944d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char prefix_flags; 44044d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char prefix_pad3; 44144d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 44244d362409d5469aed47d19e7908d19bd194493aThomas Graf 44344d362409d5469aed47d19e7908d19bd194493aThomas Grafenum 44444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 44544d362409d5469aed47d19e7908d19bd194493aThomas Graf PREFIX_UNSPEC, 44644d362409d5469aed47d19e7908d19bd194493aThomas Graf PREFIX_ADDRESS, 44744d362409d5469aed47d19e7908d19bd194493aThomas Graf PREFIX_CACHEINFO, 44844d362409d5469aed47d19e7908d19bd194493aThomas Graf __PREFIX_MAX 44944d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 45044d362409d5469aed47d19e7908d19bd194493aThomas Graf 45144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define PREFIX_MAX (__PREFIX_MAX - 1) 45244d362409d5469aed47d19e7908d19bd194493aThomas Graf 45344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct prefix_cacheinfo 45444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 45544d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 preferred_time; 45644d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 valid_time; 45744d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 45844d362409d5469aed47d19e7908d19bd194493aThomas Graf 45944d362409d5469aed47d19e7908d19bd194493aThomas Graf 46044d362409d5469aed47d19e7908d19bd194493aThomas Graf/***************************************************************** 46144d362409d5469aed47d19e7908d19bd194493aThomas Graf * Traffic control messages. 46244d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/ 46344d362409d5469aed47d19e7908d19bd194493aThomas Graf 46444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tcmsg 46544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 46644d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char tcm_family; 46744d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char tcm__pad1; 46844d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned short tcm__pad2; 46944d362409d5469aed47d19e7908d19bd194493aThomas Graf int tcm_ifindex; 47044d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 tcm_handle; 47144d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 tcm_parent; 47244d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 tcm_info; 47344d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 47444d362409d5469aed47d19e7908d19bd194493aThomas Graf 47544d362409d5469aed47d19e7908d19bd194493aThomas Grafenum 47644d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 47744d362409d5469aed47d19e7908d19bd194493aThomas Graf TCA_UNSPEC, 47844d362409d5469aed47d19e7908d19bd194493aThomas Graf TCA_KIND, 47944d362409d5469aed47d19e7908d19bd194493aThomas Graf TCA_OPTIONS, 48044d362409d5469aed47d19e7908d19bd194493aThomas Graf TCA_STATS, 48144d362409d5469aed47d19e7908d19bd194493aThomas Graf TCA_XSTATS, 48244d362409d5469aed47d19e7908d19bd194493aThomas Graf TCA_RATE, 48344d362409d5469aed47d19e7908d19bd194493aThomas Graf TCA_FCNT, 48444d362409d5469aed47d19e7908d19bd194493aThomas Graf TCA_STATS2, 48544d362409d5469aed47d19e7908d19bd194493aThomas Graf __TCA_MAX 48644d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 48744d362409d5469aed47d19e7908d19bd194493aThomas Graf 48844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_MAX (__TCA_MAX - 1) 48944d362409d5469aed47d19e7908d19bd194493aThomas Graf 49044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg)))) 49144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg)) 49244d362409d5469aed47d19e7908d19bd194493aThomas Graf 493639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf/******************************************************************** 494639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf * Neighbor Discovery userland options 495639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf ****/ 496639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf 497639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Grafstruct nduseroptmsg 498639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf{ 499639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf unsigned char nduseropt_family; 500639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf unsigned char nduseropt_pad1; 501639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf unsigned short nduseropt_opts_len; /* Total length of options */ 502639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf int nduseropt_ifindex; 503639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf __u8 nduseropt_icmp_type; 504639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf __u8 nduseropt_icmp_code; 505639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf unsigned short nduseropt_pad2; 506639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf unsigned int nduseropt_pad3; 507639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf /* Followed by one or more ND options */ 508639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf}; 509639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf 510639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Grafenum 511639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf{ 512639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf NDUSEROPT_UNSPEC, 513639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf NDUSEROPT_SRCADDR, 514639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf __NDUSEROPT_MAX 515639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf}; 516639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf 517639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define NDUSEROPT_MAX (__NDUSEROPT_MAX - 1) 518639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf 51944d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef __KERNEL__ 52044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTnetlink multicast groups - backwards compatibility for userspace */ 52144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_LINK 1 52244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_NOTIFY 2 52344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_NEIGH 4 52444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_TC 8 52544d362409d5469aed47d19e7908d19bd194493aThomas Graf 52644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV4_IFADDR 0x10 52744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV4_MROUTE 0x20 52844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV4_ROUTE 0x40 52944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV4_RULE 0x80 53044d362409d5469aed47d19e7908d19bd194493aThomas Graf 53144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_IFADDR 0x100 53244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_MROUTE 0x200 53344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_ROUTE 0x400 53444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_IFINFO 0x800 53544d362409d5469aed47d19e7908d19bd194493aThomas Graf 53644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_DECnet_IFADDR 0x1000 53744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_DECnet_ROUTE 0x4000 53844d362409d5469aed47d19e7908d19bd194493aThomas Graf 53944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_PREFIX 0x20000 54044d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif 54144d362409d5469aed47d19e7908d19bd194493aThomas Graf 54244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTnetlink multicast groups */ 54344d362409d5469aed47d19e7908d19bd194493aThomas Grafenum rtnetlink_groups { 54444d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_NONE, 54544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_NONE RTNLGRP_NONE 54644d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_LINK, 54744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_LINK RTNLGRP_LINK 54844d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_NOTIFY, 54944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_NOTIFY RTNLGRP_NOTIFY 55044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_NEIGH, 55144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_NEIGH RTNLGRP_NEIGH 55244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_TC, 55344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_TC RTNLGRP_TC 55444d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV4_IFADDR, 55544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR 55644d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV4_MROUTE, 55744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE 55844d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV4_ROUTE, 55944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE 56044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV4_RULE, 56144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE 56244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV6_IFADDR, 56344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR 56444d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV6_MROUTE, 56544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE 56644d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV6_ROUTE, 56744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE 56844d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV6_IFINFO, 56944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO 57044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_DECnet_IFADDR, 57144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR 57244d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_NOP2, 57344d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_DECnet_ROUTE, 57444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE 57544d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_DECnet_RULE, 57644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE 57744d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_NOP4, 57844d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV6_PREFIX, 57944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX 58044d362409d5469aed47d19e7908d19bd194493aThomas Graf RTNLGRP_IPV6_RULE, 58144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE 582639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf RTNLGRP_ND_USEROPT, 583639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT 58444d362409d5469aed47d19e7908d19bd194493aThomas Graf __RTNLGRP_MAX 58544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 58644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_MAX (__RTNLGRP_MAX - 1) 58744d362409d5469aed47d19e7908d19bd194493aThomas Graf 58844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* TC action piece */ 58944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tcamsg 59044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 59144d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char tca_family; 59244d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned char tca__pad1; 59344d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned short tca__pad2; 59444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 59544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg)))) 59644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg)) 59744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_ACT_TAB 1 /* attr type must be >=1 */ 59844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCAA_MAX 1 59944d362409d5469aed47d19e7908d19bd194493aThomas Graf 600639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf/* End of information exported to user level */ 601639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf 60244d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif /* __LINUX_RTNETLINK_H */ 603