vxlan: fix missing options_len update on RX with collect metadata
[ Upstream commit 4024fcf70556311521e7b6cf79fa50e16f31013a ] When signalling to metadata consumers that the metadata_dst entry carries additional GBP extension data for vxlan (TUNNEL_VXLAN_OPT), the dst's vxlan_metadata information is populated, but options_len is left to zero. F.e. in ovs, ovs_flow_key_extract() checks for options_len before extracting the data through ip_tunnel_info_opts_get(). Geneve uses ip_tunnel_info_opts_set() helper in receive path, which sets options_len internally, vxlan however uses ip_tunnel_info_opts(), so when filling vxlan_metadata, we do need to update options_len. Fixes: 4c22279848c5 ("ip-tunnel: Use API to access tunnel metadata options.") Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
b80398d91c
commit
32cb6781a9
@ -1306,8 +1306,10 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
|
||||
gbp = (struct vxlanhdr_gbp *)vxh;
|
||||
md->gbp = ntohs(gbp->policy_id);
|
||||
|
||||
if (tun_dst)
|
||||
if (tun_dst) {
|
||||
tun_dst->u.tun_info.key.tun_flags |= TUNNEL_VXLAN_OPT;
|
||||
tun_dst->u.tun_info.options_len = sizeof(*md);
|
||||
}
|
||||
|
||||
if (gbp->dont_learn)
|
||||
md->gbp |= VXLAN_GBP_DONT_LEARN;
|
||||
|
Loading…
x
Reference in New Issue
Block a user