#include <linux/sockios.h>\r
#include <linux/ethtool.h>\r
#include <net/if.h>\r
+#include <ifaddrs.h>\r
\r
//cpu\r
#include <sys/sysinfo.h>\r
typedef struct\r
{\r
pthread_t t;\r
- int done;\r
+ volatile int done;\r
} tThread;\r
\r
tThread cpuUsageThread;\r
{\r
gCpuUsage = goCpuUsage();\r
}\r
- printf("daemonNetworkUsage done\n");\r
+ printf("daemonCpuUsage done\n");\r
\r
return NULL;\r
}\r
\r
static double getNetworkBandwidth()\r
{\r
- int sock;\r
+#ifdef __linux__\r
+ struct ifaddrs *ifap, *ifa;\r
struct ifreq ifr;\r
struct ethtool_cmd edata;\r
- int rc;\r
-\r
- sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);\r
- if (sock < 0)\r
- {\r
- perror("socket");\r
- exit(1);\r
- }\r
+ int sock, rc;\r
+ double max_speed = 0;\r
\r
- strncpy(ifr.ifr_name, "enp4s0", sizeof(ifr.ifr_name));\r
- ifr.ifr_data = (caddr_t)&edata;\r
+ getifaddrs(&ifap);\r
\r
- edata.cmd = ETHTOOL_GSET;\r
+ double total = 0;\r
+ int count = 0;\r
\r
- rc = ioctl(sock, SIOCETHTOOL, &ifr);\r
- if (rc < 0)\r
+ for (ifa = ifap; ifa; ifa = ifa->ifa_next)\r
{\r
- perror("ioctl");\r
- exit(1);\r
+\r
+ if (ifa->ifa_addr->sa_family == AF_INET)\r
+ {\r
+\r
+ sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);\r
+ if (sock < 0)\r
+ {\r
+ perror("socket");\r
+ exit(1);\r
+ }\r
+\r
+ if (!SSTRNCMP(ifa->ifa_name, "eth") ||\r
+ !SSTRNCMP(ifa->ifa_name, "enp") ||\r
+ !SSTRNCMP(ifa->ifa_name, "wl"))\r
+ {\r
+ strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name));\r
+ ifr.ifr_data = (caddr_t)&edata;\r
+\r
+ edata.cmd = ETHTOOL_GSET;\r
+\r
+ rc = ioctl(sock, SIOCETHTOOL, &ifr);\r
+ if (rc < 0)\r
+ {\r
+ perror("ioctl");\r
+ exit(1);\r
+ }\r
+\r
+ total += (double)ethtool_cmd_speed(&edata);\r
+ count++;\r
+\r
+ }\r
+ }\r
}\r
\r
- // switch (ethtool_cmd_speed(&edata))\r
- // {\r
- // case SPEED_10:\r
- // printf("10Mbps\n");\r
- // break;\r
- // case SPEED_100:\r
- // printf("100Mbps\n");\r
- // break;\r
- // case SPEED_1000:\r
- // printf("1Gbps\n");\r
- // break;\r
- // case SPEED_2500:\r
- // printf("2.5Gbps\n");\r
- // break;\r
- // case SPEED_10000:\r
- // printf("10Gbps\n");\r
- // break;\r
- // default:\r
- // printf("Speed returned is %d\n", edata.speed);\r
- // }\r
-\r
- return (double)ethtool_cmd_speed(&edata);\r
+ return total / count;\r
+#else\r
+#error "Not Support this architecture"\r
+ return 0.0;\r
+#endif\r
}\r
\r
unsigned long networkPackets(char *ifNamePath)\r
while (!diskUsageThread.done)\r
{\r
}\r
+\r
printf("daemonDiskUsage done\n");\r
\r
return NULL;\r
void startResourceService()\r
{\r
printf("startResourceService\n");\r
+\r
pthread_create(&cpuUsageThread.t, NULL, daemonCpuUsage, NULL);\r
pthread_create(&networkUsageThread.t, NULL, daemonNetworkUsage, NULL);\r
pthread_create(&diskUsageThread.t, NULL, daemonDiskUsage, NULL);\r
\r
void stopResourceService()\r
{\r
- printf("stopResourceService\n");\r
cpuUsageThread.done = 1;\r
networkUsageThread.done = 1;\r
diskUsageThread.done = 1;\r
+\r
+ int status;\r
+\r
+ //TODO : pthread_join using\r
+ // pthread_join(cpuUsageThread.t,NULL);\r
+ // pthread_join(networkUsageThread.t,NULL);\r
+ // pthread_join(diskUsageThread.t,NULL);\r
+\r
+ pthread_detach(cpuUsageThread.t);\r
+ pthread_detach(networkUsageThread.t);\r
+ pthread_detach(diskUsageThread.t);\r
+\r
+ printf("stopResourceService end\n");\r
}\r
\r
double\r