bridge: make learning and unicast-flood configurable per bridge port
[project/netifd.git] / system-linux.c
index 351a994dc70270aece9f015b254f76bb9234de09..621f99b3fd6984412aeac47ef26a53370b7b321a 100644 (file)
@@ -372,6 +372,16 @@ static void system_bridge_set_startup_query_interval(struct device *dev, const c
                              dev->ifname, val);
 }
 
+static void system_bridge_set_learning(struct device *dev, const char *val)
+{
+       system_set_dev_sysctl("/sys/class/net/%s/brport/learning", dev->ifname, val);
+}
+
+static void system_bridge_set_unicast_flood(struct device *dev, const char *val)
+{
+       system_set_dev_sysctl("/sys/class/net/%s/brport/unicast_flood", dev->ifname, val);
+}
+
 static int system_get_sysctl(const char *path, char *buf, const size_t buf_sz)
 {
        int fd = -1, ret = -1;
@@ -648,6 +658,14 @@ int system_bridge_addif(struct device *bridge, struct device *dev)
                system_bridge_set_multicast_router(dev, buf, false);
        }
 
+       if (dev->settings.flags & DEV_OPT_LEARNING &&
+           !dev->settings.learning)
+               system_bridge_set_learning(dev, "0");
+
+       if (dev->settings.flags & DEV_OPT_UNICAST_FLOOD &&
+           !dev->settings.unicast_flood)
+               system_bridge_set_unicast_flood(dev, "0");
+
        return ret;
 }