summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/BufferMgmt.c
diff options
context:
space:
mode:
Diffstat (limited to 'datapath-windows/ovsext/BufferMgmt.c')
-rw-r--r--datapath-windows/ovsext/BufferMgmt.c16
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)&ethBuf, 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);
}