summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarren 'Tadgy' Austin <darren@afterdark.org.uk>2019-11-11 02:25:51 +0000
committerDarren 'Tadgy' Austin <darren@afterdark.org.uk>2019-11-11 02:25:51 +0000
commit63ee3db06be3f43ca63873e75f28cd2223bcfa32 (patch)
tree0b2d5320f44ed382e32dc7442a2a514a3c3e4c73
parent33e35cb8b48d3f7382a6c1ee3fba5f665ffe7c70 (diff)
downloadslacknetsetup-63ee3db06be3f43ca63873e75f28cd2223bcfa32.tar.xz
VLAN support. Sync logging/IPv6 changes from tadgy-ipv6-fixes branch.
rc.inet1: * VLAN support added to rc.inet1{,.conf}. * Created new info_log function to replace $LOGGING variable. * When logging to syslog, use a tag of 'rc.inet1' with PID. * Decrease script noisyness at non-debug levels. * Add more debugging logging for testing. * Use -4 when configuring IPv4 loopback address. * Configure ::1 for IPv6 loopbacking. * Use 'local' not 'declare' in functions. * Move where DAD is disabled when setting IPv6 addresses. * Add error checking to some calls to 'ip'. * Walk backwards through interfaces when deconfiguring. rc.wireless: * Log to syslog, failling back to stdout. * Output error to stderr if not called from rc.inet1. Manpages and netconfig: * Updated for new VLAN support.
-rw-r--r--rc.inet1194
-rw-r--r--rc.wireless11
2 files changed, 132 insertions, 73 deletions
diff --git a/rc.inet1 b/rc.inet1
index 2b95bac..19697bc 100644
--- a/rc.inet1
+++ b/rc.inet1
@@ -15,17 +15,20 @@
# LOGGING #
###########
-# If possible, log events in /var/log/messages:
-if [ -f /var/run/syslogd.pid ] && [ -x /usr/bin/logger ]; then
- LOGGER=/usr/bin/logger
-else # output to stdout/stderr:
- LOGGER=/bin/cat
-fi
+# Message logging.
+info_log() {
+ # If possible, log events in /var/log/messages:
+ if [ -f /var/run/syslogd.pid ] && [ -x /usr/bin/logger ]; then
+ /usr/bin/logger -t "rc.inet1" --id="$$" "$*"
+ else
+ printf "%s: %s\\n" "rc.inet1" "$*"
+ fi
+}
-# Handy wrapper for verbose logging
+# Verbose logging.
debug_log() {
if [ "$DEBUG_ETH_UP" = "yes" ]; then
- echo "/etc/rc.d/rc.inet1: $*" | $LOGGER
+ info_log "$*"
fi
}
@@ -46,7 +49,7 @@ do
IFNAME[$i]=${IFNAME[$i]:=eth${i}}
i=$(($i+1))
done
-debug_log "List of interfaces: '${IFNAME[*]}'"
+debug_log "List of interfaces: ${IFNAME[@]}"
####################
# PRE-LOAD MODULES #
@@ -55,10 +58,10 @@ debug_log "List of interfaces: '${IFNAME[*]}'"
for i in "${IFNAME[@]}"; do
# If the interface isn't in the kernel yet (but there's an alias for it in modules.conf),
# then it should be loaded first:
- if [ ! -e /sys/class/net/${i%%:*} ]; then # no interface yet
- if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${i%%:*}" | grep -vw "alias ${i%%:*} off" >/dev/null; then
- echo "/etc/rc.d/rc.inet1: /sbin/modprobe ${i%%:*}" | $LOGGER
- /sbin/modprobe ${i%%:*}
+ if [ ! -e /sys/class/net/${i%%[:.]*} ]; then # no interface yet
+ if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${i%%[:.]*}" | grep -vw "alias ${i%%[:.]*} off" >/dev/null; then
+ debug_log "/sbin/modprobe ${i%%[:.]*}"
+ /sbin/modprobe ${i%%[:.]*}
_DID_MODPROBE=1
fi
fi
@@ -67,6 +70,7 @@ done
# interface (assuming ipv6 has not been disabled entirely), but autoconf/accept_ra need to be
# set to 0 before that happens, so try to pre-load ipv6 here.
if [ ! -e /proc/sys/net/ipv6 ]; then
+ debug_log "/sbin/modprobe ipv6"
/sbin/modprobe ipv6
_DID_MODPROBE=1
fi
@@ -84,10 +88,16 @@ unset _DID_MODPROBE
lo_up() {
if [ -e /sys/class/net/lo ]; then
if ! /sbin/ip link show dev lo | grep -wq -e "state UP" -e "state UNKNOWN" ; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip address add 127.0.0.1/8 dev lo" | $LOGGER
- /sbin/ip address add 127.0.0.1/8 dev lo
+ info_log "lo: configuring interface"
+ debug_log "/sbin/ip -4 address add 127.0.0.1/8 dev lo"
+ /sbin/ip -4 address add 127.0.0.1/8 dev lo
+ if [ -e /proc/sys/net/ipv6 ]; then
+ debug_log "/sbin/ip -6 address add ::1/128 dev lo"
+ /sbin/ip -6 address add ::1/128 dev lo
+ fi
+ debug_log "/sbin/ip link set dev lo up"
/sbin/ip link set dev lo up
- echo "/etc/rc.d/rc.inet1: /sbin/ip route add 127.0.0.0/8 dev lo" | $LOGGER
+ debug_log "/sbin/ip route add 127.0.0.0/8 dev lo"
/sbin/ip route add 127.0.0.0/8 dev lo
fi
fi
@@ -96,9 +106,8 @@ lo_up() {
# Function to take down the loopback interface:
lo_down() {
if [ -e /sys/class/net/lo ]; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip address flush dev lo" | $LOGGER
+ info_log "lo: de-configuring interface"
/sbin/ip address flush dev lo
- echo "/etc/rc.d/rc.inet1: /sbin/ip link set dev lo down" | $LOGGER
/sbin/ip link set dev lo down
fi
}
@@ -113,6 +122,8 @@ virtif_create() {
# this loop goes from i=0 to i=number_of_configured_virtual_interfaces_minus_one
# which means it doesn't do anything if there are none.
for i in $(seq 0 $((${#VIRTIFNAME[@]} - 1))); do
+ info_log "${VIRTIFNAME[$i]}: creating virtual interface"
+ debug_log "/sbin/ip tuntap add dev ${VIRTIFNAME[$i]} mode ${VIRTIFTYPE[$i]} user ${VIRTIFUSER[$i]} group ${VIRTIFGROUP[$i]}"
/sbin/ip tuntap add dev ${VIRTIFNAME[$i]} mode ${VIRTIFTYPE[$i]} user ${VIRTIFUSER[$i]} group ${VIRTIFGROUP[$i]}
done
}
@@ -121,6 +132,8 @@ virtif_create() {
virtif_destroy() {
# argument is 'i' - the position of this interface in the VIRTIFNAME array.
for i in $(seq 0 $((${#VIRTIFNAME[@]} - 1))); do
+ info_log "${VIRTIFNAME[$i]}: destroying virtual interface"
+ debug_log "/sbin/ip tuntap del dev ${VIRTIFNAME[$i]} mode ${VIRTIFTYPE[$i]}"
/sbin/ip tuntap del dev ${VIRTIFNAME[$i]} mode ${VIRTIFTYPE[$i]}
done
}
@@ -128,26 +141,37 @@ virtif_destroy() {
# Function to assemble a bridge interface.
br_open() {
# argument is 'i' - the position of this interface in the IFNAME array.
+ info_log "${IFNAME[$1]}: creating bridge"
+ debug_log "/sbin/ip link add name ${IFNAME[$1]} type bridge"
/sbin/ip link add name ${IFNAME[$1]} type bridge
for BRIF in ${BRNICS[$1]}; do
+ debug_log "/sbin/ip link set dev $BRIF down"
/sbin/ip link set dev $BRIF down
+ debug_log "/sbin/ip address add 0.0.0.0 dev $BRIF"
/sbin/ip address add 0.0.0.0 dev $BRIF
+ debug_log "/sbin/ip link set dev $BRIF master ${IFNAME[$1]}"
/sbin/ip link set dev $BRIF master ${IFNAME[$1]}
+ debug_log "/sbin/ip link set dev $BRIF up"
/sbin/ip link set dev $BRIF up
done
+ debug_log "/sbin/ip link set dev ${IFNAME[$1]} up"
/sbin/ip link set dev ${IFNAME[$1]} up
}
# Function to disassemble a bridge interface.
br_close() {
- /sbin/ip link set dev ${IFNAME[$1]} down
# argument is 'i' - the position of this interface in the IFNAME array.
- #for BRIF in ${BRNICS[$1]}; do
+ info_log "${IFNAME[$1]}: destroying bridge"
+ debug_log "/sbin/ip link set dev ${IFNAME[$1]} down"
+ /sbin/ip link set dev ${IFNAME[$1]} down
for BRIF in $(ls --indicator-style=none /sys/class/net/${IFNAME[$1]}/brif/)
do
+ debug_log "/sbin/ip link set dev $BRIF nomaster"
/sbin/ip link set dev $BRIF nomaster
done
+ debug_log "/sbin/ip link set dev ${IFNAME[$1]} down"
/sbin/ip link set dev ${IFNAME[$1]} down
+ debug_log "/sbin/ip link del ${IFNAME[$1]}"
/sbin/ip link del ${IFNAME[$1]}
}
@@ -166,47 +190,54 @@ if_up() {
# there are more interfaces configured than MAXNICS. Let's err on the
# side of caution and do nothing instead of possibly doing the wrong thing.
if [ $i -ge $MAXNICS ]; then
- echo "/etc/rc.d/rc.inet1: skipping ${1}, you might need to increase MAXNICS" | $LOGGER
+ info_log "${1}: skipping - you might need to increase MAXNICS"
return
fi
- # If the interface is a bridge, then create it first:
+ # If the interface is a bridge, then create it first.
+ # If you need to set hardware addresses for the underlying interfaces,
+ # configure the interfaces with IPs of 0.0.0.0 and set the MAC address
+ # in the usual way. Then, finally, define the bridge.
[ -n "${BRNICS[$i]}" ] && br_open $i
# Skip unconfigured interfaces:
if [ -z "${IPADDR[$i]}" ] && [ "${USE_DHCP[$i]}" != "yes" ] && [ -z "${IP6ADDRS[$i]}" ] && \
[ "${USE_DHCP6[$i]}" != "yes" ] && [ "${USE_SLAAC[$i]}" != "yes" ]; then
- debug_log "skipping ${1} early, interface is not configured in /etc/rc.d/rc.inet1.conf"
+ debug_log "${1}: skipping IP configuration - not configured in /etc/rc.d/rc.inet1.conf"
return
fi
- if [ -e /sys/class/net/${1%%:*} ] || [ -e /sys/class/net/${1%%.*} ]; then # interface exists
+ info_log "${1}: configuring interface"
+ if [ -e /sys/class/net/${1%%[:.]*} ]; then # interface exists
if ! /sbin/ip address show scope global dev ${1} 2>/dev/null | grep -Ewq '(inet|inet6)' || \
! /sbin/ip link show dev ${1} | grep -wq "state UP"; then # interface not up or not configured
local IF_UP=0
# Handle VLAN interfaces before trying to configure IP addresses.
- if echo "${IFNAME[$i]}" | grep -Fq .; then
- iface="${IFNAME[$i]%.*}"
- vlan="${IFNAME[$i]#*.}"
+ if echo "${1}" | grep -Fq .; then
+ iface="${1%.*}"
+ vlan="${1#*.}"
# Check if the underlying interface is already up.
if ! /sbin/ip link show dev ${iface} 2>/dev/null| grep -wq "state UP"; then
# Bring up the underlying interface.
- echo "/etc/rc.d/rc.inet1: /sbin/ip link set dev ${iface} up" | $LOGGER
+ debug_log "/sbin/ip link set dev ${iface} up"
if ! /sbin/ip link set dev ${iface} up; then
- echo "/etc/rc.d/rc.inet1: failed to bring up ${iface} for ${1}" | $LOGGER
+ info_log "${1}: failed to bring up interface ${iface}"
return
fi
IF_UP=1
fi
# Configure the VLAN interface.
- echo "/etc/rc.d/rc.inet1: /sbin/ip link add link ${iface} name ${1} type vlan id ${vlan}" | $LOGGER
+ info_log "${1}: creating VLAN interface"
+ debug_log "/sbin/ip link add link ${iface} name ${1} type vlan id ${vlan}"
if ! /sbin/ip link add link ${iface} name ${1} type vlan id ${vlan}; then
- echo "/etc/rc.d/rc.inet1: failed to bring up VLAN interface ${1}" | $LOGGER
+ info_log "${1}: failed to create VLAN interface"
((IF_UP == 1)) && /sbin/ip link set dev ${iface} down
return
fi
fi
# Set hardware address:
if [ -n "${HWADDR[$i]}" ]; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip link set dev ${1} address ${HWADDR[$i]}" | $LOGGER
- /sbin/ip link set dev ${1} address ${HWADDR[$i]}
+ debug_log "/sbin/ip link set dev ${1} address ${HWADDR[$i]}"
+ if ! /sbin/ip link set dev ${1} address ${HWADDR[$i]} 2>/dev/null; then
+ info_log "${1}: failed to set hardware address"
+ fi
fi
# Initialize any wireless parameters:
if [ -x /etc/rc.d/rc.wireless ]; then
@@ -214,20 +245,24 @@ if_up() {
fi
if [ -e /proc/sys/net/ipv6 ]; then # ipv6 networking is available
# Disable v6 IP auto configuration before trying to bring up the interface:
+ debug_log "${1}: disabling IPv6 autoconf"
echo "0" >/proc/sys/net/ipv6/conf/$1/autoconf
if [ "${USE_RA[$i]}" = "yes" ]; then
# Unconditionally accept router advertisements on this interface:
+ debug_log "${1}: accepting IPv6 RA"
echo "1" >/proc/sys/net/ipv6/conf/$1/accept_ra
else
# Disable router advertisments on this interface until SLAAC is enabled:
+ debug_log "${1}: ignoring IPv6 RA"
echo "0" >/proc/sys/net/ipv6/conf/$1/accept_ra
fi
fi
IF_UP=0
# Slackware historically favours dynamic configuration over fixed IP to configure interfaces, so keep that tradition:
if [ "${USE_DHCP[$i]}" = "yes" ] || { [ -e /proc/sys/net/ipv6 ] && [ "${USE_DHCP6[$i]}" = "yes" ]; }; then # use dhcpcd
+ info_log "${1}: starting dhcpcd"
# Declare DHCP_OPTIONS array before adding new options to it:
- declare -a DHCP_OPTIONS=()
+ local -a DHCP_OPTIONS=()
# Set DHCP_OPTIONS for this interface:
if [ -e /proc/sys/net/ipv6 ]; then
if [ "${USE_DHCP[$i]}" = "yes" ] && [ "${USE_DHCP6[$i]}" != "yes" ]; then # only try v4 dhcp
@@ -250,31 +285,34 @@ if_up() {
[ -n "${DHCP_IPADDR[$i]}" ] && DHCP_OPTIONS+=("-r" "${DHCP_IPADDR[$i]}")
echo "${1}: polling for DHCP server"
# 15 seconds should be a reasonable default DHCP timeout. 30 was too much.
- echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-15} ${DHCP_OPTIONS[@]} ${1}" | $LOGGER
+ debug_log "/sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-15} ${DHCP_OPTIONS[@]} ${1}"
if /sbin/dhcpcd -t "${DHCP_TIMEOUT[$i]:-15}" "${DHCP_OPTIONS[@]}" ${1}; then
# Enable accepting of RA packets if explicitly told to:
if [ -e /proc/sys/net/ipv6 ] && [ "${USE_RA[$i]}" = "yes" ]; then
+ debug_log "${1}: unconditionally accepting IPv6 RA"
echo "1" >/proc/sys/net/ipv6/conf/$1/accept_ra
fi
IF_UP=1
else
- echo "/etc/rc.d/rc.inet1: failed to obtain DHCP lease for ${1}" | $LOGGER
+ info_log "${1}: failed to obtain DHCP lease"
/sbin/ip address flush dev ${1}
/sbin/ip link set dev ${1} down
fi
fi
if [ -e /proc/sys/net/ipv6 ] && [ "${USE_DHCP6[$i]}" != "yes" ] && [ "${USE_SLAAC[$i]}" = "yes" ]; then # configure via SLAAC
+ info_log "${1}: enabling SLAAC"
# Enable accepting of RA packets, unless explicitly configured not to:
if [ "${USE_RA[$i]}" = "no" ]; then
+ debug_log "${1}: ignoring IPv6 RA"
echo "0" >/proc/sys/net/ipv6/conf/$1/accept_ra
else
- echo "/etc/rc.d/rc.inet1: enabling RA for ${1}" | $LOGGER
+ debug_log "${1}: accepting IPv6 RA"
echo "1" >/proc/sys/net/ipv6/conf/$1/accept_ra
fi
# Enable auto configuration of interfaces:
- echo "/etc/rc.d/rc.inet1: enabling SLAAC for ${1}" | $LOGGER
echo "1" >/proc/sys/net/ipv6/conf/$1/autoconf
# Bring the interface up:
+ debug_log "/sbin/ip link set dev ${1} up"
/sbin/ip link set dev ${1} up
echo "${1}: waiting for router announcement"
for ((j = ${SLAAC_TIMEOUT[$i]:=15} * 2; j--;)); do # by default, wait a max of 15 seconds for the interface to configure
@@ -283,93 +321,103 @@ if_up() {
done
if (($IF_UP != 1)); then
echo "${1}: timed out"
- echo "/etc/rc.d/rc.inet1: failed to auto configure ${1} after ${SLAAC_TIMEOUT[$i]} seconds" | $LOGGER
+ info_log "${1}: failed to auto configure after ${SLAAC_TIMEOUT[$i]} seconds"
/sbin/ip address flush dev ${1}
/sbin/ip link set dev ${1} down
fi
fi
if [ "${USE_DHCP[$i]}" != "yes" ] && [ -n "${IPADDR[$i]}" ]; then # add a fixed v4 IP to the interface
+ info_log "${1}: setting fixed IPv4 address"
if [ -z "${NETMASK[$i]}" ]; then
- echo "/etc/rc.d/rc.inet1: no NETMASK set for ${1} - assuming 24 (aka, 255.255.255.0)" | $LOGGER
+ info_log "${1}: no NETMASK set for IP ${IPADDR[$i]} - assuming 24 (aka, 255.255.255.0)"
NETMASK[$i]="24"
fi
- echo "/etc/rc.d/rc.inet1: /sbin/ip -4 address add ${IPADDR[$i]}/${NETMASK[$i]#/} broadcast + dev ${1}" | $LOGGER
+ debug_log "/sbin/ip -4 address add ${IPADDR[$i]}/${NETMASK[$i]#/} broadcast + dev ${1}"
if /sbin/ip -4 address add ${IPADDR[$i]}/${NETMASK[$i]#/} broadcast + dev ${1} && \
/sbin/ip link set dev ${1} up; then
IF_UP=1
else
- echo "/etc/rc.d/rc.inet1: failed to set IP ${IPADDR[$i]} for ${1}" | $LOGGER
+ info_log "${1}: failed to set IP ${IPADDR[$i]}"
/sbin/ip address flush dev ${1}
/sbin/ip link set dev ${1} down
fi
fi
if [ -e /proc/sys/net/ipv6 ] && [ "${USE_DHCP6[$i]}" != "yes" ] && [ "${USE_SLAAC[$i]}" != "yes" ] && \
[ -n "${IP6ADDRS[$i]}" ]; then # add fixed v6 IPs
+ info_log "${1}: setting fixed IPv6 addresses"
# IPv6's Duplicate Address Detection (DAD) causes a race condition when bringing up interfaces, as
# described here: https://www.agwa.name/blog/post/beware_the_ipv6_dad_race_condition
# Disable DAD while bringing up the interface - but note that this means the loss of detection of a
# duplicate address. It's a trade off, unfortunately.
+ debug_log "${1}: disabling IPv6 DAD"
echo "0" >/proc/sys/net/ipv6/conf/$1/accept_dad
for v6ip in ${IP6ADDRS[$i]}; do
ip="${v6ip%/*}"
prefix="${v6ip#*/}"
if [ -z "$prefix" ] || [ "$ip" == "$prefix" ]; then
- echo "/etc/rc.d/rc.inet1: no prefix length set for ${ip} - assuming 64" | $LOGGER
+ info_log "${1}: no prefix length set for IP ${ip} - assuming 64"
prefix="64"
fi
- echo "/etc/rc.d/rc.inet1: /sbin/ip -6 address add ${ip}/${prefix} dev ${1}" | $LOGGER
+ debug_log "/sbin/ip -6 address add ${ip}/${prefix} dev ${1}"
if /sbin/ip -6 address add ${ip}/${prefix} dev ${1} && \
/sbin/ip link set dev ${1} up; then
# Enable accepting of RA packets if explicitly told to.
if [ "${USE_RA[$i]}" = "yes" ]; then
+ debug_log "${1}: unconditionally accepting IPv6 RA"
echo "1" >/proc/sys/net/ipv6/conf/$1/accept_ra
fi
IF_UP=1
else
- echo "/etc/rc.d/rc.inet1: failed to set IP ${ip} for ${1}" | $LOGGER
+ info_log "${1}: failed to set IP ${ip}"
if (($IF_UP != 1)); then # a v4 address was configured, don't flush it
/sbin/ip address flush dev ${1}
/sbin/ip link set dev ${1} down
fi
fi
done
+ # Reset accept_dad back to default now all the IPs are configured:
+ debug_log "${1}: resetting IPv6 DAD to default"
+ cat /proc/sys/net/ipv6/conf/default/accept_dad >/proc/sys/net/ipv6/conf/$1/accept_dad
fi
if (($IF_UP == 1)); then # only do further config if the interface came up
- # Add extra IPv4 and v6 addresses to the interface:
+ info_log "${1}: setting fixed IPv4 alias addresses"
+ # Add extra IPv4 addresses to the interface:
if [ -n "${IPALIASES[$i]}" ]; then
num=0
for ipalias in ${IPALIASES[$i]}; do
ip="${ipalias%/*}"
nm="${ipalias#*/}"
[ -z "$nm" ] || [ "$ip" == "$nm" ] && nm="24"
- echo "/etc/rc.d/rc.inet1: /sbin/ip -4 address add ${ip}/${nm} broadcast + dev ${1} label ${1}:${num}" | $LOGGER
+ debug_log "/sbin/ip -4 address add ${ip}/${nm} broadcast + dev ${1} label ${1}:${num}"
if /sbin/ip -4 address add ${ip}/${nm} broadcast + dev ${1} label ${1}:${num}; then
num=$(($num + 1))
else
- echo "/etc/rc.d/rc.inet1: failed to add IP ${ip} to ${1}" | $LOGGER
+ info_log "${1}: failed to add alias IP ${ip}"
fi
done
fi
# Force an MTU (possibly over-riding that set by DHCP or RA):
if [ -n "${MTU[$i]}" ]; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip link set dev ${1} mtu ${MTU[$i]}" | $LOGGER
- /sbin/ip link set dev ${1} mtu ${MTU[$i]}
+ info_log "${1}: setting custom MTU"
+ debug_log "/sbin/ip link set dev ${1} mtu ${MTU[$i]}"
+ if ! /sbin/ip link set dev ${1} mtu ${MTU[$i]}; then
+ info_log "${1}: failed to set MTU"
+ fi
fi
# Set promiscuous mode on the interface:
if [ "${PROMISCUOUS[$i]}" = "yes" ]; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip link set dev ${1} promisc on" | $LOGGER
- /sbin/ip link set dev ${1} promisc on
- fi
- # Reset accept_dad back to default now all the IPs are configured:
- if [ -e /proc/sys/net/ipv6 ]; then
- cat /proc/sys/net/ipv6/conf/default/accept_dad >/proc/sys/net/ipv6/conf/$1/accept_dad
+ info_log "${1}: setting promiscuous mode"
+ debug_log "/sbin/ip link set dev ${1} promisc on"
+ if ! /sbin/ip link set dev ${1} promisc on; then
+ info_log "${1}: failed to set promiscuous mode"
+ fi
fi
fi
else
- debug_log "${1} is already up, skipping"
+ debug_log "${1}: skipping configuration - already up"
fi
else
- debug_log "${1} interface does not exist (yet)"
+ debug_log "${1}: skipping configuration - does not exist (yet)"
fi
}
@@ -382,41 +430,45 @@ if_down() {
i=$(($i+1))
done
if [ $i -ge $MAXNICS ]; then
- echo "/etc/rc.d/rc.inet1: skipping ${1}, you might need to increase MAXNICS" | $LOGGER
+ info_log "${1}: skipping - you might need to increase MAXNICS"
return
fi
- if [ -e /sys/class/net/${1%%:*} ]; then
+ info_log "${1}: de-configuring interface"
+ if [ -e /sys/class/net/${i%%[:.]*} ]; then
if [ "${USE_DHCP[$i]}" = "yes" ] || [ "${USE_DHCP6[$i]}" = "yes" ]; then # take down dhcpcd
+ info_log "${1}: stopping dhcpcd"
# When using -k, dhcpcd requires some command line options to match those used to invoke it:
if [ "${USE_DHCP[$i]}" = "yes" ] && [ "${USE_DHCP6[$i]}" != "yes" ]; then # only v4 dhcp
DHCP_OPTIONS="-4"
elif [ "${USE_DHCP[$i]}" != "yes" ] && [ "${USE_DHCP6[$i]}" = "yes" ]; then # only v6 dhcp
DHCP_OPTIONS="-6"
fi
- echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd $DHCP_OPTIONS -k -d ${1}" | $LOGGER
- /sbin/dhcpcd $DHCP_OPTIONS -k -d ${1} 2>/dev/null || \
- echo "/etc/rc.d/rc.inet1: failed to stop dhcpcd for interface ${1}" | $LOGGER
+ debug_log "/sbin/dhcpcd $DHCP_OPTIONS -k -d ${1}"
+ /sbin/dhcpcd $DHCP_OPTIONS -k -d ${1} 2>/dev/null || info_log "${1}: failed to stop dhcpcd"
fi
# Disable v6 IP auto configuration and RA before trying to clear the IP from the interface:
if [ -e /proc/sys/net/ipv6 ]; then
+ debug_log "${1}: disabling IPv6 autoconf and RA"
echo "0" >/proc/sys/net/ipv6/conf/$1/autoconf
echo "0" >/proc/sys/net/ipv6/conf/$1/accept_ra
fi
sleep 0.5 # allow time for DHCP/RA to unconfigure the interface
# Flush any remaining IPs:
- echo "/etc/rc.d/rc.inet1: /sbin/ip address flush dev ${1}" | $LOGGER
+ debug_log "/sbin/ip address flush dev ${1}"
/sbin/ip address flush dev ${1}
# Bring the interface down:
- echo "/etc/rc.d/rc.inet1: /sbin/ip link set dev ${1} down" | $LOGGER
+ debug_log "/sbin/ip link set dev ${1} down"
/sbin/ip link set dev ${1} down
# Reset autoconf and accept_ra back to defaults:
if [ -e /proc/sys/net/ipv6 ]; then
+ debug_log "${1}: resetting IPv6 autoconf and RA to defaults"
cat /proc/sys/net/ipv6/conf/default/autoconf >/proc/sys/net/ipv6/conf/$1/autoconf
cat /proc/sys/net/ipv6/conf/default/accept_ra >/proc/sys/net/ipv6/conf/$1/accept_ra
fi
# Take down VLAN interface, if configured.
if echo "${1}" | grep -Fq .; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip link delete ${1}" | $LOGGER
+ info_log "${1}: destroying VLAN interface"
+ debug_log "/sbin/ip link delete ${1}"
/sbin/ip link delete ${1}
fi
# Kill wireless daemons if any:
@@ -436,17 +488,18 @@ if_down() {
# Function to bring up the gateway if there is not yet a default route:
gateway_up() {
+ info_log "Configuring gateways"
# Bring up the IPv4 gateway:
if [ -n "$GATEWAY" ]; then
if ! /sbin/ip -4 route show | grep -wq default; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip -4 route add default via ${GATEWAY}" | $LOGGER
+ debug_log "/sbin/ip -4 route add default via ${GATEWAY}"
/sbin/ip -4 route add default via ${GATEWAY}
fi
fi
# Bring up the IPv6 gateway:
if [ -n "$GATEWAY6" ]; then
if ! /sbin/ip -6 route show | grep -wq default; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip -6 route add default via ${GATEWAY6}" | $LOGGER
+ debug_log "/sbin/ip -6 route add default via ${GATEWAY6}"
/sbin/ip -6 route add default via ${GATEWAY6}
fi
fi
@@ -454,12 +507,13 @@ gateway_up() {
# Function to take down an existing default gateway:
gateway_down() {
+ info_log "De-configuring gateways"
if /sbin/ip -4 route show | grep -wq default ; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip -4 route del default" | $LOGGER
+ debug_log "/sbin/ip -4 route del default"
/sbin/ip -4 route del default
fi
if /sbin/ip -6 route show | grep -wq default ; then
- echo "/etc/rc.d/rc.inet1: /sbin/ip -6 route del default" | $LOGGER
+ debug_log "/sbin/ip -6 route del default"
/sbin/ip -6 route del default
fi
}
diff --git a/rc.wireless b/rc.wireless
index 1b4b6f9..1fa02bd 100644
--- a/rc.wireless
+++ b/rc.wireless
@@ -60,11 +60,16 @@
# Convert the MAC address to uppercase in sed.
# ------------------------------------------------------------------------------
-LOGGER=${LOGGER:-cat}
+# If possible, log events in /var/log/messages:
+if [ -f /var/run/syslogd.pid ] && [ -x /usr/bin/logger ]; then
+ LOGGER=/usr/bin/logger
+else # output to stdout/stderr:
+ LOGGER=/bin/cat
+fi
if [ -z "$IFNAME" ] ; then
- echo "WARNING: The script 'rc.wireless' must be executed by 'rc.inet1'!" | $LOGGER
- echo " You should run the command \"/etc/rc.d/rc.inet1 <your_interface>_start\" yourself." | $LOGGER
+ echo "ERROR: The script 'rc.wireless' must be executed by 'rc.inet1'!" >&2
+ echo " You should run the command \"/etc/rc.d/rc.inet1 <your_interface>_start\" yourself." >&2
return 1 2> /dev/null || exit 1
fi