7#include <sys/kassert.h>
19#define SYSCTL_STR(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
20 { #_PATH, SYSCTL_TYPE_STR, _FLAGS, _DESCRIPTION, &SYSCTL_##_PATH },
21#define SYSCTL_INT(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
22 { #_PATH, SYSCTL_TYPE_INT, _FLAGS, _DESCRIPTION, &SYSCTL_##_PATH },
23#define SYSCTL_BOOL(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
24 { #_PATH, SYSCTL_TYPE_BOOL, _FLAGS, _DESCRIPTION, &SYSCTL_##_PATH },
27 {
"", 0, 0,
"",
NULL },
33#define SYSCTL_STR(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
34SysCtlString SYSCTL_##_PATH = { #_PATH, _DEFAULT };
35#define SYSCTL_INT(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
36SysCtlInt SYSCTL_##_PATH = { #_PATH, _DEFAULT };
37#define SYSCTL_BOOL(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT) \
38SysCtlBool SYSCTL_##_PATH = { #_PATH, _DEFAULT };
88 kprintf(
"Sysctl node is read-only!\n");
95 memcpy(val, obj,
sizeof(*val));
99 memcpy(val, obj,
sizeof(*val));
103 memcpy(val, obj,
sizeof(*val));
116 kprintf(
"%-20s %s\n",
"Name",
"Description");
124 if (argc != 2 && argc != 3) {
125 kprintf(
"Usage: sysctl NODE [VALUE]\n");
131 kprintf(
"Unknown sysctl node!\n");
149 kprintf(
"%s: %s\n", argv[1], val->
value ?
"true" :
"false");
159 kprintf(
"Sysctl node is read-only!\n");
176 if (
strcmp(argv[2],
"0") == 0) {
178 }
else if (
strcmp(argv[2],
"1") == 0) {
int kprintf(const char *fmt,...)
uint64_t Debug_StrToInt(const char *s)
#define REGISTER_DBGCMD(_NAME, _DESC, _FUNC)
SysCtlEntry SYSCTLTable[]
struct SysCtlEntry SysCtlEntry
int strcmp(const char *s1, const char *s2)
char * strncpy(char *to, const char *from, size_t len)
void * memcpy(void *dst, const void *src, size_t len)
uint64_t SysCtl_SetObject(const char *node, void *obj)
uint64_t SysCtl_GetType(const char *node)
void * SysCtl_GetObject(const char *node)
SYSCTL_LIST int SysCtl_Lookup(const char *path)
void Debug_SysCtl(int argc, const char *argv[])
#define SYSCTL_TYPE_INVALID
#define SYSCTL_STR_MAXLENGTH
char value[SYSCTL_STR_MAXLENGTH]