2 * Copyright 2011, 2014 André Hentschel
3 * Copyright 2021 Hans Leidekker for CodeWeavers
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26 #ifdef HAVE_PCAP_PCAP_H
27 #include <pcap/pcap.h>
34 #define WIN32_NO_STATUS
39 #include "wine/unixlib.h"
40 #include "wine/debug.h"
43 WINE_DEFAULT_DEBUG_CHANNEL(wpcap
);
45 static NTSTATUS
wrap_activate( void *args
)
47 const struct activate_params
*params
= args
;
48 return pcap_activate( (pcap_t
*)(ULONG_PTR
)params
->handle
);
51 static NTSTATUS
wrap_breakloop( void *args
)
53 const struct breakloop_params
*params
= args
;
54 pcap_breakloop( (pcap_t
*)(ULONG_PTR
)params
->handle
);
55 return STATUS_SUCCESS
;
58 static NTSTATUS
wrap_bufsize( void *args
)
60 const struct bufsize_params
*params
= args
;
61 return pcap_bufsize( (pcap_t
*)(ULONG_PTR
)params
->handle
);
64 static NTSTATUS
wrap_can_set_rfmon( void *args
)
66 const struct can_set_rfmon_params
*params
= args
;
67 return pcap_can_set_rfmon( (pcap_t
*)(ULONG_PTR
)params
->handle
);
70 static NTSTATUS
wrap_close( void *args
)
72 const struct close_params
*params
= args
;
73 pcap_close( (pcap_t
*)(ULONG_PTR
)params
->handle
);
74 return STATUS_SUCCESS
;
77 static NTSTATUS
wrap_compile( void *args
)
79 struct compile_params
*params
= args
;
80 struct bpf_program program
;
83 if (!(ret
= pcap_compile( (pcap_t
*)(ULONG_PTR
)params
->handle
, &program
, params
->str
, params
->optimize
,
86 if (*params
->program_len
< program
.bf_len
) ret
= STATUS_BUFFER_TOO_SMALL
;
87 else memcpy( params
->program_insns
, program
.bf_insns
, program
.bf_len
* sizeof(*program
.bf_insns
) );
88 *params
->program_len
= program
.bf_len
;
89 pcap_freecode( &program
);
94 static NTSTATUS
wrap_create( void *args
)
96 struct create_params
*params
= args
;
97 if (!(*params
->handle
= (ULONG_PTR
)pcap_create( params
->source
, params
->errbuf
))) return STATUS_NO_MEMORY
;
98 return STATUS_SUCCESS
;
101 static NTSTATUS
wrap_datalink( void *args
)
103 struct datalink_params
*params
= args
;
104 return pcap_datalink( (pcap_t
*)(ULONG_PTR
)params
->handle
);
107 static NTSTATUS
wrap_datalink_name_to_val( void *args
)
109 struct datalink_name_to_val_params
*params
= args
;
110 return pcap_datalink_name_to_val( params
->name
);
113 static NTSTATUS
wrap_datalink_val_to_description( void *args
)
115 const struct datalink_val_to_description_params
*params
= args
;
116 const char *str
= pcap_datalink_val_to_description( params
->link
);
119 if (!str
|| !params
->buf
) return STATUS_INVALID_PARAMETER
;
120 if ((len
= strlen( str
)) >= *params
->buflen
)
122 *params
->buflen
= len
+ 1;
123 return STATUS_BUFFER_TOO_SMALL
;
125 strcpy( params
->buf
, str
);
126 return STATUS_SUCCESS
;
129 static NTSTATUS
wrap_datalink_val_to_name( void *args
)
131 const struct datalink_val_to_name_params
*params
= args
;
132 const char *str
= pcap_datalink_val_to_name( params
->link
);
135 if (!str
|| !params
->buf
) return STATUS_INVALID_PARAMETER
;
136 if ((len
= strlen( str
)) >= *params
->buflen
)
138 *params
->buflen
= len
+ 1;
139 return STATUS_BUFFER_TOO_SMALL
;
141 strcpy( params
->buf
, str
);
142 return STATUS_SUCCESS
;
145 static NTSTATUS
wrap_dump( void *args
)
147 const struct dump_params
*params
= args
;
149 if (sizeof(void *) == 4)
151 struct pcap_pkthdr_win32 hdr32
;
152 hdr32
.ts
.tv_sec
= params
->hdr
->ts
.tv_sec
;
153 hdr32
.ts
.tv_usec
= params
->hdr
->ts
.tv_usec
;
154 hdr32
.caplen
= params
->hdr
->caplen
;
155 hdr32
.len
= params
->hdr
->len
;
156 pcap_dump( params
->user
, (const struct pcap_pkthdr
*)&hdr32
, params
->packet
);
160 struct pcap_pkthdr hdr64
;
161 hdr64
.ts
.tv_sec
= params
->hdr
->ts
.tv_sec
;
162 hdr64
.ts
.tv_usec
= params
->hdr
->ts
.tv_usec
;
163 hdr64
.caplen
= params
->hdr
->caplen
;
164 hdr64
.len
= params
->hdr
->len
;
165 pcap_dump( params
->user
, &hdr64
, params
->packet
);
167 return STATUS_SUCCESS
;
170 static NTSTATUS
wrap_dump_close( void *args
)
172 const struct dump_close_params
*params
= args
;
173 pcap_dump_close( (pcap_dumper_t
*)(ULONG_PTR
)params
->handle
);
174 return STATUS_SUCCESS
;
177 static NTSTATUS
wrap_dump_open( void *args
)
179 const struct dump_open_params
*params
= args
;
180 *params
->ret_handle
= (ULONG_PTR
)pcap_dump_open( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->name
);
181 return STATUS_SUCCESS
;
184 static NTSTATUS
wrap_findalldevs( void *args
)
186 const struct findalldevs_params
*params
= args
;
187 pcap_if_t
*devs
= NULL
, *src
;
188 struct pcap_interface_offsets
*dst
= (struct pcap_interface_offsets
*)params
->buf
;
189 int ret
, len_total
= 0;
191 if ((ret
= pcap_findalldevs( &devs
, params
->errbuf
))) return ret
;
196 int len_name
= strlen( src
->name
) + 1, len_description
= src
->description
? strlen( src
->description
) + 1 : 0;
197 int len
= sizeof(*dst
) + len_name
+ len_description
;
199 if (*params
->buflen
>= len_total
+ len
)
201 dst
->name_offset
= sizeof(*dst
);
202 dst
->name_len
= len_name
;
203 strcpy( (char *)dst
+ dst
->name_offset
, src
->name
);
204 if (!len_description
) dst
->description_offset
= dst
->description_len
= 0;
207 dst
->description_offset
= dst
->name_offset
+ len_name
;
208 dst
->description_len
= len_description
;
209 strcpy( (char *)dst
+ dst
->description_offset
, src
->description
);
211 dst
->flags
= src
->flags
;
212 dst
= (struct pcap_interface_offsets
*)((char *)dst
+ len
);
218 if (*params
->buflen
< len_total
) ret
= STATUS_BUFFER_TOO_SMALL
;
219 *params
->buflen
= len_total
;
220 pcap_freealldevs( devs
);
224 static NTSTATUS
wrap_get_tstamp_precision( void *args
)
226 const struct get_tstamp_precision_params
*params
= args
;
227 return pcap_get_tstamp_precision( (pcap_t
*)(ULONG_PTR
)params
->handle
);
230 static NTSTATUS
wrap_geterr( void *args
)
232 const struct geterr_params
*params
= args
;
233 char *errbuf
= pcap_geterr( (pcap_t
*)(ULONG_PTR
)params
->handle
);
234 assert( strlen(errbuf
) < PCAP_ERRBUF_SIZE
);
235 strcpy( params
->errbuf
, errbuf
);
236 return STATUS_SUCCESS
;
239 static NTSTATUS
wrap_getnonblock( void *args
)
241 const struct getnonblock_params
*params
= args
;
242 return pcap_getnonblock( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->errbuf
);
245 static NTSTATUS
wrap_init( void *args
)
247 const struct init_params
*params
= args
;
248 return pcap_init( params
->opt
, params
->errbuf
);
251 static NTSTATUS
wrap_lib_version( void *args
)
253 const struct lib_version_params
*params
= args
;
254 const char *str
= pcap_lib_version();
255 unsigned int len
= min( strlen(str
) + 1, params
->size
);
257 memcpy( params
->version
, str
, len
);
258 params
->version
[len
- 1] = 0;
259 return STATUS_SUCCESS
;
262 static NTSTATUS
wrap_list_datalinks( void *args
)
264 const struct list_datalinks_params
*params
= args
;
265 NTSTATUS status
= STATUS_SUCCESS
;
266 int *links
= NULL
, count
;
268 if ((count
= pcap_list_datalinks( (pcap_t
*)(ULONG_PTR
)params
->handle
, &links
)) > 0)
270 if (*params
->count
< count
) status
= STATUS_BUFFER_TOO_SMALL
;
271 else memcpy( params
->links
, links
, count
* sizeof(*links
) );
273 pcap_free_datalinks( links
);
274 *params
->count
= count
;
278 static NTSTATUS
wrap_list_tstamp_types( void *args
)
280 const struct list_tstamp_types_params
*params
= args
;
281 NTSTATUS status
= STATUS_SUCCESS
;
282 int *types
= NULL
, count
;
284 if ((count
= pcap_list_tstamp_types( (pcap_t
*)(ULONG_PTR
)params
->handle
, &types
)) > 0)
286 if (*params
->count
< count
) status
= STATUS_BUFFER_TOO_SMALL
;
287 else memcpy( params
->types
, types
, count
* sizeof(*types
) );
289 pcap_free_tstamp_types( types
);
290 *params
->count
= count
;
294 static NTSTATUS
wrap_lookupnet( void *args
)
296 const struct lookupnet_params
*params
= args
;
297 return pcap_lookupnet( params
->device
, params
->net
, params
->mask
, params
->errbuf
);
300 static NTSTATUS
wrap_major_version( void *args
)
302 const struct major_version_params
*params
= args
;
303 return pcap_major_version( (pcap_t
*)(ULONG_PTR
)params
->handle
);
306 static NTSTATUS
wrap_minor_version( void *args
)
308 const struct minor_version_params
*params
= args
;
309 return pcap_minor_version( (pcap_t
*)(ULONG_PTR
)params
->handle
);
312 static NTSTATUS
wrap_next_ex( void *args
)
314 struct next_ex_params
*params
= args
;
317 if (sizeof(void *) == 4)
319 struct pcap_pkthdr_win32
*hdr32
;
320 if ((ret
= pcap_next_ex( (pcap_t
*)(ULONG_PTR
)params
->handle
, (struct pcap_pkthdr
**)&hdr32
, params
->data
)) == 1)
322 params
->hdr
->ts
.tv_sec
= hdr32
->ts
.tv_sec
;
323 params
->hdr
->ts
.tv_usec
= hdr32
->ts
.tv_usec
;
324 params
->hdr
->caplen
= hdr32
->caplen
;
325 params
->hdr
->len
= hdr32
->len
;
330 struct pcap_pkthdr
*hdr64
;
331 if ((ret
= pcap_next_ex( (pcap_t
*)(ULONG_PTR
)params
->handle
, &hdr64
, params
->data
)) == 1)
333 if (hdr64
->ts
.tv_sec
> INT_MAX
|| hdr64
->ts
.tv_usec
> INT_MAX
) WARN( "truncating timeval values(s)\n" );
334 params
->hdr
->ts
.tv_sec
= hdr64
->ts
.tv_sec
;
335 params
->hdr
->ts
.tv_usec
= hdr64
->ts
.tv_usec
;
336 params
->hdr
->caplen
= hdr64
->caplen
;
337 params
->hdr
->len
= hdr64
->len
;
343 static NTSTATUS
wrap_open_live( void *args
)
345 const struct open_live_params
*params
= args
;
346 if (!(*params
->handle
= (ULONG_PTR
)pcap_open_live( params
->source
, params
->snaplen
, params
->promisc
,
347 params
->timeout
, params
->errbuf
))) return STATUS_NO_MEMORY
;
348 return STATUS_SUCCESS
;
351 static NTSTATUS
wrap_sendpacket( void *args
)
353 const struct sendpacket_params
*params
= args
;
354 return pcap_sendpacket( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->buf
, params
->size
);
357 static NTSTATUS
wrap_set_buffer_size( void *args
)
359 const struct set_buffer_size_params
*params
= args
;
360 return pcap_set_buffer_size( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->size
);
363 static NTSTATUS
wrap_set_datalink( void *args
)
365 const struct set_datalink_params
*params
= args
;
366 return pcap_set_datalink( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->link
);
369 static NTSTATUS
wrap_set_promisc( void *args
)
371 const struct set_promisc_params
*params
= args
;
372 return pcap_set_promisc( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->enable
);
375 static NTSTATUS
wrap_set_rfmon( void *args
)
377 const struct set_rfmon_params
*params
= args
;
378 return pcap_set_rfmon( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->enable
);
381 static NTSTATUS
wrap_set_snaplen( void *args
)
383 const struct set_snaplen_params
*params
= args
;
384 return pcap_set_snaplen( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->len
);
387 static NTSTATUS
wrap_set_timeout( void *args
)
389 const struct set_timeout_params
*params
= args
;
390 return pcap_set_timeout( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->timeout
);
393 static NTSTATUS
wrap_set_tstamp_precision( void *args
)
395 const struct set_tstamp_precision_params
*params
= args
;
396 return pcap_set_tstamp_precision( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->precision
);
399 static NTSTATUS
wrap_set_tstamp_type( void *args
)
401 const struct set_tstamp_type_params
*params
= args
;
402 return pcap_set_tstamp_type( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->type
);
405 static NTSTATUS
wrap_setfilter( void *args
)
407 const struct setfilter_params
*params
= args
;
408 struct bpf_program program
= { params
->program_len
, params
->program_insns
};
409 return pcap_setfilter( (pcap_t
*)(ULONG_PTR
)params
->handle
, &program
);
412 static NTSTATUS
wrap_setnonblock( void *args
)
414 const struct setnonblock_params
*params
= args
;
415 return pcap_setnonblock( (pcap_t
*)(ULONG_PTR
)params
->handle
, params
->nonblock
, params
->errbuf
);
418 static NTSTATUS
wrap_snapshot( void *args
)
420 const struct snapshot_params
*params
= args
;
421 return pcap_snapshot( (pcap_t
*)(ULONG_PTR
)params
->handle
);
424 static NTSTATUS
wrap_stats( void *args
)
426 struct stats_params
*params
= args
;
427 struct pcap_stat stat
;
430 if (!(ret
= pcap_stats( (pcap_t
*)(ULONG_PTR
)params
->handle
, &stat
)))
432 params
->stat
.ps_recv
= stat
.ps_recv
;
433 params
->stat
.ps_drop
= stat
.ps_drop
;
434 params
->stat
.ps_ifdrop
= stat
.ps_ifdrop
;
435 params
->stat
.ps_capt
= 0;
436 params
->stat
.ps_sent
= 0;
437 params
->stat
.ps_netdrop
= 0;
442 static NTSTATUS
wrap_tstamp_type_name_to_val( void *args
)
444 const struct tstamp_type_name_to_val_params
*params
= args
;
445 return pcap_tstamp_type_name_to_val( params
->name
);
448 static NTSTATUS
wrap_tstamp_type_val_to_description( void *args
)
450 const struct tstamp_type_val_to_description_params
*params
= args
;
451 const char *str
= pcap_tstamp_type_val_to_description( params
->type
);
454 if (!str
|| !params
->buf
) return STATUS_INVALID_PARAMETER
;
455 if ((len
= strlen( str
)) >= *params
->buflen
)
457 *params
->buflen
= len
+ 1;
458 return STATUS_BUFFER_TOO_SMALL
;
460 strcpy( params
->buf
, str
);
461 return STATUS_SUCCESS
;
464 static NTSTATUS
wrap_tstamp_type_val_to_name( void *args
)
466 const struct tstamp_type_val_to_name_params
*params
= args
;
467 const char *str
= pcap_tstamp_type_val_to_name( params
->type
);
470 if (!str
|| !params
->buf
) return STATUS_INVALID_PARAMETER
;
471 if ((len
= strlen( str
)) >= *params
->buflen
)
473 *params
->buflen
= len
+ 1;
474 return STATUS_BUFFER_TOO_SMALL
;
476 strcpy( params
->buf
, str
);
477 return STATUS_SUCCESS
;
480 const unixlib_entry_t __wine_unix_call_funcs
[] =
490 wrap_datalink_name_to_val
,
491 wrap_datalink_val_to_description
,
492 wrap_datalink_val_to_name
,
497 wrap_get_tstamp_precision
,
503 wrap_list_tstamp_types
,
510 wrap_set_buffer_size
,
516 wrap_set_tstamp_precision
,
517 wrap_set_tstamp_type
,
522 wrap_tstamp_type_name_to_val
,
523 wrap_tstamp_type_val_to_description
,
524 wrap_tstamp_type_val_to_name
,
527 C_ASSERT( ARRAYSIZE(__wine_unix_call_funcs
) == unix_funcs_count
);
533 static NTSTATUS
wow64_compile( void *args
)
543 } const *params32
= args
;
545 struct compile_params params
=
548 ULongToPtr(params32
->program_len
),
549 ULongToPtr(params32
->program_insns
),
550 ULongToPtr(params32
->str
),
554 return wrap_compile( ¶ms
);
557 static NTSTATUS
wow64_create( void *args
)
564 } const *params32
= args
;
566 struct create_params params
=
568 ULongToPtr(params32
->source
),
569 ULongToPtr(params32
->errbuf
),
570 ULongToPtr(params32
->handle
),
572 return wrap_create( ¶ms
);
575 static NTSTATUS
wow64_datalink_name_to_val( void *args
)
580 } const *params32
= args
;
582 struct datalink_name_to_val_params params
=
584 ULongToPtr(params32
->name
),
586 return wrap_datalink_name_to_val( ¶ms
);
589 static NTSTATUS
wow64_datalink_val_to_description( void *args
)
596 } const *params32
= args
;
598 struct datalink_val_to_description_params params
=
601 ULongToPtr(params32
->buf
),
602 ULongToPtr(params32
->buflen
)
604 return wrap_datalink_val_to_description( ¶ms
);
607 static NTSTATUS
wow64_datalink_val_to_name( void *args
)
614 } const *params32
= args
;
616 struct datalink_val_to_name_params params
=
619 ULongToPtr(params32
->buf
),
620 ULongToPtr(params32
->buflen
)
622 return wrap_datalink_val_to_name( ¶ms
);
625 static NTSTATUS
wow64_dump( void *args
)
632 } const *params32
= args
;
634 struct dump_params params
=
636 ULongToPtr(params32
->user
),
637 ULongToPtr(params32
->hdr
),
638 ULongToPtr(params32
->packet
)
640 return wrap_dump( ¶ms
);
643 static NTSTATUS
wow64_dump_open( void *args
)
650 } const *params32
= args
;
652 struct datalink_val_to_name_params params
=
655 ULongToPtr(params32
->name
),
656 ULongToPtr(params32
->ret_handle
)
658 return wrap_dump_open( ¶ms
);
661 static NTSTATUS
wow64_findalldevs( void *args
)
668 } const *params32
= args
;
670 struct findalldevs_params params
=
672 ULongToPtr(params32
->buf
),
673 ULongToPtr(params32
->buflen
),
674 ULongToPtr(params32
->errbuf
)
676 return wrap_findalldevs( ¶ms
);
679 static NTSTATUS
wow64_geterr( void *args
)
685 } const *params32
= args
;
687 struct geterr_params params
=
690 ULongToPtr(params32
->errbuf
)
692 return wrap_geterr( ¶ms
);
695 static NTSTATUS
wow64_getnonblock( void *args
)
701 } const *params32
= args
;
703 struct getnonblock_params params
=
706 ULongToPtr(params32
->errbuf
)
708 return wrap_getnonblock( ¶ms
);
711 static NTSTATUS
wow64_init( void *args
)
717 } const *params32
= args
;
719 struct init_params params
=
722 ULongToPtr(params32
->errbuf
)
724 return wrap_init( ¶ms
);
727 static NTSTATUS
wow64_lib_version( void *args
)
733 } const *params32
= args
;
735 struct lib_version_params params
=
737 ULongToPtr(params32
->version
),
740 return wrap_lib_version( ¶ms
);
743 static NTSTATUS
wow64_list_datalinks( void *args
)
750 } const *params32
= args
;
752 struct list_datalinks_params params
=
755 ULongToPtr(params32
->links
),
756 ULongToPtr(params32
->count
)
758 return wrap_list_datalinks( ¶ms
);
761 static NTSTATUS
wow64_list_tstamp_types( void *args
)
768 } const *params32
= args
;
770 struct list_tstamp_types_params params
=
773 ULongToPtr(params32
->types
),
774 ULongToPtr(params32
->count
)
776 return wrap_list_tstamp_types( ¶ms
);
779 static NTSTATUS
wow64_lookupnet( void *args
)
787 } const *params32
= args
;
789 struct lookupnet_params params
=
791 ULongToPtr(params32
->device
),
792 ULongToPtr(params32
->net
),
793 ULongToPtr(params32
->mask
),
794 ULongToPtr(params32
->errbuf
)
796 return wrap_lookupnet( ¶ms
);
799 static NTSTATUS
wow64_next_ex( void *args
)
806 } const *params32
= args
;
808 struct next_ex_params params
=
811 ULongToPtr(params32
->hdr
),
812 ULongToPtr(params32
->data
)
814 return wrap_next_ex( ¶ms
);
817 static NTSTATUS
wow64_open_live( void *args
)
827 } const *params32
= args
;
829 struct open_live_params params
=
831 ULongToPtr(params32
->source
),
835 ULongToPtr(params32
->errbuf
),
836 ULongToPtr(params32
->handle
)
838 return wrap_open_live( ¶ms
);
841 static NTSTATUS
wow64_sendpacket( void *args
)
848 } const *params32
= args
;
850 struct sendpacket_params params
=
853 ULongToPtr(params32
->buf
),
856 return wrap_sendpacket( ¶ms
);
859 static NTSTATUS
wow64_setfilter( void *args
)
864 unsigned int program_len
;
866 } const *params32
= args
;
868 struct setfilter_params params
=
871 params32
->program_len
,
872 ULongToPtr(params32
->program_insns
)
874 return wrap_setfilter( ¶ms
);
877 static NTSTATUS
wow64_setnonblock( void *args
)
884 } const *params32
= args
;
886 struct setnonblock_params params
=
890 ULongToPtr(params32
->errbuf
)
892 return wrap_setnonblock( ¶ms
);
895 static NTSTATUS
wow64_tstamp_type_name_to_val( void *args
)
900 } const *params32
= args
;
902 struct tstamp_type_name_to_val_params params
=
904 ULongToPtr(params32
->name
)
906 return wrap_tstamp_type_name_to_val( ¶ms
);
909 static NTSTATUS
wow64_tstamp_type_val_to_description( void *args
)
916 } const *params32
= args
;
918 struct tstamp_type_val_to_description_params params
=
921 ULongToPtr(params32
->buf
),
922 ULongToPtr(params32
->buflen
)
924 return wrap_tstamp_type_val_to_description( ¶ms
);
927 static NTSTATUS
wow64_tstamp_type_val_to_name( void *args
)
934 } const *params32
= args
;
936 struct tstamp_type_val_to_name_params params
=
939 ULongToPtr(params32
->buf
),
940 ULongToPtr(params32
->buflen
)
942 return wrap_tstamp_type_val_to_name( ¶ms
);
945 const unixlib_entry_t __wine_unix_call_wow64_funcs
[] =
955 wow64_datalink_name_to_val
,
956 wow64_datalink_val_to_description
,
957 wow64_datalink_val_to_name
,
962 wrap_get_tstamp_precision
,
967 wow64_list_datalinks
,
968 wow64_list_tstamp_types
,
975 wrap_set_buffer_size
,
981 wrap_set_tstamp_precision
,
982 wrap_set_tstamp_type
,
987 wow64_tstamp_type_name_to_val
,
988 wow64_tstamp_type_val_to_description
,
989 wow64_tstamp_type_val_to_name
,
992 C_ASSERT( ARRAYSIZE(__wine_unix_call_wow64_funcs
) == unix_funcs_count
);
996 #endif /* HAVE_PCAP_PCAP_H */