summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/Stt.c
diff options
context:
space:
mode:
Diffstat (limited to 'datapath-windows/ovsext/Stt.c')
-rw-r--r--datapath-windows/ovsext/Stt.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/datapath-windows/ovsext/Stt.c b/datapath-windows/ovsext/Stt.c
index 0220a6e80..ebdebb690 100644
--- a/datapath-windows/ovsext/Stt.c
+++ b/datapath-windows/ovsext/Stt.c
@@ -46,7 +46,7 @@ static OVS_STT_THREAD_CTX sttDefragThreadCtx;
static NDIS_STATUS
OvsDoEncapStt(POVS_VPORT_ENTRY vport, PNET_BUFFER_LIST curNbl,
- const OvsIPv4TunnelKey *tunKey,
+ const OvsIPTunnelKey *tunKey,
const POVS_FWD_INFO fwdInfo,
POVS_PACKET_HDR_INFO layers,
POVS_SWITCH_CONTEXT switchContext,
@@ -104,7 +104,7 @@ OvsCleanupSttTunnel(POVS_VPORT_ENTRY vport)
NDIS_STATUS
OvsEncapStt(POVS_VPORT_ENTRY vport,
PNET_BUFFER_LIST curNbl,
- OvsIPv4TunnelKey *tunKey,
+ OvsIPTunnelKey *tunKey,
POVS_SWITCH_CONTEXT switchContext,
POVS_PACKET_HDR_INFO layers,
PNET_BUFFER_LIST *newNbl,
@@ -114,7 +114,13 @@ OvsEncapStt(POVS_VPORT_ENTRY vport,
NDIS_STATUS status;
UNREFERENCED_PARAMETER(switchContext);
- status = OvsLookupIPFwdInfo(tunKey->src, tunKey->dst, &fwdInfo);
+
+ if (tunKey->dst.si_family != AF_INET) {
+ /*V6 tunnel support will be supported later*/
+ return NDIS_STATUS_FAILURE;
+ }
+
+ status = OvsLookupIPhFwdInfo(tunKey->src, tunKey->dst, &fwdInfo);
if (status != STATUS_SUCCESS) {
OvsFwdIPHelperRequest(NULL, 0, tunKey, NULL, NULL, NULL);
/*
@@ -140,7 +146,7 @@ OvsEncapStt(POVS_VPORT_ENTRY vport,
NDIS_STATUS
OvsDoEncapStt(POVS_VPORT_ENTRY vport,
PNET_BUFFER_LIST curNbl,
- const OvsIPv4TunnelKey *tunKey,
+ const OvsIPTunnelKey *tunKey,
const POVS_FWD_INFO fwdInfo,
POVS_PACKET_HDR_INFO layers,
POVS_SWITCH_CONTEXT switchContext,
@@ -301,8 +307,8 @@ OvsDoEncapStt(POVS_VPORT_ENTRY vport,
outerIpHdr->ttl = tunKey->ttl? tunKey->ttl : 64;
outerIpHdr->protocol = IPPROTO_TCP;
outerIpHdr->check = 0;
- outerIpHdr->saddr = fwdInfo->srcIpAddr;
- outerIpHdr->daddr = tunKey->dst;
+ outerIpHdr->saddr = fwdInfo->srcIphAddr.Ipv4.sin_addr.s_addr;
+ outerIpHdr->daddr = tunKey->dst.Ipv4.sin_addr.s_addr;
/* L4 header */
RtlZeroMemory(outerTcpHdr, sizeof *outerTcpHdr);
@@ -370,8 +376,8 @@ OvsDoEncapStt(POVS_VPORT_ENTRY vport,
*/
outerIpHdr->check = IPChecksum((UINT8 *)outerIpHdr,
sizeof *outerIpHdr, 0);
- outerTcpHdr->check = IPPseudoChecksum(&fwdInfo->srcIpAddr,
- (uint32 *)&tunKey->dst,
+ outerTcpHdr->check = IPPseudoChecksum((UINT32*)&fwdInfo->srcIphAddr.Ipv4.sin_addr.s_addr,
+ (UINT32*)&tunKey->dst.Ipv4.sin_addr.s_addr,
IPPROTO_TCP, (uint16)0);
lsoInfo.Value = 0;
@@ -382,8 +388,8 @@ OvsDoEncapStt(POVS_VPORT_ENTRY vport,
NET_BUFFER_LIST_INFO(curNbl,
TcpLargeSendNetBufferListInfo) = lsoInfo.Value;
} else {
- outerTcpHdr->check = IPPseudoChecksum(&fwdInfo->srcIpAddr,
- (uint32 *) &tunKey->dst,
+ outerTcpHdr->check = IPPseudoChecksum((UINT32*)&fwdInfo->srcIphAddr.Ipv4.sin_addr.s_addr,
+ (UINT32*)&tunKey->dst.Ipv4.sin_addr.s_addr,
IPPROTO_TCP,
(uint16) tcpChksumLen);
}
@@ -912,7 +918,7 @@ OvsDecapSetOffloads(PNET_BUFFER_LIST *curNbl,
NDIS_STATUS
OvsDecapStt(POVS_SWITCH_CONTEXT switchContext,
PNET_BUFFER_LIST curNbl,
- OvsIPv4TunnelKey *tunKey,
+ OvsIPTunnelKey *tunKey,
PNET_BUFFER_LIST *newNbl)
{
NDIS_STATUS status;
@@ -925,6 +931,12 @@ OvsDecapStt(POVS_SWITCH_CONTEXT switchContext,
UINT32 advanceCnt, hdrLen;
OVS_PACKET_HDR_INFO layers = { 0 };
+
+ if (tunKey->dst.si_family != AF_INET) {
+ /*V6 tunnel support will be supported later*/
+ return NDIS_STATUS_FAILURE;
+ }
+
status = OvsExtractLayers(curNbl, &layers);
if (status != NDIS_STATUS_SUCCESS) {
return status;
@@ -1004,8 +1016,10 @@ OvsDecapStt(POVS_SWITCH_CONTEXT switchContext,
ASSERT(sttHdr);
/* Initialize the tunnel key */
- tunKey->dst = ipHdr->daddr;
- tunKey->src = ipHdr->saddr;
+ tunKey->dst.Ipv4.sin_addr.s_addr = ipHdr->daddr;
+ tunKey->dst.si_family = AF_INET;
+ tunKey->src.Ipv4.sin_addr.s_addr = ipHdr->saddr;
+ tunKey->src.si_family = AF_INET;
tunKey->tunnelId = sttHdr->key;
tunKey->flags = OVS_TNL_F_KEY;
tunKey->tos = ipHdr->tos;