Fix a bug for vlan ping failure.
authorWu Jiaxin <jiaxin.wu@intel.com>
Mon, 23 Dec 2013 08:43:09 +0000 (08:43 +0000)
committerjiaxinwu <jiaxinwu@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 23 Dec 2013 08:43:09 +0000 (08:43 +0000)
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

MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c
MdeModulePkg/Universal/Network/MnpDxe/MnpVlan.c
MdeModulePkg/Universal/Network/MnpDxe/MnpVlan.h

index 1aa3207..b8f61bf 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implementation of Managed Network Protocol I/O functions.\r
 \r
 /** @file\r
   Implementation of Managed Network Protocol I/O functions.\r
 \r
-Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2005 - 2013, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
 of the BSD License which accompanies this distribution.  The full\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
 of the BSD License which accompanies this distribution.  The full\r
@@ -130,10 +130,20 @@ MnpBuildTxPacket (
   MnpDerviceData = MnpServiceData->MnpDeviceData;\r
   if ((TxData->DestinationAddress == NULL) && (TxData->FragmentCount == 1)) {\r
     //\r
   MnpDerviceData = MnpServiceData->MnpDeviceData;\r
   if ((TxData->DestinationAddress == NULL) && (TxData->FragmentCount == 1)) {\r
     //\r
-    // Media header is in FragmentTable and there is only one fragment,\r
-    // use fragment buffer directly.\r
+    // Reserve space for vlan tag,if necessary.\r
     //\r
     //\r
-    *PktBuf = TxData->FragmentTable[0].FragmentBuffer;\r
+    if (MnpServiceData->VlanId != 0) {\r
+      *PktBuf = MnpDerviceData->TxBuf + NET_VLAN_TAG_LEN;\r
+    } else {\r
+      *PktBuf = MnpDerviceData->TxBuf;\r
+    } \r
+    \r
+    CopyMem (\r
+        *PktBuf,\r
+        TxData->FragmentTable[0].FragmentBuffer,\r
+        TxData->FragmentTable[0].FragmentLength\r
+        );\r
+    \r
     *PktLen = TxData->FragmentTable[0].FragmentLength;\r
   } else {\r
     //\r
     *PktLen = TxData->FragmentTable[0].FragmentLength;\r
   } else {\r
     //\r
@@ -235,10 +245,15 @@ MnpSyncSendPacket (
     goto SIGNAL_TOKEN;\r
   }\r
 \r
     goto SIGNAL_TOKEN;\r
   }\r
 \r
-  //\r
-  // Insert VLAN tag\r
-  //\r
-  MnpInsertVlanTag (MnpServiceData, TxData, &ProtocolType, &Packet, &Length);\r
+  \r
+  if (MnpServiceData->VlanId != 0) {\r
+    //\r
+    // Insert VLAN tag\r
+    //\r
+    MnpInsertVlanTag (MnpServiceData, TxData, &ProtocolType, &Packet, &Length);\r
+  } else {\r
+    ProtocolType = TxData->ProtocolType;\r
+  }\r
 \r
   for (;;) {\r
     //\r
 \r
   for (;;) {\r
     //\r
index 850ed51..aa7da98 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   VLAN Config Protocol implementation and VLAN packet process routine.\r
 \r
 /** @file\r
   VLAN Config Protocol implementation and VLAN packet process routine.\r
 \r
-Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
 of the BSD License which accompanies this distribution.  The full\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
 of the BSD License which accompanies this distribution.  The full\r
@@ -171,7 +171,7 @@ MnpRemoveVlanTag (
 \r
 \r
 /**\r
 \r
 \r
 /**\r
-  Build the packet to transmit from the TxData passed in.\r
+  Build the vlan packet to transmit from the TxData passed in.\r
 \r
   @param  MnpServiceData         Pointer to the mnp service context data.\r
   @param  TxData                 Pointer to the transmit data containing the\r
 \r
   @param  MnpServiceData         Pointer to the mnp service context data.\r
   @param  TxData                 Pointer to the transmit data containing the\r
@@ -197,11 +197,6 @@ MnpInsertVlanTag (
   MNP_DEVICE_DATA         *MnpDeviceData;\r
   EFI_SIMPLE_NETWORK_MODE *SnpMode;\r
 \r
   MNP_DEVICE_DATA         *MnpDeviceData;\r
   EFI_SIMPLE_NETWORK_MODE *SnpMode;\r
 \r
-  if (MnpServiceData->VlanId == 0) {\r
-    *ProtocolType = TxData->ProtocolType;\r
-    return ;\r
-  }\r
-\r
   MnpDeviceData = MnpServiceData->MnpDeviceData;\r
   SnpMode       = MnpDeviceData->Snp->Mode;\r
 \r
   MnpDeviceData = MnpServiceData->MnpDeviceData;\r
   SnpMode       = MnpDeviceData->Snp->Mode;\r
 \r
index 70b6cec..d8eac8d 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Header file to be included by MnpVlan.c.\r
 \r
 /** @file\r
   Header file to be included by MnpVlan.c.\r
 \r
-Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
 of the BSD License which accompanies this distribution.  The full\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
 of the BSD License which accompanies this distribution.  The full\r
@@ -59,7 +59,7 @@ MnpRemoveVlanTag (
   );\r
 \r
 /**\r
   );\r
 \r
 /**\r
-  Build the packet to transmit from the TxData passed in.\r
+  Build the vlan packet to transmit from the TxData passed in.\r
 \r
   @param  MnpServiceData         Pointer to the mnp service context data.\r
   @param  TxData                 Pointer to the transmit data containing the\r
 \r
   @param  MnpServiceData         Pointer to the mnp service context data.\r
   @param  TxData                 Pointer to the transmit data containing the\r