X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=blobdiff_plain;f=package%2Fppp%2Fpatches%2F310-precompile_filter.patch;h=ca4b6c2f9559046bc1fafa5b67300c72683f7f28;hp=f392e430ab8e2938ab8dcb54e9341d805ad332e0;hb=05cf61cb5fd6c22465b34063edd2c2f17272ebc4;hpb=74e8c5147c2021dc57e7d7127d296ac67ff9844d diff --git a/package/ppp/patches/310-precompile_filter.patch b/package/ppp/patches/310-precompile_filter.patch index f392e430ab..ca4b6c2f95 100644 --- a/package/ppp/patches/310-precompile_filter.patch +++ b/package/ppp/patches/310-precompile_filter.patch @@ -185,190 +185,3 @@ diff -Naur ppp-2.4.4.orig/pppd/pcap_pcc.h ppp-2.4.4/pppd/pcap_pcc.h + +int pcap_pre_compiled (char * fname, struct bpf_program *p); +#endif /* PCAP_PCC_H */ -diff -Naur ppp-2.4.4.orig/pppd/Makefile.linux ppp-2.4.4/pppd/Makefile.linux ---- ppp-2.4.4.orig/pppd/Makefile.linux 2009-05-07 22:31:54.000000000 -0400 -+++ ppp-2.4.4/pppd/Makefile.linux 2009-05-07 22:33:12.000000000 -0400 -@@ -50,6 +50,9 @@ - # and that the kernel driver support PPP packet filtering. - #FILTER=y - -+# Support for precompiled filters -+PRECOMPILED_FILTER=y -+ - # Uncomment the next line to enable multilink PPP (enabled by default) - # Linux distributions: Please leave multilink ENABLED in your builds - # of pppd! -@@ -175,6 +178,14 @@ - endif - endif - -+ifdef PRECOMPILED_FILTER -+PPPDSRCS += pcap_pcc.c -+HEADERS += pcap_pcc.h -+PPPDOBJS += pcap_pcc.o -+LIBS += $(STAGING_DIR)/usr/lib/libpcap.a -+CFLAGS += -DPPP_FILTER -DPPP_PRECOMPILED_FILTER -I$(STAGING_DIR)/usr/include -+endif -+ - ifdef HAVE_INET6 - PPPDSRCS += ipv6cp.c eui64.c - HEADERS += ipv6cp.h eui64.h -diff -Naur ppp-2.4.4.orig/pppd/options.c ppp-2.4.4/pppd/options.c ---- ppp-2.4.4.orig/pppd/options.c 2009-05-07 22:25:24.000000000 -0400 -+++ ppp-2.4.4/pppd/options.c 2009-05-07 22:38:28.000000000 -0400 -@@ -57,6 +57,7 @@ - - #ifdef PPP_FILTER - #include -+#include - /* - * There have been 3 or 4 different names for this in libpcap CVS, but - * this seems to be what they have settled on... -@@ -160,6 +161,13 @@ - static int loadplugin __P((char **)); - #endif - -+#ifdef PPP_PRECOMPILED_FILTER -+#include "pcap_pcc.h" -+static int setprecompiledpassfilter __P((char **)); -+static int setprecompiledactivefilter __P((char **)); -+#undef PPP_FILTER -+#endif -+ - #ifdef PPP_FILTER - static int setpassfilter __P((char **)); - static int setactivefilter __P((char **)); -@@ -317,6 +325,14 @@ - "set filter for active pkts", OPT_PRIO }, - #endif - -+#ifdef PPP_PRECOMPILED_FILTER -+ { "precompiled-pass-filter", 1, setprecompiledpassfilter, -+ "set precompiled filter for packets to pass", OPT_PRIO }, -+ -+ { "precompiled-active-filter", 1, setprecompiledactivefilter, -+ "set precompiled filter for active pkts", OPT_PRIO }, -+#endif -+ - #ifdef MAXOCTETS - { "maxoctets", o_int, &maxoctets, - "Set connection traffic limit", -@@ -1456,6 +1472,29 @@ - return ok; - } - -+#ifdef PPP_PRECOMPILED_FILTER -+/* -+ * setprecompiledpassfilter - Set the pass filter for packets using a -+ * precompiled expression -+ */ -+static int -+setprecompiledpassfilter(argv) -+ char **argv; -+{ -+ return pcap_pre_compiled (*argv, &pass_filter); -+} -+ -+/* -+ * setactivefilter - Set the active filter for packets -+ */ -+static int -+setprecompiledactivefilter(argv) -+ char **argv; -+{ -+ return pcap_pre_compiled (*argv, &active_filter); -+} -+#endif -+ - #ifdef PPP_FILTER - /* - * setpassfilter - Set the pass filter for packets -diff -Naur ppp-2.4.4.orig/pppd/pcap_pcc.c ppp-2.4.4/pppd/pcap_pcc.c ---- ppp-2.4.4.orig/pppd/pcap_pcc.c 1969-12-31 19:00:00.000000000 -0500 -+++ ppp-2.4.4/pppd/pcap_pcc.c 2009-05-07 22:33:12.000000000 -0400 -@@ -0,0 +1,74 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include "pppd.h" -+ -+int pcap_pre_compiled (char * fname, struct bpf_program *p) -+{ -+ char buf[128]; -+ int line = 0, size = 0, index=0, ret=1; -+ FILE *f = fopen (fname, "r"); -+ if (!f) -+ { -+ option_error("error opening precompiled active-filter '%s': %s", -+ fname, strerror (errno)); -+ return 0; -+ } -+ while (fgets (buf, 127, f)) -+ { -+ line++; -+ if (*buf == '#') -+ continue; -+ if (size) -+ { -+ /* -+ struct bpf_insn { -+ u_short code; -+ u_char jt; -+ u_char jf; -+ bpf_int32 k; -+ } -+ */ -+ struct bpf_insn * insn = & p->bf_insns[index]; -+ unsigned code, jt, jf, k; -+ if (sscanf (buf, "%u %u %u %u", &code, &jt, &jf, &k) != 4) -+ { -+ goto err; -+ } -+ insn->code = code; -+ insn->jt = jt; -+ insn->jf = jf; -+ insn->k = k; -+ index++; -+ } -+ else -+ { -+ if (sscanf (buf, "%u", &size) != 1) -+ { -+ goto err; -+ } -+ p->bf_len = size; -+ p->bf_insns = (struct bpf_insn *) -+ malloc (size * sizeof (struct bpf_insn)); -+ } -+ } -+ if (size != index) -+ { -+ option_error("error in precompiled active-filter," -+ " expected %d expressions, got %dn", -+ size, index); -+ ret = 0; -+ } -+ fclose(f); -+ return ret; -+ -+err: -+ option_error("error in precompiled active-filter" -+ " expression line %s:%d (wrong size)\n", -+ fname, line); -+ fclose (f); -+ return 0; -+} -diff -Naur ppp-2.4.4.orig/pppd/pcap_pcc.h ppp-2.4.4/pppd/pcap_pcc.h ---- ppp-2.4.4.orig/pppd/pcap_pcc.h 1969-12-31 19:00:00.000000000 -0500 -+++ ppp-2.4.4/pppd/pcap_pcc.h 2009-05-07 22:33:12.000000000 -0400 -@@ -0,0 +1,7 @@ -+#ifndef PCAP_PCC_H -+#define PCAP_PCC_H -+ -+#include -+ -+int pcap_pre_compiled (char * fname, struct bpf_program *p); -+#endif /* PCAP_PCC_H */