[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