Add SCTP support with the --sctp flag (Linux and FreeBSD only).
Note this option only has a long option flag; we're running out of letters for short options. Based heavily on a patch submitted in Issue 131 (SCTP support for iperf); I added support for FreeBSD and did some other packaging and documentation improvements. We probably shouldn't tie SCTP support to looking specifically for Linux or FreeBSD; we probably leave support enabled all the time if possible, possibly with some configure-time checks.
Этот коммит содержится в:
родитель
d076653bd4
Коммит
60bd98a538
526
Makefile.in
526
Makefile.in
@ -1,8 +1,8 @@
|
|||||||
# Makefile.in generated by automake 1.10 from Makefile.am.
|
# Makefile.in generated by automake 1.14 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
||||||
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
# with or without modifications, as long as this notice is preserved.
|
# with or without modifications, as long as this notice is preserved.
|
||||||
@ -14,9 +14,55 @@
|
|||||||
|
|
||||||
@SET_MAKE@
|
@SET_MAKE@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
|
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
|
||||||
|
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))
|
||||||
pkgdatadir = $(datadir)/@PACKAGE@
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
pkglibdir = $(libdir)/@PACKAGE@
|
|
||||||
pkgincludedir = $(includedir)/@PACKAGE@
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
|
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||||
install_sh_DATA = $(install_sh) -c -m 644
|
install_sh_DATA = $(install_sh) -c -m 644
|
||||||
install_sh_PROGRAM = $(install_sh) -c
|
install_sh_PROGRAM = $(install_sh) -c
|
||||||
@ -32,11 +78,16 @@ POST_UNINSTALL = :
|
|||||||
build_triplet = @build@
|
build_triplet = @build@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
subdir = .
|
subdir = .
|
||||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||||
$(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS INSTALL \
|
$(top_srcdir)/configure $(am__configure_deps) \
|
||||||
TODO config/compile config/config.guess config/config.sub \
|
$(top_srcdir)/config/mkinstalldirs AUTHORS INSTALL README TODO \
|
||||||
config/depcomp config/install-sh config/ltmain.sh \
|
config/compile config/config.guess config/config.sub \
|
||||||
config/missing config/mkinstalldirs
|
config/depcomp config/install-sh config/missing \
|
||||||
|
config/mkinstalldirs config/ltmain.sh \
|
||||||
|
$(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
|
||||||
|
$(top_srcdir)/config/config.sub \
|
||||||
|
$(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
|
||||||
|
$(top_srcdir)/config/missing
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
@ -46,33 +97,108 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
|||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||||
CONFIG_HEADER = $(top_builddir)/src/config.h
|
CONFIG_HEADER = $(top_builddir)/src/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
|
CONFIG_CLEAN_VPATH_FILES =
|
||||||
|
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 =
|
||||||
SOURCES =
|
SOURCES =
|
||||||
DIST_SOURCES =
|
DIST_SOURCES =
|
||||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
|
||||||
html-recursive info-recursive install-data-recursive \
|
ctags-recursive dvi-recursive html-recursive info-recursive \
|
||||||
install-dvi-recursive install-exec-recursive \
|
install-data-recursive install-dvi-recursive \
|
||||||
install-html-recursive install-info-recursive \
|
install-exec-recursive install-html-recursive \
|
||||||
install-pdf-recursive install-ps-recursive install-recursive \
|
install-info-recursive install-pdf-recursive \
|
||||||
installcheck-recursive installdirs-recursive pdf-recursive \
|
install-ps-recursive install-recursive installcheck-recursive \
|
||||||
ps-recursive uninstall-recursive
|
installdirs-recursive pdf-recursive ps-recursive \
|
||||||
|
tags-recursive uninstall-recursive
|
||||||
|
am__can_run_installinfo = \
|
||||||
|
case $$AM_UPDATE_INFO_DIR in \
|
||||||
|
n|no|NO) false;; \
|
||||||
|
*) (install-info --version) >/dev/null 2>&1;; \
|
||||||
|
esac
|
||||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||||
distclean-recursive maintainer-clean-recursive
|
distclean-recursive maintainer-clean-recursive
|
||||||
|
am__recursive_targets = \
|
||||||
|
$(RECURSIVE_TARGETS) \
|
||||||
|
$(RECURSIVE_CLEAN_TARGETS) \
|
||||||
|
$(am__extra_recursive_targets)
|
||||||
|
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
||||||
|
cscope distdir dist dist-all distcheck
|
||||||
|
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)`
|
||||||
ETAGS = etags
|
ETAGS = etags
|
||||||
CTAGS = ctags
|
CTAGS = ctags
|
||||||
|
CSCOPE = cscope
|
||||||
DIST_SUBDIRS = $(SUBDIRS)
|
DIST_SUBDIRS = $(SUBDIRS)
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
distdir = $(PACKAGE)-$(VERSION)
|
distdir = $(PACKAGE)-$(VERSION)
|
||||||
top_distdir = $(distdir)
|
top_distdir = $(distdir)
|
||||||
am__remove_distdir = \
|
am__remove_distdir = \
|
||||||
{ test ! -d $(distdir) \
|
if test -d "$(distdir)"; then \
|
||||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||||
&& rm -fr $(distdir); }; }
|
&& rm -rf "$(distdir)" \
|
||||||
|
|| { sleep 5 && rm -rf "$(distdir)"; }; \
|
||||||
|
else :; fi
|
||||||
|
am__post_remove_distdir = $(am__remove_distdir)
|
||||||
|
am__relativize = \
|
||||||
|
dir0=`pwd`; \
|
||||||
|
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
||||||
|
sed_rest='s,^[^/]*/*,,'; \
|
||||||
|
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
||||||
|
sed_butlast='s,/*[^/]*$$,,'; \
|
||||||
|
while test -n "$$dir1"; do \
|
||||||
|
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
||||||
|
if test "$$first" != "."; then \
|
||||||
|
if test "$$first" = ".."; then \
|
||||||
|
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
||||||
|
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
||||||
|
else \
|
||||||
|
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
||||||
|
if test "$$first2" = "$$first"; then \
|
||||||
|
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
||||||
|
else \
|
||||||
|
dir2="../$$dir2"; \
|
||||||
|
fi; \
|
||||||
|
dir0="$$dir0"/"$$first"; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
||||||
|
done; \
|
||||||
|
reldir="$$dir2"
|
||||||
DIST_ARCHIVES = $(distdir).tar.gz
|
DIST_ARCHIVES = $(distdir).tar.gz
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
|
DIST_TARGETS = dist-gzip
|
||||||
distuninstallcheck_listfiles = find . -type f -print
|
distuninstallcheck_listfiles = find . -type f -print
|
||||||
|
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||||
|
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||||
distcleancheck_listfiles = find . -type f -print
|
distcleancheck_listfiles = find . -type f -print
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
AR = @AR@
|
AR = @AR@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
@ -86,6 +212,7 @@ CPPFLAGS = @CPPFLAGS@
|
|||||||
CYGPATH_W = @CYGPATH_W@
|
CYGPATH_W = @CYGPATH_W@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
|
DLLTOOL = @DLLTOOL@
|
||||||
DSYMUTIL = @DSYMUTIL@
|
DSYMUTIL = @DSYMUTIL@
|
||||||
DUMPBIN = @DUMPBIN@
|
DUMPBIN = @DUMPBIN@
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
@ -109,9 +236,11 @@ LIPO = @LIPO@
|
|||||||
LN_S = @LN_S@
|
LN_S = @LN_S@
|
||||||
LTLIBOBJS = @LTLIBOBJS@
|
LTLIBOBJS = @LTLIBOBJS@
|
||||||
MAKEINFO = @MAKEINFO@
|
MAKEINFO = @MAKEINFO@
|
||||||
|
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||||
MKDIR_P = @MKDIR_P@
|
MKDIR_P = @MKDIR_P@
|
||||||
NM = @NM@
|
NM = @NM@
|
||||||
NMEDIT = @NMEDIT@
|
NMEDIT = @NMEDIT@
|
||||||
|
OBJDUMP = @OBJDUMP@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
OTOOL = @OTOOL@
|
OTOOL = @OTOOL@
|
||||||
OTOOL64 = @OTOOL64@
|
OTOOL64 = @OTOOL64@
|
||||||
@ -120,6 +249,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|||||||
PACKAGE_NAME = @PACKAGE_NAME@
|
PACKAGE_NAME = @PACKAGE_NAME@
|
||||||
PACKAGE_STRING = @PACKAGE_STRING@
|
PACKAGE_STRING = @PACKAGE_STRING@
|
||||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
|
PACKAGE_URL = @PACKAGE_URL@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
@ -132,6 +262,7 @@ abs_builddir = @abs_builddir@
|
|||||||
abs_srcdir = @abs_srcdir@
|
abs_srcdir = @abs_srcdir@
|
||||||
abs_top_builddir = @abs_top_builddir@
|
abs_top_builddir = @abs_top_builddir@
|
||||||
abs_top_srcdir = @abs_top_srcdir@
|
abs_top_srcdir = @abs_top_srcdir@
|
||||||
|
ac_ct_AR = @ac_ct_AR@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
@ -164,7 +295,6 @@ libdir = @libdir@
|
|||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localedir = @localedir@
|
localedir = @localedir@
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
lt_ECHO = @lt_ECHO@
|
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
oldincludedir = @oldincludedir@
|
oldincludedir = @oldincludedir@
|
||||||
@ -177,27 +307,28 @@ sharedstatedir = @sharedstatedir@
|
|||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
sysconfdir = @sysconfdir@
|
sysconfdir = @sysconfdir@
|
||||||
target_alias = @target_alias@
|
target_alias = @target_alias@
|
||||||
|
top_build_prefix = @top_build_prefix@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
SUBDIRS = src
|
SUBDIRS = src
|
||||||
all: all-recursive
|
all: all-recursive
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
am--refresh:
|
am--refresh: Makefile
|
||||||
@:
|
@:
|
||||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||||
@for dep in $?; do \
|
@for dep in $?; do \
|
||||||
case '$(am__configure_deps)' in \
|
case '$(am__configure_deps)' in \
|
||||||
*$$dep*) \
|
*$$dep*) \
|
||||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
|
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
|
||||||
cd $(srcdir) && $(AUTOMAKE) --foreign \
|
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
|
||||||
&& exit 0; \
|
&& exit 0; \
|
||||||
exit 1;; \
|
exit 1;; \
|
||||||
esac; \
|
esac; \
|
||||||
done; \
|
done; \
|
||||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||||
cd $(top_srcdir) && \
|
$(am__cd) $(top_srcdir) && \
|
||||||
$(AUTOMAKE) --foreign Makefile
|
$(AUTOMAKE) --foreign Makefile
|
||||||
.PRECIOUS: Makefile
|
.PRECIOUS: Makefile
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
@case '$?' in \
|
@case '$?' in \
|
||||||
@ -213,9 +344,10 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC
|
|||||||
$(SHELL) ./config.status --recheck
|
$(SHELL) ./config.status --recheck
|
||||||
|
|
||||||
$(top_srcdir)/configure: $(am__configure_deps)
|
$(top_srcdir)/configure: $(am__configure_deps)
|
||||||
cd $(srcdir) && $(AUTOCONF)
|
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||||
|
$(am__aclocal_m4_deps):
|
||||||
|
|
||||||
mostlyclean-libtool:
|
mostlyclean-libtool:
|
||||||
-rm -f *.lo
|
-rm -f *.lo
|
||||||
@ -224,25 +356,28 @@ clean-libtool:
|
|||||||
-rm -rf .libs _libs
|
-rm -rf .libs _libs
|
||||||
|
|
||||||
distclean-libtool:
|
distclean-libtool:
|
||||||
-rm -f libtool
|
-rm -f libtool config.lt
|
||||||
|
|
||||||
# This directory's subdirectories are mostly independent; you can cd
|
# This directory's subdirectories are mostly independent; you can cd
|
||||||
# into them and run `make' without going through this Makefile.
|
# into them and run 'make' without going through this Makefile.
|
||||||
# To change the values of `make' variables: instead of editing Makefiles,
|
# To change the values of 'make' variables: instead of editing Makefiles,
|
||||||
# (1) if the variable is set in `config.status', edit `config.status'
|
# (1) if the variable is set in 'config.status', edit 'config.status'
|
||||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
# (which will cause the Makefiles to be regenerated when you run 'make');
|
||||||
# (2) otherwise, pass the desired values on the `make' command line.
|
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||||
$(RECURSIVE_TARGETS):
|
$(am__recursive_targets):
|
||||||
@failcom='exit 1'; \
|
@fail=; \
|
||||||
for f in x $$MAKEFLAGS; do \
|
if $(am__make_keepgoing); then \
|
||||||
case $$f in \
|
failcom='fail=yes'; \
|
||||||
*=* | --[!k]*);; \
|
else \
|
||||||
*k*) failcom='fail=yes';; \
|
failcom='exit 1'; \
|
||||||
esac; \
|
fi; \
|
||||||
done; \
|
|
||||||
dot_seen=no; \
|
dot_seen=no; \
|
||||||
target=`echo $@ | sed s/-recursive//`; \
|
target=`echo $@ | sed s/-recursive//`; \
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
case "$@" in \
|
||||||
|
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||||
|
*) list='$(SUBDIRS)' ;; \
|
||||||
|
esac; \
|
||||||
|
for subdir in $$list; do \
|
||||||
echo "Making $$target in $$subdir"; \
|
echo "Making $$target in $$subdir"; \
|
||||||
if test "$$subdir" = "."; then \
|
if test "$$subdir" = "."; then \
|
||||||
dot_seen=yes; \
|
dot_seen=yes; \
|
||||||
@ -250,65 +385,20 @@ $(RECURSIVE_TARGETS):
|
|||||||
else \
|
else \
|
||||||
local_target="$$target"; \
|
local_target="$$target"; \
|
||||||
fi; \
|
fi; \
|
||||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||||
|| eval $$failcom; \
|
|| eval $$failcom; \
|
||||||
done; \
|
done; \
|
||||||
if test "$$dot_seen" = "no"; then \
|
if test "$$dot_seen" = "no"; then \
|
||||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||||
fi; test -z "$$fail"
|
fi; test -z "$$fail"
|
||||||
|
|
||||||
$(RECURSIVE_CLEAN_TARGETS):
|
ID: $(am__tagged_files)
|
||||||
@failcom='exit 1'; \
|
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||||
for f in x $$MAKEFLAGS; do \
|
tags: tags-recursive
|
||||||
case $$f in \
|
TAGS: tags
|
||||||
*=* | --[!k]*);; \
|
|
||||||
*k*) failcom='fail=yes';; \
|
|
||||||
esac; \
|
|
||||||
done; \
|
|
||||||
dot_seen=no; \
|
|
||||||
case "$@" in \
|
|
||||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
|
||||||
*) list='$(SUBDIRS)' ;; \
|
|
||||||
esac; \
|
|
||||||
rev=''; for subdir in $$list; do \
|
|
||||||
if test "$$subdir" = "."; then :; else \
|
|
||||||
rev="$$subdir $$rev"; \
|
|
||||||
fi; \
|
|
||||||
done; \
|
|
||||||
rev="$$rev ."; \
|
|
||||||
target=`echo $@ | sed s/-recursive//`; \
|
|
||||||
for subdir in $$rev; do \
|
|
||||||
echo "Making $$target in $$subdir"; \
|
|
||||||
if test "$$subdir" = "."; then \
|
|
||||||
local_target="$$target-am"; \
|
|
||||||
else \
|
|
||||||
local_target="$$target"; \
|
|
||||||
fi; \
|
|
||||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
||||||
|| eval $$failcom; \
|
|
||||||
done && test -z "$$fail"
|
|
||||||
tags-recursive:
|
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
||||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
|
||||||
done
|
|
||||||
ctags-recursive:
|
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
||||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
|
||||||
done
|
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
set x; \
|
||||||
unique=`for i in $$list; do \
|
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
||||||
done | \
|
|
||||||
$(AWK) ' { files[$$0] = 1; } \
|
|
||||||
END { for (i in files) print i; }'`; \
|
|
||||||
mkid -fID $$unique
|
|
||||||
tags: TAGS
|
|
||||||
|
|
||||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
||||||
$(TAGS_FILES) $(LISP)
|
|
||||||
tags=; \
|
|
||||||
here=`pwd`; \
|
here=`pwd`; \
|
||||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||||
include_option=--etags-include; \
|
include_option=--etags-include; \
|
||||||
@ -320,46 +410,63 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||||
if test "$$subdir" = .; then :; else \
|
if test "$$subdir" = .; then :; else \
|
||||||
test ! -f $$subdir/TAGS || \
|
test ! -f $$subdir/TAGS || \
|
||||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
||||||
fi; \
|
fi; \
|
||||||
done; \
|
done; \
|
||||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
$(am__define_uniq_tagged_files); \
|
||||||
unique=`for i in $$list; do \
|
shift; \
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||||
done | \
|
|
||||||
$(AWK) ' { files[$$0] = 1; } \
|
|
||||||
END { for (i in files) print i; }'`; \
|
|
||||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
||||||
test -n "$$unique" || unique=$$empty_fix; \
|
test -n "$$unique" || unique=$$empty_fix; \
|
||||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
if test $$# -gt 0; then \
|
||||||
$$tags $$unique; \
|
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||||
|
"$$@" $$unique; \
|
||||||
|
else \
|
||||||
|
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||||
|
$$unique; \
|
||||||
|
fi; \
|
||||||
fi
|
fi
|
||||||
ctags: CTAGS
|
ctags: ctags-recursive
|
||||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
||||||
$(TAGS_FILES) $(LISP)
|
CTAGS: ctags
|
||||||
tags=; \
|
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||||
here=`pwd`; \
|
$(am__define_uniq_tagged_files); \
|
||||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
test -z "$(CTAGS_ARGS)$$unique" \
|
||||||
unique=`for i in $$list; do \
|
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
||||||
done | \
|
|
||||||
$(AWK) ' { files[$$0] = 1; } \
|
|
||||||
END { for (i in files) print i; }'`; \
|
|
||||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
||||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||||
$$tags $$unique
|
$$unique
|
||||||
|
|
||||||
GTAGS:
|
GTAGS:
|
||||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||||
&& cd $(top_srcdir) \
|
&& $(am__cd) $(top_srcdir) \
|
||||||
&& gtags -i $(GTAGS_ARGS) $$here
|
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||||
|
cscope: cscope.files
|
||||||
|
test ! -s cscope.files \
|
||||||
|
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
|
||||||
|
clean-cscope:
|
||||||
|
-rm -f cscope.files
|
||||||
|
cscope.files: clean-cscope cscopelist
|
||||||
|
cscopelist: cscopelist-recursive
|
||||||
|
|
||||||
|
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:
|
distclean-tags:
|
||||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||||
|
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
||||||
|
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
$(am__remove_distdir)
|
$(am__remove_distdir)
|
||||||
test -d $(distdir) || mkdir $(distdir)
|
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||||
list='$(DISTFILES)'; \
|
list='$(DISTFILES)'; \
|
||||||
@ -375,62 +482,90 @@ distdir: $(DISTFILES)
|
|||||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||||
if test -d $$d/$$file; then \
|
if test -d $$d/$$file; then \
|
||||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
if test -d "$(distdir)/$$file"; then \
|
||||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||||
fi; \
|
fi; \
|
||||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
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 \
|
else \
|
||||||
test -f $(distdir)/$$file \
|
test -f "$(distdir)/$$file" \
|
||||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||||
|| exit 1; \
|
|| exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||||
if test "$$subdir" = .; then :; else \
|
if test "$$subdir" = .; then :; else \
|
||||||
test -d "$(distdir)/$$subdir" \
|
$(am__make_dryrun) \
|
||||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
|| test -d "$(distdir)/$$subdir" \
|
||||||
|| exit 1; \
|
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
|| exit 1; \
|
||||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
||||||
(cd $$subdir && \
|
$(am__relativize); \
|
||||||
|
new_distdir=$$reldir; \
|
||||||
|
dir1=$$subdir; dir2="$(top_distdir)"; \
|
||||||
|
$(am__relativize); \
|
||||||
|
new_top_distdir=$$reldir; \
|
||||||
|
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
||||||
|
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
||||||
|
($(am__cd) $$subdir && \
|
||||||
$(MAKE) $(AM_MAKEFLAGS) \
|
$(MAKE) $(AM_MAKEFLAGS) \
|
||||||
top_distdir="$$top_distdir" \
|
top_distdir="$$new_top_distdir" \
|
||||||
distdir="$$distdir/$$subdir" \
|
distdir="$$new_distdir" \
|
||||||
am__remove_distdir=: \
|
am__remove_distdir=: \
|
||||||
am__skip_length_check=: \
|
am__skip_length_check=: \
|
||||||
|
am__skip_mode_fix=: \
|
||||||
distdir) \
|
distdir) \
|
||||||
|| exit 1; \
|
|| exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
-test -n "$(am__skip_mode_fix)" \
|
||||||
|
|| find "$(distdir)" -type d ! -perm -755 \
|
||||||
|
-exec chmod u+rwx,go+rx {} \; -o \
|
||||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||||
|| chmod -R a+r $(distdir)
|
|| chmod -R a+r "$(distdir)"
|
||||||
dist-gzip: distdir
|
dist-gzip: distdir
|
||||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||||
$(am__remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-bzip2: distdir
|
dist-bzip2: distdir
|
||||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
|
||||||
$(am__remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
|
dist-lzip: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
|
||||||
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
|
dist-xz: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||||
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-tarZ: distdir
|
dist-tarZ: distdir
|
||||||
|
@echo WARNING: "Support for shar distribution archives is" \
|
||||||
|
"deprecated." >&2
|
||||||
|
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||||
$(am__remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-shar: distdir
|
dist-shar: distdir
|
||||||
|
@echo WARNING: "Support for distribution archives compressed with" \
|
||||||
|
"legacy program 'compress' is deprecated." >&2
|
||||||
|
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||||
$(am__remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-zip: distdir
|
dist-zip: distdir
|
||||||
-rm -f $(distdir).zip
|
-rm -f $(distdir).zip
|
||||||
zip -rq $(distdir).zip $(distdir)
|
zip -rq $(distdir).zip $(distdir)
|
||||||
$(am__remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist dist-all: distdir
|
dist dist-all:
|
||||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
|
||||||
$(am__remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
# This target untars the dist file and tries a VPATH configuration. Then
|
# This target untars the dist file and tries a VPATH configuration. Then
|
||||||
# it guarantees that the distribution is self-contained by making another
|
# it guarantees that the distribution is self-contained by making another
|
||||||
@ -438,24 +573,31 @@ dist dist-all: distdir
|
|||||||
distcheck: dist
|
distcheck: dist
|
||||||
case '$(DIST_ARCHIVES)' in \
|
case '$(DIST_ARCHIVES)' in \
|
||||||
*.tar.gz*) \
|
*.tar.gz*) \
|
||||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||||
*.tar.bz2*) \
|
*.tar.bz2*) \
|
||||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||||
|
*.tar.lz*) \
|
||||||
|
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
|
||||||
|
*.tar.xz*) \
|
||||||
|
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||||
*.tar.Z*) \
|
*.tar.Z*) \
|
||||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||||
*.shar.gz*) \
|
*.shar.gz*) \
|
||||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
|
||||||
*.zip*) \
|
*.zip*) \
|
||||||
unzip $(distdir).zip ;;\
|
unzip $(distdir).zip ;;\
|
||||||
esac
|
esac
|
||||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
chmod -R a-w $(distdir)
|
||||||
mkdir $(distdir)/_build
|
chmod u+w $(distdir)
|
||||||
mkdir $(distdir)/_inst
|
mkdir $(distdir)/_build $(distdir)/_inst
|
||||||
chmod a-w $(distdir)
|
chmod a-w $(distdir)
|
||||||
|
test -d $(distdir)/_build || exit 0; \
|
||||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||||
&& cd $(distdir)/_build \
|
&& am__cwd=`pwd` \
|
||||||
|
&& $(am__cd) $(distdir)/_build \
|
||||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||||
|
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||||
@ -476,14 +618,24 @@ distcheck: dist
|
|||||||
&& rm -rf "$$dc_destdir" \
|
&& rm -rf "$$dc_destdir" \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||||
&& rm -rf $(DIST_ARCHIVES) \
|
&& rm -rf $(DIST_ARCHIVES) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||||
$(am__remove_distdir)
|
&& cd "$$am__cwd" \
|
||||||
|
|| exit 1
|
||||||
|
$(am__post_remove_distdir)
|
||||||
@(echo "$(distdir) archives ready for distribution: "; \
|
@(echo "$(distdir) archives ready for distribution: "; \
|
||||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||||
distuninstallcheck:
|
distuninstallcheck:
|
||||||
@cd $(distuninstallcheck_dir) \
|
@test -n '$(distuninstallcheck_dir)' || { \
|
||||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
echo 'ERROR: trying to run $@ with an empty' \
|
||||||
|
'$$(distuninstallcheck_dir)' >&2; \
|
||||||
|
exit 1; \
|
||||||
|
}; \
|
||||||
|
$(am__cd) '$(distuninstallcheck_dir)' || { \
|
||||||
|
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
|
||||||
|
exit 1; \
|
||||||
|
}; \
|
||||||
|
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|
||||||
|| { echo "ERROR: files left after uninstall:" ; \
|
|| { echo "ERROR: files left after uninstall:" ; \
|
||||||
if test -n "$(DESTDIR)"; then \
|
if test -n "$(DESTDIR)"; then \
|
||||||
echo " (check DESTDIR support)"; \
|
echo " (check DESTDIR support)"; \
|
||||||
@ -514,16 +666,22 @@ install-am: all-am
|
|||||||
|
|
||||||
installcheck: installcheck-recursive
|
installcheck: installcheck-recursive
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
if test -z '$(STRIP)'; then \
|
||||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||||
`test -z '$(STRIP)' || \
|
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
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:
|
mostlyclean-generic:
|
||||||
|
|
||||||
clean-generic:
|
clean-generic:
|
||||||
|
|
||||||
distclean-generic:
|
distclean-generic:
|
||||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
@echo "This command is intended for maintainers to use"
|
@echo "This command is intended for maintainers to use"
|
||||||
@ -544,6 +702,8 @@ dvi-am:
|
|||||||
|
|
||||||
html: html-recursive
|
html: html-recursive
|
||||||
|
|
||||||
|
html-am:
|
||||||
|
|
||||||
info: info-recursive
|
info: info-recursive
|
||||||
|
|
||||||
info-am:
|
info-am:
|
||||||
@ -552,18 +712,28 @@ install-data-am:
|
|||||||
|
|
||||||
install-dvi: install-dvi-recursive
|
install-dvi: install-dvi-recursive
|
||||||
|
|
||||||
|
install-dvi-am:
|
||||||
|
|
||||||
install-exec-am:
|
install-exec-am:
|
||||||
|
|
||||||
install-html: install-html-recursive
|
install-html: install-html-recursive
|
||||||
|
|
||||||
|
install-html-am:
|
||||||
|
|
||||||
install-info: install-info-recursive
|
install-info: install-info-recursive
|
||||||
|
|
||||||
|
install-info-am:
|
||||||
|
|
||||||
install-man:
|
install-man:
|
||||||
|
|
||||||
install-pdf: install-pdf-recursive
|
install-pdf: install-pdf-recursive
|
||||||
|
|
||||||
|
install-pdf-am:
|
||||||
|
|
||||||
install-ps: install-ps-recursive
|
install-ps: install-ps-recursive
|
||||||
|
|
||||||
|
install-ps-am:
|
||||||
|
|
||||||
installcheck-am:
|
installcheck-am:
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-recursive
|
maintainer-clean: maintainer-clean-recursive
|
||||||
@ -586,24 +756,24 @@ ps-am:
|
|||||||
|
|
||||||
uninstall-am:
|
uninstall-am:
|
||||||
|
|
||||||
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
|
.MAKE: $(am__recursive_targets) install-am install-strip
|
||||||
install-strip
|
|
||||||
|
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
|
||||||
|
am--refresh check check-am clean clean-cscope clean-generic \
|
||||||
|
clean-libtool cscope cscopelist-am ctags ctags-am dist \
|
||||||
|
dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
|
||||||
|
dist-xz dist-zip distcheck distclean distclean-generic \
|
||||||
|
distclean-libtool distclean-tags distcleancheck distdir \
|
||||||
|
distuninstallcheck 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-pdf install-pdf-am install-ps install-ps-am \
|
||||||
|
install-strip installcheck installcheck-am installdirs \
|
||||||
|
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||||
|
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||||
|
ps ps-am tags tags-am uninstall uninstall-am
|
||||||
|
|
||||||
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
|
|
||||||
all all-am am--refresh check check-am clean clean-generic \
|
|
||||||
clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
|
|
||||||
dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
|
|
||||||
distclean-generic distclean-libtool distclean-tags \
|
|
||||||
distcleancheck distdir distuninstallcheck 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-pdf install-pdf-am \
|
|
||||||
install-ps install-ps-am install-strip installcheck \
|
|
||||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
|
||||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
|
||||||
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
|
|
||||||
uninstall uninstall-am
|
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
# 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.
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
3389
aclocal.m4
поставляемый
3389
aclocal.m4
поставляемый
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
3980
config/ltmain.sh
Исполняемый файл → Обычный файл
3980
config/ltmain.sh
Исполняемый файл → Обычный файл
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
9832
configure
поставляемый
9832
configure
поставляемый
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@ -18,6 +18,8 @@ libiperf_a_SOURCES = \
|
|||||||
iperf_tcp.h \
|
iperf_tcp.h \
|
||||||
iperf_udp.c \
|
iperf_udp.c \
|
||||||
iperf_udp.h \
|
iperf_udp.h \
|
||||||
|
iperf_sctp.c \
|
||||||
|
iperf_sctp.h \
|
||||||
iperf_util.c \
|
iperf_util.c \
|
||||||
iperf_util.h \
|
iperf_util.h \
|
||||||
locale.c \
|
locale.c \
|
||||||
|
1458
src/Makefile.in
1458
src/Makefile.in
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@ -49,6 +49,9 @@
|
|||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
#undef PACKAGE_TARNAME
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#undef PACKAGE_URL
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
@ -78,6 +78,9 @@ write a file with the process ID, most useful when running as a daemon.
|
|||||||
.BR -c ", " --client " \fIhost\fR"
|
.BR -c ", " --client " \fIhost\fR"
|
||||||
run in client mode, connecting to the specified server
|
run in client mode, connecting to the specified server
|
||||||
.TP
|
.TP
|
||||||
|
.BR --sctp
|
||||||
|
use SCTP rather than TCP (FreeBSD and Linux)
|
||||||
|
.TP
|
||||||
.BR -u ", " --udp
|
.BR -u ", " --udp
|
||||||
use UDP rather than TCP
|
use UDP rather than TCP
|
||||||
.TP
|
.TP
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include "iperf_api.h"
|
#include "iperf_api.h"
|
||||||
#include "iperf_udp.h"
|
#include "iperf_udp.h"
|
||||||
#include "iperf_tcp.h"
|
#include "iperf_tcp.h"
|
||||||
|
#include "iperf_sctp.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
#include "cjson.h"
|
#include "cjson.h"
|
||||||
@ -544,6 +545,9 @@ iperf_parse_arguments(struct iperf_test *test, int argc, char **argv)
|
|||||||
{"title", required_argument, NULL, 'T'},
|
{"title", required_argument, NULL, 'T'},
|
||||||
#if defined(linux) && defined(TCP_CONGESTION)
|
#if defined(linux) && defined(TCP_CONGESTION)
|
||||||
{"linux-congestion", required_argument, NULL, 'C'},
|
{"linux-congestion", required_argument, NULL, 'C'},
|
||||||
|
#endif
|
||||||
|
#if defined(linux) || defined(__FreeBSD__)
|
||||||
|
{"sctp", no_argument, NULL, OPT_SCTP},
|
||||||
#endif
|
#endif
|
||||||
{"pidfile", required_argument, NULL, 'I'},
|
{"pidfile", required_argument, NULL, 'I'},
|
||||||
{"debug", no_argument, NULL, 'd'},
|
{"debug", no_argument, NULL, 'd'},
|
||||||
@ -609,6 +613,16 @@ iperf_parse_arguments(struct iperf_test *test, int argc, char **argv)
|
|||||||
set_protocol(test, Pudp);
|
set_protocol(test, Pudp);
|
||||||
client_flag = 1;
|
client_flag = 1;
|
||||||
break;
|
break;
|
||||||
|
case OPT_SCTP:
|
||||||
|
#if defined(linux) || defined(__FreeBSD__)
|
||||||
|
set_protocol(test, Psctp);
|
||||||
|
client_flag = 1;
|
||||||
|
#else /* linux */
|
||||||
|
i_errno = IEUNIMP;
|
||||||
|
return -1;
|
||||||
|
#endif /* linux */
|
||||||
|
break;
|
||||||
|
|
||||||
case 'b':
|
case 'b':
|
||||||
slash = strchr(optarg, '/');
|
slash = strchr(optarg, '/');
|
||||||
if (slash) {
|
if (slash) {
|
||||||
@ -1082,6 +1096,8 @@ send_parameters(struct iperf_test *test)
|
|||||||
cJSON_AddTrueToObject(j, "tcp");
|
cJSON_AddTrueToObject(j, "tcp");
|
||||||
else if (test->protocol->id == Pudp)
|
else if (test->protocol->id == Pudp)
|
||||||
cJSON_AddTrueToObject(j, "udp");
|
cJSON_AddTrueToObject(j, "udp");
|
||||||
|
else if (test->protocol->id == Psctp)
|
||||||
|
cJSON_AddTrueToObject(j, "sctp");
|
||||||
cJSON_AddIntToObject(j, "omit", test->omit);
|
cJSON_AddIntToObject(j, "omit", test->omit);
|
||||||
if (test->server_affinity != -1)
|
if (test->server_affinity != -1)
|
||||||
cJSON_AddIntToObject(j, "server_affinity", test->server_affinity);
|
cJSON_AddIntToObject(j, "server_affinity", test->server_affinity);
|
||||||
@ -1141,6 +1157,8 @@ get_parameters(struct iperf_test *test)
|
|||||||
set_protocol(test, Ptcp);
|
set_protocol(test, Ptcp);
|
||||||
if ((j_p = cJSON_GetObjectItem(j, "udp")) != NULL)
|
if ((j_p = cJSON_GetObjectItem(j, "udp")) != NULL)
|
||||||
set_protocol(test, Pudp);
|
set_protocol(test, Pudp);
|
||||||
|
if ((j_p = cJSON_GetObjectItem(j, "sctp")) != NULL)
|
||||||
|
set_protocol(test, Psctp);
|
||||||
if ((j_p = cJSON_GetObjectItem(j, "omit")) != NULL)
|
if ((j_p = cJSON_GetObjectItem(j, "omit")) != NULL)
|
||||||
test->omit = j_p->valueint;
|
test->omit = j_p->valueint;
|
||||||
if ((j_p = cJSON_GetObjectItem(j, "server_affinity")) != NULL)
|
if ((j_p = cJSON_GetObjectItem(j, "server_affinity")) != NULL)
|
||||||
@ -1470,11 +1488,33 @@ iperf_new_test()
|
|||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
|
||||||
|
struct protocol *
|
||||||
|
protocol_new(void)
|
||||||
|
{
|
||||||
|
struct protocol *proto;
|
||||||
|
|
||||||
|
proto = malloc(sizeof(struct protocol));
|
||||||
|
if(!proto) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
memset(proto, 0, sizeof(struct protocol));
|
||||||
|
|
||||||
|
return proto;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
protocol_free(struct protocol *proto)
|
||||||
|
{
|
||||||
|
free(proto);
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
int
|
int
|
||||||
iperf_defaults(struct iperf_test *testp)
|
iperf_defaults(struct iperf_test *testp)
|
||||||
{
|
{
|
||||||
struct protocol *tcp, *udp;
|
struct protocol *tcp, *udp, *sctp;
|
||||||
|
|
||||||
testp->omit = OMIT;
|
testp->omit = OMIT;
|
||||||
testp->duration = DURATION;
|
testp->duration = DURATION;
|
||||||
@ -1514,16 +1554,9 @@ iperf_defaults(struct iperf_test *testp)
|
|||||||
SLIST_INIT(&testp->streams);
|
SLIST_INIT(&testp->streams);
|
||||||
SLIST_INIT(&testp->protocols);
|
SLIST_INIT(&testp->protocols);
|
||||||
|
|
||||||
tcp = (struct protocol *) malloc(sizeof(struct protocol));
|
tcp = protocol_new();
|
||||||
if (!tcp)
|
if (!tcp)
|
||||||
return -1;
|
return -1;
|
||||||
memset(tcp, 0, sizeof(struct protocol));
|
|
||||||
udp = (struct protocol *) malloc(sizeof(struct protocol));
|
|
||||||
if (!udp) {
|
|
||||||
free(tcp);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memset(udp, 0, sizeof(struct protocol));
|
|
||||||
|
|
||||||
tcp->id = Ptcp;
|
tcp->id = Ptcp;
|
||||||
tcp->name = "TCP";
|
tcp->name = "TCP";
|
||||||
@ -1535,6 +1568,12 @@ iperf_defaults(struct iperf_test *testp)
|
|||||||
tcp->init = NULL;
|
tcp->init = NULL;
|
||||||
SLIST_INSERT_HEAD(&testp->protocols, tcp, protocols);
|
SLIST_INSERT_HEAD(&testp->protocols, tcp, protocols);
|
||||||
|
|
||||||
|
udp = protocol_new();
|
||||||
|
if (!udp) {
|
||||||
|
protocol_free(tcp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
udp->id = Pudp;
|
udp->id = Pudp;
|
||||||
udp->name = "UDP";
|
udp->name = "UDP";
|
||||||
udp->accept = iperf_udp_accept;
|
udp->accept = iperf_udp_accept;
|
||||||
@ -1547,6 +1586,24 @@ iperf_defaults(struct iperf_test *testp)
|
|||||||
|
|
||||||
set_protocol(testp, Ptcp);
|
set_protocol(testp, Ptcp);
|
||||||
|
|
||||||
|
sctp = protocol_new();
|
||||||
|
if (!sctp) {
|
||||||
|
protocol_free(tcp);
|
||||||
|
protocol_free(udp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sctp->id = Psctp;
|
||||||
|
sctp->name = "SCTP";
|
||||||
|
sctp->accept = iperf_sctp_accept;
|
||||||
|
sctp->listen = iperf_sctp_listen;
|
||||||
|
sctp->connect = iperf_sctp_connect;
|
||||||
|
sctp->send = iperf_sctp_send;
|
||||||
|
sctp->recv = iperf_sctp_recv;
|
||||||
|
sctp->init = iperf_sctp_init;
|
||||||
|
|
||||||
|
SLIST_INSERT_AFTER(udp, sctp, protocols);
|
||||||
|
|
||||||
testp->on_new_stream = iperf_on_new_stream;
|
testp->on_new_stream = iperf_on_new_stream;
|
||||||
testp->on_test_start = iperf_on_test_start;
|
testp->on_test_start = iperf_on_test_start;
|
||||||
testp->on_connect = iperf_on_connect;
|
testp->on_connect = iperf_on_connect;
|
||||||
@ -1844,7 +1901,7 @@ iperf_print_intermediate(struct iperf_test *test)
|
|||||||
|
|
||||||
start_time = timeval_diff(&sp->result->start_time,&irp->interval_start_time);
|
start_time = timeval_diff(&sp->result->start_time,&irp->interval_start_time);
|
||||||
end_time = timeval_diff(&sp->result->start_time,&irp->interval_end_time);
|
end_time = timeval_diff(&sp->result->start_time,&irp->interval_end_time);
|
||||||
if (test->protocol->id == Ptcp) {
|
if (test->protocol->id == Ptcp || test->protocol->id == Psctp) {
|
||||||
if (test->sender && test->sender_has_retransmits) {
|
if (test->sender && test->sender_has_retransmits) {
|
||||||
/* Interval sum, TCP with retransmits. */
|
/* Interval sum, TCP with retransmits. */
|
||||||
if (test->json_output)
|
if (test->json_output)
|
||||||
@ -1906,7 +1963,7 @@ iperf_print_results(struct iperf_test *test)
|
|||||||
iprintf(test, "%s", report_bw_separator);
|
iprintf(test, "%s", report_bw_separator);
|
||||||
if (test->verbose)
|
if (test->verbose)
|
||||||
iprintf(test, "%s", report_summary);
|
iprintf(test, "%s", report_summary);
|
||||||
if (test->protocol->id == Ptcp) {
|
if (test->protocol->id == Ptcp || test->protocol->id == Psctp) {
|
||||||
if (test->sender_has_retransmits)
|
if (test->sender_has_retransmits)
|
||||||
iprintf(test, "%s", report_bw_retrans_header);
|
iprintf(test, "%s", report_bw_retrans_header);
|
||||||
else
|
else
|
||||||
@ -1931,7 +1988,7 @@ iperf_print_results(struct iperf_test *test)
|
|||||||
total_sent += bytes_sent;
|
total_sent += bytes_sent;
|
||||||
total_received += bytes_received;
|
total_received += bytes_received;
|
||||||
|
|
||||||
if (test->protocol->id == Ptcp) {
|
if (test->protocol->id == Ptcp || test->protocol->id == Psctp) {
|
||||||
if (test->sender_has_retransmits) {
|
if (test->sender_has_retransmits) {
|
||||||
total_retransmits += sp->result->stream_retrans;
|
total_retransmits += sp->result->stream_retrans;
|
||||||
}
|
}
|
||||||
@ -1944,7 +2001,7 @@ iperf_print_results(struct iperf_test *test)
|
|||||||
unit_snprintf(ubuf, UNIT_LEN, (double) bytes_sent, 'A');
|
unit_snprintf(ubuf, UNIT_LEN, (double) bytes_sent, 'A');
|
||||||
bandwidth = (double) bytes_sent / (double) end_time;
|
bandwidth = (double) bytes_sent / (double) end_time;
|
||||||
unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format);
|
unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format);
|
||||||
if (test->protocol->id == Ptcp) {
|
if (test->protocol->id == Ptcp || test->protocol->id == Psctp) {
|
||||||
if (test->sender_has_retransmits) {
|
if (test->sender_has_retransmits) {
|
||||||
/* Summary, TCP with retransmits. */
|
/* Summary, TCP with retransmits. */
|
||||||
if (test->json_output)
|
if (test->json_output)
|
||||||
@ -1986,7 +2043,7 @@ iperf_print_results(struct iperf_test *test)
|
|||||||
unit_snprintf(ubuf, UNIT_LEN, (double) bytes_received, 'A');
|
unit_snprintf(ubuf, UNIT_LEN, (double) bytes_received, 'A');
|
||||||
bandwidth = (double) bytes_received / (double) end_time;
|
bandwidth = (double) bytes_received / (double) end_time;
|
||||||
unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format);
|
unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format);
|
||||||
if (test->protocol->id == Ptcp) {
|
if (test->protocol->id == Ptcp || test->protocol->id == Psctp) {
|
||||||
if (test->json_output)
|
if (test->json_output)
|
||||||
cJSON_AddItemToObject(json_summary_stream, "receiver", iperf_json_printf("socket: %d start: %f end: %f seconds: %f bytes: %d bits_per_second: %f", (int64_t) sp->socket, (double) start_time, (double) end_time, (double) end_time, (int64_t) bytes_received, bandwidth * 8));
|
cJSON_AddItemToObject(json_summary_stream, "receiver", iperf_json_printf("socket: %d start: %f end: %f seconds: %f bytes: %d bits_per_second: %f", (int64_t) sp->socket, (double) start_time, (double) end_time, (double) end_time, (int64_t) bytes_received, bandwidth * 8));
|
||||||
else
|
else
|
||||||
@ -1998,7 +2055,7 @@ iperf_print_results(struct iperf_test *test)
|
|||||||
unit_snprintf(ubuf, UNIT_LEN, (double) total_sent, 'A');
|
unit_snprintf(ubuf, UNIT_LEN, (double) total_sent, 'A');
|
||||||
bandwidth = (double) total_sent / (double) end_time;
|
bandwidth = (double) total_sent / (double) end_time;
|
||||||
unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format);
|
unit_snprintf(nbuf, UNIT_LEN, bandwidth, test->settings->unit_format);
|
||||||
if (test->protocol->id == Ptcp) {
|
if (test->protocol->id == Ptcp || test->protocol->id == Psctp) {
|
||||||
if (test->sender_has_retransmits) {
|
if (test->sender_has_retransmits) {
|
||||||
/* Summary sum, TCP with retransmits. */
|
/* Summary sum, TCP with retransmits. */
|
||||||
if (test->json_output)
|
if (test->json_output)
|
||||||
@ -2084,7 +2141,7 @@ print_interval_results(struct iperf_test *test, struct iperf_stream *sp, cJSON *
|
|||||||
** else nothing.
|
** else nothing.
|
||||||
*/
|
*/
|
||||||
if (timeval_equals(&sp->result->start_time, &irp->interval_start_time)) {
|
if (timeval_equals(&sp->result->start_time, &irp->interval_start_time)) {
|
||||||
if (test->protocol->id == Ptcp) {
|
if (test->protocol->id == Ptcp || test->protocol->id == Psctp) {
|
||||||
if (test->sender && test->sender_has_retransmits)
|
if (test->sender && test->sender_has_retransmits)
|
||||||
iprintf(test, "%s", report_bw_retrans_cwnd_header);
|
iprintf(test, "%s", report_bw_retrans_cwnd_header);
|
||||||
else
|
else
|
||||||
@ -2107,7 +2164,7 @@ print_interval_results(struct iperf_test *test, struct iperf_stream *sp, cJSON *
|
|||||||
st = timeval_diff(&sp->result->start_time, &irp->interval_start_time);
|
st = timeval_diff(&sp->result->start_time, &irp->interval_start_time);
|
||||||
et = timeval_diff(&sp->result->start_time, &irp->interval_end_time);
|
et = timeval_diff(&sp->result->start_time, &irp->interval_end_time);
|
||||||
|
|
||||||
if (test->protocol->id == Ptcp) {
|
if (test->protocol->id == Ptcp || test->protocol->id == Psctp) {
|
||||||
if (test->sender && test->sender_has_retransmits) {
|
if (test->sender && test->sender_has_retransmits) {
|
||||||
/* Interval, TCP with retransmits. */
|
/* Interval, TCP with retransmits. */
|
||||||
if (test->json_output)
|
if (test->json_output)
|
||||||
|
@ -20,9 +20,13 @@ struct iperf_stream;
|
|||||||
/* default settings */
|
/* default settings */
|
||||||
#define Ptcp SOCK_STREAM
|
#define Ptcp SOCK_STREAM
|
||||||
#define Pudp SOCK_DGRAM
|
#define Pudp SOCK_DGRAM
|
||||||
|
#define Psctp 12
|
||||||
#define DEFAULT_UDP_BLKSIZE 8192
|
#define DEFAULT_UDP_BLKSIZE 8192
|
||||||
#define DEFAULT_TCP_BLKSIZE (128 * 1024) /* default read/write block size */
|
#define DEFAULT_TCP_BLKSIZE (128 * 1024) /* default read/write block size */
|
||||||
|
|
||||||
|
/* short option equivalents, used to support options that only have long form */
|
||||||
|
#define OPT_SCTP 1
|
||||||
|
|
||||||
/* states */
|
/* states */
|
||||||
#define TEST_START 1
|
#define TEST_START 1
|
||||||
#define TEST_RUNNING 2
|
#define TEST_RUNNING 2
|
||||||
@ -284,6 +288,7 @@ enum {
|
|||||||
IESETCONGESTION = 134, // Unable to set TCP_CONGESTION
|
IESETCONGESTION = 134, // Unable to set TCP_CONGESTION
|
||||||
IEPIDFILE = 135, // Unable to write PID file
|
IEPIDFILE = 135, // Unable to write PID file
|
||||||
IEV6ONLY = 136, // Unable to set/unset IPV6_V6ONLY (check perror)
|
IEV6ONLY = 136, // Unable to set/unset IPV6_V6ONLY (check perror)
|
||||||
|
IESETSCTPDISABLEFRAG = 137, // Unable to set SCTP Fragmentation (check perror)
|
||||||
/* Stream errors */
|
/* Stream errors */
|
||||||
IECREATESTREAM = 200, // Unable to create a new stream (check herror/perror)
|
IECREATESTREAM = 200, // Unable to create a new stream (check herror/perror)
|
||||||
IEINITSTREAM = 201, // Unable to initialize stream (check herror/perror)
|
IEINITSTREAM = 201, // Unable to initialize stream (check herror/perror)
|
||||||
|
@ -303,6 +303,10 @@ iperf_strerror(int i_errno)
|
|||||||
snprintf(errstr, len, "Unable to set/reset IPV6_V6ONLY");
|
snprintf(errstr, len, "Unable to set/reset IPV6_V6ONLY");
|
||||||
perr = 1;
|
perr = 1;
|
||||||
break;
|
break;
|
||||||
|
case IESETSCTPDISABLEFRAG:
|
||||||
|
snprintf(errstr, len, "unable to set SCTP_DISABLE_FRAG");
|
||||||
|
perr = 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (herr || perr)
|
if (herr || perr)
|
||||||
|
254
src/iperf_sctp.c
Обычный файл
254
src/iperf_sctp.c
Обычный файл
@ -0,0 +1,254 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009-2014, The Regents of the University of California,
|
||||||
|
* through Lawrence Berkeley National Laboratory (subject to receipt of any
|
||||||
|
* required approvals from the U.S. Dept. of Energy). All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is distributed under a BSD style license, see the LICENSE file
|
||||||
|
* for complete information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/select.h>
|
||||||
|
|
||||||
|
#include "iperf.h"
|
||||||
|
#include "iperf_api.h"
|
||||||
|
#include "iperf_sctp.h"
|
||||||
|
#include "net.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* iperf_sctp_recv
|
||||||
|
*
|
||||||
|
* receives the data for SCTP
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
iperf_sctp_recv(struct iperf_stream *sp)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = Nread(sp->socket, sp->buffer, sp->settings->blksize, Psctp);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
sp->result->bytes_received += r;
|
||||||
|
sp->result->bytes_received_this_interval += r;
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* iperf_sctp_send
|
||||||
|
*
|
||||||
|
* sends the data for SCTP
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
iperf_sctp_send(struct iperf_stream *sp)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = Nwrite(sp->socket, sp->buffer, sp->settings->blksize, Psctp);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
sp->result->bytes_sent += r;
|
||||||
|
sp->result->bytes_sent_this_interval += r;
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* iperf_sctp_accept
|
||||||
|
*
|
||||||
|
* accept a new SCTP stream connection
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
iperf_sctp_accept(struct iperf_test * test)
|
||||||
|
{
|
||||||
|
int s;
|
||||||
|
signed char rbuf = ACCESS_DENIED;
|
||||||
|
char cookie[COOKIE_SIZE];
|
||||||
|
socklen_t len;
|
||||||
|
struct sockaddr_storage addr;
|
||||||
|
|
||||||
|
len = sizeof(addr);
|
||||||
|
s = accept(test->listener, (struct sockaddr *) &addr, &len);
|
||||||
|
if (s < 0) {
|
||||||
|
i_errno = IESTREAMCONNECT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Nread(s, cookie, COOKIE_SIZE, Psctp) < 0) {
|
||||||
|
i_errno = IERECVCOOKIE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(test->cookie, cookie) != 0) {
|
||||||
|
if (Nwrite(s, (char*) &rbuf, sizeof(rbuf), Psctp) < 0) {
|
||||||
|
i_errno = IESENDMESSAGE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
close(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* iperf_sctp_listen
|
||||||
|
*
|
||||||
|
* start up a listener for SCTP stream connections
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
iperf_sctp_listen(struct iperf_test *test)
|
||||||
|
{
|
||||||
|
struct addrinfo hints, *res;
|
||||||
|
char portstr[6];
|
||||||
|
int s, opt;
|
||||||
|
|
||||||
|
close(test->listener);
|
||||||
|
|
||||||
|
snprintf(portstr, 6, "%d", test->server_port);
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = (test->settings->domain == AF_UNSPEC ? AF_INET6 : test->settings->domain);
|
||||||
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
hints.ai_flags = AI_PASSIVE;
|
||||||
|
if (getaddrinfo(test->bind_address, portstr, &hints, &res) != 0) {
|
||||||
|
i_errno = IESTREAMLISTEN;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((s = socket(res->ai_family, SOCK_STREAM, IPPROTO_SCTP)) < 0) {
|
||||||
|
freeaddrinfo(res);
|
||||||
|
i_errno = IESTREAMLISTEN;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (test->settings->domain == AF_UNSPEC || test->settings->domain == AF_INET6) {
|
||||||
|
if (test->settings->domain == AF_UNSPEC)
|
||||||
|
opt = 0;
|
||||||
|
else if (test->settings->domain == AF_INET6)
|
||||||
|
opt = 1;
|
||||||
|
if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||||
|
(char *) &opt, sizeof(opt)) < 0) {
|
||||||
|
close(s);
|
||||||
|
freeaddrinfo(res);
|
||||||
|
i_errno = IEPROTOCOL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
opt = 1;
|
||||||
|
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) {
|
||||||
|
close(s);
|
||||||
|
freeaddrinfo(res);
|
||||||
|
i_errno = IEREUSEADDR;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bind(s, (struct sockaddr *) res->ai_addr, res->ai_addrlen) < 0) {
|
||||||
|
close(s);
|
||||||
|
freeaddrinfo(res);
|
||||||
|
i_errno = IESTREAMLISTEN;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
freeaddrinfo(res);
|
||||||
|
|
||||||
|
if (listen(s, 5) < 0) {
|
||||||
|
i_errno = IESTREAMLISTEN;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
test->listener = s;
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* iperf_sctp_connect
|
||||||
|
*
|
||||||
|
* connect to a SCTP stream listener
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
iperf_sctp_connect(struct iperf_test *test)
|
||||||
|
{
|
||||||
|
int s, opt;
|
||||||
|
char portstr[6];
|
||||||
|
struct addrinfo hints, *local_res, *server_res;
|
||||||
|
|
||||||
|
if (test->bind_address) {
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = test->settings->domain;
|
||||||
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
if (getaddrinfo(test->bind_address, NULL, &hints, &local_res) != 0) {
|
||||||
|
i_errno = IESTREAMCONNECT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = test->settings->domain;
|
||||||
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
snprintf(portstr, sizeof(portstr), "%d", test->server_port);
|
||||||
|
if (getaddrinfo(test->server_hostname, portstr, &hints, &server_res) != 0) {
|
||||||
|
if (test->bind_address)
|
||||||
|
freeaddrinfo(local_res);
|
||||||
|
i_errno = IESTREAMCONNECT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
s = socket(server_res->ai_family, SOCK_STREAM, IPPROTO_SCTP);
|
||||||
|
if (s < 0) {
|
||||||
|
if (test->bind_address)
|
||||||
|
freeaddrinfo(local_res);
|
||||||
|
freeaddrinfo(server_res);
|
||||||
|
i_errno = IESTREAMCONNECT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (connect(s, (struct sockaddr *) server_res->ai_addr, server_res->ai_addrlen) < 0 && errno != EINPROGRESS) {
|
||||||
|
close(s);
|
||||||
|
freeaddrinfo(server_res);
|
||||||
|
i_errno = IESTREAMCONNECT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
freeaddrinfo(server_res);
|
||||||
|
|
||||||
|
/* Send cookie for verification */
|
||||||
|
if (Nwrite(s, test->cookie, COOKIE_SIZE, Psctp) < 0) {
|
||||||
|
close(s);
|
||||||
|
i_errno = IESENDCOOKIE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
opt = 0;
|
||||||
|
if(setsockopt(s, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &opt, sizeof(opt)) < 0) {
|
||||||
|
close(s);
|
||||||
|
freeaddrinfo(server_res);
|
||||||
|
i_errno = IESETSCTPDISABLEFRAG;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
iperf_sctp_init(struct iperf_test *test)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
51
src/iperf_sctp.h
Обычный файл
51
src/iperf_sctp.h
Обычный файл
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009-2011, The Regents of the University of California,
|
||||||
|
* through Lawrence Berkeley National Laboratory (subject to receipt of any
|
||||||
|
* required approvals from the U.S. Dept. of Energy). All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is distributed under a BSD style license, see the LICENSE file
|
||||||
|
* for complete information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef IPERF_SCTP_H
|
||||||
|
#define IPERF_SCTP_H
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef SCTP_DISABLE_FRAGMENTS
|
||||||
|
#define SCTP_DISABLE_FRAGMENTS 8
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* iperf_sctp_accept -- accepts a new SCTP connection
|
||||||
|
* on sctp_listener_socket for SCTP data and param/result
|
||||||
|
* exchange messages
|
||||||
|
*returns 0 on success
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int iperf_sctp_accept(struct iperf_test *);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* iperf_sctp_recv -- receives the data for sctp
|
||||||
|
* and the Param/result message exchange
|
||||||
|
*returns state of packet received
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int iperf_sctp_recv(struct iperf_stream *);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* iperf_sctp_send -- sends the client data for sctp
|
||||||
|
* and the Param/result message exchanges
|
||||||
|
* returns: bytes sent
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int iperf_sctp_send(struct iperf_stream *);
|
||||||
|
|
||||||
|
|
||||||
|
int iperf_sctp_listen(struct iperf_test *);
|
||||||
|
|
||||||
|
int iperf_sctp_connect(struct iperf_test *);
|
||||||
|
|
||||||
|
int iperf_sctp_init(struct iperf_test *test);
|
||||||
|
|
||||||
|
#endif
|
@ -87,6 +87,9 @@ const char usage_longstr[] = "Usage: iperf [-s|-c host] [options]\n"
|
|||||||
" -I, --pidfile file write PID file\n"
|
" -I, --pidfile file write PID file\n"
|
||||||
"Client specific:\n"
|
"Client specific:\n"
|
||||||
" -c, --client <host> run in client mode, connecting to <host>\n"
|
" -c, --client <host> run in client mode, connecting to <host>\n"
|
||||||
|
#if defined(linux) || defined(__FreeBSD__)
|
||||||
|
" --sctp use SCTP rather than TCP\n"
|
||||||
|
#endif
|
||||||
" -u, --udp use UDP rather than TCP\n"
|
" -u, --udp use UDP rather than TCP\n"
|
||||||
" -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec\n"
|
" -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec\n"
|
||||||
" (default %d Mbit/sec for UDP, unlimited for TCP)\n"
|
" (default %d Mbit/sec for UDP, unlimited for TCP)\n"
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user