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:
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/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
|
local carrier nocarrier
|
||||||
|
|
||||||
carrier=1
|
carrier=1
|
||||||
for _if in ${dhcp_interfaces}; do
|
for _if in ${dhcp_interfaces} ${autoconf_interfaces}; do
|
||||||
output=`/sbin/ifconfig ${_if}`
|
output=`/sbin/ifconfig ${_if}`
|
||||||
nocarrier=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
|
nocarrier=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
|
||||||
[ -z "${nocarrier}" ] && carrier=0
|
[ -z "${nocarrier}" ] && carrier=0
|
||||||
@@ -32,22 +32,30 @@ defaultroute_carrier()
|
|||||||
|
|
||||||
defaultroute_start()
|
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
|
# Return without waiting if we don't have dhcp or autoconf interfaces,
|
||||||
# if none of the dhcp interfaces is plugged in.
|
# or if none of them is plugged in.
|
||||||
dhcp_interfaces=`list_net_interfaces dhcp`
|
[ ${have_inet} -ne 0 ] && dhcp_interfaces=`list_net_interfaces dhcp`
|
||||||
[ -z "${dhcp_interfaces}" ] && return
|
[ ${have_inet6} -ne 0 ] && autoconf_interfaces=`list_net_interfaces autoconf`
|
||||||
|
[ -z "${dhcp_interfaces}" -a -z "${autoconf_interfaces}" ] && return
|
||||||
|
|
||||||
# Wait for a default route
|
# Wait for a default route
|
||||||
waited=0
|
waited=0
|
||||||
while [ ${waited} -lt ${defaultroute_delay} ]; do
|
while [ ${waited} -lt ${defaultroute_delay} ]; do
|
||||||
defif=`get_default_if -inet`
|
[ ${have_inet} -ne 0 ] && defif=`get_default_if -inet`
|
||||||
if [ -n "${defif}" ]; then
|
[ ${have_inet6} -ne 0 ] && defif6=`get_default_if -inet6`
|
||||||
|
if [ -n "${defif}" ] || [ -n "${defif6}" ]; then
|
||||||
if [ ${waited} -ne 0 ]; then
|
if [ ${waited} -ne 0 ]; then
|
||||||
echo -n "($defif)"
|
[ -n "${defif}" ] && echo -n "($defif)=>inet "
|
||||||
|
[ -n "${defif6}" ] && echo -n "($defif6)=>inet6"
|
||||||
nl=1
|
nl=1
|
||||||
fi
|
fi
|
||||||
break
|
break
|
||||||
|
|||||||
Reference in New Issue
Block a user