mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 06:15:08 +07:00
38428d6871
This patch introduces ecmp nexthops and nexthop groups for mac fdb entries. In subsequent patches this is used by the vxlan driver fdb entries. The use case is E-VPN multihoming [1,2,3] which requires bridged vxlan traffic to be load balanced to remote switches (vteps) belonging to the same multi-homed ethernet segment (This is analogous to a multi-homed LAG but over vxlan). Changes include new nexthop flag NHA_FDB for nexthops referenced by fdb entries. These nexthops only have ip. This patch includes appropriate checks to avoid routes referencing such nexthops. example: $ip nexthop add id 12 via 172.16.1.2 fdb $ip nexthop add id 13 via 172.16.1.3 fdb $ip nexthop add id 102 group 12/13 fdb $bridge fdb add 02:02:00:00:00:13 dev vxlan1000 nhid 101 self [1] E-VPN https://tools.ietf.org/html/rfc7432 [2] E-VPN VxLAN: https://tools.ietf.org/html/rfc8365 [3] LPC talk with mention of nexthop groups for L2 ecmp http://vger.kernel.org/lpc_net2018_talks/scaling_bridge_fdb_database_slidesV3.pdf v4 - fixed uninitialized variable reported by kernel test robot Reported-by: kernel test robot <rong.a.chen@intel.com> Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Reviewed-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
#ifndef _UAPI_LINUX_NEXTHOP_H
|
|
#define _UAPI_LINUX_NEXTHOP_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct nhmsg {
|
|
unsigned char nh_family;
|
|
unsigned char nh_scope; /* return only */
|
|
unsigned char nh_protocol; /* Routing protocol that installed nh */
|
|
unsigned char resvd;
|
|
unsigned int nh_flags; /* RTNH_F flags */
|
|
};
|
|
|
|
/* entry in a nexthop group */
|
|
struct nexthop_grp {
|
|
__u32 id; /* nexthop id - must exist */
|
|
__u8 weight; /* weight of this nexthop */
|
|
__u8 resvd1;
|
|
__u16 resvd2;
|
|
};
|
|
|
|
enum {
|
|
NEXTHOP_GRP_TYPE_MPATH, /* default type if not specified */
|
|
__NEXTHOP_GRP_TYPE_MAX,
|
|
};
|
|
|
|
#define NEXTHOP_GRP_TYPE_MAX (__NEXTHOP_GRP_TYPE_MAX - 1)
|
|
|
|
enum {
|
|
NHA_UNSPEC,
|
|
NHA_ID, /* u32; id for nexthop. id == 0 means auto-assign */
|
|
|
|
NHA_GROUP, /* array of nexthop_grp */
|
|
NHA_GROUP_TYPE, /* u16 one of NEXTHOP_GRP_TYPE */
|
|
/* if NHA_GROUP attribute is added, no other attributes can be set */
|
|
|
|
NHA_BLACKHOLE, /* flag; nexthop used to blackhole packets */
|
|
/* if NHA_BLACKHOLE is added, OIF, GATEWAY, ENCAP can not be set */
|
|
|
|
NHA_OIF, /* u32; nexthop device */
|
|
NHA_GATEWAY, /* be32 (IPv4) or in6_addr (IPv6) gw address */
|
|
NHA_ENCAP_TYPE, /* u16; lwt encap type */
|
|
NHA_ENCAP, /* lwt encap data */
|
|
|
|
/* NHA_OIF can be appended to dump request to return only
|
|
* nexthops using given device
|
|
*/
|
|
NHA_GROUPS, /* flag; only return nexthop groups in dump */
|
|
NHA_MASTER, /* u32; only return nexthops with given master dev */
|
|
|
|
NHA_FDB, /* flag; nexthop belongs to a bridge fdb */
|
|
/* if NHA_FDB is added, OIF, BLACKHOLE, ENCAP cannot be set */
|
|
|
|
__NHA_MAX,
|
|
};
|
|
|
|
#define NHA_MAX (__NHA_MAX - 1)
|
|
#endif
|