aboutsummaryrefslogtreecommitdiffstats
path: root/extcap.c
diff options
context:
space:
mode:
authorRoland Knall <roland.knall@br-automation.com>2018-04-05 10:02:27 +0200
committerRoland Knall <rknall@gmail.com>2018-04-05 08:40:04 +0000
commitc2422d78281e10beb6ce4ebda1d61c9d0ca63a09 (patch)
tree47bf7d32733d50da52e5adab94776c07dc175a06 /extcap.c
parent5d8964cd3b6362615571831ef1bbe5c8cc972516 (diff)
extcap: Tell utilities the wireshark version
Add an optional argument to extcap-version, which tells the utilities the wireshark version and therefore allows them to handle different versions differently. If no version is provided, the utility has to assume it is dealing with a Wireshark 2.x version (default behavior). Change-Id: I51658300f28f503ca8050d204b73749f1a54df16 Reviewed-on: https://code.wireshark.org/review/26752 Petri-Dish: Roland Knall <rknall@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Roland Knall <rknall@gmail.com>
Diffstat (limited to 'extcap.c')
-rw-r--r--extcap.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/extcap.c b/extcap.c
index 061d4535e2..df5c3a726c 100644
--- a/extcap.c
+++ b/extcap.c
@@ -50,6 +50,8 @@
#include "extcap.h"
#include "extcap_parser.h"
+#include "version_info.h"
+
#ifdef _WIN32
static HANDLE pipe_h = INVALID_HANDLE_VALUE;
#endif
@@ -1676,7 +1678,7 @@ static gboolean cb_load_interfaces(extcap_callback_info_t cb_info)
static void
extcap_load_interface_list(void)
{
- gchar *error;
+ gchar *error = NULL;
if (prefs.capture_no_extcap)
return;
@@ -1699,6 +1701,8 @@ extcap_load_interface_list(void)
if (_loaded_interfaces == NULL)
{
GList * arguments = NULL;
+ int major = 0;
+ int minor = 0;
_loaded_interfaces = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, extcap_free_interface_info);
/* Cleanup lookup table */
@@ -1711,6 +1715,11 @@ extcap_load_interface_list(void)
}
arguments = g_list_append(arguments, g_strdup(EXTCAP_ARGUMENT_LIST_INTERFACES));
+ arguments = g_list_append(arguments, g_strdup(EXTCAP_ARGUMENT_VERSION));
+
+ get_ws_version_number(&major, &minor, NULL);
+
+ arguments = g_list_append(arguments, g_strdup_printf("%d.%d", major, minor));
extcap_callback_info_t cb_info;
cb_info.data = NULL;
@@ -1719,6 +1728,20 @@ extcap_load_interface_list(void)
extcap_foreach(arguments, cb_load_interfaces, cb_info);
+ /* Compatibility mode. Utility did not accept version argument, therefore we just ask for the interfaces
+ * and assume, that the utility will handle compatibility on it's end */
+ if ( ! cb_info.data )
+ {
+ g_free(error);
+ error = NULL;
+
+ g_list_free_full(arguments, g_free);
+ arguments = NULL;
+
+ arguments = g_list_append(arguments, g_strdup(EXTCAP_ARGUMENT_LIST_INTERFACES));
+ extcap_foreach(arguments, cb_load_interfaces, cb_info);
+ }
+
g_list_free_full(arguments, g_free);
}
}