From a2572d9510149926d16750ed0e39c87522a280cb Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Thu, 5 Apr 2007 16:56:42 +0000 Subject: [PATCH] change net_interface_config_primary_get to likely interface if none have an ip (unplugged) --- src/sigar.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/sigar.c b/src/sigar.c index 5c92888d..73c7a6eb 100644 --- a/src/sigar.c +++ b/src/sigar.c @@ -1872,6 +1872,9 @@ sigar_net_interface_config_primary_get(sigar_t *sigar, { int i, status, found=0; sigar_net_interface_list_t iflist; + sigar_net_interface_config_t possible_config; + + possible_config.flags = 0; if ((status = sigar_net_interface_list_get(sigar, &iflist)) != SIGAR_OK) { return status; @@ -1883,12 +1886,20 @@ sigar_net_interface_config_primary_get(sigar_t *sigar, if ((status != SIGAR_OK) || (ifconfig->flags & SIGAR_IFF_LOOPBACK) || - !ifconfig->address.addr.in || /* no ip address */ !ifconfig->hwaddr.addr.in || /* no mac address */ strchr(iflist.data[i], ':')) /* alias */ { continue; } + + if (!possible_config.flags) { + /* save for later for use if we're not connected to the net */ + memcpy(&possible_config, ifconfig, sizeof(*ifconfig)); + } + if (!ifconfig->address.addr.in) { + continue; /* no ip address */ + } + found = 1; break; } @@ -1898,6 +1909,10 @@ sigar_net_interface_config_primary_get(sigar_t *sigar, if (found) { return SIGAR_OK; } + else if (possible_config.flags) { + memcpy(ifconfig, &possible_config, sizeof(*ifconfig)); + return SIGAR_OK; + } else { return SIGAR_ENXIO; } @@ -1913,6 +1928,9 @@ static int fqdn_ip_get(sigar_t *sigar, char *name) if (status != SIGAR_OK) { return status; } + if (!ifconfig.address.addr.in) { + return SIGAR_ENXIO; + } sigar_net_address_to_string(sigar, &ifconfig.address, name);