Current VXLAN VTEP receives only VXLAN packets and ethernet over VXLAN-gpe [1] packets are rejected. This patch adds support for receiving "ethernet over VXLAN-gpe" packets which have same inner ethernet frame but a different VXLAN and VXLAN-gpe headers.
[1] https://tools.ietf.org/html/draft-quinn-vxlan-gpe-02 Signed-off-by: Pritesh Kothari <pritesh.koth...@cisco.com> --- datapath/linux/compat/vxlan.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c index 64877e0..aec291e 100644 --- a/datapath/linux/compat/vxlan.c +++ b/datapath/linux/compat/vxlan.c @@ -59,6 +59,7 @@ #define VXLAN_HLEN (sizeof(struct udphdr) + sizeof(struct vxlanhdr)) #define VXLAN_FLAGS 0x08000000 /* struct vxlanhdr.vx_flags required value. */ +#define VXLAN_GPE_FLAGS 0x0C006558 /* Flags for ethernet over VXLAN-gpe */ /* VXLAN protocol header */ struct vxlanhdr { @@ -76,11 +77,15 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb) if (!pskb_may_pull(skb, VXLAN_HLEN)) goto error; - /* Return packets with reserved bits set */ + /* Return packets with reserved bits set for VXLAN. + * Return non-ethernet packets for VXLAN-gpe until non + * ethernet packets are supported here. + */ vxh = (struct vxlanhdr *)(udp_hdr(skb) + 1); - if (vxh->vx_flags != htonl(VXLAN_FLAGS) || + if (!(vxh->vx_flags == htonl(VXLAN_FLAGS) || + vxh->vx_flags == htonl(VXLAN_GPE_FLAGS)) || (vxh->vx_vni & htonl(0xff))) { - pr_warn("invalid vxlan flags=%#x vni=%#x\n", + pr_warn("invalid vxlan(-gpe) flags=%#x vni=%#x\n", ntohl(vxh->vx_flags), ntohl(vxh->vx_vni)); goto error; } -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev