change net_interface_config_primary_get to likely interface if none have an ip (unplugged)

This commit is contained in:
Doug MacEachern 2007-04-05 16:56:42 +00:00
parent ea2ae2b59f
commit a2572d9510
1 changed files with 19 additions and 1 deletions

View File

@ -1872,6 +1872,9 @@ sigar_net_interface_config_primary_get(sigar_t *sigar,
{ {
int i, status, found=0; int i, status, found=0;
sigar_net_interface_list_t iflist; 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) { if ((status = sigar_net_interface_list_get(sigar, &iflist)) != SIGAR_OK) {
return status; return status;
@ -1883,12 +1886,20 @@ sigar_net_interface_config_primary_get(sigar_t *sigar,
if ((status != SIGAR_OK) || if ((status != SIGAR_OK) ||
(ifconfig->flags & SIGAR_IFF_LOOPBACK) || (ifconfig->flags & SIGAR_IFF_LOOPBACK) ||
!ifconfig->address.addr.in || /* no ip address */
!ifconfig->hwaddr.addr.in || /* no mac address */ !ifconfig->hwaddr.addr.in || /* no mac address */
strchr(iflist.data[i], ':')) /* alias */ strchr(iflist.data[i], ':')) /* alias */
{ {
continue; 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; found = 1;
break; break;
} }
@ -1898,6 +1909,10 @@ sigar_net_interface_config_primary_get(sigar_t *sigar,
if (found) { if (found) {
return SIGAR_OK; return SIGAR_OK;
} }
else if (possible_config.flags) {
memcpy(ifconfig, &possible_config, sizeof(*ifconfig));
return SIGAR_OK;
}
else { else {
return SIGAR_ENXIO; return SIGAR_ENXIO;
} }
@ -1913,6 +1928,9 @@ static int fqdn_ip_get(sigar_t *sigar, char *name)
if (status != SIGAR_OK) { if (status != SIGAR_OK) {
return status; return status;
} }
if (!ifconfig.address.addr.in) {
return SIGAR_ENXIO;
}
sigar_net_address_to_string(sigar, &ifconfig.address, name); sigar_net_address_to_string(sigar, &ifconfig.address, name);