diff options
author | Paul Boca <pboca@cloudbasesolutions.com> | 2016-06-06 16:45:04 +0000 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2016-06-07 10:52:17 -0700 |
commit | bfc27f614262c54fd7fb3b47bb5a3c7d714e9e59 (patch) | |
tree | ac7876c76bada58ed89d0bff9069120447e0c049 /datapath-windows/ovsext/Stt.c | |
parent | c3e85147d9067c9c19451ad36505bcf70eb470b9 (diff) | |
download | openvswitch-bfc27f614262c54fd7fb3b47bb5a3c7d714e9e59.tar.gz |
datapath-windows: Add VLAN support to STT
Add VLAN to STT header and on receive applyit to encapsulated packet
Signed-off-by: Paul-Daniel Boca <pboca@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/Stt.c')
-rw-r--r-- | datapath-windows/ovsext/Stt.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/datapath-windows/ovsext/Stt.c b/datapath-windows/ovsext/Stt.c index c93db7548..934525510 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) { @@ -310,8 +312,16 @@ OvsDoEncapStt(POVS_VPORT_ENTRY vport, sttHdr->mss = 0; } - 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; @@ -899,6 +909,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); |