\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
//\r
// Copy the MNP Protocol interfaces from the template.\r
//\r
- CopyMem (&Instance->ManagedNetwork, &mMnpProtocolTemplate, sizeof (EFI_MANAGED_NETWORK_PROTOCOL));\r
+ CopyMem (&Instance->ManagedNetwork, &mMnpProtocolTemplate, sizeof (Instance->ManagedNetwork));\r
\r
//\r
// Copy the default config data.\r
//\r
- CopyMem (&Instance->ConfigData, &mMnpDefaultConfigData, sizeof (EFI_MANAGED_NETWORK_CONFIG_DATA));\r
+ CopyMem (&Instance->ConfigData, &mMnpDefaultConfigData, sizeof (Instance->ConfigData));\r
\r
//\r
// Initialize the lists.\r
//\r
// Save the new configuration data.\r
//\r
- CopyMem (OldConfigData, NewConfigData, sizeof (EFI_MANAGED_NETWORK_CONFIG_DATA));\r
+ CopyMem (OldConfigData, NewConfigData, sizeof (*OldConfigData));\r
\r
Instance->Configured = (BOOLEAN) (ConfigData != NULL);\r
\r
NET_LIST_FOR_EACH (Entry, &MnpServiceData->GroupAddressList) {\r
\r
GroupAddress = NET_LIST_USER_STRUCT (Entry, MNP_GROUP_ADDRESS, AddrEntry);\r
- CopyMem (MCastFilter + Index, &GroupAddress->Address, sizeof (EFI_MAC_ADDRESS));\r
+ CopyMem (MCastFilter + Index, &GroupAddress->Address, sizeof (*(MCastFilter + Index)));\r
Index++;\r
\r
ASSERT (Index <= MCastFilterCnt);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- CopyMem (&GroupAddress->Address, MacAddress, sizeof (EFI_MAC_ADDRESS));\r
+ CopyMem (&GroupAddress->Address, MacAddress, sizeof (GroupAddress->Address));\r
GroupAddress->RefCnt = 0;\r
NetListInsertTail (\r
&MnpServiceData->GroupAddressList,\r