Subject: Re: [PATCH net-next 14/22] vxlan: Flow based tunneling

From: Alexei Starovoitov <[email-masked]>
Date: Tue, 21 Jul 2015 10:30:41 -0700

On 7/21/15 1:43 AM, Thomas Graf wrote:
> This prepares the VXLAN device to be steered by the routing and other
> subsystems which allows to support encapsulation for a large number
> of tunnel endpoints and tunnel ids through a single net_device which
> improves the scalability.

+1. looks very useful.

RX:
> +		info->mode = IP_TUNNEL_INFO_RX;
> +		info->key.tun_flags = TUNNEL_KEY;
> +		info->key.tun_id = cpu_to_be64(vni >> 8);
...
TX:
> +		dst_port = info->key.tp_dst ? : vxlan->dst_port;
> +		vni = be64_to_cpu(info->key.tun_id);

I think the copy paste of ovs_tunnel_info into ip_tunnel_info
can be improved. In particular instead of '__be64 tun_id'
we can use '__u64 tun_id' which will avoid extra byteswaps for rx/tx
paths.

netlink for this part also seems inconsistent.
In the patch 16:
+static const struct nla_policy ip_tun_policy[IP_TUN_MAX + 1] = {
+	[IP_TUN_ID]		= { .type = NLA_U64 },
...
+	if (tb[IP_TUN_ID])
+		tun_info->key.tun_id = nla_get_u64(tb[IP_TUN_ID]);

I think nla_get_be64 should be there?
and with my suggestion we can add be64_to_cpu() here instead
of doing it per packet.
Thoughts?