Fix a bug for vlan ping failure.

Signed-off-by: Wu Jiaxin <jiaxin.wu@intel.com >
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Jin Eric <eric.jin@intel.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15017 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Wu Jiaxin 2013-12-23 08:43:09 +00:00 committed by jiaxinwu
parent da660118bd
commit bdebd2cecf
3 changed files with 27 additions and 17 deletions

View File

@ -1,7 +1,7 @@
/** @file /** @file
Implementation of Managed Network Protocol I/O functions. Implementation of Managed Network Protocol I/O functions.
Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2005 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The full of the BSD License which accompanies this distribution. The full
@ -130,10 +130,20 @@ MnpBuildTxPacket (
MnpDerviceData = MnpServiceData->MnpDeviceData; MnpDerviceData = MnpServiceData->MnpDeviceData;
if ((TxData->DestinationAddress == NULL) && (TxData->FragmentCount == 1)) { if ((TxData->DestinationAddress == NULL) && (TxData->FragmentCount == 1)) {
// //
// Media header is in FragmentTable and there is only one fragment, // Reserve space for vlan tag,if necessary.
// use fragment buffer directly.
// //
*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; *PktLen = TxData->FragmentTable[0].FragmentLength;
} else { } else {
// //
@ -235,10 +245,15 @@ MnpSyncSendPacket (
goto SIGNAL_TOKEN; goto SIGNAL_TOKEN;
} }
if (MnpServiceData->VlanId != 0) {
// //
// Insert VLAN tag // Insert VLAN tag
// //
MnpInsertVlanTag (MnpServiceData, TxData, &ProtocolType, &Packet, &Length); MnpInsertVlanTag (MnpServiceData, TxData, &ProtocolType, &Packet, &Length);
} else {
ProtocolType = TxData->ProtocolType;
}
for (;;) { for (;;) {
// //

View File

@ -1,7 +1,7 @@
/** @file /** @file
VLAN Config Protocol implementation and VLAN packet process routine. VLAN Config Protocol implementation and VLAN packet process routine.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The full of the BSD License which accompanies this distribution. The full
@ -171,7 +171,7 @@ MnpRemoveVlanTag (
/** /**
Build the packet to transmit from the TxData passed in. Build the vlan packet to transmit from the TxData passed in.
@param MnpServiceData Pointer to the mnp service context data. @param MnpServiceData Pointer to the mnp service context data.
@param TxData Pointer to the transmit data containing the @param TxData Pointer to the transmit data containing the
@ -197,11 +197,6 @@ MnpInsertVlanTag (
MNP_DEVICE_DATA *MnpDeviceData; MNP_DEVICE_DATA *MnpDeviceData;
EFI_SIMPLE_NETWORK_MODE *SnpMode; EFI_SIMPLE_NETWORK_MODE *SnpMode;
if (MnpServiceData->VlanId == 0) {
*ProtocolType = TxData->ProtocolType;
return ;
}
MnpDeviceData = MnpServiceData->MnpDeviceData; MnpDeviceData = MnpServiceData->MnpDeviceData;
SnpMode = MnpDeviceData->Snp->Mode; SnpMode = MnpDeviceData->Snp->Mode;

View File

@ -1,7 +1,7 @@
/** @file /** @file
Header file to be included by MnpVlan.c. Header file to be included by MnpVlan.c.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The full of the BSD License which accompanies this distribution. The full
@ -59,7 +59,7 @@ MnpRemoveVlanTag (
); );
/** /**
Build the packet to transmit from the TxData passed in. Build the vlan packet to transmit from the TxData passed in.
@param MnpServiceData Pointer to the mnp service context data. @param MnpServiceData Pointer to the mnp service context data.
@param TxData Pointer to the transmit data containing the @param TxData Pointer to the transmit data containing the