Use the WinPcap version of pcap_datalink_val_to_description if it's

present.  Add an entry for DLT_PPI in case it's not.

svn path=/trunk/; revision=31316
This commit is contained in:
Gerald Combs 2009-12-18 20:36:36 +00:00
parent 34016ac777
commit 7046509b99
4 changed files with 38 additions and 2 deletions

View File

@ -352,6 +352,7 @@ config.h : config.h.win32 config.nmake
-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_VAL_TO_NAME@/$(PCAP_DATALINK_VAL_TO_NAME_CONFIG)/" \
-e "s/@HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION@/$(PCAP_DATALINK_VAL_TO_DESCRIPTION_CONFIG)/" \
-e "s/@HAVE_PCAP_BREAKLOOP@/$(PCAP_BREAKLOOP_CONFIG)/" \
-e "s/@HAVE_REMOTE@/$(PCAP_HAVE_REMOTE_CONFIG)/" \
-e "s/@HAVE_PCAP_REMOTE@/$(PCAP_REMOTE_CONFIG)/" \

View File

@ -79,6 +79,9 @@ static int (*p_pcap_datalink_name_to_val) (const char *);
#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
static const char *(*p_pcap_datalink_val_to_name) (int);
#endif
#ifdef HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION
static const char *(*p_pcap_datalink_val_to_description) (int);
#endif
#ifdef HAVE_PCAP_BREAKLOOP
static void (*p_pcap_breakloop) (pcap_t *);
#endif
@ -155,6 +158,9 @@ load_wpcap(void)
#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
SYM(pcap_datalink_val_to_name, TRUE),
#endif
#ifdef HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION
SYM(pcap_datalink_val_to_description, TRUE),
#endif
#ifdef HAVE_PCAP_BREAKLOOP
/*
* We don't try to work around the lack of this at
@ -371,7 +377,7 @@ pcap_freealldevs(pcap_if_t *a)
}
#endif
#if defined(HAVE_PCAP_DATALINK_NAME_TO_VAL) || defined(HAVE_PCAP_DATALINK_VAL_TO_NAME)
#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
* of WinPcap we have installed lacks "pcap_datalink_name_to_val()"
@ -464,10 +470,13 @@ static struct dlt_choice dlt_choices[] = {
#endif
#ifdef DLT_HDLC
DLT_CHOICE(DLT_HDLC, "Cisco HDLC"),
#endif
#ifdef DLT_PPI
DLT_CHOICE(DLT_PPI, "Per-Packet Information"),
#endif
DLT_CHOICE_SENTINEL
};
#endif /* defined(HAVE_PCAP_DATALINK_NAME_TO_VAL) || defined(HAVE_PCAP_DATALINK_VAL_TO_NAME) */
#endif /* defined(HAVE_PCAP_DATALINK_NAME_TO_VAL) || defined(HAVE_PCAP_DATALINK_VAL_TO_NAME) || defined(HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION */
#ifdef HAVE_PCAP_DATALINK_NAME_TO_VAL
int
@ -544,6 +553,29 @@ pcap_datalink_val_to_name(int dlt)
}
#endif
#ifdef HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION
const char *
pcap_datalink_val_to_description(int dlt)
{
int i;
g_assert(has_wpcap);
if (p_pcap_datalink_val_to_description != NULL)
return p_pcap_datalink_val_to_description(dlt);
else {
/*
* We don't have it in WinPcap; do it ourselves.
*/
for (i = 0; dlt_choices[i].name != NULL; i++) {
if (dlt_choices[i].dlt == dlt)
return (dlt_choices[i].description);
}
return NULL;
}
}
#endif
#ifdef HAVE_PCAP_BREAKLOOP
void pcap_breakloop(pcap_t *a)
{

View File

@ -53,6 +53,7 @@
@HAVE_PCAP_FINDALLDEVS@
@HAVE_PCAP_DATALINK_NAME_TO_VAL@
@HAVE_PCAP_DATALINK_VAL_TO_NAME@
@HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION@
@HAVE_LIBWIRESHARKDLL@
@HAVE_PCAP_LIST_DATALINKS@

View File

@ -938,6 +938,7 @@ WINPCAP_CONFIG=^#define HAVE_LIBPCAP 1
PCAP_FINDALLDEVS_CONFIG=^#define HAVE_PCAP_FINDALLDEVS 1
PCAP_DATALINK_NAME_TO_VAL_CONFIG=^#define HAVE_PCAP_DATALINK_NAME_TO_VAL 1
PCAP_DATALINK_VAL_TO_NAME_CONFIG=^#define HAVE_PCAP_DATALINK_VAL_TO_NAME 1
PCAP_DATALINK_VAL_TO_DESCRIPTION_CONFIG=^#define HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION 1
# PCAP_BREAKLOOP won't have any benefit on Win32, but breaks compatibility with 3.0
PCAP_BREAKLOOP_CONFIG=
!ELSE
@ -946,6 +947,7 @@ WINPCAP_CONFIG=
PCAP_FINDALLDEVS_CONFIG=
PCAP_DATALINK_NAME_TO_VAL_CONFIG=
PCAP_DATALINK_VAL_TO_NAME_CONFIG=
PCAP_DATALINK_VAL_TO_DESCRIPTION_CONFIG=
PCAP_BREAKLOOP_CONFIG=
!ENDIF