Lines Matching +full:dim +full:- +full:mode

2  * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
3 * Copyright (c) 2005 - 2010 CACE Technologies, Davis (California)
36 #include "pcap-int.h"
40 #include "pcap-airpcap.h"
118 * that the application called pcap_init() - which is in load_airpcap_functions()
119 * supposed to be called only from one thread - so in load_airpcap_functions()
154 * done - we won't try it ourselves; in load_airpcap_functions()
229 * Now set the status appropriately - and atomically. in load_airpcap_functions()
251 struct pcap_airpcap *pa = p->priv; in airpcap_setfilter()
253 if (!p_AirpcapSetFilter(pa->adapter, fp->bf_insns, in airpcap_setfilter()
254 fp->bf_len * sizeof(struct bpf_insn))) { in airpcap_setfilter()
258 * XXX - we don't know whether this failed because: in airpcap_setfilter()
278 * XXX - what if we already have a filter in the kernel? in airpcap_setfilter()
281 return (-1); in airpcap_setfilter()
282 pa->filtering_in_kernel = 0; /* filtering in userland */ in airpcap_setfilter()
289 pa->filtering_in_kernel = 1; /* filtering in the kernel */ in airpcap_setfilter()
292 * Discard any previously-received packets, as they might have in airpcap_setfilter()
297 p->cc = 0; in airpcap_setfilter()
304 struct pcap_airpcap *pa = p->priv; in airpcap_set_datalink()
325 if (!p_AirpcapSetLinkType(pa->adapter, type)) { in airpcap_set_datalink()
326 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_set_datalink()
328 p_AirpcapGetLastError(pa->adapter)); in airpcap_set_datalink()
329 return (-1); in airpcap_set_datalink()
331 p->linktype = dlt; in airpcap_set_datalink()
338 struct pcap_airpcap *pa = p->priv; in airpcap_getnonblock()
340 return (pa->nonblock); in airpcap_getnonblock()
346 struct pcap_airpcap *pa = p->priv; in airpcap_setnonblock()
351 * Set the packet buffer timeout to -1 for non-blocking in airpcap_setnonblock()
352 * mode. in airpcap_setnonblock()
354 newtimeout = -1; in airpcap_setnonblock()
358 * (Note that this may be -1, in which case we're not in airpcap_setnonblock()
359 * really leaving non-blocking mode. However, although in airpcap_setnonblock()
364 newtimeout = p->opt.timeout; in airpcap_setnonblock()
366 pa->read_timeout = newtimeout; in airpcap_setnonblock()
367 pa->nonblock = (newtimeout == -1); in airpcap_setnonblock()
374 struct pcap_airpcap *pa = p->priv; in airpcap_stats()
380 if (!p_AirpcapGetStats(pa->adapter, &tas)) { in airpcap_stats()
381 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_stats()
383 p_AirpcapGetLastError(pa->adapter)); in airpcap_stats()
384 return (-1); in airpcap_stats()
387 ps->ps_drop = tas.Drops; in airpcap_stats()
388 ps->ps_recv = tas.Recvs; in airpcap_stats()
389 ps->ps_ifdrop = tas.IfDrops; in airpcap_stats()
395 * Win32-only routine for getting statistics.
405 * XXX - but this is the wrong way to handle statistics. Instead, we should
409 …//xml2rfc.tools.ietf.org/cgi-bin/xml2rfc.cgi?url=https://raw.githubusercontent.com/pcapng/pcapng/m…
413 * possibly-bogus values for statistics we can't provide.
418 struct pcap_airpcap *pa = p->priv; in airpcap_stats_ex()
421 *pcap_stat_size = sizeof (p->stat); in airpcap_stats_ex()
426 if (!p_AirpcapGetStats(pa->adapter, &tas)) { in airpcap_stats_ex()
427 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_stats_ex()
429 p_AirpcapGetLastError(pa->adapter)); in airpcap_stats_ex()
433 p->stat.ps_recv = tas.Recvs; in airpcap_stats_ex()
434 p->stat.ps_drop = tas.Drops; in airpcap_stats_ex()
435 p->stat.ps_ifdrop = tas.IfDrops; in airpcap_stats_ex()
441 p->stat.ps_capt = tas.Capt; in airpcap_stats_ex()
443 return (&p->stat); in airpcap_stats_ex()
446 /* Set the dimension of the kernel-level capture buffer */
448 airpcap_setbuff(pcap_t *p, int dim) in airpcap_setbuff() argument
450 struct pcap_airpcap *pa = p->priv; in airpcap_setbuff()
452 if (!p_AirpcapSetKernelBuffer(pa->adapter, dim)) { in airpcap_setbuff()
453 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_setbuff()
455 p_AirpcapGetLastError(pa->adapter)); in airpcap_setbuff()
456 return (-1); in airpcap_setbuff()
461 /* Set the driver working mode */
463 airpcap_setmode(pcap_t *p, int mode) in airpcap_setmode() argument
465 if (mode != MODE_CAPT) { in airpcap_setmode()
466 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_setmode()
468 return (-1); in airpcap_setmode()
477 struct pcap_airpcap *pa = p->priv; in airpcap_setmintocopy()
479 if (!p_AirpcapSetMinToCopy(pa->adapter, size)) { in airpcap_setmintocopy()
480 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_setmintocopy()
482 p_AirpcapGetLastError(pa->adapter)); in airpcap_setmintocopy()
483 return (-1); in airpcap_setmintocopy()
491 struct pcap_airpcap *pa = p->priv; in airpcap_getevent()
493 return (pa->read_event); in airpcap_getevent()
500 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_oid_get_request()
509 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_oid_set_request()
517 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_sendqueue_transmit()
529 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_setuserbuffer()
531 return (-1); in airpcap_setuserbuffer()
538 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_setuserbuffer()
540 return (-1); in airpcap_setuserbuffer()
543 free(p->buffer); in airpcap_setuserbuffer()
545 p->buffer = new_buff; in airpcap_setuserbuffer()
546 p->bufsize = size; in airpcap_setuserbuffer()
555 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_live_dump()
557 return (-1); in airpcap_live_dump()
563 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_live_dump_ended()
565 return (-1); in airpcap_live_dump_ended()
571 struct pcap_airpcap *pa = p->priv; in airpcap_get_airpcap_handle()
573 return (pa->adapter); in airpcap_get_airpcap_handle()
579 struct pcap_airpcap *pa = p->priv; in airpcap_read()
586 cc = p->cc; in airpcap_read()
591 if (p->break_loop) { in airpcap_read()
593 * Yes - clear the flag that indicates that it in airpcap_read()
597 p->break_loop = 0; in airpcap_read()
602 // If we're not in non-blocking mode, wait for data to in airpcap_read()
605 if (pa->read_timeout != -1) { in airpcap_read()
606 WaitForSingleObject(pa->read_event, in airpcap_read()
607 (pa->read_timeout ==0 )? INFINITE: pa->read_timeout); in airpcap_read()
614 if (!p_AirpcapRead(pa->adapter, (PBYTE)p->buffer, in airpcap_read()
615 p->bufsize, &bytes_read)) { in airpcap_read()
616 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_read()
618 p_AirpcapGetLastError(pa->adapter)); in airpcap_read()
619 return (-1); in airpcap_read()
622 bp = (u_char *)p->buffer; in airpcap_read()
624 bp = p->bp; in airpcap_read()
640 * If so, return immediately - if we haven't read any in airpcap_read()
648 if (p->break_loop) { in airpcap_read()
650 p->break_loop = 0; in airpcap_read()
653 p->bp = bp; in airpcap_read()
654 p->cc = (int) (ep - bp); in airpcap_read()
661 caplen = bhp->Caplen; in airpcap_read()
662 hdrlen = bhp->Hdrlen; in airpcap_read()
665 * Short-circuit evaluation: if using BPF filter in airpcap_read()
666 * in the AirPcap adapter, no need to do it now - in airpcap_read()
669 if (pa->filtering_in_kernel || in airpcap_read()
670 p->fcode.bf_insns == NULL || in airpcap_read()
671 pcapint_filter(p->fcode.bf_insns, datap, bhp->Originallen, caplen)) { in airpcap_read()
674 pkthdr.ts.tv_sec = bhp->TsSec; in airpcap_read()
675 pkthdr.ts.tv_usec = bhp->TsUsec; in airpcap_read()
677 pkthdr.len = bhp->Originallen; in airpcap_read()
681 p->bp = bp; in airpcap_read()
682 p->cc = (int)(ep - bp); in airpcap_read()
693 p->cc = 0; in airpcap_read()
700 struct pcap_airpcap *pa = p->priv; in airpcap_inject()
703 * XXX - the second argument to AirpcapWrite() *should* have in airpcap_inject()
704 * been declared as a const pointer - a write function that in airpcap_inject()
705 * stomps on what it writes is *extremely* rude - but such in airpcap_inject()
709 if (!p_AirpcapWrite(pa->adapter, (void *)buf, size)) { in airpcap_inject()
710 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_inject()
712 p_AirpcapGetLastError(pa->adapter)); in airpcap_inject()
713 return (-1); in airpcap_inject()
727 struct pcap_airpcap *pa = p->priv; in airpcap_cleanup()
729 if (pa->adapter != NULL) { in airpcap_cleanup()
730 p_AirpcapClose(pa->adapter); in airpcap_cleanup()
731 pa->adapter = NULL; in airpcap_cleanup()
742 struct pcap_airpcap *pa = p->priv; in airpcap_breakloop()
744 /* XXX - what if either of these fail? */ in airpcap_breakloop()
746 * XXX - will SetEvent() force a wakeup and, if so, will in airpcap_breakloop()
749 if (!p_AirpcapGetReadEvent(pa->adapter, &read_event)) in airpcap_breakloop()
757 struct pcap_airpcap *pa = p->priv; in airpcap_activate()
758 char *device = p->opt.device; in airpcap_activate()
763 pa->adapter = p_AirpcapOpen(device, airpcap_errbuf); in airpcap_activate()
764 if (pa->adapter == NULL) { in airpcap_activate()
765 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "%s", airpcap_errbuf); in airpcap_activate()
770 * Set monitor mode appropriately. in airpcap_activate()
771 * Always turn off the "ACK frames sent to the card" mode. in airpcap_activate()
773 if (p->opt.rfmon) { in airpcap_activate()
774 status = p_AirpcapSetDeviceMacFlags(pa->adapter, in airpcap_activate()
777 status = p_AirpcapSetDeviceMacFlags(pa->adapter, in airpcap_activate()
780 p_AirpcapClose(pa->adapter); in airpcap_activate()
781 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
783 p_AirpcapGetLastError(pa->adapter)); in airpcap_activate()
795 if (p->snapshot <= 0 || p->snapshot > MAXIMUM_SNAPLEN) in airpcap_activate()
796 p->snapshot = MAXIMUM_SNAPLEN; in airpcap_activate()
802 if (p->opt.buffer_size == 0) in airpcap_activate()
803 p->opt.buffer_size = AIRPCAP_DEFAULT_KERNEL_BUFFER_SIZE; in airpcap_activate()
805 if (!p_AirpcapSetKernelBuffer(pa->adapter, p->opt.buffer_size)) { in airpcap_activate()
806 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
808 p_AirpcapGetLastError(pa->adapter)); in airpcap_activate()
812 if(!p_AirpcapGetReadEvent(pa->adapter, &pa->read_event)) { in airpcap_activate()
813 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
815 p_AirpcapGetLastError(pa->adapter)); in airpcap_activate()
820 p->bufsize = AIRPCAP_DEFAULT_USER_BUFFER_SIZE; in airpcap_activate()
821 p->buffer = malloc(p->bufsize); in airpcap_activate()
822 if (p->buffer == NULL) { in airpcap_activate()
823 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
828 if (p->opt.immediate) { in airpcap_activate()
830 if (!p_AirpcapSetMinToCopy(pa->adapter, 0)) { in airpcap_activate()
831 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
833 p_AirpcapGetLastError(pa->adapter)); in airpcap_activate()
841 if (!p_AirpcapSetMinToCopy(pa->adapter, 16000)) { in airpcap_activate()
842 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
844 p_AirpcapGetLastError(pa->adapter)); in airpcap_activate()
850 * Find out what the default link-layer header type is, in airpcap_activate()
851 * and set p->datalink to that. in airpcap_activate()
859 * The out-of-the-box default appears to be radiotap. in airpcap_activate()
861 if (!p_AirpcapGetLinkType(pa->adapter, &link_type)) { in airpcap_activate()
863 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
865 p_AirpcapGetLastError(pa->adapter)); in airpcap_activate()
871 p->linktype = DLT_IEEE802_11_RADIO; in airpcap_activate()
875 p->linktype = DLT_PPI; in airpcap_activate()
879 p->linktype = DLT_IEEE802_11; in airpcap_activate()
885 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
896 p->dlt_list = (u_int *) malloc(sizeof(u_int) * 3); in airpcap_activate()
897 if (p->dlt_list == NULL) { in airpcap_activate()
898 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in airpcap_activate()
902 p->dlt_list[0] = DLT_IEEE802_11_RADIO; in airpcap_activate()
903 p->dlt_list[1] = DLT_PPI; in airpcap_activate()
904 p->dlt_list[2] = DLT_IEEE802_11; in airpcap_activate()
905 p->dlt_count = 3; in airpcap_activate()
907 p->read_op = airpcap_read; in airpcap_activate()
908 p->inject_op = airpcap_inject; in airpcap_activate()
909 p->setfilter_op = airpcap_setfilter; in airpcap_activate()
910 p->setdirection_op = NULL; /* Not implemented. */ in airpcap_activate()
911 p->set_datalink_op = airpcap_set_datalink; in airpcap_activate()
912 p->getnonblock_op = airpcap_getnonblock; in airpcap_activate()
913 p->setnonblock_op = airpcap_setnonblock; in airpcap_activate()
914 p->breakloop_op = airpcap_breakloop; in airpcap_activate()
915 p->stats_op = airpcap_stats; in airpcap_activate()
916 p->stats_ex_op = airpcap_stats_ex; in airpcap_activate()
917 p->setbuff_op = airpcap_setbuff; in airpcap_activate()
918 p->setmode_op = airpcap_setmode; in airpcap_activate()
919 p->setmintocopy_op = airpcap_setmintocopy; in airpcap_activate()
920 p->getevent_op = airpcap_getevent; in airpcap_activate()
921 p->oid_get_request_op = airpcap_oid_get_request; in airpcap_activate()
922 p->oid_set_request_op = airpcap_oid_set_request; in airpcap_activate()
923 p->sendqueue_transmit_op = airpcap_sendqueue_transmit; in airpcap_activate()
924 p->setuserbuffer_op = airpcap_setuserbuffer; in airpcap_activate()
925 p->live_dump_op = airpcap_live_dump; in airpcap_activate()
926 p->live_dump_ended_op = airpcap_live_dump_ended; in airpcap_activate()
927 p->get_airpcap_handle_op = airpcap_get_airpcap_handle; in airpcap_activate()
928 p->cleanup_op = airpcap_cleanup; in airpcap_activate()
937 * Monitor mode is supported.
957 if (strncmp(device, airpcap_prefix, sizeof airpcap_prefix - 1) == 0) { in device_is_airpcap()
1010 p->activate_op = airpcap_activate; in airpcap_create()
1011 p->can_set_rfmon_op = airpcap_can_set_rfmon; in airpcap_create()
1030 * XXX - unless the error is "no such DLL", report this in airpcap_findalldevs()
1039 return (-1); in airpcap_findalldevs()
1043 airpcap_device = airpcap_device->next) { in airpcap_findalldevs()
1044 if (pcapint_add_dev(devlistp, airpcap_device->Name, 0, in airpcap_findalldevs()
1045 airpcap_device->Description, errbuf) == NULL) { in airpcap_findalldevs()
1050 return (-1); in airpcap_findalldevs()