]> The Tcpdump Group git mirrors - libpcap/blobdiff - testprogs/opentest.c
CI: Call print_so_deps() on rpcapd in remote enabled build
[libpcap] / testprogs / opentest.c
index 3c83a59824cd287dadeffa9dc0ad19ffac4d07b7..2db5229fefda2ef044dba3d5a06d46a5e2c6097e 100644 (file)
@@ -59,7 +59,7 @@ main(int argc, char **argv)
 {
        register int op;
        register char *cp, *device;
-       int dorfmon, dopromisc, snaplen, useactivate, bufsize;
+       int dorfmon, dopromisc, snaplen, useactivate, useopen, bufsize;
        char ebuf[PCAP_ERRBUF_SIZE];
        pcap_if_t *devlist;
        pcap_t *pd;
@@ -71,17 +71,18 @@ main(int argc, char **argv)
        snaplen = MAXIMUM_SNAPLEN;
        bufsize = 0;
        useactivate = 0;
+       useopen = 0;
        if ((cp = strrchr(argv[0], '/')) != NULL)
                program_name = cp + 1;
        else
                program_name = argv[0];
 
        opterr = 0;
-       while ((op = getopt(argc, argv, "i:Ips:aB:")) != -1) {
+       while ((op = getopt(argc, argv, "i:Iops:aB:")) != -1) {
                switch (op) {
 
                case 'i':
-                       device = optarg;
+                       device = strdup(optarg);
                        break;
 
                case 'I':
@@ -89,6 +90,10 @@ main(int argc, char **argv)
                        useactivate = 1;        /* required for rfmon */
                        break;
 
+               case 'o':
+                       useopen = 1;
+                       break;
+
                case 'p':
                        dopromisc = 1;
                        break;
@@ -182,6 +187,16 @@ main(int argc, char **argv)
                            pcap_statustostr(status), pcap_geterr(pd));
                } else
                        printf("%s opened successfully\n", device);
+       } else if (useopen) {
+               *ebuf = '\0';
+               pd = pcap_open(device, 65535, PCAP_OPENFLAG_PROMISCUOUS,
+                   1000, NULL, ebuf);
+               if (pd == NULL)
+                       error("%s", ebuf);
+               else if (*ebuf)
+                       warning("%s", ebuf);
+               else
+                       printf("%s opened successfully\n", device);
        } else {
                *ebuf = '\0';
                pd = pcap_open_live(device, 65535, 0, 1000, ebuf);
@@ -192,6 +207,7 @@ main(int argc, char **argv)
                else
                        printf("%s opened successfully\n", device);
        }
+       free(device);
        pcap_close(pd);
        exit(status < 0 ? 1 : 0);
 }