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;ds=sidebyside 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 (;;) { //