mirror of https://github.com/ipxe/ipxe.git
Fix routing when a gateway exists. This should probably be split into
a separate function.pull/1/head
parent
8a3f4b7de6
commit
885a630ddf
|
@ -311,12 +311,15 @@ static int ipv4_tx ( struct pk_buff *pkb,
|
||||||
/* Use routing table to identify next hop and transmitting netdev */
|
/* Use routing table to identify next hop and transmitting netdev */
|
||||||
next_hop = iphdr->dest;
|
next_hop = iphdr->dest;
|
||||||
list_for_each_entry ( miniroute, &miniroutes, list ) {
|
list_for_each_entry ( miniroute, &miniroutes, list ) {
|
||||||
if ( ( ( ( iphdr->dest.s_addr ^ miniroute->address.s_addr ) &
|
int local, has_gw;
|
||||||
miniroute->netmask.s_addr ) == 0 ) ||
|
|
||||||
( miniroute->gateway.s_addr != INADDR_NONE ) ) {
|
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;
|
netdev = miniroute->netdev;
|
||||||
iphdr->src = miniroute->address;
|
iphdr->src = miniroute->address;
|
||||||
if ( miniroute->gateway.s_addr != INADDR_NONE )
|
if ( ! local )
|
||||||
next_hop = miniroute->gateway;
|
next_hop = miniroute->gateway;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue