Loading [MathJax]/extensions/tex2jax.js
CS350 COS
COS
All Data Structures Files Functions Variables Typedefs Macros
sysctl.h File Reference
#include <stdbool.h>
Include dependency graph for sysctl.h:

Go to the source code of this file.

Data Structures

struct  SysCtlString
 
struct  SysCtlInt
 
struct  SysCtlBool
 

Macros

#define SYSCTL_TYPE_INVALID   0
 
#define SYSCTL_TYPE_STR   1
 
#define SYSCTL_TYPE_INT   2
 
#define SYSCTL_TYPE_BOOL   3
 
#define SYSCTL_FLAG_RO   1
 
#define SYSCTL_FLAG_RW   2
 
#define SYSCTL_LIST
 
#define SYSCTL_STR_MAXLENGTH   128
 
#define SYSCTL_STR(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT)   extern SysCtlString SYSCTL_##_PATH;
 
#define SYSCTL_INT(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT)   extern SysCtlInt SYSCTL_##_PATH;
 
#define SYSCTL_BOOL(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT)   extern SysCtlBool SYSCTL_##_PATH;
 
#define SYSCTL_GETSTR(_PATH)   SYSCTL_##_PATH.value
 
#define SYSCTL_SETSTR(_PATH, _VALUE)   strncpy(SYSCTL_##_PATH.value, _VALUE, SYSCTL_STR_MAXLENGTH);
 
#define SYSCTL_GETINT(_PATH)   SYSCTL_##_PATH.value
 
#define SYSCTL_SETINT(_PATH, _VALUE)   SYSCTL_##_PATH.value = _VALUE
 
#define SYSCTL_GETBOOL(_PATH)   SYSCTL_##_PATH.value
 
#define SYSCTL_SETBOOL(_PATH, _VALUE)   SYSCTL_##_PATH.value = _VALUE
 

Typedefs

typedef struct SysCtlString SysCtlString
 
typedef struct SysCtlInt SysCtlInt
 
typedef struct SysCtlBool SysCtlBool
 

Functions

uint64_t SysCtl_GetType (const char *node)
 
void * SysCtl_GetObject (const char *node)
 
uint64_t SysCtl_SetObject (const char *node, void *obj)
 

Data Structure Documentation

◆ SysCtlString

struct SysCtlString

Definition at line 35 of file sysctl.h.

Collaboration diagram for SysCtlString:
[legend]
Data Fields
char path[64]
char value[SYSCTL_STR_MAXLENGTH]

◆ SysCtlInt

struct SysCtlInt

Definition at line 40 of file sysctl.h.

Collaboration diagram for SysCtlInt:
[legend]
Data Fields
char path[64]
int64_t value

◆ SysCtlBool

struct SysCtlBool

Definition at line 45 of file sysctl.h.

Collaboration diagram for SysCtlBool:
[legend]
Data Fields
char path[64]
bool value

Macro Definition Documentation

◆ SYSCTL_BOOL

#define SYSCTL_BOOL (   _PATH,
  _FLAGS,
  _DESCRIPTION,
  _DEFAULT 
)    extern SysCtlBool SYSCTL_##_PATH;

Definition at line 54 of file sysctl.h.

◆ SYSCTL_FLAG_RO

#define SYSCTL_FLAG_RO   1

Definition at line 20 of file sysctl.h.

◆ SYSCTL_FLAG_RW

#define SYSCTL_FLAG_RW   2

Definition at line 21 of file sysctl.h.

◆ SYSCTL_GETBOOL

#define SYSCTL_GETBOOL (   _PATH)    SYSCTL_##_PATH.value

Definition at line 65 of file sysctl.h.

◆ SYSCTL_GETINT

#define SYSCTL_GETINT (   _PATH)    SYSCTL_##_PATH.value

Definition at line 63 of file sysctl.h.

◆ SYSCTL_GETSTR

#define SYSCTL_GETSTR (   _PATH)    SYSCTL_##_PATH.value

Definition at line 61 of file sysctl.h.

◆ SYSCTL_INT

#define SYSCTL_INT (   _PATH,
  _FLAGS,
  _DESCRIPTION,
  _DEFAULT 
)    extern SysCtlInt SYSCTL_##_PATH;

Definition at line 52 of file sysctl.h.

◆ SYSCTL_LIST

#define SYSCTL_LIST
Value:
SYSCTL_STR(kern_ostype, SYSCTL_FLAG_RO, "OS Type", "Castor") \
SYSCTL_INT(kern_hz, SYSCTL_FLAG_RW, "Tick frequency", 100) \
SYSCTL_INT(time_tzadj, SYSCTL_FLAG_RW, "Time zone offset in seconds", 0) \
SYSCTL_INT(log_syscall, SYSCTL_FLAG_RW, "Syscall log level", 1) \
SYSCTL_INT(log_loader, SYSCTL_FLAG_RW, "Loader log level", 1) \
SYSCTL_INT(log_vfs, SYSCTL_FLAG_RW, "VFS log level", 1) \
SYSCTL_INT(log_o2fs, SYSCTL_FLAG_RW, "O2FS log level", 0) \
SYSCTL_INT(log_ide, SYSCTL_FLAG_RW, "IDE log level", 0)
#define SYSCTL_STR(_PATH, _FLAGS, _DESCRIPTION, _DEFAULT)
Definition: sysctl.h:50
#define SYSCTL_FLAG_RO
Definition: sysctl.h:20
#define SYSCTL_FLAG_RW
Definition: sysctl.h:21

Definition at line 23 of file sysctl.h.

◆ SYSCTL_SETBOOL

#define SYSCTL_SETBOOL (   _PATH,
  _VALUE 
)    SYSCTL_##_PATH.value = _VALUE

Definition at line 66 of file sysctl.h.

◆ SYSCTL_SETINT

#define SYSCTL_SETINT (   _PATH,
  _VALUE 
)    SYSCTL_##_PATH.value = _VALUE

Definition at line 64 of file sysctl.h.

◆ SYSCTL_SETSTR

#define SYSCTL_SETSTR (   _PATH,
  _VALUE 
)    strncpy(SYSCTL_##_PATH.value, _VALUE, SYSCTL_STR_MAXLENGTH);

Definition at line 62 of file sysctl.h.

◆ SYSCTL_STR

#define SYSCTL_STR (   _PATH,
  _FLAGS,
  _DESCRIPTION,
  _DEFAULT 
)    extern SysCtlString SYSCTL_##_PATH;

Definition at line 50 of file sysctl.h.

◆ SYSCTL_STR_MAXLENGTH

#define SYSCTL_STR_MAXLENGTH   128

Definition at line 33 of file sysctl.h.

◆ SYSCTL_TYPE_BOOL

#define SYSCTL_TYPE_BOOL   3

Definition at line 18 of file sysctl.h.

◆ SYSCTL_TYPE_INT

#define SYSCTL_TYPE_INT   2

Definition at line 17 of file sysctl.h.

◆ SYSCTL_TYPE_INVALID

#define SYSCTL_TYPE_INVALID   0

Definition at line 15 of file sysctl.h.

◆ SYSCTL_TYPE_STR

#define SYSCTL_TYPE_STR   1

Definition at line 16 of file sysctl.h.

Typedef Documentation

◆ SysCtlBool

typedef struct SysCtlBool SysCtlBool

◆ SysCtlInt

typedef struct SysCtlInt SysCtlInt

◆ SysCtlString

typedef struct SysCtlString SysCtlString

Function Documentation

◆ SysCtl_GetObject()

void * SysCtl_GetObject ( const char *  node)

Definition at line 69 of file sysctl.c.

70{
71 int i = SysCtl_Lookup(node);
72 if (i == -1) {
73 return NULL;
74 }
75
76 return SYSCTLTable[i].node;
77}
SysCtlEntry SYSCTLTable[]
Definition: sysctl.c:23
#define NULL
Definition: stddef.h:6
void * node
Definition: sysctl.c:16
SYSCTL_LIST int SysCtl_Lookup(const char *path)
Definition: sysctl.c:45
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SysCtl_GetType()

uint64_t SysCtl_GetType ( const char *  node)

Definition at line 58 of file sysctl.c.

59{
60 int i = SysCtl_Lookup(node);
61 if (i == -1) {
63 }
64
65 return SYSCTLTable[i].type;
66}
int type
Definition: sysctl.c:12
#define SYSCTL_TYPE_INVALID
Definition: sysctl.h:15
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SysCtl_SetObject()

uint64_t SysCtl_SetObject ( const char *  node,
void *  obj 
)

Definition at line 80 of file sysctl.c.

81{
82 int i = SysCtl_Lookup(node);
83 if (i == -1) {
84 return ENOENT;
85 }
86
87 if (SYSCTLTable[i].flags == SYSCTL_FLAG_RO) {
88 kprintf("Sysctl node is read-only!\n");
89 return EACCES;
90 }
91
92 switch (SYSCTLTable[i].type) {
93 case SYSCTL_TYPE_STR: {
94 SysCtlString *val = (SysCtlString *)SYSCTLTable[i].node;
95 memcpy(val, obj, sizeof(*val));
96 }
97 case SYSCTL_TYPE_INT: {
98 SysCtlInt *val = (SysCtlInt *)SYSCTLTable[i].node;
99 memcpy(val, obj, sizeof(*val));
100 }
101 case SYSCTL_TYPE_BOOL: {
102 SysCtlBool *val = (SysCtlBool *)SYSCTLTable[i].node;
103 memcpy(val, obj, sizeof(*val));
104 }
105 }
106
107 return 0;
108}
#define ENOENT
Definition: errno.h:15
#define EACCES
Definition: errno.h:26
int kprintf(const char *fmt,...)
Definition: printf.c:210
uint32_t type
Definition: multiboot.h:8
void * memcpy(void *dst, const void *src, size_t len)
Definition: string.c:177
#define SYSCTL_TYPE_INT
Definition: sysctl.h:17
#define SYSCTL_TYPE_BOOL
Definition: sysctl.h:18
#define SYSCTL_TYPE_STR
Definition: sysctl.h:16
Here is the call graph for this function:
Here is the caller graph for this function: