aboutsummaryrefslogtreecommitdiff
path: root/arch/linux/common/net.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/linux/common/net.h')
-rw-r--r--arch/linux/common/net.h80
1 files changed, 68 insertions, 12 deletions
diff --git a/arch/linux/common/net.h b/arch/linux/common/net.h
index 87e7e59b..cd8b8706 100644
--- a/arch/linux/common/net.h
+++ b/arch/linux/common/net.h
@@ -24,14 +24,25 @@ 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];
+ char broadcast[16];
};
-
void get_net_info(char *if_name, NetInfo *netinfo)
{
struct ifreq ifr;
@@ -39,21 +50,49 @@ 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));
+ }
+
+ /* Broadcast Address */
+ strcpy(ifr.ifr_name, if_name);
+ if (ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0) {
+ netinfo->broadcast[0] = 0;
+ } else {
+ sprintf(netinfo->broadcast, "%s", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
+ }
shutdown(fd, 0);
}
@@ -162,21 +201,25 @@ 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] ?
+ (gchar*)idle_free(g_strdup_printf(" (%s)", ni.ip)) : "");
- 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"
+ "Hardware Address (MAC)=%02x:%02x:%02x:%02x:%02x:%02x\n"
"MTU=%d\n"
- "Bytes Sent=%ld (%.2fMiB)\n"
- "Bytes Received=%ld (%.2fMiB)\n",
+ "[Transfer Details]\n"
+ "Bytes Received=%ld (%.2fMiB)\n"
+ "Bytes Sent=%ld (%.2fMiB)\n",
net_get_iface_type(ifacename),
ni.mac[0], ni.mac[1],
ni.mac[2], ni.mac[3],
@@ -184,6 +227,19 @@ scan_net_interfaces_24(void)
ni.mtu,
recv_bytes, recv_mb,
trans_bytes, trans_mb);
+
+ if (ni.ip[0] || ni.mask[0] || ni.broadcast[0]) {
+ detailed = g_strdup_printf("%s\n"
+ "[Internet Protocol (IPv4)]\n"
+ "IP Address=%s\n"
+ "Mask=%s\n"
+ "Broadcast Address=%s\n",
+ detailed,
+ ni.ip[0] ? ni.ip : "Not set",
+ ni.mask[0] ? ni.mask : "Not set",
+ ni.broadcast[0] ? ni.broadcast : "Not set");
+ }
+
g_hash_table_insert(moreinfo, devid, detailed);
}
}