|
@@ -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)
|