1 #include <nm_core.h>
2 #include <nm_utils.h>
3 #include <nm_string.h>
4 #include <nm_cfg_file.h>
5 #include <nm_hw_info.h>
6 
7 #include <sys/statvfs.h>
8 
9 #if defined (NM_OS_LINUX)
10 #include <sys/sysinfo.h>
11 #elif defined (NM_OS_FREEBSD)
12 #include <sys/sysctl.h>
13 #endif
14 
nm_hw_total_ram(void)15 uint32_t nm_hw_total_ram(void)
16 {
17     uint32_t ram = 0;
18 #if defined (NM_OS_LINUX)
19     struct sysinfo info;
20 
21     memset(&info, 0, sizeof(info));
22     sysinfo(&info);
23     ram = info.totalram / 1024 / 1024;
24 #elif defined (NM_OS_FREEBSD)
25     uint64_t mem;
26     int mib[2];
27     size_t len = sizeof(mem);
28 
29     mib[0] = CTL_HW;
30     mib[1] = HW_PHYSMEM;
31 
32     if (sysctl(mib, 2, &mem, &len, NULL, 0) != 0)
33         nm_bug("%s: sysctl: %s", __func__, strerror(errno));
34 
35     ram = mem / 1024 / 1024;
36 #endif
37 
38     return ram;
39 }
40 
41 #if 0
42 uint32_t nm_hw_ncpus(void)
43 {
44     uint32_t ncpus = 0;
45 #if defined (NM_OS_LINUX)
46     ncpus = sysconf(_SC_NPROCESSORS_ONLN);
47 #elif defined (NM_OS_FREEBSD)
48     int mib[2];
49     size_t len = sizeof(ncpus);
50 
51     mib[0] = CTL_HW;
52     mib[1] = HW_NCPU;
53 
54     if (sysctl(mib, 2, &ncpus, &len, NULL, 0) != 0)
55         nm_bug("%s: sysctl: %s", __func__, strerror(errno));
56 #endif
57     return ncpus;
58 }
59 #endif
60 
nm_hw_disk_free(void)61 uint32_t nm_hw_disk_free(void)
62 {
63     uint64_t df = 0;
64     struct statvfs fsstat;
65 
66     memset(&fsstat, 0, sizeof(fsstat));
67 
68     if (statvfs(nm_cfg_get()->vm_dir.data, &fsstat) != 0)
69         nm_bug("%s: statvfs: %s", __func__, strerror(errno));
70     df = (fsstat.f_frsize * fsstat.f_bavail) / 1024 / 1024 / 1024;
71 
72     /* reserve 1 Gb */
73     df--;
74 
75     return df;
76 }
77 
78 /* vim:set ts=4 sw=4: */
79