vxlan: treat vni in metadata based tunnels consistently
For metadata based tunnels, VNI is ignored when doing vxlan device lookups (because such tunnel receives all VNIs). However, this was not honored by vxlan_xmit_one when doing encapsulation bypass. Move the check for metadata based tunnel to the common place where it belongs. Signed-off-by: Jiri Benc <jbenc@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
288b01c8c4
commit
b9167b2e77
|
@ -246,6 +246,10 @@ static struct vxlan_dev *vxlan_vs_find_vni(struct vxlan_sock *vs, __be32 vni)
|
||||||
{
|
{
|
||||||
struct vxlan_dev *vxlan;
|
struct vxlan_dev *vxlan;
|
||||||
|
|
||||||
|
/* For flow based devices, map all packets to VNI 0 */
|
||||||
|
if (vs->flags & VXLAN_F_COLLECT_METADATA)
|
||||||
|
vni = 0;
|
||||||
|
|
||||||
hlist_for_each_entry_rcu(vxlan, vni_head(vs, vni), hlist) {
|
hlist_for_each_entry_rcu(vxlan, vni_head(vs, vni), hlist) {
|
||||||
if (vxlan->default_dst.remote_vni == vni)
|
if (vxlan->default_dst.remote_vni == vni)
|
||||||
return vxlan;
|
return vxlan;
|
||||||
|
@ -1194,10 +1198,6 @@ static void vxlan_rcv(struct vxlan_sock *vs, struct sk_buff *skb,
|
||||||
union vxlan_addr saddr;
|
union vxlan_addr saddr;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
/* For flow based devices, map all packets to VNI 0 */
|
|
||||||
if (vs->flags & VXLAN_F_COLLECT_METADATA)
|
|
||||||
vni = 0;
|
|
||||||
|
|
||||||
/* Is this VNI defined? */
|
/* Is this VNI defined? */
|
||||||
vxlan = vxlan_vs_find_vni(vs, vni);
|
vxlan = vxlan_vs_find_vni(vs, vni);
|
||||||
if (!vxlan)
|
if (!vxlan)
|
||||||
|
|
Loading…
Reference in New Issue