cluster: RHEL55 - rgmanager: Fix ipv6 handling
Lon Hohberger
lon at fedoraproject.org
Tue Dec 15 22:07:20 UTC 2009
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=31a310c603936867f651295358e31af6c2714f6a
Commit: 31a310c603936867f651295358e31af6c2714f6a
Parent: 23d5cbe5dfcf20040814a09aafa33faf9f6f66e9
Author: Shane Bradley <sbradley at redhat.com>
AuthorDate: Tue Dec 15 16:55:51 2009 -0500
Committer: Lon Hohberger <lhh at redhat.com>
CommitterDate: Tue Dec 15 16:55:51 2009 -0500
rgmanager: Fix ipv6 handling
Resolves: rhbz#533461
Signed-off-by: Lon Hohberger <lhh at redhat.com>
---
rgmanager/src/resources/ip.sh | 84 ++++++++++++++++++++++++++++++++++++++--
1 files changed, 79 insertions(+), 5 deletions(-)
diff --git a/rgmanager/src/resources/ip.sh b/rgmanager/src/resources/ip.sh
index 1e9bb2f..4f7e432 100755
--- a/rgmanager/src/resources/ip.sh
+++ b/rgmanager/src/resources/ip.sh
@@ -175,6 +175,7 @@ ipv6_expand()
typeset addr=$1
typeset maskbits
typeset -i x
+ typeset tempaddr
maskbits=${addr/*\//}
if [ "$maskbits" = "$addr" ]; then
@@ -184,6 +185,25 @@ ipv6_expand()
addr=${addr/\/*/}
fi
+ # grab each hex quad and expand it to 4 digits if it isn't already
+ # leave doublecolon in place for expansion out to the proper number of zeros later
+ tempaddr=""
+ for count in `seq 1 8`; do
+ quad=`echo $addr|awk -v count=$count -F : '{print $count}'`
+ quadlen=${#quad}
+ if [ $quadlen -eq 0 ]; then
+ quad=::
+ elif [ $quadlen -eq 1 ]; then
+ quad=000$quad
+ elif [ $quadlen -eq 2 ]; then
+ quad=00$quad
+ elif [ $quadlen -eq 3 ]; then
+ quad=0$quad
+ fi
+ tempaddr=$tempaddr$quad
+ done
+ addr=$tempaddr
+
# use space as placeholder
addr=${addr/::/\ }
@@ -732,8 +752,22 @@ check_interface_up()
{
declare dev
declare addr=${2/\/*/}
+ declare currentAddr caExpanded
+
+ if [ "$1" == "inet6" ]; then
+ addrExpanded=$(ipv6_expand $addr)
+ for currentAddr in `/sbin/ip -f $1 -o addr|awk '{print $4}'`; do
+ caExpanded=$(ipv6_expand $currentAddr)
+ caExpanded=${caExpanded/\/*/}
+ if [ "$addrExpanded" == "$caExpanded" ]; then
+ dev=$(/sbin/ip -f $1 -o addr | grep " ${currentAddr/\/*/}" | awk '{print $2}')
+ break
+ fi
+ done
+ else
+ dev=$(/sbin/ip -f $1 -o addr | grep " $addr/" | awk '{print $2}')
+ fi
- dev=$(/sbin/ip -f $1 -o addr | grep " $addr/" | awk '{print $2}')
if [ -z "$dev" ]; then
return 1
fi
@@ -751,12 +785,26 @@ address_configured()
{
declare line
declare addr
+ declare currentAddr caExpanded
# Chop off maxk bits
addr=${2/\/*/}
- line=$(/sbin/ip -f $1 -o addr | grep " $addr/")
- if [ -z "$line" ]; then
+ if [ "$1" == "inet6" ]; then
+ addrExpanded=$(ipv6_expand $addr)
+ for currentAddr in `/sbin/ip -f $1 -o addr|awk '{print $4}'`; do
+ caExpanded=$(ipv6_expand $currentAddr)
+ caExpanded=${caExpanded/\/*/}
+ if [ "$addrExpanded" == "$caExpanded" ]; then
+ line=$(/sbin/ip -f $1 -o addr | grep " ${currentAddr/\/*/}");
+ break
+ fi
+ done
+ else
+ line=$(/sbin/ip -f $1 -o addr | grep " $addr/")
+ fi
+
+ if [ -z "$line" ]; then
return 1
fi
return 0
@@ -772,13 +820,26 @@ ip_op()
declare dev
declare rtr
declare addr=${3/\/*/}
-
+ declare caExpanded currentAddr
if [ "$2" = "status" ]; then
ocf_log debug "Checking $3, Level $OCF_CHECK_LEVEL"
- dev=$(/sbin/ip -f $1 -o addr | grep " $addr/" | awk '{print $2}')
+ if [ "$1" == "inet6" ]; then
+ addrExpanded=$(ipv6_expand $addr)
+ for currentAddr in `/sbin/ip -f $1 -o addr|awk '{print $4}'`; do
+ caExpanded=$(ipv6_expand $currentAddr)
+ caExpanded=${caExpanded/\/*/}
+ if [ "$addrExpanded" == "$caExpanded" ]; then
+ dev=$(/sbin/ip -f $1 -o addr | grep " ${currentAddr/\/*/}" | awk '{print $2}')
+ break
+ fi
+ done
+ else
+ dev=$(/sbin/ip -f $1 -o addr | grep " $addr/" | awk '{print $2}')
+ fi
+
if [ -z "$dev" ]; then
ocf_log warn "$3 is not configured"
return 1
@@ -809,6 +870,19 @@ ip_op()
return $?
;;
inet6)
+ if [ "$2" = "del" ]; then
+ addrExpanded=$(ipv6_expand $addr)
+ for currentAddr in `/sbin/ip -f $1 -o addr|awk '{print $4}'`; do
+ caExpanded=$(ipv6_expand $currentAddr)
+ caExpanded=${caExpanded/\/*/}
+ if [ "$addrExpanded" == "$caExpanded" ]; then
+ addr6=$(/sbin/ip -f $1 -o addr | grep " ${currentAddr/\/*/}" | awk '{print $4}')
+ ipv6 $2 $addr6
+ return $?
+ fi
+ done
+ fi
+
ipv6 $2 $3
return $?
;;
More information about the cluster-commits
mailing list