--- zzzz-none-000/linux-4.9.279/net/bridge/br_sysfs_br.c 2021-08-08 06:38:54.000000000 +0000 +++ puma7-atom-6591-750/linux-4.9.279/net/bridge/br_sysfs_br.c 2023-02-08 11:43:43.000000000 +0000 @@ -440,6 +440,23 @@ } static DEVICE_ATTR_RW(hash_max); +static ssize_t multicast_igmp_version_show(struct device *d, + struct device_attribute *attr, + char *buf) +{ + struct net_bridge *br = to_bridge(d); + + return sprintf(buf, "%u\n", br->multicast_igmp_version); +} + +static ssize_t multicast_igmp_version_store(struct device *d, + struct device_attribute *attr, + const char *buf, size_t len) +{ + return store_bridge_parm(d, buf, len, br_multicast_set_igmp_version); +} +static DEVICE_ATTR_RW(multicast_igmp_version); + static ssize_t multicast_last_member_count_show(struct device *d, struct device_attribute *attr, char *buf) @@ -642,6 +659,25 @@ return store_bridge_parm(d, buf, len, set_stats_enabled); } static DEVICE_ATTR_RW(multicast_stats_enabled); + +#if IS_ENABLED(CONFIG_IPV6) +static ssize_t multicast_mld_version_show(struct device *d, + struct device_attribute *attr, + char *buf) +{ + struct net_bridge *br = to_bridge(d); + + return sprintf(buf, "%u\n", br->multicast_mld_version); +} + +static ssize_t multicast_mld_version_store(struct device *d, + struct device_attribute *attr, + const char *buf, size_t len) +{ + return store_bridge_parm(d, buf, len, br_multicast_set_mld_version); +} +static DEVICE_ATTR_RW(multicast_mld_version); +#endif #endif #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) static ssize_t nf_call_iptables_show( @@ -706,6 +742,73 @@ return store_bridge_parm(d, buf, len, set_nf_call_arptables); } static DEVICE_ATTR_RW(nf_call_arptables); + +static ssize_t show_nf_disable_iptables( + struct device *d, struct device_attribute *attr, char *buf) +{ + struct net_bridge *br = to_bridge(d); + return sprintf(buf, "%u\n", br->nf_disable_iptables); +} + +static int set_nf_disable_iptables(struct net_bridge *br, unsigned long val) +{ + br->nf_disable_iptables = val ? true : false; + return 0; +} + +static ssize_t store_nf_disable_iptables( + struct device *d, struct device_attribute *attr, const char *buf, + size_t len) +{ + return store_bridge_parm(d, buf, len, set_nf_disable_iptables); +} +static DEVICE_ATTR(nf_disable_iptables, S_IRUGO | S_IWUSR, + show_nf_disable_iptables, store_nf_disable_iptables); + +static ssize_t show_nf_disable_ip6tables( + struct device *d, struct device_attribute *attr, char *buf) +{ + struct net_bridge *br = to_bridge(d); + return sprintf(buf, "%u\n", br->nf_disable_ip6tables); +} + +static int set_nf_disable_ip6tables(struct net_bridge *br, unsigned long val) +{ + br->nf_disable_ip6tables = val ? true : false; + return 0; +} + +static ssize_t store_nf_disable_ip6tables( + struct device *d, struct device_attribute *attr, const char *buf, + size_t len) +{ + return store_bridge_parm(d, buf, len, set_nf_disable_ip6tables); +} +static DEVICE_ATTR(nf_disable_ip6tables, S_IRUGO | S_IWUSR, + show_nf_disable_ip6tables, store_nf_disable_ip6tables); + +static ssize_t show_nf_disable_arptables( + struct device *d, struct device_attribute *attr, char *buf) +{ + struct net_bridge *br = to_bridge(d); + return sprintf(buf, "%u\n", br->nf_disable_arptables); +} + +static int set_nf_disable_arptables(struct net_bridge *br, unsigned long val) +{ + br->nf_disable_arptables = val ? true : false; + return 0; +} + +static ssize_t store_nf_disable_arptables( + struct device *d, struct device_attribute *attr, const char *buf, + size_t len) +{ + return store_bridge_parm(d, buf, len, set_nf_disable_arptables); +} +static DEVICE_ATTR(nf_disable_arptables, S_IRUGO | S_IWUSR, + show_nf_disable_arptables, store_nf_disable_arptables); + #endif #ifdef CONFIG_BRIDGE_VLAN_FILTERING static ssize_t vlan_filtering_show(struct device *d, @@ -773,6 +876,58 @@ static DEVICE_ATTR_RW(vlan_stats_enabled); #endif +#ifdef CONFIG_AVM_BRIDGE_FLOOD_RATELIMITER + +static ssize_t avm_flood_ratelimit_show(struct device *d, + struct device_attribute *attr, + char *buf) +{ + struct net_bridge *br = to_bridge(d); + return sprintf(buf, "%d\n%d\n", br->avm_flood_credits_max, + atomic_read(&br->avm_flood_credits)); +} + +static ssize_t avm_flood_ratelimit_store(struct device *d, + struct device_attribute *attr, + const char *buf, size_t len) +{ + /* Specify an initial amount of packets that are not rate limited */ + return store_bridge_parm(d, buf, len, br_flood_rl_set_credits); +} + +static DEVICE_ATTR(avm_flood_ratelimit, S_IRUGO | S_IWUSR, + avm_flood_ratelimit_show, avm_flood_ratelimit_store); + +static ssize_t avm_flood_ratelimit_recover_rate_show(struct device *d, + struct device_attribute *attr, + char *buf) +{ + struct net_bridge *br = to_bridge(d); + return sprintf(buf, "%d\n", br->avm_flood_credits_recov_rate); +} + +static int set_rate(struct net_bridge *br, unsigned long v) +{ + if (v > INT_MAX) + return -EINVAL; + + br->avm_flood_credits_recov_rate = v; + return 0; +} + +static ssize_t avm_flood_ratelimit_recover_rate_store(struct device *d, + struct device_attribute *attr, + const char *buf, size_t len) +{ + /* Specify packets per seconds */ + return store_bridge_parm(d, buf, len, set_rate); +} + +static DEVICE_ATTR(avm_flood_ratelimit_recover_rate, S_IRUGO | S_IWUSR, + avm_flood_ratelimit_recover_rate_show, + avm_flood_ratelimit_recover_rate_store); +#endif + static struct attribute *bridge_attrs[] = { &dev_attr_forward_delay.attr, &dev_attr_hello_time.attr, @@ -809,11 +964,18 @@ &dev_attr_multicast_query_response_interval.attr, &dev_attr_multicast_startup_query_interval.attr, &dev_attr_multicast_stats_enabled.attr, + &dev_attr_multicast_igmp_version.attr, +#if IS_ENABLED(CONFIG_IPV6) + &dev_attr_multicast_mld_version.attr, +#endif #endif #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) &dev_attr_nf_call_iptables.attr, &dev_attr_nf_call_ip6tables.attr, &dev_attr_nf_call_arptables.attr, + &dev_attr_nf_disable_iptables.attr, + &dev_attr_nf_disable_ip6tables.attr, + &dev_attr_nf_disable_arptables.attr, #endif #ifdef CONFIG_BRIDGE_VLAN_FILTERING &dev_attr_vlan_filtering.attr, @@ -821,6 +983,10 @@ &dev_attr_default_pvid.attr, &dev_attr_vlan_stats_enabled.attr, #endif +#ifdef CONFIG_AVM_BRIDGE_FLOOD_RATELIMITER + &dev_attr_avm_flood_ratelimit.attr, + &dev_attr_avm_flood_ratelimit_recover_rate.attr, +#endif NULL };