forked from osmocom/wireshark
Hoist all the friendly-name/vendor-description stuff up into
if_info_new(). svn path=/trunk/; revision=46159
This commit is contained in:
parent
6b97dfbfa7
commit
7ed474bc27
|
@ -25,8 +25,8 @@
|
||||||
#ifndef __PCAP_UTIL_INT_H__
|
#ifndef __PCAP_UTIL_INT_H__
|
||||||
#define __PCAP_UTIL_INT_H__
|
#define __PCAP_UTIL_INT_H__
|
||||||
|
|
||||||
extern if_info_t *if_info_new(const char *name, const char *friendly_name,
|
extern if_info_t *if_info_new(const char *name, const char *description,
|
||||||
const char *vendor_description, gboolean loopback);
|
gboolean loopback);
|
||||||
extern void if_info_add_address(if_info_t *if_info, struct sockaddr *addr);
|
extern void if_info_add_address(if_info_t *if_info, struct sockaddr *addr);
|
||||||
#ifdef HAVE_PCAP_FINDALLDEVS
|
#ifdef HAVE_PCAP_FINDALLDEVS
|
||||||
#ifdef HAVE_PCAP_REMOTE
|
#ifdef HAVE_PCAP_REMOTE
|
||||||
|
|
|
@ -237,8 +237,7 @@ get_interface_list(int *err, char **err_str)
|
||||||
*/
|
*/
|
||||||
loopback = ((ifrflags.ifr_flags & IFF_LOOPBACK) ||
|
loopback = ((ifrflags.ifr_flags & IFF_LOOPBACK) ||
|
||||||
strncmp(ifr->ifr_name, "lo", 2) == 0);
|
strncmp(ifr->ifr_name, "lo", 2) == 0);
|
||||||
if_info = if_info_new(ifr->ifr_name, loopback ? "Loopback" : NULL,
|
if_info = if_info_new(ifr->ifr_name, NULL, loopback);
|
||||||
NULL, loopback);
|
|
||||||
if_info_add_address(if_info, &ifr->ifr_addr);
|
if_info_add_address(if_info, &ifr->ifr_addr);
|
||||||
if (loopback)
|
if (loopback)
|
||||||
il = g_list_append(il, if_info);
|
il = g_list_append(il, if_info);
|
||||||
|
@ -275,8 +274,7 @@ get_interface_list(int *err, char **err_str)
|
||||||
* It worked; we can use the "any" device.
|
* It worked; we can use the "any" device.
|
||||||
*/
|
*/
|
||||||
if_info = if_info_new("any",
|
if_info = if_info_new("any",
|
||||||
"Pseudo-device that captures on all interfaces",
|
"Pseudo-device that captures on all interfaces", FALSE);
|
||||||
NULL, FALSE);
|
|
||||||
il = g_list_insert(il, if_info, -1);
|
il = g_list_insert(il, if_info, -1);
|
||||||
pcap_close(pch);
|
pcap_close(pch);
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,21 +59,42 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if_info_t *
|
if_info_t *
|
||||||
if_info_new(const char *name, const char *friendly_name,
|
if_info_new(const char *name, const char *description, gboolean loopback)
|
||||||
const char *vendor_description, gboolean loopback)
|
|
||||||
{
|
{
|
||||||
if_info_t *if_info;
|
if_info_t *if_info;
|
||||||
|
|
||||||
if_info = (if_info_t *)g_malloc(sizeof (if_info_t));
|
if_info = (if_info_t *)g_malloc(sizeof (if_info_t));
|
||||||
if_info->name = g_strdup(name);
|
if_info->name = g_strdup(name);
|
||||||
if (friendly_name == NULL)
|
#ifdef _WIN32
|
||||||
if_info->friendly_name = NULL;
|
/*
|
||||||
else
|
* On Windows, the "description" is a vendor description,
|
||||||
if_info->friendly_name = g_strdup(friendly_name);
|
* and the friendly name isn't returned by WinPcap.
|
||||||
if (vendor_description == NULL)
|
* Fetch it ourselves.
|
||||||
if_info->vendor_description = NULL;
|
*/
|
||||||
else
|
get_windows_interface_friendlyname(name, &if_info->friendly_name);
|
||||||
if_info->vendor_description = g_strdup(vendor_description);
|
if_info->vendor_description = g_strdup(description);
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* On UN*X, if there is a description, it's a friendly
|
||||||
|
* name, and there is no vendor description.
|
||||||
|
* If there's no description, fetch a friendly name
|
||||||
|
* if we can; if that fails, then, for a loopback
|
||||||
|
* interface, give it the friendly name "Loopback".
|
||||||
|
*/
|
||||||
|
if_info->friendly_name = g_strdup(description);
|
||||||
|
if (if_info->friendly_name == NULL) {
|
||||||
|
if_info->friendly_name = get_unix_interface_friendly_name(name);
|
||||||
|
if (if_info->friendly_name == NULL) {
|
||||||
|
/*
|
||||||
|
* If this is a loopback interface, give it a
|
||||||
|
* "friendly name" of "Loopback".
|
||||||
|
*/
|
||||||
|
if (loopback)
|
||||||
|
if_info->friendly_name = g_strdup("Loopback");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if_info->vendor_description = NULL;
|
||||||
|
#endif
|
||||||
if_info->loopback = loopback;
|
if_info->loopback = loopback;
|
||||||
if_info->addrs = NULL;
|
if_info->addrs = NULL;
|
||||||
return if_info;
|
return if_info;
|
||||||
|
@ -139,8 +160,6 @@ get_interface_list_findalldevs_ex(const char *source,
|
||||||
pcap_if_t *alldevs, *dev;
|
pcap_if_t *alldevs, *dev;
|
||||||
if_info_t *if_info;
|
if_info_t *if_info;
|
||||||
char errbuf[PCAP_ERRBUF_SIZE];
|
char errbuf[PCAP_ERRBUF_SIZE];
|
||||||
gboolean loopback;
|
|
||||||
char *friendly_name;
|
|
||||||
|
|
||||||
if (pcap_findalldevs_ex((char *)source, auth, &alldevs, errbuf) == -1) {
|
if (pcap_findalldevs_ex((char *)source, auth, &alldevs, errbuf) == -1) {
|
||||||
*err = CANT_GET_INTERFACE_LIST;
|
*err = CANT_GET_INTERFACE_LIST;
|
||||||
|
@ -160,41 +179,8 @@ get_interface_list_findalldevs_ex(const char *source,
|
||||||
}
|
}
|
||||||
|
|
||||||
for (dev = alldevs; dev != NULL; dev = dev->next) {
|
for (dev = alldevs; dev != NULL; dev = dev->next) {
|
||||||
/* Loopback flag */
|
if_info = if_info_new(dev->name, dev->description,
|
||||||
loopback = (dev->flags & PCAP_IF_LOOPBACK) ? TRUE : FALSE;
|
(dev->flags & PCAP_IF_LOOPBACK) ? TRUE : FALSE);
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
/*
|
|
||||||
* On Windows, the "description" is a vendor description,
|
|
||||||
* and the friendly name isn't returned by WinPcap.
|
|
||||||
* Fetch it ourselves.
|
|
||||||
*/
|
|
||||||
get_windows_interface_friendlyname(dev->name, &friendly_name);
|
|
||||||
if_info = if_info_new(dev->name, friendly_name,
|
|
||||||
dev->description, loopback);
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
* On UN*X, if there is a description, it's a friendly
|
|
||||||
* name, and there is no vendor description.
|
|
||||||
* If there's no description, fetch a friendly name
|
|
||||||
* if we can; if that fails, then, for a loopback
|
|
||||||
* interface, give it the friendly name "Loopback".
|
|
||||||
*/
|
|
||||||
friendly_name = dev->description;
|
|
||||||
if (friendly_name == NULL) {
|
|
||||||
friendly_name = get_unix_interface_friendly_name(dev->name);
|
|
||||||
if (friendly_name == NULL) {
|
|
||||||
/*
|
|
||||||
* If this is a loopback interface, give it a
|
|
||||||
* "friendly name" of "Loopback".
|
|
||||||
*/
|
|
||||||
if (loopback)
|
|
||||||
friendly_name = g_strdup("Loopback");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if_info = if_info_new(dev->name, friendly_name, NULL, loopback);
|
|
||||||
#endif
|
|
||||||
g_free(friendly_name);
|
|
||||||
il = g_list_append(il, if_info);
|
il = g_list_append(il, if_info);
|
||||||
if_info_ip(if_info, dev);
|
if_info_ip(if_info, dev);
|
||||||
}
|
}
|
||||||
|
@ -211,8 +197,6 @@ get_interface_list_findalldevs(int *err, char **err_str)
|
||||||
pcap_if_t *alldevs, *dev;
|
pcap_if_t *alldevs, *dev;
|
||||||
if_info_t *if_info;
|
if_info_t *if_info;
|
||||||
char errbuf[PCAP_ERRBUF_SIZE];
|
char errbuf[PCAP_ERRBUF_SIZE];
|
||||||
gboolean loopback;
|
|
||||||
char *friendly_name;
|
|
||||||
|
|
||||||
if (pcap_findalldevs(&alldevs, errbuf) == -1) {
|
if (pcap_findalldevs(&alldevs, errbuf) == -1) {
|
||||||
*err = CANT_GET_INTERFACE_LIST;
|
*err = CANT_GET_INTERFACE_LIST;
|
||||||
|
@ -232,41 +216,8 @@ get_interface_list_findalldevs(int *err, char **err_str)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (dev = alldevs; dev != NULL; dev = dev->next) {
|
for (dev = alldevs; dev != NULL; dev = dev->next) {
|
||||||
/* Loopback flag */
|
if_info = if_info_new(dev->name, dev->description,
|
||||||
loopback = (dev->flags & PCAP_IF_LOOPBACK) ? TRUE : FALSE;
|
(dev->flags & PCAP_IF_LOOPBACK) ? TRUE : FALSE);
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
/*
|
|
||||||
* On Windows, the "description" is a vendor description,
|
|
||||||
* and the friendly name isn't returned by WinPcap.
|
|
||||||
* Fetch it ourselves.
|
|
||||||
*/
|
|
||||||
get_windows_interface_friendlyname(dev->name, &friendly_name);
|
|
||||||
if_info = if_info_new(dev->name, friendly_name,
|
|
||||||
dev->description, loopback);
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
* On UN*X, if there is a description, it's a friendly
|
|
||||||
* name, and there is no vendor description.
|
|
||||||
* If there's no description, fetch a friendly name
|
|
||||||
* if we can; if that fails, then, for a loopback
|
|
||||||
* interface, give it the friendly name "Loopback".
|
|
||||||
*/
|
|
||||||
friendly_name = dev->description;
|
|
||||||
if (friendly_name == NULL) {
|
|
||||||
friendly_name = get_unix_interface_friendly_name(dev->name);
|
|
||||||
if (friendly_name == NULL) {
|
|
||||||
/*
|
|
||||||
* If this is a loopback interface, give it a
|
|
||||||
* "friendly name" of "Loopback".
|
|
||||||
*/
|
|
||||||
if (loopback)
|
|
||||||
friendly_name = g_strdup("Loopback");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if_info = if_info_new(dev->name, friendly_name, NULL, loopback);
|
|
||||||
#endif
|
|
||||||
g_free(friendly_name);
|
|
||||||
il = g_list_append(il, if_info);
|
il = g_list_append(il, if_info);
|
||||||
if_info_ip(if_info, dev);
|
if_info_ip(if_info, dev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
#include "capture_ifinfo.h"
|
#include "capture_ifinfo.h"
|
||||||
#include "capture-pcap-util.h"
|
#include "capture-pcap-util.h"
|
||||||
#include "capture-pcap-util-int.h"
|
#include "capture-pcap-util-int.h"
|
||||||
#include "capture_win_ifnames.h"
|
|
||||||
#include "capture-wpcap.h"
|
#include "capture-wpcap.h"
|
||||||
|
|
||||||
#include <wsutil/file_util.h>
|
#include <wsutil/file_util.h>
|
||||||
|
@ -723,7 +722,6 @@ get_interface_list(int *err, char **err_str)
|
||||||
char ascii_desc[MAX_WIN_IF_NAME_LEN + 1];
|
char ascii_desc[MAX_WIN_IF_NAME_LEN + 1];
|
||||||
int i, j;
|
int i, j;
|
||||||
char errbuf[PCAP_ERRBUF_SIZE];
|
char errbuf[PCAP_ERRBUF_SIZE];
|
||||||
char *friendly_name;
|
|
||||||
|
|
||||||
if (!has_wpcap) {
|
if (!has_wpcap) {
|
||||||
/*
|
/*
|
||||||
|
@ -825,10 +823,8 @@ get_interface_list(int *err, char **err_str)
|
||||||
}
|
}
|
||||||
ascii_name[j] = '\0';
|
ascii_name[j] = '\0';
|
||||||
i++;
|
i++;
|
||||||
get_windows_interface_friendlyname(ascii_name, &friendly_name);
|
|
||||||
il = g_list_append(il,
|
il = g_list_append(il,
|
||||||
if_info_new(ascii_name, friendly_name, ascii_desc, FALSE));
|
if_info_new(ascii_name, ascii_desc, FALSE));
|
||||||
g_free(friendly_name);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
|
@ -847,10 +843,8 @@ get_interface_list(int *err, char **err_str)
|
||||||
* interface name, and "desc" points to
|
* interface name, and "desc" points to
|
||||||
* that interface's description.
|
* that interface's description.
|
||||||
*/
|
*/
|
||||||
get_windows_interface_friendlyname(&win95names[i], &friendly_name);
|
|
||||||
il = g_list_append(il,
|
il = g_list_append(il,
|
||||||
if_info_new(&win95names[i], friendly_name, desc, FALSE));
|
if_info_new(&win95names[i], desc, FALSE));
|
||||||
g_free(friendly_name);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skip to the next description.
|
* Skip to the next description.
|
||||||
|
|
Loading…
Reference in New Issue