From c533543d40247ce6ab6d34bcf94aa8ab174bfc7e Mon Sep 17 00:00:00 2001 From: Robby Workman Date: Thu, 13 Jul 2017 14:24:05 -0500 Subject: rc.inet1.*: Added support for IP address aliases This is accomplished with a new parameter in rc.inet1.conf: IPALIASES[$index]="space separated list of addresses" The aliases are added with a /32 mask and a label of ${interface}:{$number} to remain compatible with net-tools. IP address aliases are supported for both statically configured interfaces and dhcp-configured interfaces, although they'll only be configured for dhcp if the dhcpcd call succeeds. * note: I don't what happens if dhcpcd gets IPv4LL address --- rc.inet1 | 18 ++++++++++++++++++ rc.inet1.conf | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/rc.inet1 b/rc.inet1 index 871b38d..091dcfe 100644 --- a/rc.inet1 +++ b/rc.inet1 @@ -200,6 +200,15 @@ if_up() { # 10 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]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER /sbin/dhcpcd -L -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1} + # If the dhcpcd call succeeds, add extra IP addresses, if defined, to interface + if [ "$?" == "0" -a ! -z "${IPALIASES[$1]}" ]; then + num=0 + for ipalias in $(echo ${IPALIASES[$i]}); do + /sbin/ip address add ${ipalias}/32 dev ${1} label ${1}:${num} ; + num=$(($num + 1)) + done + unset num + 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: @@ -211,6 +220,15 @@ if_up() { 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 [ ! -z "${IPALIASES[$i]}" ]; then + num=0 + for ipalias in $(echo ${IPALIASES[$i]}); do + /sbin/ip address add ${ipalias}/32 dev ${1} label ${1}:${num} ; + num=$(($num + 1)) + done + unset num + fi 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 diff --git a/rc.inet1.conf b/rc.inet1.conf index 93b3e6c..7fcc9bb 100644 --- a/rc.inet1.conf +++ b/rc.inet1.conf @@ -16,24 +16,28 @@ # Config information for eth0: IPADDR[0]="" NETMASK[0]="" +IPALIASES[0]="" USE_DHCP[0]="" DHCP_HOSTNAME[0]="" # Config information for eth1: IPADDR[1]="" NETMASK[1]="" +IPALIASES[1]="" USE_DHCP[1]="" DHCP_HOSTNAME[1]="" # Config information for eth2: IPADDR[2]="" NETMASK[2]="" +IPALIASES[2]="" USE_DHCP[2]="" DHCP_HOSTNAME[2]="" # Config information for eth3: IPADDR[3]="" NETMASK[3]="" +IPALIASES[3]="" USE_DHCP[3]="" DHCP_HOSTNAME[3]="" @@ -52,6 +56,7 @@ DEBUG_ETH_UP="no" #BRNICS[0]="eth0" #IPADDR[0]="192.168.0.1" #NETMASK[0]="255.255.255.0" +#IPALIASES[0]="" #USE_DHCP[0]="" #DHCP_HOSTNAME[0]="" -- cgit v1.2.3