From 740c46c0224a187d6b5a42b4aa56e173238884cc Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Wed, 29 Jun 2016 12:27:37 +0200 Subject: [PATCH] network: support macaddr in brackets [] ip=ens3:dhcp:1000 ip=ens3:dhcp::54:52:00:ab:cd:ef ip=ens3:dhcp::[54:52:00:ab:cd:ef] ip=ens3:dhcp:1000:54:52:00:ab:cd:ef ip=ens3:dhcp:1000:[54:52:00:ab:cd:ef] ip=192.168.122.20::192.168.122.1:24:test:ens3:none:1000 ip=192.168.122.20::192.168.122.1:24:test:ens3:none::54:52:00:ab:cd:ef ip=192.168.122.20::192.168.122.1:24:test:ens3:none::[54:52:00:ab:cd:ef] ip=192.168.122.20::192.168.122.1:24:test:ens3:none:1000:54:52:00:ab:cd:ef ip=192.168.122.20::192.168.122.1:24:test:ens3:none:1000:[54:52:00:ab:cd:ef] ip=::::test:ens3:dhcp:1000 ip=::::test:ens3:dhcp::54:52:00:ab:cd:ef ip=::::test:ens3:dhcp::[54:52:00:ab:cd:ef] ip=::::test:ens3:dhcp:1000:54:52:00:ab:cd:ef ip=::::test:ens3:dhcp:1000:[54:52:00:ab:cd:ef] (cherry picked from commit 53e4ab71742fc1e5d8112c719c0d154d08815fa1) --- modules.d/40network/net-lib.sh | 124 ++++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 50 deletions(-) diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh index 92225c5..eb98f8e 100755 --- a/modules.d/40network/net-lib.sh +++ b/modules.d/40network/net-lib.sh @@ -447,60 +447,84 @@ ip_to_var() { done unset ip srv gw mask hostname dev autoconf macaddr mtu dns1 dns2 - case $# in - 0) autoconf="error" ;; - 1) autoconf=$1 ;; - 2) [ -n "$1" ] && dev=$1; [ -n "$2" ] && autoconf=$2 ;; - 3) [ -n "$1" ] && dev=$1; [ -n "$2" ] && autoconf=$2; [ -n "$3" ] && mtu=$3 ;; - 4) [ -n "$1" ] && dev=$1; [ -n "$2" ] && autoconf=$2; [ -n "$3" ] && mtu=$3; [ -n "$4" ] && macaddr=$4 ;; - *) [ -n "$1" ] && ip=$1; [ -n "$2" ] && srv=$2; [ -n "$3" ] && gw=$3; [ -n "$4" ] && mask=$4; - [ -n "$5" ] && hostname=$5; [ -n "$6" ] && dev=$6; [ -n "$7" ] && autoconf=$7; - case "$8" in - [0-9]*:*|[0-9]*.[0-9]*.[0-9]*.[0-9]*) - dns1="$8" - [ -n "$9" ] && dns2="$9" - ;; - [0-9]*) - mtu="$8" - if [ -n "${9}" -a -n "${10}" -a -n "${11}" -a -n "${12}" -a -n "${13}" -a -n "${14}" ]; then - macaddr="${9}:${10}:${11}:${12}:${13}:${14}" - fi - ;; - *) - if [ -n "${9}" -a -n "${10}" -a -n "${11}" -a -n "${12}" -a -n "${13}" -a -n "${14}" ]; then - macaddr="${9}:${10}:${11}:${12}:${13}:${14}" - fi - ;; + + if [ $# -eq 0 ]; then + autoconf="error" + return 0 + fi + + if [ $# -eq 1 ]; then + # format: ip={dhcp|on|any|dhcp6|auto6} + # or + # ip= means anaconda-style static config argument cluster + autoconf="$1" + + if strstr "$autoconf" "*.*.*.*"; then + # ip= means anaconda-style static config argument cluster: + # ip= gateway= netmask= hostname= mtu= + # ksdevice={link|bootif|ibft||} + ip="$autoconf" + gw=$(getarg gateway=) + mask=$(getarg netmask=) + hostname=$(getarg hostname=) + dev=$(getarg ksdevice=) + autoconf="none" + mtu=$(getarg mtu=) + + # handle special values for ksdevice + case "$dev" in + bootif|BOOTIF) dev=$(fix_bootif $(getarg BOOTIF=)) ;; + link) dev="" ;; # FIXME: do something useful with this + ibft) dev="" ;; # ignore - ibft is handled elsewhere esac + fi + return 0 + fi + + if [ "$2" = "dhcp" -o "$2" = "on" -o "$2" = "any" -o "$2" = "dhcp6" -o "$2" = "auto6" ]; then + # format: ip=:{dhcp|on|any|dhcp6|auto6}[:[][:]] + [ -n "$1" ] && dev="$1" + [ -n "$2" ] && autoconf="$2" + [ -n "$3" ] && mtu=$3 + if [ -z "$5" ]; then + macaddr="$4" + else + macaddr="${4}:${5}:${6}:${7}:${8}:${9}" + fi + return 0 + fi + + # format: ip=:[]:::::{none|off|dhcp|on|any|dhcp6|auto6|ibft}:[:[][:]] + + [ -n "$1" ] && ip=$1 + [ -n "$2" ] && srv=$2 + [ -n "$3" ] && gw=$3 + [ -n "$4" ] && mask=$4 + [ -n "$5" ] && hostname=$5 + [ -n "$6" ] && dev=$6 + [ -n "$7" ] && autoconf=$7 + case "$8" in + [0-9]*:*|[0-9]*.[0-9]*.[0-9]*.[0-9]*) + dns1="$8" + [ -n "$9" ] && dns2="$9" ;; - esac - # Extract prefix length from CIDR notation - case $ip in - */*) - mask=${ip##*/} - ip=${ip%/*} + [0-9]*) + mtu="$8" + if [ -n "${9}" -a -z "${10}" ]; then + macaddr="${9}" + elif [ -n "${9}" -a -n "${10}" -a -n "${11}" -a -n "${12}" -a -n "${13}" -a -n "${14}" ]; then + macaddr="${9}:${10}:${11}:${12}:${13}:${14}" + fi ;; + *) + if [ -n "${9}" -a -z "${10}" ]; then + macaddr="${9}" + elif [ -n "${9}" -a -n "${10}" -a -n "${11}" -a -n "${12}" -a -n "${13}" -a -n "${14}" ]; then + macaddr="${9}:${10}:${11}:${12}:${13}:${14}" + fi + ;; esac - - # ip= means anaconda-style static config argument cluster: - # ip= gateway= netmask= hostname= mtu= - # ksdevice={link|bootif|ibft||} - if strglob "$autoconf" "*.*.*.*"; then - ip="$autoconf" - gw=$(getarg gateway=) - mask=$(getarg netmask=) - hostname=$(getarg hostname=) - dev=$(getarg ksdevice=) - autoconf="none" - mtu=$(getarg mtu=) - - # handle special values for ksdevice - case "$dev" in - bootif|BOOTIF) dev=$(fix_bootif $(getarg BOOTIF=)) ;; - link) dev="" ;; # FIXME: do something useful with this - ibft) dev="" ;; # ignore - ibft is handled elsewhere - esac - fi + return 0 } route_to_var() {