Xin Long
2016-Apr-05 03:32 UTC
[Bridge] [PATCHv2 net-next 0/6] bridge: support sending rntl info when we set attributes through sysfs/ioctl
This patchset is used to support sending rntl info to user in some places, and ensure that whenever those attributes change internally or from sysfs, that a netlink notification is sent out to listeners. It also make some adjustment in bridge sysfs so that we can implement this easily. I've done some tests on this patchset, like: [br_sysfs] 1. change all the attribute values of br or brif: $ echo $value > /sys/class/net/br0/bridge/{*} $ echo $value > /sys/class/net/br0/brif/eth1/{*} 2. meanwhile, on another terminal to observe the msg: $ bridge monitor [br_ioctl] 1. in bridge-utils package, do some changes in br_set, let brctl command use ioctl to set attribute: if ((ret = set_sysfs(path, value)) < 0) { --> if (1) { $ brctl set* 2. meanwhile, on another terminal to observe the msg: $ bridge monitor This test covers all the attributes that brctl and sysfs support to set. Xin Long (6): bridge: simplify the flush_store by calling store_bridge_parm bridge: simplify the forward_delay_store by calling store_bridge_parm bridge: simplify the stp_state_store by calling store_bridge_parm bridge: a netlink notification should be sent when those attributes are changed by br_sysfs_br bridge: a netlink notification should be sent when those attributes are changed by br_sysfs_if bridge: a netlink notification should be sent when those attributes are changed by ioctl net/bridge/br_ioctl.c | 40 +++++++++++++---------- net/bridge/br_sysfs_br.c | 83 +++++++++++++++++++----------------------------- net/bridge/br_sysfs_if.c | 5 +-- net/bridge/br_vlan.c | 30 +++-------------- 4 files changed, 65 insertions(+), 93 deletions(-) -- 2.1.0
Xin Long
2016-Apr-05 03:32 UTC
[Bridge] [PATCHv2 net-next 1/6] bridge: simplify the flush_store by calling store_bridge_parm
There are some repetitive codes in flush_store, we can remove them by calling store_bridge_parm, also, it would send rtnl notification after we add it in store_bridge_parm in the following patches. Signed-off-by: Xin Long <lucien.xin at gmail.com> --- net/bridge/br_sysfs_br.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c index 6b80914..c48f6b0 100644 --- a/net/bridge/br_sysfs_br.c +++ b/net/bridge/br_sysfs_br.c @@ -336,17 +336,17 @@ static ssize_t group_addr_store(struct device *d, static DEVICE_ATTR_RW(group_addr); +static int set_flush(struct net_bridge *br, unsigned long val) +{ + br_fdb_flush(br); + return 0; +} + static ssize_t flush_store(struct device *d, struct device_attribute *attr, const char *buf, size_t len) { - struct net_bridge *br = to_bridge(d); - - if (!ns_capable(dev_net(br->dev)->user_ns, CAP_NET_ADMIN)) - return -EPERM; - - br_fdb_flush(br); - return len; + return store_bridge_parm(d, buf, len, set_flush); } static DEVICE_ATTR_WO(flush); -- 2.1.0