Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1
sysconfig
sysconfig-ifup-route-ipv6-fixes.bnc467165.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File sysconfig-ifup-route-ipv6-fixes.bnc467165.diff of Package sysconfig
--- scripts/ifup-route +++ scripts/ifup-route 2009-01-20 14:27:02.000000000 +0100 @@ -122,9 +122,9 @@ # Don't add this route if interface has no v4 address (Bug 65557) test -z "`ip -4 a l dev $INTERFACE 2>/dev/null`" && islinklocal= if test -n "$islinklocal" ; then - current=`ip route show 169.254.0.0/16` + current=`ip -4 route show 169.254.0.0/16` if test -z "$current" -o "$current" != "${current/ dev $INTERFACE }"; then - EXTRALINKLOCAL="169.254.0.0 - 255.255.0.0 $INTERFACE" + EXTRALINKLOCAL="169.254.0.0/16 - - $INTERFACE" fi fi fi @@ -144,8 +144,10 @@ } run_iproute() { + local OPT + case $1 in -*) OPT=$1 ; shift ;; esac test "$REPLACE_ONLY" = yes -a "$1" != replace && return - local COMMAND="ip route $@" + local COMMAND="ip ${OPT:+$OPT }route $@" RETMESSAGE="$($COMMAND 2>&1)" RETVALUE=$? if test $RETVALUE -ne 0 ; then @@ -281,7 +283,7 @@ OLDDEFROUTEIFACE=$IFACE return fi - done < <(ip route show) + done < <(ip -4 route show) return 1 } @@ -312,11 +314,11 @@ fi case $DEST in unreachable|blackhole|prohibit|throw) - ALL_ROUTES="$ALL_ROUTES ${VIA}:::${DEST}" ;; + ALL_ROUTES="$ALL_ROUTES ${VIA}___${DEST}" ;; *) - ALL_ROUTES="$ALL_ROUTES ${DEST}:${GWAY}:${IFACE}:" ;; + ALL_ROUTES="$ALL_ROUTES ${DEST}_${GWAY}_${IFACE}_" ;; esac - done < <(ip route show) + done < <(ip -4 route show) declare -i n=0 m=0 fi @@ -329,7 +331,10 @@ test "$MASK" = "-" && MASK="" test "$IFACE" = "-" && IFACE="" test "$TYPE" = "-" && TYPE="" - + + # skip commented out and empty lines (already done in reverse(), but...) + case "$DEST" in \#*|"") continue ;; esac + # If we are setting up a route for 6to4 tunnel we must # differentiate between USAGI and non-USAGI stack as they # accept gateway addresses in different notations. @@ -368,17 +373,49 @@ test "$INTERFACE" != noiface && continue fi fi - # Check if $MASK is a netmask or prefixlength and calculate prefixlength if - # it is a netmask. Then add the prefixlength to the destination. Finally we - # get the prefixlength back from the destination to have always the right - # prefixlength in $PFXL. - if [ "$MASK" -ge 0 -a "$MASK" -le 32 ] 2>/dev/null; then - PFXL=$MASK - else - PFXL=`mask2pfxlen $MASK` + + # Check if this is a ipv6 or a ipv4 route entry + INET=4 + case "${DEST}${GWAY}${MASK}" in + *:*) INET=6 ;; + esac + + # - Check if $DEST is "default" -- it includes implicit /0 prefixlen + # - Check if $DEST is already in the iproute2 prefix/prefixlen notation + # - Otherwise check if $MASK is a prefixlength or netmask and calculate + # the prefixlength if it is a netmask. Then add the prefixlength to + # the destination. + # Finally extract the prefixlength back from the destination to have + # always the right prefixlength in $PFXL. + case $DEST in + default) + PFXL=0 + ;; + */*) + PFXL=${DEST#*/} + ;; + *) + # Check if it is a prefixlen or interpret as ipv4 netmask + if [ "$MASK" -ge 0 -a "$MASK" -le 128 ] 2>/dev/null; then + PFXL=$MASK + else # elif [ -n "$MASK" ] ; then + PFXL=`mask2pfxlen $MASK` + fi + test "${DEST%%/*}" = "$DEST" && DEST="$DEST${PFXL:+/$PFXL}" + test "${DEST#*/}" != "$DEST" && PFXL=${DEST#*/} + ;; + esac + + # To be able to compare destination later we possibly have to fill up $DEST + # with some '.0'. For this we have to seperate DIST and PFXL once again. + # Don't do that if $DEST = default ;) + if [ "$INET" = 4 -a "$DEST" != default ] ; then + DEST=${DEST%%/*} + read D1 D2 D3 D4 < <(IFS=.; echo $DEST) + for a in D1 D2 D3 D4; do test -z "${!a}" && eval $a=0; done + DEST=$D1.$D2.$D3.$D4${PFXL:+/$PFXL} fi - test "${DEST%%/*}" = "$DEST" && DEST="$DEST${PFXL:+/$PFXL}" - test "${DEST#*/}" != "$DEST" && PFXL=${DEST#*/} + case $DEST in */0) DEST=default ; PFXL=0 ;; esac # If the first word of the options ($TYPE) is a value that is respected # as an valid type by ip route, then keep it. If $TYPE is anything else @@ -396,10 +433,8 @@ test -n "$IFACE" && IFACE="dev $IFACE" - case "$DEST" in - \#*|"") - ;; - 224.0.0.0*|224/4) + case "$DEST-$INET" in + 224.0.0.0*-4|224/4-4) # We are doing multicast if [ -e /proc/net/igmp -a "$GWAY" = 0.0.0.0 \ -a \( "$PFXL" = 4 -o "$DEST" = 224/4 \) ] ; then @@ -413,7 +448,7 @@ && logerror " wrong netmask/prefixlength entry $MASK in $ROUTECONF" fi ;; - default*) + default-4) if [ "$ACTION" != "del" ] ; then # I cannot remember why we were running run_iproute always after # the possible ip route command. But it hurts if there are two @@ -426,11 +461,11 @@ # && push_route_stack #run_iproute $ACTION to $TYPE $DEST via $GWAY $IFACE $IPOPTS if get_default_route \ - && ip route $ACTION to $TYPE $DEST via $GWAY \ + && ip route $ACTION to $TYPE $DEST ${GWAY:+via $GWAY} \ ${INTERFACE:+dev $INTERFACE} $IPOPTS &>/dev/null ; then push_route_stack else - run_iproute $ACTION to $TYPE $DEST via $GWAY $IFACE $IPOPTS + run_iproute $ACTION to $TYPE $DEST ${GWAY:+via $GWAY} $IFACE $IPOPTS fi fi if [ "$ACTION" = "del" ] ; then @@ -438,36 +473,31 @@ fi ;; *) + FOPT="" case "$GWAY" in - 0.0.0.0|\*) # Add/Delete a local Network + 0.0.0.0|\*|::) # Add/Delete a local network / device route GWAY="" + FOPT="-$INET" ;; $DEST) - test "$PFXL" = 32 && GWAY="" + test "$PFXL" = 32 -o "$PFXL" = 128 && GWAY="" ;; esac - run_iproute $ACTION to $TYPE $DEST ${GWAY:+via $GWAY} $IFACE $IPOPTS + run_iproute $FOPT $ACTION to $TYPE $DEST ${GWAY:+via $GWAY} $IFACE $IPOPTS + ;; esac ;; status) - # To be able to compare destination later we possibly have to fill up $DEST - # with some '.0'. For this we have to seperate DIST and PFXL once again. - # Don't do that if $DEST = default ;) - if [ "$DEST" != default ] ; then - DEST=${DEST%%/*} - read D1 D2 D3 D4 < <(IFS=.; echo $DEST) - for a in D1 D2 D3 D4; do test -z "${!a}" && eval $a=0; done - DEST=$D1.$D2.$D3.$D4${PFXL:+/$PFXL} - fi + # don't compare ipv6 routes -- we need a compress function to do it + test "$INET" != 4 && continue - case "$DEST" in \#*|"") continue ;; esac n=$((n + 1)) - test $n = 1 && message_if_not_run_from_rc "Configured routes for interface $INTERFACE:" + test $n = 1 && message_if_not_run_from_rc "Configured IPv4 routes for interface $INTERFACE:" message_if_not_run_from_rc " $LINE" for R in $ALL_ROUTES ; do - if test "$R" = "${DEST}:${GWAY}:${IFACE}:${TYPE}" ; then + if test "$R" = "${DEST}_${GWAY}_${IFACE}_${TYPE}" ; then m=$((m + 1)) fi done @@ -481,13 +511,20 @@ # Write a summary for status if [ "$ACTION" = status ] ; then + IFACE_ROUTES="" while read LINE; do IFACE_ROUTES="${IFACE_ROUTES:+$IFACE_ROUTES\n} $LINE" - done < <(ip route show dev $INTERFACE 2>/dev/null) - test -n "$IFACE_ROUTES" && message_if_not_run_from_rc "Active routes for interface $INTERFACE:" + done < <(ip -4 route show dev $INTERFACE 2>/dev/null) + test -n "$IFACE_ROUTES" && message_if_not_run_from_rc "Active IPv4 routes for interface $INTERFACE:" message_if_not_run_from_rc "$IFACE_ROUTES" test $n -gt 0 && \ - message_if_not_run_from_rc "$m of $n configured routes for interface $INTERFACE up" + message_if_not_run_from_rc "$m of $n configured IPv4 routes for interface $INTERFACE up" + IFACE_ROUTES="" + while read LINE; do + IFACE_ROUTES="${IFACE_ROUTES:+$IFACE_ROUTES\n} $LINE" + done < <(ip -6 route show dev $INTERFACE 2>/dev/null) + test -n "$IFACE_ROUTES" && message_if_not_run_from_rc "Active IPv6 routes for interface $INTERFACE:" + message_if_not_run_from_rc "$IFACE_ROUTES" test $n -ne $m && exit 3 fi
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