5 #include <linux/version.h>
6 #include <sys/sysinfo.h>
8 #if ((defined(__i386__) || defined(__x86_64__)) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 3, 23))) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 3, 48))
9 # define SYSINFO_EXTENDED 1
11 # define SYSINFO_EXTENDED 0
20 #define SYSINFO_KEY_SET_HASH(S) PERL_HASH((S).hash, (S).key, (S).klen)
21 #define SYSINFO_KEY_STORE(H,S,V) hv_store((H), (S).key, (S).klen, (V), (S).hash)
23 static sysinfo_key key_uptime = { "uptime", 6, 0 };
24 static sysinfo_key key_load1 = { "load1", 5, 0 };
25 static sysinfo_key key_load5 = { "load5", 5, 0 };
26 static sysinfo_key key_load15 = { "load15", 6, 0 };
27 static sysinfo_key key_totalram = { "totalram", 8, 0 };
28 static sysinfo_key key_freeram = { "freeram", 7, 0 };
29 static sysinfo_key key_sharedram = { "sharedram", 9, 0 };
30 static sysinfo_key key_bufferram = { "bufferram", 9, 0 };
31 static sysinfo_key key_totalswap = { "totalswap", 9, 0 };
32 static sysinfo_key key_freeswap = { "freeswap", 8, 0 };
33 static sysinfo_key key_procs = { "procs", 5, 0 };
35 static sysinfo_key key_totalhigh = { "totalhigh", 9, 0 };
36 static sysinfo_key key_freehigh = { "freehigh", 8, 0 };
37 static sysinfo_key key_mem_unit = { "mem_unit", 8, 0 };
38 #endif /* SYSINFO_EXTENDED */
40 MODULE = Linux::SysInfo PACKAGE = Linux::SysInfo
46 SYSINFO_KEY_SET_HASH(key_uptime);
47 SYSINFO_KEY_SET_HASH(key_load1);
48 SYSINFO_KEY_SET_HASH(key_load5);
49 SYSINFO_KEY_SET_HASH(key_load15);
50 SYSINFO_KEY_SET_HASH(key_totalram);
51 SYSINFO_KEY_SET_HASH(key_freeram);
52 SYSINFO_KEY_SET_HASH(key_sharedram);
53 SYSINFO_KEY_SET_HASH(key_bufferram);
54 SYSINFO_KEY_SET_HASH(key_totalswap);
55 SYSINFO_KEY_SET_HASH(key_freeswap);
56 SYSINFO_KEY_SET_HASH(key_procs);
58 SYSINFO_KEY_SET_HASH(key_totalhigh);
59 SYSINFO_KEY_SET_HASH(key_freehigh);
60 SYSINFO_KEY_SET_HASH(key_mem_unit);
61 #endif /* SYSINFO_EXTENDED */
70 if (sysinfo(&si) == -1) {
75 /* sv_2mortal((SV *) h); */
77 SYSINFO_KEY_STORE(h, key_uptime, newSViv(si.uptime));
78 SYSINFO_KEY_STORE(h, key_load1, newSVuv(si.loads[0]));
79 SYSINFO_KEY_STORE(h, key_load5, newSVuv(si.loads[1]));
80 SYSINFO_KEY_STORE(h, key_load15, newSVuv(si.loads[2]));
81 SYSINFO_KEY_STORE(h, key_totalram, newSVuv(si.totalram));
82 SYSINFO_KEY_STORE(h, key_freeram, newSVuv(si.freeram));
83 SYSINFO_KEY_STORE(h, key_sharedram, newSVuv(si.sharedram));
84 SYSINFO_KEY_STORE(h, key_bufferram, newSVuv(si.bufferram));
85 SYSINFO_KEY_STORE(h, key_totalswap, newSVuv(si.totalswap));
86 SYSINFO_KEY_STORE(h, key_freeswap, newSVuv(si.freeswap));
87 SYSINFO_KEY_STORE(h, key_procs, newSVuv(si.procs));
89 SYSINFO_KEY_STORE(h, key_totalhigh, newSVuv(si.totalhigh));
90 SYSINFO_KEY_STORE(h, key_freehigh, newSVuv(si.freehigh));
91 SYSINFO_KEY_STORE(h, key_mem_unit, newSVuv(si.mem_unit));
92 #endif /* SYSINFO_EXTENDED */
94 RETVAL = newRV_noinc((SV *) h);
101 RETVAL = newSViv(SYSINFO_EXTENDED);