$NetBSD: patch-aa,v 1.1 2008/01/12 22:53:40 christian_gall Exp $ --- softflowd.c.orig 2008-01-12 01:54:37.000000000 +0100 +++ softflowd.c @@ -1329,7 +1329,7 @@ unix_listener(const char *path) static void setup_packet_capture(struct pcap **pcap, int *linktype, - char *dev, char *capfile, char *bpf_prog, int need_v6) + char *dev, int if_promisc, char *capfile, char *bpf_prog, int need_v6) { char ebuf[PCAP_ERRBUF_SIZE]; struct bpf_program prog_c; @@ -1339,7 +1339,7 @@ setup_packet_capture(struct pcap **pcap, if (dev != NULL) { if ((*pcap = pcap_open_live(dev, need_v6 ? LIBPCAP_SNAPLEN_V6 : LIBPCAP_SNAPLEN_V4, - 1, 0, ebuf)) == NULL) { + if_promisc, 0, ebuf)) == NULL) { fprintf(stderr, "pcap_open_live: %s\n", ebuf); exit(1); } @@ -1447,6 +1447,7 @@ usage(void) fprintf(stderr, " -m max_flows Specify maximum number of flows to track (default %d)\n", DEFAULT_MAX_FLOWS); fprintf(stderr, " -n host:port Send Cisco NetFlow(tm)-compatible packets to host:port\n"); fprintf(stderr, " -p pidfile Record pid in specified file (default: %s)\n", DEFAULT_PIDFILE); + fprintf(stderr, " -P don't put interface into promiscuos mode\n"); fprintf(stderr, " -c pidfile Location of control socket (default: %s)\n", DEFAULT_CTLSOCK); fprintf(stderr, " -v 1|5|9 NetFlow export packet version\n"); fprintf(stderr, " -L hoplimit Set TTL/hoplimit for export datagrams\n"); @@ -1635,6 +1636,7 @@ main(int argc, char **argv) extern int optind; int ch, dontfork_flag, linktype, ctlsock, i, r, err, always_v6; int max_flows, stop_collection_flag, exit_request, hoplimit; + int if_promisc = 1; pcap_t *pcap = NULL; struct sockaddr_storage dest; struct FLOWTRACK flowtrack; @@ -1660,7 +1662,7 @@ main(int argc, char **argv) ctlsock_path = DEFAULT_CTLSOCK; dontfork_flag = 0; always_v6 = 0; - while ((ch = getopt(argc, argv, "6hdDL:T:i:r:f:t:n:m:p:c:v:")) != -1) { + while ((ch = getopt(argc, argv, "6hdDPL:T:i:r:f:t:n:m:p:c:v:")) != -1) { switch (ch) { case '6': always_v6 = 1; @@ -1731,6 +1733,9 @@ main(int argc, char **argv) parse_hostport(optarg, (struct sockaddr *)&dest, &dest_len); break; + case 'P': + if_promisc = 0; + break; case 'p': pidfile_path = optarg; break; @@ -1768,7 +1773,7 @@ main(int argc, char **argv) bpf_prog = argv_join(argc - optind, argv + optind); /* Will exit on failure */ - setup_packet_capture(&pcap, &linktype, dev, capfile, bpf_prog, + setup_packet_capture(&pcap, &linktype, dev, if_promisc, capfile, bpf_prog, target.dialect->v6_capable || always_v6); /* Netflow send socket */