add ipxripd router daemon
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
SUBDIRS = po
|
||||
SUBDIRS = po ipxripd
|
||||
|
||||
AM_CFLAGS = -Wall -Wextra
|
||||
|
||||
|
||||
@@ -416,7 +416,7 @@ top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
SUBDIRS = po
|
||||
SUBDIRS = po ipxripd
|
||||
AM_CFLAGS = -Wall -Wextra
|
||||
ipx_configure_SOURCES = \
|
||||
src/nls.h \
|
||||
|
||||
104
config.h
Normal file
104
config.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/* config.h. Generated from config.h.in by configure. */
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if translation of program messages to the user's native
|
||||
language is requested. */
|
||||
#define ENABLE_NLS 1
|
||||
|
||||
/* Define to 1 if you have the 'bindtextdomain' function. */
|
||||
#define HAVE_BINDTEXTDOMAIN 1
|
||||
|
||||
/* Define to 1 if you have the Mac OS X function
|
||||
CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
|
||||
/* #undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES */
|
||||
|
||||
/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
|
||||
the CoreFoundation framework. */
|
||||
/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */
|
||||
|
||||
/* Define if the GNU dcgettext() function is already present or preinstalled.
|
||||
*/
|
||||
#define HAVE_DCGETTEXT 1
|
||||
|
||||
/* Define to 1 if you have the 'gettext' function. */
|
||||
#define HAVE_GETTEXT 1
|
||||
|
||||
/* Define if you have the iconv() function and it works. */
|
||||
/* #undef HAVE_ICONV */
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#define HAVE_INTTYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the <libintl.h> header file. */
|
||||
#define HAVE_LIBINTL_H 1
|
||||
|
||||
/* Define to 1 if you have the <netipx/ipx.h> header file. */
|
||||
#define HAVE_NETIPX_IPX_H 1
|
||||
|
||||
/* Define to 1 if you have the <net/if.h> header file. */
|
||||
#define HAVE_NET_IF_H 1
|
||||
|
||||
/* Define to 1 if you have the <net/route.h> header file. */
|
||||
#define HAVE_NET_ROUTE_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#define HAVE_STDINT_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdio.h> header file. */
|
||||
#define HAVE_STDIO_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#define HAVE_STRINGS_H 1
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||
#define HAVE_SYS_SOCKET_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the 'textdomain' function. */
|
||||
#define HAVE_TEXTDOMAIN 1
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#define HAVE_UNISTD_H 1
|
||||
|
||||
/* Define location of message catalogs */
|
||||
#define LOCALEDIR "${datarootdir}/locale"
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "ipx-utils"
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#define PACKAGE_BUGREPORT "mario.fetka@disconnected-by-peer.at"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "ipx-utils"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "ipx-utils 1.4"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "ipx-utils"
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#define PACKAGE_URL ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "1.4"
|
||||
|
||||
/* Define to 1 if all of the C89 standard headers exist (not just the ones
|
||||
required in a freestanding environment). This macro is provided for
|
||||
backward compatibility; new code need not use it. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "1.4"
|
||||
103
config.h.in~
Normal file
103
config.h.in~
Normal file
@@ -0,0 +1,103 @@
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if translation of program messages to the user's native
|
||||
language is requested. */
|
||||
#undef ENABLE_NLS
|
||||
|
||||
/* Define to 1 if you have the 'bindtextdomain' function. */
|
||||
#undef HAVE_BINDTEXTDOMAIN
|
||||
|
||||
/* Define to 1 if you have the Mac OS X function
|
||||
CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
|
||||
#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES
|
||||
|
||||
/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
|
||||
the CoreFoundation framework. */
|
||||
#undef HAVE_CFPREFERENCESCOPYAPPVALUE
|
||||
|
||||
/* Define if the GNU dcgettext() function is already present or preinstalled.
|
||||
*/
|
||||
#undef HAVE_DCGETTEXT
|
||||
|
||||
/* Define to 1 if you have the 'gettext' function. */
|
||||
#undef HAVE_GETTEXT
|
||||
|
||||
/* Define if you have the iconv() function and it works. */
|
||||
#undef HAVE_ICONV
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <libintl.h> header file. */
|
||||
#undef HAVE_LIBINTL_H
|
||||
|
||||
/* Define to 1 if you have the <netipx/ipx.h> header file. */
|
||||
#undef HAVE_NETIPX_IPX_H
|
||||
|
||||
/* Define to 1 if you have the <net/if.h> header file. */
|
||||
#undef HAVE_NET_IF_H
|
||||
|
||||
/* Define to 1 if you have the <net/route.h> header file. */
|
||||
#undef HAVE_NET_ROUTE_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdio.h> header file. */
|
||||
#undef HAVE_STDIO_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||
#undef HAVE_SYS_SOCKET_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the 'textdomain' function. */
|
||||
#undef HAVE_TEXTDOMAIN
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define location of message catalogs */
|
||||
#undef LOCALEDIR
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if all of the C89 standard headers exist (not just the ones
|
||||
required in a freestanding environment). This macro is provided for
|
||||
backward compatibility; new code need not use it. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
745
config.log
Normal file
745
config.log
Normal file
@@ -0,0 +1,745 @@
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by ipx-utils configure 1.4, which was
|
||||
generated by GNU Autoconf 2.72. Invocation command line was
|
||||
|
||||
$ ./configure --prefix=/usr
|
||||
|
||||
## --------- ##
|
||||
## Platform. ##
|
||||
## --------- ##
|
||||
|
||||
hostname = tiulk
|
||||
uname -m = x86_64
|
||||
uname -r = 7.0.2-gentoo-dist
|
||||
uname -s = Linux
|
||||
uname -v = #1 SMP PREEMPT_DYNAMIC Mon Apr 27 19:01:22 -00 2026
|
||||
|
||||
/usr/bin/uname -p = 11th Gen Intel(R) Core(TM) i9-11950H @ 2.60GHz
|
||||
/bin/uname -X = unknown
|
||||
|
||||
/bin/arch = x86_64
|
||||
/usr/bin/arch -k = unknown
|
||||
/usr/convex/getsysinfo = unknown
|
||||
/usr/bin/hostinfo = unknown
|
||||
/bin/machine = unknown
|
||||
/usr/bin/oslevel = unknown
|
||||
/bin/universe = unknown
|
||||
|
||||
PATH: /home/mario/bin/
|
||||
PATH: /home/mario/.cargo/bin/
|
||||
PATH: /usr/tqt3/bin/
|
||||
PATH: /usr/local/sbin/
|
||||
PATH: /usr/local/bin/
|
||||
PATH: /usr/bin/
|
||||
PATH: /opt/bin/
|
||||
PATH: /opt/calypsi/6502/bin/
|
||||
PATH: /opt/calypsi/65816/bin/
|
||||
PATH: /opt/calypsi/68000/bin/
|
||||
PATH: /opt/wdc/bin/
|
||||
PATH: /usr/lib/llvm/22/bin/
|
||||
PATH: /usr/lib/llvm/21/bin/
|
||||
PATH: /usr/lib/llvm/20/bin/
|
||||
PATH: /usr/trinity/14/bin/
|
||||
PATH: /opt/android-sdk/cmdline-tools/latest/bin/
|
||||
PATH: /etc/eselect/wine/bin/
|
||||
PATH: /opt/cuda/bin/
|
||||
PATH: /usr/lib64/opencascade/bin/
|
||||
|
||||
|
||||
## ----------- ##
|
||||
## Core tests. ##
|
||||
## ----------- ##
|
||||
|
||||
configure:2057: loading site script /usr/share/config.site
|
||||
| # Copyright 2023 Gentoo Authors
|
||||
| # Distributed under the terms of the GNU General Public License v2
|
||||
|
|
||||
| for script in "/usr/share/config.site.d"/*.conf; do
|
||||
| test -f "${script}" || continue
|
||||
| test -r "${script}" || continue
|
||||
| echo "${0##*/}: loading site script ${script}"
|
||||
| . "${script}" || break
|
||||
| done
|
||||
| unset script
|
||||
configure:2434: looking for aux files: config.guess config.sub compile config.rpath missing install-sh
|
||||
configure:2447: trying ./
|
||||
configure:2476: ./config.guess found
|
||||
configure:2476: ./config.sub found
|
||||
configure:2476: ./compile found
|
||||
configure:2476: ./config.rpath found
|
||||
configure:2476: ./missing found
|
||||
configure:2458: ./install-sh found
|
||||
configure:2611: checking for a BSD-compatible install
|
||||
configure:2685: result: /usr/bin/install -c
|
||||
configure:2696: checking whether sleep supports fractional seconds
|
||||
configure:2712: result: yes
|
||||
configure:2715: checking filesystem timestamp resolution
|
||||
configure:2850: result: 0.01
|
||||
configure:2855: checking whether build environment is sane
|
||||
configure:2900: result: yes
|
||||
configure:3071: checking for a race-free mkdir -p
|
||||
configure:3114: result: /usr/bin/mkdir -p
|
||||
configure:3121: checking for gawk
|
||||
configure:3142: found /usr/bin/gawk
|
||||
configure:3154: result: gawk
|
||||
configure:3165: checking whether make sets $(MAKE)
|
||||
configure:3189: result: yes
|
||||
configure:3215: checking whether make supports nested variables
|
||||
configure:3234: result: yes
|
||||
configure:3248: checking xargs -n works
|
||||
configure:3264: result: yes
|
||||
configure:3349: checking whether UID '1000' is supported by ustar format
|
||||
configure:3355: result: yes
|
||||
configure:3362: checking whether GID '1000' is supported by ustar format
|
||||
configure:3368: result: yes
|
||||
configure:3376: checking how to create a ustar tar archive
|
||||
configure:3387: tar --version
|
||||
tar (GNU tar) 1.35
|
||||
Copyright (C) 2023 Free Software Foundation, Inc.
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
|
||||
Written by John Gilmore and Jay Fenlason.
|
||||
configure:3390: $? = 0
|
||||
configure:3430: tardir=conftest.dir && eval tar --format=ustar -chf - "$tardir" >conftest.tar
|
||||
configure:3433: $? = 0
|
||||
configure:3437: tar -xf - <conftest.tar
|
||||
configure:3440: $? = 0
|
||||
configure:3442: cat conftest.dir/file
|
||||
GrepMe
|
||||
configure:3445: $? = 0
|
||||
configure:3460: result: gnutar
|
||||
configure:3486: checking for a sed that does not truncate output
|
||||
configure:3558: result: /usr/bin/sed
|
||||
configure:3564: checking whether NLS is requested
|
||||
configure:3575: result: yes
|
||||
configure:3615: checking for msgfmt
|
||||
configure: trying /usr/bin/msgfmt...
|
||||
0 translated messages.
|
||||
configure:3649: result: /usr/bin/msgfmt
|
||||
configure:3658: checking for gmsgfmt
|
||||
configure:3681: found /usr/bin/gmsgfmt
|
||||
configure:3695: result: /usr/bin/gmsgfmt
|
||||
configure:3740: checking for xgettext
|
||||
configure: trying /usr/bin/xgettext...
|
||||
/usr/bin/xgettext: warning: file '/dev/null' extension '' is unknown; will try C
|
||||
configure:3774: result: /usr/bin/xgettext
|
||||
configure:3819: checking for msgmerge
|
||||
configure: trying /usr/bin/msgmerge...
|
||||
configure:3852: result: /usr/bin/msgmerge
|
||||
configure:3906: checking whether make supports the include directive
|
||||
configure:3921: make -f confmf.GNU && cat confinc.out
|
||||
this is the am__doit target
|
||||
configure:3924: $? = 0
|
||||
configure:3943: result: yes (GNU style)
|
||||
configure:4020: checking for gcc
|
||||
configure:4041: found /usr/bin/gcc
|
||||
configure:4053: result: gcc
|
||||
configure:4412: checking for C compiler version
|
||||
configure:4421: gcc --version >&5
|
||||
gcc (Gentoo Hardened 15.2.1_p20260214 p5) 15.2.1 20260214
|
||||
Copyright (C) 2025 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
configure:4432: $? = 0
|
||||
configure:4421: gcc -v >&5
|
||||
Using built-in specs.
|
||||
COLLECT_GCC=gcc
|
||||
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/15/lto-wrapper
|
||||
OFFLOAD_TARGET_NAMES=nvptx-none
|
||||
OFFLOAD_TARGET_DEFAULT=1
|
||||
Target: x86_64-pc-linux-gnu
|
||||
Configured with: /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/15 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/15/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15 --disable-silent-rules --disable-dependency-tracking --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/15/python --enable-objc-gc --enable-languages=c,c++,go,objc,obj-c++,fortran,ada --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --enable-nls --without-included-gettext --disable-libunwind-exceptions --enable-checking=release --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo Hardened 15.2.1_p20260214 p5' --with-gcc-major-version-only --enable-libstdcxx-time --enable-lto --disable-libstdcxx-pch --enable-linker-build-id --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-multilib --with-multilib-list=m32,m64 --disable-fixed-point --enable-targets=all --enable-offload-defaulted --enable-offload-targets=nvptx-none --enable-libgomp --disable-libssp --enable-libada --enable-cet --disable-systemtap --disable-valgrind-annotations --disable-vtable-verify --disable-libvtv --with-zstd --with-isl --disable-isl-version-check --enable-default-pie --enable-host-pie --enable-host-bind-now --enable-default-ssp --disable-fixincludes --with-gxx-libcxx-include-dir=/usr/include/c++/v1 --with-build-config=bootstrap-cet
|
||||
Thread model: posix
|
||||
Supported LTO compression algorithms: zlib zstd
|
||||
gcc version 15.2.1 20260214 (Gentoo Hardened 15.2.1_p20260214 p5)
|
||||
... rest of stderr output deleted ...
|
||||
configure:4432: $? = 0
|
||||
configure:4421: gcc -V >&5
|
||||
gcc: error: unrecognized command-line option '-V'
|
||||
gcc: fatal error: no input files
|
||||
compilation terminated.
|
||||
configure:4432: $? = 1
|
||||
configure:4421: gcc -qversion >&5
|
||||
gcc: error: unrecognized command-line option '-qversion'; did you mean '--version'?
|
||||
gcc: fatal error: no input files
|
||||
compilation terminated.
|
||||
configure:4432: $? = 1
|
||||
configure:4421: gcc -version >&5
|
||||
gcc: error: unrecognized command-line option '-version'
|
||||
gcc: fatal error: no input files
|
||||
compilation terminated.
|
||||
configure:4432: $? = 1
|
||||
configure:4452: checking whether the C compiler works
|
||||
configure:4474: gcc conftest.c >&5
|
||||
configure:4478: $? = 0
|
||||
configure:4529: result: yes
|
||||
configure:4533: checking for C compiler default output file name
|
||||
configure:4535: result: a.out
|
||||
configure:4541: checking for suffix of executables
|
||||
configure:4548: gcc -o conftest conftest.c >&5
|
||||
configure:4552: $? = 0
|
||||
configure:4576: result:
|
||||
configure:4600: checking whether we are cross compiling
|
||||
configure:4608: gcc -o conftest conftest.c >&5
|
||||
configure:4612: $? = 0
|
||||
configure:4619: ./conftest
|
||||
configure:4623: $? = 0
|
||||
configure:4638: result: no
|
||||
configure:4644: checking for suffix of object files
|
||||
configure:4667: gcc -c conftest.c >&5
|
||||
configure:4671: $? = 0
|
||||
configure:4695: result: o
|
||||
configure:4699: checking whether the compiler supports GNU C
|
||||
configure:4719: gcc -c conftest.c >&5
|
||||
configure:4719: $? = 0
|
||||
configure:4731: result: yes
|
||||
configure:4742: checking whether gcc accepts -g
|
||||
configure:4763: gcc -c -g conftest.c >&5
|
||||
configure:4763: $? = 0
|
||||
configure:4810: result: yes
|
||||
configure:4830: checking for gcc option to enable C11 features
|
||||
configure:4845: gcc -c -g -O2 conftest.c >&5
|
||||
configure:4845: $? = 0
|
||||
configure:4864: result: none needed
|
||||
configure:4988: checking whether gcc understands -c and -o together
|
||||
configure:5011: gcc -c conftest.c -o conftest2.o
|
||||
configure:5014: $? = 0
|
||||
configure:5011: gcc -c conftest.c -o conftest2.o
|
||||
configure:5014: $? = 0
|
||||
configure:5030: result: yes
|
||||
configure:5049: checking dependency style of gcc
|
||||
configure:5162: result: gcc3
|
||||
configure:5183: checking build system type
|
||||
configure:5199: result: x86_64-pc-linux-gnu
|
||||
configure:5219: checking host system type
|
||||
configure:5234: result: x86_64-pc-linux-gnu
|
||||
configure:5283: checking for ld used by gcc
|
||||
configure:5413: result: /usr/x86_64-pc-linux-gnu/bin/ld
|
||||
configure:5420: checking if the linker (/usr/x86_64-pc-linux-gnu/bin/ld) is GNU ld
|
||||
configure:5437: result: yes
|
||||
configure:5445: checking for shared library run path origin
|
||||
configure:5460: result: done
|
||||
configure:5483: checking 32-bit host C ABI
|
||||
configure:5550: gcc -c -g -O2 conftest.c >&5
|
||||
configure:5550: $? = 0
|
||||
configure:5756: result: no
|
||||
configure:5766: checking how to run the C preprocessor
|
||||
configure:5792: gcc -E conftest.c
|
||||
configure:5792: $? = 0
|
||||
configure:5808: gcc -E conftest.c
|
||||
conftest.c:11:10: fatal error: ac_nonexistent.h: No such file or directory
|
||||
11 | #include <ac_nonexistent.h>
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
compilation terminated.
|
||||
configure:5808: $? = 1
|
||||
configure: failed program was:
|
||||
| /* confdefs.h */
|
||||
| #define PACKAGE_NAME "ipx-utils"
|
||||
| #define PACKAGE_TARNAME "ipx-utils"
|
||||
| #define PACKAGE_VERSION "1.4"
|
||||
| #define PACKAGE_STRING "ipx-utils 1.4"
|
||||
| #define PACKAGE_BUGREPORT "mario.fetka@disconnected-by-peer.at"
|
||||
| #define PACKAGE_URL ""
|
||||
| #define PACKAGE "ipx-utils"
|
||||
| #define VERSION "1.4"
|
||||
| /* end confdefs.h. */
|
||||
| #include <ac_nonexistent.h>
|
||||
configure:5837: result: gcc -E
|
||||
configure:5851: gcc -E conftest.c
|
||||
configure:5851: $? = 0
|
||||
configure:5867: gcc -E conftest.c
|
||||
conftest.c:11:10: fatal error: ac_nonexistent.h: No such file or directory
|
||||
11 | #include <ac_nonexistent.h>
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
compilation terminated.
|
||||
configure:5867: $? = 1
|
||||
configure: failed program was:
|
||||
| /* confdefs.h */
|
||||
| #define PACKAGE_NAME "ipx-utils"
|
||||
| #define PACKAGE_TARNAME "ipx-utils"
|
||||
| #define PACKAGE_VERSION "1.4"
|
||||
| #define PACKAGE_STRING "ipx-utils 1.4"
|
||||
| #define PACKAGE_BUGREPORT "mario.fetka@disconnected-by-peer.at"
|
||||
| #define PACKAGE_URL ""
|
||||
| #define PACKAGE "ipx-utils"
|
||||
| #define VERSION "1.4"
|
||||
| /* end confdefs.h. */
|
||||
| #include <ac_nonexistent.h>
|
||||
configure:5900: checking for egrep -e
|
||||
configure:6030: result: /usr/bin/grep -E
|
||||
configure:6038: checking for ELF binary format
|
||||
configure:6064: result: yes
|
||||
configure:6113: checking for the common suffixes of directories in the library search path
|
||||
configure:6183: result: lib,lib,lib64
|
||||
configure:6701: checking for CFPreferencesCopyAppValue
|
||||
configure:6720: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5
|
||||
conftest.c:11:10: fatal error: CoreFoundation/CFPreferences.h: No such file or directory
|
||||
11 | #include <CoreFoundation/CFPreferences.h>
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
compilation terminated.
|
||||
configure:6720: $? = 1
|
||||
configure: failed program was:
|
||||
| /* confdefs.h */
|
||||
| #define PACKAGE_NAME "ipx-utils"
|
||||
| #define PACKAGE_TARNAME "ipx-utils"
|
||||
| #define PACKAGE_VERSION "1.4"
|
||||
| #define PACKAGE_STRING "ipx-utils 1.4"
|
||||
| #define PACKAGE_BUGREPORT "mario.fetka@disconnected-by-peer.at"
|
||||
| #define PACKAGE_URL ""
|
||||
| #define PACKAGE "ipx-utils"
|
||||
| #define VERSION "1.4"
|
||||
| /* end confdefs.h. */
|
||||
| #include <CoreFoundation/CFPreferences.h>
|
||||
| int
|
||||
| main (void)
|
||||
| {
|
||||
| CFPreferencesCopyAppValue(NULL, NULL)
|
||||
| ;
|
||||
| return 0;
|
||||
| }
|
||||
configure:6732: result: no
|
||||
configure:6739: checking for CFLocaleCopyPreferredLanguages
|
||||
configure:6758: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5
|
||||
conftest.c:11:10: fatal error: CoreFoundation/CFLocale.h: No such file or directory
|
||||
11 | #include <CoreFoundation/CFLocale.h>
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
compilation terminated.
|
||||
configure:6758: $? = 1
|
||||
configure: failed program was:
|
||||
| /* confdefs.h */
|
||||
| #define PACKAGE_NAME "ipx-utils"
|
||||
| #define PACKAGE_TARNAME "ipx-utils"
|
||||
| #define PACKAGE_VERSION "1.4"
|
||||
| #define PACKAGE_STRING "ipx-utils 1.4"
|
||||
| #define PACKAGE_BUGREPORT "mario.fetka@disconnected-by-peer.at"
|
||||
| #define PACKAGE_URL ""
|
||||
| #define PACKAGE "ipx-utils"
|
||||
| #define VERSION "1.4"
|
||||
| /* end confdefs.h. */
|
||||
| #include <CoreFoundation/CFLocale.h>
|
||||
| int
|
||||
| main (void)
|
||||
| {
|
||||
| CFLocaleCopyPreferredLanguages();
|
||||
| ;
|
||||
| return 0;
|
||||
| }
|
||||
configure:6770: result: no
|
||||
configure:6820: checking for GNU gettext in libc
|
||||
configure:6850: gcc -o conftest -g -O2 conftest.c >&5
|
||||
configure:6850: $? = 0
|
||||
configure:6862: result: yes
|
||||
configure:7758: checking whether to use NLS
|
||||
configure:7760: result: yes
|
||||
configure:7763: checking where the gettext function comes from
|
||||
configure:7774: result: libc
|
||||
configure:7887: checking for gcc
|
||||
configure:7920: result: gcc
|
||||
configure:8279: checking for C compiler version
|
||||
configure:8288: gcc --version >&5
|
||||
gcc (Gentoo Hardened 15.2.1_p20260214 p5) 15.2.1 20260214
|
||||
Copyright (C) 2025 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
configure:8299: $? = 0
|
||||
configure:8288: gcc -v >&5
|
||||
Using built-in specs.
|
||||
COLLECT_GCC=gcc
|
||||
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/15/lto-wrapper
|
||||
OFFLOAD_TARGET_NAMES=nvptx-none
|
||||
OFFLOAD_TARGET_DEFAULT=1
|
||||
Target: x86_64-pc-linux-gnu
|
||||
Configured with: /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/15 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/15/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15 --disable-silent-rules --disable-dependency-tracking --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/15/python --enable-objc-gc --enable-languages=c,c++,go,objc,obj-c++,fortran,ada --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --enable-nls --without-included-gettext --disable-libunwind-exceptions --enable-checking=release --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo Hardened 15.2.1_p20260214 p5' --with-gcc-major-version-only --enable-libstdcxx-time --enable-lto --disable-libstdcxx-pch --enable-linker-build-id --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-multilib --with-multilib-list=m32,m64 --disable-fixed-point --enable-targets=all --enable-offload-defaulted --enable-offload-targets=nvptx-none --enable-libgomp --disable-libssp --enable-libada --enable-cet --disable-systemtap --disable-valgrind-annotations --disable-vtable-verify --disable-libvtv --with-zstd --with-isl --disable-isl-version-check --enable-default-pie --enable-host-pie --enable-host-bind-now --enable-default-ssp --disable-fixincludes --with-gxx-libcxx-include-dir=/usr/include/c++/v1 --with-build-config=bootstrap-cet
|
||||
Thread model: posix
|
||||
Supported LTO compression algorithms: zlib zstd
|
||||
gcc version 15.2.1 20260214 (Gentoo Hardened 15.2.1_p20260214 p5)
|
||||
... rest of stderr output deleted ...
|
||||
configure:8299: $? = 0
|
||||
configure:8288: gcc -V >&5
|
||||
gcc: error: unrecognized command-line option '-V'
|
||||
gcc: fatal error: no input files
|
||||
compilation terminated.
|
||||
configure:8299: $? = 1
|
||||
configure:8288: gcc -qversion >&5
|
||||
gcc: error: unrecognized command-line option '-qversion'; did you mean '--version'?
|
||||
gcc: fatal error: no input files
|
||||
compilation terminated.
|
||||
configure:8299: $? = 1
|
||||
configure:8288: gcc -version >&5
|
||||
gcc: error: unrecognized command-line option '-version'
|
||||
gcc: fatal error: no input files
|
||||
compilation terminated.
|
||||
configure:8299: $? = 1
|
||||
configure:8303: checking whether the compiler supports GNU C
|
||||
configure:8335: result: yes
|
||||
configure:8346: checking whether gcc accepts -g
|
||||
configure:8414: result: yes
|
||||
configure:8434: checking for gcc option to enable C11 features
|
||||
configure:8468: result: none needed
|
||||
configure:8592: checking whether gcc understands -c and -o together
|
||||
configure:8634: result: yes
|
||||
configure:8653: checking dependency style of gcc
|
||||
configure:8766: result: gcc3
|
||||
configure:8786: checking for stdio.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8786: checking for stdlib.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8786: checking for string.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8786: checking for inttypes.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8786: checking for stdint.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8786: checking for strings.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8786: checking for sys/stat.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8786: checking for sys/types.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8786: checking for unistd.h
|
||||
configure:8786: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8786: $? = 0
|
||||
configure:8786: result: yes
|
||||
configure:8811: checking for libintl.h
|
||||
configure:8811: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8811: $? = 0
|
||||
configure:8811: result: yes
|
||||
configure:8817: checking for sys/socket.h
|
||||
configure:8817: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8817: $? = 0
|
||||
configure:8817: result: yes
|
||||
configure:8823: checking for net/if.h
|
||||
configure:8823: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8823: $? = 0
|
||||
configure:8823: result: yes
|
||||
configure:8829: checking for net/route.h
|
||||
configure:8829: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8829: $? = 0
|
||||
configure:8829: result: yes
|
||||
configure:8835: checking for netipx/ipx.h
|
||||
configure:8835: gcc -c -g -O2 conftest.c >&5
|
||||
configure:8835: $? = 0
|
||||
configure:8835: result: yes
|
||||
configure:8842: checking for library containing gettext
|
||||
configure:8878: gcc -o conftest -g -O2 conftest.c >&5
|
||||
conftest.c:39:6: warning: conflicting types for built-in function 'gettext'; expected 'char *(const char *)' [-Wbuiltin-declaration-mismatch]
|
||||
39 | char gettext (void);
|
||||
| ^~~~~~~
|
||||
configure:8878: $? = 0
|
||||
configure:8900: result: none required
|
||||
configure:8909: checking for gettext
|
||||
configure:8909: gcc -o conftest -g -O2 conftest.c >&5
|
||||
conftest.c:45:6: warning: conflicting types for built-in function 'gettext'; expected 'char *(const char *)' [-Wbuiltin-declaration-mismatch]
|
||||
45 | char gettext (void);
|
||||
| ^~~~~~~
|
||||
configure:8909: $? = 0
|
||||
configure:8909: result: yes
|
||||
configure:8915: checking for bindtextdomain
|
||||
configure:8915: gcc -o conftest -g -O2 conftest.c >&5
|
||||
configure:8915: $? = 0
|
||||
configure:8915: result: yes
|
||||
configure:8921: checking for textdomain
|
||||
configure:8921: gcc -o conftest -g -O2 conftest.c >&5
|
||||
configure:8921: $? = 0
|
||||
configure:8921: result: yes
|
||||
configure:9044: checking that generated files are newer than configure
|
||||
configure:9050: result: done
|
||||
configure:9089: creating ./config.status
|
||||
|
||||
## ---------------------- ##
|
||||
## Running config.status. ##
|
||||
## ---------------------- ##
|
||||
|
||||
This file was extended by ipx-utils config.status 1.4, which was
|
||||
generated by GNU Autoconf 2.72. Invocation command line was
|
||||
|
||||
CONFIG_FILES =
|
||||
CONFIG_HEADERS =
|
||||
CONFIG_LINKS =
|
||||
CONFIG_COMMANDS =
|
||||
$ ./config.status
|
||||
|
||||
on tiulk
|
||||
|
||||
config.status:899: creating Makefile
|
||||
config.status:899: creating ipxripd/Makefile
|
||||
config.status:899: creating po/Makefile.in
|
||||
config.status:899: creating config.h
|
||||
config.status:1080: config.h is unchanged
|
||||
config.status:1128: executing po-directories commands
|
||||
config.status:1128: executing depfiles commands
|
||||
config.status:1314: cd . && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles
|
||||
make: Nothing to be done for 'am--depfiles'.
|
||||
config.status:1321: $? = 0
|
||||
config.status:1314: cd ipxripd && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles
|
||||
make: Nothing to be done for 'am--depfiles'.
|
||||
config.status:1321: $? = 0
|
||||
|
||||
## ---------------- ##
|
||||
## Cache variables. ##
|
||||
## ---------------- ##
|
||||
|
||||
ac_cv_build=x86_64-pc-linux-gnu
|
||||
ac_cv_c_compiler_gnu=yes
|
||||
ac_cv_env_CC_set=
|
||||
ac_cv_env_CC_value=
|
||||
ac_cv_env_CFLAGS_set=
|
||||
ac_cv_env_CFLAGS_value=
|
||||
ac_cv_env_CPPFLAGS_set=
|
||||
ac_cv_env_CPPFLAGS_value=
|
||||
ac_cv_env_CPP_set=
|
||||
ac_cv_env_CPP_value=
|
||||
ac_cv_env_LDFLAGS_set=
|
||||
ac_cv_env_LDFLAGS_value=
|
||||
ac_cv_env_LIBS_set=
|
||||
ac_cv_env_LIBS_value=
|
||||
ac_cv_env_build_alias_set=
|
||||
ac_cv_env_build_alias_value=
|
||||
ac_cv_env_host_alias_set=
|
||||
ac_cv_env_host_alias_value=
|
||||
ac_cv_env_target_alias_set=
|
||||
ac_cv_env_target_alias_value=
|
||||
ac_cv_func_bindtextdomain=yes
|
||||
ac_cv_func_gettext=yes
|
||||
ac_cv_func_textdomain=yes
|
||||
ac_cv_header_inttypes_h=yes
|
||||
ac_cv_header_libintl_h=yes
|
||||
ac_cv_header_net_if_h=yes
|
||||
ac_cv_header_net_route_h=yes
|
||||
ac_cv_header_netipx_ipx_h=yes
|
||||
ac_cv_header_stdint_h=yes
|
||||
ac_cv_header_stdio_h=yes
|
||||
ac_cv_header_stdlib_h=yes
|
||||
ac_cv_header_string_h=yes
|
||||
ac_cv_header_strings_h=yes
|
||||
ac_cv_header_sys_socket_h=yes
|
||||
ac_cv_header_sys_stat_h=yes
|
||||
ac_cv_header_sys_types_h=yes
|
||||
ac_cv_header_unistd_h=yes
|
||||
ac_cv_host=x86_64-pc-linux-gnu
|
||||
ac_cv_objext=o
|
||||
ac_cv_path_EGREP_TRADITIONAL='/usr/bin/grep -E'
|
||||
ac_cv_path_GMSGFMT=/usr/bin/gmsgfmt
|
||||
ac_cv_path_MSGFMT=/usr/bin/msgfmt
|
||||
ac_cv_path_MSGMERGE=/usr/bin/msgmerge
|
||||
ac_cv_path_SED=/usr/bin/sed
|
||||
ac_cv_path_XGETTEXT=/usr/bin/xgettext
|
||||
ac_cv_path_install='/usr/bin/install -c'
|
||||
ac_cv_path_mkdir=/usr/bin/mkdir
|
||||
ac_cv_prog_AWK=gawk
|
||||
ac_cv_prog_CPP='gcc -E'
|
||||
ac_cv_prog_ac_ct_CC=gcc
|
||||
ac_cv_prog_cc_c11=
|
||||
ac_cv_prog_cc_g=yes
|
||||
ac_cv_prog_cc_stdc=
|
||||
ac_cv_prog_make_make_set=yes
|
||||
ac_cv_search_gettext='none required'
|
||||
acl_cv_hardcode_direct=no
|
||||
acl_cv_hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||
acl_cv_hardcode_libdir_separator=
|
||||
acl_cv_hardcode_minus_L=no
|
||||
acl_cv_libdirstems=lib,lib,lib64
|
||||
acl_cv_libext=a
|
||||
acl_cv_libname_spec='lib$name'
|
||||
acl_cv_library_names_spec='$libname$shrext'
|
||||
acl_cv_path_LD=/usr/x86_64-pc-linux-gnu/bin/ld
|
||||
acl_cv_prog_gnu_ld=yes
|
||||
acl_cv_rpath=done
|
||||
acl_cv_shlibext=so
|
||||
acl_cv_wl=-Wl,
|
||||
am_cv_CC_dependencies_compiler_type=gcc3
|
||||
am_cv_filesystem_timestamp_resolution=0.01
|
||||
am_cv_make_support_nested_variables=yes
|
||||
am_cv_prog_cc_c_o=yes
|
||||
am_cv_prog_tar_ustar=gnutar
|
||||
am_cv_sleep_fractional_seconds=yes
|
||||
am_cv_xargs_n_works=yes
|
||||
gl_cv_elf=yes
|
||||
gl_cv_host_cpu_c_abi_32bit=no
|
||||
gt_cv_func_CFLocaleCopyPreferredLanguages=no
|
||||
gt_cv_func_CFPreferencesCopyAppValue=no
|
||||
gt_cv_func_gnugettext1_libc=yes
|
||||
|
||||
## ----------------- ##
|
||||
## Output variables. ##
|
||||
## ----------------- ##
|
||||
|
||||
ACLOCAL='${SHELL} '\''/home/mario/mars/ipx-utils/missing'\'' aclocal-1.18'
|
||||
AMDEPBACKSLASH='\'
|
||||
AMDEP_FALSE='#'
|
||||
AMDEP_TRUE=''
|
||||
AMTAR='$${TAR-tar}'
|
||||
AM_BACKSLASH='\'
|
||||
AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
|
||||
AM_DEFAULT_VERBOSITY='1'
|
||||
AM_V='$(V)'
|
||||
AUTOCONF='${SHELL} '\''/home/mario/mars/ipx-utils/missing'\'' autoconf'
|
||||
AUTOHEADER='${SHELL} '\''/home/mario/mars/ipx-utils/missing'\'' autoheader'
|
||||
AUTOMAKE='${SHELL} '\''/home/mario/mars/ipx-utils/missing'\'' automake-1.18'
|
||||
AWK='gawk'
|
||||
CC='gcc'
|
||||
CCDEPMODE='depmode=gcc3'
|
||||
CFLAGS='-g -O2'
|
||||
CPP='gcc -E'
|
||||
CPPFLAGS=''
|
||||
CSCOPE='cscope'
|
||||
CTAGS='ctags'
|
||||
CYGPATH_W='echo'
|
||||
DEFS='-DHAVE_CONFIG_H'
|
||||
DEPDIR='.deps'
|
||||
ECHO_C=''
|
||||
ECHO_N='-n'
|
||||
ECHO_T=''
|
||||
ETAGS='etags'
|
||||
EXEEXT=''
|
||||
GETTEXT_MACRO_VERSION='0.20'
|
||||
GMSGFMT='/usr/bin/gmsgfmt'
|
||||
GMSGFMT_015='/usr/bin/gmsgfmt'
|
||||
INSTALL_DATA='${INSTALL} -m 644'
|
||||
INSTALL_PROGRAM='${INSTALL}'
|
||||
INSTALL_SCRIPT='${INSTALL}'
|
||||
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
|
||||
INTLLIBS=''
|
||||
INTL_MACOSX_LIBS=''
|
||||
LDFLAGS=''
|
||||
LIBICONV='-liconv'
|
||||
LIBINTL=''
|
||||
LIBOBJS=''
|
||||
LIBS=''
|
||||
LTLIBICONV='-liconv'
|
||||
LTLIBINTL=''
|
||||
LTLIBOBJS=''
|
||||
MAKEINFO='${SHELL} '\''/home/mario/mars/ipx-utils/missing'\'' makeinfo'
|
||||
MKDIR_P='/usr/bin/mkdir -p'
|
||||
MSGFMT='/usr/bin/msgfmt'
|
||||
MSGMERGE='/usr/bin/msgmerge'
|
||||
MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt'
|
||||
OBJEXT='o'
|
||||
PACKAGE='ipx-utils'
|
||||
PACKAGE_BUGREPORT='mario.fetka@disconnected-by-peer.at'
|
||||
PACKAGE_NAME='ipx-utils'
|
||||
PACKAGE_STRING='ipx-utils 1.4'
|
||||
PACKAGE_TARNAME='ipx-utils'
|
||||
PACKAGE_URL=''
|
||||
PACKAGE_VERSION='1.4'
|
||||
PATH_SEPARATOR=':'
|
||||
POSUB='po'
|
||||
SED='/usr/bin/sed'
|
||||
SET_MAKE=''
|
||||
SHELL='/bin/sh'
|
||||
STRIP=''
|
||||
USE_NLS='yes'
|
||||
VERSION='1.4'
|
||||
XGETTEXT='/usr/bin/xgettext'
|
||||
XGETTEXT_015='/usr/bin/xgettext'
|
||||
XGETTEXT_EXTRA_OPTIONS=''
|
||||
ac_ct_CC='gcc'
|
||||
am__EXEEXT_FALSE=''
|
||||
am__EXEEXT_TRUE='#'
|
||||
am__fastdepCC_FALSE='#'
|
||||
am__fastdepCC_TRUE=''
|
||||
am__include='include'
|
||||
am__isrc=''
|
||||
am__leading_dot='.'
|
||||
am__nodep='_no'
|
||||
am__quote=''
|
||||
am__rm_f_notfound=''
|
||||
am__tar='tar --format=ustar -chf - "$$tardir"'
|
||||
am__untar='tar -xf -'
|
||||
am__xargs_n='xargs -n'
|
||||
bindir='${exec_prefix}/bin'
|
||||
build='x86_64-pc-linux-gnu'
|
||||
build_alias=''
|
||||
build_cpu='x86_64'
|
||||
build_os='linux-gnu'
|
||||
build_vendor='pc'
|
||||
datadir='${datarootdir}'
|
||||
datarootdir='${prefix}/share'
|
||||
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
|
||||
dvidir='${docdir}'
|
||||
exec_prefix='${prefix}'
|
||||
host='x86_64-pc-linux-gnu'
|
||||
host_alias=''
|
||||
host_cpu='x86_64'
|
||||
host_os='linux-gnu'
|
||||
host_vendor='pc'
|
||||
htmldir='${docdir}'
|
||||
includedir='${prefix}/include'
|
||||
infodir='${datarootdir}/info'
|
||||
install_sh='${SHELL} /home/mario/mars/ipx-utils/install-sh'
|
||||
libdir='${exec_prefix}/lib'
|
||||
libexecdir='${exec_prefix}/libexec'
|
||||
localedir='${datarootdir}/locale'
|
||||
localstatedir='${prefix}/var'
|
||||
mandir='${datarootdir}/man'
|
||||
mkdir_p='$(MKDIR_P)'
|
||||
oldincludedir='/usr/include'
|
||||
pdfdir='${docdir}'
|
||||
prefix='/usr'
|
||||
program_transform_name='s,x,x,'
|
||||
psdir='${docdir}'
|
||||
runstatedir='${localstatedir}/run'
|
||||
sbindir='${exec_prefix}/sbin'
|
||||
sharedstatedir='${prefix}/com'
|
||||
sysconfdir='${prefix}/etc'
|
||||
target_alias=''
|
||||
|
||||
## ----------- ##
|
||||
## confdefs.h. ##
|
||||
## ----------- ##
|
||||
|
||||
/* confdefs.h */
|
||||
#define PACKAGE_NAME "ipx-utils"
|
||||
#define PACKAGE_TARNAME "ipx-utils"
|
||||
#define PACKAGE_VERSION "1.4"
|
||||
#define PACKAGE_STRING "ipx-utils 1.4"
|
||||
#define PACKAGE_BUGREPORT "mario.fetka@disconnected-by-peer.at"
|
||||
#define PACKAGE_URL ""
|
||||
#define PACKAGE "ipx-utils"
|
||||
#define VERSION "1.4"
|
||||
#define ENABLE_NLS 1
|
||||
#define HAVE_GETTEXT 1
|
||||
#define HAVE_DCGETTEXT 1
|
||||
#define HAVE_STDIO_H 1
|
||||
#define HAVE_STDLIB_H 1
|
||||
#define HAVE_STRING_H 1
|
||||
#define HAVE_INTTYPES_H 1
|
||||
#define HAVE_STDINT_H 1
|
||||
#define HAVE_STRINGS_H 1
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define STDC_HEADERS 1
|
||||
#define HAVE_LIBINTL_H 1
|
||||
#define HAVE_SYS_SOCKET_H 1
|
||||
#define HAVE_NET_IF_H 1
|
||||
#define HAVE_NET_ROUTE_H 1
|
||||
#define HAVE_NETIPX_IPX_H 1
|
||||
#define HAVE_GETTEXT 1
|
||||
#define HAVE_BINDTEXTDOMAIN 1
|
||||
#define HAVE_TEXTDOMAIN 1
|
||||
#define LOCALEDIR "${datarootdir}/locale"
|
||||
|
||||
configure: exit 0
|
||||
1347
config.status
Executable file
1347
config.status
Executable file
File diff suppressed because it is too large
Load Diff
3
configure
vendored
3
configure
vendored
@@ -8930,7 +8930,7 @@ fi
|
||||
printf "%s\n" "#define LOCALEDIR \"${datadir}/locale\"" >>confdefs.h
|
||||
|
||||
|
||||
ac_config_files="$ac_config_files Makefile po/Makefile.in"
|
||||
ac_config_files="$ac_config_files Makefile ipxripd/Makefile po/Makefile.in"
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
# This file is a shell script that caches the results of configure
|
||||
@@ -9681,6 +9681,7 @@ do
|
||||
"po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
|
||||
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
|
||||
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
|
||||
"ipxripd/Makefile") CONFIG_FILES="$CONFIG_FILES ipxripd/Makefile" ;;
|
||||
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
|
||||
|
||||
*) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;;
|
||||
|
||||
@@ -17,6 +17,7 @@ AC_DEFINE_UNQUOTED([LOCALEDIR], ["${datadir}/locale"], [Define location of messa
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
ipxripd/Makefile
|
||||
po/Makefile.in
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
10526
configure~
Executable file
10526
configure~
Executable file
File diff suppressed because it is too large
Load Diff
339
ipxripd/COPYING
Normal file
339
ipxripd/COPYING
Normal file
@@ -0,0 +1,339 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
675 Mass Ave, Cambridge, MA 02139, USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Appendix: How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) 19yy <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
780
ipxripd/Makefile
Normal file
780
ipxripd/Makefile
Normal file
@@ -0,0 +1,780 @@
|
||||
# Makefile.in generated by automake 1.18.1 from Makefile.am.
|
||||
# ipxripd/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994-2025 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
am__rm_f = rm -f $(am__rm_f_notfound)
|
||||
am__rm_rf = rm -rf $(am__rm_f_notfound)
|
||||
pkgdatadir = $(datadir)/ipx-utils
|
||||
pkgincludedir = $(includedir)/ipx-utils
|
||||
pkglibdir = $(libdir)/ipx-utils
|
||||
pkglibexecdir = $(libexecdir)/ipx-utils
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-pc-linux-gnu
|
||||
host_triplet = x86_64-pc-linux-gnu
|
||||
sbin_PROGRAMS = ipxd$(EXEEXT)
|
||||
subdir = ipxripd
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
|
||||
$(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
|
||||
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
|
||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
|
||||
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man5dir)" \
|
||||
"$(DESTDIR)$(man8dir)"
|
||||
PROGRAMS = $(sbin_PROGRAMS)
|
||||
am_ipxd_OBJECTS = ipxd.$(OBJEXT) ipxripd.$(OBJEXT) ipxsapd.$(OBJEXT) \
|
||||
ipxsap.$(OBJEXT) ipxrip.$(OBJEXT) ipxkern.$(OBJEXT) \
|
||||
ipxutil.$(OBJEXT)
|
||||
ipxd_OBJECTS = $(am_ipxd_OBJECTS)
|
||||
ipxd_LDADD = $(LDADD)
|
||||
AM_V_P = $(am__v_P_$(V))
|
||||
am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_$(V))
|
||||
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_$(V))
|
||||
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I. -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__maybe_remake_depfiles = depfiles
|
||||
am__depfiles_remade = ./$(DEPDIR)/ipxd.Po ./$(DEPDIR)/ipxkern.Po \
|
||||
./$(DEPDIR)/ipxrip.Po ./$(DEPDIR)/ipxripd.Po \
|
||||
./$(DEPDIR)/ipxsap.Po ./$(DEPDIR)/ipxsapd.Po \
|
||||
./$(DEPDIR)/ipxutil.Po
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
AM_V_CC = $(am__v_CC_$(V))
|
||||
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_CC_0 = @echo " CC " $@;
|
||||
am__v_CC_1 =
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
AM_V_CCLD = $(am__v_CCLD_$(V))
|
||||
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(ipxd_SOURCES)
|
||||
DIST_SOURCES = $(ipxd_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
||||
am__install_max = 40
|
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }'
|
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__uninstall_files_from_dir = { \
|
||||
{ test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||
$(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
|
||||
}
|
||||
man5dir = $(mandir)/man5
|
||||
man8dir = $(mandir)/man8
|
||||
NROFF = nroff
|
||||
MANS = $(man5_MANS) $(man8_MANS)
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp COPYING \
|
||||
README
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = ${SHELL} '/home/mario/mars/ipx-utils/missing' aclocal-1.18
|
||||
AMTAR = $${TAR-tar}
|
||||
AM_DEFAULT_VERBOSITY = 1
|
||||
AUTOCONF = ${SHELL} '/home/mario/mars/ipx-utils/missing' autoconf
|
||||
AUTOHEADER = ${SHELL} '/home/mario/mars/ipx-utils/missing' autoheader
|
||||
AUTOMAKE = ${SHELL} '/home/mario/mars/ipx-utils/missing' automake-1.18
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS = -g -O2
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CSCOPE = cscope
|
||||
CTAGS = ctags
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
ETAGS = etags
|
||||
EXEEXT =
|
||||
GETTEXT_MACRO_VERSION = 0.20
|
||||
GMSGFMT = /usr/bin/gmsgfmt
|
||||
GMSGFMT_015 = /usr/bin/gmsgfmt
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
|
||||
INTLLIBS =
|
||||
INTL_MACOSX_LIBS =
|
||||
LDFLAGS =
|
||||
LIBICONV = -liconv
|
||||
LIBINTL =
|
||||
LIBOBJS =
|
||||
LIBS =
|
||||
LTLIBICONV = -liconv
|
||||
LTLIBINTL =
|
||||
LTLIBOBJS =
|
||||
MAKEINFO = ${SHELL} '/home/mario/mars/ipx-utils/missing' makeinfo
|
||||
MKDIR_P = /usr/bin/mkdir -p
|
||||
MSGFMT = /usr/bin/msgfmt
|
||||
MSGMERGE = /usr/bin/msgmerge
|
||||
MSGMERGE_FOR_MSGFMT_OPTION = --for-msgfmt
|
||||
OBJEXT = o
|
||||
PACKAGE = ipx-utils
|
||||
PACKAGE_BUGREPORT = mario.fetka@disconnected-by-peer.at
|
||||
PACKAGE_NAME = ipx-utils
|
||||
PACKAGE_STRING = ipx-utils 1.4
|
||||
PACKAGE_TARNAME = ipx-utils
|
||||
PACKAGE_URL =
|
||||
PACKAGE_VERSION = 1.4
|
||||
PATH_SEPARATOR = :
|
||||
POSUB = po
|
||||
SED = /usr/bin/sed
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP =
|
||||
USE_NLS = yes
|
||||
VERSION = 1.4
|
||||
XGETTEXT = /usr/bin/xgettext
|
||||
XGETTEXT_015 = /usr/bin/xgettext
|
||||
XGETTEXT_EXTRA_OPTIONS =
|
||||
abs_builddir = /home/mario/mars/ipx-utils/ipxripd
|
||||
abs_srcdir = /home/mario/mars/ipx-utils/ipxripd
|
||||
abs_top_builddir = /home/mario/mars/ipx-utils
|
||||
abs_top_srcdir = /home/mario/mars/ipx-utils
|
||||
ac_ct_CC = gcc
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__rm_f_notfound =
|
||||
am__tar = tar --format=ustar -chf - "$$tardir"
|
||||
am__untar = tar -xf -
|
||||
am__xargs_n = xargs -n
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-pc-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = pc
|
||||
builddir = .
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-pc-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = pc
|
||||
htmldir = ${docdir}
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = ${SHELL} /home/mario/mars/ipx-utils/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = $(MKDIR_P)
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
prefix = /usr
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
runstatedir = ${localstatedir}/run
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
srcdir = .
|
||||
sysconfdir = ${prefix}/etc
|
||||
target_alias =
|
||||
top_build_prefix = ../
|
||||
top_builddir = ..
|
||||
top_srcdir = ..
|
||||
AM_CFLAGS = -Wall -Wextra
|
||||
ipxd_SOURCES = \
|
||||
ipxd.c \
|
||||
ipxd.h \
|
||||
ipxripd.c \
|
||||
ipxripd.h \
|
||||
ipxsapd.c \
|
||||
ipxsapd.h \
|
||||
ipxsap.c \
|
||||
ipxsap.h \
|
||||
ipxrip.c \
|
||||
ipxrip.h \
|
||||
ipxkern.c \
|
||||
ipxkern.h \
|
||||
ipxutil.c \
|
||||
ipxutil.h
|
||||
|
||||
man8_MANS = ipxd.8
|
||||
man5_MANS = ipx_ticks.5
|
||||
EXTRA_DIST = \
|
||||
README \
|
||||
COPYING \
|
||||
ipxripd-0.7.lsm \
|
||||
ipx_ticks
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ipxripd/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign ipxripd/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
install-sbinPROGRAMS: $(sbin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p \
|
||||
; then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' \
|
||||
-e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-sbinPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' \
|
||||
`; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(sbindir)" && $(am__rm_f) $$files
|
||||
|
||||
clean-sbinPROGRAMS:
|
||||
-$(am__rm_f) $(sbin_PROGRAMS)
|
||||
|
||||
ipxd$(EXEEXT): $(ipxd_OBJECTS) $(ipxd_DEPENDENCIES) $(EXTRA_ipxd_DEPENDENCIES)
|
||||
@rm -f ipxd$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(ipxd_OBJECTS) $(ipxd_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
include ./$(DEPDIR)/ipxd.Po # am--include-marker
|
||||
include ./$(DEPDIR)/ipxkern.Po # am--include-marker
|
||||
include ./$(DEPDIR)/ipxrip.Po # am--include-marker
|
||||
include ./$(DEPDIR)/ipxripd.Po # am--include-marker
|
||||
include ./$(DEPDIR)/ipxsap.Po # am--include-marker
|
||||
include ./$(DEPDIR)/ipxsapd.Po # am--include-marker
|
||||
include ./$(DEPDIR)/ipxutil.Po # am--include-marker
|
||||
|
||||
$(am__depfiles_remade):
|
||||
@$(MKDIR_P) $(@D)
|
||||
@: >>$@
|
||||
|
||||
am--depfiles: $(am__depfiles_remade)
|
||||
|
||||
.c.o:
|
||||
$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||
$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
$(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
# $(AM_V_CC)source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||
$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||
$(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
# $(AM_V_CC)source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
install-man5: $(man5_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1='$(man5_MANS)'; \
|
||||
list2=''; \
|
||||
test -n "$(man5dir)" \
|
||||
&& test -n "`echo $$list1$$list2`" \
|
||||
|| exit 0; \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
|
||||
{ for i in $$list1; do echo "$$i"; done; \
|
||||
if test -n "$$list2"; then \
|
||||
for i in $$list2; do echo "$$i"; done \
|
||||
| sed -n '/\.5[a-z]*$$/p'; \
|
||||
fi; \
|
||||
} | while read p; do \
|
||||
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; echo "$$p"; \
|
||||
done | \
|
||||
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
|
||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
|
||||
sed 'N;N;s,\n, ,g' | { \
|
||||
list=; while read file base inst; do \
|
||||
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
|
||||
fi; \
|
||||
done; \
|
||||
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
|
||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
|
||||
done; }
|
||||
|
||||
uninstall-man5:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man5_MANS)'; test -n "$(man5dir)" || exit 0; \
|
||||
files=`{ for i in $$list; do echo "$$i"; done; \
|
||||
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
|
||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
|
||||
dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
|
||||
install-man8: $(man8_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1='$(man8_MANS)'; \
|
||||
list2=''; \
|
||||
test -n "$(man8dir)" \
|
||||
&& test -n "`echo $$list1$$list2`" \
|
||||
|| exit 0; \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
|
||||
{ for i in $$list1; do echo "$$i"; done; \
|
||||
if test -n "$$list2"; then \
|
||||
for i in $$list2; do echo "$$i"; done \
|
||||
| sed -n '/\.8[a-z]*$$/p'; \
|
||||
fi; \
|
||||
} | while read p; do \
|
||||
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; echo "$$p"; \
|
||||
done | \
|
||||
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
|
||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
|
||||
sed 'N;N;s,\n, ,g' | { \
|
||||
list=; while read file base inst; do \
|
||||
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
|
||||
fi; \
|
||||
done; \
|
||||
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
|
||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
|
||||
done; }
|
||||
|
||||
uninstall-man8:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man8_MANS)'; test -n "$(man8dir)" || exit 0; \
|
||||
files=`{ for i in $$list; do echo "$$i"; done; \
|
||||
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
|
||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
|
||||
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscopelist: cscopelist-am
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS) $(MANS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f ./$(DEPDIR)/ipxd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxkern.Po
|
||||
-rm -f ./$(DEPDIR)/ipxrip.Po
|
||||
-rm -f ./$(DEPDIR)/ipxripd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxsap.Po
|
||||
-rm -f ./$(DEPDIR)/ipxsapd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxutil.Po
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-man
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-sbinPROGRAMS
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man: install-man5 install-man8
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f ./$(DEPDIR)/ipxd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxkern.Po
|
||||
-rm -f ./$(DEPDIR)/ipxrip.Po
|
||||
-rm -f ./$(DEPDIR)/ipxripd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxsap.Po
|
||||
-rm -f ./$(DEPDIR)/ipxsapd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxutil.Po
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-man uninstall-sbinPROGRAMS
|
||||
|
||||
uninstall-man: uninstall-man5 uninstall-man8
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
|
||||
clean-generic clean-sbinPROGRAMS cscopelist-am ctags ctags-am \
|
||||
distclean distclean-compile distclean-generic distclean-tags \
|
||||
distdir dvi dvi-am html html-am info info-am install \
|
||||
install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-man5 install-man8 install-pdf install-pdf-am \
|
||||
install-ps install-ps-am install-sbinPROGRAMS install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
|
||||
uninstall-am uninstall-man uninstall-man5 uninstall-man8 \
|
||||
uninstall-sbinPROGRAMS
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
|
||||
# Tell GNU make to disable its built-in pattern rules.
|
||||
%:: %,v
|
||||
%:: RCS/%,v
|
||||
%:: RCS/%
|
||||
%:: s.%
|
||||
%:: SCCS/s.%
|
||||
28
ipxripd/Makefile.am
Normal file
28
ipxripd/Makefile.am
Normal file
@@ -0,0 +1,28 @@
|
||||
AM_CFLAGS = -Wall -Wextra
|
||||
|
||||
sbin_PROGRAMS = ipxd
|
||||
|
||||
ipxd_SOURCES = \
|
||||
ipxd.c \
|
||||
ipxd.h \
|
||||
ipxripd.c \
|
||||
ipxripd.h \
|
||||
ipxsapd.c \
|
||||
ipxsapd.h \
|
||||
ipxsap.c \
|
||||
ipxsap.h \
|
||||
ipxrip.c \
|
||||
ipxrip.h \
|
||||
ipxkern.c \
|
||||
ipxkern.h \
|
||||
ipxutil.c \
|
||||
ipxutil.h
|
||||
|
||||
man8_MANS = ipxd.8
|
||||
man5_MANS = ipx_ticks.5
|
||||
|
||||
EXTRA_DIST = \
|
||||
README \
|
||||
COPYING \
|
||||
ipxripd-0.7.lsm \
|
||||
ipx_ticks
|
||||
780
ipxripd/Makefile.in
Normal file
780
ipxripd/Makefile.in
Normal file
@@ -0,0 +1,780 @@
|
||||
# Makefile.in generated by automake 1.18.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2025 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
am__rm_f = rm -f $(am__rm_f_notfound)
|
||||
am__rm_rf = rm -rf $(am__rm_f_notfound)
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
sbin_PROGRAMS = ipxd$(EXEEXT)
|
||||
subdir = ipxripd
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
|
||||
$(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
|
||||
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
|
||||
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
|
||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
|
||||
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man5dir)" \
|
||||
"$(DESTDIR)$(man8dir)"
|
||||
PROGRAMS = $(sbin_PROGRAMS)
|
||||
am_ipxd_OBJECTS = ipxd.$(OBJEXT) ipxripd.$(OBJEXT) ipxsapd.$(OBJEXT) \
|
||||
ipxsap.$(OBJEXT) ipxrip.$(OBJEXT) ipxkern.$(OBJEXT) \
|
||||
ipxutil.$(OBJEXT)
|
||||
ipxd_OBJECTS = $(am_ipxd_OBJECTS)
|
||||
ipxd_LDADD = $(LDADD)
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__maybe_remake_depfiles = depfiles
|
||||
am__depfiles_remade = ./$(DEPDIR)/ipxd.Po ./$(DEPDIR)/ipxkern.Po \
|
||||
./$(DEPDIR)/ipxrip.Po ./$(DEPDIR)/ipxripd.Po \
|
||||
./$(DEPDIR)/ipxsap.Po ./$(DEPDIR)/ipxsapd.Po \
|
||||
./$(DEPDIR)/ipxutil.Po
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
AM_V_CC = $(am__v_CC_@AM_V@)
|
||||
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
|
||||
am__v_CC_0 = @echo " CC " $@;
|
||||
am__v_CC_1 =
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
|
||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(ipxd_SOURCES)
|
||||
DIST_SOURCES = $(ipxd_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
||||
am__install_max = 40
|
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }'
|
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__uninstall_files_from_dir = { \
|
||||
{ test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||
$(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
|
||||
}
|
||||
man5dir = $(mandir)/man5
|
||||
man8dir = $(mandir)/man8
|
||||
NROFF = nroff
|
||||
MANS = $(man5_MANS) $(man8_MANS)
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp COPYING \
|
||||
README
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CSCOPE = @CSCOPE@
|
||||
CTAGS = @CTAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GMSGFMT_015 = @GMSGFMT_015@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBINTL = @LIBINTL@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBICONV = @LTLIBICONV@
|
||||
LTLIBINTL = @LTLIBINTL@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
MSGFMT = @MSGFMT@
|
||||
MSGMERGE = @MSGMERGE@
|
||||
MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POSUB = @POSUB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
XGETTEXT = @XGETTEXT@
|
||||
XGETTEXT_015 = @XGETTEXT_015@
|
||||
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__rm_f_notfound = @am__rm_f_notfound@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
am__xargs_n = @am__xargs_n@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AM_CFLAGS = -Wall -Wextra
|
||||
ipxd_SOURCES = \
|
||||
ipxd.c \
|
||||
ipxd.h \
|
||||
ipxripd.c \
|
||||
ipxripd.h \
|
||||
ipxsapd.c \
|
||||
ipxsapd.h \
|
||||
ipxsap.c \
|
||||
ipxsap.h \
|
||||
ipxrip.c \
|
||||
ipxrip.h \
|
||||
ipxkern.c \
|
||||
ipxkern.h \
|
||||
ipxutil.c \
|
||||
ipxutil.h
|
||||
|
||||
man8_MANS = ipxd.8
|
||||
man5_MANS = ipx_ticks.5
|
||||
EXTRA_DIST = \
|
||||
README \
|
||||
COPYING \
|
||||
ipxripd-0.7.lsm \
|
||||
ipx_ticks
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ipxripd/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign ipxripd/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
install-sbinPROGRAMS: $(sbin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p \
|
||||
; then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' \
|
||||
-e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-sbinPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' \
|
||||
`; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(sbindir)" && $(am__rm_f) $$files
|
||||
|
||||
clean-sbinPROGRAMS:
|
||||
-$(am__rm_f) $(sbin_PROGRAMS)
|
||||
|
||||
ipxd$(EXEEXT): $(ipxd_OBJECTS) $(ipxd_DEPENDENCIES) $(EXTRA_ipxd_DEPENDENCIES)
|
||||
@rm -f ipxd$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(ipxd_OBJECTS) $(ipxd_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipxd.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipxkern.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipxrip.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipxripd.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipxsap.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipxsapd.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipxutil.Po@am__quote@ # am--include-marker
|
||||
|
||||
$(am__depfiles_remade):
|
||||
@$(MKDIR_P) $(@D)
|
||||
@: >>$@
|
||||
|
||||
am--depfiles: $(am__depfiles_remade)
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
install-man5: $(man5_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1='$(man5_MANS)'; \
|
||||
list2=''; \
|
||||
test -n "$(man5dir)" \
|
||||
&& test -n "`echo $$list1$$list2`" \
|
||||
|| exit 0; \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
|
||||
{ for i in $$list1; do echo "$$i"; done; \
|
||||
if test -n "$$list2"; then \
|
||||
for i in $$list2; do echo "$$i"; done \
|
||||
| sed -n '/\.5[a-z]*$$/p'; \
|
||||
fi; \
|
||||
} | while read p; do \
|
||||
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; echo "$$p"; \
|
||||
done | \
|
||||
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
|
||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
|
||||
sed 'N;N;s,\n, ,g' | { \
|
||||
list=; while read file base inst; do \
|
||||
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
|
||||
fi; \
|
||||
done; \
|
||||
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
|
||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
|
||||
done; }
|
||||
|
||||
uninstall-man5:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man5_MANS)'; test -n "$(man5dir)" || exit 0; \
|
||||
files=`{ for i in $$list; do echo "$$i"; done; \
|
||||
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
|
||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
|
||||
dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
|
||||
install-man8: $(man8_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1='$(man8_MANS)'; \
|
||||
list2=''; \
|
||||
test -n "$(man8dir)" \
|
||||
&& test -n "`echo $$list1$$list2`" \
|
||||
|| exit 0; \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
|
||||
{ for i in $$list1; do echo "$$i"; done; \
|
||||
if test -n "$$list2"; then \
|
||||
for i in $$list2; do echo "$$i"; done \
|
||||
| sed -n '/\.8[a-z]*$$/p'; \
|
||||
fi; \
|
||||
} | while read p; do \
|
||||
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; echo "$$p"; \
|
||||
done | \
|
||||
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
|
||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
|
||||
sed 'N;N;s,\n, ,g' | { \
|
||||
list=; while read file base inst; do \
|
||||
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
|
||||
fi; \
|
||||
done; \
|
||||
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
|
||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
|
||||
done; }
|
||||
|
||||
uninstall-man8:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man8_MANS)'; test -n "$(man8dir)" || exit 0; \
|
||||
files=`{ for i in $$list; do echo "$$i"; done; \
|
||||
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
|
||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
|
||||
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscopelist: cscopelist-am
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS) $(MANS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f ./$(DEPDIR)/ipxd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxkern.Po
|
||||
-rm -f ./$(DEPDIR)/ipxrip.Po
|
||||
-rm -f ./$(DEPDIR)/ipxripd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxsap.Po
|
||||
-rm -f ./$(DEPDIR)/ipxsapd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxutil.Po
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-man
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-sbinPROGRAMS
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man: install-man5 install-man8
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f ./$(DEPDIR)/ipxd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxkern.Po
|
||||
-rm -f ./$(DEPDIR)/ipxrip.Po
|
||||
-rm -f ./$(DEPDIR)/ipxripd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxsap.Po
|
||||
-rm -f ./$(DEPDIR)/ipxsapd.Po
|
||||
-rm -f ./$(DEPDIR)/ipxutil.Po
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-man uninstall-sbinPROGRAMS
|
||||
|
||||
uninstall-man: uninstall-man5 uninstall-man8
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
|
||||
clean-generic clean-sbinPROGRAMS cscopelist-am ctags ctags-am \
|
||||
distclean distclean-compile distclean-generic distclean-tags \
|
||||
distdir dvi dvi-am html html-am info info-am install \
|
||||
install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-man5 install-man8 install-pdf install-pdf-am \
|
||||
install-ps install-ps-am install-sbinPROGRAMS install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
|
||||
uninstall-am uninstall-man uninstall-man5 uninstall-man8 \
|
||||
uninstall-sbinPROGRAMS
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
|
||||
# Tell GNU make to disable its built-in pattern rules.
|
||||
%:: %,v
|
||||
%:: RCS/%,v
|
||||
%:: RCS/%
|
||||
%:: s.%
|
||||
%:: SCCS/s.%
|
||||
51
ipxripd/README
Normal file
51
ipxripd/README
Normal file
@@ -0,0 +1,51 @@
|
||||
This is my version of an IPX RIP/SAP daemon for Linux. For me, it
|
||||
works very well with kernel 1.2.13 as well as 1.3.x kernels.
|
||||
|
||||
I hope this will eventually provide a stable, standard RIP/SAP daemon
|
||||
for Linux. Currently (February '96) there is no such program that can
|
||||
be called a standard one. All programs that I know of either require
|
||||
kernel patches, do more than just RIP/SAP (such as mars_nwe), or
|
||||
simply do not implement RIP and SAP correctly. Please forgive me if I
|
||||
ignored the super ipx-rip/sap daemon I did not find.
|
||||
|
||||
I think this release provides some advantages over the other programs,
|
||||
as it does not require a kernel patch, and it works fine when you
|
||||
reconfigure your IPX interfaces while ipxd is running. With IPX over
|
||||
PPP this should make remote access to IPX networks via Linux very
|
||||
convenient.
|
||||
|
||||
Although ipxd does not require a kernel patch, it works fine with the
|
||||
full internal network, which can be activated since Linux 1.3.60.
|
||||
|
||||
INSTALLATION
|
||||
|
||||
Simply type 'make' and, as root, 'make install'. This puts the program
|
||||
ipxd into /usr/sbin/ and the manpages into /usr/man/man5 and
|
||||
/usr/man/man8.
|
||||
|
||||
To start ipxd automatically on system startup, you might want to put
|
||||
the following lines somewhere into /etc/rc.d/rc.local:
|
||||
|
||||
if [ -f /usr/sbin/ipxd ]; then
|
||||
echo "Starting IPX RIP/SAP daemon"
|
||||
/usr/sbin/ipxd
|
||||
fi
|
||||
|
||||
You might also want to copy the file ipx_ticks to /etc/ and change it
|
||||
to reflect your environment.
|
||||
|
||||
|
||||
NOTES
|
||||
|
||||
In the file ipx.diff there is a patch for 1.3 kernels that provides a
|
||||
full internal net with several nodes, but without cross-routing of
|
||||
packets to the so-called special sockets on the primary net. Sockets
|
||||
bound on the internal net can request any node number they
|
||||
like. Currently there's a lot of discussion about this topic on the
|
||||
linware mailing list.
|
||||
|
||||
Volker
|
||||
|
||||
<lendecke@namu01.gwdg.de>
|
||||
|
||||
|
||||
5
ipxripd/ipx_ticks
Normal file
5
ipxripd/ipx_ticks
Normal file
@@ -0,0 +1,5 @@
|
||||
# Tick values for IPX interfaces
|
||||
#
|
||||
# device name ticks value
|
||||
eth0 1
|
||||
ppp0 7
|
||||
37
ipxripd/ipx_ticks.5
Normal file
37
ipxripd/ipx_ticks.5
Normal file
@@ -0,0 +1,37 @@
|
||||
.TH IPX_TICKS 5 "IPX Utilities" "Volker Lendecke"
|
||||
.SH NAME
|
||||
ipx_ticks \- Configuration file for ipxd
|
||||
.SH SYNOPSIS
|
||||
.B /etc/ipx_ticks
|
||||
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.B ipx_ticks
|
||||
file contains the configuration information required by ipxd, the IPX
|
||||
RIP/SAP daemon.
|
||||
|
||||
The RIP/SAP daemon can find out nearly all information it needs to run
|
||||
properly by scanning the file /proc/net/ipx_interfaces, and by asking
|
||||
other routers and servers on the net. The only information it can not
|
||||
get this way is the time it takes to send a packet over the different
|
||||
interfaces. This information is required by the IPX RIP protocol. It
|
||||
is specified in so-called ticks, which is about 55 ms per tick.
|
||||
|
||||
The format of this file is very simple. On each line of the file the
|
||||
tick value for a physical interface is specified. The first field is
|
||||
the name of the interface, and the ticks value follows after a
|
||||
white-space. Empty lines as well as lines starting with '#' are
|
||||
ignored. A possible example is the following:
|
||||
|
||||
# Tick values for IPX interfaces
|
||||
#
|
||||
# device name ticks value
|
||||
eth0 1
|
||||
ppp0 7
|
||||
|
||||
|
||||
The default ticks value for devices not specified in /etc/ipx_ticks is
|
||||
1.
|
||||
|
||||
.SH AUTHOR
|
||||
Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
BIN
ipxripd/ipxd
Executable file
BIN
ipxripd/ipxd
Executable file
Binary file not shown.
89
ipxripd/ipxd.8
Normal file
89
ipxripd/ipxd.8
Normal file
@@ -0,0 +1,89 @@
|
||||
.TH IPXD 8 "IPX Utilities" "Volker Lendecke"
|
||||
.SH NAME
|
||||
ipxd \- IPX RIP/SAP daemon program
|
||||
.SH SYNOPSIS
|
||||
.B ipxd
|
||||
[
|
||||
.B -d
|
||||
] [
|
||||
.B -p
|
||||
] [
|
||||
.B -l
|
||||
.I log_file
|
||||
] [
|
||||
.B -t
|
||||
.I ticks_file
|
||||
]
|
||||
|
||||
.SH DESCRIPTION
|
||||
The IPX RIP/SAP daemon
|
||||
.B ipxd
|
||||
is invoked at boot time to manage the kernel IPX routing tables.
|
||||
|
||||
When ipxd is started, it scans the file /proc/net/ipx_interfaces to
|
||||
find the ipx networks the computer is directly connected to. It sends
|
||||
the RIP and SAP response and request packets required by the IPX
|
||||
router specification v1.20 to the interfaces it found, so that an
|
||||
initial RIP and SAP table can be built.
|
||||
|
||||
During normal operation, ipxd listens on the RIP and SAP ports of each
|
||||
directly connected interface for broadcasts that other routers on the
|
||||
network send out, as well as requests issued by workstations. This way
|
||||
the full router functionality required by the IPX router specification
|
||||
v1.20 is hopefully implemented.
|
||||
|
||||
Every 30 seconds, as well as on request by a HUP signal, the file
|
||||
/proc/net/ipx_interfaces is re-scanned. Changes in the network
|
||||
topology are detected this way and broadcasted appropriately. This
|
||||
could eventually make Linux a quite flexible IPX router.
|
||||
|
||||
.SH OPTIONS
|
||||
.B -d
|
||||
.RS 3
|
||||
With option
|
||||
.B -d,
|
||||
ipxd does not daemonize itself and logs the IPX traffic it receives
|
||||
and sends out to the log file.
|
||||
.RE
|
||||
|
||||
.B -p
|
||||
.RS 3
|
||||
With option
|
||||
.B -p,
|
||||
ipxd works in passive mode. This means it does not output any response
|
||||
on the net. It does not broadcast its internal tables, and does not
|
||||
answer requests. This makes it suitable for use in a normal IPX
|
||||
workstation, which should not act as a router. By starting ipxd in
|
||||
passive mode, the kernel routing tables are kept up to date. This
|
||||
means that utilities like slist or nprint do not have to run suid
|
||||
root, to be able to add IPX routing table entries.
|
||||
|
||||
It is not possible to use ipxd in passive mode when you have an
|
||||
internal net, because other IPX nodes must know how to reach the
|
||||
internal net. They can only know it if ipxd tells them where the
|
||||
internal net is.
|
||||
.RE
|
||||
|
||||
|
||||
.B -l
|
||||
.I logfile
|
||||
.RS 3
|
||||
With this option you can tell ipxd where to put its log output. The
|
||||
default is /dev/null.
|
||||
.RE
|
||||
|
||||
.B -t
|
||||
.I ticks_file
|
||||
.RS 3
|
||||
With this option you can override the default file name for the ticks
|
||||
file. The default is /etc/ipx_ticks. See ipx_ticks(5) for more
|
||||
information.
|
||||
|
||||
.SH FILES
|
||||
/etc/ipx_ticks
|
||||
|
||||
.SH SEE ALSO
|
||||
ipx_ticks(5), ipx_interface(8)
|
||||
|
||||
.SH AUTHOR
|
||||
Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
735
ipxripd/ipxd.c
Normal file
735
ipxripd/ipxd.c
Normal file
@@ -0,0 +1,735 @@
|
||||
/*
|
||||
IPX routing daemon
|
||||
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include "ipxd.h"
|
||||
#include "ipxripd.h"
|
||||
#include "ipxsapd.h"
|
||||
|
||||
#define DEVICE_LENGTH (31)
|
||||
#define MAX_DEVICE MAX_IFACE
|
||||
struct ticks_entry {
|
||||
char device_name[DEVICE_LENGTH+1];
|
||||
int ticks;
|
||||
};
|
||||
|
||||
static struct ipx_interface ifaces[MAX_IFACE];
|
||||
int time_since_last_bcast=0;
|
||||
static struct rip_packet rip_in_buf;
|
||||
static struct sap_packet sap_in_buf;
|
||||
|
||||
static struct ticks_entry ticks_table[MAX_DEVICE];
|
||||
int ticks_entries=0;
|
||||
static char default_ticks_file[] = TICKS_FILE;
|
||||
static char *ticks_file = default_ticks_file;
|
||||
|
||||
int passive = 0;
|
||||
|
||||
volatile int check_request=0;
|
||||
static volatile int dump_request=0;
|
||||
static volatile int timer_request=0;
|
||||
static volatile int terminate=0;
|
||||
static volatile int scan_ticks_request=0;
|
||||
|
||||
int new_log_entry=1;
|
||||
int debug_option=0;
|
||||
FILE *log_file = NULL;
|
||||
|
||||
static IPXNet
|
||||
ifc_net(struct ipx_interface *ifc)
|
||||
{
|
||||
return ntohl(ifc->r_output.dest_addr.sipx_network);
|
||||
}
|
||||
|
||||
static void
|
||||
int_handler(int signo)
|
||||
{
|
||||
(void)signo;
|
||||
signal(SIGINT,int_handler);
|
||||
dump_request=1;
|
||||
}
|
||||
|
||||
static void
|
||||
timer_handler(int signo)
|
||||
{
|
||||
(void)signo;
|
||||
signal(SIGALRM,timer_handler);
|
||||
timer_request=1;
|
||||
check_request=1;
|
||||
}
|
||||
|
||||
static void
|
||||
terminate_handler(int signo)
|
||||
{
|
||||
(void)signo;
|
||||
signal(SIGTERM,terminate_handler);
|
||||
terminate=1;
|
||||
}
|
||||
|
||||
static void
|
||||
hup_handler(int signo)
|
||||
{
|
||||
(void)signo;
|
||||
signal(SIGHUP,hup_handler);
|
||||
scan_ticks_request=1;
|
||||
check_request=1;
|
||||
}
|
||||
|
||||
struct ipx_interface *
|
||||
first_interface(void)
|
||||
{
|
||||
int i = first_ifc_index();
|
||||
|
||||
if (i < 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return &(ifaces[i]);
|
||||
}
|
||||
|
||||
struct ipx_interface *
|
||||
next_interface(struct ipx_interface *ifc)
|
||||
{
|
||||
int i = next_ifc_index(ifc_get_index(ifc));
|
||||
|
||||
if (i < 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return &(ifaces[i]);
|
||||
}
|
||||
|
||||
int
|
||||
ifc_get_index(struct ipx_interface *ifc)
|
||||
{
|
||||
if (ifc == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return ifc - ifaces;
|
||||
}
|
||||
|
||||
int
|
||||
first_ifc_index(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_IFACE; i += 1)
|
||||
{
|
||||
if (ifaces[i].valid != 0)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
next_ifc_index(int i)
|
||||
{
|
||||
if ((i < 0) || (i >= MAX_IFACE-1))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
i = i+1;
|
||||
|
||||
while (i < MAX_IFACE)
|
||||
{
|
||||
if (ifaces[i].valid != 0)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
i = i+1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int
|
||||
first_free_ifc_index(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_IFACE; i += 1)
|
||||
{
|
||||
if (ifaces[i].valid == 0)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void
|
||||
read_ticks_table(void)
|
||||
{
|
||||
char buf[512];
|
||||
char device[512];
|
||||
int ticks;
|
||||
FILE *f = fopen(ticks_file, "r");
|
||||
|
||||
ticks_entries = 0;
|
||||
if (f == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), f) != NULL)
|
||||
{
|
||||
if ( (strlen(buf) == 0)
|
||||
|| (buf[0] == '#'))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (sscanf(buf, "%s %d", device, &ticks) != 2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (strlen(device) > DEVICE_LENGTH)
|
||||
{
|
||||
fclose(f);
|
||||
return;
|
||||
}
|
||||
strcpy(ticks_table[ticks_entries].device_name, device);
|
||||
ticks_table[ticks_entries].ticks = ticks;
|
||||
ticks_entries += 1;
|
||||
|
||||
if (ticks_entries >= MAX_DEVICE)
|
||||
{
|
||||
fclose(f);
|
||||
return;
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
return;
|
||||
}
|
||||
|
||||
int
|
||||
find_ticks(char *device)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ticks_entries; i += 1)
|
||||
{
|
||||
if (strcmp(device, ticks_table[i].device_name) == 0)
|
||||
{
|
||||
return ticks_table[i].ticks;
|
||||
}
|
||||
}
|
||||
return DEFAULT_TICKS;
|
||||
}
|
||||
|
||||
static void
|
||||
dump_ticks(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file, "Ticks table:\n");
|
||||
for (i = 0; i < ticks_entries; i += 1)
|
||||
{
|
||||
fprintf(log_file, "Device: %s, Ticks: %d\n",
|
||||
ticks_table[i].device_name,
|
||||
ticks_table[i].ticks);
|
||||
}
|
||||
LOG_END;
|
||||
}
|
||||
|
||||
static int
|
||||
ipx_init_interface(struct ipx_interface *ifc,
|
||||
IPXNet network, IPXNode node,
|
||||
char *device, int type, void *data)
|
||||
{
|
||||
int result;
|
||||
|
||||
ipx_assign_node(ifc->ifnode, node);
|
||||
|
||||
ifc->ticks = find_ticks(device);
|
||||
|
||||
if ((result = ipx_rip_init_ifc(ifc, network, device, type, data)) != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if ((result = ipx_sap_init_ifc(ifc, network, device, type, data)) != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
ifc->valid = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ipx_create_ifc(IPXNet network, IPXNode node,
|
||||
char *device, int type, void *data)
|
||||
{
|
||||
struct ipx_interface *ifc = &(ifaces[first_free_ifc_index()]);
|
||||
int result;
|
||||
|
||||
if (ifc == NULL)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"too many interfaces (max. %i)\n",
|
||||
(int)MAX_IFACE);
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (network == 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"interface bound to net 0\n");
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( (passive != 0)
|
||||
&& ((type & IPX_KRT_INTERNAL) != 0))
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "passive mode only whithout internal net\n");
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((result = ipx_init_interface(ifc, network, node, device, type,
|
||||
data)) != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
init(void)
|
||||
{
|
||||
if (log_file == NULL)
|
||||
log_file = stderr;
|
||||
|
||||
struct itimerval itval;
|
||||
int i;
|
||||
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file,"Init start\n");
|
||||
LOG_END;
|
||||
|
||||
read_ticks_table();
|
||||
|
||||
for (i = 0; i < MAX_IFACE; i++)
|
||||
{
|
||||
ifaces[i].valid = 0;
|
||||
}
|
||||
|
||||
if (ipx_kern_scan_ifaces(ipx_create_ifc, NULL) != 0)
|
||||
{
|
||||
exit(1);
|
||||
}
|
||||
|
||||
itval.it_interval.tv_sec = TIMER_RATE;
|
||||
itval.it_value.tv_sec = TIMER_RATE;
|
||||
itval.it_interval.tv_usec = 0;
|
||||
itval.it_value.tv_usec = 0;
|
||||
if (setitimer(ITIMER_REAL, &itval, (struct itimerval *)NULL) < 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "FATAL ERROR: can't set itimer: %s\n",
|
||||
strerror(errno));
|
||||
LOG_END;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
signal(SIGINT,int_handler);
|
||||
signal(SIGALRM,timer_handler);
|
||||
signal(SIGTERM,terminate_handler);
|
||||
signal(SIGHUP,hup_handler);
|
||||
|
||||
ipx_rip_initial_broadcasts();
|
||||
ipx_sap_initial_broadcasts();
|
||||
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file,"Init end\n");
|
||||
LOG_END;
|
||||
}
|
||||
|
||||
static int
|
||||
ipx_visit_ifc(IPXNet network, IPXNode node,
|
||||
char *device, int type, void *data)
|
||||
{
|
||||
struct ipx_interface *ifc;
|
||||
int result;
|
||||
|
||||
if (network == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (ifc = first_interface();
|
||||
ifc != NULL;
|
||||
ifc = next_interface(ifc))
|
||||
{
|
||||
if (ifc_net(ifc) == network)
|
||||
{
|
||||
ifc->visited = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* We have a new interface */
|
||||
|
||||
ifc = &(ifaces[first_free_ifc_index()]);
|
||||
|
||||
if (ifc == NULL)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"too many interfaces (max. %i)\n",
|
||||
(int)MAX_IFACE);
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((result = ipx_init_interface(ifc, network, node, device, type,
|
||||
data)) != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
ipx_rip_initial_broadcast(ifc);
|
||||
ipx_sap_initial_broadcast(ifc);
|
||||
|
||||
ifc->visited = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
ipx_check_interfaces(void)
|
||||
{
|
||||
struct ipx_interface *ifc;
|
||||
|
||||
for (ifc = first_interface();
|
||||
ifc != NULL;
|
||||
ifc = next_interface(ifc))
|
||||
{
|
||||
ifc->visited = 0;
|
||||
}
|
||||
|
||||
ipx_kern_scan_ifaces(ipx_visit_ifc, NULL);
|
||||
|
||||
for (ifc = first_interface();
|
||||
ifc != NULL;
|
||||
ifc = next_interface(ifc))
|
||||
{
|
||||
if (ifc->visited == 0)
|
||||
{
|
||||
/* Interface is down now */
|
||||
ipx_sap_down_ifc(ifc);
|
||||
ipx_rip_down_ifc(ifc);
|
||||
ifc->valid = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
run(void)
|
||||
{
|
||||
struct sockaddr_ipx sipx;
|
||||
socklen_t addr_len=sizeof(sipx);
|
||||
int size;
|
||||
fd_set rset;
|
||||
int result;
|
||||
int max_sk;
|
||||
struct ipx_interface *ifc = NULL;
|
||||
int got_rip, got_sap;
|
||||
|
||||
while(1)
|
||||
{
|
||||
FD_ZERO(&rset);
|
||||
max_sk = 0;
|
||||
got_rip = got_sap = 0;
|
||||
|
||||
for (ifc = first_interface();
|
||||
ifc != NULL;
|
||||
ifc = next_interface(ifc))
|
||||
{
|
||||
if (ifc->r_output.sk > max_sk)
|
||||
{
|
||||
max_sk = ifc->r_output.sk;
|
||||
}
|
||||
FD_SET(ifc->r_output.sk, &rset);
|
||||
|
||||
if (ifc->s_output.sk > max_sk)
|
||||
{
|
||||
max_sk = ifc->s_output.sk;
|
||||
}
|
||||
FD_SET(ifc->s_output.sk, &rset);
|
||||
}
|
||||
|
||||
LOG_ENTRY;
|
||||
|
||||
result = select(max_sk+1, &rset, NULL, NULL, NULL);
|
||||
|
||||
if ( (result < 0)
|
||||
&& (errno != EINTR))
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "select error: %s\n",
|
||||
strerror(errno));
|
||||
LOG_END;
|
||||
continue;
|
||||
}
|
||||
|
||||
size = -1;
|
||||
|
||||
if (result == 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "select timeout expired\n");
|
||||
LOG_END;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (result > 0)
|
||||
{
|
||||
for (ifc = first_interface();
|
||||
ifc != NULL;
|
||||
ifc = next_interface(ifc))
|
||||
{
|
||||
if (FD_ISSET(ifc->r_output.sk, &rset))
|
||||
{
|
||||
size=recvfrom(ifc->r_output.sk,
|
||||
&rip_in_buf,
|
||||
sizeof(rip_in_buf), 0,
|
||||
(struct sockaddr*)&sipx,
|
||||
&addr_len);
|
||||
if (size > 0)
|
||||
{
|
||||
got_rip = 1;
|
||||
}
|
||||
/* only one packet at a time */
|
||||
break;
|
||||
}
|
||||
if (FD_ISSET(ifc->s_output.sk, &rset))
|
||||
{
|
||||
size=recvfrom(ifc->s_output.sk,
|
||||
&sap_in_buf,
|
||||
sizeof(sap_in_buf), 0,
|
||||
(struct sockaddr*)&sipx,
|
||||
&addr_len);
|
||||
if (size > 0)
|
||||
{
|
||||
got_sap = 1;
|
||||
}
|
||||
/* only one packet at a time */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (size < 0)
|
||||
{
|
||||
/* One reason can be an interface that died. */
|
||||
check_request = 1;
|
||||
}
|
||||
if (got_rip != 0)
|
||||
{
|
||||
DL_START;
|
||||
fprintf(log_file,"RIP from: ");
|
||||
ipx_fprint_saddr(log_file,&sipx);
|
||||
fprintf(log_file,"\n");
|
||||
ipx_rip_fdump(log_file, &rip_in_buf, size);
|
||||
DL_END;
|
||||
handle_rip(&rip_in_buf, size, &sipx,ifc);
|
||||
}
|
||||
if (got_sap != 0)
|
||||
{
|
||||
DL_START;
|
||||
fprintf(log_file,"SAP from: ");
|
||||
ipx_fprint_saddr(log_file,&sipx);
|
||||
fprintf(log_file,"\n");
|
||||
ipx_sap_fdump(log_file, &sap_in_buf, size);
|
||||
DL_END;
|
||||
handle_sap(&sap_in_buf, size, &sipx,ifc);
|
||||
}
|
||||
if (dump_request)
|
||||
{
|
||||
fdump_routes(log_file);
|
||||
fdump_servers(log_file);
|
||||
dump_ticks();
|
||||
dump_request=0;
|
||||
}
|
||||
if (timer_request)
|
||||
{
|
||||
static int rip_broadcast = 0;
|
||||
int do_broadcast = 0;
|
||||
|
||||
time_since_last_bcast += TIMER_RATE;
|
||||
if (time_since_last_bcast >= BROADCAST_TIME/2)
|
||||
{
|
||||
do_broadcast = 1;
|
||||
rip_broadcast = (rip_broadcast==0) ? 1 : 0;
|
||||
time_since_last_bcast -= BROADCAST_TIME/2;
|
||||
}
|
||||
|
||||
LOG_ENTRY;
|
||||
ipx_rip_do_aging(TIMER_RATE,
|
||||
(do_broadcast != 0)
|
||||
&& (rip_broadcast != 0));
|
||||
LOG_ENTRY;
|
||||
ipx_sap_do_aging(TIMER_RATE,
|
||||
(do_broadcast!=0)
|
||||
&& (rip_broadcast == 0));
|
||||
|
||||
timer_request=0;
|
||||
}
|
||||
if (check_request)
|
||||
{
|
||||
ipx_check_interfaces();
|
||||
check_request = 0;
|
||||
}
|
||||
if (scan_ticks_request)
|
||||
{
|
||||
read_ticks_table();
|
||||
scan_ticks_request = 0;
|
||||
}
|
||||
if (terminate)
|
||||
{
|
||||
LOG_START;
|
||||
if (terminate==1)
|
||||
fprintf(log_file,
|
||||
"exiting on signal 15 (SIGTERM)\n");
|
||||
else
|
||||
fprintf(log_file,
|
||||
"exiting on signal 1 (SIGHUP)\n");
|
||||
LOG_END;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
help()
|
||||
{
|
||||
fprintf(stderr,
|
||||
"IPX routing daemon v0.91, (c) Ales Dryak, 1995\n"
|
||||
"Usage: ipxd [options]\n");
|
||||
}
|
||||
|
||||
static int
|
||||
parse_cmdline(int argc,char** argv)
|
||||
{
|
||||
char* log_name = DEFAULT_LOGNAME;
|
||||
int opt;
|
||||
|
||||
while ((opt = getopt(argc, argv, "dt:l:p")) != EOF)
|
||||
{
|
||||
switch (opt)
|
||||
{
|
||||
case 'd':
|
||||
debug_option=1;
|
||||
break;
|
||||
case 't':
|
||||
ticks_file = optarg;
|
||||
break;
|
||||
case 'l':
|
||||
log_name = optarg;
|
||||
break;
|
||||
case 'p':
|
||||
passive = 1;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr,
|
||||
"Unknown command line option %s\n",*argv);
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
if (optind != argc)
|
||||
{
|
||||
fprintf(stderr,"Too many parameters");
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
if (debug_option)
|
||||
{
|
||||
log_file=stdout;
|
||||
return 0;
|
||||
}
|
||||
if ((log_file=fopen(log_name,"a"))==NULL)
|
||||
{
|
||||
perror(log_name);
|
||||
exit(1);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
daemonize()
|
||||
{
|
||||
int fd,c;
|
||||
|
||||
if ((c = fork()) > 0) exit(0);
|
||||
if (c < 0)
|
||||
{
|
||||
fprintf(stderr, "ipxripd: can't fork: %s\n",strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
close(0);
|
||||
close(1);
|
||||
close(2);
|
||||
if ((fd = open("/dev/tty", O_RDWR)) >= 0)
|
||||
{
|
||||
ioctl(fd, TIOCNOTTY, NULL);
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc,char** argv)
|
||||
{
|
||||
if (parse_cmdline(argc,argv))
|
||||
{
|
||||
daemonize();
|
||||
}
|
||||
init();
|
||||
run();
|
||||
ipx_rip_done();
|
||||
ipx_sap_done();
|
||||
return 0;
|
||||
}
|
||||
|
||||
84
ipxripd/ipxd.h
Normal file
84
ipxripd/ipxd.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
IPX routing daemon
|
||||
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _IPXD_H_
|
||||
#define _IPXD_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/time.h>
|
||||
#include "ipxutil.h"
|
||||
#include "ipxkern.h"
|
||||
#include "ipxsap.h"
|
||||
#include "ipxrip.h"
|
||||
#include <time.h>
|
||||
|
||||
#define TICKS_FILE ("/etc/ipx_ticks")
|
||||
#define DEFAULT_TICKS (1)
|
||||
|
||||
#define TIMER_RATE (30)
|
||||
#define EXPIRE_TIME (180)
|
||||
#define BROADCAST_TIME (60)
|
||||
|
||||
#define MAX_IFACE (32)
|
||||
|
||||
struct ipx_interface
|
||||
{
|
||||
IPXNode ifnode;
|
||||
int ticks; /* How many ticks does it cost to send
|
||||
over this interface? */
|
||||
int valid;
|
||||
int visited;
|
||||
|
||||
struct sap_output s_output;
|
||||
struct rip_output r_output;
|
||||
};
|
||||
|
||||
extern int new_log_entry;
|
||||
extern int debug_option;
|
||||
extern FILE *log_file;
|
||||
extern int passive;
|
||||
|
||||
extern volatile int check_request;
|
||||
|
||||
struct ipx_interface *first_interface(void);
|
||||
struct ipx_interface *next_interface(struct ipx_interface *ifc);
|
||||
int ifc_get_index(struct ipx_interface *ifc);
|
||||
int first_ifc_index(void);
|
||||
int next_ifc_index(int i);
|
||||
int find_ticks(char *device);
|
||||
|
||||
static inline void
|
||||
print_time()
|
||||
{
|
||||
time_t t;
|
||||
time(&t);
|
||||
fprintf(log_file,"\n%s",ctime(&t));
|
||||
}
|
||||
|
||||
#define LOG_ENTRY {new_log_entry=1;}
|
||||
#define LOG_START {if (new_log_entry) {print_time(); new_log_entry=0;}
|
||||
#define LOG_END fflush(log_file);}
|
||||
#define DL_ENTRY {if (debug_option) LOG_ENTRY}
|
||||
#define DL_START {if (debug_option) LOG_START
|
||||
#define DL_END LOG_END }
|
||||
#define DEFAULT_LOGNAME "/dev/null"
|
||||
|
||||
#endif /* _IPXD_H_ */
|
||||
232
ipxripd/ipxkern.c
Normal file
232
ipxripd/ipxkern.c
Normal file
@@ -0,0 +1,232 @@
|
||||
/*
|
||||
IPX support library - kernel dependent functions
|
||||
|
||||
Copyright (C) 1994, 1995 Ales Dryak <e-mail: A.Dryak@sh.cvut.cz>
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <string.h>
|
||||
#include <linux/route.h>
|
||||
#include <netinet/in.h>
|
||||
#include "ipxkern.h"
|
||||
|
||||
#define MAX_IFC (256)
|
||||
|
||||
static int
|
||||
asc2frame(char *frame)
|
||||
{
|
||||
if (strcasecmp("etherii", frame) == 0)
|
||||
return IPX_FRAME_ETHERII;
|
||||
else if (strcasecmp("802.2", frame) == 0)
|
||||
return IPX_FRAME_8022;
|
||||
else if (strcasecmp("802.3", frame) == 0)
|
||||
return IPX_FRAME_8023;
|
||||
else if (strcasecmp("snap", frame) == 0)
|
||||
return IPX_FRAME_SNAP;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_kern_scan_rtable(IPXrtScanFunc f, void *data)
|
||||
{
|
||||
FILE *ipx_route;
|
||||
char buf[512];
|
||||
|
||||
ipx_route = fopen("/proc/net/ipx_route", "r");
|
||||
|
||||
if (ipx_route == NULL)
|
||||
{
|
||||
sprintf(ipx_err_string, "open ipx_route: %s",
|
||||
strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* ignore header line */
|
||||
if (fgets(buf, sizeof(buf), ipx_route) == NULL) {
|
||||
fclose(ipx_route);
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), ipx_route) != NULL)
|
||||
{
|
||||
IPXNet network;
|
||||
IPXNet router_net;
|
||||
IPXNode router_node;
|
||||
int type = 0;
|
||||
|
||||
if (strncmp(&(buf[11]), "Directly", 8) == 0)
|
||||
{
|
||||
if (ipx_sscanf_net(buf, &network) != 0)
|
||||
{
|
||||
fclose(ipx_route);
|
||||
return -1;
|
||||
}
|
||||
router_net = 0;
|
||||
memset(router_node, 0, sizeof(router_node));
|
||||
}
|
||||
else
|
||||
{
|
||||
type |= IPX_KRT_ROUTE;
|
||||
|
||||
if ( (ipx_sscanf_net(buf, &network) != 0)
|
||||
|| (ipx_sscanf_net(&(buf[11]), &router_net) != 0)
|
||||
|| (ipx_sscanf_node(&(buf[24]), router_node) != 0))
|
||||
{
|
||||
fclose(ipx_route);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (f(network, router_net, router_node, type, data) != 0)
|
||||
{
|
||||
fclose(ipx_route);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
fclose(ipx_route);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_kern_scan_ifaces(IPXifcScanFunc f, void *data)
|
||||
{
|
||||
FILE *ipx_ifc;
|
||||
char buf[512];
|
||||
|
||||
ipx_ifc = fopen("/proc/net/ipx_interface", "r");
|
||||
|
||||
if (ipx_ifc == NULL)
|
||||
{
|
||||
sprintf(ipx_err_string, "open ipx_interface: %s",
|
||||
strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* ignore header line */
|
||||
if (fgets(buf, sizeof(buf), ipx_ifc) == NULL) {
|
||||
fclose(ipx_ifc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), ipx_ifc) != NULL)
|
||||
{
|
||||
IPXNet network;
|
||||
IPXNode node;
|
||||
int type = 0;
|
||||
char device[128];
|
||||
int i;
|
||||
int result;
|
||||
|
||||
type = asc2frame(&(buf[46]));
|
||||
|
||||
if (strncmp(&(buf[35]), "Internal", 8) == 0)
|
||||
{
|
||||
type |= IPX_KRT_INTERNAL;
|
||||
}
|
||||
|
||||
if ( (ipx_sscanf_net(buf, &network) != 0)
|
||||
|| (ipx_sscanf_node(&(buf[11]), node) != 0))
|
||||
{
|
||||
fclose(ipx_ifc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(device, 0, sizeof(device));
|
||||
|
||||
for (i = 0; (size_t)i < sizeof(device) - 1; i++)
|
||||
{
|
||||
if (buf[i+35] == ' ')
|
||||
{
|
||||
break;
|
||||
}
|
||||
device[i] = buf[i+35];
|
||||
}
|
||||
|
||||
if ((result = f(network, node, device, type, data)) != 0)
|
||||
{
|
||||
fclose(ipx_ifc);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
fclose(ipx_ifc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_kern_route_add(int sock, IPXNet net, IPXNet rt_net, IPXNode rt_node)
|
||||
{
|
||||
struct rtentry rt;
|
||||
struct sockaddr_ipx* sr;
|
||||
struct sockaddr_ipx* st;
|
||||
|
||||
sr=(struct sockaddr_ipx*)&rt.rt_gateway;
|
||||
st=(struct sockaddr_ipx*)&rt.rt_dst;
|
||||
|
||||
sr->sipx_family=st->sipx_family=AF_IPX;
|
||||
st->sipx_network=htonl(net);
|
||||
sr->sipx_network=htonl(rt_net);
|
||||
ipx_assign_node(sr->sipx_node,rt_node);
|
||||
rt.rt_flags=RTF_GATEWAY;
|
||||
|
||||
if(ioctl(sock,SIOCADDRT,(void *)&rt)!=0)
|
||||
{
|
||||
sprintf(ipx_err_string,"ioctl SIOCADDRT: %s",strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_kern_route_delete(int sock, IPXNet net)
|
||||
{
|
||||
struct rtentry rt;
|
||||
struct sockaddr_ipx* sr;
|
||||
struct sockaddr_ipx* st;
|
||||
|
||||
sr=(struct sockaddr_ipx*)&rt.rt_gateway;
|
||||
st=(struct sockaddr_ipx*)&rt.rt_dst;
|
||||
|
||||
sr->sipx_family=st->sipx_family=AF_IPX;
|
||||
st->sipx_network=htonl(net);
|
||||
rt.rt_flags=RTF_GATEWAY;
|
||||
|
||||
if(ioctl(sock,SIOCDELRT,(void *)&rt)!=0)
|
||||
{
|
||||
sprintf(ipx_err_string,"ioctl SIOCDELRT: %s",strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_kern_enable_broadcast(int sock)
|
||||
{
|
||||
int opt=1;
|
||||
/* Permit broadcast output */
|
||||
if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST, &opt,sizeof(opt))==-1)
|
||||
{
|
||||
sprintf(ipx_err_string,"setsockopt SO_BROADCAST: %s",
|
||||
strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
41
ipxripd/ipxkern.h
Normal file
41
ipxripd/ipxkern.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
|
||||
IPX support library
|
||||
|
||||
Copyright (C) 1994, 1995 Ales Dryak <e-mail: A.Dryak@sh.cvut.cz>
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#ifndef __IPXKERN_H__
|
||||
|
||||
#define __IPXKERN_H__
|
||||
|
||||
#include "ipxutil.h"
|
||||
|
||||
#define IPX_KRT_INTERNAL (1)
|
||||
#define IPX_KRT_ROUTE (2)
|
||||
|
||||
typedef int (*IPXifcScanFunc)(IPXNet,IPXNode,char *,int,void*);
|
||||
typedef int (*IPXrtScanFunc)(IPXNet,IPXNet,IPXNode,int,void*);
|
||||
|
||||
int ipx_kern_enable_broadcast(int sock);
|
||||
int ipx_kern_route_add(int sock,IPXNet net,IPXNet rt_net,IPXNode rt_node);
|
||||
int ipx_kern_route_delete(int sock,IPXNet net);
|
||||
int ipx_kern_scan_ifaces(IPXifcScanFunc f,void* data);
|
||||
int ipx_kern_scan_rtable(IPXrtScanFunc f,void* data);
|
||||
|
||||
#endif /* __IPXKERN_H__ */
|
||||
204
ipxripd/ipxrip.c
Normal file
204
ipxripd/ipxrip.c
Normal file
@@ -0,0 +1,204 @@
|
||||
/*
|
||||
IPX support library - RIP
|
||||
|
||||
Copyright (C) 1994, 1995 Ales Dryak <e-mail: A.Dryak@sh.cvut.cz>
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include "ipxrip.h"
|
||||
#include "ipxd.h"
|
||||
|
||||
int
|
||||
ipx_rip_size(int n)
|
||||
{
|
||||
if ((unsigned int)n > IPX_RIP_MAX_ENTRIES)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 2 + n * sizeof(struct rip_entry);
|
||||
}
|
||||
|
||||
static int
|
||||
ipx_rip_sendto(int sock, struct rip_packet *buffer, int size,
|
||||
struct sockaddr_ipx *daddr)
|
||||
{
|
||||
if (ipx_rip_output_func!=NULL)
|
||||
{
|
||||
return ipx_rip_output_func(sock, buffer, size, daddr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_rip_output_init(struct rip_output *out, IPXNet net)
|
||||
{
|
||||
out->entries=0;
|
||||
out->send_error = 0;
|
||||
out->buffer.operation=htons(IPX_RIP_OP_REQUEST);
|
||||
out->dest_addr.sipx_family=AF_IPX;
|
||||
out->dest_addr.sipx_type=IPX_RIP_PTYPE;
|
||||
out->dest_addr.sipx_network=htonl(net);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_output_flush(struct rip_output *out)
|
||||
{
|
||||
if (out->entries==0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (out->send_error != 0)
|
||||
{
|
||||
out->entries = 0;
|
||||
return;
|
||||
}
|
||||
if (ipx_rip_sendto(out->sk, &(out->buffer), ipx_rip_size(out->entries),
|
||||
&(out->dest_addr)) < 0)
|
||||
{
|
||||
out->send_error = 1;
|
||||
check_request = 1;
|
||||
}
|
||||
out->entries=0;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_output_request(struct rip_output *out, IPXNet net)
|
||||
{
|
||||
struct rip_entry *re;
|
||||
|
||||
if ((unsigned int)out->entries >= IPX_RIP_MAX_ENTRIES)
|
||||
{
|
||||
ipx_rip_output_flush(out);
|
||||
}
|
||||
|
||||
if (out->buffer.operation!=htons(IPX_RIP_OP_REQUEST))
|
||||
{
|
||||
ipx_rip_output_flush(out);
|
||||
out->buffer.operation=htons(IPX_RIP_OP_REQUEST);
|
||||
}
|
||||
|
||||
re = &(out->buffer.rip_entries[out->entries]);
|
||||
re->network = htonl(net);
|
||||
re->hops = 0;
|
||||
re->ticks = 0;
|
||||
out->entries += 1;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_output_response(struct rip_output *out, IPXNet net, hop_t hops,
|
||||
tick_t ticks, int down_allow)
|
||||
{
|
||||
struct rip_entry* re;
|
||||
|
||||
if (hops>=IPX_RIP_NET_DOWN && !down_allow)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((unsigned int)out->entries >= IPX_RIP_MAX_ENTRIES)
|
||||
{
|
||||
ipx_rip_output_flush(out);
|
||||
}
|
||||
|
||||
if (out->buffer.operation!=htons(IPX_RIP_OP_RESPONSE))
|
||||
{
|
||||
ipx_rip_output_flush(out);
|
||||
out->buffer.operation=htons(IPX_RIP_OP_RESPONSE);
|
||||
}
|
||||
|
||||
if (passive != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
re = &(out->buffer.rip_entries[out->entries]);
|
||||
re->network = htonl(net);
|
||||
re->hops = htons(hops);
|
||||
re->ticks = htons(ticks);
|
||||
out->entries += 1;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_output_set_destination(struct rip_output *out, IPXNode node,
|
||||
IPXPort port)
|
||||
{
|
||||
ipx_rip_output_flush(out);
|
||||
ipx_assign_node(out->dest_addr.sipx_node,node);
|
||||
out->dest_addr.sipx_port=htons(port);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_dump(struct rip_packet *pkt, int len)
|
||||
{
|
||||
ipx_rip_fdump(stdout, pkt, len);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_fdump(FILE *file, struct rip_packet *pkt, int len)
|
||||
{
|
||||
struct rip_entry *re=pkt->rip_entries;
|
||||
int ent = (len-2) / sizeof(struct rip_entry);
|
||||
|
||||
if (len<2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(file,"Operation: %i size: %i ", ntohs(pkt->operation),len);
|
||||
|
||||
switch (ntohs(pkt->operation))
|
||||
{
|
||||
case IPX_RIP_OP_REQUEST:
|
||||
fprintf(file,"(Request)\n");
|
||||
if (len != ipx_rip_size(ent))
|
||||
{
|
||||
fprintf(file,"Warning: Bad RIP size (not 8*n+2)\n");
|
||||
}
|
||||
for(; ent > 0; ent -= 1)
|
||||
{
|
||||
fprintf(file,"RIP: Network: ");
|
||||
ipx_fprint_network(file,ntohl(re->network));
|
||||
fprintf(file,"\n");
|
||||
re += 1;
|
||||
}
|
||||
break;
|
||||
case IPX_RIP_OP_RESPONSE:
|
||||
fprintf(file,"(Response)\n");
|
||||
if (len != ipx_rip_size(ent))
|
||||
{
|
||||
fprintf(file,"Warning: Bad RIP size (not 8*n+2)\n");
|
||||
}
|
||||
for(; ent > 0; ent -= 1)
|
||||
{
|
||||
fprintf(file,"RIP: Network: ");
|
||||
ipx_fprint_network(file,ntohl(re->network));
|
||||
fprintf(file," HopCount: %u Ticks: %u\n",
|
||||
ntohs(re->hops),ntohs(re->ticks));
|
||||
re += 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
fprintf(file,"(Unknown)\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int (*ipx_rip_output_func)(int, void*, int, struct sockaddr_ipx*)=NULL;
|
||||
|
||||
15
ipxripd/ipxripd-0.7.lsm
Normal file
15
ipxripd/ipxripd-0.7.lsm
Normal file
@@ -0,0 +1,15 @@
|
||||
Begin3
|
||||
Title: ipxripd
|
||||
Version: 0.7
|
||||
Entered-date: 09. March 1996
|
||||
Description: ipxripd is a RIP/SAP daemon program for Linux.
|
||||
It makes your Linux computer act as an IPX router.
|
||||
Keywords: ipx rip sap novell netware
|
||||
Author: A.Dryak@sh.cvut.cz (Ales Dyrak)
|
||||
lendecke@namu01.gwdg.de (Volker Lendecke)
|
||||
Maintained-by: lendecke@namu01.gwdg.de (Volker Lendecke)
|
||||
Primary-site: linux01.gwdg.de:/pub/ncpfs
|
||||
~28k ipxripd-0.7.tgz
|
||||
~ 1k ipxripd-0.7.lsm
|
||||
Copying-policy: GPL
|
||||
End
|
||||
843
ipxripd/ipxripd.c
Normal file
843
ipxripd/ipxripd.c
Normal file
@@ -0,0 +1,843 @@
|
||||
/*
|
||||
IPX routing daemon
|
||||
|
||||
Copyright (C) 1994, 1995 Ales Dryak <e-mail: A.Dryak@sh.cvut.cz>
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
/* done: filter my broadcasts for proper aging */
|
||||
/* done: age each iface separately */
|
||||
/* done: DONTROUTE ioctl */
|
||||
/* done: shutdown */
|
||||
/* done: logovani ... */
|
||||
/* done: full daemonize */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netipx/ipx.h>
|
||||
#include "ipxutil.h"
|
||||
#include "ipxkern.h"
|
||||
#include "ipxrip.h"
|
||||
#include "ipxd.h"
|
||||
|
||||
typedef unsigned char ifc_timer;
|
||||
|
||||
struct rip_table
|
||||
{
|
||||
IPXNet network;
|
||||
hop_t hops;
|
||||
tick_t ticks;
|
||||
IPXNode router_node;
|
||||
struct ipx_interface *router_interface;
|
||||
|
||||
ifc_timer timers[MAX_IFACE]; /* 0<timer<EXPIRE_TIME =>
|
||||
net is reachable via iface */
|
||||
/* timer>=EXPIPE_TIME => net is not r. */
|
||||
struct rip_table* next;
|
||||
};
|
||||
|
||||
struct rip_table *rtable = NULL;
|
||||
|
||||
static IPXNet
|
||||
ifc_net(struct ipx_interface *ifc)
|
||||
{
|
||||
return ntohl(ifc->r_output.dest_addr.sipx_network);
|
||||
}
|
||||
|
||||
static IPXNet
|
||||
rt_net(struct rip_table *rt)
|
||||
{
|
||||
return ifc_net(rt->router_interface);
|
||||
}
|
||||
|
||||
/* get some ipx socket */
|
||||
static int
|
||||
ipx_socket(void)
|
||||
{
|
||||
struct ipx_interface *ifc = first_interface();
|
||||
|
||||
if (first_interface() == NULL)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "No ipx socket available\n");
|
||||
LOG_END;
|
||||
exit(1);
|
||||
}
|
||||
return ifc->r_output.sk;
|
||||
}
|
||||
|
||||
static int
|
||||
is_expired(ifc_timer* tm)
|
||||
{
|
||||
return *tm>=EXPIRE_TIME;
|
||||
}
|
||||
|
||||
/* Do I forward packets targeted to rt->network coming over interface
|
||||
* ifc?
|
||||
*/
|
||||
static int
|
||||
is_rt_target(struct rip_table *rt, struct ipx_interface *ifc)
|
||||
{
|
||||
return is_expired(rt->timers + ifc_get_index(ifc));
|
||||
}
|
||||
|
||||
/* set up the timers in rt so that only ifc is reachable.
|
||||
*/
|
||||
static void
|
||||
setup_timers(struct rip_table* rt, struct ipx_interface* ifc)
|
||||
{
|
||||
ifc_timer* tm;
|
||||
|
||||
for(tm=rt->timers; tm < rt->timers+MAX_IFACE; tm += 1)
|
||||
{
|
||||
*tm=EXPIRE_TIME;
|
||||
}
|
||||
rt->timers[ifc_get_index(ifc)]=0;
|
||||
}
|
||||
|
||||
static void
|
||||
output_flushall()
|
||||
{
|
||||
struct ipx_interface *ifc = first_interface();
|
||||
|
||||
while (ifc != NULL)
|
||||
{
|
||||
ipx_rip_output_flush(&(ifc->r_output));
|
||||
ifc = next_interface(ifc);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
output_set_destination(struct ipx_interface *ifc,
|
||||
IPXNode dest_node, IPXPort dest_port)
|
||||
{
|
||||
if (ifc == NULL)
|
||||
{
|
||||
ifc = first_interface();
|
||||
|
||||
while (ifc != NULL)
|
||||
{
|
||||
ipx_rip_output_set_destination(&(ifc->r_output),
|
||||
dest_node, dest_port);
|
||||
ifc = next_interface(ifc);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ipx_rip_output_set_destination(&(ifc->r_output), dest_node,
|
||||
dest_port);
|
||||
}
|
||||
}
|
||||
|
||||
/* Broadcast the existence of the route rt to all interfaces through
|
||||
* which rt's target is not directly reachable.
|
||||
*/
|
||||
static void
|
||||
output_broadcast(struct rip_table *rt, int down_allow)
|
||||
{
|
||||
struct ipx_interface *ifc = first_interface();
|
||||
|
||||
while (ifc != NULL)
|
||||
{
|
||||
if (is_expired(&(rt->timers[ifc_get_index(ifc)])))
|
||||
{
|
||||
ipx_rip_output_response(&(ifc->r_output),rt->network,
|
||||
rt->hops,rt->ticks,down_allow);
|
||||
}
|
||||
ifc = next_interface(ifc);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
output_sendto(int sock, void *buffer, int size, struct sockaddr_ipx *daddr)
|
||||
{
|
||||
int res;
|
||||
|
||||
DL_ENTRY;
|
||||
DL_START;
|
||||
fprintf(log_file,"Sending RIP to ");
|
||||
ipx_fprint_saddr(log_file,daddr);
|
||||
fprintf(log_file,"\n");
|
||||
ipx_rip_fdump(log_file,buffer,size);
|
||||
DL_END;
|
||||
|
||||
res=sendto(sock,(void*)buffer,size,0,
|
||||
(struct sockaddr*)daddr,sizeof(*daddr));
|
||||
if (res==-1)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"sendto: %s\n",strerror(errno));
|
||||
LOG_END;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static void
|
||||
fprint_route(FILE *file, struct rip_table *rt)
|
||||
{
|
||||
int i;
|
||||
|
||||
LOG_START;
|
||||
fprintf(file,"dst:");
|
||||
ipx_fprint_network(file,rt->network);
|
||||
fprintf(file," h:%d t:%d rtr:",rt->hops,rt->ticks);
|
||||
ipx_fprint_network(file,rt_net(rt));
|
||||
fprintf(file,":");
|
||||
ipx_fprint_node(file,rt->router_node);
|
||||
fprintf(file," ");
|
||||
|
||||
for (i = first_ifc_index(); i >= 0; i = next_ifc_index(i))
|
||||
{
|
||||
ifc_timer* tm = &(rt->timers[i]);;
|
||||
fprintf(file,"%i",is_expired(tm)?0:1);
|
||||
DL_START;
|
||||
fprintf(file,"(%i)",(int)*tm);
|
||||
DL_END;
|
||||
}
|
||||
LOG_END;
|
||||
}
|
||||
|
||||
void
|
||||
fdump_routes(FILE *file)
|
||||
{
|
||||
struct rip_table *rt;
|
||||
|
||||
LOG_START;
|
||||
fprintf(file,"IPX routing database:\n");
|
||||
for(rt=rtable; rt!=NULL; rt=rt->next)
|
||||
{
|
||||
fprint_route(file,rt);
|
||||
fprintf(file,"\n");
|
||||
}
|
||||
LOG_END;
|
||||
}
|
||||
|
||||
|
||||
static struct rip_table*
|
||||
add_route(IPXNet to, hop_t h, tick_t t, struct ipx_interface *ifc,
|
||||
IPXNode rt_node)
|
||||
{
|
||||
struct rip_table *rt;
|
||||
|
||||
rt=(struct rip_table*)malloc(sizeof(struct rip_table));
|
||||
|
||||
if (rt == NULL)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"ipxripd: out of memory in add_route\n");
|
||||
LOG_END;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rt->network=to;
|
||||
rt->hops=h;
|
||||
rt->ticks=t;
|
||||
rt->router_interface=ifc;
|
||||
ipx_assign_node(rt->router_node,rt_node);
|
||||
setup_timers(rt,ifc);
|
||||
rt->next=rtable;
|
||||
rtable=rt;
|
||||
return rt;
|
||||
}
|
||||
|
||||
static void
|
||||
delete_route(struct rip_table* d)
|
||||
{
|
||||
struct rip_table **r;
|
||||
for(r=&rtable; *r!=NULL; r=&((*r)->next))
|
||||
{
|
||||
if (*r==d)
|
||||
{
|
||||
*r=d->next;
|
||||
free(d);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
delete_invalid_routes(void)
|
||||
{
|
||||
struct rip_table **r = &rtable;
|
||||
|
||||
while (*r != NULL)
|
||||
{
|
||||
if ((*r)->hops >= IPX_RIP_NET_DOWN)
|
||||
{
|
||||
struct rip_table *d = *r;
|
||||
*r = (*r)->next;
|
||||
free(d);
|
||||
}
|
||||
else
|
||||
{
|
||||
r = &((*r)->next);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ipx_rip_rt_add(struct rip_table *rt)
|
||||
{
|
||||
if(ipx_kern_route_add(ipx_socket(), rt->network, rt_net(rt),
|
||||
rt->router_node) < 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"Cannot add route to network ");
|
||||
ipx_fprint_network(log_file,rt->network);
|
||||
fprintf(log_file,"\n%s\n",ipx_err_string);
|
||||
LOG_END;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ipx_rip_rt_del(IPXNet net)
|
||||
{
|
||||
if (ipx_kern_route_delete(ipx_socket(), net)<0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"Cannot delete route to network ");
|
||||
ipx_fprint_network(log_file,net);
|
||||
fprintf(log_file,"\n%s\n",ipx_err_string);
|
||||
LOG_END;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_rip_request(struct rip_entry *re, struct ipx_interface *src_ifc)
|
||||
{
|
||||
struct rip_table *cur;
|
||||
|
||||
if (re->network==htonl(IPX_RIP_GENERAL_RQ))
|
||||
{
|
||||
for(cur=rtable; cur!=NULL; cur=cur->next)
|
||||
{
|
||||
if (is_rt_target(cur, src_ifc))
|
||||
{
|
||||
ipx_rip_output_response(&(src_ifc->r_output),
|
||||
cur->network,
|
||||
cur->hops,
|
||||
cur->ticks,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(cur=rtable; cur!=NULL; cur=cur->next)
|
||||
{
|
||||
if ( (htonl(re->network)==cur->network)
|
||||
&& ( (is_rt_target(cur, src_ifc))
|
||||
|| (ifc_net(src_ifc)==htonl(re->network))))
|
||||
{
|
||||
ipx_rip_output_response(&(src_ifc->r_output),
|
||||
cur->network,
|
||||
cur->hops,
|
||||
cur->ticks,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_rip_response(struct rip_entry *re, struct ipx_interface *src_ifc,
|
||||
IPXNode src_node)
|
||||
{
|
||||
struct rip_table *cur;
|
||||
|
||||
re->hops=ntohs(re->hops)+1;
|
||||
re->ticks=ntohs(re->ticks)+src_ifc->ticks;
|
||||
|
||||
for(cur=rtable; cur!=NULL; cur=cur->next)
|
||||
{
|
||||
if (cur->network != htonl(re->network))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (cur->network==rt_net(cur))
|
||||
{
|
||||
/* don't change routes to ifaces */
|
||||
return;
|
||||
}
|
||||
if (re->hops <= IPX_RIP_NET_DOWN)
|
||||
{
|
||||
if (!( (re->ticks < cur->ticks)
|
||||
|| ( (re->ticks == cur->ticks)
|
||||
&& (re->hops <= cur->hops))))
|
||||
{
|
||||
/* route re-> is worse */
|
||||
return;
|
||||
}
|
||||
|
||||
/* route is at least good as
|
||||
* existing one */
|
||||
|
||||
if ( (re->ticks==cur->ticks)
|
||||
&& (re->hops==cur->hops))
|
||||
{
|
||||
/* new route has the same cost - reset timer*/
|
||||
if (!( (ifc_net(src_ifc)==rt_net(cur))
|
||||
&& (!ipx_node_equal(cur->router_node,
|
||||
src_node))))
|
||||
{
|
||||
cur->timers[ifc_get_index(src_ifc)]=0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* new route is better */
|
||||
LOG_START;
|
||||
fprintf(log_file,"CHANGE ");
|
||||
fprint_route(log_file,cur);
|
||||
LOG_END;
|
||||
|
||||
/* update table */
|
||||
cur->ticks=re->ticks;
|
||||
cur->hops=re->hops;
|
||||
cur->router_interface = src_ifc;
|
||||
ipx_assign_node(cur->router_node,
|
||||
src_node);
|
||||
setup_timers(cur,src_ifc);
|
||||
|
||||
LOG_START;
|
||||
fprintf(log_file,"\nto ");
|
||||
fprint_route(log_file,cur);
|
||||
fprintf(log_file,"\n");
|
||||
LOG_END;
|
||||
|
||||
/* update kernel table */
|
||||
ipx_rip_rt_add(cur);
|
||||
/* send info bcast */
|
||||
output_broadcast(cur,0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* network down response */
|
||||
if (ifc_net(src_ifc)==rt_net(cur))
|
||||
{
|
||||
if (ipx_node_equal(cur->router_node, src_node))
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"DELETE ");
|
||||
fprint_route(log_file,cur);
|
||||
fprintf(log_file, " (net down)\n");
|
||||
LOG_END;
|
||||
/* update kernel table */
|
||||
ipx_rip_rt_del(cur->network);
|
||||
/* send info bcast */
|
||||
cur->hops=IPX_RIP_NET_DOWN;
|
||||
output_broadcast(cur,1);
|
||||
/* update table */
|
||||
delete_route(cur);
|
||||
}
|
||||
else
|
||||
{ /* my router alive */
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cur->timers[ifc_get_index(src_ifc)]
|
||||
=EXPIRE_TIME;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (re->hops<=IPX_RIP_NET_DOWN)
|
||||
{
|
||||
struct rip_table *rt=add_route(htonl(re->network),
|
||||
re->hops,re->ticks,
|
||||
src_ifc,src_node);
|
||||
if (rt!=NULL)
|
||||
{
|
||||
/* update kernel table */
|
||||
ipx_rip_rt_add(rt);
|
||||
/* send info bcast */
|
||||
output_broadcast(rt,0);
|
||||
LOG_START;
|
||||
fprintf(log_file,"ADD ");
|
||||
fprint_route(log_file,rt);
|
||||
fprintf(log_file,"\n");
|
||||
LOG_END;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
handle_rip(struct rip_packet *pkt, int len, struct sockaddr_ipx* sipx,
|
||||
struct ipx_interface *src_ifc)
|
||||
{
|
||||
struct rip_entry *re=pkt->rip_entries;
|
||||
int nent=(len-2)/8;
|
||||
|
||||
if (ifc_net(src_ifc) != ntohl(sipx->sipx_network))
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"RIP from non-local net on ifc ");
|
||||
ipx_fprint_network(log_file, ifc_net(src_ifc));
|
||||
fprintf(log_file, "\n");
|
||||
ipx_fprint_network(log_file,ntohl(sipx->sipx_network));
|
||||
fprintf(log_file," (ignored)\n");
|
||||
LOG_END;
|
||||
return;
|
||||
}
|
||||
if (len<ipx_rip_size(1))
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"RIP packet too small len=%i (ignored)\n",len);
|
||||
LOG_END;
|
||||
return;
|
||||
}
|
||||
if (ipx_rip_size(nent)!=len)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,"RIP packet bad size (ignored)\n");
|
||||
LOG_END;
|
||||
return;
|
||||
}
|
||||
if ( (ipx_node_equal(src_ifc->ifnode,sipx->sipx_node))
|
||||
&& ((unsigned short)sipx->sipx_port==htons(IPX_RIP_PORT)))
|
||||
{
|
||||
DL_START;
|
||||
fprintf(log_file,"My packet (ignored)\n");
|
||||
DL_END;
|
||||
return;
|
||||
}
|
||||
switch (ntohs(pkt->operation))
|
||||
{
|
||||
case IPX_RIP_OP_REQUEST:
|
||||
output_set_destination(src_ifc, sipx->sipx_node,
|
||||
ntohs(sipx->sipx_port));
|
||||
for(;nent--;re++)
|
||||
{
|
||||
handle_rip_request(re, src_ifc);
|
||||
}
|
||||
ipx_rip_output_flush(&(src_ifc->r_output));
|
||||
output_set_destination(src_ifc, IPX_BROADCAST, IPX_RIP_PORT);
|
||||
break;
|
||||
case IPX_RIP_OP_RESPONSE:
|
||||
/* option: ignore responses from non RIP ports
|
||||
* if (sipx->sipx_port!=htons(IPX_RIP_PORT)) return;
|
||||
*/
|
||||
output_set_destination(NULL, IPX_BROADCAST, IPX_RIP_PORT);
|
||||
for(;nent--;re++)
|
||||
{
|
||||
handle_rip_response(re, src_ifc, sipx->sipx_node);
|
||||
}
|
||||
output_flushall();
|
||||
break;
|
||||
default:
|
||||
LOG_START;
|
||||
fprintf(log_file,"Unknown RIP operation\n");
|
||||
LOG_END;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_do_aging(int rate, int do_broadcast)
|
||||
{
|
||||
struct rip_table *cur;
|
||||
int routes_died = 0;
|
||||
|
||||
DL_START;
|
||||
fprintf(log_file,"DO RIP AGING\n");
|
||||
DL_END;
|
||||
|
||||
output_set_destination(NULL, IPX_BROADCAST, IPX_RIP_PORT);
|
||||
|
||||
for(cur=rtable; cur!=NULL; cur=cur->next)
|
||||
{
|
||||
int i;
|
||||
ifc_timer* tm;
|
||||
for (i = first_ifc_index(); i >= 0; i = next_ifc_index(i))
|
||||
{
|
||||
tm = &(cur->timers[i]);
|
||||
if (!is_expired(tm))
|
||||
{
|
||||
(*tm)+=rate;
|
||||
}
|
||||
}
|
||||
tm=cur->timers+ifc_get_index(cur->router_interface);
|
||||
|
||||
/* cannot timeout iface !*/
|
||||
if (cur->network==rt_net(cur))
|
||||
{
|
||||
*tm=0;
|
||||
}
|
||||
|
||||
if (is_expired(tm))
|
||||
{
|
||||
/* net is down */
|
||||
LOG_START;
|
||||
fprintf(log_file,"DELETE ");
|
||||
fprint_route(log_file,cur);
|
||||
fprintf(log_file," (timed out)\n");
|
||||
LOG_END;
|
||||
/* update kernel table */
|
||||
ipx_rip_rt_del(cur->network);
|
||||
/* send info bcast */
|
||||
cur->hops=IPX_RIP_NET_DOWN;
|
||||
output_broadcast(cur,1);
|
||||
/* table to be updated, delayed */
|
||||
routes_died = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (do_broadcast)
|
||||
{
|
||||
output_broadcast(cur,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
output_flushall();
|
||||
|
||||
/* Delete all bogus routes */
|
||||
if (routes_died != 0)
|
||||
{
|
||||
delete_invalid_routes();
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
ipx_rip_init_ifc(struct ipx_interface *ifc, IPXNet network,
|
||||
char *device, int type, void *data)
|
||||
{
|
||||
(void)type;
|
||||
(void)data;
|
||||
|
||||
struct sockaddr_ipx sipx;
|
||||
|
||||
if (ipx_rip_output_init(&(ifc->r_output), network) != 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"out of memory allocating output buffer\n");
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
if (add_route(network,1,find_ticks(device),ifc,ifc->ifnode) == NULL)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"cannot add route to iface (out of memory)\n");
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((ifc->r_output.sk = socket(AF_IPX, SOCK_DGRAM, PF_IPX)) < 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"can't open socket: %s\n", strerror(errno));
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&sipx, 0, sizeof(sipx));
|
||||
sipx.sipx_family = AF_IPX;
|
||||
sipx.sipx_network = htonl(network);
|
||||
ipx_assign_node(sipx.sipx_node, IPX_THIS_NODE);
|
||||
sipx.sipx_port = htons(IPX_RIP_PORT);
|
||||
sipx.sipx_type = IPX_RIP_PTYPE;
|
||||
|
||||
if (bind(ifc->r_output.sk, (struct sockaddr *)&sipx, sizeof(sipx)) < 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "can't bind socket: %s\n",
|
||||
strerror(errno));
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ipx_kern_enable_broadcast(ifc->r_output.sk) != 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "cant' enable broadcast\n");
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
LOG_START;
|
||||
ipx_fprint_network(log_file, network);
|
||||
fprintf(log_file,":");
|
||||
ipx_fprint_node(log_file, ifc->ifnode);
|
||||
fprintf(log_file,"\n");
|
||||
LOG_END;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
ipx_rip_deinit_ifc(struct ipx_interface *ifc)
|
||||
{
|
||||
close(ifc->r_output.sk);
|
||||
}
|
||||
|
||||
static int
|
||||
ipx_rip_del_old_rt(IPXNet net, IPXNet rt_net, IPXNode node,
|
||||
int type, void *data)
|
||||
{
|
||||
(void)rt_net;
|
||||
(void)node;
|
||||
(void)data;
|
||||
|
||||
if ((type & IPX_KRT_ROUTE) != 0)
|
||||
{
|
||||
/* remove old routes */
|
||||
ipx_rip_rt_del(net);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_del_old_routes(void)
|
||||
{
|
||||
ipx_kern_scan_rtable(ipx_rip_del_old_rt, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_initial_broadcasts(void)
|
||||
{
|
||||
struct rip_table* rt;
|
||||
struct ipx_interface* ifc;
|
||||
|
||||
ipx_rip_output_func=output_sendto;
|
||||
|
||||
output_set_destination(NULL, IPX_BROADCAST, IPX_RIP_PORT);
|
||||
for(rt=rtable;rt!=NULL;rt=rt->next)
|
||||
{
|
||||
output_broadcast(rt,0);
|
||||
}
|
||||
output_flushall();
|
||||
|
||||
ifc = first_interface();
|
||||
while (ifc != NULL)
|
||||
{
|
||||
ipx_rip_output_request(&(ifc->r_output),
|
||||
IPX_RIP_GENERAL_RQ);
|
||||
ifc = next_interface(ifc);
|
||||
}
|
||||
output_flushall();
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_initial_broadcast(struct ipx_interface *ifc)
|
||||
{
|
||||
struct rip_table *cur;
|
||||
|
||||
output_set_destination(ifc, IPX_BROADCAST, IPX_RIP_PORT);
|
||||
|
||||
for(cur=rtable; cur!=NULL; cur=cur->next)
|
||||
{
|
||||
if (is_rt_target(cur, ifc))
|
||||
{
|
||||
ipx_rip_output_response(&(ifc->r_output),
|
||||
cur->network,
|
||||
cur->hops,
|
||||
cur->ticks,0);
|
||||
}
|
||||
if (cur->router_interface == ifc)
|
||||
{
|
||||
output_broadcast(cur, 0);
|
||||
}
|
||||
}
|
||||
ipx_rip_output_request(&(ifc->r_output), IPX_RIP_GENERAL_RQ);
|
||||
output_flushall();
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_down_ifc(struct ipx_interface *ifc)
|
||||
{
|
||||
struct rip_table *rt;
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file, "RIP DOWN INTERFACE ");
|
||||
ipx_fprint_network(log_file, ifc_net(ifc));
|
||||
fprintf(log_file, "\n");
|
||||
LOG_END;
|
||||
|
||||
for (rt = rtable; rt != NULL; rt = rt->next)
|
||||
{
|
||||
if (rt->router_interface != ifc)
|
||||
{
|
||||
/* rt is not via ifc */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* cur is via ifc, so down it */
|
||||
LOG_START;
|
||||
fprintf(log_file,"DELETE ");
|
||||
fprint_route(log_file,rt);
|
||||
fprintf(log_file, " (ifc down)\n");
|
||||
LOG_END;
|
||||
/* Update of kernel table unneccessary */
|
||||
|
||||
/* send info bcast */
|
||||
rt->hops=IPX_RIP_NET_DOWN;
|
||||
output_broadcast(rt,1);
|
||||
}
|
||||
output_flushall();
|
||||
delete_invalid_routes();
|
||||
ipx_rip_deinit_ifc(ifc);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_rip_done(void)
|
||||
{
|
||||
struct rip_table* cur;
|
||||
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file,"RIP Shutdown start\n");
|
||||
LOG_END;
|
||||
|
||||
output_set_destination(NULL, IPX_BROADCAST, IPX_RIP_PORT);
|
||||
for(cur=rtable; cur!=NULL; cur=cur->next)
|
||||
{
|
||||
/* update kernel table (don't delete ifaces)*/
|
||||
if (cur->network != rt_net(cur))
|
||||
{
|
||||
ipx_rip_rt_del(cur->network);
|
||||
LOG_START
|
||||
fprintf(log_file,"DELETE ");
|
||||
fprint_route(log_file,cur);
|
||||
fprintf(log_file," (shutdown)\n");
|
||||
LOG_END
|
||||
}
|
||||
/* send info bcast */
|
||||
cur->hops=IPX_RIP_NET_DOWN;
|
||||
output_broadcast(cur,1);
|
||||
/* update table */
|
||||
delete_route(cur);
|
||||
}
|
||||
output_flushall();
|
||||
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file,"RIP Shutdown end\n");
|
||||
LOG_END;
|
||||
}
|
||||
|
||||
51
ipxripd/ipxripd.h
Normal file
51
ipxripd/ipxripd.h
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
IPX routing daemon
|
||||
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _IPXRIPD_H_
|
||||
#define _IPXRIPD_H_
|
||||
|
||||
void
|
||||
fdump_routes(FILE *file);
|
||||
|
||||
void
|
||||
handle_rip(struct rip_packet *pkt, int len, struct sockaddr_ipx* sipx,
|
||||
struct ipx_interface *src_ifc);
|
||||
|
||||
void
|
||||
ipx_rip_do_aging(int rate, int do_broadcast);
|
||||
|
||||
int
|
||||
ipx_rip_init_ifc(struct ipx_interface *ifc, IPXNet network,
|
||||
char *device, int type, void *data);
|
||||
|
||||
void
|
||||
ipx_rip_done(void);
|
||||
|
||||
void
|
||||
ipx_rip_initial_broadcasts(void);
|
||||
|
||||
void
|
||||
ipx_rip_initial_broadcast(struct ipx_interface *ifc);
|
||||
|
||||
void
|
||||
ipx_rip_down_ifc(struct ipx_interface *ifc);
|
||||
|
||||
#endif /* _IPXRIPD_H_ */
|
||||
314
ipxripd/ipxsap.c
Normal file
314
ipxripd/ipxsap.c
Normal file
@@ -0,0 +1,314 @@
|
||||
/*
|
||||
IPX support library - SAP
|
||||
|
||||
Copyright (C) 1994, 1995 Ales Dryak <e-mail: A.Dryak@sh.cvut.cz>
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include "ipxsap.h"
|
||||
#include "ipxd.h"
|
||||
|
||||
int
|
||||
ipx_sap_size(int n, unsigned short int operation)
|
||||
{
|
||||
if (n <= 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (operation)
|
||||
{
|
||||
case IPX_SAP_OP_REQUEST:
|
||||
return n == 1 ? IPX_SAP_REQUEST_LEN : 0;
|
||||
|
||||
case IPX_SAP_OP_RESPONSE:
|
||||
if ((unsigned int)n > IPX_SAP_MAX_ENTRIES)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return (2 + n * sizeof(struct sap_entry));
|
||||
|
||||
case IPX_SAP_OP_GNS_REQUEST:
|
||||
return n == 1 ? IPX_SAP_REQUEST_LEN : 0;
|
||||
|
||||
case IPX_SAP_OP_GNS_RESPONSE:
|
||||
return n == 1 ? 2 + sizeof(struct sap_entry) : 0;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_assign_ser_name(ser_name_t dest, ser_name_t src)
|
||||
{
|
||||
memset(dest, 0, IPX_SAP_SERVER_NAME_LEN);
|
||||
strncpy(dest, src, IPX_SAP_SERVER_NAME_LEN);
|
||||
}
|
||||
|
||||
int
|
||||
ipx_sap_name_equal(ser_name_t n1, ser_name_t n2)
|
||||
{
|
||||
return strncmp(n1, n2, IPX_SAP_SERVER_NAME_LEN) == 0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_sap_type_equal(ser_type_t t1, ser_type_t t2)
|
||||
{
|
||||
return t1==IPX_SAP_GENERAL_RQ || t2==IPX_SAP_GENERAL_RQ || t1 == t2;
|
||||
}
|
||||
|
||||
static int
|
||||
ipx_sap_sendto(int sock, void *buffer, int size, struct sockaddr_ipx *daddr)
|
||||
{
|
||||
|
||||
if (ipx_sap_output_func != NULL)
|
||||
{
|
||||
return ipx_sap_output_func(sock, buffer, size, daddr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_sap_output_init(struct sap_output *out, IPXNet net)
|
||||
{
|
||||
out->entries = 0;
|
||||
out->send_error = 0;
|
||||
out->buffer.operation = htons(IPX_SAP_OP_REQUEST);
|
||||
out->dest_addr.sipx_family = AF_IPX;
|
||||
out->dest_addr.sipx_type = IPX_SAP_PTYPE;
|
||||
out->dest_addr.sipx_network = htonl(net);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_output_flush(struct sap_output * out)
|
||||
{
|
||||
if (out->entries == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (out->send_error != 0)
|
||||
{
|
||||
out->entries = 0;
|
||||
return;
|
||||
}
|
||||
if (ipx_sap_sendto(out->sk, &(out->buffer),
|
||||
ipx_sap_size(out->entries,
|
||||
ntohs(out->buffer.operation)),
|
||||
&(out->dest_addr)) < 0)
|
||||
{
|
||||
out->send_error = 1;
|
||||
check_request = 1;
|
||||
}
|
||||
out->entries = 0;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_output_request(struct sap_output * out, ser_type_t ser_type)
|
||||
{
|
||||
struct sap_entry *se;
|
||||
ipx_sap_output_flush(out);
|
||||
out->buffer.operation = htons(IPX_SAP_OP_REQUEST);
|
||||
se = &(out->buffer.sap_entries[out->entries]);
|
||||
se->ser_type = htons(ser_type);
|
||||
out->entries++;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_output_gns_request(struct sap_output * out, ser_type_t ser_type)
|
||||
{
|
||||
struct sap_entry *se;
|
||||
ipx_sap_output_flush(out);
|
||||
out->buffer.operation = htons(IPX_SAP_OP_GNS_REQUEST);
|
||||
se = &(out->buffer.sap_entries[out->entries]);
|
||||
se->ser_type = htons(ser_type);
|
||||
out->entries++;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_output_response(struct sap_output * out, ser_type_t type,
|
||||
ser_name_t name, struct sockaddr_ipx *addr,
|
||||
hop_t hops, int down_allow)
|
||||
{
|
||||
struct sap_entry *se;
|
||||
|
||||
if (hops >= IPX_SAP_SERVER_DOWN && !down_allow)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ((unsigned int)out->entries >= IPX_SAP_MAX_ENTRIES)
|
||||
{
|
||||
ipx_sap_output_flush(out);
|
||||
}
|
||||
if (out->buffer.operation != htons(IPX_SAP_OP_RESPONSE))
|
||||
{
|
||||
ipx_sap_output_flush(out);
|
||||
out->buffer.operation = htons(IPX_SAP_OP_RESPONSE);
|
||||
}
|
||||
|
||||
if (passive != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
se = &(out->buffer.sap_entries[out->entries]);
|
||||
se->ser_type = htons(type);
|
||||
ipx_sap_assign_ser_name(se->ser_name, name);
|
||||
se->network = addr->sipx_network;
|
||||
ipx_assign_node(se->node, addr->sipx_node);
|
||||
se->port = addr->sipx_port;
|
||||
se->hops = htons(hops);
|
||||
out->entries++;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_output_gns_response(struct sap_output * out,
|
||||
ser_type_t type, ser_name_t name,
|
||||
struct sockaddr_ipx *addr, hop_t hops)
|
||||
{
|
||||
struct sap_entry *se;
|
||||
|
||||
if (hops >= IPX_SAP_SERVER_DOWN)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ipx_sap_output_flush(out);
|
||||
|
||||
if (passive != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
out->buffer.operation = htons(IPX_SAP_OP_GNS_RESPONSE);
|
||||
se = &(out->buffer.sap_entries[out->entries]);
|
||||
se->ser_type = htons(type);
|
||||
ipx_sap_assign_ser_name(se->ser_name, name);
|
||||
se->network = addr->sipx_network;
|
||||
ipx_assign_node(se->node, addr->sipx_node);
|
||||
se->port = addr->sipx_port;
|
||||
se->hops = htons(hops);
|
||||
out->entries++;
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_output_set_destination(struct sap_output * out,
|
||||
IPXNode node, IPXPort port)
|
||||
{
|
||||
ipx_sap_output_flush(out);
|
||||
ipx_assign_node(out->dest_addr.sipx_node, node);
|
||||
out->dest_addr.sipx_port = htons(port);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_fprint_name(FILE * file, ser_name_t sname)
|
||||
{
|
||||
char name[IPX_SAP_SERVER_NAME_LEN + 1];
|
||||
int len;
|
||||
|
||||
memcpy(name, sname, IPX_SAP_SERVER_NAME_LEN);
|
||||
name[IPX_SAP_SERVER_NAME_LEN] = 0;
|
||||
len = strlen(name);
|
||||
memset(name + len, ' ', IPX_SAP_SERVER_NAME_LEN - len);
|
||||
fprintf(file, name);
|
||||
}
|
||||
|
||||
static void
|
||||
fprint_entry(FILE * file, struct sap_entry *se)
|
||||
{
|
||||
fprintf(file, "SAP: type: %04X name: ", ntohs(se->ser_type));
|
||||
ipx_sap_fprint_name(file, se->ser_name);
|
||||
fprintf(file, " \nhops: %i addr: ", ntohs(se->hops));
|
||||
ipx_fprint_network(file, ntohl(se->network));
|
||||
fprintf(file, ":");
|
||||
ipx_fprint_node(file, se->node);
|
||||
fprintf(file, ":");
|
||||
ipx_fprint_port(file, ntohs(se->port));
|
||||
fprintf(file, "\n");
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_dump(struct sap_packet *pkt, int len)
|
||||
{
|
||||
ipx_sap_fdump(stdout, pkt, len);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_fdump(FILE * file, struct sap_packet *pkt, int len)
|
||||
{
|
||||
int ent;
|
||||
struct sap_entry *se = pkt->sap_entries;
|
||||
|
||||
if (len < 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(file, "Operation: %i size: %i ", ntohs(pkt->operation), len);
|
||||
switch (ntohs(pkt->operation))
|
||||
{
|
||||
case IPX_SAP_OP_REQUEST:
|
||||
fprintf(file, "(Request)\n");
|
||||
if (ipx_sap_size(1, IPX_SAP_OP_REQUEST) != len)
|
||||
{
|
||||
fprintf(file, "Warning: Bad SAP size\n");
|
||||
}
|
||||
fprintf(file, "SAP: Type: %04X\n", ntohs(se->ser_type));
|
||||
break;
|
||||
case IPX_SAP_OP_GNS_REQUEST:
|
||||
fprintf(file, "(Get Nearest Server Request)\n");
|
||||
if (ipx_sap_size(1, IPX_SAP_OP_GNS_REQUEST) != len)
|
||||
{
|
||||
fprintf(file, "Warning: Bad SAP size\n");
|
||||
}
|
||||
fprintf(file, "SAP: Type: %04X\n", ntohs(se->ser_type));
|
||||
break;
|
||||
case IPX_SAP_OP_RESPONSE:
|
||||
|
||||
fprintf(file, "(Response)\n");
|
||||
ent = (len - 2) / sizeof(struct sap_entry);
|
||||
|
||||
if (ipx_sap_size(ent, IPX_SAP_OP_RESPONSE) != len)
|
||||
{
|
||||
fprintf(file, "Warning: Bad SAP size\n");
|
||||
}
|
||||
for (; ent--; se++)
|
||||
{
|
||||
fprint_entry(file, se);
|
||||
}
|
||||
break;
|
||||
case IPX_SAP_OP_GNS_RESPONSE:
|
||||
fprintf(file, "(Get Nearest Server Response)\n");
|
||||
if (ipx_sap_size(1, IPX_SAP_OP_RESPONSE) != len)
|
||||
{
|
||||
fprintf(file, "Warning: Bad SAP size\n");
|
||||
}
|
||||
fprint_entry(file, se);
|
||||
break;
|
||||
default:
|
||||
fprintf(file, "(Unknown)\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int (*ipx_sap_output_func) (int sock, void *, int, struct sockaddr_ipx *)
|
||||
= NULL;
|
||||
746
ipxripd/ipxsapd.c
Normal file
746
ipxripd/ipxsapd.c
Normal file
@@ -0,0 +1,746 @@
|
||||
/*
|
||||
IPX service advertising daemon
|
||||
|
||||
Copyright (C) 1994, 1995 Ales Dryak <e-mail: A.Dryak@sh.cvut.cz>
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netipx/ipx.h>
|
||||
#include "ipxutil.h"
|
||||
#include "ipxkern.h"
|
||||
#include "ipxsap.h"
|
||||
#include "ipxd.h"
|
||||
|
||||
typedef unsigned char ifc_timer;
|
||||
|
||||
struct sap_table
|
||||
{
|
||||
ser_name_t name;
|
||||
ser_type_t type;
|
||||
hop_t hops;
|
||||
struct sockaddr_ipx addr;
|
||||
ifc_timer timers[MAX_IFACE]; /* 0<timer<EXPIRE_TIME => net is
|
||||
reachable via iface */
|
||||
/* timer>=EXPIPE_TIME => net is not r. */
|
||||
struct sap_table *next;
|
||||
};
|
||||
|
||||
struct sap_table *stable = NULL;
|
||||
|
||||
static IPXNet
|
||||
ifc_net(struct ipx_interface *ifc)
|
||||
{
|
||||
return ntohl(ifc->s_output.dest_addr.sipx_network);
|
||||
}
|
||||
|
||||
static int
|
||||
is_expired(ifc_timer * tm)
|
||||
{
|
||||
return *tm >= EXPIRE_TIME;
|
||||
}
|
||||
|
||||
static void
|
||||
setup_timers(struct sap_table *rt, struct ipx_interface *ifc)
|
||||
{
|
||||
ifc_timer *tm;
|
||||
|
||||
for (tm = rt->timers; tm < rt->timers + MAX_IFACE; tm++)
|
||||
{
|
||||
*tm = EXPIRE_TIME;
|
||||
}
|
||||
rt->timers[ifc_get_index(ifc)] = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
output_flushall()
|
||||
{
|
||||
struct ipx_interface *ifc = first_interface();
|
||||
|
||||
while (ifc != NULL)
|
||||
{
|
||||
ipx_sap_output_flush(&(ifc->s_output));
|
||||
ifc = next_interface(ifc);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
output_set_destination(struct ipx_interface *ifc,
|
||||
IPXNode dest_node, IPXPort dest_port)
|
||||
{
|
||||
if (ifc == NULL)
|
||||
{
|
||||
ifc = first_interface();
|
||||
while (ifc != NULL)
|
||||
{
|
||||
ipx_sap_output_set_destination(&(ifc->s_output),
|
||||
dest_node, dest_port);
|
||||
ifc = next_interface(ifc);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ipx_sap_output_set_destination(&(ifc->s_output), dest_node,
|
||||
dest_port);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
output_broadcast(struct sap_table *st, int down_allow)
|
||||
{
|
||||
struct ipx_interface *ifc = first_interface();
|
||||
|
||||
while (ifc != NULL)
|
||||
{
|
||||
if (is_expired(&(st->timers[ifc_get_index(ifc)])))
|
||||
{
|
||||
ipx_sap_output_response(&(ifc->s_output),
|
||||
st->type, st->name,
|
||||
&(st->addr),
|
||||
st->hops, down_allow);
|
||||
}
|
||||
ifc = next_interface(ifc);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
output_sendto(int sock, void *buffer, int size, struct sockaddr_ipx *daddr)
|
||||
{
|
||||
int res;
|
||||
|
||||
DL_ENTRY;
|
||||
DL_START;
|
||||
fprintf(log_file, "Sending SAP to ");
|
||||
ipx_fprint_saddr(log_file, daddr);
|
||||
fprintf(log_file, "\n");
|
||||
ipx_sap_fdump(log_file, buffer, size);
|
||||
DL_END;
|
||||
|
||||
res = sendto(sock, (void *) buffer, size, 0,
|
||||
(struct sockaddr *) daddr, sizeof(*daddr));
|
||||
|
||||
if (res == -1)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "sendto: %s\n", strerror(errno));
|
||||
LOG_END;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static void
|
||||
fprint_server(FILE * file, struct sap_table *st)
|
||||
{
|
||||
int i;
|
||||
|
||||
LOG_START;
|
||||
fprintf(file, "SAP: type: %04X name: ", st->type);
|
||||
ipx_sap_fprint_name(file, st->name);
|
||||
fprintf(file, " \nhops: %i addr: ", st->hops);
|
||||
ipx_fprint_saddr(file, &(st->addr));
|
||||
fprintf(file, " ");
|
||||
|
||||
for (i = first_ifc_index(); i >= 0; i = next_ifc_index(i))
|
||||
{
|
||||
ifc_timer *tm = &(st->timers[i]);
|
||||
fprintf(file, "%i", is_expired(tm) ? 0 : 1);
|
||||
DL_START;
|
||||
fprintf(file, "(%i)", (int) *tm);
|
||||
DL_END;
|
||||
}
|
||||
LOG_END;
|
||||
}
|
||||
|
||||
void
|
||||
fdump_servers(FILE * file)
|
||||
{
|
||||
struct sap_table *st;
|
||||
|
||||
LOG_START;
|
||||
fprintf(file, "IPX server database:\n");
|
||||
for (st = stable; st != NULL; st = st->next)
|
||||
{
|
||||
fprint_server(file, st);
|
||||
fprintf(file, "\n");
|
||||
}
|
||||
LOG_END;
|
||||
}
|
||||
|
||||
|
||||
static struct sap_table *
|
||||
add_server(ser_type_t type, ser_name_t name, struct sockaddr_ipx *addr,
|
||||
hop_t hops, struct ipx_interface *ifc)
|
||||
{
|
||||
struct sap_table *st;
|
||||
|
||||
st=(struct sap_table *)malloc(sizeof(struct sap_table));
|
||||
if (st == NULL)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "ipxsapd: out of memory in add_server\n");
|
||||
LOG_END;
|
||||
return NULL;
|
||||
}
|
||||
st->type = type;
|
||||
ipx_sap_assign_ser_name(st->name, name);
|
||||
st->addr = *addr;
|
||||
st->hops = hops;
|
||||
setup_timers(st, ifc);
|
||||
st->next = stable;
|
||||
stable = st;
|
||||
return st;
|
||||
}
|
||||
|
||||
static void
|
||||
delete_server(struct sap_table *d)
|
||||
{
|
||||
struct sap_table **s;
|
||||
for (s = &stable; *s != NULL; s = &((*s)->next))
|
||||
{
|
||||
if (*s == d)
|
||||
{
|
||||
*s = d->next;
|
||||
free(d);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_sap_gns_request(struct sap_entry * se, struct ipx_interface *src_ifc)
|
||||
{
|
||||
struct sap_table *cur;
|
||||
struct sap_table *nearest = NULL;
|
||||
|
||||
if (ntohs(se->ser_type) == IPX_SAP_GENERAL_RQ)
|
||||
{
|
||||
return;
|
||||
}
|
||||
for (cur = stable; cur != NULL; cur = cur->next)
|
||||
{
|
||||
if (ipx_sap_type_equal(cur->type, ntohs(se->ser_type)))
|
||||
{
|
||||
if (nearest == NULL)
|
||||
{
|
||||
nearest = cur;
|
||||
continue;
|
||||
}
|
||||
if (nearest->hops > cur->hops)
|
||||
{
|
||||
nearest = cur;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nearest != NULL)
|
||||
{
|
||||
ipx_sap_output_gns_response(&(src_ifc->s_output),
|
||||
nearest->type, nearest->name,
|
||||
&(nearest->addr), nearest->hops);
|
||||
}
|
||||
else
|
||||
{
|
||||
DL_START;
|
||||
fprintf(log_file, "No servers of type %04X was found\n",
|
||||
ntohs(se->ser_type));
|
||||
DL_END;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_sap_request(struct sap_entry *se, struct ipx_interface *src_ifc)
|
||||
{
|
||||
struct sap_table *cur;
|
||||
for (cur = stable; cur != NULL; cur = cur->next)
|
||||
{
|
||||
if (ipx_sap_type_equal(cur->type, ntohs(se->ser_type)))
|
||||
{
|
||||
ipx_sap_output_response(&(src_ifc->s_output),
|
||||
cur->type, cur->name,
|
||||
&(cur->addr), cur->hops, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_sap_response(struct sap_entry *se, struct ipx_interface *src_ifc,
|
||||
IPXNode src_node)
|
||||
{
|
||||
(void)src_node;
|
||||
|
||||
struct sap_table *cur;
|
||||
|
||||
se->hops = ntohs(se->hops) + 1;
|
||||
|
||||
for (cur = stable; cur != NULL; cur = cur->next)
|
||||
{
|
||||
if ( !ipx_sap_name_equal(cur->name, se->ser_name)
|
||||
|| !ipx_sap_type_equal(cur->type, ntohs(se->ser_type)))
|
||||
{
|
||||
/* Another server was announced */
|
||||
continue;
|
||||
}
|
||||
/* entry found */
|
||||
if (se->hops <= IPX_SAP_SERVER_DOWN)
|
||||
{
|
||||
/* server ok */
|
||||
if (se->hops > cur->hops)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (se->hops == cur->hops)
|
||||
{
|
||||
/* server has equal 'route' */
|
||||
/* update info (near not neccesary) */
|
||||
cur->addr.sipx_network = se->network;
|
||||
ipx_assign_node(cur->addr.sipx_node, se->node);
|
||||
cur->addr.sipx_port = se->port;
|
||||
|
||||
/* update timer for iface */
|
||||
cur->timers[ifc_get_index(src_ifc)] = 0;
|
||||
return;
|
||||
}
|
||||
/* server has better 'route' */
|
||||
LOG_START;
|
||||
fprintf(log_file, "CHANGE ");
|
||||
fprint_server(log_file, cur);
|
||||
LOG_END;
|
||||
|
||||
/* update table */
|
||||
cur->hops = se->hops;
|
||||
cur->addr.sipx_network = se->network;
|
||||
ipx_assign_node(cur->addr.sipx_node, se->node);
|
||||
cur->addr.sipx_port = se->port;
|
||||
setup_timers(cur, src_ifc);
|
||||
|
||||
LOG_START;
|
||||
fprintf(log_file, "\nto ");
|
||||
fprint_server(log_file, cur);
|
||||
fprintf(log_file, "\n");
|
||||
LOG_END;
|
||||
|
||||
/* send info bcast */
|
||||
output_broadcast(cur, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* server down through iface */
|
||||
int src_ifc_idx = ifc_get_index(src_ifc);
|
||||
int i;
|
||||
|
||||
cur->timers[src_ifc_idx] = EXPIRE_TIME;
|
||||
for (i = first_ifc_index();
|
||||
i >= 0;
|
||||
i = next_ifc_index(i))
|
||||
{
|
||||
ifc_timer *tm = &(cur->timers[i]);
|
||||
if (!is_expired(tm))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
cur->timers[src_ifc_idx] = 0;
|
||||
cur->hops = IPX_SAP_SERVER_DOWN;
|
||||
output_broadcast(cur, 1);
|
||||
LOG_START;
|
||||
fprintf(log_file, "DELETE ");
|
||||
fprint_server(log_file, cur);
|
||||
fprintf(log_file, " (service down)\n");
|
||||
LOG_END;
|
||||
delete_server(cur);
|
||||
}
|
||||
return;
|
||||
}
|
||||
/* entry not found */
|
||||
if (se->hops <= IPX_SAP_SERVER_DOWN)
|
||||
{
|
||||
struct sap_table *st;
|
||||
struct sockaddr_ipx addr;
|
||||
|
||||
addr.sipx_network = se->network;
|
||||
ipx_assign_node(addr.sipx_node, se->node);
|
||||
addr.sipx_port = se->port;
|
||||
addr.sipx_type = 0;
|
||||
st = add_server(ntohs(se->ser_type), se->ser_name, &addr,
|
||||
se->hops, src_ifc);
|
||||
if (st != NULL)
|
||||
{
|
||||
/* send info bcast */
|
||||
output_broadcast(st, 0);
|
||||
LOG_START;
|
||||
fprintf(log_file, "ADD ");
|
||||
fprint_server(log_file, st);
|
||||
fprintf(log_file, "\n");
|
||||
LOG_END;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
handle_sap(struct sap_packet * pkt, int len, struct sockaddr_ipx *sipx,
|
||||
struct ipx_interface *src_ifc)
|
||||
{
|
||||
struct sap_entry *se = pkt->sap_entries;
|
||||
int nent = (len - 2) / sizeof(struct sap_entry);
|
||||
|
||||
if (ifc_net(src_ifc) != ntohl(sipx->sipx_network))
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "SAP from non-local net ");
|
||||
ipx_fprint_network(log_file, ntohl(sipx->sipx_network));
|
||||
fprintf(log_file, " (ignored)\n");
|
||||
LOG_END;
|
||||
return;
|
||||
}
|
||||
if (len < 2)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"SAP packet too small len=%i (ignored)\n", len);
|
||||
LOG_END;
|
||||
return;
|
||||
}
|
||||
if ( ipx_node_equal(src_ifc->ifnode, sipx->sipx_node)
|
||||
&& ((unsigned short) sipx->sipx_port == htons(IPX_SAP_PORT)))
|
||||
{
|
||||
DL_START;
|
||||
fprintf(log_file, "My packet (ignored)\n");
|
||||
DL_END;
|
||||
return;
|
||||
}
|
||||
switch (ntohs(pkt->operation))
|
||||
{
|
||||
case IPX_SAP_OP_REQUEST:
|
||||
if (len != ipx_sap_size(1, IPX_SAP_OP_REQUEST))
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"SAP packet invalid size (ignored)\n");
|
||||
LOG_END;
|
||||
return;
|
||||
}
|
||||
output_set_destination(src_ifc,
|
||||
sipx->sipx_node,
|
||||
ntohs(sipx->sipx_port));
|
||||
handle_sap_request(se, src_ifc);
|
||||
output_flushall();
|
||||
break;
|
||||
case IPX_SAP_OP_GNS_REQUEST:
|
||||
if (len != ipx_sap_size(1, IPX_SAP_OP_REQUEST))
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"SAP packet invalid size (ignored)\n");
|
||||
LOG_END;
|
||||
return;
|
||||
}
|
||||
output_set_destination(src_ifc,
|
||||
sipx->sipx_node,
|
||||
ntohs(sipx->sipx_port));
|
||||
handle_sap_gns_request(se, src_ifc);
|
||||
output_flushall();
|
||||
break;
|
||||
case IPX_SAP_OP_RESPONSE:
|
||||
/* option: ignore responses from non SAP ports
|
||||
* if (sipx->sipx_port!=htons(IPX_SAP_PORT)) return;
|
||||
*/
|
||||
output_set_destination(NULL, IPX_BROADCAST, IPX_SAP_PORT);
|
||||
for (; nent--; se++)
|
||||
{
|
||||
handle_sap_response(se, src_ifc, sipx->sipx_node);
|
||||
}
|
||||
output_flushall();
|
||||
break;
|
||||
case IPX_SAP_OP_GNS_RESPONSE:
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"GNS response should never be received (ignored)\n");
|
||||
LOG_END;
|
||||
break;
|
||||
default:
|
||||
LOG_START;
|
||||
fprintf(log_file, "Unknown SAP operation\n");
|
||||
LOG_END;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
delete_invalid_servers(void)
|
||||
{
|
||||
struct sap_table **s = &stable;
|
||||
|
||||
while (*s != NULL)
|
||||
{
|
||||
if ((*s)->hops >= IPX_SAP_SERVER_DOWN)
|
||||
{
|
||||
struct sap_table *d = *s;
|
||||
*s = (*s)->next;
|
||||
free(d);
|
||||
}
|
||||
else
|
||||
{
|
||||
s = &((*s)->next);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_do_aging(int rate, int do_broadcast)
|
||||
{
|
||||
struct sap_table *cur;
|
||||
int servers_died = 0;
|
||||
|
||||
DL_START;
|
||||
fprintf(log_file, "DO SAP AGING\n");
|
||||
DL_END;
|
||||
|
||||
output_set_destination(NULL, IPX_BROADCAST, IPX_SAP_PORT);
|
||||
for (cur = stable; cur != NULL; cur = cur->next)
|
||||
{
|
||||
int down = 1;
|
||||
int i;
|
||||
|
||||
for (i = first_ifc_index(); i >= 0; i = next_ifc_index(i))
|
||||
{
|
||||
ifc_timer* tm = &(cur->timers[i]);;
|
||||
if (!is_expired(tm))
|
||||
{
|
||||
(*tm) += rate;
|
||||
if (!is_expired(tm))
|
||||
{
|
||||
down = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (down)
|
||||
{
|
||||
/* server is down */
|
||||
LOG_START;
|
||||
fprintf(log_file, "DELETE ");
|
||||
fprint_server(log_file, cur);
|
||||
fprintf(log_file, " (timed out)\n");
|
||||
LOG_END;
|
||||
/* send info bcast */
|
||||
cur->hops = IPX_SAP_SERVER_DOWN;
|
||||
output_broadcast(cur, 1);
|
||||
/* table update deferred */
|
||||
servers_died = 1;
|
||||
} else
|
||||
{
|
||||
if (do_broadcast != 0)
|
||||
{
|
||||
output_broadcast(cur, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Delete bogus servers */
|
||||
if (servers_died != 0)
|
||||
{
|
||||
delete_invalid_servers();
|
||||
}
|
||||
output_flushall();
|
||||
}
|
||||
|
||||
int
|
||||
ipx_sap_init_ifc(struct ipx_interface *ifc, IPXNet network,
|
||||
char *device, int type, void *data)
|
||||
{
|
||||
(void)device;
|
||||
(void)type;
|
||||
(void)data;
|
||||
|
||||
struct sockaddr_ipx sipx;
|
||||
|
||||
if (ipx_sap_output_init(&(ifc->s_output), network) != 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"out of memory allocating output buffer\n");
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((ifc->s_output.sk = socket(AF_IPX, SOCK_DGRAM, PF_IPX)) < 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file,
|
||||
"can't open socket: %s\n", strerror(errno));
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&sipx, 0, sizeof(sipx));
|
||||
sipx.sipx_family = AF_IPX;
|
||||
sipx.sipx_network = htonl(network);
|
||||
ipx_assign_node(sipx.sipx_node, IPX_THIS_NODE);
|
||||
sipx.sipx_port = htons(IPX_SAP_PORT);
|
||||
sipx.sipx_type = IPX_SAP_PTYPE;
|
||||
|
||||
if (bind(ifc->s_output.sk, (struct sockaddr *)&sipx, sizeof(sipx)) < 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "can't bind socket: %s\n",
|
||||
strerror(errno));
|
||||
LOG_END;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ipx_kern_enable_broadcast(ifc->s_output.sk) != 0)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "cant' enable broadcast\n");
|
||||
LOG_END;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
LOG_START;
|
||||
ipx_fprint_network(log_file, network);
|
||||
fprintf(log_file,":");
|
||||
ipx_fprint_node(log_file, ifc->ifnode);
|
||||
fprintf(log_file,"\n");
|
||||
LOG_END;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
ipx_sap_deinit_ifc(struct ipx_interface *ifc)
|
||||
{
|
||||
close(ifc->s_output.sk);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_down_ifc(struct ipx_interface *ifc)
|
||||
{
|
||||
struct sap_table *st;
|
||||
int ifc_index = ifc_get_index(ifc);
|
||||
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file, "SAP DOWN INTERFACE ");
|
||||
ipx_fprint_network(log_file, ifc_net(ifc));
|
||||
fprintf(log_file, "\n");
|
||||
LOG_END;
|
||||
|
||||
for (st = stable; st != NULL; st = st->next)
|
||||
{
|
||||
int i;
|
||||
st->timers[ifc_index] = EXPIRE_TIME;
|
||||
|
||||
for (i = first_ifc_index();
|
||||
i >= 0;
|
||||
i = next_ifc_index(i))
|
||||
{
|
||||
ifc_timer *tm = &(st->timers[i]);
|
||||
if (!is_expired(tm))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
st->timers[ifc_index] = 0;
|
||||
st->hops = IPX_SAP_SERVER_DOWN;
|
||||
output_broadcast(st, 1);
|
||||
LOG_START;
|
||||
fprintf(log_file, "DELETE ");
|
||||
fprint_server(log_file, st);
|
||||
fprintf(log_file, " (interface down)\n");
|
||||
LOG_END;
|
||||
}
|
||||
|
||||
delete_invalid_servers();
|
||||
ipx_sap_deinit_ifc(ifc);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_initial_broadcasts()
|
||||
{
|
||||
struct ipx_interface *ifc;
|
||||
ipx_sap_output_func = output_sendto;
|
||||
|
||||
output_set_destination(NULL, IPX_BROADCAST, IPX_SAP_PORT);
|
||||
|
||||
ifc = first_interface();
|
||||
|
||||
while (ifc != NULL)
|
||||
{
|
||||
ipx_sap_output_request(&(ifc->s_output),
|
||||
IPX_SAP_GENERAL_RQ);
|
||||
ifc = next_interface(ifc);
|
||||
}
|
||||
output_flushall();
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_initial_broadcast(struct ipx_interface *ifc)
|
||||
{
|
||||
struct sap_table *cur;
|
||||
|
||||
output_set_destination(ifc, IPX_BROADCAST, IPX_SAP_PORT);
|
||||
|
||||
for (cur = stable; cur != NULL; cur = cur->next)
|
||||
{
|
||||
ipx_sap_output_response(&(ifc->s_output),
|
||||
cur->type, cur->name,
|
||||
&(cur->addr), cur->hops, 0);
|
||||
}
|
||||
|
||||
ipx_sap_output_request(&(ifc->s_output), IPX_SAP_GENERAL_RQ);
|
||||
ipx_sap_output_flush(&(ifc->s_output));
|
||||
}
|
||||
|
||||
void
|
||||
ipx_sap_done()
|
||||
{
|
||||
struct sap_table *cur;
|
||||
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file, "SAP Shutdown start\n");
|
||||
LOG_END;
|
||||
|
||||
output_set_destination(NULL, IPX_BROADCAST, IPX_SAP_PORT);
|
||||
for (cur = stable; cur != NULL; cur = cur->next)
|
||||
{
|
||||
LOG_START;
|
||||
fprintf(log_file, "DELETE ");
|
||||
fprint_server(log_file, cur);
|
||||
fprintf(log_file, " (shutdown)\n");
|
||||
LOG_END;
|
||||
/* send info bcast */
|
||||
cur->hops = IPX_SAP_SERVER_DOWN;
|
||||
output_broadcast(cur, 1);
|
||||
/* update table */
|
||||
delete_server(cur);
|
||||
}
|
||||
output_flushall();
|
||||
|
||||
LOG_ENTRY;
|
||||
LOG_START;
|
||||
fprintf(log_file, "SAP Shutdown end\n");
|
||||
LOG_END;
|
||||
}
|
||||
50
ipxripd/ipxsapd.h
Normal file
50
ipxripd/ipxsapd.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
IPX routing daemon
|
||||
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _IPXSAPD_H_
|
||||
#define _IPXSAPD_H_
|
||||
|
||||
void
|
||||
fdump_servers(FILE *file);
|
||||
|
||||
void
|
||||
handle_sap(struct sap_packet *pkt, int len, struct sockaddr_ipx* sipx,
|
||||
struct ipx_interface *src_ifc);
|
||||
|
||||
void
|
||||
ipx_sap_do_aging(int rate, int do_broadcast);
|
||||
|
||||
int
|
||||
ipx_sap_init_ifc(struct ipx_interface *ifc, IPXNet network,
|
||||
char *device, int type, void *data);
|
||||
|
||||
void
|
||||
ipx_sap_done(void);
|
||||
|
||||
void
|
||||
ipx_sap_initial_broadcasts(void);
|
||||
|
||||
void
|
||||
ipx_sap_initial_broadcast(struct ipx_interface *ifc);
|
||||
|
||||
void
|
||||
ipx_sap_down_ifc(struct ipx_interface *ifc);
|
||||
#endif /* _IPXSAPD_H_ */
|
||||
129
ipxripd/ipxutil.c
Normal file
129
ipxripd/ipxutil.c
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
IPX support library - general functions
|
||||
|
||||
Copyright (C) 1994, 1995 Ales Dryak <e-mail: A.Dryak@sh.cvut.cz>
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#include <string.h>
|
||||
#include <netinet/in.h>
|
||||
#include "ipxutil.h"
|
||||
|
||||
void
|
||||
ipx_fprint_node(FILE *file, IPXNode node)
|
||||
{
|
||||
fprintf(file,"%02X%02X%02X%02X%02X%02X",
|
||||
(unsigned char)node[0],
|
||||
(unsigned char)node[1],
|
||||
(unsigned char)node[2],
|
||||
(unsigned char)node[3],
|
||||
(unsigned char)node[4],
|
||||
(unsigned char)node[5]
|
||||
);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_fprint_network(FILE *file, IPXNet net)
|
||||
{
|
||||
fprintf(file,"%08lX",net);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_fprint_port(FILE *file, IPXPort port)
|
||||
{
|
||||
fprintf(file,"%04X",port);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_fprint_saddr(FILE *file, struct sockaddr_ipx *sipx)
|
||||
{
|
||||
ipx_fprint_network(file,ntohl(sipx->sipx_network));
|
||||
fprintf(file,":");
|
||||
ipx_fprint_node(file,sipx->sipx_node);
|
||||
fprintf(file,":");
|
||||
ipx_fprint_port(file,ntohs(sipx->sipx_port));
|
||||
}
|
||||
|
||||
void
|
||||
ipx_print_node(IPXNode node)
|
||||
{
|
||||
ipx_fprint_node(stdout,node);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_print_network(IPXNet net)
|
||||
{
|
||||
ipx_fprint_network(stdout,net);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_print_port(IPXPort port)
|
||||
{
|
||||
ipx_fprint_port(stdout,port);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_print_saddr(struct sockaddr_ipx *sipx)
|
||||
{
|
||||
ipx_fprint_saddr(stdout,sipx);
|
||||
}
|
||||
|
||||
void
|
||||
ipx_assign_node(IPXNode dest, IPXNode src)
|
||||
{
|
||||
memcpy(dest,src,sizeof(IPXNode));
|
||||
}
|
||||
|
||||
int
|
||||
ipx_node_equal(IPXNode n1, IPXNode n2)
|
||||
{
|
||||
return memcmp(n1,n2,sizeof(IPXNode))==0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_sscanf_node(char *buf, IPXNode node)
|
||||
{
|
||||
int i;
|
||||
int n[6];
|
||||
|
||||
if ((i = sscanf(buf, "%2x%2x%2x%2x%2x%2x",
|
||||
&(n[0]), &(n[1]), &(n[2]),
|
||||
&(n[3]), &(n[4]), &(n[5]))) != 6)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i=0; i<6; i++)
|
||||
{
|
||||
node[i] = n[i];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ipx_sscanf_net(char *buf, IPXNet *target)
|
||||
{
|
||||
if (sscanf(buf, "%8lX", target) == 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
IPXNode ipx_this_node={0,0,0,0,0,0};
|
||||
IPXNode ipx_broadcast_node={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
|
||||
char ipx_err_string[IPX_MAX_ERROR+1]="no error detected";
|
||||
65
ipxripd/ipxutil.h
Normal file
65
ipxripd/ipxutil.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
|
||||
IPX support library
|
||||
|
||||
Copyright (C) 1994, 1995 Ales Dryak <e-mail: A.Dryak@sh.cvut.cz>
|
||||
Copyright (C) 1996, Volker Lendecke <lendecke@namu01.gwdg.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#ifndef __IPXUTIL_H__
|
||||
|
||||
#define __IPXUTIL_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <netipx/ipx.h>
|
||||
|
||||
#define IPX_MAX_ERROR (255)
|
||||
#define IPX_THIS_NET (0)
|
||||
#define IPX_THIS_NODE (ipx_this_node)
|
||||
#define IPX_BROADCAST (ipx_broadcast_node)
|
||||
#define IPX_AUTO_PORT (0)
|
||||
#define IPX_USER_PTYPE (0)
|
||||
#define IPX_IS_INTERNAL (1)
|
||||
|
||||
typedef unsigned char IPXNode[6];
|
||||
typedef unsigned long int IPXNet;
|
||||
typedef unsigned short int IPXPort;
|
||||
typedef unsigned short int hop_t;
|
||||
typedef unsigned short int tick_t;
|
||||
|
||||
void ipx_print_node(IPXNode node);
|
||||
void ipx_print_network(IPXNet net);
|
||||
void ipx_print_port(IPXPort port);
|
||||
void ipx_print_saddr(struct sockaddr_ipx* sipx);
|
||||
|
||||
void ipx_fprint_node(FILE* file,IPXNode node);
|
||||
void ipx_fprint_network(FILE* file,IPXNet net);
|
||||
void ipx_fprint_port(FILE* file,IPXPort port);
|
||||
void ipx_fprint_saddr(FILE* file,struct sockaddr_ipx* sipx);
|
||||
|
||||
int ipx_sscanf_node(char *buf, IPXNode node);
|
||||
int ipx_sscanf_net(char *buf, IPXNet *target);
|
||||
|
||||
void ipx_assign_node(IPXNode dest,IPXNode src);
|
||||
int ipx_node_equal(IPXNode n1,IPXNode n2);
|
||||
|
||||
extern IPXNode ipx_this_node;
|
||||
extern IPXNode ipx_broadcast_node;
|
||||
|
||||
extern char ipx_err_string[IPX_MAX_ERROR+1];
|
||||
|
||||
#endif
|
||||
620
po/Makefile
Normal file
620
po/Makefile
Normal file
@@ -0,0 +1,620 @@
|
||||
# Makefile for PO directory in any package using GNU gettext.
|
||||
# Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
||||
# Copyright (C) 2000-2020 Free Software Foundation, Inc.
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification,
|
||||
# are permitted in any medium without royalty provided the copyright
|
||||
# notice and this notice are preserved. This file is offered as-is,
|
||||
# without any warranty.
|
||||
#
|
||||
# Origin: gettext-0.21
|
||||
GETTEXT_MACRO_VERSION = 0.20
|
||||
|
||||
PACKAGE = ipx-utils
|
||||
VERSION = 1.4
|
||||
PACKAGE_BUGREPORT = mario.fetka@disconnected-by-peer.at
|
||||
|
||||
SED = /usr/bin/sed
|
||||
SHELL = /bin/sh
|
||||
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
|
||||
|
||||
prefix = /usr
|
||||
exec_prefix = ${prefix}
|
||||
datarootdir = ${prefix}/share
|
||||
datadir = ${datarootdir}
|
||||
localedir = ${datarootdir}/locale
|
||||
gettextsrcdir = $(datadir)/gettext/po
|
||||
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
|
||||
# We use $(mkdir_p).
|
||||
# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
|
||||
# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
|
||||
# ${SHELL} /home/mario/mars/ipx-utils/install-sh does not start with $(SHELL), so we add it.
|
||||
# In automake >= 1.10, $(MKDIR_P) is derived from ${MKDIR_P}, which is defined
|
||||
# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
|
||||
# versions, $(mkinstalldirs) and $(install_sh) are unused.
|
||||
mkinstalldirs = $(SHELL) ${SHELL} /home/mario/mars/ipx-utils/install-sh -d
|
||||
install_sh = $(SHELL) ${SHELL} /home/mario/mars/ipx-utils/install-sh
|
||||
MKDIR_P = /usr/bin/mkdir -p
|
||||
mkdir_p = $(MKDIR_P)
|
||||
|
||||
# When building gettext-tools, we prefer to use the built programs
|
||||
# rather than installed programs. However, we can't do that when we
|
||||
# are cross compiling.
|
||||
CROSS_COMPILING = @CROSS_COMPILING@
|
||||
|
||||
GMSGFMT_ = /usr/bin/gmsgfmt
|
||||
GMSGFMT_no = /usr/bin/gmsgfmt
|
||||
GMSGFMT_yes = /usr/bin/gmsgfmt
|
||||
GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
|
||||
XGETTEXT_ = /usr/bin/xgettext
|
||||
XGETTEXT_no = /usr/bin/xgettext
|
||||
XGETTEXT_yes = /usr/bin/xgettext
|
||||
XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
|
||||
MSGMERGE = /usr/bin/msgmerge
|
||||
MSGMERGE_UPDATE = /usr/bin/msgmerge --update
|
||||
MSGMERGE_FOR_MSGFMT_OPTION = --for-msgfmt
|
||||
MSGINIT = msginit
|
||||
MSGCONV = msgconv
|
||||
MSGFILTER = msgfilter
|
||||
|
||||
POFILES = cs.po de.po es.po fr.po hu.po it.po ja.po pt_BR.po zh_CN.po zh_TW.po
|
||||
GMOFILES = cs.gmo de.gmo es.gmo fr.gmo hu.gmo it.gmo ja.gmo pt_BR.gmo zh_CN.gmo zh_TW.gmo
|
||||
UPDATEPOFILES = cs.po-update de.po-update es.po-update fr.po-update hu.po-update it.po-update ja.po-update pt_BR.po-update zh_CN.po-update zh_TW.po-update
|
||||
DUMMYPOFILES = cs.nop de.nop es.nop fr.nop hu.nop it.nop ja.nop pt_BR.nop zh_CN.nop zh_TW.nop
|
||||
DISTFILES.common = Makefile.in.in remove-potcdate.sin \
|
||||
$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
|
||||
DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
|
||||
$(POFILES) $(GMOFILES) \
|
||||
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
|
||||
|
||||
POTFILES = \
|
||||
../src/ipx_configure.c \
|
||||
../src/ipx_interface.c \
|
||||
../src/ipx_internal_net.c \
|
||||
../src/ipx_route.c \
|
||||
../src/ipx_cmd.c \
|
||||
../tools/ipxdump.c \
|
||||
../tools/ipxparse.c
|
||||
|
||||
CATALOGS = cs.gmo de.gmo es.gmo fr.gmo hu.gmo it.gmo ja.gmo pt_BR.gmo zh_CN.gmo zh_TW.gmo
|
||||
|
||||
POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
|
||||
POFILESDEPS_yes = $(POFILESDEPS_)
|
||||
POFILESDEPS_no =
|
||||
POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
|
||||
|
||||
DISTFILESDEPS_ = update-po
|
||||
DISTFILESDEPS_yes = $(DISTFILESDEPS_)
|
||||
DISTFILESDEPS_no =
|
||||
DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
|
||||
|
||||
# Makevars gets inserted here. (Don't remove this line!)
|
||||
# Makefile variables for PO directory in any package using GNU gettext.
|
||||
|
||||
# Usually the message domain is the same as the package name.
|
||||
DOMAIN = $(PACKAGE)
|
||||
|
||||
# These two variables depend on the location of this directory.
|
||||
subdir = po
|
||||
top_builddir = ..
|
||||
|
||||
# These options get passed to xgettext.
|
||||
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
|
||||
|
||||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||
# package. (Note that the msgstr strings, extracted from the package's
|
||||
# sources, belong to the copyright holder of the package.) Translators are
|
||||
# expected to transfer the copyright for their translations to this person
|
||||
# or entity, or to disclaim their copyright. The empty string stands for
|
||||
# the public domain; in this case the translators are expected to disclaim
|
||||
# their copyright.
|
||||
COPYRIGHT_HOLDER = Free Software Foundation, Inc.
|
||||
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings:
|
||||
# - Strings which are not entire sentences, see the maintainer guidelines
|
||||
# in the GNU gettext documentation, section 'Preparing Strings'.
|
||||
# - Strings which use unclear terms or require additional context to be
|
||||
# understood.
|
||||
# - Strings which make invalid assumptions about notation of date, time or
|
||||
# money.
|
||||
# - Pluralisation problems.
|
||||
# - Incorrect English spelling.
|
||||
# - Incorrect formatting.
|
||||
# It can be your email address, or a mailing list address where translators
|
||||
# can write to without being subscribed, or the URL of a web page through
|
||||
# which the translators can contact you.
|
||||
MSGID_BUGS_ADDRESS =
|
||||
|
||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
||||
# message catalogs shall be used. It is usually empty.
|
||||
EXTRA_LOCALE_CATEGORIES =
|
||||
|
||||
all: all-yes
|
||||
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update
|
||||
|
||||
# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
|
||||
# The GNU Coding Standards say in
|
||||
# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
|
||||
# "GNU distributions usually contain some files which are not source files
|
||||
# ... . Since these files normally appear in the source directory, they
|
||||
# should always appear in the source directory, not in the build directory.
|
||||
# So Makefile rules to update them should put the updated files in the
|
||||
# source directory."
|
||||
# Therefore we put these files in the source directory, not the build directory.
|
||||
|
||||
# During .po -> .gmo conversion, take into account the most recent changes to
|
||||
# the .pot file. This eliminates the need to update the .po files when the
|
||||
# .pot file has changed, which would be troublesome if the .po files are put
|
||||
# under version control.
|
||||
$(GMOFILES): $(srcdir)/$(DOMAIN).pot
|
||||
.po.gmo:
|
||||
@lang=`echo $* | sed -e 's,.*/,,'`; \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
|
||||
cd $(srcdir) && \
|
||||
rm -f $${lang}.gmo && \
|
||||
$(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
|
||||
$(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
|
||||
mv t-$${lang}.gmo $${lang}.gmo && \
|
||||
rm -f $${lang}.1po
|
||||
|
||||
.sin.sed:
|
||||
sed -e '/^#/d' $< > t-$@
|
||||
mv t-$@ $@
|
||||
|
||||
|
||||
all-yes: $(srcdir)/stamp-po
|
||||
all-no:
|
||||
|
||||
# Ensure that the gettext macros and this Makefile.in.in are in sync.
|
||||
CHECK_MACRO_VERSION = \
|
||||
test "$(GETTEXT_MACRO_VERSION)" = "0.20" \
|
||||
|| { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version 0.20" 1>&2; \
|
||||
exit 1; \
|
||||
}
|
||||
|
||||
# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
|
||||
# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
|
||||
# we don't want to bother translators with empty POT files). We assume that
|
||||
# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
|
||||
# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
|
||||
|
||||
# $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS
|
||||
# have been loosely updated. Its purpose is that when a developer or translator
|
||||
# checks out the package from a version control system, and the $(DOMAIN).pot
|
||||
# file is not under version control, "make" will update the $(DOMAIN).pot and
|
||||
# the $(CATALOGS), but subsequent invocations of "make" will do nothing. This
|
||||
# timestamp would not be necessary if updating the $(CATALOGS) would always
|
||||
# touch them; however, the rule for $(POFILES) has been designed to not touch
|
||||
# files that don't need to be changed.
|
||||
$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
|
||||
@$(CHECK_MACRO_VERSION)
|
||||
test ! -f $(srcdir)/$(DOMAIN).pot || \
|
||||
test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
|
||||
@test ! -f $(srcdir)/$(DOMAIN).pot || { \
|
||||
echo "touch $(srcdir)/stamp-po" && \
|
||||
echo timestamp > $(srcdir)/stamp-poT && \
|
||||
mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
|
||||
}
|
||||
|
||||
# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
|
||||
# otherwise packages like GCC can not be built if only parts of the source
|
||||
# have been downloaded.
|
||||
|
||||
# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
|
||||
# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
|
||||
# The determination of whether the package xyz is a GNU one is based on the
|
||||
# heuristic whether some file in the top level directory mentions "GNU xyz".
|
||||
# If GNU 'find' is available, we avoid grepping through monster files.
|
||||
$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
|
||||
package_gnu="$(PACKAGE_GNU)"; \
|
||||
test -n "$$package_gnu" || { \
|
||||
if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
|
||||
LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU ipx-utils' /dev/null '{}' ';' 2>/dev/null; \
|
||||
else \
|
||||
LC_ALL=C grep -i 'GNU ipx-utils' $(top_srcdir)/* 2>/dev/null; \
|
||||
fi; \
|
||||
} | grep -v 'libtool:' >/dev/null; then \
|
||||
package_gnu=yes; \
|
||||
else \
|
||||
package_gnu=no; \
|
||||
fi; \
|
||||
}; \
|
||||
if test "$$package_gnu" = "yes"; then \
|
||||
package_prefix='GNU '; \
|
||||
else \
|
||||
package_prefix=''; \
|
||||
fi; \
|
||||
if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
|
||||
msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
|
||||
else \
|
||||
msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
|
||||
fi; \
|
||||
case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
|
||||
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||
--add-comments=TRANSLATORS: \
|
||||
--files-from=$(srcdir)/POTFILES.in \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--msgid-bugs-address="$$msgid_bugs_address" \
|
||||
$(XGETTEXT_OPTIONS) \
|
||||
;; \
|
||||
*) \
|
||||
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||
--add-comments=TRANSLATORS: \
|
||||
--files-from=$(srcdir)/POTFILES.in \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--package-name="$${package_prefix}ipx-utils" \
|
||||
--package-version='1.4' \
|
||||
--msgid-bugs-address="$$msgid_bugs_address" \
|
||||
$(XGETTEXT_OPTIONS) \
|
||||
;; \
|
||||
esac
|
||||
test ! -f $(DOMAIN).po || { \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot-header; then \
|
||||
sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
|
||||
cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
|
||||
rm -f $(DOMAIN).1po \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||
sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
|
||||
sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
|
||||
if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
|
||||
rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
|
||||
else \
|
||||
rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
|
||||
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||
fi; \
|
||||
else \
|
||||
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||
fi; \
|
||||
}
|
||||
|
||||
# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
|
||||
# every "make" invocation, only create it when it is missing.
|
||||
# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
|
||||
$(srcdir)/$(DOMAIN).pot:
|
||||
$(MAKE) $(DOMAIN).pot-update
|
||||
|
||||
# This target rebuilds a PO file if $(DOMAIN).pot has changed.
|
||||
# Note that a PO file is not touched if it doesn't need to be changed.
|
||||
$(POFILES): $(POFILESDEPS)
|
||||
@test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot
|
||||
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
|
||||
if test -f "$(srcdir)/$${lang}.po"; then \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
|
||||
cd $(srcdir) \
|
||||
&& { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
|
||||
0.1[6-7] | 0.1[6-7].*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
|
||||
*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
|
||||
esac; \
|
||||
}; \
|
||||
else \
|
||||
$(MAKE) $${lang}.po-create; \
|
||||
fi
|
||||
|
||||
|
||||
install: install-exec install-data
|
||||
install-exec:
|
||||
install-data: install-data-yes
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
$(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
|
||||
for file in $(DISTFILES.common) Makevars.template; do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$file \
|
||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
for file in Makevars; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
install-data-no: all
|
||||
install-data-yes: all
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $(DESTDIR)$$dir; \
|
||||
if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
|
||||
$(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
|
||||
echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
|
||||
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
if test -n "$$lc"; then \
|
||||
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||
for file in *; do \
|
||||
if test -f $$file; then \
|
||||
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||
fi; \
|
||||
done); \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
else \
|
||||
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||
:; \
|
||||
else \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
fi; \
|
||||
fi; \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||
ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||
cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
|
||||
fi; \
|
||||
done; \
|
||||
done
|
||||
|
||||
install-strip: install
|
||||
|
||||
installdirs: installdirs-exec installdirs-data
|
||||
installdirs-exec:
|
||||
installdirs-data: installdirs-data-yes
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
$(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
installdirs-data-no:
|
||||
installdirs-data-yes:
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $(DESTDIR)$$dir; \
|
||||
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
if test -n "$$lc"; then \
|
||||
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||
for file in *; do \
|
||||
if test -f $$file; then \
|
||||
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||
fi; \
|
||||
done); \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
else \
|
||||
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||
:; \
|
||||
else \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
fi; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
done
|
||||
|
||||
# Define this as empty until I found a useful application.
|
||||
installcheck:
|
||||
|
||||
uninstall: uninstall-exec uninstall-data
|
||||
uninstall-exec:
|
||||
uninstall-data: uninstall-data-yes
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
for file in $(DISTFILES.common) Makevars.template; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
uninstall-data-no:
|
||||
uninstall-data-yes:
|
||||
catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
done; \
|
||||
done
|
||||
|
||||
check: all
|
||||
|
||||
info dvi ps pdf html tags TAGS ctags CTAGS ID:
|
||||
|
||||
install-dvi install-ps install-pdf install-html:
|
||||
|
||||
mostlyclean:
|
||||
rm -f remove-potcdate.sed
|
||||
rm -f $(srcdir)/stamp-poT
|
||||
rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
|
||||
rm -fr *.o
|
||||
|
||||
clean: mostlyclean
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile Makefile.in POTFILES
|
||||
|
||||
maintainer-clean: distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES)
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist distdir:
|
||||
test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
|
||||
@$(MAKE) dist2
|
||||
# This is a separate target because 'update-po' must be executed before.
|
||||
dist2: $(srcdir)/stamp-po $(DISTFILES)
|
||||
@dists="$(DISTFILES)"; \
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
dists="$$dists Makevars.template"; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||
dists="$$dists $(DOMAIN).pot stamp-po"; \
|
||||
else \
|
||||
case $(XGETTEXT) in \
|
||||
:) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \
|
||||
*) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \
|
||||
esac; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/ChangeLog; then \
|
||||
dists="$$dists ChangeLog"; \
|
||||
fi; \
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do \
|
||||
if test -f $(srcdir)/ChangeLog.$$i; then \
|
||||
dists="$$dists ChangeLog.$$i"; \
|
||||
fi; \
|
||||
done; \
|
||||
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
|
||||
for file in $$dists; do \
|
||||
if test -f $$file; then \
|
||||
cp -p $$file $(distdir) || exit 1; \
|
||||
else \
|
||||
cp -p $(srcdir)/$$file $(distdir) || exit 1; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
update-po: Makefile
|
||||
$(MAKE) $(DOMAIN).pot-update
|
||||
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
|
||||
$(MAKE) update-gmo
|
||||
|
||||
# General rule for creating PO files.
|
||||
|
||||
.nop.po-create:
|
||||
@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
|
||||
echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
|
||||
exit 1
|
||||
|
||||
# General rule for updating PO files.
|
||||
|
||||
.nop.po-update:
|
||||
@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
|
||||
if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
|
||||
tmpdir=`pwd`; \
|
||||
echo "$$lang:"; \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
|
||||
cd $(srcdir); \
|
||||
if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
0.1[6-7] | 0.1[6-7].*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
esac; \
|
||||
}; then \
|
||||
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
else \
|
||||
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||
:; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed!" 1>&2; \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
fi
|
||||
|
||||
$(DUMMYPOFILES):
|
||||
|
||||
update-gmo: Makefile $(GMOFILES)
|
||||
@:
|
||||
|
||||
# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
|
||||
# because execution permission bits may not work on the current file system.
|
||||
# Use /bin/sh, which is the shell determined by autoconf for the use by its
|
||||
# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
|
||||
Makefile: Makefile.in.in Makevars $(top_builddir)/config.status POTFILES.in LINGUAS
|
||||
cd $(top_builddir) \
|
||||
&& /bin/sh ./config.status $(subdir)/$@.in po-directories
|
||||
|
||||
force:
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
# Special Makefile rules for English message catalogs with quotation marks.
|
||||
#
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
# This file, Rules-quot, and its auxiliary files (listed under
|
||||
# DISTFILES.common.extra1) are free software; the Free Software Foundation
|
||||
# gives unlimited permission to use, copy, distribute, and modify them.
|
||||
|
||||
DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
|
||||
|
||||
.SUFFIXES: .insert-header .po-update-en
|
||||
|
||||
en@quot.po-create:
|
||||
$(MAKE) en@quot.po-update
|
||||
en@boldquot.po-create:
|
||||
$(MAKE) en@boldquot.po-update
|
||||
|
||||
en@quot.po-update: en@quot.po-update-en
|
||||
en@boldquot.po-update: en@boldquot.po-update-en
|
||||
|
||||
.insert-header.po-update-en:
|
||||
@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
|
||||
if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
|
||||
tmpdir=`pwd`; \
|
||||
echo "$$lang:"; \
|
||||
ll=`echo $$lang | sed -e 's/@.*//'`; \
|
||||
LC_ALL=C; export LC_ALL; \
|
||||
cd $(srcdir); \
|
||||
if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
|
||||
| $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
|
||||
{ case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
|
||||
$(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
|
||||
;; \
|
||||
*) \
|
||||
$(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
|
||||
;; \
|
||||
esac } 2>/dev/null > $$tmpdir/$$lang.new.po \
|
||||
; then \
|
||||
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
else \
|
||||
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||
:; \
|
||||
else \
|
||||
echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
echo "creation of $$lang.po failed!" 1>&2; \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
fi
|
||||
|
||||
en@quot.insert-header: insert-header.sin
|
||||
sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
|
||||
|
||||
en@boldquot.insert-header: insert-header.sin
|
||||
sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
|
||||
|
||||
mostlyclean: mostlyclean-quot
|
||||
mostlyclean-quot:
|
||||
rm -f *.insert-header
|
||||
510
po/Makefile.in
Normal file
510
po/Makefile.in
Normal file
@@ -0,0 +1,510 @@
|
||||
# Makefile for PO directory in any package using GNU gettext.
|
||||
# Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
||||
# Copyright (C) 2000-2020 Free Software Foundation, Inc.
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification,
|
||||
# are permitted in any medium without royalty provided the copyright
|
||||
# notice and this notice are preserved. This file is offered as-is,
|
||||
# without any warranty.
|
||||
#
|
||||
# Origin: gettext-0.21
|
||||
GETTEXT_MACRO_VERSION = 0.20
|
||||
|
||||
PACKAGE = ipx-utils
|
||||
VERSION = 1.4
|
||||
PACKAGE_BUGREPORT = mario.fetka@disconnected-by-peer.at
|
||||
|
||||
SED = /usr/bin/sed
|
||||
SHELL = /bin/sh
|
||||
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
|
||||
|
||||
prefix = /usr
|
||||
exec_prefix = ${prefix}
|
||||
datarootdir = ${prefix}/share
|
||||
datadir = ${datarootdir}
|
||||
localedir = ${datarootdir}/locale
|
||||
gettextsrcdir = $(datadir)/gettext/po
|
||||
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
|
||||
# We use $(mkdir_p).
|
||||
# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
|
||||
# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
|
||||
# ${SHELL} /home/mario/mars/ipx-utils/install-sh does not start with $(SHELL), so we add it.
|
||||
# In automake >= 1.10, $(MKDIR_P) is derived from ${MKDIR_P}, which is defined
|
||||
# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
|
||||
# versions, $(mkinstalldirs) and $(install_sh) are unused.
|
||||
mkinstalldirs = $(SHELL) ${SHELL} /home/mario/mars/ipx-utils/install-sh -d
|
||||
install_sh = $(SHELL) ${SHELL} /home/mario/mars/ipx-utils/install-sh
|
||||
MKDIR_P = /usr/bin/mkdir -p
|
||||
mkdir_p = $(MKDIR_P)
|
||||
|
||||
# When building gettext-tools, we prefer to use the built programs
|
||||
# rather than installed programs. However, we can't do that when we
|
||||
# are cross compiling.
|
||||
CROSS_COMPILING = @CROSS_COMPILING@
|
||||
|
||||
GMSGFMT_ = /usr/bin/gmsgfmt
|
||||
GMSGFMT_no = /usr/bin/gmsgfmt
|
||||
GMSGFMT_yes = /usr/bin/gmsgfmt
|
||||
GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
|
||||
XGETTEXT_ = /usr/bin/xgettext
|
||||
XGETTEXT_no = /usr/bin/xgettext
|
||||
XGETTEXT_yes = /usr/bin/xgettext
|
||||
XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
|
||||
MSGMERGE = /usr/bin/msgmerge
|
||||
MSGMERGE_UPDATE = /usr/bin/msgmerge --update
|
||||
MSGMERGE_FOR_MSGFMT_OPTION = --for-msgfmt
|
||||
MSGINIT = msginit
|
||||
MSGCONV = msgconv
|
||||
MSGFILTER = msgfilter
|
||||
|
||||
POFILES = @POFILES@
|
||||
GMOFILES = @GMOFILES@
|
||||
UPDATEPOFILES = @UPDATEPOFILES@
|
||||
DUMMYPOFILES = @DUMMYPOFILES@
|
||||
DISTFILES.common = Makefile.in.in remove-potcdate.sin \
|
||||
$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
|
||||
DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
|
||||
$(POFILES) $(GMOFILES) \
|
||||
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
|
||||
|
||||
POTFILES = \
|
||||
|
||||
CATALOGS = @CATALOGS@
|
||||
|
||||
POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
|
||||
POFILESDEPS_yes = $(POFILESDEPS_)
|
||||
POFILESDEPS_no =
|
||||
POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
|
||||
|
||||
DISTFILESDEPS_ = update-po
|
||||
DISTFILESDEPS_yes = $(DISTFILESDEPS_)
|
||||
DISTFILESDEPS_no =
|
||||
DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
|
||||
|
||||
# Makevars gets inserted here. (Don't remove this line!)
|
||||
|
||||
all: all-yes
|
||||
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update
|
||||
|
||||
# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
|
||||
# The GNU Coding Standards say in
|
||||
# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
|
||||
# "GNU distributions usually contain some files which are not source files
|
||||
# ... . Since these files normally appear in the source directory, they
|
||||
# should always appear in the source directory, not in the build directory.
|
||||
# So Makefile rules to update them should put the updated files in the
|
||||
# source directory."
|
||||
# Therefore we put these files in the source directory, not the build directory.
|
||||
|
||||
# During .po -> .gmo conversion, take into account the most recent changes to
|
||||
# the .pot file. This eliminates the need to update the .po files when the
|
||||
# .pot file has changed, which would be troublesome if the .po files are put
|
||||
# under version control.
|
||||
$(GMOFILES): $(srcdir)/$(DOMAIN).pot
|
||||
.po.gmo:
|
||||
@lang=`echo $* | sed -e 's,.*/,,'`; \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
|
||||
cd $(srcdir) && \
|
||||
rm -f $${lang}.gmo && \
|
||||
$(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
|
||||
$(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
|
||||
mv t-$${lang}.gmo $${lang}.gmo && \
|
||||
rm -f $${lang}.1po
|
||||
|
||||
.sin.sed:
|
||||
sed -e '/^#/d' $< > t-$@
|
||||
mv t-$@ $@
|
||||
|
||||
|
||||
all-yes: $(srcdir)/stamp-po
|
||||
all-no:
|
||||
|
||||
# Ensure that the gettext macros and this Makefile.in.in are in sync.
|
||||
CHECK_MACRO_VERSION = \
|
||||
test "$(GETTEXT_MACRO_VERSION)" = "0.20" \
|
||||
|| { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version 0.20" 1>&2; \
|
||||
exit 1; \
|
||||
}
|
||||
|
||||
# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
|
||||
# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
|
||||
# we don't want to bother translators with empty POT files). We assume that
|
||||
# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
|
||||
# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
|
||||
|
||||
# $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS
|
||||
# have been loosely updated. Its purpose is that when a developer or translator
|
||||
# checks out the package from a version control system, and the $(DOMAIN).pot
|
||||
# file is not under version control, "make" will update the $(DOMAIN).pot and
|
||||
# the $(CATALOGS), but subsequent invocations of "make" will do nothing. This
|
||||
# timestamp would not be necessary if updating the $(CATALOGS) would always
|
||||
# touch them; however, the rule for $(POFILES) has been designed to not touch
|
||||
# files that don't need to be changed.
|
||||
$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
|
||||
@$(CHECK_MACRO_VERSION)
|
||||
test ! -f $(srcdir)/$(DOMAIN).pot || \
|
||||
test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
|
||||
@test ! -f $(srcdir)/$(DOMAIN).pot || { \
|
||||
echo "touch $(srcdir)/stamp-po" && \
|
||||
echo timestamp > $(srcdir)/stamp-poT && \
|
||||
mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
|
||||
}
|
||||
|
||||
# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
|
||||
# otherwise packages like GCC can not be built if only parts of the source
|
||||
# have been downloaded.
|
||||
|
||||
# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
|
||||
# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
|
||||
# The determination of whether the package xyz is a GNU one is based on the
|
||||
# heuristic whether some file in the top level directory mentions "GNU xyz".
|
||||
# If GNU 'find' is available, we avoid grepping through monster files.
|
||||
$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
|
||||
package_gnu="$(PACKAGE_GNU)"; \
|
||||
test -n "$$package_gnu" || { \
|
||||
if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
|
||||
LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU ipx-utils' /dev/null '{}' ';' 2>/dev/null; \
|
||||
else \
|
||||
LC_ALL=C grep -i 'GNU ipx-utils' $(top_srcdir)/* 2>/dev/null; \
|
||||
fi; \
|
||||
} | grep -v 'libtool:' >/dev/null; then \
|
||||
package_gnu=yes; \
|
||||
else \
|
||||
package_gnu=no; \
|
||||
fi; \
|
||||
}; \
|
||||
if test "$$package_gnu" = "yes"; then \
|
||||
package_prefix='GNU '; \
|
||||
else \
|
||||
package_prefix=''; \
|
||||
fi; \
|
||||
if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
|
||||
msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
|
||||
else \
|
||||
msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
|
||||
fi; \
|
||||
case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
|
||||
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||
--add-comments=TRANSLATORS: \
|
||||
--files-from=$(srcdir)/POTFILES.in \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--msgid-bugs-address="$$msgid_bugs_address" \
|
||||
$(XGETTEXT_OPTIONS) \
|
||||
;; \
|
||||
*) \
|
||||
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||
--add-comments=TRANSLATORS: \
|
||||
--files-from=$(srcdir)/POTFILES.in \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--package-name="$${package_prefix}ipx-utils" \
|
||||
--package-version='1.4' \
|
||||
--msgid-bugs-address="$$msgid_bugs_address" \
|
||||
$(XGETTEXT_OPTIONS) \
|
||||
;; \
|
||||
esac
|
||||
test ! -f $(DOMAIN).po || { \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot-header; then \
|
||||
sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
|
||||
cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
|
||||
rm -f $(DOMAIN).1po \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||
sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
|
||||
sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
|
||||
if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
|
||||
rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
|
||||
else \
|
||||
rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
|
||||
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||
fi; \
|
||||
else \
|
||||
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||
fi; \
|
||||
}
|
||||
|
||||
# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
|
||||
# every "make" invocation, only create it when it is missing.
|
||||
# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
|
||||
$(srcdir)/$(DOMAIN).pot:
|
||||
$(MAKE) $(DOMAIN).pot-update
|
||||
|
||||
# This target rebuilds a PO file if $(DOMAIN).pot has changed.
|
||||
# Note that a PO file is not touched if it doesn't need to be changed.
|
||||
$(POFILES): $(POFILESDEPS)
|
||||
@test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot
|
||||
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
|
||||
if test -f "$(srcdir)/$${lang}.po"; then \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
|
||||
cd $(srcdir) \
|
||||
&& { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
|
||||
0.1[6-7] | 0.1[6-7].*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
|
||||
*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
|
||||
esac; \
|
||||
}; \
|
||||
else \
|
||||
$(MAKE) $${lang}.po-create; \
|
||||
fi
|
||||
|
||||
|
||||
install: install-exec install-data
|
||||
install-exec:
|
||||
install-data: install-data-yes
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
$(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
|
||||
for file in $(DISTFILES.common) Makevars.template; do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$file \
|
||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
for file in Makevars; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
install-data-no: all
|
||||
install-data-yes: all
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $(DESTDIR)$$dir; \
|
||||
if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
|
||||
$(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
|
||||
echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
|
||||
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
if test -n "$$lc"; then \
|
||||
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||
for file in *; do \
|
||||
if test -f $$file; then \
|
||||
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||
fi; \
|
||||
done); \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
else \
|
||||
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||
:; \
|
||||
else \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
fi; \
|
||||
fi; \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||
ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||
cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
|
||||
fi; \
|
||||
done; \
|
||||
done
|
||||
|
||||
install-strip: install
|
||||
|
||||
installdirs: installdirs-exec installdirs-data
|
||||
installdirs-exec:
|
||||
installdirs-data: installdirs-data-yes
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
$(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
installdirs-data-no:
|
||||
installdirs-data-yes:
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $(DESTDIR)$$dir; \
|
||||
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
if test -n "$$lc"; then \
|
||||
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||
for file in *; do \
|
||||
if test -f $$file; then \
|
||||
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||
fi; \
|
||||
done); \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
else \
|
||||
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||
:; \
|
||||
else \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
fi; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
done
|
||||
|
||||
# Define this as empty until I found a useful application.
|
||||
installcheck:
|
||||
|
||||
uninstall: uninstall-exec uninstall-data
|
||||
uninstall-exec:
|
||||
uninstall-data: uninstall-data-yes
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
for file in $(DISTFILES.common) Makevars.template; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
uninstall-data-no:
|
||||
uninstall-data-yes:
|
||||
catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
done; \
|
||||
done
|
||||
|
||||
check: all
|
||||
|
||||
info dvi ps pdf html tags TAGS ctags CTAGS ID:
|
||||
|
||||
install-dvi install-ps install-pdf install-html:
|
||||
|
||||
mostlyclean:
|
||||
rm -f remove-potcdate.sed
|
||||
rm -f $(srcdir)/stamp-poT
|
||||
rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
|
||||
rm -fr *.o
|
||||
|
||||
clean: mostlyclean
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile Makefile.in POTFILES
|
||||
|
||||
maintainer-clean: distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES)
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist distdir:
|
||||
test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
|
||||
@$(MAKE) dist2
|
||||
# This is a separate target because 'update-po' must be executed before.
|
||||
dist2: $(srcdir)/stamp-po $(DISTFILES)
|
||||
@dists="$(DISTFILES)"; \
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
dists="$$dists Makevars.template"; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||
dists="$$dists $(DOMAIN).pot stamp-po"; \
|
||||
else \
|
||||
case $(XGETTEXT) in \
|
||||
:) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \
|
||||
*) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \
|
||||
esac; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/ChangeLog; then \
|
||||
dists="$$dists ChangeLog"; \
|
||||
fi; \
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do \
|
||||
if test -f $(srcdir)/ChangeLog.$$i; then \
|
||||
dists="$$dists ChangeLog.$$i"; \
|
||||
fi; \
|
||||
done; \
|
||||
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
|
||||
for file in $$dists; do \
|
||||
if test -f $$file; then \
|
||||
cp -p $$file $(distdir) || exit 1; \
|
||||
else \
|
||||
cp -p $(srcdir)/$$file $(distdir) || exit 1; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
update-po: Makefile
|
||||
$(MAKE) $(DOMAIN).pot-update
|
||||
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
|
||||
$(MAKE) update-gmo
|
||||
|
||||
# General rule for creating PO files.
|
||||
|
||||
.nop.po-create:
|
||||
@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
|
||||
echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
|
||||
exit 1
|
||||
|
||||
# General rule for updating PO files.
|
||||
|
||||
.nop.po-update:
|
||||
@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
|
||||
if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
|
||||
tmpdir=`pwd`; \
|
||||
echo "$$lang:"; \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
|
||||
cd $(srcdir); \
|
||||
if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
0.1[6-7] | 0.1[6-7].*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
esac; \
|
||||
}; then \
|
||||
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
else \
|
||||
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||
:; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed!" 1>&2; \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
fi
|
||||
|
||||
$(DUMMYPOFILES):
|
||||
|
||||
update-gmo: Makefile $(GMOFILES)
|
||||
@:
|
||||
|
||||
# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
|
||||
# because execution permission bits may not work on the current file system.
|
||||
# Use /bin/sh, which is the shell determined by autoconf for the use by its
|
||||
# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
|
||||
Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
|
||||
cd $(top_builddir) \
|
||||
&& /bin/sh ./config.status $(subdir)/$@.in po-directories
|
||||
|
||||
force:
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
7
po/POTFILES
Normal file
7
po/POTFILES
Normal file
@@ -0,0 +1,7 @@
|
||||
../src/ipx_configure.c \
|
||||
../src/ipx_interface.c \
|
||||
../src/ipx_internal_net.c \
|
||||
../src/ipx_route.c \
|
||||
../src/ipx_cmd.c \
|
||||
../tools/ipxdump.c \
|
||||
../tools/ipxparse.c
|
||||
1
po/stamp-po
Normal file
1
po/stamp-po
Normal file
@@ -0,0 +1 @@
|
||||
timestamp
|
||||
Reference in New Issue
Block a user