123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- $Id$
- --- arpd.orig/arpd.c 2003-02-09 05:20:40.000000000 +0100
- +++ arpd/arpd.c 2007-01-21 00:39:05.000000000 +0100
- @@ -70,7 +70,7 @@ static int arpd_sig;
- 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 @@ arpd_expandips(int naddresses, char **ad
- }
-
- 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 @@ arpd_init(char *dev, int naddresses, cha
- 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);
- @@ -265,7 +269,7 @@ arpd_send(eth_t *eth, int op,
- spa->addr_ip, tha->addr_eth, tpa->addr_ip);
-
- if (op == ARP_OP_REQUEST) {
- - syslog(LOG_DEBUG, __FUNCTION__ ": who-has %s tell %s",
- + syslog(LOG_DEBUG, "%s: who-has %s tell %s", __FUNCTION__,
- addr_ntoa(tpa), addr_ntoa(spa));
- } else if (op == ARP_OP_REPLY) {
- syslog(LOG_INFO, "arp reply %s is-at %s",
- @@ -282,7 +286,7 @@ arpd_lookup(struct addr *addr)
- int error;
-
- if (addr_cmp(addr, &arpd_ifent.intf_addr) == 0) {
- - syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
- + syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
- addr_ntoa(addr), addr_ntoa(&arpd_ifent.intf_link_addr));
- return (0);
- }
- @@ -291,10 +295,10 @@ arpd_lookup(struct addr *addr)
- error = arp_get(arpd_arp, &arpent);
-
- if (error == -1) {
- - syslog(LOG_DEBUG, __FUNCTION__ ": no entry for %s",
- + syslog(LOG_DEBUG, "%s: no entry for %s", __FUNCTION__,
- addr_ntoa(addr));
- } else {
- - syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
- + syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
- addr_ntoa(addr), addr_ntoa(&arpent.arp_ha));
- }
- return (error);
- @@ -423,7 +427,7 @@ arpd_recv_cb(u_char *u, const struct pca
- if ((req = SPLAY_FIND(tree, &arpd_reqs, &tmp)) != NULL) {
- addr_pack(&src.arp_ha, ADDR_TYPE_ETH, ETH_ADDR_BITS,
- ethip->ar_sha, ETH_ADDR_LEN);
- - syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
- + syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
- addr_ntoa(&req->pa), addr_ntoa(&src.arp_ha));
-
- /* This address is claimed */
- @@ -465,14 +469,14 @@ main(int argc, char *argv[])
- {
- 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 @@ main(int argc, char *argv[])
- case 'i':
- dev = optarg;
- break;
- + case 'a':
- + and_pcap_exp = optarg;
- + break;
- default:
- usage();
- break;
- @@ -489,9 +496,9 @@ main(int argc, char *argv[])
- 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");
|