${INSTALLCMD} -m 644 include/ctdb_private.h $(DESTDIR)$(includedir) # for samba3
${INSTALLCMD} -m 644 config/functions $(DESTDIR)$(etcdir)/ctdb
${INSTALLCMD} -m 755 config/statd-callout $(DESTDIR)$(etcdir)/ctdb
+ ${INSTALLCMD} -m 755 config/interface_modify.sh $(DESTDIR)$(etcdir)/ctdb
${INSTALLCMD} -m 644 config/events.d/README $(DESTDIR)$(docdir)/ctdb/README.eventscripts
${INSTALLCMD} -m 644 doc/recovery-process.txt $(DESTDIR)$(docdir)/ctdb/recovery-process.txt
${INSTALLCMD} -m 755 config/events.d/00.ctdb $(DESTDIR)$(etcdir)/ctdb/events.d
exit 0
}
-add_ip_to_iface()
-{
- local _iface=$1
- local _ip=$2
- local _maskbits=$3
-
- # we make sure the interface is up first
- /sbin/ip link set $_iface up || {
- echo "Failed to bringup interface $_iface"
- return 1;
- }
- /sbin/ip addr add $_ip/$_maskbits brd + dev $_iface || {
- echo "Failed to add $_ip/$_maskbits on dev $_iface"
- return 1;
- }
-
- return 0;
-}
-
-delete_ip_from_iface()
-{
- local _iface=$1
- local _ip=$2
- local _maskbits=$3
-
- # the ip tool will delete all secondary IPs if this is the primary. To work around
- # this _very_ annoying behaviour we have to keep a record of the secondaries and re-add
- # them afterwards. yuck
- local _secondaries=""
- if /sbin/ip addr list dev $_iface primary | grep -q "inet $_ip/$_maskbits " ; then
- _secondaries=`/sbin/ip addr list dev $_iface secondary | grep " inet " | awk '{print $2}'`
- fi
- local _failed=0
- /sbin/ip addr del $_ip/$_maskbits dev $_iface || _failed=1
- [ -z "$_secondaries" ] || {
- local _i=""
- for _i in $_secondaries; do
- if /sbin/ip addr list dev $_iface | grep -q "inet $_i" ; then
- echo "kept secondary $_i on dev $_iface"
- else
- echo "re-adding secondary address $_i to dev $_iface"
- /sbin/ip addr add $_i dev $_iface || _failed=1
- fi
- done
- }
- [ $_failed = 0 ] || {
- echo "Failed to del $_ip on dev $_iface"
- return 1;
- }
- return 0;
-}
-
case "$1" in
#############################
# called when ctdbd starts up
esac
}
-########################################################
-# remove an ip address from an interface
-########################################################
+# better use delete_ip_from_iface() together with add_ip_to_iface
remove_ip() {
# the ip tool will delete all secondary IPs if this is the primary.
# To work around this _very_ annoying behaviour we have to keep a
}
}
+add_ip_to_iface()
+{
+ local _iface=$1
+ local _ip=$2
+ local _maskbits=$3
+ local _lockfile="$CTDB_BASE/state/interface_modify.$_iface.flock"
+
+ test -f $_lockfile || {
+ touch $_lockfile
+ }
+
+ flock --timeout 30 $_lockfile $CTDB_BASE/interface_modify.sh add "$_iface" "$_ip" "$_maskbits"
+ return $?
+}
+
+delete_ip_from_iface()
+{
+ local _iface=$1
+ local _ip=$2
+ local _maskbits=$3
+ local _lockfile="$CTDB_BASE/state/interface_modify.$_iface.flock"
+
+ test -f $_lockfile || {
+ touch $_lockfile
+ }
+
+ flock --timeout 30 $_lockfile $CTDB_BASE/interface_modify.sh delete "$_iface" "$_ip" "$_maskbits"
+ return $?
+}
+
########################################################
# some simple logic for counting events - per eventscript
# usage: ctdb_counter_init
--- /dev/null
+#!/bin/sh
+#
+
+OP=$1
+IFACE=$2
+IP=$3
+MASKBITS=$4
+
+add_ip_to_iface()
+{
+ local _iface=$1
+ local _ip=$2
+ local _maskbits=$3
+
+ # we make sure the interface is up first
+ /sbin/ip link set $_iface up || {
+ echo "Failed to bringup interface $_iface"
+ return 1;
+ }
+ /sbin/ip addr add $_ip/$_maskbits brd + dev $_iface || {
+ echo "Failed to add $_ip/$_maskbits on dev $_iface"
+ return 1;
+ }
+
+ return 0;
+}
+
+delete_ip_from_iface()
+{
+ local _iface=$1
+ local _ip=$2
+ local _maskbits=$3
+
+ # the ip tool will delete all secondary IPs if this is the primary. To work around
+ # this _very_ annoying behaviour we have to keep a record of the secondaries and re-add
+ # them afterwards. yuck
+ local _secondaries=""
+ if /sbin/ip addr list dev $_iface primary | grep -q "inet $_ip/$_maskbits " ; then
+ _secondaries=`/sbin/ip addr list dev $_iface secondary | grep " inet " | awk '{print $2}'`
+ fi
+ local _failed=0
+ /sbin/ip addr del $_ip/$_maskbits dev $_iface || _failed=1
+ [ -z "$_secondaries" ] || {
+ local _i=""
+ for _i in $_secondaries; do
+ if /sbin/ip addr list dev $_iface | grep -q "inet $_i" ; then
+ echo "kept secondary $_i on dev $_iface"
+ else
+ echo "re-adding secondary address $_i to dev $_iface"
+ /sbin/ip addr add $_i dev $_iface || _failed=1
+ fi
+ done
+ }
+ [ $_failed = 0 ] || {
+ echo "Failed to del $_ip on dev $_iface"
+ return 1;
+ }
+ return 0;
+}
+
+case "$OP" in
+ add)
+ add_ip_to_iface $IFACE $IP $MASKBITS
+ exit $?
+ ;;
+ delete)
+ delete_ip_from_iface $IFACE $IP $MASKBITS
+ exit $?
+ ;;
+esac
+
+echo "$0: unknown operation[$OP]"
+exit 1
%{_sysconfdir}/ctdb/events.d/70.iscsi
%{_sysconfdir}/ctdb/events.d/91.lvs
%{_sysconfdir}/ctdb/statd-callout
+%{_sysconfdir}/ctdb/interface_modify.sh
%{_sbindir}/ctdbd
%{_bindir}/ctdb
%{_bindir}/smnotify