Merge branch 'bridge_mode'
authorDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2014 23:24:56 +0000 (18:24 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2014 23:24:56 +0000 (18:24 -0500)
Roopa Prabhu says:

====================
remove bridge mode BRIDGE_MODE_SWDEV

BRIDGE_MODE_SWDEV was introduced to indicate switchdev offloads
for bridging from user space (In other words to call into the hw switch
port driver directly). But user can use existing BRIDGE_FLAGS_SELF
to call into the hw switch port driver today. swdev mode is not required
anymore. So, this patch removes it.

v4 - v5
    incorporate comments
    - Define BRIDGE_MODE_UNDEF to handle cases where mode is not defined
    - reverse the order of patches
    - include patch comments in all patches
====================

Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/rocker/rocker.c
include/uapi/linux/if_bridge.h
net/core/rtnetlink.c

index 5536435..2f398fa 100644 (file)
@@ -3717,27 +3717,11 @@ static int rocker_port_bridge_setlink(struct net_device *dev,
 {
        struct rocker_port *rocker_port = netdev_priv(dev);
        struct nlattr *protinfo;
-       struct nlattr *afspec;
        struct nlattr *attr;
-       u16 mode;
        int err;
 
        protinfo = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg),
                                   IFLA_PROTINFO);
-       afspec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
-
-       if (afspec) {
-               attr = nla_find_nested(afspec, IFLA_BRIDGE_MODE);
-               if (attr) {
-                       if (nla_len(attr) < sizeof(mode))
-                               return -EINVAL;
-
-                       mode = nla_get_u16(attr);
-                       if (mode != BRIDGE_MODE_SWDEV)
-                               return -EINVAL;
-               }
-       }
-
        if (protinfo) {
                attr = nla_find_nested(protinfo, IFLA_BRPORT_LEARNING);
                if (attr) {
@@ -3772,7 +3756,7 @@ static int rocker_port_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
                                      u32 filter_mask)
 {
        struct rocker_port *rocker_port = netdev_priv(dev);
-       u16 mode = BRIDGE_MODE_SWDEV;
+       u16 mode = BRIDGE_MODE_UNDEF;
        u32 mask = BR_LEARNING | BR_LEARNING_SYNC;
 
        return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode,
index 296a556..b03ee8f 100644 (file)
@@ -105,7 +105,7 @@ struct __fdb_entry {
 
 #define BRIDGE_MODE_VEB                0       /* Default loopback mode */
 #define BRIDGE_MODE_VEPA       1       /* 802.1Qbg defined VEPA mode */
-#define BRIDGE_MODE_SWDEV      2       /* Full switch device offload */
+#define BRIDGE_MODE_UNDEF      0xFFFF  /* mode undefined */
 
 /* Bridge management nested attributes
  * [IFLA_AF_SPEC] = {
index a9be2c1..eaa057f 100644 (file)
@@ -2751,11 +2751,17 @@ int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
        if (!br_afspec)
                goto nla_put_failure;
 
-       if (nla_put_u16(skb, IFLA_BRIDGE_FLAGS, BRIDGE_FLAGS_SELF) ||
-           nla_put_u16(skb, IFLA_BRIDGE_MODE, mode)) {
+       if (nla_put_u16(skb, IFLA_BRIDGE_FLAGS, BRIDGE_FLAGS_SELF)) {
                nla_nest_cancel(skb, br_afspec);
                goto nla_put_failure;
        }
+
+       if (mode != BRIDGE_MODE_UNDEF) {
+               if (nla_put_u16(skb, IFLA_BRIDGE_MODE, mode)) {
+                       nla_nest_cancel(skb, br_afspec);
+                       goto nla_put_failure;
+               }
+       }
        nla_nest_end(skb, br_afspec);
 
        protinfo = nla_nest_start(skb, IFLA_PROTINFO | NLA_F_NESTED);