Lines Matching +full:ipv6 +full:- +full:loopback +full:- +full:preferred +full:- +full:target
2 * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
3 * Copyright (c) 2005 - 2010 CACE Technologies, Davis (California)
40 #include <pcap-int.h>
44 * XXX - Packet32.h defines bpf_program, so we can't include
54 /* Old-school MinGW have these headers in a different place.
60 #include <ntddndis.h> /* MSVC/TDM-MinGW/MinGW64 */
68 #include "diag-control.h"
70 #include "pcap-airpcap.h"
106 * Define stub versions of the monitor-mode support routines if this
139 return (-1); in PacketGetMonitorMode()
146 …* https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/87fba13e-bf06-450e-83b1…
156 * Returned a customer-defined NTSTATUS in OID requests to avoid
157 * NTSTATUS-to-Win32 Error code translation.
209 * 1-byte data array at the end, standing in for the variable-length in oid_get_request()
220 * No need to copy the data - we're doing a fetch. in oid_get_request()
222 oid_data_arg->Oid = oid; in oid_get_request()
223 oid_data_arg->Length = (ULONG)(*lenp); /* XXX - check for ridiculously large value? */ in oid_get_request()
228 return (-1); in oid_get_request()
234 *lenp = oid_data_arg->Length; in oid_get_request()
239 memcpy(data, oid_data_arg->Data, *lenp); in oid_get_request()
247 struct pcap_win *pw = p->priv; in pcap_stats_npf()
253 * (Please note - "struct pcap_stat" is *not* the same as in pcap_stats_npf()
263 if (!PacketGetStats(pw->adapter, &bstats)) { in pcap_stats_npf()
264 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_stats_npf()
266 return (-1); in pcap_stats_npf()
268 ps->ps_recv = bstats.bs_recv; in pcap_stats_npf()
269 ps->ps_drop = bstats.bs_drop; in pcap_stats_npf()
272 * XXX - PacketGetStats() doesn't fill this in, so we just in pcap_stats_npf()
276 ps->ps_ifdrop = bstats.ps_ifdrop; in pcap_stats_npf()
278 ps->ps_ifdrop = 0; in pcap_stats_npf()
285 * Win32-only routine for getting statistics.
295 * XXX - but this is the wrong way to handle statistics. Instead, we should
299 …//xml2rfc.tools.ietf.org/cgi-bin/xml2rfc.cgi?url=https://raw.githubusercontent.com/pcapng/pcapng/m…
303 * possibly-bogus values for statistics we can't provide.
308 struct pcap_win *pw = p->priv; in pcap_stats_ex_npf()
311 *pcap_stat_size = sizeof (p->stat); in pcap_stats_ex_npf()
316 * (Please note - "struct pcap_stat" is *not* the same as in pcap_stats_ex_npf()
320 if (!PacketGetStatsEx(pw->adapter, &bstats)) { in pcap_stats_ex_npf()
321 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_stats_ex_npf()
325 p->stat.ps_recv = bstats.bs_recv; in pcap_stats_ex_npf()
326 p->stat.ps_drop = bstats.bs_drop; in pcap_stats_ex_npf()
327 p->stat.ps_ifdrop = bstats.ps_ifdrop; in pcap_stats_ex_npf()
329 * Just in case this is ever compiled for a target other than in pcap_stats_ex_npf()
334 p->stat.ps_capt = bstats.bs_capt; in pcap_stats_ex_npf()
336 return (&p->stat); in pcap_stats_ex_npf()
339 /* Set the dimension of the kernel-level capture buffer */
343 struct pcap_win *pw = p->priv; in pcap_setbuff_npf()
345 if(PacketSetBuff(pw->adapter,dim)==FALSE) in pcap_setbuff_npf()
347 …snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "driver error: not enough memory to allocate the kernel buff… in pcap_setbuff_npf()
348 return (-1); in pcap_setbuff_npf()
357 struct pcap_win *pw = p->priv; in pcap_setmode_npf()
359 if(PacketSetMode(pw->adapter,mode)==FALSE) in pcap_setmode_npf()
361 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "driver error: working mode not recognized"); in pcap_setmode_npf()
362 return (-1); in pcap_setmode_npf()
372 struct pcap_win *pw = p->priv; in pcap_setmintocopy_npf()
374 if(PacketSetMinToCopy(pw->adapter, size)==FALSE) in pcap_setmintocopy_npf()
376 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "driver error: unable to set the requested mintocopy size"); in pcap_setmintocopy_npf()
377 return (-1); in pcap_setmintocopy_npf()
385 struct pcap_win *pw = p->priv; in pcap_getevent_npf()
387 return (PacketGetReadEvent(pw->adapter)); in pcap_getevent_npf()
393 struct pcap_win *pw = p->priv; in pcap_oid_get_request_npf()
395 return (oid_get_request(pw->adapter, oid, data, lenp, p->errbuf)); in pcap_oid_get_request_npf()
402 struct pcap_win *pw = p->priv; in pcap_oid_set_request_npf()
409 * 1-byte data array at the end, standing in for the variable-length in pcap_oid_set_request_npf()
414 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_oid_set_request_npf()
419 oid_data_arg->Oid = oid; in pcap_oid_set_request_npf()
420 oid_data_arg->Length = (ULONG)(*lenp); /* XXX - check for ridiculously large value? */ in pcap_oid_set_request_npf()
421 memcpy(oid_data_arg->Data, data, *lenp); in pcap_oid_set_request_npf()
422 if (!PacketRequest(pw->adapter, TRUE, oid_data_arg)) { in pcap_oid_set_request_npf()
423 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_oid_set_request_npf()
432 *lenp = oid_data_arg->Length; in pcap_oid_set_request_npf()
435 * No need to copy the data - we're doing a set. in pcap_oid_set_request_npf()
444 struct pcap_win *pw = p->priv; in pcap_sendqueue_transmit_npf()
447 res = PacketSendPackets(pw->adapter, in pcap_sendqueue_transmit_npf()
448 queue->buffer, in pcap_sendqueue_transmit_npf()
449 queue->len, in pcap_sendqueue_transmit_npf()
452 if(res != queue->len){ in pcap_sendqueue_transmit_npf()
453 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_sendqueue_transmit_npf()
467 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_setuserbuffer_npf()
469 return (-1); in pcap_setuserbuffer_npf()
476 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_setuserbuffer_npf()
478 return (-1); in pcap_setuserbuffer_npf()
481 free(p->buffer); in pcap_setuserbuffer_npf()
483 p->buffer=new_buff; in pcap_setuserbuffer_npf()
484 p->bufsize=size; in pcap_setuserbuffer_npf()
492 * PacketSetDumpLimits(), and PacketIsDumpEnded() will get compile-time
502 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_live_dump_npf()
504 return (-1); in pcap_live_dump_npf()
509 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_live_dump_ended_npf()
511 return (-1); in pcap_live_dump_ended_npf()
517 struct pcap_win *pw = p->priv; in pcap_live_dump_npf()
521 res = PacketSetMode(pw->adapter, PACKET_MODE_DUMP); in pcap_live_dump_npf()
523 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_live_dump_npf()
525 return (-1); in pcap_live_dump_npf()
529 res = PacketSetDumpName(pw->adapter, filename, (int)strlen(filename)); in pcap_live_dump_npf()
531 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_live_dump_npf()
533 return (-1); in pcap_live_dump_npf()
537 res = PacketSetDumpLimits(pw->adapter, maxsize, maxpacks); in pcap_live_dump_npf()
539 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_live_dump_npf()
541 return (-1); in pcap_live_dump_npf()
550 struct pcap_win *pw = p->priv; in pcap_live_dump_ended_npf()
552 return (PacketIsDumpEnded(pw->adapter, (BOOLEAN)sync)); in pcap_live_dump_ended_npf()
560 struct pcap_win *pw = p->priv; in pcap_get_airpcap_handle_npf()
562 return (PacketGetAirPcapHandle(pw->adapter)); in pcap_get_airpcap_handle_npf()
580 struct pcap_win *pw = p->priv; in pcap_read_npf()
582 cc = p->cc; in pcap_read_npf()
587 if (p->break_loop) { in pcap_read_npf()
589 * Yes - clear the flag that indicates that it in pcap_read_npf()
593 p->break_loop = 0; in pcap_read_npf()
603 * a copy of p->buffer, a copy of p->buflen, and the in pcap_read_npf()
609 PacketInitPacket(&Packet, (BYTE *)p->buffer, p->bufsize); in pcap_read_npf()
610 if (!PacketReceivePacket(pw->adapter, &Packet, TRUE)) { in pcap_read_npf()
629 * XXX - hopefully no other error in pcap_read_npf()
645 * XXX - we really should return an in pcap_read_npf()
657 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_read_npf()
661 pcapint_fmt_errmsg_for_win32_err(p->errbuf, in pcap_read_npf()
670 bp = p->buffer; in pcap_read_npf()
673 bp = p->bp; in pcap_read_npf()
689 * If so, return immediately - if we haven't read any in pcap_read_npf()
697 if (p->break_loop) { in pcap_read_npf()
699 p->break_loop = 0; in pcap_read_npf()
702 p->bp = bp; in pcap_read_npf()
703 p->cc = (int) (ep - bp); in pcap_read_npf()
710 caplen = bhp->bh_caplen; in pcap_read_npf()
711 hdrlen = bhp->bh_hdrlen; in pcap_read_npf()
715 * Short-circuit evaluation: if using BPF filter in pcap_read_npf()
716 * in kernel, no need to do it now - we already know in pcap_read_npf()
719 * XXX - pcapint_filter() should always return TRUE if in pcap_read_npf()
723 if (pw->filtering_in_kernel || in pcap_read_npf()
724 p->fcode.bf_insns == NULL || in pcap_read_npf()
725 pcapint_filter(p->fcode.bf_insns, datap, bhp->bh_datalen, caplen)) { in pcap_read_npf()
727 switch (p->rmt_samp.method) { in pcap_read_npf()
730 pw->samp_npkt = (pw->samp_npkt + 1) % p->rmt_samp.value; in pcap_read_npf()
733 if (pw->samp_npkt != 0) { in pcap_read_npf()
745 * packet is smaller than our target time. in pcap_read_npf()
747 if (pkt_header->ts.tv_sec < pw->samp_time.tv_sec || in pcap_read_npf()
748 …(pkt_header->ts.tv_sec == pw->samp_time.tv_sec && pkt_header->ts.tv_usec < pw->samp_time.tv_usec))… in pcap_read_npf()
756 * the target time. in pcap_read_npf()
758 pw->samp_time.tv_usec = pkt_header->ts.tv_usec + p->rmt_samp.value * 1000; in pcap_read_npf()
759 if (pw->samp_time.tv_usec > 1000000) { in pcap_read_npf()
760 pw->samp_time.tv_sec = pkt_header->ts.tv_sec + pw->samp_time.tv_usec / 1000000; in pcap_read_npf()
761 pw->samp_time.tv_usec = pw->samp_time.tv_usec % 1000000; in pcap_read_npf()
773 p->bp = bp; in pcap_read_npf()
774 p->cc = (int) (ep - bp); in pcap_read_npf()
785 p->cc = 0; in pcap_read_npf()
793 struct pcap_win *pw = p->priv; in pcap_read_win32_dag()
805 unsigned dfp = pw->adapter->DagFastProcess; in pcap_read_win32_dag()
807 cc = p->cc; in pcap_read_win32_dag()
816 * a copy of p->buffer, a copy of p->buflen, and the in pcap_read_win32_dag()
822 PacketInitPacket(&Packet, (BYTE *)p->buffer, p->bufsize); in pcap_read_win32_dag()
823 if (!PacketReceivePacket(pw->adapter, &Packet, TRUE)) { in pcap_read_win32_dag()
824 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "read error: PacketReceivePacket failed"); in pcap_read_win32_dag()
825 return (-1); in pcap_read_win32_dag()
832 header = (dag_record_t*)pw->adapter->DagBuffer; in pcap_read_win32_dag()
835 header = (dag_record_t*)p->bp; in pcap_read_win32_dag()
845 * return a too-low count. in pcap_read_win32_dag()
859 erf_record_len = SWAPS(header->rlen); in pcap_read_win32_dag()
864 p->stat.ps_recv++; in pcap_read_win32_dag()
870 switch(header->type) in pcap_read_win32_dag()
880 swt = SWAPS(header->wlen); in pcap_read_win32_dag()
881 packet_len = swt - (pw->dag_fcs_bits); in pcap_read_win32_dag()
882 caplen = erf_record_len - dag_record_size - 2; in pcap_read_win32_dag()
892 swt = SWAPS(header->wlen); in pcap_read_win32_dag()
893 packet_len = swt - (pw->dag_fcs_bits); in pcap_read_win32_dag()
894 caplen = erf_record_len - dag_record_size; in pcap_read_win32_dag()
903 if(caplen > p->snapshot) in pcap_read_win32_dag()
904 caplen = p->snapshot; in pcap_read_win32_dag()
908 * If so, return immediately - if we haven't read any in pcap_read_win32_dag()
909 * packets, clear the flag and return -2 to indicate in pcap_read_win32_dag()
915 if (p->break_loop) in pcap_read_win32_dag()
919 p->break_loop = 0; in pcap_read_win32_dag()
920 return (-2); in pcap_read_win32_dag()
924 p->bp = (char*)header; in pcap_read_win32_dag()
925 p->cc = endofbuf - (char*)header; in pcap_read_win32_dag()
933 ts = header->ts; in pcap_read_win32_dag()
939 pcap_header.ts.tv_usec -= 1000000; in pcap_read_win32_dag()
945 if (p->fcode.bf_insns) in pcap_read_win32_dag()
947 if (pcapint_filter(p->fcode.bf_insns, dp, packet_len, caplen) == 0) in pcap_read_win32_dag()
968 p->bp = (char*)header; in pcap_read_win32_dag()
969 p->cc = endofbuf - (char*)header; in pcap_read_win32_dag()
983 struct pcap_win *pw = p->priv; in pcap_inject_npf()
987 if(PacketSendPacket(pw->adapter,&pkt,TRUE) == FALSE) { in pcap_inject_npf()
988 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_inject_npf()
990 return (-1); in pcap_inject_npf()
1004 struct pcap_win *pw = p->priv; in pcap_cleanup_npf()
1006 if (pw->adapter != NULL) { in pcap_cleanup_npf()
1007 PacketCloseAdapter(pw->adapter); in pcap_cleanup_npf()
1008 pw->adapter = NULL; in pcap_cleanup_npf()
1010 if (pw->rfmon_selfstart) in pcap_cleanup_npf()
1012 PacketSetMonitorMode(p->opt.device, 0); in pcap_cleanup_npf()
1021 struct pcap_win *pw = p->priv; in pcap_breakloop_npf()
1023 /* XXX - what if this fails? */ in pcap_breakloop_npf()
1024 SetEvent(PacketGetReadEvent(pw->adapter)); in pcap_breakloop_npf()
1030 struct pcap_win *pw = p->priv; in pcap_activate_npf()
1037 if (p->opt.rfmon) { in pcap_activate_npf()
1041 if (PacketGetMonitorMode(p->opt.device) == 1) in pcap_activate_npf()
1043 pw->rfmon_selfstart = 0; in pcap_activate_npf()
1047 if ((res = PacketSetMonitorMode(p->opt.device, 1)) != 1) in pcap_activate_npf()
1049 pw->rfmon_selfstart = 0; in pcap_activate_npf()
1062 pw->rfmon_selfstart = 1; in pcap_activate_npf()
1070 pw->adapter = PacketOpenAdapter(p->opt.device); in pcap_activate_npf()
1072 if (pw->adapter == NULL) in pcap_activate_npf()
1087 p->errbuf[0] = '\0'; in pcap_activate_npf()
1095 * XXX - we currently get ERROR_BAD_UNIT if the in pcap_activate_npf()
1098 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1099 "The helper program for \"Admin-only Mode\" must be allowed to make changes to your device"); in pcap_activate_npf()
1104 * Unknown - report details. in pcap_activate_npf()
1106 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1108 if (pw->rfmon_selfstart) in pcap_activate_npf()
1110 PacketSetMonitorMode(p->opt.device, 0); in pcap_activate_npf()
1117 if(PacketGetNetType (pw->adapter,&type) == FALSE) in pcap_activate_npf()
1119 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1128 * NDIS-defined medium types. in pcap_activate_npf()
1131 p->linktype = DLT_EN10MB; in pcap_activate_npf()
1134 * link-layer-type list with DLT_EN10MB and DLT_DOCSIS, so in pcap_activate_npf()
1139 * DOCSIS frames out on the wire inside the low-level in pcap_activate_npf()
1142 p->dlt_list = (u_int *) malloc(sizeof(u_int) * 2); in pcap_activate_npf()
1143 if (p->dlt_list == NULL) in pcap_activate_npf()
1145 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1149 p->dlt_list[0] = DLT_EN10MB; in pcap_activate_npf()
1150 p->dlt_list[1] = DLT_DOCSIS; in pcap_activate_npf()
1151 p->dlt_count = 2; in pcap_activate_npf()
1158 p->linktype = DLT_IEEE802; in pcap_activate_npf()
1162 p->linktype = DLT_FDDI; in pcap_activate_npf()
1166 p->linktype = DLT_EN10MB; in pcap_activate_npf()
1170 p->linktype = DLT_ARCNET; in pcap_activate_npf()
1174 p->linktype = DLT_ARCNET; in pcap_activate_npf()
1178 p->linktype = DLT_ATM_RFC1483; in pcap_activate_npf()
1182 p->linktype = DLT_RAW; in pcap_activate_npf()
1186 p->linktype = DLT_RAW; in pcap_activate_npf()
1190 * Npcap-defined medium types. in pcap_activate_npf()
1193 p->linktype = DLT_NULL; in pcap_activate_npf()
1197 p->linktype = DLT_CHDLC; in pcap_activate_npf()
1201 p->linktype = DLT_PPP_SERIAL; in pcap_activate_npf()
1205 p->linktype = DLT_IEEE802_11; in pcap_activate_npf()
1209 p->linktype = DLT_IEEE802_11_RADIO; in pcap_activate_npf()
1213 p->linktype = DLT_PPI; in pcap_activate_npf()
1220 * so that the medium type and link-layer header type in pcap_activate_npf()
1222 * might get the link-layer type in the error, but in pcap_activate_npf()
1224 * be able to determine the link-layer type; we report in pcap_activate_npf()
1225 * a warning with the link-layer type, so at least in pcap_activate_npf()
1228 p->linktype = DLT_EN10MB; in pcap_activate_npf()
1229 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1246 switch (p->opt.tstamp_type) { in pcap_activate_npf()
1250 * Better than low-res, but *not* synchronized with in pcap_activate_npf()
1253 if (!PacketSetTimestampMode(pw->adapter, TIMESTAMPMODE_SINGLE_SYNCHRONIZATION)) in pcap_activate_npf()
1255 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1263 * Low-res, but synchronized with the OS clock. in pcap_activate_npf()
1265 if (!PacketSetTimestampMode(pw->adapter, TIMESTAMPMODE_QUERYSYSTEMTIME)) in pcap_activate_npf()
1267 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1275 * High-res, and synchronized with the OS clock. in pcap_activate_npf()
1277 if (!PacketSetTimestampMode(pw->adapter, TIMESTAMPMODE_QUERYSYSTEMTIME_PRECISE)) in pcap_activate_npf()
1279 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1287 * XXX - do whatever the default is, for now. in pcap_activate_npf()
1303 if (p->snapshot <= 0 || p->snapshot > MAXIMUM_SNAPLEN) in pcap_activate_npf()
1304 p->snapshot = MAXIMUM_SNAPLEN; in pcap_activate_npf()
1307 if (p->opt.promisc) in pcap_activate_npf()
1315 if (PacketSetHwFilter(pw->adapter,NDIS_PACKET_TYPE_PROMISCUOUS) == FALSE) in pcap_activate_npf()
1320 * Suppress spurious error generated by non-compliant in pcap_activate_npf()
1356 * assume a non-zero return from pcap_activate() in pcap_activate_npf()
1369 pcapint_fmt_errmsg_for_win32_err(p->errbuf, in pcap_activate_npf()
1386 if (PacketSetHwFilter(pw->adapter, in pcap_activate_npf()
1395 * Suppress spurious error generated by non-compliant in pcap_activate_npf()
1400 pcapint_fmt_errmsg_for_win32_err(p->errbuf, in pcap_activate_npf()
1402 "failed to set hardware filter to non-promiscuous mode"); in pcap_activate_npf()
1409 p->bufsize = WIN32_DEFAULT_USER_BUFFER_SIZE; in pcap_activate_npf()
1411 if(!(pw->adapter->Flags & INFO_FLAG_DAG_CARD)) in pcap_activate_npf()
1420 if (p->opt.buffer_size == 0) in pcap_activate_npf()
1421 p->opt.buffer_size = WIN32_DEFAULT_KERNEL_BUFFER_SIZE; in pcap_activate_npf()
1423 if(PacketSetBuff(pw->adapter,p->opt.buffer_size)==FALSE) in pcap_activate_npf()
1425 …snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "driver error: not enough memory to allocate the kernel buff… in pcap_activate_npf()
1429 p->buffer = malloc(p->bufsize); in pcap_activate_npf()
1430 if (p->buffer == NULL) in pcap_activate_npf()
1432 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1437 if (p->opt.immediate) in pcap_activate_npf()
1440 if(PacketSetMinToCopy(pw->adapter,0)==FALSE) in pcap_activate_npf()
1442 pcapint_fmt_errmsg_for_win32_err(p->errbuf, in pcap_activate_npf()
1451 if(PacketSetMinToCopy(pw->adapter,16000)==FALSE) in pcap_activate_npf()
1453 pcapint_fmt_errmsg_for_win32_err(p->errbuf, in pcap_activate_npf()
1476 strstr(_strlwr(p->opt.device), "dag")); in pcap_activate_npf()
1500 p->snapshot = PacketSetSnapLen(pw->adapter, p->snapshot); in pcap_activate_npf()
1504 pw->dag_fcs_bits = pw->adapter->DagFcsLen; in pcap_activate_npf()
1525 total_insn.k = p->snapshot; in pcap_activate_npf()
1529 if (!PacketSetBpf(pw->adapter, &total_prog)) { in pcap_activate_npf()
1530 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1536 PacketSetReadTimeout(pw->adapter, p->opt.timeout); in pcap_activate_npf()
1538 /* disable loopback capture if requested */ in pcap_activate_npf()
1539 if (p->opt.nocapture_local) in pcap_activate_npf()
1541 if (!PacketSetLoopbackBehavior(pw->adapter, NPF_DISABLE_LOOPBACK)) in pcap_activate_npf()
1543 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_npf()
1544 "Unable to disable the capture of loopback packets."); in pcap_activate_npf()
1550 if(pw->adapter->Flags & INFO_FLAG_DAG_CARD) in pcap_activate_npf()
1553 p->read_op = pcap_read_win32_dag; in pcap_activate_npf()
1554 p->setfilter_op = pcap_setfilter_win32_dag; in pcap_activate_npf()
1560 p->read_op = pcap_read_npf; in pcap_activate_npf()
1561 p->setfilter_op = pcap_setfilter_npf; in pcap_activate_npf()
1565 p->setdirection_op = NULL; /* Not implemented. */ in pcap_activate_npf()
1566 /* XXX - can this be implemented on some versions of Windows? */ in pcap_activate_npf()
1567 p->inject_op = pcap_inject_npf; in pcap_activate_npf()
1568 p->set_datalink_op = NULL; /* can't change data link type */ in pcap_activate_npf()
1569 p->getnonblock_op = pcap_getnonblock_npf; in pcap_activate_npf()
1570 p->setnonblock_op = pcap_setnonblock_npf; in pcap_activate_npf()
1571 p->stats_op = pcap_stats_npf; in pcap_activate_npf()
1572 p->breakloop_op = pcap_breakloop_npf; in pcap_activate_npf()
1573 p->stats_ex_op = pcap_stats_ex_npf; in pcap_activate_npf()
1574 p->setbuff_op = pcap_setbuff_npf; in pcap_activate_npf()
1575 p->setmode_op = pcap_setmode_npf; in pcap_activate_npf()
1576 p->setmintocopy_op = pcap_setmintocopy_npf; in pcap_activate_npf()
1577 p->getevent_op = pcap_getevent_npf; in pcap_activate_npf()
1578 p->oid_get_request_op = pcap_oid_get_request_npf; in pcap_activate_npf()
1579 p->oid_set_request_op = pcap_oid_set_request_npf; in pcap_activate_npf()
1580 p->sendqueue_transmit_op = pcap_sendqueue_transmit_npf; in pcap_activate_npf()
1581 p->setuserbuffer_op = pcap_setuserbuffer_npf; in pcap_activate_npf()
1582 p->live_dump_op = pcap_live_dump_npf; in pcap_activate_npf()
1583 p->live_dump_ended_op = pcap_live_dump_ended_npf; in pcap_activate_npf()
1584 p->get_airpcap_handle_op = pcap_get_airpcap_handle_npf; in pcap_activate_npf()
1585 p->cleanup_op = pcap_cleanup_npf; in pcap_activate_npf()
1588 * XXX - this is only done because WinPcap supported in pcap_activate_npf()
1598 p->handle = pw->adapter->hFile; in pcap_activate_npf()
1612 return (PacketIsMonitorModeSupported(p->opt.device) == 1); in pcap_can_set_rfmon_npf()
1640 * XXX - PacketOpenAdapter() takes a non-const pointer in get_ts_types()
1647 status = -1; in get_ts_types()
1661 * don't have permission to open the device - or in get_ts_types()
1664 * that - the user will find that out when they try in get_ts_types()
1669 * example, cause "tcpdump -i <number>" to fail, in get_ts_types()
1686 p->tstamp_type_count = 0; in get_ts_types()
1687 p->tstamp_type_list = NULL; in get_ts_types()
1693 status = -1; in get_ts_types()
1742 * Npcap - and WinPcap if installed - in get_ts_types()
1743 * and re-installing it, to flush in get_ts_types()
1747 …R_INVALID_FUNCTION; try uninstalling Npcap, and WinPcap if installed, and re-installing it from np… in get_ts_types()
1748 status = -1; in get_ts_types()
1758 status = -1; in get_ts_types()
1774 status = -1; in get_ts_types()
1782 status = -1; in get_ts_types()
1789 status = -1; in get_ts_types()
1806 status = -1; in get_ts_types()
1815 p->tstamp_type_list = malloc((1 + num_ts_modes) * sizeof(u_int)); in get_ts_types()
1816 if (p->tstamp_type_list == NULL) { in get_ts_types()
1818 status = -1; in get_ts_types()
1822 p->tstamp_type_list[num_ts_types] = in get_ts_types()
1830 * Better than low-res, in get_ts_types()
1834 p->tstamp_type_list[num_ts_types] = in get_ts_types()
1841 * Low-res, but synchronized in get_ts_types()
1844 p->tstamp_type_list[num_ts_types] = in get_ts_types()
1851 * High-res, and synchronized in get_ts_types()
1854 p->tstamp_type_list[num_ts_types] = in get_ts_types()
1867 p->tstamp_type_count = num_ts_types; in get_ts_types()
1903 p->activate_op = pcap_activate_npf; in pcapint_create_interface()
1904 p->can_set_rfmon_op = pcap_can_set_rfmon_npf; in pcapint_create_interface()
1906 if (get_ts_types(device, p, ebuf) == -1) { in pcapint_create_interface()
1916 struct pcap_win *pw = p->priv; in pcap_setfilter_npf()
1918 if(PacketSetBpf(pw->adapter,fp)==FALSE){ in pcap_setfilter_npf()
1922 * XXX - we don't know whether this failed because: in pcap_setfilter_npf()
1948 * XXX - what if we already have a filter in the kernel? in pcap_setfilter_npf()
1951 return (-1); in pcap_setfilter_npf()
1952 pw->filtering_in_kernel = 0; /* filtering in userland */ in pcap_setfilter_npf()
1959 pw->filtering_in_kernel = 1; /* filtering in the kernel */ in pcap_setfilter_npf()
1962 * Discard any previously-received packets, as they might have in pcap_setfilter_npf()
1967 p->cc = 0; in pcap_setfilter_npf()
1979 pcapint_strlcpy(p->errbuf, "setfilter: No filter specified", sizeof(p->errbuf)); in pcap_setfilter_win32_dag()
1980 return (-1); in pcap_setfilter_win32_dag()
1985 return (-1); in pcap_setfilter_win32_dag()
1993 struct pcap_win *pw = p->priv; in pcap_getnonblock_npf()
1996 * XXX - if there were a PacketGetReadTimeout() call, we in pcap_getnonblock_npf()
1997 * would use it, and return 1 if the timeout is -1 in pcap_getnonblock_npf()
2000 return (pw->nonblock); in pcap_getnonblock_npf()
2006 struct pcap_win *pw = p->priv; in pcap_setnonblock_npf()
2011 * Set the packet buffer timeout to -1 for non-blocking in pcap_setnonblock_npf()
2014 newtimeout = -1; in pcap_setnonblock_npf()
2018 * (Note that this may be -1, in which case we're not in pcap_setnonblock_npf()
2019 * really leaving non-blocking mode. However, although in pcap_setnonblock_npf()
2024 newtimeout = p->opt.timeout; in pcap_setnonblock_npf()
2026 if (!PacketSetReadTimeout(pw->adapter, newtimeout)) { in pcap_setnonblock_npf()
2027 pcapint_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_setnonblock_npf()
2029 return (-1); in pcap_setnonblock_npf()
2031 pw->nonblock = (newtimeout == -1); in pcap_setnonblock_npf()
2054 return (-1); in pcap_add_if_npf()
2076 while (if_addr_size-- > 0) { in pcap_add_if_npf()
2091 if (res == -1) { in pcap_add_if_npf()
2128 * Loopback interface, so the connection status doesn't in get_if_flags()
2139 * XXX - PacketOpenAdapter() takes a non-const pointer in get_if_flags()
2255 * XXX - we might want to check for NdisPhysicalMediumWiMax in get_if_flags()
2325 status = -1; in get_if_flags()
2327 if (status == -1) { in get_if_flags()
2392 return (-1); in pcapint_platform_finddevs()
2402 return (-1); in pcapint_platform_finddevs()
2409 return (-1); in pcapint_platform_finddevs()
2414 * null-terminated ASCII interface name strings, in pcapint_platform_finddevs()
2416 * of null-terminated ASCII interface description in pcapint_platform_finddevs()
2429 * Found it - "desc" points to the first of the two in pcapint_platform_finddevs()
2458 * Is this a loopback interface? in pcapint_platform_finddevs()
2468 if (get_if_flags(name, &flags, errbuf) == -1) { in pcapint_platform_finddevs()
2472 ret = -1; in pcapint_platform_finddevs()
2480 errbuf) == -1) { in pcapint_platform_finddevs()
2484 ret = -1; in pcapint_platform_finddevs()
2498 * lowest unit number is preferred; loopback is ignored.
2513 * it may return UTF-16 strings, for backwards-compatibility in pcap_lookupdev()
2515 * for not-going-past-the-end-of-a-string reasons, and 2) we in pcap_lookupdev()
2518 * In addition, it's not thread-safe, so we've marked it as in pcap_lookupdev()
2598 BufferSpaceLeft -= namelen * sizeof(WCHAR); in pcap_lookupdev()
2619 while(NAdapts--) in pcap_lookupdev()
2644 BufferSpaceLeft -= desclen; in pcap_lookupdev()
2655 * UN*X-specific calls.
2667 * in order to skip non IPv4 (i.e. IPv6 addresses) in pcap_lookupnet()
2684 *netp = t_addr->sin_addr.S_un.S_addr; in pcap_lookupnet()
2686 *maskp = t_addr->sin_addr.S_un.S_addr; in pcap_lookupnet()
2706 * XXX - it'd be nice if we could somehow generate the WinPcap/Npcap version
2743 packet_version_string) != -1) { in pcap_lib_version()
2770 PacketGetVersion()) != -1) { in pcap_lib_version()