mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	* properly format/comment all patches * merge debloat patches * merge Kconfig patches * merge swconfig patches * merge hotplug patches * drop 200-fix_localversion.patch - upstream * drop 222-arm_zimage_none.patch - unused * drop 252-mv_cesa_depends.patch - no longer required * drop 410-mtd-move-forward-declaration-of-struct-mtd_info.patch - unused * drop 661-fq_codel_keep_dropped_stats.patch - outdated * drop 702-phy_add_aneg_done_function.patch - upstream * drop 840-rtc7301.patch - unused * drop 841-rtc_pt7c4338.patch - upstream * drop 921-use_preinit_as_init.patch - unused * drop spio-gpio-old and gpio-mmc - unused Signed-off-by: John Crispin <john@phrozen.org>
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 6ae4ae8e512bd229f806c22f8a2cd751e4f987c2 Mon Sep 17 00:00:00 2001
 | |
| From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@c0d3.blue>
 | |
| Date: Sat, 23 May 2015 03:12:34 +0200
 | |
| Subject: [PATCH] bridge: allow setting hash_max + multicast_router if
 | |
|  interface is down
 | |
| MIME-Version: 1.0
 | |
| Content-Type: text/plain; charset=UTF-8
 | |
| Content-Transfer-Encoding: 8bit
 | |
| 
 | |
| Network managers like netifd (used in OpenWRT for instance) try to
 | |
| configure interface options after creation but before setting the
 | |
| interface up.
 | |
| 
 | |
| Unfortunately the sysfs / bridge currently only allows to configure the
 | |
| hash_max and multicast_router options when the bridge interface is up.
 | |
| But since br_multicast_init() doesn't start any timers and only sets
 | |
| default values and initializes timers it should be save to reconfigure
 | |
| the default values after that, before things actually get active after
 | |
| the bridge is set up.
 | |
| 
 | |
| Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
 | |
| Signed-off-by: David S. Miller <davem@davemloft.net>
 | |
| ---
 | |
|  net/bridge/br_multicast.c |   24 +++---------------------
 | |
|  1 file changed, 3 insertions(+), 21 deletions(-)
 | |
| 
 | |
| --- a/net/bridge/br_multicast.c
 | |
| +++ b/net/bridge/br_multicast.c
 | |
| @@ -1948,11 +1948,9 @@ out:
 | |
|  
 | |
|  int br_multicast_set_router(struct net_bridge *br, unsigned long val)
 | |
|  {
 | |
| -	int err = -ENOENT;
 | |
| +	int err = -EINVAL;
 | |
|  
 | |
|  	spin_lock_bh(&br->multicast_lock);
 | |
| -	if (!netif_running(br->dev))
 | |
| -		goto unlock;
 | |
|  
 | |
|  	switch (val) {
 | |
|  	case 0:
 | |
| @@ -1963,13 +1961,8 @@ int br_multicast_set_router(struct net_b
 | |
|  		br->multicast_router = val;
 | |
|  		err = 0;
 | |
|  		break;
 | |
| -
 | |
| -	default:
 | |
| -		err = -EINVAL;
 | |
| -		break;
 | |
|  	}
 | |
|  
 | |
| -unlock:
 | |
|  	spin_unlock_bh(&br->multicast_lock);
 | |
|  
 | |
|  	return err;
 | |
| @@ -1978,11 +1971,9 @@ unlock:
 | |
|  int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val)
 | |
|  {
 | |
|  	struct net_bridge *br = p->br;
 | |
| -	int err = -ENOENT;
 | |
| +	int err = -EINVAL;
 | |
|  
 | |
|  	spin_lock(&br->multicast_lock);
 | |
| -	if (!netif_running(br->dev) || p->state == BR_STATE_DISABLED)
 | |
| -		goto unlock;
 | |
|  
 | |
|  	switch (val) {
 | |
|  	case 0:
 | |
| @@ -2004,13 +1995,8 @@ int br_multicast_set_port_router(struct
 | |
|  
 | |
|  		br_multicast_add_router(br, p);
 | |
|  		break;
 | |
| -
 | |
| -	default:
 | |
| -		err = -EINVAL;
 | |
| -		break;
 | |
|  	}
 | |
|  
 | |
| -unlock:
 | |
|  	spin_unlock(&br->multicast_lock);
 | |
|  
 | |
|  	return err;
 | |
| @@ -2115,15 +2101,11 @@ unlock:
 | |
|  
 | |
|  int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val)
 | |
|  {
 | |
| -	int err = -ENOENT;
 | |
| +	int err = -EINVAL;
 | |
|  	u32 old;
 | |
|  	struct net_bridge_mdb_htable *mdb;
 | |
|  
 | |
|  	spin_lock_bh(&br->multicast_lock);
 | |
| -	if (!netif_running(br->dev))
 | |
| -		goto unlock;
 | |
| -
 | |
| -	err = -EINVAL;
 | |
|  	if (!is_power_of_2(val))
 | |
|  		goto unlock;
 | |
|  
 |