1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4dc78e53SAndroid Build Coastguard Worker #ifndef _LINUX_NEXTHOP_H 3*4dc78e53SAndroid Build Coastguard Worker #define _LINUX_NEXTHOP_H 4*4dc78e53SAndroid Build Coastguard Worker 5*4dc78e53SAndroid Build Coastguard Worker #include <linux/types.h> 6*4dc78e53SAndroid Build Coastguard Worker 7*4dc78e53SAndroid Build Coastguard Worker struct nhmsg { 8*4dc78e53SAndroid Build Coastguard Worker unsigned char nh_family; 9*4dc78e53SAndroid Build Coastguard Worker unsigned char nh_scope; /* return only */ 10*4dc78e53SAndroid Build Coastguard Worker unsigned char nh_protocol; /* Routing protocol that installed nh */ 11*4dc78e53SAndroid Build Coastguard Worker unsigned char resvd; 12*4dc78e53SAndroid Build Coastguard Worker unsigned int nh_flags; /* RTNH_F flags */ 13*4dc78e53SAndroid Build Coastguard Worker }; 14*4dc78e53SAndroid Build Coastguard Worker 15*4dc78e53SAndroid Build Coastguard Worker /* entry in a nexthop group */ 16*4dc78e53SAndroid Build Coastguard Worker struct nexthop_grp { 17*4dc78e53SAndroid Build Coastguard Worker __u32 id; /* nexthop id - must exist */ 18*4dc78e53SAndroid Build Coastguard Worker __u8 weight; /* weight of this nexthop */ 19*4dc78e53SAndroid Build Coastguard Worker __u8 resvd1; 20*4dc78e53SAndroid Build Coastguard Worker __u16 resvd2; 21*4dc78e53SAndroid Build Coastguard Worker }; 22*4dc78e53SAndroid Build Coastguard Worker 23*4dc78e53SAndroid Build Coastguard Worker enum { 24*4dc78e53SAndroid Build Coastguard Worker NEXTHOP_GRP_TYPE_MPATH, /* hash-threshold nexthop group 25*4dc78e53SAndroid Build Coastguard Worker * default type if not specified 26*4dc78e53SAndroid Build Coastguard Worker */ 27*4dc78e53SAndroid Build Coastguard Worker NEXTHOP_GRP_TYPE_RES, /* resilient nexthop group */ 28*4dc78e53SAndroid Build Coastguard Worker __NEXTHOP_GRP_TYPE_MAX, 29*4dc78e53SAndroid Build Coastguard Worker }; 30*4dc78e53SAndroid Build Coastguard Worker 31*4dc78e53SAndroid Build Coastguard Worker #define NEXTHOP_GRP_TYPE_MAX (__NEXTHOP_GRP_TYPE_MAX - 1) 32*4dc78e53SAndroid Build Coastguard Worker 33*4dc78e53SAndroid Build Coastguard Worker enum { 34*4dc78e53SAndroid Build Coastguard Worker NHA_UNSPEC, 35*4dc78e53SAndroid Build Coastguard Worker NHA_ID, /* u32; id for nexthop. id == 0 means auto-assign */ 36*4dc78e53SAndroid Build Coastguard Worker 37*4dc78e53SAndroid Build Coastguard Worker NHA_GROUP, /* array of nexthop_grp */ 38*4dc78e53SAndroid Build Coastguard Worker NHA_GROUP_TYPE, /* u16 one of NEXTHOP_GRP_TYPE */ 39*4dc78e53SAndroid Build Coastguard Worker /* if NHA_GROUP attribute is added, no other attributes can be set */ 40*4dc78e53SAndroid Build Coastguard Worker 41*4dc78e53SAndroid Build Coastguard Worker NHA_BLACKHOLE, /* flag; nexthop used to blackhole packets */ 42*4dc78e53SAndroid Build Coastguard Worker /* if NHA_BLACKHOLE is added, OIF, GATEWAY, ENCAP can not be set */ 43*4dc78e53SAndroid Build Coastguard Worker 44*4dc78e53SAndroid Build Coastguard Worker NHA_OIF, /* u32; nexthop device */ 45*4dc78e53SAndroid Build Coastguard Worker NHA_GATEWAY, /* be32 (IPv4) or in6_addr (IPv6) gw address */ 46*4dc78e53SAndroid Build Coastguard Worker NHA_ENCAP_TYPE, /* u16; lwt encap type */ 47*4dc78e53SAndroid Build Coastguard Worker NHA_ENCAP, /* lwt encap data */ 48*4dc78e53SAndroid Build Coastguard Worker 49*4dc78e53SAndroid Build Coastguard Worker /* NHA_OIF can be appended to dump request to return only 50*4dc78e53SAndroid Build Coastguard Worker * nexthops using given device 51*4dc78e53SAndroid Build Coastguard Worker */ 52*4dc78e53SAndroid Build Coastguard Worker NHA_GROUPS, /* flag; only return nexthop groups in dump */ 53*4dc78e53SAndroid Build Coastguard Worker NHA_MASTER, /* u32; only return nexthops with given master dev */ 54*4dc78e53SAndroid Build Coastguard Worker 55*4dc78e53SAndroid Build Coastguard Worker NHA_FDB, /* flag; nexthop belongs to a bridge fdb */ 56*4dc78e53SAndroid Build Coastguard Worker /* if NHA_FDB is added, OIF, BLACKHOLE, ENCAP cannot be set */ 57*4dc78e53SAndroid Build Coastguard Worker 58*4dc78e53SAndroid Build Coastguard Worker /* nested; resilient nexthop group attributes */ 59*4dc78e53SAndroid Build Coastguard Worker NHA_RES_GROUP, 60*4dc78e53SAndroid Build Coastguard Worker /* nested; nexthop bucket attributes */ 61*4dc78e53SAndroid Build Coastguard Worker NHA_RES_BUCKET, 62*4dc78e53SAndroid Build Coastguard Worker 63*4dc78e53SAndroid Build Coastguard Worker __NHA_MAX, 64*4dc78e53SAndroid Build Coastguard Worker }; 65*4dc78e53SAndroid Build Coastguard Worker 66*4dc78e53SAndroid Build Coastguard Worker #define NHA_MAX (__NHA_MAX - 1) 67*4dc78e53SAndroid Build Coastguard Worker 68*4dc78e53SAndroid Build Coastguard Worker enum { 69*4dc78e53SAndroid Build Coastguard Worker NHA_RES_GROUP_UNSPEC, 70*4dc78e53SAndroid Build Coastguard Worker /* Pad attribute for 64-bit alignment. */ 71*4dc78e53SAndroid Build Coastguard Worker NHA_RES_GROUP_PAD = NHA_RES_GROUP_UNSPEC, 72*4dc78e53SAndroid Build Coastguard Worker 73*4dc78e53SAndroid Build Coastguard Worker /* u16; number of nexthop buckets in a resilient nexthop group */ 74*4dc78e53SAndroid Build Coastguard Worker NHA_RES_GROUP_BUCKETS, 75*4dc78e53SAndroid Build Coastguard Worker /* clock_t as u32; nexthop bucket idle timer (per-group) */ 76*4dc78e53SAndroid Build Coastguard Worker NHA_RES_GROUP_IDLE_TIMER, 77*4dc78e53SAndroid Build Coastguard Worker /* clock_t as u32; nexthop unbalanced timer */ 78*4dc78e53SAndroid Build Coastguard Worker NHA_RES_GROUP_UNBALANCED_TIMER, 79*4dc78e53SAndroid Build Coastguard Worker /* clock_t as u64; nexthop unbalanced time */ 80*4dc78e53SAndroid Build Coastguard Worker NHA_RES_GROUP_UNBALANCED_TIME, 81*4dc78e53SAndroid Build Coastguard Worker 82*4dc78e53SAndroid Build Coastguard Worker __NHA_RES_GROUP_MAX, 83*4dc78e53SAndroid Build Coastguard Worker }; 84*4dc78e53SAndroid Build Coastguard Worker 85*4dc78e53SAndroid Build Coastguard Worker #define NHA_RES_GROUP_MAX (__NHA_RES_GROUP_MAX - 1) 86*4dc78e53SAndroid Build Coastguard Worker 87*4dc78e53SAndroid Build Coastguard Worker enum { 88*4dc78e53SAndroid Build Coastguard Worker NHA_RES_BUCKET_UNSPEC, 89*4dc78e53SAndroid Build Coastguard Worker /* Pad attribute for 64-bit alignment. */ 90*4dc78e53SAndroid Build Coastguard Worker NHA_RES_BUCKET_PAD = NHA_RES_BUCKET_UNSPEC, 91*4dc78e53SAndroid Build Coastguard Worker 92*4dc78e53SAndroid Build Coastguard Worker /* u16; nexthop bucket index */ 93*4dc78e53SAndroid Build Coastguard Worker NHA_RES_BUCKET_INDEX, 94*4dc78e53SAndroid Build Coastguard Worker /* clock_t as u64; nexthop bucket idle time */ 95*4dc78e53SAndroid Build Coastguard Worker NHA_RES_BUCKET_IDLE_TIME, 96*4dc78e53SAndroid Build Coastguard Worker /* u32; nexthop id assigned to the nexthop bucket */ 97*4dc78e53SAndroid Build Coastguard Worker NHA_RES_BUCKET_NH_ID, 98*4dc78e53SAndroid Build Coastguard Worker 99*4dc78e53SAndroid Build Coastguard Worker __NHA_RES_BUCKET_MAX, 100*4dc78e53SAndroid Build Coastguard Worker }; 101*4dc78e53SAndroid Build Coastguard Worker 102*4dc78e53SAndroid Build Coastguard Worker #define NHA_RES_BUCKET_MAX (__NHA_RES_BUCKET_MAX - 1) 103*4dc78e53SAndroid Build Coastguard Worker 104*4dc78e53SAndroid Build Coastguard Worker #endif 105