]> The Tcpdump Group git mirrors - libpcap/blobdiff - pcap-netmap.c
CI: Call print_so_deps() on rpcapd in remote enabled build
[libpcap] / pcap-netmap.c
index ff9e79cb40f6e843ed90facb956ad19be160a87e..56a6bc418086d8aad8d70615ce146ed527d2395d 100644 (file)
  * SUCH DAMAGE.
  */
 
-#ifdef HAVE_CONFIG_H
 #include <config.h>
-#endif
 
 #include <poll.h>
-#include <ctype.h>
 #include <errno.h>
 #include <netdb.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <sys/ioctl.h>
 
 #define NETMAP_WITH_LIBS
 #include <net/netmap_user.h>
@@ -67,7 +65,7 @@ pcap_netmap_stats(pcap_t *p, struct pcap_stat *ps)
 {
        struct pcap_netmap *pn = p->priv;
 
-       ps->ps_recv = pn->rx_pkts;
+       ps->ps_recv = (u_int)pn->rx_pkts;
        ps->ps_drop = 0;
        ps->ps_ifdrop = 0;
        return 0;
@@ -82,7 +80,7 @@ pcap_netmap_filter(u_char *arg, struct pcap_pkthdr *h, const u_char *buf)
        const struct bpf_insn *pc = p->fcode.bf_insns;
 
        ++pn->rx_pkts;
-       if (pc == NULL || pcap_filter(pc, buf, h->len, h->caplen))
+       if (pc == NULL || pcapint_filter(pc, buf, h->len, h->caplen))
                pn->cb(pn->cb_arg, h, buf);
 }
 
@@ -134,15 +132,19 @@ pcap_netmap_ioctl(pcap_t *p, u_long what, uint32_t *if_flags)
        struct ifreq ifr;
        int error, fd = d->fd;
 
-#ifdef linux
+#ifdef __linux__
        fd = socket(AF_INET, SOCK_DGRAM, 0);
        if (fd < 0) {
                fprintf(stderr, "Error: cannot get device control socket.\n");
                return -1;
        }
-#endif /* linux */
+#endif /* __linux__ */
        bzero(&ifr, sizeof(ifr));
-       strncpy(ifr.ifr_name, d->req.nr_name, sizeof(ifr.ifr_name));
+       /*
+        * ifreq.ifr_name and nmreq.nr_name have the same size and both
+        * contain a NUL-terminated string.
+        */
+       (void)pcapint_strlcpy(ifr.ifr_name, d->req.nr_name, sizeof(ifr.ifr_name));
        switch (what) {
        case SIOCSIFFLAGS:
                /*
@@ -195,9 +197,9 @@ pcap_netmap_ioctl(pcap_t *p, u_long what, uint32_t *if_flags)
 #endif /* __FreeBSD__ */
                }
        }
-#ifdef linux
+#ifdef __linux__
        close(fd);
-#endif /* linux */
+#endif /* __linux__ */
        return error ? -1 : 0;
 }
 
@@ -217,7 +219,7 @@ pcap_netmap_close(pcap_t *p)
                }
        }
        nm_close(d);
-       pcap_cleanup_live_common(p);
+       pcapint_cleanup_live_common(p);
 }
 
 
@@ -230,15 +232,15 @@ pcap_netmap_activate(pcap_t *p)
 
        d = nm_open(p->opt.device, NULL, 0, NULL);
        if (d == NULL) {
-               pcap_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE,
+               pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE,
                    errno, "netmap open: cannot access %s",
                    p->opt.device);
-               pcap_cleanup_live_common(p);
+               pcapint_cleanup_live_common(p);
                return (PCAP_ERROR);
        }
 #if 0
        fprintf(stderr, "%s device %s priv %p fd %d ports %d..%d\n",
-           __FUNCTION__, p->opt.device, d, d->fd,
+           __func__, p->opt.device, d, d->fd,
            d->first_rx_ring, d->last_rx_ring);
 #endif
        pn->d = d;
@@ -267,11 +269,11 @@ pcap_netmap_activate(pcap_t *p)
        p->selectable_fd = p->fd;
        p->read_op = pcap_netmap_dispatch;
        p->inject_op = pcap_netmap_inject;
-       p->setfilter_op = install_bpf_program;
+       p->setfilter_op = pcapint_install_bpf_program;
        p->setdirection_op = NULL;
        p->set_datalink_op = NULL;
-       p->getnonblock_op = pcap_getnonblock_fd;
-       p->setnonblock_op = pcap_setnonblock_fd;
+       p->getnonblock_op = pcapint_getnonblock_fd;
+       p->setnonblock_op = pcapint_setnonblock_fd;
        p->stats_op = pcap_netmap_stats;
        p->cleanup_op = pcap_netmap_close;
 
@@ -287,7 +289,7 @@ pcap_netmap_create(const char *device, char *ebuf, int *is_ours)
        *is_ours = (!strncmp(device, "netmap:", 7) || !strncmp(device, "vale", 4));
        if (! *is_ours)
                return NULL;
-       p = pcap_create_common(ebuf, sizeof (struct pcap_netmap));
+       p = PCAP_CREATE_COMMON(ebuf, struct pcap_netmap);
        if (p == NULL)
                return (NULL);
        p->activate_op = pcap_netmap_activate;