125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI__LINUX_RTNETLINK_H 3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI__LINUX_RTNETLINK_H 4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h> 6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/netlink.h> 7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/if_link.h> 8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/if_addr.h> 9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/neighbour.h> 10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtnetlink families. Values up to 127 are reserved for real address 12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * families, values above 128 may be used arbitrarily. 13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_IPMR 128 15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_IP6MR 129 16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_MAX 129 17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**** 19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Routing/neighbour discovery messages. 20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Types of messages */ 23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_BASE = 16, 26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_BASE RTM_BASE 27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWLINK = 16, 29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWLINK RTM_NEWLINK 30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELLINK, 31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELLINK RTM_DELLINK 32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETLINK, 33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETLINK RTM_GETLINK 34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_SETLINK, 35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETLINK RTM_SETLINK 36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWADDR = 20, 38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWADDR RTM_NEWADDR 39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELADDR, 40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELADDR RTM_DELADDR 41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETADDR, 42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETADDR RTM_GETADDR 43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWROUTE = 24, 45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWROUTE RTM_NEWROUTE 46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELROUTE, 47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELROUTE RTM_DELROUTE 48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETROUTE, 49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETROUTE RTM_GETROUTE 50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWNEIGH = 28, 52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNEIGH RTM_NEWNEIGH 53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELNEIGH, 54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELNEIGH RTM_DELNEIGH 55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETNEIGH, 56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNEIGH RTM_GETNEIGH 57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWRULE = 32, 59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWRULE RTM_NEWRULE 60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELRULE, 61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELRULE RTM_DELRULE 62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETRULE, 63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETRULE RTM_GETRULE 64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWQDISC = 36, 66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWQDISC RTM_NEWQDISC 67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELQDISC, 68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELQDISC RTM_DELQDISC 69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETQDISC, 70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETQDISC RTM_GETQDISC 71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWTCLASS = 40, 73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWTCLASS RTM_NEWTCLASS 74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELTCLASS, 75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELTCLASS RTM_DELTCLASS 76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETTCLASS, 77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETTCLASS RTM_GETTCLASS 78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWTFILTER = 44, 80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWTFILTER RTM_NEWTFILTER 81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELTFILTER, 82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELTFILTER RTM_DELTFILTER 83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETTFILTER, 84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETTFILTER RTM_GETTFILTER 85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWACTION = 48, 87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWACTION RTM_NEWACTION 88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELACTION, 89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELACTION RTM_DELACTION 90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETACTION, 91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETACTION RTM_GETACTION 92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWPREFIX = 52, 94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWPREFIX RTM_NEWPREFIX 95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETMULTICAST = 58, 97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETMULTICAST RTM_GETMULTICAST 98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETANYCAST = 62, 100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETANYCAST RTM_GETANYCAST 101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWNEIGHTBL = 64, 103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBL 104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETNEIGHTBL = 66, 105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNEIGHTBL RTM_GETNEIGHTBL 106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_SETNEIGHTBL, 107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETNEIGHTBL RTM_SETNEIGHTBL 108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWNDUSEROPT = 68, 110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT 111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWADDRLABEL = 72, 113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL 114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELADDRLABEL, 115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELADDRLABEL RTM_DELADDRLABEL 116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETADDRLABEL, 117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETADDRLABEL RTM_GETADDRLABEL 118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETDCB = 78, 120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETDCB RTM_GETDCB 121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_SETDCB, 122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETDCB RTM_SETDCB 123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWNETCONF = 80, 125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNETCONF RTM_NEWNETCONF 1260543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris RTM_DELNETCONF, 1270543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define RTM_DELNETCONF RTM_DELNETCONF 128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETNETCONF = 82, 129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNETCONF RTM_GETNETCONF 130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_NEWMDB = 84, 132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWMDB RTM_NEWMDB 133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_DELMDB = 85, 134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELMDB RTM_DELMDB 135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTM_GETMDB = 86, 136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETMDB RTM_GETMDB 137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 13812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTM_NEWNSID = 88, 13912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTM_NEWNSID RTM_NEWNSID 14012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTM_DELNSID = 89, 14112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTM_DELNSID RTM_DELNSID 14212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTM_GETNSID = 90, 14312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTM_GETNSID RTM_GETNSID 14412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris 145ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris RTM_NEWSTATS = 92, 146ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris#define RTM_NEWSTATS RTM_NEWSTATS 147ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris RTM_GETSTATS = 94, 148ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris#define RTM_GETSTATS RTM_GETSTATS 149ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris 15025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris RTM_NEWCACHEREPORT = 96, 15125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT 15225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris 153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTM_MAX, 154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1) 155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE) 158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2) 159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_FAM(cmd) (((cmd) - RTM_BASE) >> 2) 160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng Generic structure for encapsulation of optional route information. 163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng It is reminiscent of sockaddr, but with sa_family replaced 164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng with attribute type. 165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtattr { 168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short rta_len; 169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short rta_type; 170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Macros to handle rtattributes */ 173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 17412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTA_ALIGNTO 4U 175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) ) 176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \ 177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng (rta)->rta_len >= sizeof(struct rtattr) && \ 178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng (rta)->rta_len <= (len)) 179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \ 180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len))) 181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len)) 182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len)) 183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0))) 184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0)) 185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/****************************************************************************** 190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Definitions used in routing table administration. 191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtmsg { 194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_family; 195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_dst_len; 196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_src_len; 197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_tos; 198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_table; /* Routing table id */ 200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_protocol; /* Routing protocol; see below */ 201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_scope; /* See below */ 202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtm_type; /* See below */ 203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned rtm_flags; 205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_type */ 208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_UNSPEC, 211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_UNICAST, /* Gateway or direct route */ 212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_LOCAL, /* Accept locally */ 213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_BROADCAST, /* Accept locally as broadcast, 214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng send as broadcast */ 215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_ANYCAST, /* Accept locally as broadcast, 216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng but send as unicast */ 217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_MULTICAST, /* Multicast route */ 218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_BLACKHOLE, /* Drop */ 219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_UNREACHABLE, /* Destination is unreachable */ 220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_PROHIBIT, /* Administratively prohibited */ 221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_THROW, /* Not in this table */ 222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_NAT, /* Translate this address */ 223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTN_XRESOLVE, /* Use external resolver */ 224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTN_MAX 225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTN_MAX (__RTN_MAX - 1) 228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_protocol */ 231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_UNSPEC 0 233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_REDIRECT 1 /* Route installed by ICMP redirects; 234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng not used by current IPv4 */ 235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_KERNEL 2 /* Route installed by kernel */ 236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_BOOT 3 /* Route installed during boot */ 237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_STATIC 4 /* Route installed by administrator */ 238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel; 240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng they are just passed from user and back as is. 241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng It will be used by hypothetical multiple routing daemons. 242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng Note that protocol values should be standardized in order to 243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng avoid conflicts. 244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_GATED 8 /* Apparently, GateD */ 247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_RA 9 /* RDISC/ND router advertisements */ 248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_MRT 10 /* Merit MRT */ 249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_ZEBRA 11 /* Zebra */ 250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_BIRD 12 /* BIRD */ 251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_DNROUTED 13 /* DECnet routing daemon */ 252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_XORP 14 /* XORP */ 253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_NTK 15 /* Netsukuku */ 254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_DHCP 16 /* DHCP client */ 255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_MROUTED 17 /* Multicast daemon */ 25612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTPROT_BABEL 42 /* Babel daemon */ 257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_scope 259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng Really it is not scope, but sort of distance to the destination. 261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng NOWHERE are reserved for not existing destinations, HOST is our 262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng local addresses, LINK are destinations, located on directly attached 263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng link and UNIVERSE is everywhere in the Universe. 264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng Intermediate values are also possible f.e. interior routes 266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng could be assigned a value between UNIVERSE and LINK. 267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng*/ 268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rt_scope_t { 270224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_UNIVERSE=0, 271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* User defined values */ 272224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_SITE=200, 273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_LINK=253, 274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_HOST=254, 275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_SCOPE_NOWHERE=255 276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_flags */ 279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_NOTIFY 0x100 /* Notify user of route change */ 281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_CLONED 0x200 /* This route is cloned */ 282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_EQUALIZE 0x400 /* Multipath equalizer: NI */ 283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_PREFIX 0x800 /* Prefix addresses */ 28412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTM_F_LOOKUP_TABLE 0x1000 /* set rtm_table to FIB lookup result */ 28525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define RTM_F_FIB_MATCH 0x2000 /* return full fib lookup match */ 286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Reserved table identifiers */ 288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rt_class_t { 290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_UNSPEC=0, 291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* User defined values */ 292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_COMPAT=252, 293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_DEFAULT=253, 294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_MAIN=254, 295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_LOCAL=255, 296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RT_TABLE_MAX=0xFFFFFFFF 297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Routing message attributes */ 301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rtattr_type_t { 303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_UNSPEC, 304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_DST, 305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_SRC, 306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_IIF, 307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_OIF, 308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_GATEWAY, 309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_PRIORITY, 310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_PREFSRC, 311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_METRICS, 312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_MULTIPATH, 313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_PROTOINFO, /* no longer used */ 314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_FLOW, 315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_CACHEINFO, 316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_SESSION, /* no longer used */ 317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_MP_ALGO, /* no longer used */ 318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_TABLE, 319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_MARK, 320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTA_MFC_STATS, 32112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTA_VIA, 32212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTA_NEWDST, 32312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTA_PREF, 32412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTA_ENCAP_TYPE, 32512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTA_ENCAP, 326ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris RTA_EXPIRES, 327ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris RTA_PAD, 3282fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris RTA_UID, 3290543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris RTA_TTL_PROPAGATE, 330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTA_MAX 331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_MAX (__RTA_MAX - 1) 334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg)))) 336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg)) 337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_MULTIPATH --- array of struct rtnexthop. 339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * "struct rtnexthop" describes all necessary nexthop information, 341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * i.e. parameters of path to a destination via this nexthop. 342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * At the moment it is impossible to set different prefsrc, mtu, window 344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * and rtt for different paths from multipath. 345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtnexthop { 348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short rtnh_len; 349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtnh_flags; 350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtnh_hops; 351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int rtnh_ifindex; 352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtnh_flags */ 355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_DEAD 1 /* Nexthop is dead (used by multipath) */ 357224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_PERVASIVE 2 /* Do recursive gateway lookup */ 358224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_ONLINK 4 /* Gateway is forced on link */ 35912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTNH_F_OFFLOAD 8 /* offloaded route */ 36012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTNH_F_LINKDOWN 16 /* carrier-down on nexthop */ 3610543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define RTNH_F_UNRESOLVED 32 /* The entry is unresolved (ipmr) */ 36212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris 3636e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris#define RTNH_COMPARE_MASK (RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD) 364224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 365224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Macros to handle hexthops */ 366224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 367224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_ALIGNTO 4 368224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) ) 369224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \ 370224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ((int)(rtnh)->rtnh_len) <= (len)) 371224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len))) 372224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len)) 373224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len)) 374224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_DATA(rtnh) ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0))) 375224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 37612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* RTA_VIA */ 37712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferrisstruct rtvia { 37812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris __kernel_sa_family_t rtvia_family; 37912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris __u8 rtvia_addr[0]; 38012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris}; 38112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris 382224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_CACHEINFO */ 383224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 384224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_cacheinfo { 385224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_clntref; 386224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_lastuse; 387224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __s32 rta_expires; 388224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_error; 389224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_used; 390224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 391224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNETLINK_HAVE_PEERINFO 1 392224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_id; 393224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_ts; 394224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 rta_tsage; 395224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 396224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 397224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */ 398224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 399224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 400224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_UNSPEC, 401224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_UNSPEC RTAX_UNSPEC 402224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_LOCK, 403224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_LOCK RTAX_LOCK 404224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_MTU, 405224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_MTU RTAX_MTU 406224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_WINDOW, 407224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_WINDOW RTAX_WINDOW 408224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_RTT, 409224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTT RTAX_RTT 410224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_RTTVAR, 411224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTTVAR RTAX_RTTVAR 412224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_SSTHRESH, 413224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_SSTHRESH RTAX_SSTHRESH 414224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_CWND, 415224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_CWND RTAX_CWND 416224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_ADVMSS, 417224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_ADVMSS RTAX_ADVMSS 418224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_REORDERING, 419224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_REORDERING RTAX_REORDERING 420224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_HOPLIMIT, 421224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_HOPLIMIT RTAX_HOPLIMIT 422224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_INITCWND, 423224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_INITCWND RTAX_INITCWND 424224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_FEATURES, 425224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURES RTAX_FEATURES 426224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_RTO_MIN, 427224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTO_MIN RTAX_RTO_MIN 428224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTAX_INITRWND, 429224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_INITRWND RTAX_INITRWND 430e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris RTAX_QUICKACK, 431e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define RTAX_QUICKACK RTAX_QUICKACK 43212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTAX_CC_ALGO, 43312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_CC_ALGO RTAX_CC_ALGO 434a1a109eed086336ef38a07b9f90e3d7c786f850eChristopher Ferris RTAX_FASTOPEN_NO_COOKIE, 435a1a109eed086336ef38a07b9f90e3d7c786f850eChristopher Ferris#define RTAX_FASTOPEN_NO_COOKIE RTAX_FASTOPEN_NO_COOKIE 436224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTAX_MAX 437224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 438224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 439224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_MAX (__RTAX_MAX - 1) 440224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 44112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_ECN (1 << 0) 44212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_SACK (1 << 1) 44312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_TIMESTAMP (1 << 2) 44412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_ALLFRAG (1 << 3) 44512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris 44612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_MASK (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \ 44712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG) 448224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 449224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_session { 450224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 proto; 451224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 pad1; 452224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 pad2; 453224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 454224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng union { 455224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct { 456224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 sport; 457224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 dport; 458224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng } ports; 459224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 460224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct { 461224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 type; 462224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 code; 463224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u16 ident; 464224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng } icmpt; 465224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 466224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 spi; 467224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng } u; 468224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 469224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 470224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_mfc_stats { 471224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 mfcs_packets; 472224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 mfcs_bytes; 473224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 mfcs_wrong_if; 474224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 475224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 476224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**** 477224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * General form of address family dependent message. 478224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 479224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 480224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtgenmsg { 481224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char rtgen_family; 482224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 483224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 484224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/***************************************************************** 485224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Link layer specific messages. 486224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 487224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 488224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* struct ifinfomsg 489224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * passes link level specific information, not dependent 490224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * on network protocol. 491224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 492224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 493224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ifinfomsg { 494224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char ifi_family; 495224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char __ifi_pad; 496224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short ifi_type; /* ARPHRD_* */ 497224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int ifi_index; /* Link index */ 498224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned ifi_flags; /* IFF_* flags */ 499224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned ifi_change; /* IFF_* change mask */ 500224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 501224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 502224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/******************************************************************** 503224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * prefix information 504224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 505224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 506224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct prefixmsg { 507224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_family; 508224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_pad1; 509224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short prefix_pad2; 510224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int prefix_ifindex; 511224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_type; 512224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_len; 513224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_flags; 514224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char prefix_pad3; 515224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 516224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 517224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum 518224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng{ 519224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng PREFIX_UNSPEC, 520224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng PREFIX_ADDRESS, 521224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng PREFIX_CACHEINFO, 522224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __PREFIX_MAX 523224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 524224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 525224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PREFIX_MAX (__PREFIX_MAX - 1) 526224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 527224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct prefix_cacheinfo { 528224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 preferred_time; 529224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 valid_time; 530224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 531224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 532224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 533224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/***************************************************************** 534224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Traffic control messages. 535224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 536224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 537224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcmsg { 538224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char tcm_family; 539224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char tcm__pad1; 540224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short tcm__pad2; 541224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int tcm_ifindex; 542224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 tcm_handle; 543224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 tcm_parent; 544224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 tcm_info; 545224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 546224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 547224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 548224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_UNSPEC, 549224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_KIND, 550224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_OPTIONS, 551224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_STATS, 552224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_XSTATS, 553224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_RATE, 554224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_FCNT, 555224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_STATS2, 556224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng TCA_STAB, 557ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris TCA_PAD, 5580543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris TCA_DUMP_INVISIBLE, 55925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris TCA_CHAIN, 560a1a109eed086336ef38a07b9f90e3d7c786f850eChristopher Ferris TCA_HW_OFFLOAD, 561224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __TCA_MAX 562224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 563224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 564224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_MAX (__TCA_MAX - 1) 565224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 566224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg)))) 567224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg)) 568224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 569224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/******************************************************************** 570224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Neighbor Discovery userland options 571224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/ 572224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 573224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct nduseroptmsg { 574224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char nduseropt_family; 575224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char nduseropt_pad1; 576224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short nduseropt_opts_len; /* Total length of options */ 577224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int nduseropt_ifindex; 578224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 nduseropt_icmp_type; 579224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 nduseropt_icmp_code; 580224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short nduseropt_pad2; 581224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned int nduseropt_pad3; 582224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* Followed by one or more ND options */ 583224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 584224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 585224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 586224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng NDUSEROPT_UNSPEC, 587224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng NDUSEROPT_SRCADDR, 588224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __NDUSEROPT_MAX 589224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 590224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 591224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define NDUSEROPT_MAX (__NDUSEROPT_MAX - 1) 592224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 593224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __KERNEL__ 594224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTnetlink multicast groups - backwards compatibility for userspace */ 595224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_LINK 1 596224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_NOTIFY 2 597224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_NEIGH 4 598224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_TC 8 599224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 600224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_IFADDR 0x10 601224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_MROUTE 0x20 602224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_ROUTE 0x40 603224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_RULE 0x80 604224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 605224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_IFADDR 0x100 606224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_MROUTE 0x200 607224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_ROUTE 0x400 608224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_IFINFO 0x800 609224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 610224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_DECnet_IFADDR 0x1000 611224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_DECnet_ROUTE 0x4000 612224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 613224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_PREFIX 0x20000 614224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 615224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 616224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTnetlink multicast groups */ 617224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rtnetlink_groups { 618224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NONE, 619224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NONE RTNLGRP_NONE 620224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_LINK, 621224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_LINK RTNLGRP_LINK 622224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NOTIFY, 623224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NOTIFY RTNLGRP_NOTIFY 624224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NEIGH, 625224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NEIGH RTNLGRP_NEIGH 626224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_TC, 627224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_TC RTNLGRP_TC 628224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_IFADDR, 629224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR 630224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_MROUTE, 631224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE 632224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_ROUTE, 633224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE 634224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_RULE, 635224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE 636224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_IFADDR, 637224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR 638224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_MROUTE, 639224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE 640224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_ROUTE, 641224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE 642224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_IFINFO, 643224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO 644224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_DECnet_IFADDR, 645224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR 646224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NOP2, 647224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_DECnet_ROUTE, 648224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE 649224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_DECnet_RULE, 650224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE 651224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_NOP4, 652224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_PREFIX, 653224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX 654224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_RULE, 655224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE 656224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_ND_USEROPT, 657224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT 658224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_PHONET_IFADDR, 659224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR 660224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_PHONET_ROUTE, 661224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE 662224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_DCB, 663224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DCB RTNLGRP_DCB 664224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV4_NETCONF, 665224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF 666224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_IPV6_NETCONF, 667224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF 668224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng RTNLGRP_MDB, 669224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_MDB RTNLGRP_MDB 67012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTNLGRP_MPLS_ROUTE, 67112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTNLGRP_MPLS_ROUTE RTNLGRP_MPLS_ROUTE 67212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris RTNLGRP_NSID, 67312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTNLGRP_NSID RTNLGRP_NSID 6740543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris RTNLGRP_MPLS_NETCONF, 6750543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define RTNLGRP_MPLS_NETCONF RTNLGRP_MPLS_NETCONF 67625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris RTNLGRP_IPV4_MROUTE_R, 67725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define RTNLGRP_IPV4_MROUTE_R RTNLGRP_IPV4_MROUTE_R 67825981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris RTNLGRP_IPV6_MROUTE_R, 67925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define RTNLGRP_IPV6_MROUTE_R RTNLGRP_IPV6_MROUTE_R 680224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __RTNLGRP_MAX 681224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 682224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_MAX (__RTNLGRP_MAX - 1) 683224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 684224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* TC action piece */ 685224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcamsg { 686224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char tca_family; 687224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned char tca__pad1; 688224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng unsigned short tca__pad2; 689224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 69025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris 69125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferrisenum { 69225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris TCA_ROOT_UNSPEC, 69325981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris TCA_ROOT_TAB, 69425981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TCA_ACT_TAB TCA_ROOT_TAB 69525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TCAA_MAX TCA_ROOT_TAB 69625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris TCA_ROOT_FLAGS, 69725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris TCA_ROOT_COUNT, 69825981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris TCA_ROOT_TIME_DELTA, /* in msecs */ 69925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris __TCA_ROOT_MAX, 70025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TCA_ROOT_MAX (__TCA_ROOT_MAX - 1) 70125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris}; 70225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris 703224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg)))) 704224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg)) 70525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* tcamsg flags stored in attribute TCA_ROOT_FLAGS 70625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris * 70725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris * TCA_FLAG_LARGE_DUMP_ON user->kernel to request for larger than TCA_ACT_MAX_PRIO 70825981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris * actions in a dump. All dump responses will contain the number of actions 70925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris * being dumped stored in for user app's consumption in TCA_ROOT_COUNT 71025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris * 71125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris */ 71225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TCA_FLAG_LARGE_DUMP_ON (1 << 0) 713224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 714224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* New extended info filters for IFLA_EXT_MASK */ 715224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTEXT_FILTER_VF (1 << 0) 716224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTEXT_FILTER_BRVLAN (1 << 1) 71712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTEXT_FILTER_BRVLAN_COMPRESSED (1 << 2) 71812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTEXT_FILTER_SKIP_STATS (1 << 3) 719224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 720224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* End of information exported to user level */ 721224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 722224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 723224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 724224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI__LINUX_RTNETLINK_H */ 725