datapath-windows: Fix various Geneve bugs
authorYin Lin <linyi@vmware.com>
Thu, 14 Jul 2016 03:21:19 +0000 (20:21 -0700)
committerGurucharan Shetty <guru@ovn.org>
Thu, 21 Jul 2016 18:26:54 +0000 (11:26 -0700)
Signed-off-by: Yin Lin <linyi@vmware.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
datapath-windows/ovsext/Flow.c
datapath-windows/ovsext/Vport.c
datapath-windows/ovsext/Vport.h

index bc0bb37..7a57f96 100644 (file)
@@ -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;
     }
index 1462453..22741db 100644 (file)
@@ -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;
index f0a9acd..1f4968e 100644 (file)
@@ -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");
     }