CS350 COS
COS
Loading...
Searching...
No Matches
sysctl.h
Go to the documentation of this file.
1
2#ifndef __SYS_SYSCTL_H__
3#define __SYS_SYSCTL_H__
4
5#include <stdbool.h>
6
7/*
8 * System Control Macros
9 * SYSCTL_STR(PATH, FLAGS, DESCRIPTION, DEFAULT)
10 * SYSCTL_INT(PATH, FLAGS, DESCRIPTION, DEFAULT)
11 * SYSCTL_BOOL(PATH, FLAGS, DESCRIPTION, DEFAULT)
12 * SYSCTL_END()
13 */
14
15#define SYSCTL_TYPE_INVALID 0
16#define SYSCTL_TYPE_STR 1
17#define SYSCTL_TYPE_INT 2
18#define SYSCTL_TYPE_BOOL 3
19
20#define SYSCTL_FLAG_RO 1
21#define SYSCTL_FLAG_RW 2
22
23#define SYSCTL_LIST \
24 SYSCTL_STR(kern_ostype, SYSCTL_FLAG_RO, "OS Type", "Castor") \
25 SYSCTL_INT(kern_hz, SYSCTL_FLAG_RW, "Tick frequency", 100) \
26 SYSCTL_INT(time_tzadj, SYSCTL_FLAG_RW, "Time zone offset in seconds", 0) \
27 SYSCTL_INT(log_syscall, SYSCTL_FLAG_RW, "Syscall log level", 1) \
28 SYSCTL_INT(log_loader, SYSCTL_FLAG_RW, "Loader log level", 1) \
29 SYSCTL_INT(log_vfs, SYSCTL_FLAG_RW, "VFS log level", 1) \
30 SYSCTL_INT(log_o2fs, SYSCTL_FLAG_RW, "O2FS log level", 0) \
31 SYSCTL_INT(log_ide, SYSCTL_FLAG_RW, "IDE log level", 0)
32
33#define SYSCTL_STR_MAXLENGTH 128
34
35typedef struct SysCtlString {
36 char path[64];
39
40typedef struct SysCtlInt {
41 char path[64];
44
45typedef struct SysCtlBool {
46 char path[64];
47 bool value;
49
50#define SYSCTL_STR(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
51extern SysCtlString SYSCTL_##_PATH;
52#define SYSCTL_INT(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
53extern SysCtlInt SYSCTL_##_PATH;
54#define SYSCTL_BOOL(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
55extern SysCtlBool SYSCTL_##_PATH;
57#undef SYSCTL_STR
58#undef SYSCTL_INT
59#undef SYSCTL_BOOL
60
61#define SYSCTL_GETSTR(_PATH) SYSCTL_##_PATH.value
62#define SYSCTL_SETSTR(_PATH, _VALUE) strncpy(SYSCTL_##_PATH.value, _VALUE, SYSCTL_STR_MAXLENGTH);
63#define SYSCTL_GETINT(_PATH) SYSCTL_##_PATH.value
64#define SYSCTL_SETINT(_PATH, _VALUE) SYSCTL_##_PATH.value = _VALUE
65#define SYSCTL_GETBOOL(_PATH) SYSCTL_##_PATH.value
66#define SYSCTL_SETBOOL(_PATH, _VALUE) SYSCTL_##_PATH.value = _VALUE
67
68uint64_t SysCtl_GetType(const char *node);
69void *SysCtl_GetObject(const char *node);
70uint64_t SysCtl_SetObject(const char *node, void *obj);
71
72#endif /* __SYS_SYSCTL_H__ */
73
int64_t value
Definition: sysctl.h:42
#define SYSCTL_STR_MAXLENGTH
Definition: sysctl.h:33
char value[SYSCTL_STR_MAXLENGTH]
Definition: sysctl.h:37
uint64_t SysCtl_SetObject(const char *node, void *obj)
Definition: sysctl.c:80
uint64_t SysCtl_GetType(const char *node)
Definition: sysctl.c:58
void * SysCtl_GetObject(const char *node)
Definition: sysctl.c:69
bool value
Definition: sysctl.h:47
char path[64]
Definition: sysctl.h:36
#define SYSCTL_LIST
Definition: sysctl.h:23
char path[64]
Definition: sysctl.h:41
char path[64]
Definition: sysctl.h:46
unsigned long uint64_t
Definition: types.h:13
signed long int64_t
Definition: types.h:8