From 7de03e4e519705301265c0415b3c0af85263a7ac Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 09:52:36 +0200 Subject: Adding upstream version 1:4.13.0. Signed-off-by: Daniel Baumann --- heartbeat/VIPArip | 314 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100755 heartbeat/VIPArip (limited to 'heartbeat/VIPArip') diff --git a/heartbeat/VIPArip b/heartbeat/VIPArip new file mode 100755 index 0000000..688237d --- /dev/null +++ b/heartbeat/VIPArip @@ -0,0 +1,314 @@ +#!/bin/sh +# +# License: GNU General Public License (GPL) +# Support: users@clusterlabs.org +# Author: Huang Zhen +# Copyright (c) 2006 International Business Machines +# +# Virtual IP Address by RIP2 protocol. +# This script manages IP alias in different subnet with quagga/ripd. +# It can add an IP alias, or remove one. +# +# The quagga package should be installed to run this RA +# +# usage: $0 {start|stop|status|monitor|validate-all|meta-data} +# +# The "start" arg adds an IP alias. +# Surprisingly, the "stop" arg removes one. :-) +# +# OCF parameters are as below +# OCF_RESKEY_ip The IP address in different subnet +# OCF_RESKEY_nic The nic for broadcast the route information +# +####################################################################### +# Initialization: + +: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} +. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs + +RIPDCONF=$HA_RSCTMP/VIPArip-ripd.conf +ZEBRA=/usr/sbin/zebra +RIPD=/usr/sbin/ripd +USAGE="usage: $0 {start|stop|status|monitor|validate-all|meta-data}"; + +# Parameter defaults + +OCF_RESKEY_ip_default="" +OCF_RESKEY_nic_default="eth0" +OCF_RESKEY_zebra_binary_default="${ZEBRA}" +OCF_RESKEY_ripd_binary_default="${RIPD}" + +: ${OCF_RESKEY_ip=${OCF_RESKEY_ip_default}} +: ${OCF_RESKEY_nic=${OCF_RESKEY_nic_default}} +: ${OCF_RESKEY_zebra_binary=${OCF_RESKEY_zebra_binary_default}} +: ${OCF_RESKEY_ripd_binary=${OCF_RESKEY_ripd_binary_default}} + +####################################################################### + +meta_data() { +cat < + + +1.0 + + +Virtual IP Address by RIP2 protocol. +This script manages IP alias in different subnet with quagga/ripd. +It can add an IP alias, or remove one. + +Manages a virtual IP address through RIP2 + + + + + +The IPv4 address in different subnet, for example "192.168.1.1". + +The IP address in different subnet + + + + + +The nic for broadcast the route information. +The ripd uses this nic to broadcast the route information to others + +The nic for broadcast the route information + + + + + +Absolute path to the zebra binary. + +zebra binary + + + + + +Absolute path to the ripd binary. + +ripd binary + + + + + + + + + + + + + +END +exit $OCF_SUCCESS +} + +usage() { + echo $USAGE >&2 +} + +new_config_file() { + echo new_config_file $1 $2 $3 + cat >$RIPDCONF < $RIPDCONF.tmp + cp $RIPDCONF.tmp $RIPDCONF +} + +add_ip() { + echo add_ip $1 + sed "s/ip_tag/ip_tag\naccess-list private permit $1\/32/g" $RIPDCONF > $RIPDCONF.tmp + cp $RIPDCONF.tmp $RIPDCONF +} + +del_ip() { + echo del_ip $1 + sed "/$1/d" $RIPDCONF > $RIPDCONF.tmp + cp $RIPDCONF.tmp $RIPDCONF + if $GREP "access-list private permit" $RIPDCONF>/dev/null + then + echo some other IP is running + reload_config + else + stop_quagga + echo remove $RIPDCONF + rm $RIPDCONF + fi + +} + +add_nic() { + echo add_nic $1 + if $GREP "network $1" $RIPDCONF >/dev/null + then + echo the nic is already in the config file + else + sed "s/nic_tag/nic_tag\n no passive-interface $1\n network $1\n distribute-list private out $1\n distribute-list private in $1/g" $RIPDCONF > $RIPDCONF.tmp + cp $RIPDCONF.tmp $RIPDCONF + fi +} + +reload_config() { + echo reload_config + echo $RIPDCONF: + cat $RIPDCONF + echo killall -SIGHUP ripd + killall -SIGHUP ripd +} + +start_quagga() { + echo start_quagga + echo $RIPDCONF: + cat $RIPDCONF + echo $ZEBRA -d + $ZEBRA -d + echo $RIPD -d -f $RIPDCONF + $RIPD -d -f $RIPDCONF +} + +stop_quagga() { + echo stop_quagga + echo $RIPDCONF: + cat $RIPDCONF + echo killall -SIGTERM ripd + killall -SIGTERM ripd + echo killall -SIGTERM zebra + killall -SIGTERM zebra +} + +start_rip_ip() { + echo start_rip_ip + check_params + + if [ x"$OCF_RESKEY_nic" = x ] + then + echo OCF_RESKEY_nic is null, set to ${OCF_RESKEY_nic_default} + OCF_RESKEY_nic="${OCF_RESKEY_nic_default}" + fi + + status_rip_ip + case $? in + $OCF_SUCCESS) + ocf_log info "already running" + exit $OCF_SUCCESS + ;; + $OCF_NOT_RUNNING) + ;; + *) + ocf_log info "state undefined, stopping first" + stop_rip_ip + ;; + esac + + $IP2UTIL addr add $OCF_RESKEY_ip/32 dev lo + if [ -f "$RIPDCONF" ] + then + # there is a config file, add new data(IP,nic,metric) + # to the existing config file. + add_ip $OCF_RESKEY_ip + add_nic $OCF_RESKEY_nic + set_metric 1 + reload_config + echo sleep 3 + sleep 3 + set_metric 3 + reload_config + else + new_config_file $OCF_RESKEY_ip $OCF_RESKEY_nic 1 + start_quagga + echo sleep 3 + sleep 3 + set_metric 3 + reload_config + fi + return $OCF_SUCCESS +} + +stop_rip_ip() { + echo stop_rip_ip + check_params + status_rip_ip + if [ $? = $OCF_NOT_RUNNING ] + then + exit $OCF_SUCCESS + fi + $IP2UTIL addr del $OCF_RESKEY_ip dev lo + echo sleep 2 + sleep 2 + del_ip $OCF_RESKEY_ip + return $OCF_SUCCESS +} + +status_rip_ip() { + check_params + if $IP2UTIL addr | $GREP $OCF_RESKEY_ip >/dev/null + then + if $GREP $OCF_RESKEY_ip $RIPDCONF >/dev/null + then + if pidof ripd >/dev/null + then + return $OCF_SUCCESS + fi + fi + return $OCF_ERR_GENERIC + fi + return $OCF_NOT_RUNNING +} + +if + [ $# -ne 1 ] +then + usage + exit $OCF_ERR_ARGS +fi + +[ x != x"$OCF_RESKEY_zebra_binary" ] && + ZEBRA=$OCF_RESKEY_zebra_binary +[ x != x"$OCF_RESKEY_ripd_binary" ] && + RIPD=$OCF_RESKEY_ripd_binary + +case $1 in + start) start_rip_ip;; + stop) stop_rip_ip;; + status) status_rip_ip;; + monitor) status_rip_ip;; + validate-all) check_binary $IP2UTIL + exit $OCF_SUCCESS;; + meta-data) meta_data;; + usage) usage; exit $OCF_SUCCESS;; + *) usage + exit $OCF_ERR_UNIMPLEMENTED + ;; +esac -- cgit v1.2.3