[ovs-dev] [PATCH 2/4] datapath-windows: Add VLAN support to STT

Paul Boca pboca at cloudbasesolutions.com
Tue May 17 15:23:01 UTC 2016


Add VLAN to STT header and on receive applyit to encapsulated packet

Signed-off-by: Paul-Daniel Boca <pboca at cloudbasesolutions.com>
---
 datapath-windows/ovsext/Stt.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/datapath-windows/ovsext/Stt.c b/datapath-windows/ovsext/Stt.c
index 406e690..5b5d950 100644
--- a/datapath-windows/ovsext/Stt.c
+++ b/datapath-windows/ovsext/Stt.c
@@ -156,6 +156,7 @@ OvsDoEncapStt(POVS_VPORT_ENTRY vport,
     PUINT8 bufferStart;
     ULONG mss = 0;
     NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO lsoInfo;
+    PVOID vlanTagValue;
 
     curNb = NET_BUFFER_LIST_FIRST_NB(curNbl);
 
@@ -173,6 +174,7 @@ OvsDoEncapStt(POVS_VPORT_ENTRY vport,
     NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO csumInfo;
     csumInfo.Value = NET_BUFFER_LIST_INFO(curNbl,
                                           TcpIpChecksumNetBufferListInfo);
+    vlanTagValue = NET_BUFFER_LIST_INFO(curNbl, Ieee8021QNetBufferListInfo);
     *newNbl = OvsPartialCopyNBL(switchContext, curNbl, 0, headRoom,
                                 FALSE /*copy NblInfo*/);
     if (*newNbl == NULL) {
@@ -313,8 +315,16 @@ OvsDoEncapStt(POVS_VPORT_ENTRY vport,
         }
     }
 
-    sttHdr->reserved = 0;
+    /* Set VLAN tag */
     sttHdr->vlanTCI = 0;
+    if (vlanTagValue) {
+        PNDIS_NET_BUFFER_LIST_8021Q_INFO vlanTag =
+            (PNDIS_NET_BUFFER_LIST_8021Q_INFO)(PVOID *)&vlanTagValue;
+        sttHdr->vlanTCI = htons(vlanTag->TagHeader.VlanId | OVSWIN_VLAN_CFI |
+                                (vlanTag->TagHeader.UserPriority << 13));
+    }
+
+    sttHdr->reserved = 0;
     sttHdr->key = tunKey->tunnelId;
     /* Zero out stt padding */
     *(uint16 *)(sttHdr + 1) = 0;
@@ -900,6 +910,16 @@ OvsDecapStt(POVS_SWITCH_CONTEXT switchContext,
     tunKey->ttl = ipHdr->ttl;
     tunKey->pad = 0;
 
+    /* Apply VLAN tag if present */
+    if (ntohs(sttHdr->vlanTCI) & OVSWIN_VLAN_CFI) {
+        NDIS_NET_BUFFER_LIST_8021Q_INFO vlanTag;
+        vlanTag.Value = 0;
+        vlanTag.TagHeader.VlanId = ntohs(sttHdr->vlanTCI) & 0xfff;
+        vlanTag.TagHeader.UserPriority = ntohs(sttHdr->vlanTCI) >> 13;
+        NET_BUFFER_LIST_INFO(*newNbl,
+            Ieee8021QNetBufferListInfo) = vlanTag.Value;
+    }
+
     /* Set Checksum and LSO offload flags */
     OvsDecapSetOffloads(newNbl, sttHdr);
 
-- 
2.7.2.windows.1



More information about the dev mailing list