defaultroute: Fix dual-stack and IPv6-only handling
Since IPv6-only setups are becoming more common, and IPv6 connectivity is often sufficient for tasks such as DNS resolution and NTP time synchronization, update defaultroute rc.d script to support IPv6-only environments. Reviewed by: pouria, ae Differential Revision: https://reviews.freebsd.org/D56797
This commit is contained in:
committed by
Pouria Mousavizadeh Tehrani
parent
4258829c8f
commit
d52de9a344
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Wait for the default route to be up if DHCP is in use
|
||||
# Wait for the default route to be up if DHCPv4 or IPv6 SLAAC is in use
|
||||
#
|
||||
#
|
||||
|
||||
@@ -22,7 +22,7 @@ defaultroute_carrier()
|
||||
local carrier nocarrier
|
||||
|
||||
carrier=1
|
||||
for _if in ${dhcp_interfaces}; do
|
||||
for _if in ${dhcp_interfaces} ${autoconf_interfaces}; do
|
||||
output=`/sbin/ifconfig ${_if}`
|
||||
nocarrier=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
|
||||
[ -z "${nocarrier}" ] && carrier=0
|
||||
@@ -32,22 +32,30 @@ defaultroute_carrier()
|
||||
|
||||
defaultroute_start()
|
||||
{
|
||||
local nl waited
|
||||
local have_inet have_inet6 nl waited
|
||||
|
||||
afexists inet || return 0
|
||||
# Check for IPv4/IPv6 support
|
||||
have_inet=0
|
||||
afexists inet && have_inet=1
|
||||
have_inet6=0
|
||||
afexists inet6 && have_inet6=1
|
||||
[ ${have_inet} -eq 0 ] && [ ${have_inet6} -eq 0 ] && return
|
||||
|
||||
# Return without waiting if we don't have dhcp interfaces or
|
||||
# if none of the dhcp interfaces is plugged in.
|
||||
dhcp_interfaces=`list_net_interfaces dhcp`
|
||||
[ -z "${dhcp_interfaces}" ] && return
|
||||
# Return without waiting if we don't have dhcp or autoconf interfaces,
|
||||
# or if none of them is plugged in.
|
||||
[ ${have_inet} -ne 0 ] && dhcp_interfaces=`list_net_interfaces dhcp`
|
||||
[ ${have_inet6} -ne 0 ] && autoconf_interfaces=`list_net_interfaces autoconf`
|
||||
[ -z "${dhcp_interfaces}" -a -z "${autoconf_interfaces}" ] && return
|
||||
|
||||
# Wait for a default route
|
||||
waited=0
|
||||
while [ ${waited} -lt ${defaultroute_delay} ]; do
|
||||
defif=`get_default_if -inet`
|
||||
if [ -n "${defif}" ]; then
|
||||
[ ${have_inet} -ne 0 ] && defif=`get_default_if -inet`
|
||||
[ ${have_inet6} -ne 0 ] && defif6=`get_default_if -inet6`
|
||||
if [ -n "${defif}" ] || [ -n "${defif6}" ]; then
|
||||
if [ ${waited} -ne 0 ]; then
|
||||
echo -n "($defif)"
|
||||
[ -n "${defif}" ] && echo -n "($defif)=>inet "
|
||||
[ -n "${defif6}" ] && echo -n "($defif6)=>inet6"
|
||||
nl=1
|
||||
fi
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user