mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-25 03:38:25 +02:00
76 lines
1.9 KiB
Diff
76 lines
1.9 KiB
Diff
|
--- arpd/arpd.c Sun Feb 9 05:20:40 2003
|
||
|
+++ arpd/arpd.c.new Mon Aug 1 00:50:40 2005
|
||
|
@@ -70,7 +70,7 @@
|
||
|
static void
|
||
|
usage(void)
|
||
|
{
|
||
|
- fprintf(stderr, "Usage: arpd [-d] [-i interface] [net]\n");
|
||
|
+ fprintf(stderr, "Usage: arpd [-d] [-i interface] [-a 'pcap_expr'] [{host|net|range} ...]\n");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
@@ -182,7 +182,7 @@
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
-arpd_init(char *dev, int naddresses, char **addresses)
|
||
|
+arpd_init(char *dev, char *and_pcap_exp, int naddresses, char **addresses)
|
||
|
{
|
||
|
struct bpf_program fcode;
|
||
|
char filter[1024], ebuf[PCAP_ERRBUF_SIZE], *dst;
|
||
|
@@ -214,9 +214,13 @@
|
||
|
errx(1, "bad interface configuration: not IP or Ethernet");
|
||
|
arpd_ifent.intf_addr.addr_bits = IP_ADDR_BITS;
|
||
|
|
||
|
- snprintf(filter, sizeof(filter), "arp %s%s%s and not ether src %s",
|
||
|
+ snprintf(filter, sizeof(filter), "arp %s%s%s and not ether src %s%s%s%s",
|
||
|
dst ? "and (" : "", dst ? dst : "", dst ? ")" : "",
|
||
|
- addr_ntoa(&arpd_ifent.intf_link_addr));
|
||
|
+ addr_ntoa(&arpd_ifent.intf_link_addr),
|
||
|
+ and_pcap_exp ? " and (" : "",
|
||
|
+ and_pcap_exp ? and_pcap_exp : "",
|
||
|
+ and_pcap_exp ? ")" : ""
|
||
|
+ );
|
||
|
|
||
|
if ((arpd_pcap = pcap_open_live(dev, 128, 0, 500, ebuf)) == NULL)
|
||
|
errx(1, "pcap_open_live: %s", ebuf);
|
||
|
@@ -465,14 +469,14 @@
|
||
|
{
|
||
|
struct event recv_ev;
|
||
|
extern int (*event_sigcb)(void);
|
||
|
- char *dev;
|
||
|
+ char *dev, *and_pcap_exp;
|
||
|
int c, debug;
|
||
|
FILE *fp;
|
||
|
|
||
|
dev = NULL;
|
||
|
debug = 0;
|
||
|
|
||
|
- while ((c = getopt(argc, argv, "di:h?")) != -1) {
|
||
|
+ while ((c = getopt(argc, argv, "a:di:h?")) != -1) {
|
||
|
switch (c) {
|
||
|
case 'd':
|
||
|
debug = 1;
|
||
|
@@ -480,6 +484,9 @@
|
||
|
case 'i':
|
||
|
dev = optarg;
|
||
|
break;
|
||
|
+ case 'a':
|
||
|
+ and_pcap_exp = optarg;
|
||
|
+ break;
|
||
|
default:
|
||
|
usage();
|
||
|
break;
|
||
|
@@ -489,9 +496,9 @@
|
||
|
argv += optind;
|
||
|
|
||
|
if (argc == 0)
|
||
|
- arpd_init(dev, 0, NULL);
|
||
|
+ arpd_init(dev, and_pcap_exp, 0, NULL);
|
||
|
else
|
||
|
- arpd_init(dev, argc, argv);
|
||
|
+ arpd_init(dev, and_pcap_exp, argc, argv);
|
||
|
|
||
|
if ((fp = fopen(PIDFILE, "w")) == NULL)
|
||
|
err(1, "fopen");
|