[ovs-dev] [PATCH] datapath: Add missing case OVS_TUNNEL_KEY_ATTR_PAD

Kris Murphy kriskend at linux.vnet.ibm.com
Tue Mar 14 18:30:43 UTC 2017


Recreate and error info:

Hit a new issue with OVS after updating to the Ubuntu 4.8 kernel from 
the Ubuntu 4.4 kernel.

Iperf was used to send traffic between client VMs over VXLAN. The 
traffic did still flow, but every packet had to go to user space due to 
the flow creation failures, which drastically impacted performance and 
cpu utilization.

When using VXLAN, the following error is showing up in dmesg

openvswitch: netlink: Unknown IP tunnel attribute 14

Also there are tons of these errors in the openvswitch log

2017-03-01T15:50:47.860Z|00018|dpif(handler164)|WARN|system at ovs-system: 
failed to put[create] (Invalid argument) 
ufid:2d1a9aeb-7b24-4235-a208-a01f98237e60 recirc_id(0),dp_hash(0/0),skb_pri

Debug showed that this attribute, OVS_TUNNEL_KEY_ATTR_PAD, was being 
seen in the switch statement in method, static int ip_tun_from_nlattr, 
in flow_netlink.c .  Because there is no case for this attribute, the 
default is hit and returns an error.

The issue was first seen using the packages in the Ubuntu 4.8 kernel, 
which is OVS 2.5.  OVS 2.6 and 2.6.1 were also tried with the kernel 
packages and the same issue was seen.  Tried building OVS 2.7 and 
loading the openvswitch-datapath-dkms_2.7.0-1_all.deb that got built but 
the issue persisted.  The proposed patch seems to eliminate the error 
messages and also fixed the segmentation and performance issues that 
were seen.


On 3/14/2017 1:30 PM, Kris Murphy wrote:
> Added a case for OVS_TUNNEL_KEY_ATTR_PAD to the switch statement
> in ip_tun_from_nlattr in order to prevent the default case
> returning an error.
> Signed-off-by: Kris Murphy <kriskend at linux.vnet.ibm.com>
> ---
>   datapath/flow_netlink.c | 2 ++
>   1 file changed, 2 insertions(+)
>
> diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
> index 0e38dd2..1e08ed3 100644
> --- a/datapath/flow_netlink.c
> +++ b/datapath/flow_netlink.c
> @@ -651,6 +651,8 @@ static int ip_tun_from_nlattr(const struct nlattr *attr,
>   			tun_flags |= TUNNEL_VXLAN_OPT;
>   			opts_type = type;
>   			break;
> +		case OVS_TUNNEL_KEY_ATTR_PAD:
> +			break;
>   		default:
>   			OVS_NLERR(log, "Unknown IP tunnel attribute %d",
>   				  type);



More information about the dev mailing list