From 885a630ddfbda9687181d46c98604f6fb5bfe2f6 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 7 Aug 2006 17:51:19 +0000 Subject: [PATCH] Fix routing when a gateway exists. This should probably be split into a separate function. --- src/net/ipv4.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/net/ipv4.c b/src/net/ipv4.c index ce985326..a9635693 100644 --- a/src/net/ipv4.c +++ b/src/net/ipv4.c @@ -311,12 +311,15 @@ static int ipv4_tx ( struct pk_buff *pkb, /* Use routing table to identify next hop and transmitting netdev */ next_hop = iphdr->dest; list_for_each_entry ( miniroute, &miniroutes, list ) { - if ( ( ( ( iphdr->dest.s_addr ^ miniroute->address.s_addr ) & - miniroute->netmask.s_addr ) == 0 ) || - ( miniroute->gateway.s_addr != INADDR_NONE ) ) { + int local, has_gw; + + local = ( ( ( iphdr->dest.s_addr ^ miniroute->address.s_addr ) + & miniroute->netmask.s_addr ) == 0 ); + has_gw = ( miniroute->gateway.s_addr != INADDR_NONE ); + if ( local || has_gw ) { netdev = miniroute->netdev; iphdr->src = miniroute->address; - if ( miniroute->gateway.s_addr != INADDR_NONE ) + if ( ! local ) next_hop = miniroute->gateway; break; }