--- zzzz-none-000/linux-2.6.39.4/net/bridge/br_sysfs_if.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-arm-6490-729/linux-2.6.39.4/net/bridge/br_sysfs_if.c 2021-11-10 13:23:11.000000000 +0000 @@ -20,6 +20,10 @@ #include "br_private.h" +#if IS_ENABLED(CONFIG_AVM_PA) +#include +#endif + struct brport_attribute { struct attribute attr; ssize_t (*show)(struct net_bridge_port *, char *); @@ -159,6 +163,33 @@ static BRPORT_ATTR(hairpin_mode, S_IRUGO | S_IWUSR, show_hairpin_mode, store_hairpin_mode); +static ssize_t show_isolated_mode(struct net_bridge_port *p, char *buf) +{ + return sprintf(buf, "%d\n", (p->flags & BR_ISOLATED) != 0); +} +static ssize_t store_isolated_mode(struct net_bridge_port *p, unsigned long v) +{ + if (v) + p->flags |= BR_ISOLATED; + else + p->flags &= ~BR_ISOLATED; + +#if IS_ENABLED(CONFIG_AVM_PA) + { + struct avm_pa_dev_info *devinfo = AVM_PA_DEVINFO(p->dev); + + if (devinfo->pid_handle) + avm_pa_flush_sessions_for_pid(devinfo->pid_handle); + if (devinfo->vpid_handle) + avm_pa_flush_sessions_for_vpid(devinfo->vpid_handle); + } +#endif + + return 0; +} +static BRPORT_ATTR(isolated, S_IRUGO | S_IWUSR, + show_isolated_mode, store_isolated_mode); + #ifdef CONFIG_BRIDGE_IGMP_SNOOPING static ssize_t show_multicast_router(struct net_bridge_port *p, char *buf) { @@ -194,6 +225,7 @@ #ifdef CONFIG_BRIDGE_IGMP_SNOOPING &brport_attr_multicast_router, #endif + &brport_attr_isolated, NULL };