From 9e23ac209520d1ca1ac30746ec1d63bc2c37e471 Mon Sep 17 00:00:00 2001 From: Yin Lin Date: Wed, 13 Jul 2016 20:21:19 -0700 Subject: [PATCH] datapath-windows: Fix various Geneve bugs Signed-off-by: Yin Lin Acked-by: Nithin Raju Acked-by: Alin Gabriel Serdean Signed-off-by: Gurucharan Shetty --- datapath-windows/ovsext/Flow.c | 2 +- datapath-windows/ovsext/Vport.c | 3 ++- datapath-windows/ovsext/Vport.h | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c index bc0bb37fb..7a57f96ba 100644 --- a/datapath-windows/ovsext/Flow.c +++ b/datapath-windows/ovsext/Flow.c @@ -1683,7 +1683,7 @@ OvsTunnelAttrToGeneveOptions(PNL_ATTR attr, option = (GeneveOptionHdr *)((UINT8 *)option + len); optLen -= len; } - memcpy(TunnelKeyGetOptions(tunKey), option, optLen); + memcpy(TunnelKeyGetOptions(tunKey), NlAttrData(attr), tunKey->tunOptLen); if (isCritical) { tunKey->flags |= OVS_TNL_F_CRT_OPT; } diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c index 146245345..22741db0a 100644 --- a/datapath-windows/ovsext/Vport.c +++ b/datapath-windows/ovsext/Vport.c @@ -724,7 +724,8 @@ OvsFindTunnelVportByDstPortAndNWProto(POVS_SWITCH_CONTEXT switchContext, if (GetPortFromPriv(vport) == dstPort) { switch (nwProto) { case IPPROTO_UDP: - if (vport->ovsType != OVS_VPORT_TYPE_VXLAN) { + if (vport->ovsType != OVS_VPORT_TYPE_GENEVE && + vport->ovsType != OVS_VPORT_TYPE_VXLAN) { continue; } break; diff --git a/datapath-windows/ovsext/Vport.h b/datapath-windows/ovsext/Vport.h index f0a9acd9e..1f4968ee7 100644 --- a/datapath-windows/ovsext/Vport.h +++ b/datapath-windows/ovsext/Vport.h @@ -21,6 +21,7 @@ #include "Stt.h" #include "Switch.h" #include "VxLan.h" +#include "Geneve.h" #define OVS_MAX_DPPORTS MAXUINT16 #define OVS_DPPORT_NUMBER_INVALID OVS_MAX_DPPORTS @@ -183,6 +184,7 @@ static __inline BOOLEAN OvsIsTunnelVportType(OVS_VPORT_TYPE ovsType) { return ovsType == OVS_VPORT_TYPE_VXLAN || + ovsType == OVS_VPORT_TYPE_GENEVE || ovsType == OVS_VPORT_TYPE_STT || ovsType == OVS_VPORT_TYPE_GRE; } @@ -270,6 +272,9 @@ GetPortFromPriv(POVS_VPORT_ENTRY vport) case OVS_VPORT_TYPE_VXLAN: dstPort = ((POVS_VXLAN_VPORT)vportPriv)->dstPort; break; + case OVS_VPORT_TYPE_GENEVE: + dstPort = ((POVS_GENEVE_VPORT) vportPriv)->dstPort; + break; default: ASSERT(! "Port is not a tunnel port"); } -- 2.20.1