Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP4
dracut.10467
0125-40network-separate-mask-and-prefix.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0125-40network-separate-mask-and-prefix.patch of Package dracut.10467
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor