From 924f202ee818c72b10855d3a1c06b34a9e7aa595 Mon Sep 17 00:00:00 2001 From: Ermal Date: Mon, 31 May 2010 19:14:29 +0000 Subject: Fixes #622. Add a new file status for signaling default gateway under /tmp. dhclient script will check for this file to define if the interface needs a default gateway or not from its given routes. --- etc/inc/system.inc | 16 +++++++++++++++- sbin/dhclient-script | 26 +++++++++----------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/etc/inc/system.inc b/etc/inc/system.inc index 6281a14..75e3f6d 100644 --- a/etc/inc/system.inc +++ b/etc/inc/system.inc @@ -263,15 +263,29 @@ function system_routing_configure() { $interfacegw = ""; /* tack on all the hard defined gateways as well */ if (is_array($config['gateways']['gateway_item'])) { + mwexec("/bin/rm {$g['tmp_path']}/*_defaultgw"); + $foundgw = false; foreach ($config['gateways']['gateway_item'] as $gateway) { if (isset($gateway['defaultgw'])) { if ($gateway['gateway'] == "dynamic") $gateway['gateway'] = get_interface_gateway($gateway['interface']); $gatewayip = $gateway['gateway']; $interfacegw = $gateway['interface']; + if (!empty($interfacegw)) { + $defaultif = get_real_interface($gateway['interface']); + if ($defaultif) + @file_put_contents("{$g['tmp_path']}/{$defaultif}_defaultgw", $gatewayip); + } + $foundgw = true; break; } } + if ($foundgw == false) { + $defaultif = get_real_interface("wan"); + $interfacegw = "wan"; + $gatewayip = get_interface_gateway("wan"); + @touch("{$g['tmp_path']}/{$defaultif}_defaultgw"); + } } $dont_add_route = false; /* if OLSRD is enabled, allow WAN to house DHCP. */ @@ -1418,4 +1432,4 @@ function system_get_dmesg_boot() { return file_get_contents("{$g['varlog_path']}/dmesg.boot"); } -?> \ No newline at end of file +?> diff --git a/sbin/dhclient-script b/sbin/dhclient-script index d7cd3a6..35ce76f 100755 --- a/sbin/dhclient-script +++ b/sbin/dhclient-script @@ -130,23 +130,22 @@ delete_old_routes() { } add_new_routes() { - $LOGGER "Adding new routes" - # $ROUTE add $new_ip_address $LOCALHOST >/dev/null 2>&1 + $LOGGER "Adding new routes to interface: $interface" # Only allow the default route to be overridden if it's on our own interface - DEFAULTROUTE_IFACE=`/sbin/route get default | grep interface | awk '{print $2};'` - if [ -z "${DEFAULTROUTE_IFACE}" -o "{$interface}" = "${DEFAULTROUTE_IFACE}" ]; then + if [ -f "/tmp/${interface}_defaultgw" ]; then + $ROUTE delete default for router in $new_routers; do if [ "$new_ip_address" = "$router" ]; then - $ROUTE add default -iface $router - #>/dev/null 2>&1 - echo $ROUTE add default -iface $router | $LOGGER - echo $new_routers > /tmp/${interface}_router + $ROUTE add default -iface $interface + echo $ROUTE add default -iface $interface | $LOGGER + echo $router > /tmp/${interface}_router + echo $router > /tmp/${interface}_defaultgw else $ROUTE add default $router echo $ROUTE add default $router | $LOGGER - #>/dev/null 2>&1 - echo $new_routers > /tmp/${interface}_router + echo $router > /tmp/${interface}_router + echo $router > /tmp/${interface}_defaultgw fi # 2nd and subsequent default routers error out, so explicitly # stop processing the list after the first one. @@ -163,13 +162,6 @@ add_new_routes() { echo $new_routers > /tmp/${interface}_router done fi - - # last ditch effort if no route exists. - DEFAULTROUTE=`$NETSTAT -rn | $GREP default` - if [ -z "${DEFAULTROUTE}" ]; then - $ROUTE add default -iface $interface - fi - } add_new_resolv_conf() { -- cgit v1.1