Revert "Use pcap_setdirection instead of filter"
authorJoseph C. Lehner <joseph.c.lehner@gmail.com>
Sun, 16 Apr 2017 13:51:14 +0000 (15:51 +0200)
committerJoseph C. Lehner <joseph.c.lehner@gmail.com>
Sun, 16 Apr 2017 13:51:14 +0000 (15:51 +0200)
This reverts commit 590e7a079f097cabe19705aa8b22f486e1ca2d44.
Fixes #5.

ethsock.c

index 685e34ac5cdb90665aff59e2f879efd5cc8a4792..d8a732673fbb5b5fc82d76c8c231abe829bbe925 100644 (file)
--- a/ethsock.c
+++ b/ethsock.c
@@ -494,7 +494,7 @@ inline uint8_t *ethsock_get_hwaddr(struct ethsock *sock)
 struct ethsock *ethsock_create(const char *intf, uint16_t protocol)
 {
        char buf[PCAP_ERRBUF_SIZE];
-       struct bpf_program bpf;
+       struct bpf_program fp;
        struct ethsock *sock;
        bool is_bridge;
        int err;
@@ -561,22 +561,17 @@ struct ethsock *ethsock_create(const char *intf, uint16_t protocol)
        }
 #endif
 
-       err = pcap_setdirection(sock->pcap, PCAP_D_IN);
-       if (err) {
-               pcap_perror(sock->pcap, "pcap_setdirection");
-               goto cleanup;
-       }
-
-       snprintf(buf, sizeof(buf), "ether proto 0x%04x", protocol);
+       snprintf(buf, sizeof(buf), "ether proto 0x%04x and not ether src %s",
+                       protocol, mac_to_str(sock->hwaddr));
 
-       err = pcap_compile(sock->pcap, &bpf, buf, 0, 0);
+       err = pcap_compile(sock->pcap, &fp, buf, 0, 0);
        if (err) {
                pcap_perror(sock->pcap, "pcap_compile");
                goto cleanup;
        }
 
-       err = pcap_setfilter(sock->pcap, &bpf);
-       pcap_freecode(&bpf);
+       err = pcap_setfilter(sock->pcap, &fp);
+       pcap_freecode(&fp);
 
        if (err) {
                pcap_perror(sock->pcap, "pcap_setfilter");