1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI__LINUX_RTNETLINK_H 2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI__LINUX_RTNETLINK_H 3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h> 5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/netlink.h> 6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/if_link.h> 7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/if_addr.h> 8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/neighbour.h> 9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtnetlink families. Values up to 127 are reserved for real address 11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * families, values above 128 may be used arbitrarily. 12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_IPMR 128 14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_IP6MR 129 15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_MAX 129 16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**** 18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Routing/neighbour discovery messages. 19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Types of messages */ 22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_BASE = 16, 25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_BASE RTM_BASE 26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWLINK = 16, 28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWLINK RTM_NEWLINK 29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELLINK, 30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELLINK RTM_DELLINK 31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETLINK, 32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETLINK RTM_GETLINK 33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_SETLINK, 34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETLINK RTM_SETLINK 35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWADDR = 20, 37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWADDR RTM_NEWADDR 38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELADDR, 39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELADDR RTM_DELADDR 40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETADDR, 41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETADDR RTM_GETADDR 42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWROUTE = 24, 44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWROUTE RTM_NEWROUTE 45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELROUTE, 46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELROUTE RTM_DELROUTE 47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETROUTE, 48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETROUTE RTM_GETROUTE 49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWNEIGH = 28, 51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNEIGH RTM_NEWNEIGH 52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELNEIGH, 53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELNEIGH RTM_DELNEIGH 54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETNEIGH, 55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNEIGH RTM_GETNEIGH 56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWRULE = 32, 58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWRULE RTM_NEWRULE 59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELRULE, 60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELRULE RTM_DELRULE 61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETRULE, 62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETRULE RTM_GETRULE 63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWQDISC = 36, 65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWQDISC RTM_NEWQDISC 66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELQDISC, 67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELQDISC RTM_DELQDISC 68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETQDISC, 69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETQDISC RTM_GETQDISC 70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWTCLASS = 40, 72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWTCLASS RTM_NEWTCLASS 73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELTCLASS, 74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELTCLASS RTM_DELTCLASS 75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETTCLASS, 76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETTCLASS RTM_GETTCLASS 77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWTFILTER = 44, 79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWTFILTER RTM_NEWTFILTER 80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELTFILTER, 81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELTFILTER RTM_DELTFILTER 82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETTFILTER, 83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETTFILTER RTM_GETTFILTER 84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWACTION = 48, 86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWACTION RTM_NEWACTION 87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELACTION, 88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELACTION RTM_DELACTION 89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETACTION, 90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETACTION RTM_GETACTION 91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWPREFIX = 52, 93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWPREFIX RTM_NEWPREFIX 94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETMULTICAST = 58, 96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETMULTICAST RTM_GETMULTICAST 97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETANYCAST = 62, 99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETANYCAST RTM_GETANYCAST 100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWNEIGHTBL = 64, 102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBL 103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETNEIGHTBL = 66, 104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNEIGHTBL RTM_GETNEIGHTBL 105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_SETNEIGHTBL, 106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETNEIGHTBL RTM_SETNEIGHTBL 107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWNDUSEROPT = 68, 109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT 110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWADDRLABEL = 72, 112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL 113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELADDRLABEL, 114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELADDRLABEL RTM_DELADDRLABEL 115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETADDRLABEL, 116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETADDRLABEL RTM_GETADDRLABEL 117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETDCB = 78, 119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETDCB RTM_GETDCB 120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_SETDCB, 121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETDCB RTM_SETDCB 122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWNETCONF = 80, 124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNETCONF RTM_NEWNETCONF 125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETNETCONF = 82, 126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNETCONF RTM_GETNETCONF 127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWMDB = 84, 129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWMDB RTM_NEWMDB 130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELMDB = 85, 131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELMDB RTM_DELMDB 132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETMDB = 86, 133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETMDB RTM_GETMDB 134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTM_MAX, 136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1) 137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE) 140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2) 141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_FAM(cmd) (((cmd) - RTM_BASE) >> 2) 142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng Generic structure for encapsulation of optional route information. 145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng It is reminiscent of sockaddr, but with sa_family replaced 146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng with attribute type. 147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtattr { 150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short rta_len; 151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short rta_type; 152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Macros to handle rtattributes */ 155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_ALIGNTO 4 157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) ) 158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \ 159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng (rta)->rta_len >= sizeof(struct rtattr) && \ 160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng (rta)->rta_len <= (len)) 161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \ 162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len))) 163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len)) 164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len)) 165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0))) 166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0)) 167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/****************************************************************************** 172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Definitions used in routing table administration. 173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtmsg { 176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_family; 177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_dst_len; 178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_src_len; 179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_tos; 180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_table; /* Routing table id */ 182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_protocol; /* Routing protocol; see below */ 183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_scope; /* See below */ 184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_type; /* See below */ 185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned rtm_flags; 187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_type */ 190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_UNSPEC, 193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_UNICAST, /* Gateway or direct route */ 194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_LOCAL, /* Accept locally */ 195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_BROADCAST, /* Accept locally as broadcast, 196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng send as broadcast */ 197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_ANYCAST, /* Accept locally as broadcast, 198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng but send as unicast */ 199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_MULTICAST, /* Multicast route */ 200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_BLACKHOLE, /* Drop */ 201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_UNREACHABLE, /* Destination is unreachable */ 202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_PROHIBIT, /* Administratively prohibited */ 203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_THROW, /* Not in this table */ 204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_NAT, /* Translate this address */ 205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_XRESOLVE, /* Use external resolver */ 206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTN_MAX 207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTN_MAX (__RTN_MAX - 1) 210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_protocol */ 213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_UNSPEC 0 215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_REDIRECT 1 /* Route installed by ICMP redirects; 216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng not used by current IPv4 */ 217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_KERNEL 2 /* Route installed by kernel */ 218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_BOOT 3 /* Route installed during boot */ 219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_STATIC 4 /* Route installed by administrator */ 220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel; 222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng they are just passed from user and back as is. 223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng It will be used by hypothetical multiple routing daemons. 224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng Note that protocol values should be standardized in order to 225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng avoid conflicts. 226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_GATED 8 /* Apparently, GateD */ 229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_RA 9 /* RDISC/ND router advertisements */ 230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_MRT 10 /* Merit MRT */ 231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_ZEBRA 11 /* Zebra */ 232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_BIRD 12 /* BIRD */ 233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_DNROUTED 13 /* DECnet routing daemon */ 234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_XORP 14 /* XORP */ 235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_NTK 15 /* Netsukuku */ 236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_DHCP 16 /* DHCP client */ 237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_MROUTED 17 /* Multicast daemon */ 238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_scope 240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng Really it is not scope, but sort of distance to the destination. 242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng NOWHERE are reserved for not existing destinations, HOST is our 243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng local addresses, LINK are destinations, located on directly attached 244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng link and UNIVERSE is everywhere in the Universe. 245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng Intermediate values are also possible f.e. interior routes 247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng could be assigned a value between UNIVERSE and LINK. 248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng*/ 249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rt_scope_t { 251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_UNIVERSE=0, 252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* User defined values */ 253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_SITE=200, 254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_LINK=253, 255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_HOST=254, 256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_NOWHERE=255 257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_flags */ 260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_NOTIFY 0x100 /* Notify user of route change */ 262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_CLONED 0x200 /* This route is cloned */ 263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_EQUALIZE 0x400 /* Multipath equalizer: NI */ 264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_PREFIX 0x800 /* Prefix addresses */ 265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Reserved table identifiers */ 267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rt_class_t { 269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_UNSPEC=0, 270224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* User defined values */ 271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_COMPAT=252, 272224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_DEFAULT=253, 273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_MAIN=254, 274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_LOCAL=255, 275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_MAX=0xFFFFFFFF 276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Routing message attributes */ 280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rtattr_type_t { 282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_UNSPEC, 283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_DST, 284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_SRC, 285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_IIF, 286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_OIF, 287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_GATEWAY, 288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_PRIORITY, 289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_PREFSRC, 290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_METRICS, 291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_MULTIPATH, 292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_PROTOINFO, /* no longer used */ 293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_FLOW, 294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_CACHEINFO, 295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_SESSION, /* no longer used */ 296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_MP_ALGO, /* no longer used */ 297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_TABLE, 298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_MARK, 299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_MFC_STATS, 300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTA_MAX 301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_MAX (__RTA_MAX - 1) 304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg)))) 306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg)) 307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_MULTIPATH --- array of struct rtnexthop. 309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * "struct rtnexthop" describes all necessary nexthop information, 311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * i.e. parameters of path to a destination via this nexthop. 312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * At the moment it is impossible to set different prefsrc, mtu, window 314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * and rtt for different paths from multipath. 315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtnexthop { 318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short rtnh_len; 319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtnh_flags; 320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtnh_hops; 321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int rtnh_ifindex; 322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtnh_flags */ 325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_DEAD 1 /* Nexthop is dead (used by multipath) */ 327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_PERVASIVE 2 /* Do recursive gateway lookup */ 328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_ONLINK 4 /* Gateway is forced on link */ 329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Macros to handle hexthops */ 331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_ALIGNTO 4 333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) ) 334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \ 335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ((int)(rtnh)->rtnh_len) <= (len)) 336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len))) 337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len)) 338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len)) 339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_DATA(rtnh) ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0))) 340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_CACHEINFO */ 342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_cacheinfo { 344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_clntref; 345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_lastuse; 346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __s32 rta_expires; 347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_error; 348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_used; 349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNETLINK_HAVE_PEERINFO 1 351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_id; 352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_ts; 353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_tsage; 354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */ 357224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 358224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 359224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_UNSPEC, 360224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_UNSPEC RTAX_UNSPEC 361224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_LOCK, 362224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_LOCK RTAX_LOCK 363224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_MTU, 364224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_MTU RTAX_MTU 365224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_WINDOW, 366224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_WINDOW RTAX_WINDOW 367224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_RTT, 368224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTT RTAX_RTT 369224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_RTTVAR, 370224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTTVAR RTAX_RTTVAR 371224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_SSTHRESH, 372224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_SSTHRESH RTAX_SSTHRESH 373224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_CWND, 374224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_CWND RTAX_CWND 375224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_ADVMSS, 376224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_ADVMSS RTAX_ADVMSS 377224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_REORDERING, 378224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_REORDERING RTAX_REORDERING 379224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_HOPLIMIT, 380224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_HOPLIMIT RTAX_HOPLIMIT 381224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_INITCWND, 382224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_INITCWND RTAX_INITCWND 383224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_FEATURES, 384224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURES RTAX_FEATURES 385224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_RTO_MIN, 386224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTO_MIN RTAX_RTO_MIN 387224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_INITRWND, 388224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_INITRWND RTAX_INITRWND 389e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl RTAX_QUICKACK, 390e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define RTAX_QUICKACK RTAX_QUICKACK 391224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTAX_MAX 392224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 393224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 394224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_MAX (__RTAX_MAX - 1) 395224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 396224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURE_ECN 0x00000001 397224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURE_SACK 0x00000002 398224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURE_TIMESTAMP 0x00000004 399224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURE_ALLFRAG 0x00000008 400224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 401224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_session { 402224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 proto; 403224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 pad1; 404224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 pad2; 405224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 406224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng union { 407224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct { 408224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 sport; 409224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 dport; 410224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng } ports; 411224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 412224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct { 413224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 type; 414224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 code; 415224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 ident; 416224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng } icmpt; 417224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 418224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 spi; 419224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng } u; 420224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 421224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 422224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_mfc_stats { 423224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 mfcs_packets; 424224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 mfcs_bytes; 425224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 mfcs_wrong_if; 426224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 427224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 428224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**** 429224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * General form of address family dependent message. 430224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 431224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 432224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtgenmsg { 433224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtgen_family; 434224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 435224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 436224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/***************************************************************** 437224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Link layer specific messages. 438224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 439224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 440224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* struct ifinfomsg 441224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * passes link level specific information, not dependent 442224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * on network protocol. 443224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 444224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 445224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ifinfomsg { 446224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char ifi_family; 447224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char __ifi_pad; 448224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short ifi_type; /* ARPHRD_* */ 449224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int ifi_index; /* Link index */ 450224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned ifi_flags; /* IFF_* flags */ 451224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned ifi_change; /* IFF_* change mask */ 452224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 453224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 454224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/******************************************************************** 455224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * prefix information 456224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 457224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 458224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct prefixmsg { 459224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_family; 460224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_pad1; 461224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short prefix_pad2; 462224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int prefix_ifindex; 463224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_type; 464224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_len; 465224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_flags; 466224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_pad3; 467224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 468224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 469224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum 470224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng{ 471224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng PREFIX_UNSPEC, 472224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng PREFIX_ADDRESS, 473224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng PREFIX_CACHEINFO, 474224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __PREFIX_MAX 475224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 476224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 477224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PREFIX_MAX (__PREFIX_MAX - 1) 478224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 479224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct prefix_cacheinfo { 480224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 preferred_time; 481224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 valid_time; 482224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 483224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 484224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 485224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/***************************************************************** 486224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Traffic control messages. 487224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 488224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 489224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcmsg { 490224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char tcm_family; 491224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char tcm__pad1; 492224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short tcm__pad2; 493224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int tcm_ifindex; 494224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 tcm_handle; 495224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 tcm_parent; 496224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 tcm_info; 497224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 498224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 499224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 500224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_UNSPEC, 501224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_KIND, 502224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_OPTIONS, 503224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_STATS, 504224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_XSTATS, 505224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RATE, 506224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FCNT, 507224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_STATS2, 508224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_STAB, 509224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_MAX 510224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 511224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 512224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_MAX (__TCA_MAX - 1) 513224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 514224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg)))) 515224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg)) 516224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 517224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/******************************************************************** 518224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Neighbor Discovery userland options 519224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 520224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 521224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct nduseroptmsg { 522224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char nduseropt_family; 523224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char nduseropt_pad1; 524224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short nduseropt_opts_len; /* Total length of options */ 525224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int nduseropt_ifindex; 526224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 nduseropt_icmp_type; 527224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 nduseropt_icmp_code; 528224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short nduseropt_pad2; 529224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned int nduseropt_pad3; 530224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* Followed by one or more ND options */ 531224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 532224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 533224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 534224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng NDUSEROPT_UNSPEC, 535224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng NDUSEROPT_SRCADDR, 536224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __NDUSEROPT_MAX 537224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 538224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 539224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define NDUSEROPT_MAX (__NDUSEROPT_MAX - 1) 540224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 541224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __KERNEL__ 542224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTnetlink multicast groups - backwards compatibility for userspace */ 543224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_LINK 1 544224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_NOTIFY 2 545224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_NEIGH 4 546224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_TC 8 547224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 548224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_IFADDR 0x10 549224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_MROUTE 0x20 550224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_ROUTE 0x40 551224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_RULE 0x80 552224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 553224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_IFADDR 0x100 554224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_MROUTE 0x200 555224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_ROUTE 0x400 556224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_IFINFO 0x800 557224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 558224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_DECnet_IFADDR 0x1000 559224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_DECnet_ROUTE 0x4000 560224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 561224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_PREFIX 0x20000 562224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 563224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 564224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTnetlink multicast groups */ 565224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rtnetlink_groups { 566224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NONE, 567224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NONE RTNLGRP_NONE 568224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_LINK, 569224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_LINK RTNLGRP_LINK 570224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NOTIFY, 571224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NOTIFY RTNLGRP_NOTIFY 572224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NEIGH, 573224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NEIGH RTNLGRP_NEIGH 574224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_TC, 575224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_TC RTNLGRP_TC 576224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_IFADDR, 577224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR 578224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_MROUTE, 579224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE 580224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_ROUTE, 581224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE 582224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_RULE, 583224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE 584224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_IFADDR, 585224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR 586224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_MROUTE, 587224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE 588224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_ROUTE, 589224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE 590224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_IFINFO, 591224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO 592224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_DECnet_IFADDR, 593224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR 594224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NOP2, 595224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_DECnet_ROUTE, 596224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE 597224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_DECnet_RULE, 598224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE 599224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NOP4, 600224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_PREFIX, 601224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX 602224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_RULE, 603224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE 604224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_ND_USEROPT, 605224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT 606224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_PHONET_IFADDR, 607224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR 608224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_PHONET_ROUTE, 609224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE 610224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_DCB, 611224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DCB RTNLGRP_DCB 612224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_NETCONF, 613224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF 614224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_NETCONF, 615224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF 616224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_MDB, 617224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_MDB RTNLGRP_MDB 618224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTNLGRP_MAX 619224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 620224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_MAX (__RTNLGRP_MAX - 1) 621224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 622224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* TC action piece */ 623224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcamsg { 624224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char tca_family; 625224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char tca__pad1; 626224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short tca__pad2; 627224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 628224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg)))) 629224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg)) 630224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_TAB 1 /* attr type must be >=1 */ 631224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCAA_MAX 1 632224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 633224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* New extended info filters for IFLA_EXT_MASK */ 634224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTEXT_FILTER_VF (1 << 0) 635224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTEXT_FILTER_BRVLAN (1 << 1) 636224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 637224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* End of information exported to user level */ 638224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 639224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 640224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 641224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI__LINUX_RTNETLINK_H */ 642