1/* 2 * Copyright 2009 Haiku Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _FBSD_COMPAT_SYS_SYSCTL_H_ 6#define _FBSD_COMPAT_SYS_SYSCTL_H_ 7 8 9#include <sys/queue.h> 10 11 12#ifdef _KERNEL 13 14struct sysctl_req { 15 void *newptr; 16}; 17 18struct sysctl_ctx_list { 19}; 20 21struct sysctl_oid_list { 22}; 23 24 25#define SYSCTL_HANDLER_ARGS void *oidp, void *arg1, int arg2, \ 26 struct sysctl_req *req 27 28#define OID_AUTO (-1) 29 30#define CTLTYPE 0xf /* Mask for the type */ 31#define CTLTYPE_NODE 1 /* name is a node */ 32#define CTLTYPE_INT 2 /* name describes an integer */ 33#define CTLTYPE_STRING 3 /* name describes a string */ 34#define CTLTYPE_QUAD 4 /* name describes a 64-bit number */ 35#define CTLTYPE_OPAQUE 5 /* name describes a structure */ 36#define CTLTYPE_STRUCT CTLTYPE_OPAQUE /* name describes a structure */ 37#define CTLTYPE_UINT 6 /* name describes an unsigned integer */ 38#define CTLTYPE_LONG 7 /* name describes a long */ 39#define CTLTYPE_ULONG 8 /* name describes an unsigned long */ 40#define CTLTYPE_U64 9 /* name describes an unsigned 64-bit number */ 41 42#define CTLFLAG_RD 0x80000000 /* Allow reads of variable */ 43#define CTLFLAG_WR 0x40000000 /* Allow writes to the variable */ 44#define CTLFLAG_RW (CTLFLAG_RD|CTLFLAG_WR) 45#define CTLFLAG_NOLOCK 0x20000000 /* XXX Don't Lock */ 46#define CTLFLAG_ANYBODY 0x10000000 /* All users can set this var */ 47#define CTLFLAG_SECURE 0x08000000 /* Permit set only if securelevel<=0 */ 48#define CTLFLAG_PRISON 0x04000000 /* Prisoned roots can fiddle */ 49#define CTLFLAG_DYN 0x02000000 /* Dynamic oid - can be freed */ 50#define CTLFLAG_SKIP 0x01000000 /* Skip this sysctl when listing */ 51#define CTLMASK_SECURE 0x00F00000 /* Secure level */ 52#define CTLFLAG_TUN 0x00080000 /* Tunable variable */ 53#define CTLFLAG_MPSAFE 0x00040000 /* Handler is MP safe */ 54#define CTLFLAG_RDTUN (CTLFLAG_RD|CTLFLAG_TUN) 55 56 57static inline int 58sysctl_ctx_init(struct sysctl_ctx_list *clist) 59{ 60 return -1; 61} 62 63 64static inline int 65sysctl_ctx_free(struct sysctl_ctx_list *clist) 66{ 67 return -1; 68} 69 70 71static inline void * 72sysctl_add_oid(struct sysctl_ctx_list *clist, void *parent, int nbr, 73 const char *name, int kind, void *arg1, int arg2, 74 int (*handler) (SYSCTL_HANDLER_ARGS), const char *fmt, const char *descr) 75{ 76 return NULL; 77} 78 79 80static inline int sysctl_handle_long(SYSCTL_HANDLER_ARGS) { return -1; } 81static inline int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS) { return -1; } 82static inline int sysctl_handle_quad(SYSCTL_HANDLER_ARGS) { return -1; } 83static inline int sysctl_handle_int(SYSCTL_HANDLER_ARGS) { return -1; } 84static inline int sysctl_handle_64(SYSCTL_HANDLER_ARGS) { return -1; } 85static inline int sysctl_handle_string(SYSCTL_HANDLER_ARGS) { return -1; } 86 87 88#define SYSCTL_OUT(r, p, l) -1 89 90#define __DESCR(x) "" 91 92#define SYSCTL_ADD_OID(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr) \ 93 sysctl_add_oid(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, \ 94 __DESCR(descr)) 95 96#define SYSCTL_ADD_NODE(ctx, parent, nbr, name, access, handler, descr) \ 97 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_NODE|(access), \ 98 0, 0, handler, "N", __DESCR(descr)) 99 100#define SYSCTL_ADD_STRING(ctx, parent, nbr, name, access, arg, len, descr) \ 101 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_STRING|(access), \ 102 arg, len, sysctl_handle_string, "A", __DESCR(descr)) 103 104#define SYSCTL_ADD_INT(ctx, parent, nbr, name, access, ptr, val, descr) \ 105 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_INT|(access), \ 106 ptr, val, sysctl_handle_int, "I", __DESCR(descr)) 107 108#define SYSCTL_ADD_UINT(ctx, parent, nbr, name, access, ptr, val, descr) \ 109 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_UINT|(access), \ 110 ptr, val, sysctl_handle_int, "IU", __DESCR(descr)) 111 112#define SYSCTL_ADD_XINT(ctx, parent, nbr, name, access, ptr, val, descr) \ 113 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_UINT|(access), \ 114 ptr, val, sysctl_handle_int, "IX", __DESCR(descr)) 115 116#define SYSCTL_ADD_LONG(ctx, parent, nbr, name, access, ptr, descr) \ 117 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_LONG|(access), \ 118 ptr, 0, sysctl_handle_long, "L", __DESCR(descr)) 119 120#define SYSCTL_ADD_ULONG(ctx, parent, nbr, name, access, ptr, descr) \ 121 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_ULONG|(access), \ 122 ptr, 0, sysctl_handle_long, "LU", __DESCR(descr)) 123 124#define SYSCTL_ADD_QUAD(ctx, parent, nbr, name, access, ptr, descr) \ 125 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_QUAD|(access), \ 126 ptr, 0, sysctl_handle_quad, "Q", __DESCR(descr)) 127 128#define SYSCTL_ADD_UQUAD(ctx, parent, nbr, name, access, ptr, descr) \ 129 sysctl_add_oid(ctx, parent, nbr, name, \ 130 CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), \ 131 ptr, 0, sysctl_handle_64, "QU", __DESCR(descr)) 132 133#define SYSCTL_ADD_OPAQUE(ctx, parent, nbr, name, access, ptr, len, fmt, descr) \ 134 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_OPAQUE|(access), \ 135 ptr, len, sysctl_handle_opaque, fmt, __DESCR(descr)) 136 137#define SYSCTL_ADD_STRUCT(ctx, parent, nbr, name, access, ptr, type, descr) \ 138 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_OPAQUE|(access), \ 139 ptr, sizeof(struct type), sysctl_handle_opaque, "S," #type, __DESCR(descr)) 140 141#define SYSCTL_ADD_PROC(ctx, parent, nbr, name, access, ptr, arg, handler, fmt, descr) \ 142 sysctl_add_oid(ctx, parent, nbr, name, (access), ptr, arg, handler, fmt, \ 143 __DESCR(descr)) 144 145 146static inline void * 147SYSCTL_CHILDREN(void *ptr) 148{ 149 return NULL; 150} 151 152 153#define SYSCTL_STATIC_CHILDREN(...) NULL 154 155#define SYSCTL_DECL(name) \ 156 extern struct sysctl_oid_list sysctl_##name##_children 157 158#define SYSCTL_NODE(...) 159#define SYSCTL_INT(...) 160#define SYSCTL_UINT(...) 161#define SYSCTL_PROC(...) 162 163#endif 164 165#endif 166