X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FUniversal%2FNetwork%2FMnpDxe%2FMnpIo.c;h=b8f61bf696fe1d82e45b9122202e18ee59da1d67;hp=1aa3207ea357d2d4ba6705e9d4c4e086ee7ca894;hb=bdebd2cecf015a5feb11e99269731cac606167e8;hpb=da660118bd391d1f421f99921f9f15a66a8fc7ea diff --git a/MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c b/MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c index 1aa3207ea3..b8f61bf696 100644 --- a/MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c +++ b/MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c @@ -1,7 +1,7 @@ /** @file Implementation of Managed Network Protocol I/O functions. -Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2005 - 2013, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full @@ -130,10 +130,20 @@ MnpBuildTxPacket ( MnpDerviceData = MnpServiceData->MnpDeviceData; if ((TxData->DestinationAddress == NULL) && (TxData->FragmentCount == 1)) { // - // Media header is in FragmentTable and there is only one fragment, - // use fragment buffer directly. + // Reserve space for vlan tag,if necessary. // - *PktBuf = TxData->FragmentTable[0].FragmentBuffer; + if (MnpServiceData->VlanId != 0) { + *PktBuf = MnpDerviceData->TxBuf + NET_VLAN_TAG_LEN; + } else { + *PktBuf = MnpDerviceData->TxBuf; + } + + CopyMem ( + *PktBuf, + TxData->FragmentTable[0].FragmentBuffer, + TxData->FragmentTable[0].FragmentLength + ); + *PktLen = TxData->FragmentTable[0].FragmentLength; } else { // @@ -235,10 +245,15 @@ MnpSyncSendPacket ( goto SIGNAL_TOKEN; } - // - // Insert VLAN tag - // - MnpInsertVlanTag (MnpServiceData, TxData, &ProtocolType, &Packet, &Length); + + if (MnpServiceData->VlanId != 0) { + // + // Insert VLAN tag + // + MnpInsertVlanTag (MnpServiceData, TxData, &ProtocolType, &Packet, &Length); + } else { + ProtocolType = TxData->ProtocolType; + } for (;;) { //