Revision: 14167
          http://edk2.svn.sourceforge.net/edk2/?rev=14167&view=rev
Author:   sfu5
Date:     2013-03-11 07:44:10 +0000 (Mon, 11 Mar 2013)
Log Message:
-----------
Fix a bug in IP4 driver that the broadcast/multicast mac address is overrided 
by the gateway?\226?\128?\153s mac address.
Signed-off-by: Fu Siyuan <[email protected]>
Reviewed-by: Ye Ting <[email protected]>
Reviewed-by: Ouyang Qian <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c

Modified: trunk/edk2/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c        
2013-03-11 01:22:51 UTC (rev 14166)
+++ trunk/edk2/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c        
2013-03-11 07:44:10 UTC (rev 14167)
@@ -1,7 +1,7 @@
 /** @file
   Transmit the IP4 packet.
   
-Copyright (c) 2005 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2005 - 2013, Intel Corporation. All rights reserved.<BR>
 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 text of the license may be 
found at
@@ -286,46 +286,40 @@
   if (EFI_ERROR(Status)) {
     return Status;
   }
+  
+  Dest = Head->Dst;
+  if (IP4_IS_BROADCAST (Ip4GetNetCast (Dest, IpIf)) || (Dest == 
IP4_ALLONE_ADDRESS)) {
+    //
+    // Set the gateway to local broadcast if the Dest is
+    // the broadcast address for the connected network or
+    // it is local broadcast.
+    //
+    GateWay = IP4_ALLONE_ADDRESS;
 
-  //
-  // Route the packet unless overrided, that is, GateWay isn't zero.
-  //
-  if (GateWay == IP4_ALLZERO_ADDRESS) {
-    Dest = Head->Dst;
+  } else if (IP4_IS_MULTICAST (Dest)) {
+    //
+    // Set the gateway to the destination if it is an multicast
+    // address. The IP4_INTERFACE won't consult ARP to send local
+    // broadcast and multicast.
+    //
+    GateWay = Head->Dst;
 
-    if (IP4_IS_BROADCAST (Ip4GetNetCast (Dest, IpIf)) || (Dest == 
IP4_ALLONE_ADDRESS)) {
-      //
-      // Set the gateway to local broadcast if the Dest is
-      // the broadcast address for the connected network or
-      // it is local broadcast.
-      //
-      GateWay = IP4_ALLONE_ADDRESS;
-
-    } else if (IP4_IS_MULTICAST (Dest)) {
-      //
-      // Set the gateway to the destination if it is an multicast
-      // address. The IP4_INTERFACE won't consult ARP to send local
-      // broadcast and multicast.
-      //
-      GateWay = Head->Dst;
-
+  } else if (GateWay == IP4_ALLZERO_ADDRESS) {
+    //
+    // Route the packet unless overrided, that is, GateWay isn't zero.
+    //
+    if (IpInstance == NULL) {
+      CacheEntry = Ip4Route (IpSb->DefaultRouteTable, Head->Dst, Head->Src);
     } else {
-      //
-      // Consult the route table to route the packet
-      //
-      if (IpInstance == NULL) {
-        CacheEntry = Ip4Route (IpSb->DefaultRouteTable, Head->Dst, Head->Src);
-      } else {
-        CacheEntry = Ip4Route (IpInstance->RouteTable, Head->Dst, Head->Src);
-      }
+      CacheEntry = Ip4Route (IpInstance->RouteTable, Head->Dst, Head->Src);
+    }
 
-      if (CacheEntry == NULL) {
-        return EFI_NOT_FOUND;
-      }
-
-      GateWay = CacheEntry->NextHop;
-      Ip4FreeRouteCacheEntry (CacheEntry);
+    if (CacheEntry == NULL) {
+      return EFI_NOT_FOUND;
     }
+
+    GateWay = CacheEntry->NextHop;
+    Ip4FreeRouteCacheEntry (CacheEntry);
   }
 
   //

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester  
Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the  
endpoint security space. For insight on selecting the right partner to 
tackle endpoint security challenges, access the full report. 
http://p.sf.net/sfu/symantec-dev2dev
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to