2016-10-07 08:44:57 +00:00
|
|
|
From de3ab1c75c5f97a9935db4ce9f0cba332e5ca1ee Mon Sep 17 00:00:00 2001
|
2014-07-21 12:41:52 +00:00
|
|
|
From: Hannes Reinecke <hare@suse.de>
|
|
|
|
Date: Fri, 18 Jul 2014 10:28:00 +0200
|
|
|
|
Subject: 40network: separate 'mask' and 'prefix'
|
|
|
|
|
|
|
|
The 'mask' parameter is used for both, the (IPv4) netmask and
|
|
|
|
the prefix length. As both are in different format separate them
|
|
|
|
out into 'mask' for the netmask and 'prefix' for the prefix length.
|
|
|
|
And also prefer the use of 'prefix' where possible to ease
|
|
|
|
calculation and better IPv6 support.
|
|
|
|
|
|
|
|
References: bnc#887542
|
|
|
|
|
|
|
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
|
|
|
---
|
|
|
|
modules.d/40network/ifup.sh | 9 ++++----
|
2016-10-07 08:44:57 +00:00
|
|
|
modules.d/40network/net-lib.sh | 43 +++++++++++++++++++++++++++++++++---
|
2014-07-21 12:41:52 +00:00
|
|
|
modules.d/40network/parse-ip-opts.sh | 2 +-
|
2016-10-07 08:44:57 +00:00
|
|
|
3 files changed, 46 insertions(+), 8 deletions(-)
|
2014-07-21 12:41:52 +00:00
|
|
|
|
2016-10-07 08:44:57 +00:00
|
|
|
diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
|
|
|
|
index ef8828d..b384dab 100755
|
|
|
|
--- a/modules.d/40network/ifup.sh
|
|
|
|
+++ b/modules.d/40network/ifup.sh
|
2015-11-26 11:35:04 +00:00
|
|
|
@@ -240,9 +240,10 @@ do_static() {
|
|
|
|
|
2014-07-21 12:41:52 +00:00
|
|
|
[ -n "$macaddr" ] && ip link set address $macaddr dev $netif
|
|
|
|
[ -n "$mtu" ] && ip link set mtu $mtu dev $netif
|
|
|
|
+ [ -n "$mask" -a -z "$prefix" ] && prefix=$(mask_to_prefix $mask)
|
|
|
|
if strglobin $ip '*:*:*'; then
|
|
|
|
# note no ip addr flush for ipv6
|
|
|
|
- ip addr add $ip/$mask ${srv:+peer $srv} dev $netif
|
|
|
|
+ ip addr add $ip/$prefix ${srv:+peer $srv} dev $netif
|
|
|
|
wait_for_ipv6_dad $netif
|
|
|
|
else
|
2015-11-26 11:35:04 +00:00
|
|
|
if ! arping -f -q -D -c 2 -I $netif $ip; then
|
|
|
|
@@ -250,7 +251,7 @@ do_static() {
|
|
|
|
return 1
|
|
|
|
fi
|
2014-07-21 12:41:52 +00:00
|
|
|
ip addr flush dev $netif
|
|
|
|
- ip addr add $ip/$mask ${srv:+peer $srv} brd + dev $netif
|
|
|
|
+ ip addr add $ip/$prefix ${srv:+peer $srv} brd + dev $netif
|
|
|
|
fi
|
|
|
|
|
2015-03-31 14:12:12 +00:00
|
|
|
[ -n "$gw" ] && echo ip route replace default via $gw dev $netif > /tmp/net.$netif.gw
|
2015-11-26 11:35:04 +00:00
|
|
|
@@ -426,7 +427,7 @@ for p in $(getargs ip=); do
|
2014-07-21 12:41:52 +00:00
|
|
|
# Pull in existing static configuration
|
|
|
|
. /etc/sysconfig/network/ifcfg-${netif}
|
|
|
|
ip=${IPADDR}
|
|
|
|
- mask=${PREFIXLEN}
|
|
|
|
+ prefix=${PREFIXLEN}
|
|
|
|
mtu=${MTU}
|
|
|
|
server=${REMOTE_IPADDR}
|
|
|
|
gw=${GATEWAY}
|
2015-11-26 11:35:04 +00:00
|
|
|
@@ -440,7 +441,7 @@ for p in $(getargs ip=); do
|
2014-07-21 12:41:52 +00:00
|
|
|
done
|
|
|
|
|
|
|
|
# Store config for later use
|
|
|
|
- for i in ip srv gw mask hostname macaddr dns1 dns2; do
|
|
|
|
+ for i in ip srv gw mask prefix hostname macaddr dns1 dns2; do
|
|
|
|
eval '[ "$'$i'" ] && echo '$i'="$'$i'"'
|
|
|
|
done > /tmp/net.$netif.override
|
|
|
|
|
2016-10-07 08:44:57 +00:00
|
|
|
diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
|
|
|
|
index d41920a..d963029 100755
|
|
|
|
--- a/modules.d/40network/net-lib.sh
|
|
|
|
+++ b/modules.d/40network/net-lib.sh
|
|
|
|
@@ -20,6 +20,36 @@ get_ip() {
|
2015-11-26 11:35:04 +00:00
|
|
|
echo $ip
|
2014-07-21 12:41:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
+mask_to_prefix() {
|
|
|
|
+ local mask="$1"
|
|
|
|
+ local prefix=0
|
|
|
|
+ local OLDIFS="$IFS"
|
|
|
|
+
|
2016-10-07 08:44:57 +00:00
|
|
|
+ IFS=.
|
2014-07-21 12:41:52 +00:00
|
|
|
+ set -- $mask
|
|
|
|
+ IFS="$OLDIFS"
|
|
|
|
+ for mask in $@ ; do
|
|
|
|
+ if [ "$mask" -eq 255 ] ; then
|
|
|
|
+ prefix=$(($prefix + 8))
|
|
|
|
+ elif [ "$mask" -eq 254 ] ; then
|
|
|
|
+ prefix=$(($prefix + 7))
|
|
|
|
+ elif [ "$mask" -eq 252 ] ; then
|
|
|
|
+ prefix=$(($prefix + 6))
|
|
|
|
+ elif [ "$mask" -eq 248 ] ; then
|
|
|
|
+ prefix=$(($prefix + 5))
|
|
|
|
+ elif [ "$mask" -eq 240 ] ; then
|
|
|
|
+ prefix=$(($prefix + 4))
|
|
|
|
+ elif [ "$mask" -eq 224 ] ; then
|
|
|
|
+ prefix=$(($prefix + 3))
|
|
|
|
+ elif [ "$mask" -eq 192 ] ; then
|
|
|
|
+ prefix=$(($prefix + 2))
|
|
|
|
+ elif [ "$mask" -eq 128 ] ; then
|
|
|
|
+ prefix=$(($prefix + 1))
|
|
|
|
+ fi
|
|
|
|
+ done
|
2016-10-07 08:44:57 +00:00
|
|
|
+ echo $prefix
|
2014-07-21 12:41:52 +00:00
|
|
|
+}
|
|
|
|
+
|
|
|
|
iface_for_remote_addr() {
|
|
|
|
set -- $(ip -o route get to $1)
|
|
|
|
echo $5
|
2016-10-07 08:44:57 +00:00
|
|
|
@@ -232,7 +262,7 @@ ibft_to_cmdline() {
|
2014-07-21 12:41:52 +00:00
|
|
|
for iface in /sys/firmware/ibft/ethernet*; do
|
|
|
|
local mac="" dev=""
|
|
|
|
local dhcp="" ip="" gw="" mask="" hostname=""
|
|
|
|
- local dns1 dns2
|
|
|
|
+ local dns1 dns2 prefix
|
|
|
|
|
|
|
|
[ -e ${iface}/mac ] || continue
|
|
|
|
mac=$(read a < ${iface}/mac; echo $a)
|
2016-10-07 08:44:57 +00:00
|
|
|
@@ -280,6 +310,7 @@ ibft_to_cmdline() {
|
2014-07-21 12:41:52 +00:00
|
|
|
[ -e ${iface}/hostname ] && hostname=$(read a < ${iface}/hostname; echo $a)
|
|
|
|
if [ "$family" = "ipv6" ] ; then
|
|
|
|
if [ -n "$ip" ] ; then
|
|
|
|
+ # Prefix defaults to 64 for IPv6
|
|
|
|
[ -n "$prefix" ] || prefix=64
|
|
|
|
ip="[${ip}/${prefix}]"
|
|
|
|
mask=
|
2016-10-07 08:44:57 +00:00
|
|
|
@@ -287,6 +318,11 @@ ibft_to_cmdline() {
|
2014-07-21 12:41:52 +00:00
|
|
|
if [ -n "$gw" ] ; then
|
|
|
|
gw="[${gw}]"
|
|
|
|
fi
|
|
|
|
+ else
|
|
|
|
+ if [ -n "$prefix" ] ; then
|
|
|
|
+ ip="$ip/$prefix"
|
|
|
|
+ mask=
|
|
|
|
+ fi
|
|
|
|
fi
|
|
|
|
if [ -n "$ip" ] && [ -n "$mask" -o -n "$prefix" ]; then
|
|
|
|
echo "ip=$ip::$gw:$mask:$hostname:$dev:none${dns1:+:$dns1}${dns2:+:$dns2}"
|
2016-10-07 08:44:57 +00:00
|
|
|
@@ -295,6 +331,7 @@ ibft_to_cmdline() {
|
2014-07-21 12:41:52 +00:00
|
|
|
warn "ip-addr=$ip"
|
|
|
|
warn "gateway=$gw"
|
|
|
|
warn "subnet-mask=$mask"
|
|
|
|
+ warn "prefix-len=$prefix"
|
|
|
|
warn "hostname=$hostname"
|
|
|
|
fi
|
|
|
|
else
|
2016-10-07 08:44:57 +00:00
|
|
|
@@ -442,7 +479,7 @@ ip_to_var() {
|
2014-07-21 12:41:52 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
- unset ip srv gw mask hostname dev autoconf macaddr mtu dns1 dns2
|
|
|
|
+ unset ip srv gw mask prefix hostname dev autoconf macaddr mtu dns1 dns2
|
|
|
|
case $# in
|
|
|
|
0) autoconf="error" ;;
|
|
|
|
1) autoconf=$1 ;;
|
2016-10-07 08:44:57 +00:00
|
|
|
@@ -470,7 +507,7 @@ ip_to_var() {
|
2014-07-21 12:41:52 +00:00
|
|
|
# Extract prefix length from CIDR notation
|
|
|
|
case $ip in
|
|
|
|
*/*)
|
|
|
|
- mask=${ip##*/}
|
|
|
|
+ prefix=${ip##*/}
|
|
|
|
ip=${ip%/*}
|
|
|
|
;;
|
|
|
|
esac
|
2016-10-07 08:44:57 +00:00
|
|
|
diff --git a/modules.d/40network/parse-ip-opts.sh b/modules.d/40network/parse-ip-opts.sh
|
|
|
|
index a3a3a3f..099a21c 100755
|
|
|
|
--- a/modules.d/40network/parse-ip-opts.sh
|
|
|
|
+++ b/modules.d/40network/parse-ip-opts.sh
|
2015-11-26 11:35:04 +00:00
|
|
|
@@ -79,7 +79,7 @@ for p in $(getargs ip=); do
|
2015-03-31 14:12:12 +00:00
|
|
|
none|off)
|
|
|
|
[ -z "$ip" ] && \
|
|
|
|
die "For argument 'ip=$p'\nValue '$autoopt' without static configuration does not make sense"
|
|
|
|
- [ -z "$mask" ] && \
|
|
|
|
+ [ -z "$mask" -a -z "$prefix" ] && \
|
|
|
|
die "Sorry, automatic calculation of netmask is not yet supported"
|
|
|
|
;;
|
|
|
|
auto6);;
|
2016-10-07 08:44:57 +00:00
|
|
|
--
|
|
|
|
2.6.6
|
|
|
|
|