resource-agents: master - rgmanager: Fix ipv6 handling
Lon Hohberger
lon at fedoraproject.org
Tue Dec 15 22:08:54 UTC 2009
Gitweb: http://git.fedorahosted.org/git/resource-agents.git?p=resource-agents.git;a=commitdiff;h=f9d933d42f7a1c42ad54be3fdaf0887b0252c4ee
Commit: f9d933d42f7a1c42ad54be3fdaf0887b0252c4ee
Parent: 26e9e538b22554d21ae43c4b379b664daf6f05d3
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 17:08:45 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 f974fa9..714da05 100644
--- a/rgmanager/src/resources/ip.sh
+++ b/rgmanager/src/resources/ip.sh
@@ -155,6 +155,7 @@ ipv6_expand()
typeset addr=$1
typeset maskbits
typeset -i x
+ typeset tempaddr
maskbits=${addr/*\//}
if [ "$maskbits" = "$addr" ]; then
@@ -164,6 +165,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/::/\ }
@@ -711,8 +731,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
@@ -730,12 +764,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
@@ -751,13 +799,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
@@ -788,6 +849,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