forked from osmocom/wireshark
If we have "pcap_freecode()", use it to free the instructions for a BPF
filter after installing the filter. Set HAVE_PCAP_LIB_VERSION if we're building with WinPcap 3.1; it's not present in earlier versions, but is present in current 3.1 betas. Check HAVE_PCAP_LIB_VERSION when building capture-wpcap.c. svn path=/trunk/; revision=13872
This commit is contained in:
parent
79daa1e80e
commit
46e1907f13
|
@ -205,6 +205,7 @@ config.h : config.h.win32 config.nmake
|
||||||
-e "s/@HAVE_PCAP_FINDALLDEVS@/$(PCAP_FINDALLDEVS_CONFIG)/" \
|
-e "s/@HAVE_PCAP_FINDALLDEVS@/$(PCAP_FINDALLDEVS_CONFIG)/" \
|
||||||
-e "s/@HAVE_PCAP_DATALINK_NAME_TO_VAL@/$(PCAP_DATALINK_NAME_TO_VAL_CONFIG)/" \
|
-e "s/@HAVE_PCAP_DATALINK_NAME_TO_VAL@/$(PCAP_DATALINK_NAME_TO_VAL_CONFIG)/" \
|
||||||
-e "s/@HAVE_PCAP_DATALINK_VAL_TO_NAME@/$(PCAP_DATALINK_VAL_TO_NAME_CONFIG)/" \
|
-e "s/@HAVE_PCAP_DATALINK_VAL_TO_NAME@/$(PCAP_DATALINK_VAL_TO_NAME_CONFIG)/" \
|
||||||
|
-e "s/@HAVE_PCAP_LIB_VERSION@/$(PCAP_LIB_VERSION_CONFIG)/" \
|
||||||
-e "s/@HAVE_LIBETHEREALDLL@/$(LIBETHEREAL_CONFIG)/" \
|
-e "s/@HAVE_LIBETHEREALDLL@/$(LIBETHEREAL_CONFIG)/" \
|
||||||
-e "s/@WPCAP_CONSTIFIED@/$(WPCAP_CONSTIFIED_CONFIG)/" \
|
-e "s/@WPCAP_CONSTIFIED@/$(WPCAP_CONSTIFIED_CONFIG)/" \
|
||||||
< config.h.win32 > $@
|
< config.h.win32 > $@
|
||||||
|
|
|
@ -419,7 +419,7 @@ and did you also install that package?]]))
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
AC_CHECK_FUNCS(pcap_open_dead)
|
AC_CHECK_FUNCS(pcap_open_dead pcap_freecode)
|
||||||
#
|
#
|
||||||
# Later versions of Mac OS X 10.3[.x] ship a pcap.h that
|
# Later versions of Mac OS X 10.3[.x] ship a pcap.h that
|
||||||
# doesn't define pcap_if_t but ship an 0.8[.x] libpcap,
|
# doesn't define pcap_if_t but ship an 0.8[.x] libpcap,
|
||||||
|
|
|
@ -65,6 +65,7 @@ static int (*p_pcap_lookupnet) (char *, bpf_u_int32 *, bpf_u_int32 *,
|
||||||
static pcap_t* (*p_pcap_open_live) (char *, int, int, int, char *);
|
static pcap_t* (*p_pcap_open_live) (char *, int, int, int, char *);
|
||||||
#endif
|
#endif
|
||||||
static int (*p_pcap_loop) (pcap_t *, int, pcap_handler, guchar *);
|
static int (*p_pcap_loop) (pcap_t *, int, pcap_handler, guchar *);
|
||||||
|
static void (*p_pcap_freecode) (struct bpf_program *);
|
||||||
#ifdef HAVE_PCAP_FINDALLDEVS
|
#ifdef HAVE_PCAP_FINDALLDEVS
|
||||||
static int (*p_pcap_findalldevs) (pcap_if_t **, char *);
|
static int (*p_pcap_findalldevs) (pcap_if_t **, char *);
|
||||||
static void (*p_pcap_freealldevs) (pcap_if_t *);
|
static void (*p_pcap_freealldevs) (pcap_if_t *);
|
||||||
|
@ -75,7 +76,9 @@ static int (*p_pcap_datalink_name_to_val) (const char *);
|
||||||
#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
|
#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
|
||||||
static const char *(*p_pcap_datalink_val_to_name) (int);
|
static const char *(*p_pcap_datalink_val_to_name) (int);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_PCAP_LIB_VERSION
|
||||||
static const char *(*p_pcap_lib_version) (void);
|
static const char *(*p_pcap_lib_version) (void);
|
||||||
|
#endif
|
||||||
static int (*p_pcap_setbuff) (pcap_t *, int dim);
|
static int (*p_pcap_setbuff) (pcap_t *, int dim);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -104,6 +107,7 @@ load_wpcap(void)
|
||||||
SYM(pcap_lookupnet, FALSE),
|
SYM(pcap_lookupnet, FALSE),
|
||||||
SYM(pcap_open_live, FALSE),
|
SYM(pcap_open_live, FALSE),
|
||||||
SYM(pcap_loop, FALSE),
|
SYM(pcap_loop, FALSE),
|
||||||
|
SYM(pcap_freecode, FALSE),
|
||||||
#ifdef HAVE_PCAP_FINDALLDEVS
|
#ifdef HAVE_PCAP_FINDALLDEVS
|
||||||
SYM(pcap_findalldevs, TRUE),
|
SYM(pcap_findalldevs, TRUE),
|
||||||
SYM(pcap_freealldevs, TRUE),
|
SYM(pcap_freealldevs, TRUE),
|
||||||
|
@ -114,7 +118,9 @@ load_wpcap(void)
|
||||||
#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
|
#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
|
||||||
SYM(pcap_datalink_val_to_name, TRUE),
|
SYM(pcap_datalink_val_to_name, TRUE),
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_PCAP_LIB_VERSION
|
||||||
SYM(pcap_lib_version, TRUE),
|
SYM(pcap_lib_version, TRUE),
|
||||||
|
#endif
|
||||||
SYM(pcap_setbuff, TRUE),
|
SYM(pcap_setbuff, TRUE),
|
||||||
{ NULL, NULL, FALSE }
|
{ NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
@ -179,7 +185,6 @@ pcap_dispatch(pcap_t *a, int b, pcap_handler c, guchar *d)
|
||||||
return p_pcap_dispatch(a, b, c, d);
|
return p_pcap_dispatch(a, b, c, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
pcap_snapshot(pcap_t *a)
|
pcap_snapshot(pcap_t *a)
|
||||||
{
|
{
|
||||||
|
@ -187,7 +192,6 @@ pcap_snapshot(pcap_t *a)
|
||||||
return p_pcap_snapshot(a);
|
return p_pcap_snapshot(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
pcap_datalink(pcap_t *a)
|
pcap_datalink(pcap_t *a)
|
||||||
{
|
{
|
||||||
|
@ -246,6 +250,13 @@ pcap_loop(pcap_t *a, int b, pcap_handler c, guchar *d)
|
||||||
return p_pcap_loop(a, b, c, d);
|
return p_pcap_loop(a, b, c, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pcap_freecode(struct bpf_program *a)
|
||||||
|
{
|
||||||
|
g_assert(has_wpcap);
|
||||||
|
p_pcap_freecode(a);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_PCAP_FINDALLDEVS
|
#ifdef HAVE_PCAP_FINDALLDEVS
|
||||||
int
|
int
|
||||||
pcap_findalldevs(pcap_if_t **a, char *b)
|
pcap_findalldevs(pcap_if_t **a, char *b)
|
||||||
|
@ -621,9 +632,12 @@ get_runtime_pcap_version(GString *str)
|
||||||
}
|
}
|
||||||
|
|
||||||
g_string_sprintfa(str, "with ");
|
g_string_sprintfa(str, "with ");
|
||||||
|
#ifdef HAVE_PCAP_LIB_VERSION
|
||||||
if (p_pcap_lib_version != NULL)
|
if (p_pcap_lib_version != NULL)
|
||||||
g_string_sprintfa(str, p_pcap_lib_version());
|
g_string_sprintfa(str, p_pcap_lib_version());
|
||||||
else if (packetVer != NULL)
|
else
|
||||||
|
#endif
|
||||||
|
if (packetVer != NULL)
|
||||||
g_string_sprintfa(str, "WinPcap (%s)", packetVer);
|
g_string_sprintfa(str, "WinPcap (%s)", packetVer);
|
||||||
else
|
else
|
||||||
g_string_append(str, "WinPcap (version unknown)");
|
g_string_append(str, "WinPcap (version unknown)");
|
||||||
|
|
|
@ -764,8 +764,14 @@ static int capture_loop_init_filter(loop_data *ld, const gchar * iface, gchar *
|
||||||
if (pcap_setfilter(ld->pcap_h, &fcode) < 0) {
|
if (pcap_setfilter(ld->pcap_h, &fcode) < 0) {
|
||||||
g_snprintf(errmsg, errmsg_len, "Can't install filter (%s).",
|
g_snprintf(errmsg, errmsg_len, "Can't install filter (%s).",
|
||||||
pcap_geterr(ld->pcap_h));
|
pcap_geterr(ld->pcap_h));
|
||||||
|
#ifdef HAVE_PCAP_FREECODE
|
||||||
|
pcap_freecode(&fcode);
|
||||||
|
#endif
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_PCAP_FREECODE
|
||||||
|
pcap_freecode(&fcode);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -284,11 +284,17 @@ PCAP_FINDALLDEVS_CONFIG=
|
||||||
PCAP_DATALINK_VAL_TO_NAME_CONFIG=
|
PCAP_DATALINK_VAL_TO_NAME_CONFIG=
|
||||||
WPCAP_CONSTIFIED=
|
WPCAP_CONSTIFIED=
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
!IF "$(WINPCAP_VERSION)" == "3.1"
|
||||||
|
PCAP_LIB_VERSION_CONFIG=^#define HAVE_PCAP_LIB_VERSION 1
|
||||||
|
!ELSE
|
||||||
|
PCAP_LIB_VERSION_CONFIG=
|
||||||
|
!ENDIF
|
||||||
!ELSE
|
!ELSE
|
||||||
WINPCAP_CONFIG=
|
WINPCAP_CONFIG=
|
||||||
PCAP_FINDALLDEVS_CONFIG=
|
PCAP_FINDALLDEVS_CONFIG=
|
||||||
PCAP_DATALINK_NAME_TO_VAL_CONFIG=
|
PCAP_DATALINK_NAME_TO_VAL_CONFIG=
|
||||||
PCAP_DATALINK_VAL_TO_NAME_CONFIG=
|
PCAP_DATALINK_VAL_TO_NAME_CONFIG=
|
||||||
|
PCAP_LIB_VERSION_CONFIG=
|
||||||
WPCAP_CONSTIFIED=
|
WPCAP_CONSTIFIED=
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
|
|
|
@ -1651,8 +1651,14 @@ capture(char *save_file, int out_file_type)
|
||||||
if (pcap_setfilter(ld.pch, &fcode) < 0) {
|
if (pcap_setfilter(ld.pch, &fcode) < 0) {
|
||||||
snprintf(errmsg, sizeof errmsg, "Can't install filter (%s).",
|
snprintf(errmsg, sizeof errmsg, "Can't install filter (%s).",
|
||||||
pcap_geterr(ld.pch));
|
pcap_geterr(ld.pch));
|
||||||
|
#ifdef HAVE_PCAP_FREECODE
|
||||||
|
pcap_freecode(&fcode);
|
||||||
|
#endif
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_PCAP_FREECODE
|
||||||
|
pcap_freecode(&fcode);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up to write to the capture file. */
|
/* Set up to write to the capture file. */
|
||||||
|
|
Loading…
Reference in New Issue