dracut/0125-40network-separate-mask-and-prefix.patch
Hannes Reinecke 3ca4ad45d0 Accepting request 431190 from home:hreinecke:branches:Base:System
- 90multipath: parse commandline option 'multipath=off' (bsc#1001691)
  *add 0307-90multipath-parse-kernel-commandline-option-multipat.patch

- 95fcoe: do not start fcoemon twice (bsc#1001512)
  *add 0225-95fcoe-do-not-start-fcoemon-twice.patch

- Reformat patch headers:
  *modify 0199-rd-iscsi-waitnet-default-false.patch
  *modify 0200-dracut_fix_multipath_without_config.patch
  *modify 0210-add_fcoe_uefi_check.patch
  *modify 0212-fcoe_reorder_init_path.patch
- Rediff patches to apply cleanly:
  *modify 0124-40network-Update-iBFT-scanning-code-to-handle-IPv6.patch
  *modify 0133-Allow-multiple-configurations-per-network-interface-.patch
  *modify 0170-iscsi-skip-ibft-invalid-dhcp.patch
  *modify 0218-40network-allow-persistent-interface-names.patch
- Remove spurious whitespaces:
  *modify 0169-network_set_mtu_macaddr_for_dhcp.patch
- 40network: print out correct prefix (bsc#996141)
  *modify 0125-40network-separate-mask-and-prefix.patch
- 95iscsi: setup bnx2i offload connection correctly (bsc#997598)
  *add 0224-95iscsi-setup-bnx2i-offload-connections-properly.patch
- Rename patches to match sequence number:
  *old: 0019-40network-Fix-race-condition-when-wait-for-networks.patch
  *new: 0012-40network-Fix-race-condition-when-wait-for-networks.patch
  *old: 0066-40network-always-start-netroot-in-ifup.sh.patch
  *new: 0013-40network-always-start-netroot-in-ifup.sh.patch

- rd.iscsi.waitnet should default to false in order for dracut to
  wait for the network devices (bsc#997598)

OBS-URL: https://build.opensuse.org/request/show/431190
OBS-URL: https://build.opensuse.org/package/show/Base:System/dracut?expand=0&rev=267
2016-10-07 08:44:57 +00:00

176 lines
6.1 KiB
Diff

From de3ab1c75c5f97a9935db4ce9f0cba332e5ca1ee Mon Sep 17 00:00:00 2001
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 ++++----
modules.d/40network/net-lib.sh | 43 +++++++++++++++++++++++++++++++++---
modules.d/40network/parse-ip-opts.sh | 2 +-
3 files changed, 46 insertions(+), 8 deletions(-)
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
@@ -240,9 +240,10 @@ do_static() {
[ -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
if ! arping -f -q -D -c 2 -I $netif $ip; then
@@ -250,7 +251,7 @@ do_static() {
return 1
fi
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
[ -n "$gw" ] && echo ip route replace default via $gw dev $netif > /tmp/net.$netif.gw
@@ -426,7 +427,7 @@ for p in $(getargs ip=); do
# Pull in existing static configuration
. /etc/sysconfig/network/ifcfg-${netif}
ip=${IPADDR}
- mask=${PREFIXLEN}
+ prefix=${PREFIXLEN}
mtu=${MTU}
server=${REMOTE_IPADDR}
gw=${GATEWAY}
@@ -440,7 +441,7 @@ for p in $(getargs ip=); do
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
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() {
echo $ip
}
+mask_to_prefix() {
+ local mask="$1"
+ local prefix=0
+ local OLDIFS="$IFS"
+
+ IFS=.
+ 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
+ echo $prefix
+}
+
iface_for_remote_addr() {
set -- $(ip -o route get to $1)
echo $5
@@ -232,7 +262,7 @@ ibft_to_cmdline() {
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)
@@ -280,6 +310,7 @@ ibft_to_cmdline() {
[ -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=
@@ -287,6 +318,11 @@ ibft_to_cmdline() {
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}"
@@ -295,6 +331,7 @@ ibft_to_cmdline() {
warn "ip-addr=$ip"
warn "gateway=$gw"
warn "subnet-mask=$mask"
+ warn "prefix-len=$prefix"
warn "hostname=$hostname"
fi
else
@@ -442,7 +479,7 @@ ip_to_var() {
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 ;;
@@ -470,7 +507,7 @@ ip_to_var() {
# Extract prefix length from CIDR notation
case $ip in
*/*)
- mask=${ip##*/}
+ prefix=${ip##*/}
ip=${ip%/*}
;;
esac
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
@@ -79,7 +79,7 @@ for p in $(getargs ip=); do
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);;
--
2.6.6