[ipv4] Ignore non-open net devices when performing routing
authorMichael Brown <mcb30@etherboot.org>
Sat, 14 Nov 2009 03:02:16 +0000 (03:02 +0000)
committerMichael Brown <mcb30@etherboot.org>
Mon, 16 Nov 2009 22:12:48 +0000 (22:12 +0000)
We do not discard routing table entries when closing an interface.  It
is plausible that multiple interfaces may be on the same physical
network; if so, then we may end up in a situation whereby outbound
packets attempt to route via a closed interface.

Fix by ignoring non-open net devices in ipv4_route().

src/net/ipv4.c

index 6b78ad7..4c1393f 100644 (file)
@@ -118,6 +118,8 @@ static struct ipv4_miniroute * ipv4_route ( struct in_addr *dest ) {
 
        /* Find first usable route in routing table */
        list_for_each_entry ( miniroute, &ipv4_miniroutes, list ) {
+               if ( ! ( miniroute->netdev->state & NETDEV_OPEN ) )
+                       continue;
                local = ( ( ( dest->s_addr ^ miniroute->address.s_addr )
                            & miniroute->netmask.s_addr ) == 0 );
                has_gw = ( miniroute->gateway.s_addr );