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