From 75e01b2c1194fea803ffd24dcde7a1bd26022947 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Thu, 5 Aug 2021 20:06:12 +0200 Subject: bridge: Add additional src and dest mcast lookup option This adds the new src and dest multicast lookup options to bridge ports. These are not configured on the bridge itself, but on a bridge port. --- include/linux-private/linux/if_link.h | 2 ++ include/netlink/route/link/bridge.h | 2 ++ lib/route/link/bridge.c | 16 ++++++++++++++++ 3 files changed, 20 insertions(+) --- a/include/linux-private/linux/if_link.h +++ b/include/linux-private/linux/if_link.h @@ -338,6 +338,8 @@ enum { IFLA_BRPORT_ISOLATED, IFLA_BRPORT_BACKUP_PORT, IFLA_BRPORT_LEARNING_LIMIT, + IFLA_BRPORT_DEST_LOOKUP, + IFLA_BRPORT_SRC_LOOKUP, __IFLA_BRPORT_MAX }; #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1) --- a/include/netlink/route/link/bridge.h +++ b/include/netlink/route/link/bridge.h @@ -41,6 +41,8 @@ enum rtnl_link_bridge_flags { RTNL_BRIDGE_UNICAST_FLOOD = 0x0010, RTNL_BRIDGE_LEARNING = 0x0020, RTNL_BRIDGE_LEARNING_SYNC = 0x0040, + RTNL_BRIDGE_DEST_LOOKUP = 0x0080, + RTNL_BRIDGE_SRC_LOOKUP = 0x0100, }; #define RTNL_BRIDGE_HWMODE_VEB BRIDGE_MODE_VEB --- a/lib/route/link/bridge.c +++ b/lib/route/link/bridge.c @@ -130,6 +130,8 @@ static struct nla_policy br_attrs_policy [IFLA_BRPORT_LEARNING_SYNC] = { .type = NLA_U8 }, [IFLA_BRPORT_LEARNING_LIMIT] = { .type = NLA_S32 }, [IFLA_BRPORT_UNICAST_FLOOD] = { .type = NLA_U8 }, + [IFLA_BRPORT_DEST_LOOKUP] = { .type = NLA_U8 }, + [IFLA_BRPORT_SRC_LOOKUP] = { .type = NLA_U8 }, }; static struct nla_policy bi_attrs_policy[IFLA_BR_MAX+1] = { @@ -197,6 +199,10 @@ static int bridge_parse_protinfo(struct check_flag(link, br_attrs, IFLA_BRPORT_LEARNING, RTNL_BRIDGE_LEARNING); check_flag(link, br_attrs, IFLA_BRPORT_LEARNING_SYNC, RTNL_BRIDGE_LEARNING_SYNC); + check_flag(link, br_attrs, IFLA_BRPORT_DEST_LOOKUP, + RTNL_BRIDGE_DEST_LOOKUP); + check_flag(link, br_attrs, IFLA_BRPORT_SRC_LOOKUP, + RTNL_BRIDGE_SRC_LOOKUP); return 0; } @@ -312,6 +318,14 @@ static int bridge_fill_pi(struct rtnl_li NLA_PUT_U8(msg, IFLA_BRPORT_LEARNING_SYNC, bd->b_flags & RTNL_BRIDGE_LEARNING_SYNC); } + if (bd->b_flags_mask & RTNL_BRIDGE_DEST_LOOKUP) { + NLA_PUT_U8(msg, IFLA_BRPORT_DEST_LOOKUP, + bd->b_flags & RTNL_BRIDGE_DEST_LOOKUP); + } + if (bd->b_flags_mask & RTNL_BRIDGE_SRC_LOOKUP) { + NLA_PUT_U8(msg, IFLA_BRPORT_SRC_LOOKUP, + bd->b_flags & RTNL_BRIDGE_SRC_LOOKUP); + } } if (bd->ce_mask & BRIDGE_ATTR_COST) @@ -874,6 +888,8 @@ static const struct trans_tbl bridge_fla __ADD(RTNL_BRIDGE_UNICAST_FLOOD, flood), __ADD(RTNL_BRIDGE_LEARNING, learning), __ADD(RTNL_BRIDGE_LEARNING_SYNC, learning_sync), + __ADD(RTNL_BRIDGE_DEST_LOOKUP, dest_lookup), + __ADD(RTNL_BRIDGE_SRC_LOOKUP, src_lookup), }; /**