From 646a5c1cbfd95873950a87b5f75d52073a967023 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Mon, 28 May 2018 19:12:29 +0000 Subject: Mon May 28 19:12:29 UTC 2018 a/pkgtools-15.0-noarch-13.txz: Rebuilt. installpkg: default line length for --terselength is the number of columns. removepkg: added --terse mode. upgradepkg: default line length for --terselength is the number of columns. upgradepkg: accept -option in addition to --option. ap/vim-8.1.0026-x86_64-1.txz: Upgraded. d/bison-3.0.5-x86_64-1.txz: Upgraded. e/emacs-26.1-x86_64-1.txz: Upgraded. kde/kopete-4.14.3-x86_64-8.txz: Rebuilt. Recompiled against libidn-1.35. n/conntrack-tools-1.4.5-x86_64-1.txz: Upgraded. n/libnetfilter_conntrack-1.0.7-x86_64-1.txz: Upgraded. n/libnftnl-1.1.0-x86_64-1.txz: Upgraded. n/links-2.16-x86_64-2.txz: Rebuilt. Rebuilt to enable X driver for -g mode. n/lynx-2.8.9dev.19-x86_64-1.txz: Upgraded. n/nftables-0.8.5-x86_64-1.txz: Upgraded. n/p11-kit-0.23.11-x86_64-1.txz: Upgraded. n/ulogd-2.0.7-x86_64-1.txz: Upgraded. n/whois-5.3.1-x86_64-1.txz: Upgraded. xap/network-manager-applet-1.8.12-x86_64-1.txz: Upgraded. xap/vim-gvim-8.1.0026-x86_64-1.txz: Upgraded. --- source/ap/lxc/scripts/rc.inet1.orig | 242 +++++++++++++++++++++--------------- 1 file changed, 140 insertions(+), 102 deletions(-) (limited to 'source/ap/lxc/scripts/rc.inet1.orig') diff --git a/source/ap/lxc/scripts/rc.inet1.orig b/source/ap/lxc/scripts/rc.inet1.orig index f2d85a6d0..2f566ef89 100644 --- a/source/ap/lxc/scripts/rc.inet1.orig +++ b/source/ap/lxc/scripts/rc.inet1.orig @@ -16,12 +16,19 @@ ########### # If possible, log events in /var/log/messages: -if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then +if [ -f /var/run/syslogd.pid ] && [ -x /usr/bin/logger ]; then LOGGER=/usr/bin/logger else # output to stdout/stderr: LOGGER=/bin/cat fi +# Handy wrapper for verbose logging +debug_log() { + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: $*" | $LOGGER + fi +} + ############################ # DETERMINE INTERFACE LIST # ############################ @@ -39,9 +46,7 @@ do IFNAME[$i]=${IFNAME[$i]:=eth${i}} i=$(($i+1)) done -if [ "$DEBUG_ETH_UP" = "yes" ]; then - echo "/etc/rc.d/rc.inet1: List of interfaces: '${IFNAME[@]}'" | $LOGGER -fi +debug_log "List of interfaces: '${IFNAME[*]}'" ###################### # LOOPBACK FUNCTIONS # @@ -50,21 +55,22 @@ fi # Function to bring up the loopback interface. If loopback is # already up, do nothing. lo_up() { - if grep lo: /proc/net/dev 1> /dev/null ; then - if ! /sbin/ifconfig | grep "^lo" 1> /dev/null ; then - echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1" | $LOGGER - /sbin/ifconfig lo 127.0.0.1 - echo "/etc/rc.d/rc.inet1: /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo" | $LOGGER - /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo + 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 + /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 + /sbin/ip route add 127.0.0.0/8 dev lo fi fi } # Function to take down the loopback interface: lo_down() { - if grep lo: /proc/net/dev 1> /dev/null ; then - echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo down" | $LOGGER - /sbin/ifconfig lo down + if [ -e /sys/class/net/lo ]; then + echo "/etc/rc.d/rc.inet1: /sbin/ip link set dev lo down" | $LOGGER + /sbin/ip link set dev lo down fi } @@ -72,27 +78,48 @@ lo_down() { # INTERFACE FUNCTIONS # ####################### +# Function to create virtual interfaces +virtif_create() { + # argument is 'i' - the position of this interface in the VIRTIFNAME array. + # 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 + /sbin/ip tuntap add dev ${VIRTIFNAME[$i]} mode ${VIRTIFTYPE[$i]} user ${VIRTIFUSER[$i]} group ${VIRTIFGROUP[$i]} + done +} + +# Function to destory virtual interfaces +virtif_destroy() { + # argument is 'i' - the position of this interface in the VIRTIFNAME array. + for i in $(seq 0 $((${#VIRTIFNAME[@]} - 1))); do + /sbin/ip tuntap del dev ${VIRTIFNAME[$i]} mode ${VIRTIFTYPE[$i]} + done +} + # Function to assemble a bridge interface. br_open() { # argument is 'i' - the position of this interface in the IFNAME array. - /sbin/brctl addbr ${IFNAME[$1]} - for BRIF in $(echo ${BRNICS[$1]}); do - /sbin/ifconfig $BRIF down - /sbin/ifconfig $BRIF 0.0.0.0 promisc up - /sbin/brctl addif ${IFNAME[$1]} $BRIF + /sbin/ip link add name ${IFNAME[$1]} type bridge + for BRIF in ${BRNICS[$1]}; do + /sbin/ip link set dev $BRIF down + /sbin/ip address add 0.0.0.0 dev $BRIF + /sbin/ip link set dev $BRIF master ${IFNAME[$1]} + /sbin/ip link set dev $BRIF up done + /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 $(echo ${BRNICS[$1]}); do + #for BRIF in ${BRNICS[$1]}; do for BRIF in $(ls --indicator-style=none /sys/class/net/${IFNAME[$1]}/brif/) do - /sbin/brctl delif ${IFNAME[$1]} $BRIF + /sbin/ip link set dev $BRIF nomaster done - /sbin/ifconfig ${IFNAME[$1]} down - /sbin/brctl delbr ${IFNAME[$1]} + /sbin/ip link set dev ${IFNAME[$1]} down + /sbin/ip link del ${IFNAME[$1]} } # Function to bring up a network interface. If the interface is @@ -105,26 +132,41 @@ if_up() { [ "${IFNAME[$i]}" = "${1}" ] && break i=$(($i+1)) done + # If "i" is greater or equal to "MAXNICS" at this point, it means we didn't + # find an entry in IFNAME array corresponding to "$1", which likely means + # 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 + return + fi # If the interface is a bridge, then create it first: [ -n "${BRNICS[$i]}" ] && br_open $i # 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 ! grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # no interface yet + if [ -z "${IPADDR[$i]}" ] && [ "${USE_DHCP[$i]}" != "yes" ]; then # skip unconfigured interfaces + debug_log "skipping ${1} early, interface is not configured in /etc/rc.d/rc.inet1.conf" + return 0 + fi + if [ ! -e /sys/class/net/${1%%:*} ]; then # no interface yet if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${1}" | grep -vw "alias ${1} off" > /dev/null ; then echo "/etc/rc.d/rc.inet1: /sbin/modprobe ${1}" | $LOGGER /sbin/modprobe ${1} fi fi - if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # interface exists - if ! /sbin/ifconfig | grep -w "${1}" 1>/dev/null || \ - ! /sbin/ifconfig ${1} | grep -w inet 1> /dev/null ; then # interface not up or not configured - if [ ! "${HWADDR[$i]}" = "" ]; then # Set hardware address _before_ the interface goes up: - echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} hw ether ${HWADDR[$i]}" | $LOGGER - /sbin/ifconfig ${1} hw ether ${HWADDR[$i]} + if [ -e /sys/class/net/${1%%:*} ]; then # interface exists + if ! /sbin/ip address show dev ${1} 2>/dev/null | grep -wq inet || \ + ! /sbin/ip link show dev ${1} | grep -wq "state UP" ; then # interface not up or not configured + if [ -n "${HWADDR[$i]}" ]; then # Set hardware address _before_ the interface goes up: + 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]} + fi + if [ -n "${MTU[$i]}" ]; then # Set MTU to something else than 1500 + 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]} fi - if [ ! "${MTU[$i]}" = "" ]; then # Set MTU to something else than 1500 - echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} mtu ${MTU[$i]}" | $LOGGER - /sbin/ifconfig ${1} mtu ${MTU[$i]} + if /sbin/ip link show dev ${1} | grep -wq "state DOWN" ; then + /sbin/ip link set dev ${1} up # Bring up interface fi if [ -x /etc/rc.d/rc.wireless ]; then . /etc/rc.d/rc.wireless ${1} start # Initialize any wireless parameters @@ -133,13 +175,13 @@ if_up() { # Clear DHCP_OPTIONS before adding new options to it: unset DHCP_OPTIONS # Set DHCP_OPTIONS for this interface: - [ ${DHCP_HOSTNAME[$i]} ] && DHCP_OPTIONS="-h ${DHCP_HOSTNAME[$i]}" + [ -n "${DHCP_HOSTNAME[$i]}" ] && DHCP_OPTIONS="-h ${DHCP_HOSTNAME[$i]}" [ "${DHCP_KEEPRESOLV[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C resolv.conf" [ "${DHCP_KEEPNTP[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C ntp.conf" [ "${DHCP_KEEPGW[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -G" [ "${DHCP_DEBUG[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -d" [ "${DHCP_NOIPV4LL[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -L" - [ ${DHCP_IPADDR[$i]} ] && DHCP_OPTIONS="$DHCP_OPTIONS -r ${DHCP_IPADDR[$i]}" + [ -n "${DHCP_IPADDR[$i]}" ] && DHCP_OPTIONS="$DHCP_OPTIONS -r ${DHCP_IPADDR[$i]}" echo "Polling for DHCP server on interface ${1}:" # If you set a timeout, you get one, even if the kernel doesn't think that # your device is connected, in case /sys isn't right (which it usually isn't @@ -147,43 +189,54 @@ if_up() { #### (start commented out) # This is deactivated for now since the kernel has been returning incorrect # results concerning whether the interface carrier is detected. - #if [ "${DHCP_TIMEOUT[$i]}" = "" ]; then - # ifconfig ${1} up && sleep 1 + #if [ -z "${DHCP_TIMEOUT[$i]}" ]; then + # /sbin/ip link set dev ${1} up && sleep 1 # CONNSTATUS="$(cat /sys/class/net/${1}/carrier 2> /dev/null)" - # ifconfig ${1} down + # /sbin/ip link set dev ${1} down # if [ "$CONNSTATUS" = "0" ]; then # # The kernel has just told us the cable isn't even plugged in, but we will # # give any DHCP server a short chance to reply anyway: - # echo "No carrier detected on ${1}. Reducing DHCP timeout to 10 seconds." - # DHCP_TIMEOUT[$i]=10 + # echo "No carrier detected on ${1}. Reducing DHCP timeout to 15 seconds." + # DHCP_TIMEOUT[$i]=15 # fi #fi #### (end commented out) - # 10 seconds should be a reasonable default DHCP timeout. 30 was too much. - echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER - /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1} + # 15 seconds should be a reasonable default DHCP timeout. 30 was too much. + echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -L -t ${DHCP_TIMEOUT[$i]:-15} ${DHCP_OPTIONS} ${1}" | $LOGGER + /sbin/dhcpcd -L -t ${DHCP_TIMEOUT[$i]:-15} ${DHCP_OPTIONS} ${1} + # If the dhcpcd call succeeds, add extra IP addresses, if defined, to interface + if [ "$?" == "0" ] && [ -n "${IPALIASES[$i]}" ]; then + num=0 + for ipalias in ${IPALIASES[$i]}; do + /sbin/ip address add ${ipalias}/32 dev ${1} label ${1}:${num} ; + num=$(($num + 1)) + done + fi else # bring up interface using a static IP address - if [ ! "${IPADDR[$i]}" = "" ]; then # skip unconfigured interfaces - # Determine broadcast address from the IP address and netmask: - BROADCAST[$i]=`/bin/ipmask ${NETMASK[$i]} ${IPADDR[$i]}|cut -f1 -d' '` + if [ -n "${IPADDR[$i]}" ]; then # skip unconfigured interfaces # Set up the network card: - echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]}" | $LOGGER - /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]} - else - if [ "$DEBUG_ETH_UP" = "yes" ]; then - echo "/etc/rc.d/rc.inet1: ${1} interface is not configured in /etc/rc.d/rc.inet1.conf" | $LOGGER + echo "/etc/rc.d/rc.inet1: /sbin/ip address add ${IPADDR[$i]}/${NETMASK[$i]} dev ${1}" | $LOGGER + /sbin/ip address add ${IPADDR[$i]}/${NETMASK[$i]} dev ${1} + if /sbin/ip link show dev ${1} | grep -wq "state DOWN" ; then + /sbin/ip link set dev ${1} up # Bring up interface fi + # Add extra IP addresses, if defined, to interface + if [ -n "${IPALIASES[$i]}" ]; then + num=0 + for ipalias in ${IPALIASES[$i]}; do + /sbin/ip address add ${ipalias}/32 dev ${1} label ${1}:${num} ; + num=$(($num + 1)) + done + fi + else + debug_log "${1} interface is not configured in /etc/rc.d/rc.inet1.conf" fi fi else - if [ "$DEBUG_ETH_UP" = "yes" ]; then - echo "/etc/rc.d/rc.inet1: ${1} is already up, skipping" | $LOGGER - fi + debug_log "${1} is already up, skipping" fi else - if [ "$DEBUG_ETH_UP" = "yes" ]; then - echo "/etc/rc.d/rc.inet1: ${1} interface does not exist (yet)" | $LOGGER - fi + debug_log "${1} interface does not exist (yet)" fi } @@ -195,14 +248,18 @@ if_down() { [ "${IFNAME[$i]}" = "${1}" ] && break i=$(($i+1)) done - if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then + if [ $i -ge $MAXNICS ]; then + echo "/etc/rc.d/rc.inet1: skipping ${1}, you might need to increase MAXNICS" | $LOGGER + return + fi + if [ -e /sys/class/net/${1%%:*} ]; then if [ "${USE_DHCP[$i]}" = "yes" ]; then echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -k -d ${1}" | $LOGGER - /sbin/dhcpcd -k -d ${1} 2> /dev/null || /sbin/ifconfig ${1} down + /sbin/dhcpcd -k -d ${1} 2> /dev/null || /sbin/ip link set dev ${1} down sleep 1 else - echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} down" | $LOGGER - /sbin/ifconfig ${1} down + echo "/etc/rc.d/rc.inet1: /sbin/ip link set dev ${1} down" | $LOGGER + /sbin/ip link set dev ${1} down fi if [ -x /etc/rc.d/rc.wireless ]; then . /etc/rc.d/rc.wireless ${1} stop # Kill wireless daemons if any. @@ -220,26 +277,27 @@ if_down() { # Function to bring up the gateway if there is not yet a default route: gateway_up() { - if ! /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then - if [ ! "$GATEWAY" = "" ]; then - echo "/etc/rc.d/rc.inet1: /sbin/route add default gw ${GATEWAY} metric 1" | $LOGGER - /sbin/route add default gw ${GATEWAY} metric 1 2>&1 | $LOGGER + if ! /sbin/ip route show | grep -wq default ; then + if [ -n "$GATEWAY" ]; then + echo "/etc/rc.d/rc.inet1: /sbin/ip route add default via ${GATEWAY}" | $LOGGER + /sbin/ip route add default via ${GATEWAY} | $LOGGER fi fi } # Function to take down an existing default gateway: gateway_down() { - if /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then - echo "/etc/rc.d/rc.inet1: /sbin/route del default" | $LOGGER - /sbin/route del default + if /sbin/ip route show | grep -wq default ; then + echo "/etc/rc.d/rc.inet1: /sbin/ip route del default" | $LOGGER + /sbin/ip route del default fi } # Function to start the network: start() { lo_up - for i in ${IFNAME[@]} ; do + virtif_create + for i in "${IFNAME[@]}" ; do if_up $i done gateway_up @@ -248,9 +306,10 @@ start() { # Function to stop the network: stop() { gateway_down - for i in ${IFNAME[@]} ; do + for i in "${IFNAME[@]}" ; do if_down $i done + virtif_destroy lo_down } @@ -260,59 +319,38 @@ stop() { ############ case "$1" in -'start') # "start" brings up all configured interfaces: +start|up) # "start" (or "up") brings up all configured interfaces: start ;; -'stop') # "stop" takes down all configured interfaces: +stop|down) # "stop" (or "down") takes down all configured interfaces: stop ;; -'restart') # "restart" restarts the network: +restart) # "restart" restarts the network: stop start ;; -'lo_start') # Start the loopback interface: +lo_start|lo_up) # Start the loopback interface: lo_up ;; -*_start) # Example: "eth1_start" will start the specified interface 'eth1' - INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` +lo_stop|lo_down) # Stop the loopback interface: + lo_down + ;; +*_start|*_up) # Example: "eth1_start" (or "eth1_up") will start the specified interface 'eth1' + INTERFACE=$(echo $1 | /bin/cut -d '_' -f 1) if_up $INTERFACE gateway_up ;; -'lo_stop') # Stop the loopback interface: - lo_down - ;; -*_stop) # Example: "eth0_stop" will stop the specified interface 'eth0' - INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` +*_stop|*_down) # Example: "eth0_stop" (or "eth0_down") will stop the specified interface 'eth0' + INTERFACE=$(echo $1 | /bin/cut -d '_' -f 1) if_down $INTERFACE ;; *_restart) # Example: "wlan0_restart" will take 'wlan0' down and up again - INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + INTERFACE=$(echo $1 | /bin/cut -d '_' -f 1) if_down $INTERFACE sleep 1 if_up $INTERFACE gateway_up ;; -'up') # "up" does the same thing as "start" - start - ;; -'down') # "down" does the same thing as "stop" - stop - ;; -'lo_up') # Start the loopback interface: - lo_up - ;; -*_up) # "*_up" does the same thing as "*_start" - INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` - if_up $INTERFACE - gateway_up - ;; -'lo_down') # Stop the loopback interface: - lo_down - ;; -*_down) # "*_down" does the same thing as "*_stop" - INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` - if_down $INTERFACE - ;; *) # The default is to bring up all configured interfaces: start esac -- cgit v1.2.3