[ovs-dev] [PATCH] datapath: Don't drop MTU-sized VLAN packets from userspace

Justin Pettit jpettit at nicira.com
Sat Sep 5 02:06:24 UTC 2009


In this version of the patch, I forgot to thank Ben for his help  
diagnosing the issue.  It's been fixed in the commit message that will  
eventually go out.

--Justin


On Sep 4, 2009, at 6:03 PM, Justin Pettit wrote:

> Before transimitting a packet, the datapath checks that the packet
> length is not greater than the MTU.  It determines the length based on
> the 'protocol' field in the skb.  If 'protocol' is ETH_P_8021Q, it  
> reduces
> the packet length as stored in the 'len' field by four bytes, which
> is the size of a VLAN tag header.  Unfortunately, packets that arrived
> from userspace were not having the 'protocol' field set, which would
> cause MTU-sized packets to be dropped.  This commit sets the  
> 'protocol'
> field appropriately.
>
> NIC-17 and NIC-26
> ---
> datapath/datapath.c |    9 +++++++++
> 1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/datapath/datapath.c b/datapath/datapath.c
> index 1460215..215dfdf 100644
> --- a/datapath/datapath.c
> +++ b/datapath/datapath.c
> @@ -1127,6 +1127,7 @@ static int do_execute(struct datapath *dp,  
> const struct odp_execute *executep)
> 	struct odp_flow_key key;
> 	struct sk_buff *skb;
> 	struct sw_flow_actions *actions;
> +	struct ethhdr *eth;
> 	int err;
>
> 	err = -EFAULT;
> @@ -1166,6 +1167,14 @@ static int do_execute(struct datapath *dp,  
> const struct odp_execute *executep)
> 			   execute.length))
> 		goto error_free_skb;
>
> +	skb_reset_mac_header(skb);
> +	eth = eth_hdr(skb);
> +
> +	if (ntohs(eth->h_proto) >= 1536)
> +		skb->protocol = eth->h_proto;
> +	else
> +		skb->protocol = htons(ETH_P_802_2);
> +
> 	flow_extract(skb, execute.in_port, &key);
> 	err = execute_actions(dp, skb, &key, actions->actions,
> 			      actions->n_actions, GFP_KERNEL);
> -- 
> 1.5.5
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org





More information about the dev mailing list