[Buildroot] [PATCH/RFC] add tcpreplay tool

Chris Packham judge.packham at gmail.com
Thu Jul 30 03:10:53 UTC 2009


Hi Buildroot,

Is there any interest in incorporating tcpreplay as a package?

The tcpreplay tool can be used to generate packets out a specified interface
based on a pcap file from tcpdump or wireshark or anyother tool that generates
a "standard" pcap file.

The tcpreplay suite also ships with other tools (tcprewrite, tcpreplay-edit)
for manipulating pcap files.

Signed-off-by: Chris Packham <judge.packham at gmail.com>
---
 package/Config.in                                  |    1 +
 package/tcpreplay/Config.in                        |    9 ++
 .../tcpreplay-3.4.3-010-cross-compile.patch        |   92 ++++++++++++++++++++
 package/tcpreplay/tcpreplay.mk                     |   73 ++++++++++++++++
 4 files changed, 175 insertions(+), 0 deletions(-)
 create mode 100644 package/tcpreplay/Config.in
 create mode 100644 package/tcpreplay/tcpreplay-3.4.3-010-cross-compile.patch
 create mode 100644 package/tcpreplay/tcpreplay.mk

diff --git a/package/Config.in b/package/Config.in
index bd15b62..a97feaf 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -206,6 +206,7 @@ source "package/socat/Config.in"
 source "package/spawn-fcgi/Config.in"
 source "package/stunnel/Config.in"
 source "package/tcpdump/Config.in"
+source "package/tcpreplay/Config.in"
 source "package/tftpd/Config.in"
 if !BR2_PACKAGE_BUSYBOX_HIDE_OTHERS
 source "package/thttpd/Config.in"
diff --git a/package/tcpreplay/Config.in b/package/tcpreplay/Config.in
new file mode 100644
index 0000000..3cfbd91
--- /dev/null
+++ b/package/tcpreplay/Config.in
@@ -0,0 +1,9 @@
+config BR2_PACKAGE_TCPREPLAY
+       bool "tcpreplay"
+       default n
+        select BR2_PACKAGE_LIBPCAP
+       help
+         A tool for generating traffic.
+
+         http://tcpreplay.synfin.net/trac/
+
diff --git a/package/tcpreplay/tcpreplay-3.4.3-010-cross-compile.patch
b/package/tcpreplay/tcpreplay-3.4.3-010-cross-compile.patch
new file mode 100644
index 0000000..bbae66f
--- /dev/null
+++ b/package/tcpreplay/tcpreplay-3.4.3-010-cross-compile.patch
@@ -0,0 +1,92 @@
+--- tcpreplay-3.4.3/configure.ac       2009-06-26 06:45:55.000000000 +1200
++++ tcpreplay-3.4.3-new/configure.ac   2009-07-30 11:59:35.000000000 +1200
+@@ -420,6 +420,11 @@
+     exit(1);
+ ]]), [
+     libpcap_version_096=yes
++], [
++    libpcap_version_096=no
++], [
++    AC_MSG_WARN([Tests not run when cross compiling])
++    libpcap_version_096=no
+ ])
+
+ libpcap_ver8=no
+@@ -447,6 +452,9 @@
+     libpcap_ver8=yes
+ ], [
+     libpcap_ver8=no
++], [
++    AC_MSG_WARN([Tests not run when cross compiling])
++    libpcap_ver8=no
+ ])
+
+ libpcap_ver7=no
+@@ -472,25 +480,31 @@
+     libpcap_ver7=yes
+ ], [
+     libpcap_ver7=no
++], [
++    AC_MSG_WARN([Tests not run when cross compiling])
++    libpcap_ver7=no
+ ])
+
+-if test x$libpcap_ver8 = xyes ; then
+-    AC_MSG_RESULT(>= 0.8.0)
+-elif test x$libpcap_ver7 = xyes ; then
+-    AC_MSG_RESULT(>= 0.7.2)
+-else
+-    AC_MSG_ERROR([Libpcap versions < 0.7.2 are not supported
+-    Please upgrade to version 0.7.2 or better])
+-fi
+-
+-libpcap_version=unknown
+-if test x$libpcap_version_096 = xyes ; then
+-    libpcap_version=">= 0.9.6"
+-elif test x$libpcap_ver8 = xyes ; then
+-    libpcap_version=">= 0.8.0"
+-elif test x$libcap_ver7 = xyes ; then
+-    libpcap_version=">= 0.7.0"
+-fi
++AC_CACHE_CHECK([for supported libpcap verision], [tr_cv_libpcap_version],
++[
++    if test x$libpcap_ver8 = xyes ; then
++        AC_MSG_RESULT(>= 0.8.0)
++    elif test x$libpcap_ver7 = xyes ; then
++        AC_MSG_RESULT(>= 0.7.2)
++    else
++        AC_MSG_ERROR([Libpcap versions < 0.7.2 are not supported
++        Please upgrade to version 0.7.2 or better])
++    fi
++
++    tr_cv_libpcap_version=unknown
++    if test x$tr_cv_libpcap_version_096 = xyes ; then
++        tr_cv_libpcap_version=">= 0.9.6"
++    elif test x$libpcap_ver8 = xyes ; then
++        tr_cv_libpcap_version=">= 0.8.0"
++    elif test x$libcap_ver7 = xyes ; then
++        tr_cv_libpcap_version=">= 0.7.0"
++    fi
++] )
+
+ dnl Check for pcap_setnonblock()
+ AC_MSG_CHECKING(for pcap_setnonblock)
+@@ -770,6 +784,9 @@
+     have_bpf=yes
+ ],[
+     AC_MSG_RESULT(no)
++],[
++    AC_MSG_WARN([Tests not run when cross compiling])
++    AC_MSG_RESULT(no)
+ ])
+
+
+@@ -1189,7 +1206,7 @@
+ ##########################################################################
+              TCPREPLAY Suite Configuration Results (${TCPREPLAY_VERSION})
+ ##########################################################################
+-libpcap:                    ${foundpcap} (${libpcap_version})
++libpcap:                    ${foundpcap} (${tr_cv_libpcap_version})
+ libdnet:                    ${founddnet} (${libdnet_version})
+ autogen:                    ${AUTOGEN} (${AUTOGEN_VERSION})
+ Use libopts tearoff:        ${enable_local_libopts}
diff --git a/package/tcpreplay/tcpreplay.mk b/package/tcpreplay/tcpreplay.mk
new file mode 100644
index 0000000..e26c649
--- /dev/null
+++ b/package/tcpreplay/tcpreplay.mk
@@ -0,0 +1,73 @@
+#############################################################
+#
+# tcpreplay
+#
+#############################################################
+
+TCPREPLAY_VER:=3.4.3
+TCPREPLAY_DIR:=$(BUILD_DIR)/tcpreplay-$(TCPREPLAY_VER)
+TCPREPLAY_SITE:=http://prdownloads.sourceforge.net/tcpreplay/
+TCPREPLAY_SOURCE:=tcpreplay-$(TCPREPLAY_VER).tar.gz
+TCPREPLAY_CAT:=$(ZCAT)
+
+ifeq ($(TCPREPLAY_TARGET_DIR),)
+TCPREPLAY_TARGET_DIR:=$(TARGET_DIR)
+endif
+
+$(DL_DIR)/$(TCPREPLAY_SOURCE):
+        $(call DOWNLOAD,$(TCPREPLAY_SITE),$(TCPREPLAY_SOURCE))
+
+tcpreplay-source: $(DL_DIR)/$(TCPREPLAY_SOURCE)
+
+$(TCPREPLAY_DIR)/.unpacked: $(DL_DIR)/$(TCPREPLAY_SOURCE)
+       $(TCPREPLAY_CAT) $(DL_DIR)/$(TCPREPLAY_SOURCE) | tar -C
$(BUILD_DIR) $(TAR_OPTIONS) -
+       toolchain/patch-kernel.sh $(TCPREPLAY_DIR) package/tcpreplay/
tcpreplay-$(TCPREPLAY_VER)\*.patch
+       touch $(TCPREPLAY_DIR)/.unpacked
+
+$(TCPREPLAY_DIR)/.configured: $(TCPREPLAY_DIR)/.unpacked
+       ( cd $(TCPREPLAY_DIR) ; rm -f config.cache; \
+               autoconf; \
+               ac_cv_linux_vers=$(BR2_DEFAULT_KERNEL_HEADERS) \
+               tr_cv_libpcap_version=">= 0.7.0" \
+               BUILD_CC=$(TARGET_CC) HOSTCC="$(HOSTCC)" \
+               $(TARGET_CONFIGURE_OPTS) \
+               $(TARGET_CONFIGURE_ARGS) \
+               ./configure \
+               --target=$(GNU_TARGET_NAME) \
+               --host=$(GNU_TARGET_NAME) \
+               --build=$(GNU_HOST_NAME) \
+               --program-prefix="" \
+               --prefix=$(TCPREPLAY_TARGET_DIR)/usr \
+               --mandir=$(TCPREPLAY_TARGET_DIR)/usr/share/man \
+               --infodir=$(TCPREPLAY_TARGET_DIR)/usr/share/info \
+               --with-libpcap=$(STAGING_DIR) \
+       )
+       touch $(TCPREPLAY_DIR)/.configured
+
+$(TCPREPLAY_DIR)/src/tcpreplay: $(TCPREPLAY_DIR)/.configured
+       $(MAKE) $(TARGET_CONFIGURE_OPTS) \
+               -C $(TCPREPLAY_DIR)
+
+$(TCPREPLAY_TARGET_DIR)/usr/bin/tcpreplay: $(TCPREPLAY_DIR)/src/tcpreplay
+       #mkdir -p $(TCPREPLAY_TARGET_DIR)/sbin
+       #cp -af $< $@
+       $(MAKE) $(TARGET_CONFIGURE_OPTS) \
+               -C $(TCPREPLAY_DIR) install
+
+tcpreplay: uclibc libpcap $(TCPREPLAY_TARGET_DIR)/usr/bin/tcpreplay
+
+tcpreplay-clean:
+       -$(MAKE) -C $(TCPREPLAY_DIR) uninstall
+       -$(MAKE) -C $(TCPREPLAY_DIR) clean
+
+tcpreplay-dirclean:
+       -$(MAKE) -C $(TCPREPLAY_DIR) uninstall
+       rm -rf $(TCPREPLAY_DIR)
+#############################################################
+#
+# Toplevel Makefile options
+#
+#############################################################
+ifeq ($(strip $(BR2_PACKAGE_TCPREPLAY)),y)
+TARGETS+=tcpreplay
+endif
--
1.6.3



More information about the buildroot mailing list