mirror of https://github.com/ipxe/ipxe.git
[ipv4] Allow calculation of default subnet mask
ipv4.c calculates the default subnet mask before calling
fetch_ipv4_setting() to retrieve the configured subnet mask (if any).
However, as of commit 612f4e7
"[settings] Avoid returning
uninitialised data on error in fetch_xxx_setting()",
fetch_ipv4_setting() will zero the IP address if the setting does not
exist, rather than leaving it unaltered.
Fix by fetching the setting first and calculating the default subnet
mask only if necessary.
pull/1/head
parent
2ce0d8f08b
commit
55d23b19a2
|
@ -600,18 +600,18 @@ static int ipv4_create_routes ( void ) {
|
|||
fetch_ipv4_setting ( settings, &ip_setting, &address );
|
||||
if ( ! address.s_addr )
|
||||
continue;
|
||||
/* Calculate default netmask */
|
||||
/* Get subnet mask */
|
||||
fetch_ipv4_setting ( settings, &netmask_setting, &netmask );
|
||||
/* Calculate default netmask, if necessary */
|
||||
if ( ! netmask.s_addr ) {
|
||||
if ( IN_CLASSA ( ntohl ( address.s_addr ) ) ) {
|
||||
netmask.s_addr = htonl ( IN_CLASSA_NET );
|
||||
} else if ( IN_CLASSB ( ntohl ( address.s_addr ) ) ) {
|
||||
netmask.s_addr = htonl ( IN_CLASSB_NET );
|
||||
} else if ( IN_CLASSC ( ntohl ( address.s_addr ) ) ) {
|
||||
netmask.s_addr = htonl ( IN_CLASSC_NET );
|
||||
} else {
|
||||
netmask.s_addr = 0;
|
||||
}
|
||||
/* Override with subnet mask, if present */
|
||||
fetch_ipv4_setting ( settings, &netmask_setting, &netmask );
|
||||
}
|
||||
/* Get default gateway, if present */
|
||||
fetch_ipv4_setting ( settings, &gateway_setting, &gateway );
|
||||
/* Configure route */
|
||||
|
|
Loading…
Reference in New Issue