diff options
Diffstat (limited to 'capchild/capture_ifinfo.c')
-rw-r--r-- | capchild/capture_ifinfo.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/capchild/capture_ifinfo.c b/capchild/capture_ifinfo.c index 54e4d4c4fc..0ae807ec53 100644 --- a/capchild/capture_ifinfo.c +++ b/capchild/capture_ifinfo.c @@ -49,6 +49,9 @@ #include "capture_opts.h" #include <capchild/capture_session.h> #include <capchild/capture_sync.h> +#ifdef HAVE_EXTCAP +#include "extcap.h" +#endif #include "log.h" #include <caputils/capture_ifinfo.h> @@ -117,6 +120,10 @@ capture_interface_list(int *err, char **err_str, void (*update_cb)(void)) g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Capture Interface List ..."); *err = 0; +#ifdef HAVE_EXTCAP + g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Loading External Capture Interface List ..."); + if_list = extcap_interface_list(err_str); +#endif /* Try to get our interface list */ ret = sync_interface_list_open(&data, &primary_msg, &secondary_msg, update_cb); @@ -143,12 +150,22 @@ capture_interface_list(int *err, char **err_str, void (*update_cb)(void)) g_free(data); for (i = 0; raw_list[i] != NULL; i++) { +#ifdef HAVE_EXTCAP + if_parts = g_strsplit(raw_list[i], "\t", 7); + if (if_parts[0] == NULL || if_parts[1] == NULL || if_parts[2] == NULL || + if_parts[3] == NULL || if_parts[4] == NULL || if_parts[5] == NULL || + if_parts[6] == NULL) { + g_strfreev(if_parts); + continue; + } +#else if_parts = g_strsplit(raw_list[i], "\t", 6); if (if_parts[0] == NULL || if_parts[1] == NULL || if_parts[2] == NULL || if_parts[3] == NULL || if_parts[4] == NULL || if_parts[5] == NULL) { g_strfreev(if_parts); continue; } +#endif /* Number followed by the name, e.g "1. eth0" */ name = strchr(if_parts[0], ' '); @@ -184,6 +201,9 @@ capture_interface_list(int *err, char **err_str, void (*update_cb)(void)) } if (strcmp(if_parts[5], "loopback") == 0) if_info->loopback = TRUE; +#ifdef HAVE_EXTCAP + if_info->extcap = g_strdup(if_parts[6]); +#endif g_strfreev(if_parts); g_strfreev(addr_parts); if_list = g_list_append(if_list, if_info); @@ -213,6 +233,17 @@ capture_get_if_capabilities(const gchar *ifname, gboolean monitor_mode, g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Capture Interface Capabilities ..."); +#ifdef HAVE_EXTCAP + /* see if the interface is from extcap */ + caps = extcap_get_if_dlts(ifname, err_str); + if (caps != NULL) + return caps; + + /* return if the extcap interface generated an error */ + if (err_str != NULL && *err_str != NULL) + return NULL; +#endif /* HAVE_EXTCAP */ + /* Try to get our interface list */ err = sync_if_capabilities_open(ifname, monitor_mode, &data, &primary_msg, &secondary_msg, update_cb); |