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