diff mbox series

[net-next] ethtool: allow flow-type ether without IP protocol field

Message ID 20200818185503.664-1-vishal@chelsio.com
State Accepted
Delegated to: David Miller
Headers show
Series [net-next] ethtool: allow flow-type ether without IP protocol field | expand

Commit Message

Vishal Kulkarni Aug. 18, 2020, 6:55 p.m. UTC
Set IP protocol mask only when IP protocol field is set.
This will allow flow-type ether with vlan rule which don't have
protocol field to apply.

ethtool -N ens5f4 flow-type ether proto 0x8100 vlan 0x600\
m 0x1FFF action 3 loc 16

Signed-off-by: Vishal Kulkarni <vishal@chelsio.com>
---
 net/ethtool/ioctl.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

David Miller Aug. 19, 2020, 11:27 p.m. UTC | #1
From: Vishal Kulkarni <vishal@chelsio.com>
Date: Wed, 19 Aug 2020 00:25:03 +0530

> Set IP protocol mask only when IP protocol field is set.
> This will allow flow-type ether with vlan rule which don't have
> protocol field to apply.
> 
> ethtool -N ens5f4 flow-type ether proto 0x8100 vlan 0x600\
> m 0x1FFF action 3 loc 16
> 
> Signed-off-by: Vishal Kulkarni <vishal@chelsio.com>

Michal, please review.

> ---
>  net/ethtool/ioctl.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
> index 441794e0034f..e6f5cf52023c 100644
> --- a/net/ethtool/ioctl.c
> +++ b/net/ethtool/ioctl.c
> @@ -3025,13 +3025,14 @@ ethtool_rx_flow_rule_create(const struct ethtool_rx_flow_spec_input *input)
>  	case TCP_V4_FLOW:
>  	case TCP_V6_FLOW:
>  		match->key.basic.ip_proto = IPPROTO_TCP;
> +		match->mask.basic.ip_proto = 0xff;
>  		break;
>  	case UDP_V4_FLOW:
>  	case UDP_V6_FLOW:
>  		match->key.basic.ip_proto = IPPROTO_UDP;
> +		match->mask.basic.ip_proto = 0xff;
>  		break;
>  	}
> -	match->mask.basic.ip_proto = 0xff;
>  
>  	match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_BASIC);
>  	match->dissector.offset[FLOW_DISSECTOR_KEY_BASIC] =
> -- 
> 2.21.1
>
Michal Kubecek Aug. 20, 2020, 7:34 p.m. UTC | #2
On Wed, Aug 19, 2020 at 12:25:03AM +0530, Vishal Kulkarni wrote:
> Set IP protocol mask only when IP protocol field is set.
> This will allow flow-type ether with vlan rule which don't have
> protocol field to apply.
> 
> ethtool -N ens5f4 flow-type ether proto 0x8100 vlan 0x600\
> m 0x1FFF action 3 loc 16
> 
> Signed-off-by: Vishal Kulkarni <vishal@chelsio.com>
> ---
>  net/ethtool/ioctl.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
> index 441794e0034f..e6f5cf52023c 100644
> --- a/net/ethtool/ioctl.c
> +++ b/net/ethtool/ioctl.c
> @@ -3025,13 +3025,14 @@ ethtool_rx_flow_rule_create(const struct ethtool_rx_flow_spec_input *input)
>  	case TCP_V4_FLOW:
>  	case TCP_V6_FLOW:
>  		match->key.basic.ip_proto = IPPROTO_TCP;
> +		match->mask.basic.ip_proto = 0xff;
>  		break;
>  	case UDP_V4_FLOW:
>  	case UDP_V6_FLOW:
>  		match->key.basic.ip_proto = IPPROTO_UDP;
> +		match->mask.basic.ip_proto = 0xff;
>  		break;
>  	}
> -	match->mask.basic.ip_proto = 0xff;
>  
>  	match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_BASIC);
>  	match->dissector.offset[FLOW_DISSECTOR_KEY_BASIC] =
> -- 
> 2.21.1
> 

This is certainly correct. We should also handle SCTP_V4_FLOW and
SCTP_V6_FLOW in the same way as {TCP,UDP}_V{4,6}_FLOW but that is an
unrelated problem which should be handled separately (and also needs to
be addressed in the switch statement above this one).

Reviewed-by: Michal Kubecek <mkubecek@suse.cz>
David Miller Aug. 20, 2020, 11:26 p.m. UTC | #3
From: Vishal Kulkarni <vishal@chelsio.com>
Date: Wed, 19 Aug 2020 00:25:03 +0530

> Set IP protocol mask only when IP protocol field is set.
> This will allow flow-type ether with vlan rule which don't have
> protocol field to apply.
> 
> ethtool -N ens5f4 flow-type ether proto 0x8100 vlan 0x600\
> m 0x1FFF action 3 loc 16
> 
> Signed-off-by: Vishal Kulkarni <vishal@chelsio.com>

Applied, thank you.
diff mbox series

Patch

diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
index 441794e0034f..e6f5cf52023c 100644
--- a/net/ethtool/ioctl.c
+++ b/net/ethtool/ioctl.c
@@ -3025,13 +3025,14 @@  ethtool_rx_flow_rule_create(const struct ethtool_rx_flow_spec_input *input)
 	case TCP_V4_FLOW:
 	case TCP_V6_FLOW:
 		match->key.basic.ip_proto = IPPROTO_TCP;
+		match->mask.basic.ip_proto = 0xff;
 		break;
 	case UDP_V4_FLOW:
 	case UDP_V6_FLOW:
 		match->key.basic.ip_proto = IPPROTO_UDP;
+		match->mask.basic.ip_proto = 0xff;
 		break;
 	}
-	match->mask.basic.ip_proto = 0xff;
 
 	match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_BASIC);
 	match->dissector.offset[FLOW_DISSECTOR_KEY_BASIC] =