kernel: add disable_eap_hack sysfs attribute
We are not sure if 640-bridge-only-accept-EAP-locally.patch is still needed
as a first step, add disable_eap_hack sysfs config to allow to disable it
Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
(cherry picked from commit 7d542dc804)
			
			
This commit is contained in:
		 Etienne Champetier
					Etienne Champetier
				
			
				
					committed by
					
						 Petr Štetiar
						Petr Štetiar
					
				
			
			
				
	
			
			
			 Petr Štetiar
						Petr Štetiar
					
				
			
						parent
						
							b610572a9b
						
					
				
				
					commit
					d897b32139
				
			| @@ -1,4 +1,3 @@ | |||||||
| From c6905cfdeb31a5c049db3da434b10fa0d3e83569 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Felix Fietkau <nbd@nbd.name> | From: Felix Fietkau <nbd@nbd.name> | ||||||
| Date: Fri, 7 Jul 2017 17:18:54 +0200 | Date: Fri, 7 Jul 2017 17:18:54 +0200 | ||||||
| Subject: bridge: only accept EAP locally | Subject: bridge: only accept EAP locally | ||||||
| @@ -7,9 +6,9 @@ When bridging, do not forward EAP frames to other ports, only deliver | |||||||
| them locally, regardless of the state. | them locally, regardless of the state. | ||||||
|  |  | ||||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> | Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||||
|  | [add disable_eap_hack sysfs attribute] | ||||||
|  | Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com> | ||||||
| --- | --- | ||||||
|  net/bridge/br_input.c | 7 +++++-- |  | ||||||
|  1 file changed, 5 insertions(+), 2 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/net/bridge/br_input.c | --- a/net/bridge/br_input.c | ||||||
| +++ b/net/bridge/br_input.c | +++ b/net/bridge/br_input.c | ||||||
| @@ -19,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
| +	BR_INPUT_SKB_CB(skb)->brdev = br->dev; | +	BR_INPUT_SKB_CB(skb)->brdev = br->dev; | ||||||
| + | + | ||||||
| +	if (skb->protocol == htons(ETH_P_PAE)) | +	if (skb->protocol == htons(ETH_P_PAE) && !br->disable_eap_hack) | ||||||
| +		return br_pass_frame_up(skb); | +		return br_pass_frame_up(skb); | ||||||
| + | + | ||||||
|  	if (p->state == BR_STATE_LEARNING) |  	if (p->state == BR_STATE_LEARNING) | ||||||
| @@ -29,3 +28,55 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	BR_INPUT_SKB_CB(skb)->src_port_isolated = !!(p->flags & BR_ISOLATED); |  	BR_INPUT_SKB_CB(skb)->src_port_isolated = !!(p->flags & BR_ISOLATED); | ||||||
|   |   | ||||||
|  	if (IS_ENABLED(CONFIG_INET) && skb->protocol == htons(ETH_P_ARP)) |  	if (IS_ENABLED(CONFIG_INET) && skb->protocol == htons(ETH_P_ARP)) | ||||||
|  | --- a/net/bridge/br_private.h | ||||||
|  | +++ b/net/bridge/br_private.h | ||||||
|  | @@ -320,6 +320,8 @@ struct net_bridge { | ||||||
|  |  	u16				group_fwd_mask; | ||||||
|  |  	u16				group_fwd_mask_required; | ||||||
|  |   | ||||||
|  | +	bool				disable_eap_hack; | ||||||
|  | + | ||||||
|  |  	/* STP */ | ||||||
|  |  	bridge_id			designated_root; | ||||||
|  |  	bridge_id			bridge_id; | ||||||
|  | --- a/net/bridge/br_sysfs_br.c | ||||||
|  | +++ b/net/bridge/br_sysfs_br.c | ||||||
|  | @@ -170,6 +170,30 @@ static ssize_t group_fwd_mask_store(stru | ||||||
|  |  } | ||||||
|  |  static DEVICE_ATTR_RW(group_fwd_mask); | ||||||
|  |   | ||||||
|  | +static ssize_t disable_eap_hack_show(struct device *d, | ||||||
|  | +				   struct device_attribute *attr, | ||||||
|  | +				   char *buf) | ||||||
|  | +{ | ||||||
|  | +	struct net_bridge *br = to_bridge(d); | ||||||
|  | +	return sprintf(buf, "%u\n", br->disable_eap_hack); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int set_disable_eap_hack(struct net_bridge *br, unsigned long val) | ||||||
|  | +{ | ||||||
|  | +	br->disable_eap_hack = !!val; | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static ssize_t disable_eap_hack_store(struct device *d, | ||||||
|  | +				    struct device_attribute *attr, | ||||||
|  | +				    const char *buf, | ||||||
|  | +				    size_t len) | ||||||
|  | +{ | ||||||
|  | +	return store_bridge_parm(d, buf, len, set_disable_eap_hack); | ||||||
|  | +} | ||||||
|  | +static DEVICE_ATTR_RW(disable_eap_hack); | ||||||
|  | + | ||||||
|  |  static ssize_t priority_show(struct device *d, struct device_attribute *attr, | ||||||
|  |  			     char *buf) | ||||||
|  |  { | ||||||
|  | @@ -817,6 +841,7 @@ static struct attribute *bridge_attrs[] | ||||||
|  |  	&dev_attr_ageing_time.attr, | ||||||
|  |  	&dev_attr_stp_state.attr, | ||||||
|  |  	&dev_attr_group_fwd_mask.attr, | ||||||
|  | +	&dev_attr_disable_eap_hack.attr, | ||||||
|  |  	&dev_attr_priority.attr, | ||||||
|  |  	&dev_attr_bridge_id.attr, | ||||||
|  |  	&dev_attr_root_id.attr, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user