summaryrefslogtreecommitdiff
path: root/pcap-dag.c
diff options
context:
space:
mode:
authorguy <guy>2003-11-20 02:02:38 +0000
committerguy <guy>2003-11-20 02:02:38 +0000
commit2c618b93a0ed7ede8a1cf90e425b343c25265dc3 (patch)
tree983278a360c37b20b87f986820e2b72110595d6e /pcap-dag.c
parent028bb1b31de62247b5c23a2ce76501c985ea1f14 (diff)
downloadlibpcap-2c618b93a0ed7ede8a1cf90e425b343c25265dc3.tar.gz
Add "getnonblock" and "setnonblock" operations, and set the function
pointers appropriately, rather than using #ifdefs and run-time checks. Get rid of declaration of non-existent "pcap_set_datalink_platform()" routine.
Diffstat (limited to 'pcap-dag.c')
-rw-r--r--pcap-dag.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/pcap-dag.c b/pcap-dag.c
index fc940dab..44b989ba 100644
--- a/pcap-dag.c
+++ b/pcap-dag.c
@@ -29,7 +29,7 @@
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/libpcap/pcap-dag.c,v 1.12 2003-11-20 01:21:26 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/libpcap/pcap-dag.c,v 1.13 2003-11-20 02:02:38 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -101,6 +101,7 @@ static int dag_setfilter(pcap_t *p, struct bpf_program *fp);
static int dag_stats(pcap_t *p, struct pcap_stat *ps);
static int dag_set_datalink(pcap_t *p, int dlt);
static int dag_get_datalink(pcap_t *p);
+static int dag_setnonblock(pcap_t *p, int nonblock, char *errbuf);
static void delete_pcap_dag(pcap_t *p) {
pcap_dag_node_t *curr = NULL, *prev = NULL;
@@ -478,6 +479,8 @@ pcap_t *dag_open_live(const char *device, int snaplen, int promisc, int to_ms, c
handle->read_op = dag_read;
handle->setfilter_op = dag_setfilter;
handle->set_datalink_op = dag_set_datalink;
+ handle->getnonblock_op = pcap_getnonblock_fd;
+ handle->setnonblock_op = dag_setnonblock;
handle->stats_op = dag_stats;
handle->close_op = dag_platform_close;
@@ -636,6 +639,26 @@ dag_set_datalink(pcap_t *p, int dlt)
}
static int
+dag_setnonblock(pcap_t *p, int nonblock, char *errbuf)
+{
+ /*
+ * Set non-blocking mode on the FD.
+ * XXX - is that necessary? If not, don't bother calling it,
+ * and have a "dag_getnonblock()" function that looks at
+ * "p->md.dag_offset_flags".
+ */
+ if (pcap_setnonblock_fd(p, nonblock, errbuf) < 0)
+ return (-1);
+
+ if (nonblock) {
+ p->md.dag_offset_flags |= DAGF_NONBLOCK;
+ } else {
+ p->md.dag_offset_flags &= ~DAGF_NONBLOCK;
+ }
+ return (0);
+}
+
+static int
dag_get_datalink(pcap_t *p)
{
int linktype = -1;