diff options
Diffstat (limited to 'datapath-windows/ovsext/BufferMgmt.c')
-rw-r--r-- | datapath-windows/ovsext/BufferMgmt.c | 16 |
1 files changed, 7 insertions, 9 deletions
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); } |