pcap_setdirection() succeeds only for particular combination of
platform, interface type and direction. Calling it on each invocation
(with PCAP_D_INOUT by default) was wrong: some interfaces are two-way,
others are one-way, and pcap_setdirection() has its own idea what it
supports and what doesn't. In particular, it was impossible to do any
capture on nflog interface in Linux since commit
df7d24f. Now the
function is only called on -P flag.
static int Jflag; /* list available time stamp types */
#endif
#ifdef HAVE_PCAP_SETDIRECTION
static int Jflag; /* list available time stamp types */
#endif
#ifdef HAVE_PCAP_SETDIRECTION
-int Pflag = PCAP_D_INOUT; /* Restrict captured packet by sent/receive direction */
+int Pflag = -1; /* Restrict captured packet by sent/receive direction */
#endif
static char *zflag = NULL; /* compress each savefile using a specified command (like gzip or bzip2) */
#endif
static char *zflag = NULL; /* compress each savefile using a specified command (like gzip or bzip2) */
pcap_statustostr(status));
}
#ifdef HAVE_PCAP_SETDIRECTION
pcap_statustostr(status));
}
#ifdef HAVE_PCAP_SETDIRECTION
- status = pcap_setdirection(pd, Pflag);
- if (status != 0)
- error("%s: pcap_set_direction failed: %s",
- device, pcap_geterr(pd));
+ if (Pflag != -1) {
+ status = pcap_setdirection(pd, Pflag);
+ if (status != 0)
+ error("%s: pcap_setdirection() failed: %s",
+ device, pcap_geterr(pd));
+ }
#endif
#else
*ebuf = '\0';
#endif
#else
*ebuf = '\0';