1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_NEXTHOP_H 3*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_NEXTHOP_H 4*f80ad8b4SAndroid Build Coastguard Worker 5*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 6*f80ad8b4SAndroid Build Coastguard Worker 7*f80ad8b4SAndroid Build Coastguard Worker struct nhmsg { 8*f80ad8b4SAndroid Build Coastguard Worker unsigned char nh_family; 9*f80ad8b4SAndroid Build Coastguard Worker unsigned char nh_scope; /* return only */ 10*f80ad8b4SAndroid Build Coastguard Worker unsigned char nh_protocol; /* Routing protocol that installed nh */ 11*f80ad8b4SAndroid Build Coastguard Worker unsigned char resvd; 12*f80ad8b4SAndroid Build Coastguard Worker unsigned int nh_flags; /* RTNH_F flags */ 13*f80ad8b4SAndroid Build Coastguard Worker }; 14*f80ad8b4SAndroid Build Coastguard Worker 15*f80ad8b4SAndroid Build Coastguard Worker /* entry in a nexthop group */ 16*f80ad8b4SAndroid Build Coastguard Worker struct nexthop_grp { 17*f80ad8b4SAndroid Build Coastguard Worker __u32 id; /* nexthop id - must exist */ 18*f80ad8b4SAndroid Build Coastguard Worker __u8 weight; /* weight of this nexthop */ 19*f80ad8b4SAndroid Build Coastguard Worker __u8 resvd1; 20*f80ad8b4SAndroid Build Coastguard Worker __u16 resvd2; 21*f80ad8b4SAndroid Build Coastguard Worker }; 22*f80ad8b4SAndroid Build Coastguard Worker 23*f80ad8b4SAndroid Build Coastguard Worker enum { 24*f80ad8b4SAndroid Build Coastguard Worker NEXTHOP_GRP_TYPE_MPATH, /* hash-threshold nexthop group 25*f80ad8b4SAndroid Build Coastguard Worker * default type if not specified 26*f80ad8b4SAndroid Build Coastguard Worker */ 27*f80ad8b4SAndroid Build Coastguard Worker NEXTHOP_GRP_TYPE_RES, /* resilient nexthop group */ 28*f80ad8b4SAndroid Build Coastguard Worker __NEXTHOP_GRP_TYPE_MAX, 29*f80ad8b4SAndroid Build Coastguard Worker }; 30*f80ad8b4SAndroid Build Coastguard Worker 31*f80ad8b4SAndroid Build Coastguard Worker #define NEXTHOP_GRP_TYPE_MAX (__NEXTHOP_GRP_TYPE_MAX - 1) 32*f80ad8b4SAndroid Build Coastguard Worker 33*f80ad8b4SAndroid Build Coastguard Worker #define NHA_OP_FLAG_DUMP_STATS BIT(0) 34*f80ad8b4SAndroid Build Coastguard Worker #define NHA_OP_FLAG_DUMP_HW_STATS BIT(1) 35*f80ad8b4SAndroid Build Coastguard Worker 36*f80ad8b4SAndroid Build Coastguard Worker enum { 37*f80ad8b4SAndroid Build Coastguard Worker NHA_UNSPEC, 38*f80ad8b4SAndroid Build Coastguard Worker NHA_ID, /* u32; id for nexthop. id == 0 means auto-assign */ 39*f80ad8b4SAndroid Build Coastguard Worker 40*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP, /* array of nexthop_grp */ 41*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP_TYPE, /* u16 one of NEXTHOP_GRP_TYPE */ 42*f80ad8b4SAndroid Build Coastguard Worker /* if NHA_GROUP attribute is added, no other attributes can be set */ 43*f80ad8b4SAndroid Build Coastguard Worker 44*f80ad8b4SAndroid Build Coastguard Worker NHA_BLACKHOLE, /* flag; nexthop used to blackhole packets */ 45*f80ad8b4SAndroid Build Coastguard Worker /* if NHA_BLACKHOLE is added, OIF, GATEWAY, ENCAP can not be set */ 46*f80ad8b4SAndroid Build Coastguard Worker 47*f80ad8b4SAndroid Build Coastguard Worker NHA_OIF, /* u32; nexthop device */ 48*f80ad8b4SAndroid Build Coastguard Worker NHA_GATEWAY, /* be32 (IPv4) or in6_addr (IPv6) gw address */ 49*f80ad8b4SAndroid Build Coastguard Worker NHA_ENCAP_TYPE, /* u16; lwt encap type */ 50*f80ad8b4SAndroid Build Coastguard Worker NHA_ENCAP, /* lwt encap data */ 51*f80ad8b4SAndroid Build Coastguard Worker 52*f80ad8b4SAndroid Build Coastguard Worker /* NHA_OIF can be appended to dump request to return only 53*f80ad8b4SAndroid Build Coastguard Worker * nexthops using given device 54*f80ad8b4SAndroid Build Coastguard Worker */ 55*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUPS, /* flag; only return nexthop groups in dump */ 56*f80ad8b4SAndroid Build Coastguard Worker NHA_MASTER, /* u32; only return nexthops with given master dev */ 57*f80ad8b4SAndroid Build Coastguard Worker 58*f80ad8b4SAndroid Build Coastguard Worker NHA_FDB, /* flag; nexthop belongs to a bridge fdb */ 59*f80ad8b4SAndroid Build Coastguard Worker /* if NHA_FDB is added, OIF, BLACKHOLE, ENCAP cannot be set */ 60*f80ad8b4SAndroid Build Coastguard Worker 61*f80ad8b4SAndroid Build Coastguard Worker /* nested; resilient nexthop group attributes */ 62*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_GROUP, 63*f80ad8b4SAndroid Build Coastguard Worker /* nested; nexthop bucket attributes */ 64*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_BUCKET, 65*f80ad8b4SAndroid Build Coastguard Worker 66*f80ad8b4SAndroid Build Coastguard Worker /* u32; operation-specific flags */ 67*f80ad8b4SAndroid Build Coastguard Worker NHA_OP_FLAGS, 68*f80ad8b4SAndroid Build Coastguard Worker 69*f80ad8b4SAndroid Build Coastguard Worker /* nested; nexthop group stats */ 70*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP_STATS, 71*f80ad8b4SAndroid Build Coastguard Worker 72*f80ad8b4SAndroid Build Coastguard Worker /* u32; nexthop hardware stats enable */ 73*f80ad8b4SAndroid Build Coastguard Worker NHA_HW_STATS_ENABLE, 74*f80ad8b4SAndroid Build Coastguard Worker 75*f80ad8b4SAndroid Build Coastguard Worker /* u32; read-only; whether any driver collects HW stats */ 76*f80ad8b4SAndroid Build Coastguard Worker NHA_HW_STATS_USED, 77*f80ad8b4SAndroid Build Coastguard Worker 78*f80ad8b4SAndroid Build Coastguard Worker __NHA_MAX, 79*f80ad8b4SAndroid Build Coastguard Worker }; 80*f80ad8b4SAndroid Build Coastguard Worker 81*f80ad8b4SAndroid Build Coastguard Worker #define NHA_MAX (__NHA_MAX - 1) 82*f80ad8b4SAndroid Build Coastguard Worker 83*f80ad8b4SAndroid Build Coastguard Worker enum { 84*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_GROUP_UNSPEC, 85*f80ad8b4SAndroid Build Coastguard Worker /* Pad attribute for 64-bit alignment. */ 86*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_GROUP_PAD = NHA_RES_GROUP_UNSPEC, 87*f80ad8b4SAndroid Build Coastguard Worker 88*f80ad8b4SAndroid Build Coastguard Worker /* u16; number of nexthop buckets in a resilient nexthop group */ 89*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_GROUP_BUCKETS, 90*f80ad8b4SAndroid Build Coastguard Worker /* clock_t as u32; nexthop bucket idle timer (per-group) */ 91*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_GROUP_IDLE_TIMER, 92*f80ad8b4SAndroid Build Coastguard Worker /* clock_t as u32; nexthop unbalanced timer */ 93*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_GROUP_UNBALANCED_TIMER, 94*f80ad8b4SAndroid Build Coastguard Worker /* clock_t as u64; nexthop unbalanced time */ 95*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_GROUP_UNBALANCED_TIME, 96*f80ad8b4SAndroid Build Coastguard Worker 97*f80ad8b4SAndroid Build Coastguard Worker __NHA_RES_GROUP_MAX, 98*f80ad8b4SAndroid Build Coastguard Worker }; 99*f80ad8b4SAndroid Build Coastguard Worker 100*f80ad8b4SAndroid Build Coastguard Worker #define NHA_RES_GROUP_MAX (__NHA_RES_GROUP_MAX - 1) 101*f80ad8b4SAndroid Build Coastguard Worker 102*f80ad8b4SAndroid Build Coastguard Worker enum { 103*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_BUCKET_UNSPEC, 104*f80ad8b4SAndroid Build Coastguard Worker /* Pad attribute for 64-bit alignment. */ 105*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_BUCKET_PAD = NHA_RES_BUCKET_UNSPEC, 106*f80ad8b4SAndroid Build Coastguard Worker 107*f80ad8b4SAndroid Build Coastguard Worker /* u16; nexthop bucket index */ 108*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_BUCKET_INDEX, 109*f80ad8b4SAndroid Build Coastguard Worker /* clock_t as u64; nexthop bucket idle time */ 110*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_BUCKET_IDLE_TIME, 111*f80ad8b4SAndroid Build Coastguard Worker /* u32; nexthop id assigned to the nexthop bucket */ 112*f80ad8b4SAndroid Build Coastguard Worker NHA_RES_BUCKET_NH_ID, 113*f80ad8b4SAndroid Build Coastguard Worker 114*f80ad8b4SAndroid Build Coastguard Worker __NHA_RES_BUCKET_MAX, 115*f80ad8b4SAndroid Build Coastguard Worker }; 116*f80ad8b4SAndroid Build Coastguard Worker 117*f80ad8b4SAndroid Build Coastguard Worker #define NHA_RES_BUCKET_MAX (__NHA_RES_BUCKET_MAX - 1) 118*f80ad8b4SAndroid Build Coastguard Worker 119*f80ad8b4SAndroid Build Coastguard Worker enum { 120*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP_STATS_UNSPEC, 121*f80ad8b4SAndroid Build Coastguard Worker 122*f80ad8b4SAndroid Build Coastguard Worker /* nested; nexthop group entry stats */ 123*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP_STATS_ENTRY, 124*f80ad8b4SAndroid Build Coastguard Worker 125*f80ad8b4SAndroid Build Coastguard Worker __NHA_GROUP_STATS_MAX, 126*f80ad8b4SAndroid Build Coastguard Worker }; 127*f80ad8b4SAndroid Build Coastguard Worker 128*f80ad8b4SAndroid Build Coastguard Worker #define NHA_GROUP_STATS_MAX (__NHA_GROUP_STATS_MAX - 1) 129*f80ad8b4SAndroid Build Coastguard Worker 130*f80ad8b4SAndroid Build Coastguard Worker enum { 131*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP_STATS_ENTRY_UNSPEC, 132*f80ad8b4SAndroid Build Coastguard Worker 133*f80ad8b4SAndroid Build Coastguard Worker /* u32; nexthop id of the nexthop group entry */ 134*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP_STATS_ENTRY_ID, 135*f80ad8b4SAndroid Build Coastguard Worker 136*f80ad8b4SAndroid Build Coastguard Worker /* uint; number of packets forwarded via the nexthop group entry */ 137*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP_STATS_ENTRY_PACKETS, 138*f80ad8b4SAndroid Build Coastguard Worker 139*f80ad8b4SAndroid Build Coastguard Worker /* uint; number of packets forwarded via the nexthop group entry in 140*f80ad8b4SAndroid Build Coastguard Worker * hardware 141*f80ad8b4SAndroid Build Coastguard Worker */ 142*f80ad8b4SAndroid Build Coastguard Worker NHA_GROUP_STATS_ENTRY_PACKETS_HW, 143*f80ad8b4SAndroid Build Coastguard Worker 144*f80ad8b4SAndroid Build Coastguard Worker __NHA_GROUP_STATS_ENTRY_MAX, 145*f80ad8b4SAndroid Build Coastguard Worker }; 146*f80ad8b4SAndroid Build Coastguard Worker 147*f80ad8b4SAndroid Build Coastguard Worker #define NHA_GROUP_STATS_ENTRY_MAX (__NHA_GROUP_STATS_ENTRY_MAX - 1) 148*f80ad8b4SAndroid Build Coastguard Worker 149*f80ad8b4SAndroid Build Coastguard Worker #endif 150