148 lines
4.4 KiB
Text
148 lines
4.4 KiB
Text
$NetBSD: patch-ag,v 1.1.1.1 1999/10/08 04:34:43 dbj Exp $
|
|
|
|
Index: pppd/options.c
|
|
diff -u pppd/options.c:1.1.1.5 pppd/options.c:1.30
|
|
--- pppd/options.c:1.1.1.5 Tue Aug 24 13:25:41 1999
|
|
+++ pppd/options.c Tue Aug 24 19:07:44 1999
|
|
@@ -108,8 +119,14 @@
|
|
struct option_info ptycommand_info;
|
|
|
|
#ifdef PPP_FILTER
|
|
-struct bpf_program pass_filter;/* Filter program for packets to pass */
|
|
-struct bpf_program active_filter; /* Filter program for link-active pkts */
|
|
+/* Filter program for packets to pass */
|
|
+struct bpf_program pass_filter_in;
|
|
+struct bpf_program pass_filter_out;
|
|
+
|
|
+/* Filter program for link-active packets */
|
|
+struct bpf_program active_filter_in;
|
|
+struct bpf_program active_filter_out;
|
|
+
|
|
pcap_t pc; /* Fake struct pcap so we can compile expr */
|
|
#endif
|
|
|
|
@@ -136,11 +153,12 @@
|
|
static int setlogfile __P((char **));
|
|
|
|
#ifdef PPP_FILTER
|
|
-static int setpassfilter __P((char **));
|
|
-static int setactivefilter __P((char **));
|
|
+static int setpassfilter_in __P((char **));
|
|
+static int setpassfilter_out __P((char **));
|
|
+static int setactivefilter_in __P((char **));
|
|
+static int setactivefilter_out __P((char **));
|
|
#endif
|
|
|
|
-
|
|
static option_t *find_option __P((char *name));
|
|
static int process_option __P((option_t *, char **));
|
|
static int n_arguments __P((option_t *));
|
|
@@ -250,10 +268,14 @@
|
|
#ifdef PPP_FILTER
|
|
{ "pdebug", o_int, &dflag,
|
|
"libpcap debugging" },
|
|
- { "pass-filter", 1, setpassfilter,
|
|
- "set filter for packets to pass" },
|
|
- { "active-filter", 1, setactivefilter,
|
|
- "set filter for active pkts" },
|
|
+ { "pass-filter-in", 1, setpassfilter_in,
|
|
+ "set filter for packets to pass inwards" },
|
|
+ { "pass-filter-out", 1, setpassfilter_out,
|
|
+ "set filter for packets to pass outwards" },
|
|
+ { "active-filter-in", 1, setactivefilter_in,
|
|
+ "set filter for active pkts inwards" },
|
|
+ { "active-filter-out", 1, setactivefilter_out,
|
|
+ "set filter for active pkts outwards" },
|
|
#endif
|
|
|
|
{ NULL }
|
|
@@ -274,6 +296,7 @@
|
|
auth Require authentication from peer\n\
|
|
connect <p> Invoke shell command <p> to set up the serial line\n\
|
|
crtscts Use hardware RTS/CTS flow control\n\
|
|
+ cdtrcts Use hardware DTR/CTS flow control (if supported)\n\
|
|
defaultroute Add default route through interface\n\
|
|
file <f> Take options from file <f>\n\
|
|
modem Use modem control lines\n\
|
|
@@ -1185,44 +1208,68 @@
|
|
|
|
#ifdef PPP_FILTER
|
|
/*
|
|
- * setpdebug - Set libpcap debugging level.
|
|
+ * setpassfilter_in - Set the incoming pass filter
|
|
*/
|
|
static int
|
|
-setpdebug(argv)
|
|
+setpassfilter_in(argv)
|
|
char **argv;
|
|
{
|
|
- return int_option(*argv, &dflag);
|
|
+ pc.linktype = DLT_PPP_SERIAL;
|
|
+ pc.snapshot = PPP_HDRLEN;
|
|
+
|
|
+ if (pcap_compile(&pc, &pass_filter_in, *argv, 1, netmask) == 0)
|
|
+ return 1;
|
|
+ option_error("error in pass-filter-in expression: %s\n", pcap_geterr(&pc));
|
|
+ return 0;
|
|
}
|
|
|
|
/*
|
|
- * setpassfilter - Set the pass filter for packets
|
|
+ * setpassfilter_out - Set the outgoing pass filter
|
|
*/
|
|
static int
|
|
-setpassfilter(argv)
|
|
+setpassfilter_out(argv)
|
|
char **argv;
|
|
{
|
|
- pc.linktype = DLT_PPP;
|
|
+ pc.linktype = DLT_PPP_SERIAL;
|
|
pc.snapshot = PPP_HDRLEN;
|
|
|
|
- if (pcap_compile(&pc, &pass_filter, *argv, 1, netmask) == 0)
|
|
+ if (pcap_compile(&pc, &pass_filter_out, *argv, 1, netmask) == 0)
|
|
+ return 1;
|
|
+ option_error("error in pass-filter-out expression: %s\n", pcap_geterr(&pc));
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * setactivefilter_in - Set the incoming active filter
|
|
+ */
|
|
+static int
|
|
+setactivefilter_in(argv)
|
|
+ char **argv;
|
|
+{
|
|
+ pc.linktype = DLT_PPP_SERIAL;
|
|
+ pc.snapshot = PPP_HDRLEN;
|
|
+
|
|
+ if (pcap_compile(&pc, &active_filter_in, *argv, 1, netmask) == 0)
|
|
return 1;
|
|
- option_error("error in pass-filter expression: %s\n", pcap_geterr(&pc));
|
|
+ option_error("error in active-filter-in expression: %s\n",
|
|
+ pcap_geterr(&pc));
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
- * setactivefilter - Set the active filter for packets
|
|
+ * setactivefilter_out - Set the outgoing active filter
|
|
*/
|
|
static int
|
|
-setactivefilter(argv)
|
|
+setactivefilter_out(argv)
|
|
char **argv;
|
|
{
|
|
- pc.linktype = DLT_PPP;
|
|
+ pc.linktype = DLT_PPP_SERIAL;
|
|
pc.snapshot = PPP_HDRLEN;
|
|
|
|
- if (pcap_compile(&pc, &active_filter, *argv, 1, netmask) == 0)
|
|
+ if (pcap_compile(&pc, &active_filter_out, *argv, 1, netmask) == 0)
|
|
return 1;
|
|
- option_error("error in active-filter expression: %s\n", pcap_geterr(&pc));
|
|
+ option_error("error in active-filter-out expression: %s\n",
|
|
+ pcap_geterr(&pc));
|
|
return 0;
|
|
}
|
|
#endif
|