summaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorMarty Connor2007-07-03 19:20:54 +0200
committerMarty Connor2007-07-03 19:20:54 +0200
commit4bcfe7507b322bb5ed2faf11e3b6f1cf1abc83ae (patch)
tree38fdcad21781be96a85713753594acab6aa88224 /src/net
parentWarnings purge: src/{crypto,hci,net} (diff)
parentImplemented (untested) PXENV_START_UNDI. (diff)
downloadipxe-4bcfe7507b322bb5ed2faf11e3b6f1cf1abc83ae.tar.gz
ipxe-4bcfe7507b322bb5ed2faf11e3b6f1cf1abc83ae.tar.xz
ipxe-4bcfe7507b322bb5ed2faf11e3b6f1cf1abc83ae.zip
Merge branch 'master' of /pub/scm/gpxe
Diffstat (limited to 'src/net')
-rw-r--r--src/net/ipv4.c8
-rw-r--r--src/net/netdevice.c10
2 files changed, 14 insertions, 4 deletions
diff --git a/src/net/ipv4.c b/src/net/ipv4.c
index e1219edb6..35341b3d7 100644
--- a/src/net/ipv4.c
+++ b/src/net/ipv4.c
@@ -141,12 +141,20 @@ void del_ipv4_address ( struct net_device *netdev ) {
* @v dest Final destination address
* @ret dest Next hop destination address
* @ret miniroute Routing table entry to use, or NULL if no route
+ *
+ * If the route requires use of a gateway, the next hop destination
+ * address will be overwritten with the gateway address.
*/
static struct ipv4_miniroute * ipv4_route ( struct in_addr *dest ) {
struct ipv4_miniroute *miniroute;
int local;
int has_gw;
+ /* Never attempt to route the broadcast address */
+ if ( dest->s_addr == INADDR_BROADCAST )
+ return NULL;
+
+ /* Find first usable route in routing table */
list_for_each_entry ( miniroute, &ipv4_miniroutes, list ) {
local = ( ( ( dest->s_addr ^ miniroute->address.s_addr )
& miniroute->netmask.s_addr ) == 0 );
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 8a0991079..971830d97 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
@@ -356,15 +356,17 @@ struct net_device * find_netdev ( const char *name ) {
/**
* Get network device by PCI bus:dev.fn address
*
- * @v busdevfn PCI bus:dev.fn address
+ * @v bus_type Bus type
+ * @v location Bus location
* @ret netdev Network device, or NULL
*/
-struct net_device * find_pci_netdev ( unsigned int busdevfn ) {
+struct net_device * find_netdev_by_location ( unsigned int bus_type,
+ unsigned int location ) {
struct net_device *netdev;
list_for_each_entry ( netdev, &net_devices, list ) {
- if ( ( netdev->dev->desc.bus_type == BUS_TYPE_PCI ) &&
- ( netdev->dev->desc.location == busdevfn ) )
+ if ( ( netdev->dev->desc.bus_type == bus_type ) &&
+ ( netdev->dev->desc.location == location ) )
return netdev;
}