]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/switchdev/switchdev.c
switchdev: add new switchdev_port_bridge_getlink
[karo-tx-linux.git] / net / switchdev / switchdev.c
index 0e15b6f6bb56a61c181f28e380f55a0f81b932a9..9210355ec965b6bde0ad0723692facd1c7283b4a 100644 (file)
@@ -358,6 +358,34 @@ int call_switchdev_notifiers(unsigned long val, struct net_device *dev,
 }
 EXPORT_SYMBOL_GPL(call_switchdev_notifiers);
 
+/**
+ *     switchdev_port_bridge_getlink - Get bridge port attributes
+ *
+ *     @dev: port device
+ *
+ *     Called for SELF on rtnl_bridge_getlink to get bridge port
+ *     attributes.
+ */
+int switchdev_port_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
+                                 struct net_device *dev, u32 filter_mask,
+                                 int nlflags)
+{
+       struct switchdev_attr attr = {
+               .id = SWITCHDEV_ATTR_PORT_BRIDGE_FLAGS,
+       };
+       u16 mode = BRIDGE_MODE_UNDEF;
+       u32 mask = BR_LEARNING | BR_LEARNING_SYNC;
+       int err;
+
+       err = switchdev_port_attr_get(dev, &attr);
+       if (err)
+               return err;
+
+       return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode,
+                                      attr.brport_flags, mask, nlflags);
+}
+EXPORT_SYMBOL_GPL(switchdev_port_bridge_getlink);
+
 static int switchdev_port_br_setflag(struct net_device *dev,
                                     struct nlattr *nlattr,
                                     unsigned long brport_flag)