\r
for (Index = 0; Index < Count; Index++) {\r
\r
- Nbuf = NetbufAlloc (MnpServiceData->BufferLength);\r
+ Nbuf = NetbufAlloc (MnpServiceData->BufferLength + MnpServiceData->PaddingSize);\r
if (Nbuf == NULL) {\r
\r
MNP_DEBUG_ERROR (("MnpAddFreeNbuf: NetBufAlloc failed.\n"));\r
break;\r
}\r
\r
+ if (MnpServiceData->PaddingSize > 0) {\r
+ //\r
+ // Pad padding bytes before the media header\r
+ //\r
+ NetbufAllocSpace (Nbuf, MnpServiceData->PaddingSize, NET_BUF_TAIL);\r
+ NetbufTrim (Nbuf, MnpServiceData->PaddingSize, NET_BUF_HEAD);\r
+ }\r
+\r
NetbufQueAppend (&MnpServiceData->FreeNbufQue, Nbuf);\r
}\r
\r
//\r
MnpServiceData->BufferLength = MnpServiceData->Mtu + SnpMode->MediaHeaderSize + NET_ETHER_FCS_SIZE;\r
\r
+ //\r
+ // Make sure the protocol headers immediately following the media header \r
+ // 4-byte aligned\r
+ //\r
+ MnpServiceData->PaddingSize = (4 - SnpMode->MediaHeaderSize) & 0x3;\r
+\r
//\r
// Initialize the FreeNetBufQue and pre-allocate some NET_BUFs.\r
//\r