l7-protocol classifies packets based on patterns in application layer data.
--- /dev/null
+#
+# Copyright (C) 2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=l7-protocols
+PKG_VERSION:=2009-05-28
+PKG_RELEASE:=2
+PKG_LICENSE:=GPL-2.0
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/l7-filter
+PKG_MD5SUM:=91be154d12134dcdbc560cc7aa7fe4ce
+
+include $(INCLUDE_DIR)/uclibc++.mk
+include $(INCLUDE_DIR)/package.mk
+
+define Package/l7-protocols
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=Protocols for layer7 filtering
+ URL:=http://l7-filter.sourceforge.net/
+ SUBMENU:=Firewall
+ MAINTAINER:=Lim Guo Wei <limguowei@gmail.com>
+ DEPENDS:=iptables-mod-filter
+endef
+
+define Package/l7-protocols/description
+ l7-filter classifies packets based on patterns in application
+ layer data. This allows correct classification of P2P traffic that
+ uses unpredictable ports as well as standard protocols running on
+ non-standard ports.
+endef
+
+define Package/l7-protocols-testing
+ $(call Package/l7-protocols)
+ TITLE:=testing utilities for layer7
+ DEPENDS+=l7-protocols $(CXX_DEPENDS)
+endef
+
+define Package/l7-protocols-testing/description
+ testing utilities for layer 7 patterns
+endef
+
+define Build/Configure
+endef
+
+ifneq ($(SDK)$(CONFIG_PACKAGE_l7-protocols-testing),)
+ define Build/Compile
+ cd $(PKG_BUILD_DIR)/testing && $(MAKE) $(CONFIGURE_VARS)
+ endef
+else
+ define Build/Compile
+ endef
+endif
+
+define Package/l7-protocols/install
+ find $(PKG_BUILD_DIR) -name "README" -delete
+ $(INSTALL_DIR) $(1)/etc/l7-protocols
+ $(CP) $(PKG_BUILD_DIR)/extra \
+ $(PKG_BUILD_DIR)/file_types \
+ $(PKG_BUILD_DIR)/groups.sh \
+ $(PKG_BUILD_DIR)/malware \
+ $(PKG_BUILD_DIR)/protocols \
+ $(1)/etc/l7-protocols
+endef
+
+define Package/l7-protocols-testing/install
+ $(INSTALL_DIR) $(1)/etc/l7-protocols/testing
+ $(CP) $(PKG_BUILD_DIR)/testing/data \
+ $(1)/etc/l7-protocols/testing
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/testing/rand{chars,printable} \
+ $(PKG_BUILD_DIR)/testing/test_speed-{kernel,userspace} \
+ $(PKG_BUILD_DIR)/testing/match_kernel \
+ $(PKG_BUILD_DIR)/testing/doallspeeds.sh \
+ $(PKG_BUILD_DIR)/testing/test_match.sh \
+ $(PKG_BUILD_DIR)/testing/timeit.sh \
+ $(1)/etc/l7-protocols/testing
+endef
+
+$(eval $(call BuildPackage,l7-protocols))
+$(eval $(call BuildPackage,l7-protocols-testing))
--- /dev/null
+--- a/testing/Makefile
++++ b/testing/Makefile
+@@ -1,19 +1,19 @@
+ all: randchars randprintable test_speed-kernel test_speed-userspace match_kernel
+
+ randchars: randchars.c
+- gcc -O2 -o randchars randchars.c
++ $(CC) $(CFLAGS) -o randchars randchars.c
+
+ randprintable: randprintable.c
+- gcc -O2 -o randprintable randprintable.c
++ $(CC) $(CFLAGS) -o randprintable randprintable.c
+
+ test_speed-kernel: test_speed-kernel.c
+- gcc -o test_speed-kernel test_speed-kernel.c
++ $(CC) $(CFLAGS) -o test_speed-kernel test_speed-kernel.c
+
+ test_speed-userspace: test_speed-userspace.cpp l7-parse-patterns.cpp l7-parse-patterns.h
+- g++ -Wall -o test_speed-userspace test_speed-userspace.cpp l7-parse-patterns.cpp
++ $(CXX) $(CXXFLAGS) -Wall -o test_speed-userspace test_speed-userspace.cpp l7-parse-patterns.cpp
+
+ match_kernel: match-kernel.c
+- gcc -O2 -o match_kernel match-kernel.c
++ $(CC) $(CFLAGS) -o match_kernel match-kernel.c
+
+ clean:
+ rm -f randprintable randchars test_speed-kernel test_speed-userspace match_kernel
--- /dev/null
+--- a/testing/timeit.sh
++++ b/testing/timeit.sh
+@@ -1,11 +1,8 @@
+ #!/bin/bash
+
+-# "man 1 time" for details
+-export TIME="%U seconds"
+-
+ add()
+ {
+- if ! dc -e ""; then
++ if ! dc p >/dev/null 2>&1; then
+ echo you do not have dc, so I cannot add these numbers...
+ exit 1
+ fi
+@@ -14,7 +11,7 @@ add()
+ tot=0
+
+ while read n; do
+- tot=`dc -e "$n $tot + pop" 2> /dev/null`
++ tot=`dc $n $tot + p 2> /dev/null`
+ done
+
+ echo $tot seconds
+@@ -34,7 +31,7 @@ extract()
+
+ if [ ! $3 ] || [ $2 == "-h" ] || [ $2 == "--help" ]; then
+ echo
+- echo Syntax: ./timeit.sh patternfile kernel\|userspace all\|print\|real [data_files]
++ echo Syntax: .//usr/bin/timeit.sh patternfile kernel\|userspace all\|print\|real [data_files]
+ echo
+ echo \"kernel\" uses the kernel pattern and library
+ echo \"userspace\" uses userspace pattern and library
+@@ -72,12 +69,12 @@ echo Timing $1
+ if [ $3 == "all" ]; then
+ echo Using all characters
+ if [ $2 == "kernel" ]; then
+- if ! ./randchars | time $speedprog "`extract $1`" verbose; then
++ if ! ./randchars | /usr/bin/time $speedprog "`extract $1`" verbose 2>&1 >/dev/null | grep user | cut -d\ -f2; then
+ echo $speedprog failed. > /dev/stderr
+ exit 1
+ fi
+ else
+- if ! ./randchars | time $speedprog -f "$1" -v; then
++ if ! ./randchars | /usr/bin/time $speedprog -f "$1" -v 2>&1 >/dev/null | grep user | cut -d\ -f2; then
+ echo $speedprog failed. > /dev/stderr
+ exit 1
+ fi
+@@ -85,12 +82,12 @@ if [ $3 == "all" ]; then
+ elif [ $3 == "print" ]; then
+ echo Using only printable characters
+ if [ $2 == "kernel" ]; then
+- if ! ./randprintable | time $speedprog "`extract $1`" verbose; then
++ if ! ./randprintable | /usr/bin/time $speedprog "`extract $1`" verbose 2>&1 >/dev/null | grep user | cut -d\ -f2; then
+ echo $speedprog failed. > /dev/stderr
+ exit 1
+ fi
+ else
+- if ! ./randprintable | time $speedprog -f "$1" -v; then
++ if ! ./randprintable | /usr/bin/time $speedprog -f "$1" -v 2>&1 >/dev/null | grep user | cut -d\ -f2; then
+ echo $speedprog failed. > /dev/stderr
+ exit 1
+ fi
+@@ -107,12 +104,12 @@ elif [ $3 == "real" ]; then
+ printf $f\\t
+ #echo `extract $1`
+ if [ $2 == "kernel" ]; then
+- if ! cat $f | time $speedprog "`extract $1`" 2> /dev/stdout | tee -a tmp.$$; then
++ if ! cat $f | /usr/bin/time $speedprog "`extract $1`" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then
+ echo $speedprog failed. > /dev/stderr
+ exit 1
+ fi
+ else
+- if ! cat $f | time $speedprog -f "$1" 2> /dev/stdout | tee -a tmp.$$; then
++ if ! cat $f | /usr/bin/time $speedprog -f "$1" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then
+ echo $speedprog failed. > /dev/stderr
+ exit 1
+ fi
+@@ -123,12 +120,12 @@ elif [ $3 == "real" ]; then
+ for f in data/*; do
+ printf $f\\t
+ if [ $2 == "kernel" ]; then
+- if ! cat $f | time $speedprog "`extract $1`" 2> /dev/stdout | tee -a tmp.$$; then
++ if ! cat $f | /usr/bin/time $speedprog "`extract $1`" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then
+ echo $speedprog failed. > /dev/stderr
+ exit 1
+ fi
+ else
+- if ! cat $f | time $speedprog -f "$1" 2> /dev/stdout | tee -a tmp.$$; then
++ if ! cat $f | /usr/bin/time $speedprog -f "$1" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then
+ echo $speedprog failed. > /dev/stderr
+ exit 1
+ fi
+@@ -137,7 +134,7 @@ elif [ $3 == "real" ]; then
+ fi
+
+ printf Total:\
+- cat tmp.$$ | cut -d\ -f 2 | add
++ cat tmp.$$ | cut -ds -f 1| add
+
+ rm tmp.$$
+ else
--- /dev/null
+--- a/testing/doallspeeds.sh
++++ b/testing/doallspeeds.sh
+@@ -25,11 +25,11 @@ for f in ../*/*.pat; do
+ printf `basename $f .pat`
+
+ if [ $userspace ]; then
+- gtime=`./timeit.sh $f userspace real | grep Total | cut -d\ -f 2`
++ gtime=`./timeit.sh $f userspace real | grep Total | cut -d\ -f 2 | awk '{print $1}'`
+ printf \\t$gtime
+ fi
+ if [ $kernel ]; then
+- htime=`./timeit.sh $f kernel real | grep Total | cut -d\ -f 2`
++ htime=`./timeit.sh $f kernel real | grep Total | cut -d\ -f 2 | awk '{print $1}'`
+ printf \\t$htime
+ fi
+ printf \\n