* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
+
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/libpcap/pcap-linux.c,v 1.89 2003-04-09 07:19:49 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/libpcap/pcap-linux.c,v 1.90 2003-07-23 05:29:22 guy Exp $ (LBL)";
#endif
/*
#include "pcap-int.h"
#include "sll.h"
+#ifdef HAVE_DAG_API
+#include "pcap-dag.h"
+#endif /* HAVE_DAG_API */
+
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
int live_open_ok = 0;
struct utsname utsname;
+#ifdef HAVE_DAG_API
+ if (strstr(device, "dag")) {
+ return dag_open_live(device, snaplen, promisc, to_ms, ebuf);
+ }
+#endif /* HAVE_DAG_API */
+
/* Allocate a handle for this session. */
handle = malloc(sizeof(*handle));
int
pcap_read(pcap_t *handle, int max_packets, pcap_handler callback, u_char *user)
{
+#ifdef HAVE_DAG_API
+ if (handle->md.is_dag) {
+ return dag_read(handle, max_packets, callback, user);
+ }
+#endif /* HAVE_DAG_API */
+
/*
* Currently, on Linux only one packet is delivered per read,
* so we don't loop.
#ifdef HAVE_TPACKET_STATS
struct tpacket_stats kstats;
socklen_t len = sizeof (struct tpacket_stats);
+#endif
+
+#ifdef HAVE_DAG_API
+ if (handle->md.is_dag) {
+ return dag_stats(handle, stats);
+ }
+#endif /* HAVE_DAG_API */
+#ifdef HAVE_TPACKET_STATS
/*
* Try to get the packet counts from the kernel.
*/
if (pcap_add_if(alldevsp, "any", 0, any_descr, errbuf) < 0)
return (-1);
+#ifdef HAVE_DAG_API
+ if (dag_platform_finddevs(alldevsp, errbuf) < 0)
+ return (-1);
+#endif /* HAVE_DAG_API */
+
return (0);
}
int err = 0;
#endif
+#ifdef HAVE_DAG_API
+ if (handle->md.is_dag) {
+ return dag_setfilter(handle, filter);
+ }
+#endif /* HAVE_DAG_API */
+
if (!handle)
return -1;
if (!filter) {
struct pcap *p, *prevp;
struct ifreq ifr;
+#ifdef HAVE_DAG_API
+ if (handle->md.is_dag) {
+ /* close actions will be done in dag_platform_close() */
+ return;
+ }
+#endif /* HAVE_DAG_API */
+
if (handle->md.clear_promisc) {
/*
* We put the interface into promiscuous mode; take
int
pcap_set_datalink_platform(pcap_t *p, int dlt)
{
+#ifdef HAVE_DAG_API
+ if (p->md.is_dag) {
+ return dag_set_datalink_platform(p, dlt);
+ }
+#endif /* HAVE_DAG_API */
+
return (0);
}