From bac74f05e37b5a4e9a0f2fd5e26c4a8b3546e574 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Thu, 12 May 2016 20:03:28 +0200 Subject: [PATCH] 40network: Update iBFT scanning code to handle IPv6 IPv6 addresses should be specified in brackets so that the ip= scanning code doesn't get confused. References: bnc#887542 Signed-off-by: Hannes Reinecke Signed-off-by: Thomas Renninger (cherry picked from commit c98d1756f766e49f7b457e217b0e0156d577d8b8) --- modules.d/40network/net-lib.sh | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh index e6942a5..98dbbb6 100755 --- a/modules.d/40network/net-lib.sh +++ b/modules.d/40network/net-lib.sh @@ -235,22 +235,52 @@ ibft_to_cmdline() { [ -e /tmp/net.${dev}.has_ibft_config ] && continue + [ -e ${iface}/flags ] && flags=$(read a < ${iface}/flags; echo $a) + # Skip invalid interfaces + (( $flags & 1 )) || continue + # Skip interfaces not used for booting + (( $flags & 2 )) || continue [ -e ${iface}/dhcp ] && dhcp=$(read a < ${iface}/dhcp; echo $a) - - if [ -n "$dhcp" ]; then - echo "ip=$dev:dhcp" + [ -e ${iface}/origin ] && origin=$(read a < ${iface}/origin; echo $a) + [ -e ${iface}/ip-addr ] && ip=$(read a < ${iface}/ip-addr; echo $a) + + if [ -n "$ip" ] ; then + case "$ip" in + *.*.*.*) + family=ipv4 + ;; + *:*) + family=ipv6 + ;; + esac + fi + if [ -n "$dhcp" ] || [ "$origin" -eq 3 ]; then + if [ "$family" = "ipv6" ] ; then + echo "ip=$dev:dhcp6" + else + echo "ip=$dev:dhcp" + fi elif [ -e ${iface}/ip-addr ]; then - [ -e ${iface}/ip-addr ] && ip=$(read a < ${iface}/ip-addr; echo $a) # skip not assigned ip adresses [ "$ip" = "0.0.0.0" ] && continue [ -e ${iface}/gateway ] && gw=$(read a < ${iface}/gateway; echo $a) [ "$gateway" = "0.0.0.0" ] && unset $gateway [ -e ${iface}/subnet-mask ] && mask=$(read a < ${iface}/subnet-mask; echo $a) + [ -e ${iface}/prefix-len ] && prefix=$(read a < ${iface}/prefix-len; echo $a) [ -e ${iface}/primary-dns ] && dns1=$(read a < ${iface}/primary-dns; echo $a) [ "$dns1" = "0.0.0.0" ] && unset $dns1 [ -e ${iface}/secondary-dns ] && dns2=$(read a < ${iface}/secondary-dns; echo $a) [ "$dns2" = "0.0.0.0" ] && unset $dns2 [ -e ${iface}/hostname ] && hostname=$(read a < ${iface}/hostname; echo $a) + if [ "$family" = "ipv6" ] ; then + if [ -n "$ip" ] ; then + [ -n "$prefix" ] || prefix=64 + mask="$prefix" + fi + if [ -n "$gw" ] ; then + gw="[${gw}]" + fi + fi if [ -n "$ip" ] && [ -n "$mask" ]; then echo "ip=$ip::$gw:$mask:$hostname:$dev:none${dns1:+:$dns1}${dns2:+:$dns2}" else