#endif
#if defined(DLT_BLUETOOTH_HCI_H4_WITH_PHDR) && defined(HAVE_PCAP_BLUETOOTH_H)
{ bt_if_print, DLT_BLUETOOTH_HCI_H4_WITH_PHDR},
+#endif
+#if defined(HAVE_PCAP_USB_H) && defined(DLT_USB_LINUX)
+ { usb_linux_print, DLT_USB_LINUX},
+#endif
+#if defined(HAVE_PCAP_USB_H) && defined(DLT_USB_LINUX_MMAPPED)
+ { usb_linux_print, DLT_USB_LINUX_MMAPPED},
+#endif
+#ifdef DLT_IPNET
+ { ipnet_if_print, DLT_IPNET },
#endif
{ NULL, 0 },
};
case 'A':
++Aflag;
break;
+ case 'b':
+ ++bflag;
+ break;
#if defined(HAVE_PCAP_CREATE) || defined(WIN32)
case 'B':
if (pcap_findalldevs(&devpointer, ebuf) < 0)
error("%s", ebuf);
else {
- for (i = 0; i < devnum-1; i++){
- devpointer = devpointer->next;
- if (devpointer == NULL)
- error("Invalid adapter index");
- }
+ /*
+ * Look for the devnum-th entry
+ * in the list of devices
+ * (1-based).
+ */
+ for (i = 0;
+ i < devnum-1 && devpointer != NULL;
+ i++, devpointer = devpointer->next)
+ ;
+ if (devpointer == NULL)
+ error("Invalid adapter index");
}
device = devpointer->name;
break;
snaplen = strtol(optarg, &end, 0);
if (optarg == end || *end != '\0'
- || snaplen < 0 || snaplen > 65535)
+ || snaplen < 0 || snaplen > MAXIMUM_SNAPLEN)
error("invalid snaplen %s", optarg);
else if (snaplen == 0)
- snaplen = 65535;
+ snaplen = MAXIMUM_SNAPLEN;
break;
}
if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0)
error("%s", pcap_geterr(pd));
+ free(cmdbuf);
if (dflag) {
bpf_dump(&fcode, dflag);
pcap_close(pd);
if (printinfo.printer == NULL) {
gndo->ndo_dltname = pcap_datalink_val_to_name(type);
if (gndo->ndo_dltname != NULL)
- error("unsupported data link type %s",
+ error("packet printing is not supported for link type %s: use -w",
gndo->ndo_dltname);
else
- error("unsupported data link type %d", type);
+ error("packet printing is not supported for link type %d: use -w", type);
}
callback = print_packet;
pcap_userdata = (u_char *)&printinfo;
{
struct pcap_stat stat;
+ /*
+ * Older versions of libpcap didn't set ps_ifdrop on some
+ * platforms; initialize it to 0 to handle that.
+ */
+ stat.ps_ifdrop = 0;
if (pcap_stats(pd, &stat) < 0) {
(void)fprintf(stderr, "pcap_stats: %s\n", pcap_geterr(pd));
infoprint = 0;
fputs(", ", stderr);
else
putc('\n', stderr);
- (void)fprintf(stderr, "%d packets received by filter", stat.ps_recv);
+ (void)fprintf(stderr, "%u packets received by filter", stat.ps_recv);
if (!verbose)
fputs(", ", stderr);
else
putc('\n', stderr);
- (void)fprintf(stderr, "%d packets dropped by kernel\n", stat.ps_drop);
+ (void)fprintf(stderr, "%u packets dropped by kernel", stat.ps_drop);
+ if (stat.ps_ifdrop != 0) {
+ if (!verbose)
+ fputs(", ", stderr);
+ else
+ putc('\n', stderr);
+ (void)fprintf(stderr, "%u packets dropped by interface\n",
+ stat.ps_ifdrop);
+ } else
+ putc('\n', stderr);
infoprint = 0;
}
#else
setpriority(PRIO_PROCESS, 0, 19);
#endif
- if (execlp(zflag, zflag, filename, NULL) == -1)
+ if (execlp(zflag, zflag, filename, (char *)NULL) == -1)
fprintf(stderr,
"compress_savefile:execlp(%s, %s): %s\n",
zflag,