[WINPCAP] First step to be able to use pcap_create()

Change-Id: Id95640db0e647a696b39ccbfabc8cf2922df1407
Reviewed-on: https://code.wireshark.org/review/13051
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
AndersBroman 2016-01-04 13:22:40 +01:00 committed by Anders Broman
parent 0e7b7dc883
commit 1658a3520f
2 changed files with 103 additions and 3 deletions

View File

@ -119,6 +119,18 @@ static int (*p_pcap_free_datalinks)(int *);
static char *(*p_bpf_image) (const struct bpf_insn *, int);
#endif
#ifdef HAVE_PCAP_CREATE
static pcap_t* (*p_pcap_create) (const char *, char *);
static int (*p_pcap_set_snaplen) (pcap_t *, int);
static int (*p_pcap_set_promisc) (pcap_t *, int);
static int (*p_pcap_can_set_rfmon) (pcap_t *);
static int (*p_pcap_set_rfmon) (pcap_t *, int);
static int (*p_pcap_set_timeout) (pcap_t *, int);
static int (*p_pcap_set_buffer_size) (pcap_t *, int);
static int (*p_pcap_activate) (pcap_t *);
static const char* (*p_pcap_statustostr)(int);
#endif
typedef struct {
const char *name;
gpointer *ptr;
@ -193,6 +205,17 @@ load_wpcap(void)
#endif
#ifdef HAVE_BPF_IMAGE
SYM(bpf_image, FALSE),
#endif
#ifdef HAVE_PCAP_CREATE
SYM(pcap_create, FALSE),
SYM(pcap_set_snaplen, FALSE),
SYM(pcap_set_promisc, FALSE),
SYM(pcap_can_set_rfmon, TRUE),
SYM(pcap_set_rfmon, TRUE),
SYM(pcap_set_timeout, FALSE),
SYM(pcap_set_buffer_size, FALSE),
SYM(pcap_activate, FALSE),
SYM(pcap_statustostr, TRUE),
#endif
{ NULL, NULL, FALSE }
};
@ -446,6 +469,83 @@ pcap_freealldevs(pcap_if_t *a)
}
#endif
#ifdef HAVE_PCAP_CREATE
pcap_t *
pcap_create(const char *a, char *b)
{
g_assert(has_wpcap && p_pcap_create != NULL);
return p_pcap_create(a, b);
}
int
pcap_set_snaplen(pcap_t *a, int b)
{
g_assert(has_wpcap && p_pcap_set_snaplen != NULL);
return p_pcap_set_snaplen(a, b);
}
int
pcap_set_promisc(pcap_t *a, int b)
{
g_assert(has_wpcap && p_pcap_set_promisc != NULL);
return p_pcap_set_promisc(a, b);
}
int
pcap_can_set_rfmon(pcap_t *a)
{
g_assert(has_wpcap);
if (p_pcap_can_set_rfmon != NULL) {
return p_pcap_can_set_rfmon(a);
}
return 0;
}
int
pcap_set_rfmon(pcap_t *a, int b)
{
g_assert(has_wpcap && p_pcap_set_rfmon != NULL);
return p_pcap_set_rfmon(a, b);
}
int
pcap_set_timeout(pcap_t *a, int b)
{
g_assert(has_wpcap && pcap_set_timeout != NULL);
return p_pcap_set_timeout(a, b);
}
int
pcap_set_buffer_size(pcap_t *a, int b)
{
g_assert(has_wpcap && pcap_set_timeout != NULL);
return p_pcap_set_buffer_size(a, b);
}
int
pcap_activate(pcap_t *a)
{
g_assert(has_wpcap && pcap_activate != NULL);
return p_pcap_activate(a);
}
const char *
pcap_statustostr(int a)
{
static char ebuf[15 + 10 + 1];
g_assert(has_wpcap);
if (pcap_statustostr != NULL) {
return pcap_statustostr(a);
}
/* XXX copy routine from pcap.c ??? */
(void)g_snprintf(ebuf, sizeof ebuf, "Don't have pcap_statustostr(), can't translate error: %d", a);
return(ebuf);
}
#endif
#if defined(HAVE_PCAP_DATALINK_NAME_TO_VAL) || defined(HAVE_PCAP_DATALINK_VAL_TO_NAME) || defined(HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION)
/*
* Table of DLT_ types, names, and descriptions, for use if the version

View File

@ -1603,9 +1603,9 @@ BPF_IMAGE_CONFIG=
!IF DEFINED(PCAP_DIR) && DEFINED(PCAP_REMOTE)
PCAP_HAVE_REMOTE_CONFIG=^#define HAVE_REMOTE 1
PCAP_REMOTE_CONFIG=^#define HAVE_PCAP_REMOTE 1
PCAP_OPEN_CONFIG=^#define HAVE_PCAP_OPEN 1
#Do not set, experimental
#PCAP_CREATE_CONFIG=^#define HAVE_PCAP_CREATE 1
#PCAP_OPEN_CONFIG=^#define HAVE_PCAP_OPEN 1
#Do not set, experimental. No interfaces shown if set. dumpcap.c needs changes.
PCAP_CREATE_CONFIG=^#define HAVE_PCAP_CREATE 1
PCAP_SETSAMPLING_CONFIG=^#define HAVE_PCAP_SETSAMPLING 1
!ELSE
PCAP_HAVE_REMOTE_CONFIG=