From 202b81379287b16364b33ea8049de8f9b1e46cac Mon Sep 17 00:00:00 2001 From: Anand Kumar Date: Fri, 9 Nov 2018 11:08:33 -0800 Subject: datapath-windows: Use layers info to extract IP header in IpFragment - Rely on layers l3Offset field to get offset of IP header. - Aslo fix passing 'newNbl' to IP fragment which is not required. - Fixed including a header file twice. Signed-off-by: Anand Kumar Acked-by: Alin Gabriel Serdean Signed-off-by: Alin Gabriel Serdean --- datapath-windows/ovsext/BufferMgmt.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'datapath-windows/ovsext/BufferMgmt.c') diff --git a/datapath-windows/ovsext/BufferMgmt.c b/datapath-windows/ovsext/BufferMgmt.c index da5c04a93..47d872df2 100644 --- a/datapath-windows/ovsext/BufferMgmt.c +++ b/datapath-windows/ovsext/BufferMgmt.c @@ -1101,9 +1101,9 @@ nblcopy_error: NDIS_STATUS GetIpHeaderInfo(PNET_BUFFER_LIST curNbl, + const POVS_PACKET_HDR_INFO hdrInfo, UINT32 *hdrSize) { - CHAR *ethBuf[sizeof(EthHdr)]; EthHdr *eth; IPHdr *ipHdr; PNET_BUFFER curNb; @@ -1111,16 +1111,14 @@ GetIpHeaderInfo(PNET_BUFFER_LIST curNbl, curNb = NET_BUFFER_LIST_FIRST_NB(curNbl); ASSERT(NET_BUFFER_NEXT_NB(curNb) == NULL); - eth = (EthHdr *)NdisGetDataBuffer(curNb, ETH_HEADER_LENGTH, - (PVOID)ðBuf, 1, 0); + eth = (EthHdr *)NdisGetDataBuffer(curNb, + hdrInfo->l4Offset, + NULL, 1, 0); if (eth == NULL) { return NDIS_STATUS_INVALID_PACKET; } - ipHdr = (IPHdr *)((PCHAR)eth + ETH_HEADER_LENGTH); - if (ipHdr == NULL) { - return NDIS_STATUS_INVALID_PACKET; - } - *hdrSize = (UINT32)(ETH_HEADER_LENGTH + (ipHdr->ihl * 4)); + ipHdr = (IPHdr *)((PCHAR)eth + hdrInfo->l3Offset); + *hdrSize = (UINT32)(hdrInfo->l3Offset + (ipHdr->ihl * 4)); return NDIS_STATUS_SUCCESS; } @@ -1380,7 +1378,7 @@ OvsFragmentNBL(PVOID ovsContext, /* Figure out the header size */ if (isIpFragment) { - status = GetIpHeaderInfo(nbl, &hdrSize); + status = GetIpHeaderInfo(nbl, hdrInfo, &hdrSize); } else { status = GetSegmentHeaderInfo(nbl, hdrInfo, &hdrSize, &seqNumber); } -- cgit v1.2.1