open-license-manager
2014-08-04 7b5931685caf55b7b974cb759e5018dbcf1a75c9
src/library/os/linux/os-linux.c
@@ -31,6 +31,9 @@
#include <dirent.h>
#include <stdio.h>
#include <dbus-1.0/dbus/dbus.h>
#include <sys/utsname.h>
static int ifname_position(char *ifnames, char * ifname, int ifnames_max) {
   int i, position;
   position = -1;
@@ -49,9 +52,9 @@
   FUNCTION_RETURN f_return = OK;
   struct ifaddrs *ifaddr, *ifa;
   int family, i, s, n, if_name_position;
   int family, i, n, if_name_position;
   unsigned int if_num, if_max;
   char host[NI_MAXHOST];
   //char host[NI_MAXHOST];
   char *ifnames;
   if (getifaddrs(&ifaddr) == -1) {
@@ -60,7 +63,7 @@
   }
   if (adapterInfos != NULL) {
      memset(adapterInfos, 0,  (*adapter_info_size) * sizeof(AdapterInfo));
      memset(adapterInfos, 0, (*adapter_info_size) * sizeof(AdapterInfo));
   }
   /* count the maximum number of interfaces */
@@ -363,6 +366,28 @@
   }
}
static void _getCpuid(unsigned int* p, unsigned int ax) {
   __asm __volatile
   ( "movl %%ebx, %%esi\n\t"
         "cpuid\n\t"
         "xchgl %%ebx, %%esi"
         : "=a" (p[0]), "=S" (p[1]),
         "=c" (p[2]), "=d" (p[3])
         : "0" (ax)
   );
}
FUNCTION_RETURN getCpuId(unsigned char identifier[6]) {
   unsigned int i;
   unsigned int cpuinfo[4] = { 0, 0, 0, 0 };
   _getCpuid(cpuinfo, 0);
   for (i = 0; i < 3; i++) {
      identifier[i * 2] = cpuinfo[i] & 0xFF;
      identifier[i * 2 + 1] = (cpuinfo[i] & 0xFF00) >> 8;
   }
   return OK;
}
VIRTUALIZATION getVirtualization() {
//http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
//
@@ -386,3 +411,22 @@
   return NONE;
}
FUNCTION_RETURN getMachineName(unsigned char identifier[6]) {
   static struct utsname u;
   if (uname(&u) < 0) {
      return ERROR;
   }
   memcpy(identifier, u.nodename, 6);
   return OK;
}
FUNCTION_RETURN getOsSpecificIdentifier(unsigned char identifier[6]) {
   char* dbus_id = dbus_get_local_machine_id();
   if (dbus_id == NULL) {
      return ERROR;
   }
   memcpy(identifier, dbus_id, 6);
   dbus_free(dbus_id);
   return OK;
}