diff --git a/Makefile.nmake b/Makefile.nmake index dc361f06a7..920b87b877 100644 --- a/Makefile.nmake +++ b/Makefile.nmake @@ -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)/" \ diff --git a/capture-wpcap.c b/capture-wpcap.c index 584e989cdf..4d5deb7f0e 100644 --- a/capture-wpcap.c +++ b/capture-wpcap.c @@ -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) { diff --git a/config.h.win32 b/config.h.win32 index 73de28204a..73607cb6fd 100644 --- a/config.h.win32 +++ b/config.h.win32 @@ -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@ diff --git a/config.nmake b/config.nmake index 49994d6922..46b8c38cbd 100644 --- a/config.nmake +++ b/config.nmake @@ -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