qt4: Add qws- prefix to QWS specific files.
[openwrt/svn-archive/archive.git] / net / arpd / patches / 003-pcap_and_arg.patch
1 --- a/arpd.c
2 +++ b/arpd.c
3 @@ -70,7 +70,7 @@ static int arpd_sig;
4 static void
5 usage(void)
6 {
7 - fprintf(stderr, "Usage: arpd [-d] [-i interface] [net]\n");
8 + fprintf(stderr, "Usage: arpd [-d] [-i interface] [-a 'pcap_expr'] [{host|net|range} ...]\n");
9 exit(1);
10 }
11
12 @@ -182,7 +182,7 @@ arpd_expandips(int naddresses, char **ad
13 }
14
15 static void
16 -arpd_init(char *dev, int naddresses, char **addresses)
17 +arpd_init(char *dev, char *and_pcap_exp, int naddresses, char **addresses)
18 {
19 struct bpf_program fcode;
20 char filter[1024], ebuf[PCAP_ERRBUF_SIZE], *dst;
21 @@ -214,9 +214,13 @@ arpd_init(char *dev, int naddresses, cha
22 errx(1, "bad interface configuration: not IP or Ethernet");
23 arpd_ifent.intf_addr.addr_bits = IP_ADDR_BITS;
24
25 - snprintf(filter, sizeof(filter), "arp %s%s%s and not ether src %s",
26 + snprintf(filter, sizeof(filter), "arp %s%s%s and not ether src %s%s%s%s",
27 dst ? "and (" : "", dst ? dst : "", dst ? ")" : "",
28 - addr_ntoa(&arpd_ifent.intf_link_addr));
29 + addr_ntoa(&arpd_ifent.intf_link_addr),
30 + and_pcap_exp ? " and (" : "",
31 + and_pcap_exp ? and_pcap_exp : "",
32 + and_pcap_exp ? ")" : ""
33 + );
34
35 if ((arpd_pcap = pcap_open_live(dev, 128, 0, 500, ebuf)) == NULL)
36 errx(1, "pcap_open_live: %s", ebuf);
37 @@ -465,14 +469,15 @@ main(int argc, char *argv[])
38 {
39 struct event recv_ev;
40 extern int (*event_sigcb)(void);
41 - char *dev;
42 + char *dev, *and_pcap_exp;
43 int c, debug;
44 FILE *fp;
45
46 dev = NULL;
47 + and_pcap_exp = NULL;
48 debug = 0;
49
50 - while ((c = getopt(argc, argv, "di:h?")) != -1) {
51 + while ((c = getopt(argc, argv, "a:di:h?")) != -1) {
52 switch (c) {
53 case 'd':
54 debug = 1;
55 @@ -480,6 +485,9 @@ main(int argc, char *argv[])
56 case 'i':
57 dev = optarg;
58 break;
59 + case 'a':
60 + and_pcap_exp = optarg;
61 + break;
62 default:
63 usage();
64 break;
65 @@ -489,9 +497,9 @@ main(int argc, char *argv[])
66 argv += optind;
67
68 if (argc == 0)
69 - arpd_init(dev, 0, NULL);
70 + arpd_init(dev, and_pcap_exp, 0, NULL);
71 else
72 - arpd_init(dev, argc, argv);
73 + arpd_init(dev, and_pcap_exp, argc, argv);
74
75 if ((fp = fopen(PIDFILE, "w")) == NULL)
76 err(1, "fopen");