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