ucarp/ucarp-1.3-pre.patch

1656 lines
70 KiB
Diff
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff -Naupr ucarp-1.2/ChangeLog ucarp-1.3/ChangeLog
--- ucarp-1.2/ChangeLog 2006-02-25 17:32:53.000000000 +0100
+++ ucarp-1.3/ChangeLog 2006-07-05 00:59:22.000000000 +0200
@@ -1,3 +1,14 @@
+* Version 1.3:
+ -n option wasn't properly parsed while --neutral was. Reported by Stefan
+Behte.
+ gratuitous ARP packets should now be properly sent. Thanks to Marcus
+Rueckert for indirectly pointing out that the code was wrong.
+ New -m option, and the virtual IP address is now passed to up/down scripts
+as well. By Fabrice Dulaunoy and Dirk Jagdmann who provided different
+implementations of the same idea.
+ A bogus return statement has been removed, thanks to Alessio Cervellin.
+ All interfaces should now be discovered on Solaris.
+
* Version 1.2:
fakesnprintf/bsd-getopt_long updates from pure-ftpd 1.0.21.
Avoid processing our own multicasts. Thanks to Gregory McGarry.
diff -Naupr ucarp-1.2/config.guess ucarp-1.3/config.guess
--- ucarp-1.2/config.guess 2006-02-01 20:59:57.000000000 +0100
+++ ucarp-1.3/config.guess 2006-05-27 23:12:33.000000000 +0200
@@ -1,9 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
-timestamp='2005-07-08'
+timestamp='2006-05-13'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -106,7 +107,7 @@ set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
@@ -206,6 +207,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
*:ekkoBSD:*:*)
echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
macppc:MirBSD:*:*)
echo powerppc-unknown-mirbsd${UNAME_RELEASE}
exit ;;
@@ -764,7 +768,14 @@ EOF
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit ;;
*:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
exit ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
@@ -779,8 +790,11 @@ EOF
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit ;;
- x86:Interix*:[34]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+ x86:Interix*:[345]*)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ EM64T:Interix*:[345]*)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
exit ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
@@ -794,7 +808,7 @@ EOF
i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin
exit ;;
- amd64:CYGWIN*:*:*)
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
echo x86_64-unknown-cygwin
exit ;;
p*:CYGWIN*:*)
@@ -851,7 +865,11 @@ EOF
#endif
#endif
EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
mips64:Linux:*:*)
@@ -870,9 +888,16 @@ EOF
#endif
#endif
EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
ppc:Linux:*:*)
echo powerpc-unknown-linux-gnu
exit ;;
@@ -916,6 +941,9 @@ EOF
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
x86_64:Linux:*:*)
echo x86_64-unknown-linux-gnu
exit ;;
@@ -961,7 +989,7 @@ EOF
LIBC=gnulibc1
# endif
#else
- #ifdef __INTEL_COMPILER
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
LIBC=gnu
#else
LIBC=gnuaout
@@ -971,7 +999,11 @@ EOF
LIBC=dietlibc
#endif
EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
+ p
+ }'`"
test x"${LIBC}" != x && {
echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
exit
@@ -1182,7 +1214,6 @@ EOF
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
case $UNAME_PROCESSOR in
- *86) UNAME_PROCESSOR=i686 ;;
unknown) UNAME_PROCESSOR=powerpc ;;
esac
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
@@ -1261,6 +1292,9 @@ EOF
i*86:skyos:*:*)
echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
diff -Naupr ucarp-1.2/config.sub ucarp-1.3/config.sub
--- ucarp-1.2/config.sub 2006-02-01 20:59:57.000000000 +0100
+++ ucarp-1.3/config.sub 2006-05-27 23:12:38.000000000 +0200
@@ -1,9 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
-timestamp='2005-07-08'
+timestamp='2006-05-13'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -119,8 +120,9 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
@@ -171,6 +173,10 @@ case $os in
-hiux*)
os=-hiuxwe2
;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-sco5)
os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -187,6 +193,10 @@ case $os in
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -239,7 +249,8 @@ case $basic_machine in
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
- | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
@@ -257,18 +268,19 @@ case $basic_machine in
| mipsisa64sr71k | mipsisa64sr71kel \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
- | ms1 \
+ | mt \
| msp430 \
+ | nios | nios2 \
| ns16k | ns32k \
| or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
| pyramid \
- | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
| tahoe | thumb | tic4x | tic80 | tron \
| v850 | v850e \
| we32k \
@@ -276,9 +288,6 @@ case $basic_machine in
| z8k)
basic_machine=$basic_machine-unknown
;;
- m32c)
- basic_machine=$basic_machine-unknown
- ;;
m6811 | m68hc11 | m6812 | m68hc12)
# Motorola 68HC11/12.
basic_machine=$basic_machine-unknown
@@ -286,6 +295,9 @@ case $basic_machine in
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@@ -316,7 +328,7 @@ case $basic_machine in
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
- | m32r-* | m32rle-* \
+ | m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | maxq-* | mcore-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
@@ -336,19 +348,20 @@ case $basic_machine in
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
- | ms1-* \
+ | mt-* \
| msp430-* \
+ | nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
| pyramid-* \
| romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
| tahoe-* | thumb-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tron-* \
@@ -359,8 +372,6 @@ case $basic_machine in
| ymp-* \
| z8k-*)
;;
- m32c-*)
- ;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
386bsd)
@@ -696,6 +707,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-msdos
;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
mvs)
basic_machine=i370-ibm
os=-mvs
@@ -803,6 +817,12 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
pentium | p5 | k5 | k6 | nexgen | viac3)
basic_machine=i586-pc
;;
@@ -859,6 +879,10 @@ case $basic_machine in
basic_machine=i586-unknown
os=-pw32
;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
@@ -1101,7 +1125,7 @@ case $basic_machine in
sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown
;;
- sparc | sparcv8 | sparcv9 | sparcv9b)
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
basic_machine=sparc-sun
;;
cydra)
@@ -1174,21 +1198,23 @@ case $os in
| -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku*)
+ | -skyos* | -haiku* | -rdos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1340,6 +1366,9 @@ else
# system, and we'll never get to this point.
case $basic_machine in
+ spu-*)
+ os=-elf
+ ;;
*-acorn)
os=-riscix1.2
;;
@@ -1349,9 +1378,9 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20
diff -Naupr ucarp-1.2/configure ucarp-1.3/configure
--- ucarp-1.2/configure 2006-02-25 17:32:42.000000000 +0100
+++ ucarp-1.3/configure 2006-05-27 23:14:51.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for ucarp 1.2.
+# Generated by GNU Autoconf 2.59 for ucarp 1.3.
#
# Report bugs to <bugs@ucarp.org>.
#
@@ -269,8 +269,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='ucarp'
PACKAGE_TARNAME='ucarp'
-PACKAGE_VERSION='1.2'
-PACKAGE_STRING='ucarp 1.2'
+PACKAGE_VERSION='1.3'
+PACKAGE_STRING='ucarp 1.3'
PACKAGE_BUGREPORT='bugs@ucarp.org'
ac_config_libobj_dir=src
@@ -780,7 +780,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures ucarp 1.2 to adapt to many kinds of systems.
+\`configure' configures ucarp 1.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -846,7 +846,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ucarp 1.2:";;
+ short | recursive ) echo "Configuration of ucarp 1.3:";;
esac
cat <<\_ACEOF
@@ -976,7 +976,7 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-ucarp configure 1.2
+ucarp configure 1.3
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@@ -990,7 +990,7 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by ucarp $as_me 1.2, which was
+It was created by ucarp $as_me 1.3, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -1635,7 +1635,7 @@ fi
# Define the identity of the package.
PACKAGE='ucarp'
- VERSION='1.2'
+ VERSION='1.3'
cat >>confdefs.h <<_ACEOF
@@ -12000,7 +12000,7 @@ sysconfdir="$CONFDIR"
CPPFLAGS="$CPPFLAGS -DCONFDIR=\\\"$sysconfdir\\\""
- ac_config_files="$ac_config_files Makefile src/Makefile examples/Makefile po/Makefile.in examples/linux/Makefile examples/bsd/Makefile m4/Makefile"
+ ac_config_files="$ac_config_files Makefile src/Makefile examples/Makefile examples/linux/Makefile examples/bsd/Makefile po/Makefile.in m4/Makefile"
cat >confcache <<\_ACEOF
@@ -12379,7 +12379,7 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
-This file was extended by ucarp $as_me 1.2, which was
+This file was extended by ucarp $as_me 1.3, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -12442,7 +12442,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-ucarp config.status 1.2
+ucarp config.status 1.3
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
@@ -12562,9 +12562,9 @@ do
"Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
"examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
- "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
"examples/linux/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/linux/Makefile" ;;
"examples/bsd/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/bsd/Makefile" ;;
+ "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
"m4/Makefile" ) CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
"depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
diff -Naupr ucarp-1.2/configure.ac ucarp-1.3/configure.ac
--- ucarp-1.2/configure.ac 2006-02-25 17:25:46.000000000 +0100
+++ ucarp-1.3/configure.ac 2006-05-27 23:04:41.000000000 +0200
@@ -1,6 +1,6 @@
AC_PREREQ(2.59)
-AC_INIT([ucarp],[1.2],[bugs@ucarp.org])
+AC_INIT([ucarp],[1.3],[bugs@ucarp.org])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([1.9 dist-bzip2])
AC_CONFIG_LIBOBJ_DIR(src)
@@ -259,9 +259,9 @@ CPPFLAGS="$CPPFLAGS -DCONFDIR=\\\"$sysco
dnl Output
-AC_CONFIG_FILES(Makefile src/Makefile examples/Makefile po/Makefile.in
+AC_CONFIG_FILES(Makefile src/Makefile examples/Makefile
examples/linux/Makefile examples/bsd/Makefile
- m4/Makefile )
+ po/Makefile.in m4/Makefile )
AC_OUTPUT
diff -Naupr ucarp-1.2/examples/bsd/vip-down.sh ucarp-1.3/examples/bsd/vip-down.sh
--- ucarp-1.2/examples/bsd/vip-down.sh 2004-08-28 12:16:55.000000000 +0200
+++ ucarp-1.3/examples/bsd/vip-down.sh 2006-05-27 22:38:40.000000000 +0200
@@ -1,4 +1,4 @@
#! /bin/sh
exec 2> /dev/null
-/sbin/ifconfig "$1" -alias 10.1.1.252
+/sbin/ifconfig "$1" -alias "$2"
diff -Naupr ucarp-1.2/examples/bsd/vip-up.sh ucarp-1.3/examples/bsd/vip-up.sh
--- ucarp-1.2/examples/bsd/vip-up.sh 2004-08-28 12:16:52.000000000 +0200
+++ ucarp-1.3/examples/bsd/vip-up.sh 2006-05-27 22:38:34.000000000 +0200
@@ -1,4 +1,4 @@
#! /bin/sh
exec 2> /dev/null
-/sbin/ifconfig "$1" alias 10.1.1.252 netmask 255.255.255.255
+/sbin/ifconfig "$1" alias "$2" netmask 255.255.255.255
diff -Naupr ucarp-1.2/examples/linux/vip-down.sh ucarp-1.3/examples/linux/vip-down.sh
--- ucarp-1.2/examples/linux/vip-down.sh 2004-08-28 12:16:49.000000000 +0200
+++ ucarp-1.3/examples/linux/vip-down.sh 2006-05-27 22:41:37.000000000 +0200
@@ -1,4 +1,7 @@
#! /bin/sh
exec 2> /dev/null
-/sbin/ip addr del 10.1.1.252/24 dev "$1"
+/sbin/ip addr del "$2"/24 dev "$1"
+
+# or alternatively:
+# /sbin/ifconfig "$1":254 down
diff -Naupr ucarp-1.2/examples/linux/vip-up.sh ucarp-1.3/examples/linux/vip-up.sh
--- ucarp-1.2/examples/linux/vip-up.sh 2004-08-28 12:16:47.000000000 +0200
+++ ucarp-1.3/examples/linux/vip-up.sh 2006-05-27 22:40:22.000000000 +0200
@@ -1,4 +1,7 @@
#! /bin/sh
exec 2> /dev/null
-/sbin/ip addr add 10.1.1.252/24 dev "$1"
+/sbin/ip addr add "$2"/24 dev "$1"
+
+# or alternatively:
+# /sbin/ifconfig "$1":254 "$2" netmask 255.255.255.0
diff -Naupr ucarp-1.2/Makefile.am ucarp-1.3/Makefile.am
--- ucarp-1.2/Makefile.am 2006-02-25 17:22:01.000000000 +0100
+++ ucarp-1.3/Makefile.am 2006-05-27 23:09:30.000000000 +0200
@@ -7,4 +7,4 @@ SUBDIRS = \
ACLOCAL_AMFLAGS = -I m4
-EXTRA_DIST = config.rpath mkinstalldirs
+EXTRA_DIST = config.rpath mkinstalldirs config.rpath mkinstalldirs
diff -Naupr ucarp-1.2/Makefile.in ucarp-1.3/Makefile.in
--- ucarp-1.2/Makefile.in 2006-02-25 17:32:11.000000000 +0100
+++ ucarp-1.3/Makefile.in 2006-05-27 23:14:12.000000000 +0200
@@ -178,7 +178,7 @@ SUBDIRS = \
examples
ACLOCAL_AMFLAGS = -I m4
-EXTRA_DIST = config.rpath mkinstalldirs
+EXTRA_DIST = config.rpath mkinstalldirs config.rpath mkinstalldirs
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
diff -Naupr ucarp-1.2/NEWS ucarp-1.3/NEWS
--- ucarp-1.2/NEWS 2006-02-19 00:15:43.000000000 +0100
+++ ucarp-1.3/NEWS 2006-04-06 11:50:19.000000000 +0200
@@ -1,3 +1,5 @@
+* Version 1.3:
+
* Version 1.2:
- Neutral mode (--neutral).
- NetBSD compatibility.
diff -Naupr ucarp-1.2/po/en@boldquot.gmo ucarp-1.3/po/en@boldquot.gmo
--- ucarp-1.2/po/en@boldquot.gmo 2006-02-25 17:50:06.000000000 +0100
+++ ucarp-1.3/po/en@boldquot.gmo 2006-07-05 00:54:58.000000000 +0200
@@ -1,13 +1,8 @@
-<2D><04>6<00>I|<00><00>R<00>
-

-m-
-<00>
-<00>
-<00>
-<00>
-<00>
- )! DK <00>
<00> <00> <00> 7<00> ' B c t <00> <00> $<00> -<00> /
"F
&i
2<00>
'<00>
#<00>
!1Qp<00><00>!<00>)<00>' #1U+p'<00>&<00>*<00>/G$g<00><00>V<00> R&y
<00>m<00>0D]u)<00>D<00><00>
:7L'<00> <00><00><00><00>$--R/<00>"<00>&<00>2<00>'-#U!y<00><00><00><00> !')I's#<00><00>+<00>'&.*U<00><00><00>$<00><00> ,)(' 6&$ %
-+.*  4-2"1#/3
50!* advertisement injected *--interface=<if> (-i <if>): bind interface <if>
+<2B><04>:<00>O<00><00><00><00><00>
+
<00>
+m<00>
+5 G +` <00> <00> <00> <00> )<00> D V
i w <00> 7<00> '<00> 
)
:
U
n
$<00>
-<00>
/<00>
" &/2V'<00>#<00>!<00><00>6Qe!<00>)<00>'<00>#<00>+6'b&<00>*<00><00>-<00>$=U$u <00><00><00>V<00>&<00>A<00>
<00>m<00>bt+<00><00><00><00><00>)D><00>
<00><00><00>7<00>'
 5Vg<00><00>$<00>-<00>/ "9&\2<00>'<00>#<00>!$Dc~<00>!<00>)<00>'<00>#$H+c'<00>&<00>*<00> -#Qj<00>$<00> <00><00><00>1+* ,8)60-/9$"3
+5
!4(2'% :&7 #.* advertisement injected *--interface=<if> (-i <if>): bind interface <if>
--srcip=<ip> (-s <ip>): source (real) IP address of that host
--vhid=<id> (-v <id>): virtual IP identifier (1-255)
--pass=<pass> (-p <pass>): password
@@ -23,6 +18,7 @@
--shutdown (-z): call shutdown script at exit
--daemonize (-B): run in background
--facility=<facility> (-f): set syslog facility (default=daemon)
+--xparam=<value> (-x): extra parameter to send to up/down scripts
Sample usage:
@@ -37,10 +33,10 @@ ucarp --interface=eth0 --srcip=10.1.1.1
--upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh
-Please report bugs to Bad IP checksumBad TTL: [%u]Bad digest - md2=[%02x%02x%02x%02x...] md=[%02x%02x%02x%02x...] - Check vhid, password and virtual IP addressBad version: [%u]Dead ratio can't be zeroIgnoring vhid: [%u]Interface [%s] not foundInterface name too longInvalid address: [%s]Invalid media / hardware address for [%s]Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]No interface foundOut of memoryOut of memory to create packetPassword too longPreferred master advertised: going back to BACKUP statePutting MASTER DOWN (going to time out)Putting MASTER down - preemptionSpawning [%s %s]Switching to state: BACKUPSwitching to state: INITSwitching to state: MASTERUnable to compile pcap rule: %s [%s]Unable to detach from the current session: %sUnable to detach: /dev/null can't be duplicatedUnable to find MAC address of [%s]Unable to get hardware info about [%s]Unable to get hardware info about an interface: %sUnable to get in background: [fork: %s]Unable to get interface address: %sUnable to open interface [%s]: %sUnable to open raw device: [%s]Unable to spawn the script: %sUnknown hardware type [%u]Unknown state: [%d]Unknown syslog facility: [%s]Using [%s] as a network interfaceWarning: no script called when going downWarning: no script called when going upYou must supply a network interfaceYou must supply a passwordYou must supply a persistent source addressYou must supply a valid virtual host idYou must supply a virtual host addressYou must supply an advertisement time baseioctl SIOCGLIFCONF errorioctl SIOCGLIFNUM errormaster_down event in INIT stateout of memory to send gratuitous ARPwrite() error #%d/%dwrite() has failedProject-Id-Version: ucarp 1.2
+Please report bugs to Bad IP checksumBad TTL: [%u]Bad digest - md2=[%02x%02x%02x%02x...] md=[%02x%02x%02x%02x...] - Check vhid, password and virtual IP addressBad version: [%u]Dead ratio can't be zeroError opening socket for interface [%s]: %sIgnoring vhid: [%u]Interface [%s] not foundInterface name too longInvalid address: [%s]Invalid media / hardware address for [%s]Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]No interface foundOut of memoryOut of memory to create packetPassword too longPreferred master advertised: going back to BACKUP statePutting MASTER DOWN (going to time out)Putting MASTER down - preemptionSpawning [%s %s]Switching to state: BACKUPSwitching to state: INITSwitching to state: MASTERUnable to compile pcap rule: %s [%s]Unable to detach from the current session: %sUnable to detach: /dev/null can't be duplicatedUnable to find MAC address of [%s]Unable to get hardware info about [%s]Unable to get hardware info about an interface: %sUnable to get in background: [fork: %s]Unable to get interface address: %sUnable to open interface [%s]: %sUnable to open raw device: [%s]Unable to spawn the script: %sUnknown hardware type [%u]Unknown state: [%d]Unknown syslog facility: [%s]Using [%s] as a network interfaceWarning: no script called when going downWarning: no script called when going upYou must supply a network interfaceYou must supply a passwordYou must supply a persistent source addressYou must supply a valid virtual host idYou must supply a virtual host addressYou must supply an advertisement time basegettimeofday() failed: %sinitializing now to gettimeofday() failed: %sioctl SIOCGLIFCONF errorioctl SIOCGLIFNUM errormaster_down event in INIT stateout of memory to send gratuitous ARPpoll() errorwrite() error #%d/%dwrite() has failedProject-Id-Version: ucarp 1.3
Report-Msgid-Bugs-To: bugs@ucarp.org
-POT-Creation-Date: 2006-02-25 17:49+0100
-PO-Revision-Date: 2006-02-25 17:49+0100
+POT-Creation-Date: 2006-07-05 00:54+0200
+PO-Revision-Date: 2006-07-05 00:54+0200
Last-Translator: Automatically generated
Language-Team: none
MIME-Version: 1.0
@@ -63,6 +59,7 @@ Plural-Forms: nplurals=2; plural=(n != 1
--shutdown (-z): call shutdown script at exit
--daemonize (-B): run in background
--facility=<facility> (-f): set syslog facility (default=daemon)
+--xparam=<value> (-x): extra parameter to send to up/down scripts
Sample usage:
@@ -77,4 +74,4 @@ ucarp --interface=eth0 --srcip=10.1.1.1
--upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh
-Please report bugs to Bad IP checksumBad TTL: [%u]Bad digest - md2=[%02x%02x%02x%02x...] md=[%02x%02x%02x%02x...] - Check vhid, password and virtual IP addressBad version: [%u]Dead ratio can't be zeroIgnoring vhid: [%u]Interface [%s] not foundInterface name too longInvalid address: [%s]Invalid media / hardware address for [%s]Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]No interface foundOut of memoryOut of memory to create packetPassword too longPreferred master advertised: going back to BACKUP statePutting MASTER DOWN (going to time out)Putting MASTER down - preemptionSpawning [%s %s]Switching to state: BACKUPSwitching to state: INITSwitching to state: MASTERUnable to compile pcap rule: %s [%s]Unable to detach from the current session: %sUnable to detach: /dev/null can't be duplicatedUnable to find MAC address of [%s]Unable to get hardware info about [%s]Unable to get hardware info about an interface: %sUnable to get in background: [fork: %s]Unable to get interface address: %sUnable to open interface [%s]: %sUnable to open raw device: [%s]Unable to spawn the script: %sUnknown hardware type [%u]Unknown state: [%d]Unknown syslog facility: [%s]Using [%s] as a network interfaceWarning: no script called when going downWarning: no script called when going upYou must supply a network interfaceYou must supply a passwordYou must supply a persistent source addressYou must supply a valid virtual host idYou must supply a virtual host addressYou must supply an advertisement time baseioctl SIOCGLIFCONF errorioctl SIOCGLIFNUM errormaster_down event in INIT stateout of memory to send gratuitous ARPwrite() error #%d/%dwrite() has failed
\ No newline at end of file
+Please report bugs to Bad IP checksumBad TTL: [%u]Bad digest - md2=[%02x%02x%02x%02x...] md=[%02x%02x%02x%02x...] - Check vhid, password and virtual IP addressBad version: [%u]Dead ratio can't be zeroError opening socket for interface [%s]: %sIgnoring vhid: [%u]Interface [%s] not foundInterface name too longInvalid address: [%s]Invalid media / hardware address for [%s]Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]No interface foundOut of memoryOut of memory to create packetPassword too longPreferred master advertised: going back to BACKUP statePutting MASTER DOWN (going to time out)Putting MASTER down - preemptionSpawning [%s %s]Switching to state: BACKUPSwitching to state: INITSwitching to state: MASTERUnable to compile pcap rule: %s [%s]Unable to detach from the current session: %sUnable to detach: /dev/null can't be duplicatedUnable to find MAC address of [%s]Unable to get hardware info about [%s]Unable to get hardware info about an interface: %sUnable to get in background: [fork: %s]Unable to get interface address: %sUnable to open interface [%s]: %sUnable to open raw device: [%s]Unable to spawn the script: %sUnknown hardware type [%u]Unknown state: [%d]Unknown syslog facility: [%s]Using [%s] as a network interfaceWarning: no script called when going downWarning: no script called when going upYou must supply a network interfaceYou must supply a passwordYou must supply a persistent source addressYou must supply a valid virtual host idYou must supply a virtual host addressYou must supply an advertisement time basegettimeofday() failed: %sinitializing now to gettimeofday() failed: %sioctl SIOCGLIFCONF errorioctl SIOCGLIFNUM errormaster_down event in INIT stateout of memory to send gratuitous ARPpoll() errorwrite() error #%d/%dwrite() has failed
\ No newline at end of file
diff -Naupr ucarp-1.2/po/en@boldquot.po ucarp-1.3/po/en@boldquot.po
--- ucarp-1.2/po/en@boldquot.po 2006-02-25 17:50:06.000000000 +0100
+++ ucarp-1.3/po/en@boldquot.po 2006-07-05 00:54:56.000000000 +0200
@@ -30,10 +30,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: ucarp 1.2\n"
+"Project-Id-Version: ucarp 1.3\n"
"Report-Msgid-Bugs-To: bugs@ucarp.org\n"
-"POT-Creation-Date: 2006-02-25 17:49+0100\n"
-"PO-Revision-Date: 2006-02-25 17:49+0100\n"
+"POT-Creation-Date: 2006-07-05 00:54+0200\n"
+"PO-Revision-Date: 2006-07-05 00:54+0200\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
@@ -119,30 +119,53 @@ msgstr "Putting MASTER down - preemption
msgid "Putting MASTER DOWN (going to time out)"
msgstr "Putting MASTER DOWN (going to time out)"
-#: src/carp.c:655
+#: src/carp.c:657
msgid "Password too long"
msgstr "Password too long"
-#: src/carp.c:668
+#: src/carp.c:670
#, c-format
msgid "Unable to find MAC address of [%s]"
msgstr "Unable to find MAC address of [%s]"
-#: src/carp.c:672
+#: src/carp.c:674
#, c-format
msgid "Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]"
msgstr "Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]"
-#: src/carp.c:679
+#: src/carp.c:681
#, c-format
msgid "Unable to open interface [%s]: %s"
msgstr "Unable to open interface [%s]: %s"
-#: src/carp.c:685
+#: src/carp.c:687
#, c-format
msgid "Unable to compile pcap rule: %s [%s]"
msgstr "Unable to compile pcap rule: %s [%s]"
+#: src/carp.c:703
+#, c-format
+msgid "initializing now to gettimeofday() failed: %s"
+msgstr "initializing now to gettimeofday() failed: %s"
+
+#: src/carp.c:709
+#, c-format
+msgid "Error opening socket for interface [%s]: %s"
+msgstr "Error opening socket for interface [%s]: %s"
+
+#: src/carp.c:715 src/fillmac.c:51
+msgid "Interface name too long"
+msgstr "Interface name too long"
+
+#: src/carp.c:739
+msgid "poll() error"
+msgstr "poll() error"
+
+#: src/carp.c:744
+#, c-format
+msgid "gettimeofday() failed: %s"
+msgstr "gettimeofday() failed: %s"
+
#: src/daemonize.c:53
#, c-format
msgid "Unable to get in background: [fork: %s]"
@@ -162,10 +185,6 @@ msgstr "Unable to detach: /dev/null can'
msgid "Unable to open raw device: [%s]"
msgstr "Unable to open raw device: [%s]"
-#: src/fillmac.c:51
-msgid "Interface name too long"
-msgstr "Interface name too long"
-
#: src/fillmac.c:57
#, c-format
msgid "Unable to get hardware info about an interface: %s"
@@ -198,17 +217,17 @@ msgstr "No interface found"
msgid "ioctl SIOCGLIFCONF error"
msgstr "ioctl SIOCGLIFCONF error"
-#: src/fillmac.c:140
+#: src/fillmac.c:135
#, c-format
msgid "Interface [%s] not found"
msgstr "Interface [%s] not found"
-#: src/fillmac.c:147
+#: src/fillmac.c:148
#, c-format
msgid "Unable to get hardware info about [%s]"
msgstr "Unable to get hardware info about [%s]"
-#: src/garp.c:36
+#: src/garp.c:39
msgid "out of memory to send gratuitous ARP"
msgstr "out of memory to send gratuitous ARP"
@@ -240,6 +259,7 @@ msgid ""
"--shutdown (-z): call shutdown script at exit\n"
"--daemonize (-B): run in background\n"
"--facility=<facility> (-f): set syslog facility (default=daemon)\n"
+"--xparam=<value> (-x): extra parameter to send to up/down scripts\n"
"\n"
"Sample usage:\n"
"\n"
@@ -272,6 +292,7 @@ msgstr ""
"--shutdown (-z): call shutdown script at exit\n"
"--daemonize (-B): run in background\n"
"--facility=<facility> (-f): set syslog facility (default=daemon)\n"
+"--xparam=<value> (-x): extra parameter to send to up/down scripts\n"
"\n"
"Sample usage:\n"
"\n"
@@ -288,57 +309,57 @@ msgstr ""
"\n"
"Please report bugs to "
-#: src/ucarp.c:77
+#: src/ucarp.c:78
msgid "Out of memory"
msgstr "Out of memory"
-#: src/ucarp.c:111 src/ucarp.c:137
+#: src/ucarp.c:112 src/ucarp.c:139
#, c-format
msgid "Invalid address: [%s]"
msgstr "Invalid address: [%s]"
-#: src/ucarp.c:190
+#: src/ucarp.c:193
#, c-format
msgid "Unknown syslog facility: [%s]"
msgstr "Unknown syslog facility: [%s]"
-#: src/ucarp.c:207
+#: src/ucarp.c:217
msgid "You must supply a network interface"
msgstr "You must supply a network interface"
-#: src/ucarp.c:210
+#: src/ucarp.c:220
#, c-format
msgid "Using [%s] as a network interface"
msgstr "Using [%s] as a network interface"
-#: src/ucarp.c:213
+#: src/ucarp.c:223
msgid "You must supply a valid virtual host id"
msgstr "You must supply a valid virtual host id"
-#: src/ucarp.c:217
+#: src/ucarp.c:227
msgid "You must supply a password"
msgstr "You must supply a password"
-#: src/ucarp.c:221
+#: src/ucarp.c:231
msgid "You must supply an advertisement time base"
msgstr "You must supply an advertisement time base"
-#: src/ucarp.c:225
+#: src/ucarp.c:235
msgid "You must supply a persistent source address"
msgstr "You must supply a persistent source address"
-#: src/ucarp.c:229
+#: src/ucarp.c:239
msgid "You must supply a virtual host address"
msgstr "You must supply a virtual host address"
-#: src/ucarp.c:233
+#: src/ucarp.c:243
msgid "Warning: no script called when going up"
msgstr "Warning: no script called when going up"
-#: src/ucarp.c:236
+#: src/ucarp.c:246
msgid "Warning: no script called when going down"
msgstr "Warning: no script called when going down"
-#: src/ucarp.c:239
+#: src/ucarp.c:249
msgid "Dead ratio can't be zero"
msgstr "Dead ratio can't be zero"
diff -Naupr ucarp-1.2/po/en@quot.gmo ucarp-1.3/po/en@quot.gmo
--- ucarp-1.2/po/en@quot.gmo 2006-02-25 17:50:06.000000000 +0100
+++ ucarp-1.3/po/en@quot.gmo 2006-07-05 00:54:58.000000000 +0200
@@ -1,13 +1,8 @@
-<2D><04>6<00>I|<00><00>R<00>
-

-m-
-<00>
-<00>
-<00>
-<00>
-<00>
- )! DK <00>
<00> <00> <00> 7<00> ' B c t <00> <00> $<00> -<00> /
"F
&i
2<00>
'<00>
#<00>
!1Qp<00><00>!<00>)<00>' #1U+p'<00>&<00>*<00>/G$g<00><00>V<00> R&y
<00>m<00>0D]u)<00>D<00><00>
:7L'<00> <00><00><00><00>$--R/<00>"<00>&<00>2<00>'-#U!y<00><00><00><00> !')I's#<00><00>+<00>'&.*U<00><00><00>$<00><00> ,)(' 6&$ %
-+.*  4-2"1#/3
50!* advertisement injected *--interface=<if> (-i <if>): bind interface <if>
+<2B><04>:<00>O<00><00><00><00><00>
+
<00>
+m<00>
+5 G +` <00> <00> <00> <00> )<00> D V
i w <00> 7<00> '<00> 
)
:
U
n
$<00>
-<00>
/<00>
" &/2V'<00>#<00>!<00><00>6Qe!<00>)<00>'<00>#<00>+6'b&<00>*<00><00>-<00>$=U$u <00><00><00>V<00>&<00>A<00>
<00>m<00>bt+<00><00><00><00><00>)D><00>
<00><00><00>7<00>'
 5Vg<00><00>$<00>-<00>/ "9&\2<00>'<00>#<00>!$Dc~<00>!<00>)<00>'<00>#$H+c'<00>&<00>*<00> -#Qj<00>$<00> <00><00><00>1+* ,8)60-/9$"3
+5
!4(2'% :&7 #.* advertisement injected *--interface=<if> (-i <if>): bind interface <if>
--srcip=<ip> (-s <ip>): source (real) IP address of that host
--vhid=<id> (-v <id>): virtual IP identifier (1-255)
--pass=<pass> (-p <pass>): password
@@ -23,6 +18,7 @@
--shutdown (-z): call shutdown script at exit
--daemonize (-B): run in background
--facility=<facility> (-f): set syslog facility (default=daemon)
+--xparam=<value> (-x): extra parameter to send to up/down scripts
Sample usage:
@@ -37,10 +33,10 @@ ucarp --interface=eth0 --srcip=10.1.1.1
--upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh
-Please report bugs to Bad IP checksumBad TTL: [%u]Bad digest - md2=[%02x%02x%02x%02x...] md=[%02x%02x%02x%02x...] - Check vhid, password and virtual IP addressBad version: [%u]Dead ratio can't be zeroIgnoring vhid: [%u]Interface [%s] not foundInterface name too longInvalid address: [%s]Invalid media / hardware address for [%s]Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]No interface foundOut of memoryOut of memory to create packetPassword too longPreferred master advertised: going back to BACKUP statePutting MASTER DOWN (going to time out)Putting MASTER down - preemptionSpawning [%s %s]Switching to state: BACKUPSwitching to state: INITSwitching to state: MASTERUnable to compile pcap rule: %s [%s]Unable to detach from the current session: %sUnable to detach: /dev/null can't be duplicatedUnable to find MAC address of [%s]Unable to get hardware info about [%s]Unable to get hardware info about an interface: %sUnable to get in background: [fork: %s]Unable to get interface address: %sUnable to open interface [%s]: %sUnable to open raw device: [%s]Unable to spawn the script: %sUnknown hardware type [%u]Unknown state: [%d]Unknown syslog facility: [%s]Using [%s] as a network interfaceWarning: no script called when going downWarning: no script called when going upYou must supply a network interfaceYou must supply a passwordYou must supply a persistent source addressYou must supply a valid virtual host idYou must supply a virtual host addressYou must supply an advertisement time baseioctl SIOCGLIFCONF errorioctl SIOCGLIFNUM errormaster_down event in INIT stateout of memory to send gratuitous ARPwrite() error #%d/%dwrite() has failedProject-Id-Version: ucarp 1.2
+Please report bugs to Bad IP checksumBad TTL: [%u]Bad digest - md2=[%02x%02x%02x%02x...] md=[%02x%02x%02x%02x...] - Check vhid, password and virtual IP addressBad version: [%u]Dead ratio can't be zeroError opening socket for interface [%s]: %sIgnoring vhid: [%u]Interface [%s] not foundInterface name too longInvalid address: [%s]Invalid media / hardware address for [%s]Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]No interface foundOut of memoryOut of memory to create packetPassword too longPreferred master advertised: going back to BACKUP statePutting MASTER DOWN (going to time out)Putting MASTER down - preemptionSpawning [%s %s]Switching to state: BACKUPSwitching to state: INITSwitching to state: MASTERUnable to compile pcap rule: %s [%s]Unable to detach from the current session: %sUnable to detach: /dev/null can't be duplicatedUnable to find MAC address of [%s]Unable to get hardware info about [%s]Unable to get hardware info about an interface: %sUnable to get in background: [fork: %s]Unable to get interface address: %sUnable to open interface [%s]: %sUnable to open raw device: [%s]Unable to spawn the script: %sUnknown hardware type [%u]Unknown state: [%d]Unknown syslog facility: [%s]Using [%s] as a network interfaceWarning: no script called when going downWarning: no script called when going upYou must supply a network interfaceYou must supply a passwordYou must supply a persistent source addressYou must supply a valid virtual host idYou must supply a virtual host addressYou must supply an advertisement time basegettimeofday() failed: %sinitializing now to gettimeofday() failed: %sioctl SIOCGLIFCONF errorioctl SIOCGLIFNUM errormaster_down event in INIT stateout of memory to send gratuitous ARPpoll() errorwrite() error #%d/%dwrite() has failedProject-Id-Version: ucarp 1.3
Report-Msgid-Bugs-To: bugs@ucarp.org
-POT-Creation-Date: 2006-02-25 17:49+0100
-PO-Revision-Date: 2006-02-25 17:49+0100
+POT-Creation-Date: 2006-07-05 00:54+0200
+PO-Revision-Date: 2006-07-05 00:54+0200
Last-Translator: Automatically generated
Language-Team: none
MIME-Version: 1.0
@@ -63,6 +59,7 @@ Plural-Forms: nplurals=2; plural=(n != 1
--shutdown (-z): call shutdown script at exit
--daemonize (-B): run in background
--facility=<facility> (-f): set syslog facility (default=daemon)
+--xparam=<value> (-x): extra parameter to send to up/down scripts
Sample usage:
@@ -77,4 +74,4 @@ ucarp --interface=eth0 --srcip=10.1.1.1
--upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh
-Please report bugs to Bad IP checksumBad TTL: [%u]Bad digest - md2=[%02x%02x%02x%02x...] md=[%02x%02x%02x%02x...] - Check vhid, password and virtual IP addressBad version: [%u]Dead ratio can't be zeroIgnoring vhid: [%u]Interface [%s] not foundInterface name too longInvalid address: [%s]Invalid media / hardware address for [%s]Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]No interface foundOut of memoryOut of memory to create packetPassword too longPreferred master advertised: going back to BACKUP statePutting MASTER DOWN (going to time out)Putting MASTER down - preemptionSpawning [%s %s]Switching to state: BACKUPSwitching to state: INITSwitching to state: MASTERUnable to compile pcap rule: %s [%s]Unable to detach from the current session: %sUnable to detach: /dev/null can't be duplicatedUnable to find MAC address of [%s]Unable to get hardware info about [%s]Unable to get hardware info about an interface: %sUnable to get in background: [fork: %s]Unable to get interface address: %sUnable to open interface [%s]: %sUnable to open raw device: [%s]Unable to spawn the script: %sUnknown hardware type [%u]Unknown state: [%d]Unknown syslog facility: [%s]Using [%s] as a network interfaceWarning: no script called when going downWarning: no script called when going upYou must supply a network interfaceYou must supply a passwordYou must supply a persistent source addressYou must supply a valid virtual host idYou must supply a virtual host addressYou must supply an advertisement time baseioctl SIOCGLIFCONF errorioctl SIOCGLIFNUM errormaster_down event in INIT stateout of memory to send gratuitous ARPwrite() error #%d/%dwrite() has failed
\ No newline at end of file
+Please report bugs to Bad IP checksumBad TTL: [%u]Bad digest - md2=[%02x%02x%02x%02x...] md=[%02x%02x%02x%02x...] - Check vhid, password and virtual IP addressBad version: [%u]Dead ratio can't be zeroError opening socket for interface [%s]: %sIgnoring vhid: [%u]Interface [%s] not foundInterface name too longInvalid address: [%s]Invalid media / hardware address for [%s]Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]No interface foundOut of memoryOut of memory to create packetPassword too longPreferred master advertised: going back to BACKUP statePutting MASTER DOWN (going to time out)Putting MASTER down - preemptionSpawning [%s %s]Switching to state: BACKUPSwitching to state: INITSwitching to state: MASTERUnable to compile pcap rule: %s [%s]Unable to detach from the current session: %sUnable to detach: /dev/null can't be duplicatedUnable to find MAC address of [%s]Unable to get hardware info about [%s]Unable to get hardware info about an interface: %sUnable to get in background: [fork: %s]Unable to get interface address: %sUnable to open interface [%s]: %sUnable to open raw device: [%s]Unable to spawn the script: %sUnknown hardware type [%u]Unknown state: [%d]Unknown syslog facility: [%s]Using [%s] as a network interfaceWarning: no script called when going downWarning: no script called when going upYou must supply a network interfaceYou must supply a passwordYou must supply a persistent source addressYou must supply a valid virtual host idYou must supply a virtual host addressYou must supply an advertisement time basegettimeofday() failed: %sinitializing now to gettimeofday() failed: %sioctl SIOCGLIFCONF errorioctl SIOCGLIFNUM errormaster_down event in INIT stateout of memory to send gratuitous ARPpoll() errorwrite() error #%d/%dwrite() has failed
\ No newline at end of file
diff -Naupr ucarp-1.2/po/en@quot.po ucarp-1.3/po/en@quot.po
--- ucarp-1.2/po/en@quot.po 2006-02-25 17:50:01.000000000 +0100
+++ ucarp-1.3/po/en@quot.po 2006-07-05 00:54:51.000000000 +0200
@@ -27,10 +27,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: ucarp 1.2\n"
+"Project-Id-Version: ucarp 1.3\n"
"Report-Msgid-Bugs-To: bugs@ucarp.org\n"
-"POT-Creation-Date: 2006-02-25 17:49+0100\n"
-"PO-Revision-Date: 2006-02-25 17:49+0100\n"
+"POT-Creation-Date: 2006-07-05 00:54+0200\n"
+"PO-Revision-Date: 2006-07-05 00:54+0200\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
@@ -116,30 +116,53 @@ msgstr "Putting MASTER down - preemption
msgid "Putting MASTER DOWN (going to time out)"
msgstr "Putting MASTER DOWN (going to time out)"
-#: src/carp.c:655
+#: src/carp.c:657
msgid "Password too long"
msgstr "Password too long"
-#: src/carp.c:668
+#: src/carp.c:670
#, c-format
msgid "Unable to find MAC address of [%s]"
msgstr "Unable to find MAC address of [%s]"
-#: src/carp.c:672
+#: src/carp.c:674
#, c-format
msgid "Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]"
msgstr "Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]"
-#: src/carp.c:679
+#: src/carp.c:681
#, c-format
msgid "Unable to open interface [%s]: %s"
msgstr "Unable to open interface [%s]: %s"
-#: src/carp.c:685
+#: src/carp.c:687
#, c-format
msgid "Unable to compile pcap rule: %s [%s]"
msgstr "Unable to compile pcap rule: %s [%s]"
+#: src/carp.c:703
+#, c-format
+msgid "initializing now to gettimeofday() failed: %s"
+msgstr "initializing now to gettimeofday() failed: %s"
+
+#: src/carp.c:709
+#, c-format
+msgid "Error opening socket for interface [%s]: %s"
+msgstr "Error opening socket for interface [%s]: %s"
+
+#: src/carp.c:715 src/fillmac.c:51
+msgid "Interface name too long"
+msgstr "Interface name too long"
+
+#: src/carp.c:739
+msgid "poll() error"
+msgstr "poll() error"
+
+#: src/carp.c:744
+#, c-format
+msgid "gettimeofday() failed: %s"
+msgstr "gettimeofday() failed: %s"
+
#: src/daemonize.c:53
#, c-format
msgid "Unable to get in background: [fork: %s]"
@@ -159,10 +182,6 @@ msgstr "Unable to detach: /dev/null can'
msgid "Unable to open raw device: [%s]"
msgstr "Unable to open raw device: [%s]"
-#: src/fillmac.c:51
-msgid "Interface name too long"
-msgstr "Interface name too long"
-
#: src/fillmac.c:57
#, c-format
msgid "Unable to get hardware info about an interface: %s"
@@ -195,17 +214,17 @@ msgstr "No interface found"
msgid "ioctl SIOCGLIFCONF error"
msgstr "ioctl SIOCGLIFCONF error"
-#: src/fillmac.c:140
+#: src/fillmac.c:135
#, c-format
msgid "Interface [%s] not found"
msgstr "Interface [%s] not found"
-#: src/fillmac.c:147
+#: src/fillmac.c:148
#, c-format
msgid "Unable to get hardware info about [%s]"
msgstr "Unable to get hardware info about [%s]"
-#: src/garp.c:36
+#: src/garp.c:39
msgid "out of memory to send gratuitous ARP"
msgstr "out of memory to send gratuitous ARP"
@@ -237,6 +256,7 @@ msgid ""
"--shutdown (-z): call shutdown script at exit\n"
"--daemonize (-B): run in background\n"
"--facility=<facility> (-f): set syslog facility (default=daemon)\n"
+"--xparam=<value> (-x): extra parameter to send to up/down scripts\n"
"\n"
"Sample usage:\n"
"\n"
@@ -269,6 +289,7 @@ msgstr ""
"--shutdown (-z): call shutdown script at exit\n"
"--daemonize (-B): run in background\n"
"--facility=<facility> (-f): set syslog facility (default=daemon)\n"
+"--xparam=<value> (-x): extra parameter to send to up/down scripts\n"
"\n"
"Sample usage:\n"
"\n"
@@ -285,57 +306,57 @@ msgstr ""
"\n"
"Please report bugs to "
-#: src/ucarp.c:77
+#: src/ucarp.c:78
msgid "Out of memory"
msgstr "Out of memory"
-#: src/ucarp.c:111 src/ucarp.c:137
+#: src/ucarp.c:112 src/ucarp.c:139
#, c-format
msgid "Invalid address: [%s]"
msgstr "Invalid address: [%s]"
-#: src/ucarp.c:190
+#: src/ucarp.c:193
#, c-format
msgid "Unknown syslog facility: [%s]"
msgstr "Unknown syslog facility: [%s]"
-#: src/ucarp.c:207
+#: src/ucarp.c:217
msgid "You must supply a network interface"
msgstr "You must supply a network interface"
-#: src/ucarp.c:210
+#: src/ucarp.c:220
#, c-format
msgid "Using [%s] as a network interface"
msgstr "Using [%s] as a network interface"
-#: src/ucarp.c:213
+#: src/ucarp.c:223
msgid "You must supply a valid virtual host id"
msgstr "You must supply a valid virtual host id"
-#: src/ucarp.c:217
+#: src/ucarp.c:227
msgid "You must supply a password"
msgstr "You must supply a password"
-#: src/ucarp.c:221
+#: src/ucarp.c:231
msgid "You must supply an advertisement time base"
msgstr "You must supply an advertisement time base"
-#: src/ucarp.c:225
+#: src/ucarp.c:235
msgid "You must supply a persistent source address"
msgstr "You must supply a persistent source address"
-#: src/ucarp.c:229
+#: src/ucarp.c:239
msgid "You must supply a virtual host address"
msgstr "You must supply a virtual host address"
-#: src/ucarp.c:233
+#: src/ucarp.c:243
msgid "Warning: no script called when going up"
msgstr "Warning: no script called when going up"
-#: src/ucarp.c:236
+#: src/ucarp.c:246
msgid "Warning: no script called when going down"
msgstr "Warning: no script called when going down"
-#: src/ucarp.c:239
+#: src/ucarp.c:249
msgid "Dead ratio can't be zero"
msgstr "Dead ratio can't be zero"
diff -Naupr ucarp-1.2/po/ucarp.pot ucarp-1.3/po/ucarp.pot
--- ucarp-1.2/po/ucarp.pot 2006-02-25 17:49:38.000000000 +0100
+++ ucarp-1.3/po/ucarp.pot 2006-07-05 00:54:46.000000000 +0200
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: bugs@ucarp.org\n"
-"POT-Creation-Date: 2006-02-25 17:49+0100\n"
+"POT-Creation-Date: 2006-07-05 00:54+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -92,30 +92,53 @@ msgstr ""
msgid "Putting MASTER DOWN (going to time out)"
msgstr ""
-#: src/carp.c:655
+#: src/carp.c:657
msgid "Password too long"
msgstr ""
-#: src/carp.c:668
+#: src/carp.c:670
#, c-format
msgid "Unable to find MAC address of [%s]"
msgstr ""
-#: src/carp.c:672
+#: src/carp.c:674
#, c-format
msgid "Local advertised ethernet address is [%02x:%02x:%02x:%02x:%02x:%02x]"
msgstr ""
-#: src/carp.c:679
+#: src/carp.c:681
#, c-format
msgid "Unable to open interface [%s]: %s"
msgstr ""
-#: src/carp.c:685
+#: src/carp.c:687
#, c-format
msgid "Unable to compile pcap rule: %s [%s]"
msgstr ""
+#: src/carp.c:703
+#, c-format
+msgid "initializing now to gettimeofday() failed: %s"
+msgstr ""
+
+#: src/carp.c:709
+#, c-format
+msgid "Error opening socket for interface [%s]: %s"
+msgstr ""
+
+#: src/carp.c:715 src/fillmac.c:51
+msgid "Interface name too long"
+msgstr ""
+
+#: src/carp.c:739
+msgid "poll() error"
+msgstr ""
+
+#: src/carp.c:744
+#, c-format
+msgid "gettimeofday() failed: %s"
+msgstr ""
+
#: src/daemonize.c:53
#, c-format
msgid "Unable to get in background: [fork: %s]"
@@ -135,10 +158,6 @@ msgstr ""
msgid "Unable to open raw device: [%s]"
msgstr ""
-#: src/fillmac.c:51
-msgid "Interface name too long"
-msgstr ""
-
#: src/fillmac.c:57
#, c-format
msgid "Unable to get hardware info about an interface: %s"
@@ -171,17 +190,17 @@ msgstr ""
msgid "ioctl SIOCGLIFCONF error"
msgstr ""
-#: src/fillmac.c:140
+#: src/fillmac.c:135
#, c-format
msgid "Interface [%s] not found"
msgstr ""
-#: src/fillmac.c:147
+#: src/fillmac.c:148
#, c-format
msgid "Unable to get hardware info about [%s]"
msgstr ""
-#: src/garp.c:36
+#: src/garp.c:39
msgid "out of memory to send gratuitous ARP"
msgstr ""
@@ -213,6 +232,7 @@ msgid ""
"--shutdown (-z): call shutdown script at exit\n"
"--daemonize (-B): run in background\n"
"--facility=<facility> (-f): set syslog facility (default=daemon)\n"
+"--xparam=<value> (-x): extra parameter to send to up/down scripts\n"
"\n"
"Sample usage:\n"
"\n"
@@ -230,57 +250,57 @@ msgid ""
"Please report bugs to "
msgstr ""
-#: src/ucarp.c:77
+#: src/ucarp.c:78
msgid "Out of memory"
msgstr ""
-#: src/ucarp.c:111 src/ucarp.c:137
+#: src/ucarp.c:112 src/ucarp.c:139
#, c-format
msgid "Invalid address: [%s]"
msgstr ""
-#: src/ucarp.c:190
+#: src/ucarp.c:193
#, c-format
msgid "Unknown syslog facility: [%s]"
msgstr ""
-#: src/ucarp.c:207
+#: src/ucarp.c:217
msgid "You must supply a network interface"
msgstr ""
-#: src/ucarp.c:210
+#: src/ucarp.c:220
#, c-format
msgid "Using [%s] as a network interface"
msgstr ""
-#: src/ucarp.c:213
+#: src/ucarp.c:223
msgid "You must supply a valid virtual host id"
msgstr ""
-#: src/ucarp.c:217
+#: src/ucarp.c:227
msgid "You must supply a password"
msgstr ""
-#: src/ucarp.c:221
+#: src/ucarp.c:231
msgid "You must supply an advertisement time base"
msgstr ""
-#: src/ucarp.c:225
+#: src/ucarp.c:235
msgid "You must supply a persistent source address"
msgstr ""
-#: src/ucarp.c:229
+#: src/ucarp.c:239
msgid "You must supply a virtual host address"
msgstr ""
-#: src/ucarp.c:233
+#: src/ucarp.c:243
msgid "Warning: no script called when going up"
msgstr ""
-#: src/ucarp.c:236
+#: src/ucarp.c:246
msgid "Warning: no script called when going down"
msgstr ""
-#: src/ucarp.c:239
+#: src/ucarp.c:249
msgid "Dead ratio can't be zero"
msgstr ""
diff -Naupr ucarp-1.2/README ucarp-1.3/README
--- ucarp-1.2/README 2006-02-18 23:31:10.000000000 +0100
+++ ucarp-1.3/README 2006-05-27 22:37:38.000000000 +0200
@@ -1,6 +1,6 @@
.:. UCARP .:.
- Documentation for version 1.2
+ Documentation for version 1.3
------------------------ BLURB ------------------------
@@ -97,8 +97,15 @@ routes, to add something to log files or
least, you can use a script that will connect to your switches and flush their
ARP cache. Some users reported that transitions were way faster when also
switching MAC addresses.
-The interface name is passed as an argument to the called scripts, so feel
-free to replace "eth0" with "$1" in the previous examples.
+
+The called scripts are passed arguments, in this order:
+
+<interface name> <virtual address> <optional extra parameter>
+
+For instance, as the is passed as the first argument to the called scripts,
+feel free to replace "eth0" with "$1" and 10.1.1.252 by "$2" in the previous
+examples.
+
Don't forget to make those files executable :
diff -Naupr ucarp-1.2/src/carp.c ucarp-1.3/src/carp.c
--- ucarp-1.2/src/carp.c 2006-02-19 00:06:17.000000000 +0100
+++ ucarp-1.3/src/carp.c 2006-06-27 01:00:35.000000000 +0200
@@ -303,7 +303,7 @@ static void carp_send_ad(struct carp_sof
}
static void carp_send_ad_all(struct carp_softc *sc) {
- return carp_send_ad(sc);
+ carp_send_ad(sc);
}
static void carp_setrun(struct carp_softc *sc, sa_family_t af)
@@ -635,10 +635,12 @@ char *build_bpf_rule(void)
int docarp(void)
{
+ char errbuf[PCAP_ERRBUF_SIZE];
struct bpf_program bpfp;
struct pollfd pfds[1];
+ struct ifreq iface;
+ int fd;
int nfds;
- char errbuf[PCAP_ERRBUF_SIZE];
sc.sc_vhid = vhid;
sc.sc_advbase = advbase;
@@ -666,7 +668,7 @@ int docarp(void)
if (fill_mac_address() != 0) {
logfile(LOG_ERR, _("Unable to find MAC address of [%s]"),
- interface);
+ interface == NULL ? "-" : interface);
return -1;
}
logfile(LOG_INFO, _("Local advertised ethernet address is "
@@ -677,13 +679,13 @@ int docarp(void)
if ((dev_desc = pcap_open_live(interface, ETHERNET_MTU, 0,
CAPTURE_TIMEOUT, errbuf)) == NULL) {
logfile(LOG_ERR, _("Unable to open interface [%s]: %s"),
- interface, errbuf);
+ interface == NULL ? "-" : interface, errbuf);
return -1;
}
if (pcap_compile(dev_desc, &bpfp, build_bpf_rule(),
1, (bpf_u_int32) 0) != 0) {
logfile(LOG_ERR, _("Unable to compile pcap rule: %s [%s]"),
- errbuf, interface);
+ errbuf, interface == NULL ? "-" : interface);
return -1;
}
pcap_setfilter(dev_desc, &bpfp);
@@ -698,22 +700,48 @@ int docarp(void)
}
if (gettimeofday(&now, NULL) != 0) {
- logfile(LOG_WARNING, "initializing now to gettimeofday() failed: %s",
+ logfile(LOG_WARNING, _("initializing now to gettimeofday() failed: %s"),
strerror(errno));
}
carp_setrun(&sc, 0);
+ if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1) {
+ logfile(LOG_ERR, _("Error opening socket for interface [%s]: %s"),
+ interface == NULL ? "-" : interface, strerror(errno));
+ return -1;
+ }
+#ifdef SIOCGIFFLAGS
+ if (strlen(interface) >= sizeof iface.ifr_name) {
+ logfile(LOG_ERR, _("Interface name too long"));
+ return -1;
+ }
+ strncpy(iface.ifr_name, interface, sizeof iface.ifr_name);
+#endif
for (;;) {
+#ifdef SIOCGIFFLAGS
+ if (ioctl(fd, SIOCGIFFLAGS, &iface) != 0) {
+ break;
+ }
+ if ((iface.ifr_flags & IFF_RUNNING) == 0) {
+ carp_set_state(&sc, BACKUP);
+ sc.sc_ad_tmo.tv_sec = 0;
+ sc.sc_ad_tmo.tv_usec = 0;
+ sc.sc_md_tmo.tv_sec = 0;
+ sc.sc_md6_tmo.tv_usec = 0;
+ sleep(SECONDS_TO_WAIT_AFTER_INTERFACE_IS_DOWN);
+ continue;
+ }
+#endif
nfds = poll(pfds, (nfds_t) 1, sc.sc_advbase * 1000);
if (nfds == -1 ||
(pfds[0].revents & (POLLERR | POLLHUP | POLLNVAL)) != 0) {
#ifdef DEBUG
- logfile(LOG_NOTICE, "poll() error");
+ logfile(LOG_NOTICE, _("poll() error"));
#endif
break;
}
if (gettimeofday(&now, NULL) != 0) {
- logfile(LOG_WARNING, "gettimeofday() failed: %s",
+ logfile(LOG_WARNING, _("gettimeofday() failed: %s"),
strerror(errno));
continue;
}
diff -Naupr ucarp-1.2/src/fillmac.c ucarp-1.3/src/fillmac.c
--- ucarp-1.2/src/fillmac.c 2004-08-28 17:15:36.000000000 +0200
+++ ucarp-1.3/src/fillmac.c 2006-07-05 00:53:16.000000000 +0200
@@ -51,7 +51,7 @@ int fill_mac_address(void)
logfile(LOG_ERR, _("Interface name too long"));
return -1;
}
- strcpy(ifr.ifr_name, interface);
+ strncpy(ifr.ifr_name, interface, sizeof ifr.ifr_name);
if (ioctl(s, SIOCGIFHWADDR, &ifr) != 0) {
logfile(LOG_ERR,
_("Unable to get hardware info about an interface: %s"),
@@ -130,17 +130,18 @@ int fill_mac_address(void)
return -1;
}
lifr = lifc.lifc_req;
- while (--lifn.lifn_count > 0) {
+ for(;;) {
+ if (lifn.lifn_count <= 0) {
+ logfile(LOG_ERR, _("Interface [%s] not found"), interface);
+ ALLOCA_FREE(lifrspace);
+ return -1;
+ }
+ lifn.lifn_count--;
if (strcmp(lifr->lifr_name, interface) == 0) {
break;
}
lifr++;
}
- if (lifn.lifn_count <= 0) {
- logfile(LOG_ERR, _("Interface [%s] not found"), interface);
- ALLOCA_FREE(lifrspace);
- return -1;
- }
memcpy(&arpreq.arp_pa, &lifr->lifr_addr, sizeof arpreq.arp_pa);
ALLOCA_FREE(lifrspace);
if (ioctl(s, SIOCGARP, &arpreq) != 0) {
diff -Naupr ucarp-1.2/src/garp.c ucarp-1.3/src/garp.c
--- ucarp-1.2/src/garp.c 2004-08-28 17:15:30.000000000 +0200
+++ ucarp-1.3/src/garp.c 2006-05-27 22:14:21.000000000 +0200
@@ -10,27 +10,30 @@
int gratuitous_arp(const int dev_desc_fd, const int enable_virtual)
{
static unsigned char arp[28] = {
- 0x00, 0x01,
- 0x08, 0x00,
- 0x06, 0x04,
- 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff
+ 0x00, 0x01, /* MAC address type */
+ 0x08, 0x00, /* Protocol address type */
+ 0x06, 0x04, /* MAC address size, protocol address size */
+ 0x00, 0x02, /* OP (1=request, 2=reply) */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Sender MAC */
+ 0x00, 0x00, 0x00, 0x00, /* Sender IP */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* Target MAC */
+ 0xff, 0xff, 0xff, 0xff /* Target IP */
};
unsigned char *pkt;
struct ether_header *eh_ptr;
- memcpy(&arp[8], hwaddr, sizeof hwaddr);
- if (enable_virtual == 0) {
- arp[7] = 0x01;
- memcpy(&arp[24], &vaddr.s_addr, (size_t) 4U);
- memset(&arp[14], 0xff, ETHER_ADDR_LEN);
- } else {
+ if (ETHER_ADDR_LEN > 6) {
+ abort();
+ }
+ memcpy(&arp[8], hwaddr, sizeof hwaddr);
+ if (enable_virtual != 0) {
arp[7] = 0x02;
memcpy(&arp[14], &vaddr.s_addr, (size_t) 4U);
- memset(&arp[24], 0xff, ETHER_ADDR_LEN);
+ } else {
+ arp[7] = 0x01;
+ memcpy(&arp[14], &vaddr.s_addr, (size_t) 4U);
+ memset(&arp[18], 0xff, ETHER_ADDR_LEN);
+ memcpy(&arp[24], &vaddr.s_addr, (size_t) 4U);
}
if ((pkt = ALLOCA(sizeof *eh_ptr + sizeof arp)) == NULL) {
logfile(LOG_ERR, _("out of memory to send gratuitous ARP"));
diff -Naupr ucarp-1.2/src/gettext.h ucarp-1.3/src/gettext.h
--- ucarp-1.2/src/gettext.h 2004-06-20 14:48:32.000000000 +0200
+++ ucarp-1.3/src/gettext.h 2006-04-08 12:10:54.000000000 +0200
@@ -1,5 +1,5 @@
/* Convenience header for conditional use of GNU <libintl.h>.
- Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
+ Copyright (C) 1995-1998, 2000-2002, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published
@@ -13,7 +13,7 @@
You should have received a copy of the GNU Library General Public
License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
USA. */
#ifndef _LIBGETTEXT_H
@@ -37,6 +37,16 @@
# include <locale.h>
#endif
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+ <libintl.h>, which chokes if dcgettext is defined as a macro. So include
+ it now, to make later inclusions of <libintl.h> a NOP. */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
+# include <libintl.h>
+# endif
+#endif
+
/* Disabled NLS.
The casts to 'const char *' serve the purpose of producing warnings
for invalid uses of the value returned from these functions.
diff -Naupr ucarp-1.2/src/globals.h ucarp-1.3/src/globals.h
--- ucarp-1.2/src/globals.h 2006-02-18 23:36:15.000000000 +0100
+++ ucarp-1.3/src/globals.h 2006-05-27 22:26:35.000000000 +0200
@@ -27,4 +27,6 @@ GLOBAL0(signed char no_syslog);
GLOBAL0(signed char daemonize);
GLOBAL(int syslog_facility, DEFAULT_FACILITY);
+GLOBAL0(char *vaddr_arg);
+GLOBAL0(char *xparam);
#endif
diff -Naupr ucarp-1.2/src/spawn.c ucarp-1.3/src/spawn.c
--- ucarp-1.2/src/spawn.c 2004-08-28 17:15:26.000000000 +0200
+++ ucarp-1.3/src/spawn.c 2006-05-27 22:27:05.000000000 +0200
@@ -20,7 +20,7 @@ int spawn_handler(const int dev_desc_fd,
pid = fork();
if (pid == (pid_t) 0) {
(void) close(dev_desc_fd);
- execl(script, script, interface, (char *) NULL);
+ execl(script, script, interface, vaddr_arg, xparam, (char *) NULL);
_exit(EXIT_FAILURE);
} else if (pid != (pid_t) -1) {
logfile(LOG_WARNING, _("Spawning [%s %s]"), script, interface);
diff -Naupr ucarp-1.2/src/ucarp.c ucarp-1.3/src/ucarp.c
--- ucarp-1.2/src/ucarp.c 2006-02-21 00:06:08.000000000 +0100
+++ ucarp-1.3/src/ucarp.c 2006-05-27 22:29:54.000000000 +0200
@@ -39,6 +39,7 @@ static void usage(void)
"--shutdown (-z): call shutdown script at exit\n"
"--daemonize (-B): run in background\n"
"--facility=<facility> (-f): set syslog facility (default=daemon)\n"
+ "--xparam=<value> (-x): extra parameter to send to up/down scripts\n"
"\n"
"Sample usage:\n"
"\n"
@@ -133,11 +134,13 @@ int main(int argc, char *argv[])
break;
}
case 'a': {
+ free(vaddr_arg);
if (inet_pton(AF_INET, optarg, &vaddr) == 0) {
logfile(LOG_ERR, _("Invalid address: [%s]"), optarg);
return 1;
- }
- break;
+ }
+ vaddr_arg = strdup(optarg);
+ break;
}
case 'b': {
advbase = (unsigned char) strtoul(optarg, NULL, 0);
@@ -190,7 +193,14 @@ int main(int argc, char *argv[])
logfile(LOG_ERR, _("Unknown syslog facility: [%s]"), optarg);
}
break;
- }
+ }
+ case 'm': {
+ free(xparam);
+ if ((xparam = strdup(optarg)) == NULL) {
+ die_mem();
+ }
+ break;
+ }
default: {
usage();
}
diff -Naupr ucarp-1.2/src/ucarp.h ucarp-1.3/src/ucarp.h
--- ucarp-1.2/src/ucarp.h 2004-08-28 18:10:28.000000000 +0200
+++ ucarp-1.3/src/ucarp.h 2006-06-04 15:49:09.000000000 +0200
@@ -210,6 +210,7 @@ struct carp_softc {
#define CARP_AUTHLEN 7
#define DEFAULT_ADVBASE 1U
#define DEFAULT_DEAD_RATIO 3U
+#define SECONDS_TO_WAIT_AFTER_INTERFACE_IS_DOWN 10U
#define DEFAULT_FACILITY LOG_DAEMON
diff -Naupr ucarp-1.2/src/ucarp_p.h ucarp-1.3/src/ucarp_p.h
--- ucarp-1.2/src/ucarp_p.h 2006-02-18 23:36:33.000000000 +0100
+++ ucarp-1.3/src/ucarp_p.h 2006-05-27 22:30:32.000000000 +0200
@@ -1,7 +1,7 @@
#ifndef __CARP_P_H__
#define __CARP_P_H__ 1
-static const char *GETOPT_OPTIONS = "i:s:v:p:Pa:hb:k:u:d:r:zf:B";
+static const char *GETOPT_OPTIONS = "i:s:v:p:Pa:hb:k:m:nu:d:r:zf:B";
static struct option long_options[] = {
{ "interface", 1, NULL, 'i' },
@@ -20,6 +20,7 @@ static struct option long_options[] = {
{ "shutdown", 0, NULL, 'z' },
{ "facility", 1, NULL, 'f' },
{ "daemonize", 0, NULL, 'B' },
+ { "xparam", 1, NULL, 'm' },
{ NULL, 0, NULL, 0 }
};