#ifndef _NETLINK_ROUTE_ROUTE_H_
#define _NETLINK_ROUTE_ROUTE_H_
struct rtmsg {
unsigned char rtm_family;
unsigned char rtm_dst_len;
unsigned char rtm_src_len;
unsigned char rtm_tos;
unsigned char rtm_table;
unsigned char rtm_protocol;
unsigned char rtm_scope;
unsigned char rtm_type;
unsigned rtm_flags;
};
enum {
RTN_UNSPEC,
RTN_UNICAST,
RTN_LOCAL,
RTN_BROADCAST,
RTN_ANYCAST,
RTN_MULTICAST,
RTN_BLACKHOLE,
RTN_UNREACHABLE,
RTN_PROHIBIT,
RTN_THROW,
RTN_NAT,
RTN_XRESOLVE,
__RTN_MAX,
};
#define RTN_MAX (__RTN_MAX - 1)
#define RTPROT_UNSPEC 0
#define RTPROT_REDIRECT 1
#define RTPROT_KERNEL 2
#define RTPROT_BOOT 3
#define RTPROT_STATIC 4
#define RTPROT_GATED 8
#define RTPROT_RA 9
#define RTPROT_MRT 1
#define RTPROT_ZEBRA 11
#define RTPROT_BIRD 12
#define RTPROT_DNROUTED 13
#define RTPROT_XORP 14
#define RTPROT_NTK 15
#define RTPROT_DHCP 16
#define RTPROT_MROUTED 17
#define RTPROT_KEEPALIVED 18
#define RTPROT_BABEL 42
#define RTPROT_OPENR 99
#define RTPROT_BGP 186
#define RTPROT_ISIS 187
#define RTPROT_OSPF 188
#define RTPROT_RIP 189
#define RTPROT_EIGRP 192
enum rt_scope_t {
RT_SCOPE_UNIVERSE = 0,
RT_SCOPE_SITE = 200,
RT_SCOPE_LINK = 253,
RT_SCOPE_HOST = 254,
RT_SCOPE_NOWHERE = 255
};
#define RTM_F_NOTIFY 0x00000100
#define RTM_F_CLONED 0x00000200
#define RTM_F_EQUALIZE 0x00000400
#define RTM_F_PREFIX 0x00000800
#define RTM_F_LOOKUP_TABLE 0x00001000
#define RTM_F_FIB_MATCH 0x00002000
#define RTM_F_OFFLOAD 0x00004000
#define RTM_F_TRAP 0x00008000
#define RTM_F_OFFLOAD_FAILED 0x20000000
#ifndef _KERNEL
#define NL_RTM_HDRLEN ((int)sizeof(struct rtmsg))
#define RTM_RTA(_rtm) ((struct rtattr *)((char *)(_rtm) + NL_RTM_HDRLEN))
#define RTM_PAYLOAD(_hdr) NLMSG_PAYLOAD((_hdr), NL_RTM_HDRLEN)
#endif
#define RT_TABLE_MAIN 0
#define RT_TABLE_UNSPEC 0xFFFFFFFF
enum rtattr_type_t {
NL_RTA_UNSPEC,
NL_RTA_DST = 1,
NL_RTA_SRC = 2,
NL_RTA_IIF = 3,
NL_RTA_OIF = 4,
NL_RTA_GATEWAY = 5,
NL_RTA_PRIORITY = 6,
NL_RTA_PREFSRC = 7,
NL_RTA_METRICS = 8,
NL_RTA_MULTIPATH = 9,
NL_RTA_PROTOINFO = 10,
NL_RTA_KNH_ID = 10,
NL_RTA_FLOW = 11,
NL_RTA_CACHEINFO = 12,
NL_RTA_SESSION = 13,
NL_RTA_WEIGHT = 13,
NL_RTA_MP_ALGO = 14,
NL_RTA_RTFLAGS = 14,
NL_RTA_TABLE = 15,
NL_RTA_MARK = 16,
NL_RTA_MFC_STATS = 17,
NL_RTA_VIA = 18,
NL_RTA_NEWDST = 19,
NL_RTA_PREF = 20,
NL_RTA_ENCAP_TYPE = 21,
NL_RTA_ENCAP = 22,
NL_RTA_EXPIRES = 23,
NL_RTA_PAD = 24,
NL_RTA_UID = 25,
NL_RTA_TTL_PROPAGATE = 26,
NL_RTA_IP_PROTO = 27,
NL_RTA_SPORT = 28,
NL_RTA_DPORT = 29,
NL_RTA_NH_ID = 30,
__RTA_MAX
};
#define NL_RTA_MAX (__RTA_MAX - 1)
#ifndef _KERNEL
#define RTA_UNSPEC NL_RTA_UNSPEC
#define RTA_DST NL_RTA_DST
#define RTA_SRC NL_RTA_SRC
#define RTA_IIF NL_RTA_IIF
#define RTA_OIF NL_RTA_OIF
#define RTA_GATEWAY NL_RTA_GATEWAY
#define RTA_PRIORITY NL_RTA_PRIORITY
#define RTA_PREFSRC NL_RTA_PREFSRC
#define RTA_IFA NL_RTA_PREFSRC
#define RTA_METRICS NL_RTA_METRICS
#define RTA_MULTIPATH NL_RTA_MULTIPATH
#define RTA_PROTOINFO NL_RTA_PROTOINFO
#define RTA_KNH_ID NL_RTA_KNH_ID
#define RTA_FLOW NL_RTA_FLOW
#define RTA_CACHEINFO NL_RTA_CACHEINFO
#define RTA_SESSION NL_RTA_SESSION
#define RTA_MP_ALGO NL_RTA_MP_ALGO
#define RTA_TABLE NL_RTA_TABLE
#define RTA_MARK NL_RTA_MARK
#define RTA_MFC_STATS NL_RTA_MFC_STATS
#define RTA_VIA NL_RTA_VIA
#define RTA_NEWDST NL_RTA_NEWDST
#define RTA_PREF NL_RTA_PREF
#define RTA_ENCAP_TYPE NL_RTA_ENCAP_TYPE
#define RTA_ENCAP NL_RTA_ENCAP
#define RTA_EXPIRES NL_RTA_EXPIRES
#define RTA_PAD NL_RTA_PAD
#define RTA_UID NL_RTA_UID
#define RTA_TTL_PROPAGATE NL_RTA_TTL_PROPAGATE
#define RTA_IP_PROTO NL_RTA_IP_PROTO
#define RTA_SPORT NL_RTA_SPORT
#define RTA_DPORT NL_RTA_DPORT
#define RTA_NH_ID NL_RTA_NH_ID
#define RTA_MAX NL_RTA_MAX
#endif
struct rtattr {
unsigned short rta_len;
unsigned short rta_type;
};
#define NL_RTA_ALIGN_SIZE NL_ITEM_ALIGN_SIZE
#define NL_RTA_ALIGN NL_ITEM_ALIGN
#define NL_RTA_HDRLEN ((int)sizeof(struct rtattr))
#define NL_RTA_DATA_LEN(_rta) ((int)((_rta)->rta_len - NL_RTA_HDRLEN))
#define NL_RTA_DATA(_rta) NL_ITEM_DATA(_rta, NL_RTA_HDRLEN)
#define NL_RTA_DATA_CONST(_rta) NL_ITEM_DATA_CONST(_rta, NL_RTA_HDRLEN)
#ifndef _KERNEL
#define RTA_ALIGNTO NL_RTA_ALIGN_SIZE
#define RTA_ALIGN(_len) NL_RTA_ALIGN(_len)
#define _RTA_LEN(_rta) ((int)(_rta)->rta_len)
#define _RTA_ALIGNED_LEN(_rta) RTA_ALIGN(_RTA_LEN(_rta))
#define RTA_OK(_rta, _len) NL_ITEM_OK(_rta, _len, NL_RTA_HDRLEN, _RTA_LEN)
#define RTA_NEXT(_rta, _len) NL_ITEM_ITER(_rta, _len, _RTA_ALIGNED_LEN)
#define RTA_LENGTH(_len) (NL_RTA_HDRLEN + (_len))
#define RTA_SPACE(_len) RTA_ALIGN(RTA_LENGTH(_len))
#define RTA_DATA(_rta) NL_RTA_DATA(_rta)
#define RTA_PAYLOAD(_rta) ((int)(_RTA_LEN(_rta) - NL_RTA_HDRLEN))
#endif
struct rtvia {
sa_family_t rtvia_family;
uint8_t rtvia_addr[0];
};
enum {
NL_RTAX_UNSPEC,
NL_RTAX_LOCK = 1,
NL_RTAX_MTU = 2,
NL_RTAX_WINDOW = 3,
NL_RTAX_RTT = 4,
NL_RTAX_RTTVAR = 5,
NL_RTAX_SSTHRESH = 6,
NL_RTAX_CWND = 7,
NL_RTAX_ADVMSS = 8,
NL_RTAX_REORDERING = 9,
NL_RTAX_HOPLIMIT = 10,
NL_RTAX_INITCWND = 11,
NL_RTAX_FEATURES = 12,
NL_RTAX_RTO_MIN = 13,
NL_RTAX_INITRWND = 14,
NL_RTAX_QUICKACK = 15,
NL_RTAX_CC_ALGO = 16,
NL_RTAX_FASTOPEN_NO_COOKIE = 17,
__NL_RTAX_MAX
};
#define NL_RTAX_MAX (__NL_RTAX_MAX - 1)
#define RTAX_FEATURE_ECN (1 << 0)
#define RTAX_FEATURE_SACK (1 << 1)
#define RTAX_FEATURE_TIMESTAMP (1 << 2)
#define RTAX_FEATURE_ALLFRAG (1 << 3)
#define RTAX_FEATURE_MASK \
(RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | RTAX_FEATURE_TIMESTAMP | \
RTAX_FEATURE_ALLFRAG)
#ifndef _KERNEL
#define RTAX_UNSPEC NL_RTAX_UNSPEC
#define RTAX_LOCK NL_RTAX_LOCK
#define RTAX_MTU NL_RTAX_MTU
#define RTAX_WINDOW NL_RTAX_WINDOW
#define RTAX_RTT NL_RTAX_RTT
#define RTAX_RTTVAR NL_RTAX_RTTVAR
#define RTAX_SSTHRESH NL_RTAX_SSTHRESH
#define RTAX_CWND NL_RTAX_CWND
#define RTAX_ADVMSS NL_RTAX_ADVMSS
#define RTAX_REORDERING NL_RTAX_REORDERING
#define RTAX_HOPLIMIT NL_RTAX_HOPLIMIT
#define RTAX_INITCWND NL_RTAX_INITCWND
#define RTAX_FEATURES NL_RTAX_FEATURES
#define RTAX_RTO_MIN NL_RTAX_RTO_MIN
#define RTAX_INITRWND NL_RTAX_INITRWND
#define RTAX_QUICKACK NL_RTAX_QUICKACK
#define RTAX_CC_ALGO NL_RTAX_CC_ALGO
#define RTAX_FASTOPEN_NO_COOKIE NL_RTAX_FASTOPEN_NO_COOKIE
#endif
struct rtnexthop {
unsigned short rtnh_len;
unsigned char rtnh_flags;
unsigned char rtnh_hops;
int rtnh_ifindex;
};
#define RTNH_F_DEAD 0x01
#define RTNH_F_PERVASIVE 0x02
#define RTNH_F_ONLINK 0x04
#define RTNH_F_OFFLOAD 0x08
#define RTNH_F_LINKDOWN 0x10
#define RTNH_F_UNRESOLVED 0x20
#define RTNH_F_TRAP 0x40
#define RTNH_COMPARE_MASK (RTNH_F_DEAD | RTNH_F_LINKDOWN | \
RTNH_F_OFFLOAD | RTNH_F_TRAP)
#define RTNH_ALIGNTO NL_ITEM_ALIGN_SIZE
#define RTNH_ALIGN(_len) NL_ITEM_ALIGN(_len)
#define RTNH_HDRLEN ((int)sizeof(struct rtnexthop))
#define _RTNH_LEN(_nh) ((int)(_nh)->rtnh_len)
#define _RTNH_ALIGNED_LEN(_nh) RTNH_ALIGN(_RTNH_LEN(_nh))
#define RTNH_OK(_nh, _len) NL_ITEM_OK(_nh, _len, RTNH_HDRLEN, _RTNH_LEN)
#define RTNH_NEXT(_nh) ((struct rtnexthop *)((char *)(_nh) + _RTNH_ALIGNED_LEN(_nh)))
#define RTNH_LENGTH(_len) (RTNH_HDRLEN + (_len))
#define RTNH_SPACE(_len) RTNH_ALIGN(RTNH_LENGTH(_len))
#define RTNH_DATA(_nh) ((struct rtattr *)NL_ITEM_DATA(_nh, RTNH_HDRLEN))
struct rtgenmsg {
unsigned char rtgen_family;
};
#endif