]> granicus.if.org Git - libnl/commitdiff
lib/route: Extend Bridge Flags
authorJef Oliver <jef.oliver@intel.com>
Thu, 1 Sep 2016 00:27:07 +0000 (17:27 -0700)
committerThomas Haller <thaller@redhat.com>
Sat, 24 Sep 2016 11:51:29 +0000 (13:51 +0200)
This patch adds support for the following bridge port flags:

IFLA_BRPORT_UNICAST_FLOOD
IFLA_BRPORT_LEARNING
IFLA_BRPORT_LEARNING_SYNC

Signed-off-by: Jef Oliver <jef.oliver@intel.com>
Signed-off-by: Thomas Haller <thaller@redhat.com>
include/netlink/route/link/bridge.h
lib/route/link/bridge.c

index b5f9b8183f96a3dbb17011bfe78ec40c48d2c773..b7b9ae972945d8c2d47716b467fe0f2f5321e2a1 100644 (file)
@@ -38,6 +38,9 @@ enum rtnl_link_bridge_flags {
        RTNL_BRIDGE_BPDU_GUARD          = 0x0002,
        RTNL_BRIDGE_ROOT_BLOCK          = 0x0004,
        RTNL_BRIDGE_FAST_LEAVE          = 0x0008,
+       RTNL_BRIDGE_UNICAST_FLOOD       = 0x0010,
+       RTNL_BRIDGE_LEARNING            = 0x0020,
+       RTNL_BRIDGE_LEARNING_SYNC       = 0x0040,
 };
 
 extern struct rtnl_link *rtnl_link_bridge_alloc(void);
index 015d24fcf60ba57cc5de22e1c305de911fe41718..a47b79b7d1daf3b5c85e750878e0a5e4db5633e2 100644 (file)
@@ -111,6 +111,9 @@ static struct nla_policy br_attrs_policy[IFLA_BRPORT_MAX+1] = {
        [IFLA_BRPORT_GUARD]             = { .type = NLA_U8 },
        [IFLA_BRPORT_PROTECT]           = { .type = NLA_U8 },
        [IFLA_BRPORT_FAST_LEAVE]        = { .type = NLA_U8 },
+       [IFLA_BRPORT_LEARNING]          = { .type = NLA_U8 },
+       [IFLA_BRPORT_LEARNING_SYNC]     = { .type = NLA_U8 },
+       [IFLA_BRPORT_UNICAST_FLOOD]     = { .type = NLA_U8 },
 };
 
 static void check_flag(struct rtnl_link *link, struct nlattr *attrs[],
@@ -163,6 +166,11 @@ static int bridge_parse_protinfo(struct rtnl_link *link, struct nlattr *attr,
        check_flag(link, br_attrs, IFLA_BRPORT_GUARD, RTNL_BRIDGE_BPDU_GUARD);
        check_flag(link, br_attrs, IFLA_BRPORT_PROTECT, RTNL_BRIDGE_ROOT_BLOCK);
        check_flag(link, br_attrs, IFLA_BRPORT_FAST_LEAVE, RTNL_BRIDGE_FAST_LEAVE);
+       check_flag(link, br_attrs, IFLA_BRPORT_UNICAST_FLOOD,
+                          RTNL_BRIDGE_UNICAST_FLOOD);
+       check_flag(link, br_attrs, IFLA_BRPORT_LEARNING, RTNL_BRIDGE_LEARNING);
+       check_flag(link, br_attrs, IFLA_BRPORT_LEARNING_SYNC,
+                          RTNL_BRIDGE_LEARNING_SYNC);
 
        return 0;
 }
@@ -246,6 +254,18 @@ static int bridge_fill_pi(struct rtnl_link *link, struct nl_msg *msg,
                        NLA_PUT_U8(msg, IFLA_BRPORT_PROTECT,
                                                bd->b_flags & RTNL_BRIDGE_ROOT_BLOCK);
                }
+               if (bd->b_flags_mask & RTNL_BRIDGE_UNICAST_FLOOD) {
+                       NLA_PUT_U8(msg, IFLA_BRPORT_UNICAST_FLOOD,
+                                               bd->b_flags & RTNL_BRIDGE_UNICAST_FLOOD);
+               }
+               if (bd->b_flags_mask & RTNL_BRIDGE_LEARNING) {
+                       NLA_PUT_U8(msg, IFLA_BRPORT_LEARNING,
+                                               bd->b_flags & RTNL_BRIDGE_LEARNING);
+               }
+               if (bd->b_flags_mask & RTNL_BRIDGE_LEARNING_SYNC) {
+                       NLA_PUT_U8(msg, IFLA_BRPORT_LEARNING_SYNC,
+                                               bd->b_flags & RTNL_BRIDGE_LEARNING_SYNC);
+               }
        }
 
        if (bd->ce_mask & BRIDGE_ATTR_COST)
@@ -646,6 +666,9 @@ int rtnl_link_bridge_unset_flags(struct rtnl_link *link, unsigned int flags)
  *   - RTNL_BRIDGE_BPDU_GUARD
  *   - RTNL_BRIDGE_ROOT_BLOCK
  *   - RTNL_BRIDGE_FAST_LEAVE
+ *   - RTNL_BRIDGE_UNICAST_FLOOD
+ *   - RTNL_BRIDGE_LEARNING
+ *   - RTNL_BRIDGE_LEARNING_SYNC
  *
  * @see rtnl_link_bridge_unset_flags()
  * @see rtnl_link_bridge_get_flags()
@@ -690,6 +713,9 @@ static const struct trans_tbl bridge_flags[] = {
        __ADD(RTNL_BRIDGE_BPDU_GUARD,   bpdu_guard),
        __ADD(RTNL_BRIDGE_ROOT_BLOCK,   root_block),
        __ADD(RTNL_BRIDGE_FAST_LEAVE,   fast_leave),
+       __ADD(RTNL_BRIDGE_UNICAST_FLOOD,        flood),
+       __ADD(RTNL_BRIDGE_LEARNING,                     learning),
+       __ADD(RTNL_BRIDGE_LEARNING_SYNC,        learning_sync),
 };
 
 /**