diff options
| author | Leandro A. F. Pereira <leandro@hardinfo.org> | 2006-12-21 00:18:13 +0000 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2006-12-21 00:18:13 +0000 | 
| commit | 9c28398d027731c33b31beb05b0f071fd9f9f129 (patch) | |
| tree | c932e9b4bed0f97d2b01edd2b6389e3425cf755e /hardinfo2/arch | |
| parent | 07d008225f4511e1d6cba200e196ec5bca48b01b (diff) | |
Add IP address and Mask information. Based on patch by Eduardo Correia.
Diffstat (limited to 'hardinfo2/arch')
| -rw-r--r-- | hardinfo2/arch/linux/common/net.h | 59 | ||||
| l--------- | hardinfo2/arch/linux/x86/net.h | 2 | 
2 files changed, 50 insertions, 11 deletions
| diff --git a/hardinfo2/arch/linux/common/net.h b/hardinfo2/arch/linux/common/net.h index 3f26d988..593baf8f 100644 --- a/hardinfo2/arch/linux/common/net.h +++ b/hardinfo2/arch/linux/common/net.h @@ -24,14 +24,24 @@ static gchar *network_interfaces = NULL;  #include <linux/sockios.h>  #include <sys/socket.h> +#include <stdio.h> +#include <unistd.h> +#include <string.h> /* for strncpy */ +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> + +  typedef struct _NetInfo NetInfo;  struct _NetInfo { -    char                name[16];  -    int                 mtu; -    unsigned char       mac[8]; +    char name[16];  +    int  mtu; +    unsigned char mac[8]; +    char ip[16]; +    char mask[16];  }; -  void get_net_info(char *if_name, NetInfo *netinfo)  {      struct ifreq ifr; @@ -39,22 +49,41 @@ void get_net_info(char *if_name, NetInfo *netinfo)      fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); -    strcpy(ifr.ifr_name, if_name); +    /* IPv4 */ +    ifr.ifr_addr.sa_family = AF_INET;      strcpy(netinfo->name, if_name); +    /* MTU */ +    strcpy(ifr.ifr_name, if_name);      if (ioctl(fd, SIOCGIFMTU, &ifr) < 0) {          netinfo->mtu = 0;      } else {          netinfo->mtu = ifr.ifr_mtu;      } -     + +    /* HW Address */      strcpy(ifr.ifr_name, if_name);      if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {          memset(netinfo->mac, 0, 8);      } else {          memcpy(netinfo->mac, ifr.ifr_ifru.ifru_hwaddr.sa_data, 8);      } - +     +    /* IP Address */ +    strcpy(ifr.ifr_name, if_name); +    if (ioctl(fd, SIOCGIFADDR, &ifr) < 0) { +        netinfo->ip[0] = 0; +    } else { +        sprintf(netinfo->ip, "%s", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));  +    } +     +    /* Mask Address */ +    strcpy(ifr.ifr_name, if_name); +    if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0) { +        netinfo->mask[0] = 0; +    } else { +        sprintf(netinfo->mask, "%s", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr)); +    }      shutdown(fd, 0);  } @@ -162,15 +191,17 @@ scan_net_interfaces_24(void)              gfloat recv_mb = recv_bytes / 1048576.0;              gfloat trans_mb = trans_bytes / 1048576.0; +            get_net_info(ifacename, &ni); +              devid = g_strdup_printf("NET%s", ifacename); -	    network_interfaces = g_strdup_printf("%s$%s$%s=Sent %.2fMiB, received %.2fMiB\n", +	    network_interfaces = g_strdup_printf("%s$%s$%s=Sent %.2fMiB, received %.2fMiB (%s)\n",                                                    network_interfaces,                                                    devid,                                                    ifacename,                                                    trans_mb, -                                                  recv_mb); +                                                  recv_mb, +						  ni.ip[0] ? ni.ip : "No IP address"); -            get_net_info(ifacename, &ni);              detailed = g_strdup_printf("[Network Adapter Properties]\n"                                          "Interface Type=%s\n"                                          "Hardware Address=%02x:%02x:%02x:%02x:%02x:%02x\n" @@ -184,6 +215,14 @@ scan_net_interfaces_24(void)                                          ni.mtu,                                          recv_bytes, recv_mb,                                          trans_bytes, trans_mb); +            if (ni.ip[0]) { +                 detailed = g_strconcat(detailed, "IP=", ni.ip, "\n", NULL); +            } +               +            if (ni.mask[0]) { +                 detailed = g_strconcat(detailed, "Mask=", ni.mask, "\n", NULL); +            } +                            g_hash_table_insert(moreinfo, devid, detailed);  	}      } diff --git a/hardinfo2/arch/linux/x86/net.h b/hardinfo2/arch/linux/x86/net.h index 72d77b26..488b5ae3 120000 --- a/hardinfo2/arch/linux/x86/net.h +++ b/hardinfo2/arch/linux/x86/net.h @@ -1 +1 @@ -../../linux/common/net.h
\ No newline at end of file +../../../arch/linux/common/net.h
\ No newline at end of file | 
