#ifndef _SYS_SYSCTL_H_
#define _SYS_SYSCTL_H_
#ifndef _SYS_TYPES_H_
#include <sys/types.h>
#endif
#ifndef _SYS_QUEUE_H_
#include <sys/queue.h>
#endif
#define CTL_MAXNAME 12
struct ctlname {
char *ctl_name;
int ctl_type;
};
#define CTLTYPE 0x1f
#define CTLTYPE_NODE 0x01
#define CTLTYPE_INT 0x02
#define CTLTYPE_STRING 0x03
#define CTLTYPE_S64 0x04
#define CTLTYPE_QUAD CTLTYPE_S64
#define CTLTYPE_OPAQUE 0x05
#define CTLTYPE_STRUCT CTLTYPE_OPAQUE
#define CTLTYPE_UINT 0x06
#define CTLTYPE_LONG 0x07
#define CTLTYPE_ULONG 0x08
#define CTLTYPE_U64 0x09
#define CTLTYPE_UQUAD CTLTYPE_U64
#define CTLTYPE_U8 0x0a
#define CTLTYPE_U16 0x0b
#define CTLTYPE_S8 0x0c
#define CTLTYPE_S16 0x0d
#define CTLTYPE_S32 0x0e
#define CTLTYPE_U32 0x0f
#define CTLTYPE_BIT32(n) (0x10 | ((n) << CTLSHIFT_BITFLD))
#define CTLTYPE_BIT64(n) (0x11 | ((n) << CTLSHIFT_BITFLD))
#define CTLFLAG_RD 0x80000000
#define CTLFLAG_WR 0x40000000
#define CTLFLAG_RW (CTLFLAG_RD|CTLFLAG_WR)
#define CTLFLAG_ANYBODY 0x10000000
#define CTLFLAG_SECURE 0x08000000
#define CTLFLAG_PRISON 0x04000000
#define CTLFLAG_DYN 0x02000000
#define CTLFLAG_SKIP 0x01000000
#define CTLMASK_SECURE 0x00F00000
#define CTLFLAG_DYING 0x00010000
#define CTLFLAG_SHLOCK 0x00008000
#define CTLFLAG_EXLOCK 0x00004000
#define CTLFLAG_NOLOCK 0x00002000
#define CTLFLAG_RSV12 0x00001000
#define CTLMASK_BITFLD 0x00000FC0
#define CTLFLAG_RSV5 0x00000020
#define CTLMASK_TYPE 0x0000001F
#define CTLSHIFT_BITFLD 6
#define CTLINFO_MAXBITN 64
#define OID_AUTO (-1)
#ifdef _KERNEL
#include <sys/kernel.h>
#ifndef _SYS_LOCK_H_
#include <sys/lock.h>
#endif
#define SYSCTL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, int arg2, \
struct sysctl_req *req
struct sysctl_req {
struct thread *td;
int lock;
void *oldptr;
size_t oldlen;
size_t oldidx;
int (*oldfunc)(struct sysctl_req *, const void *, size_t);
void *newptr;
size_t newlen;
size_t newidx;
int (*newfunc)(struct sysctl_req *, void *, size_t);
size_t validlen;
int flags;
};
SLIST_HEAD(sysctl_oid_list, sysctl_oid);
struct sysctl_oid {
struct sysctl_oid_list *oid_parent;
SLIST_ENTRY(sysctl_oid) oid_link;
int oid_number;
int oid_kind;
void *oid_arg1;
int oid_arg2;
const char *oid_name;
int (*oid_handler)(SYSCTL_HANDLER_ARGS);
const char *oid_fmt;
int oid_refcnt;
u_int oid_running;
const char *oid_descr;
struct lock oid_lock;
};
#define SYSCTL_IN(r, p, l) (r->newfunc)(r, p, l)
#define SYSCTL_OUT(r, p, l) (r->oldfunc)(r, p, l)
#define SYSCTL_OUT_STR(r, p) (r->oldfunc)(r, p, strlen(p) + 1)
int sysctl_handle_8(SYSCTL_HANDLER_ARGS);
int sysctl_handle_16(SYSCTL_HANDLER_ARGS);
int sysctl_handle_32(SYSCTL_HANDLER_ARGS);
int sysctl_handle_64(SYSCTL_HANDLER_ARGS);
int sysctl_handle_int(SYSCTL_HANDLER_ARGS);
int sysctl_handle_long(SYSCTL_HANDLER_ARGS);
int sysctl_handle_quad(SYSCTL_HANDLER_ARGS);
int sysctl_handle_bit32(SYSCTL_HANDLER_ARGS);
int sysctl_handle_bit64(SYSCTL_HANDLER_ARGS);
int sysctl_handle_intptr(SYSCTL_HANDLER_ARGS);
int sysctl_handle_string(SYSCTL_HANDLER_ARGS);
int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS);
extern struct lock sysctllock;
#define SYSCTL_XLOCK() _sysctl_xlock()
#define SYSCTL_XUNLOCK() _sysctl_xunlock()
#define SYSCTL_SLOCK() lockmgr(&mycpu->gd_sysctllock, LK_SHARED)
#define SYSCTL_SUNLOCK() lockmgr(&mycpu->gd_sysctllock, LK_RELEASE)
#define SYSCTL_ASSERT_LOCKED() KKASSERT(lockowned(&mycpu->gd_sysctllock))
void sysctl_register_oid(struct sysctl_oid *oidp);
void sysctl_unregister_oid(struct sysctl_oid *oidp);
#define SYSCTL_DECL(name) \
extern struct sysctl_oid_list sysctl_##name##_children
#define SYSCTL_SET_CHILDREN(oid_ptr, children) do { \
(oid_ptr)->oid_arg1 = (children); \
} while(0)
#define SYSCTL_CHILDREN(oid_ptr) (struct sysctl_oid_list *) \
(oid_ptr)->oid_arg1
#define SYSCTL_STATIC_CHILDREN(oid_name) \
(&sysctl_##oid_name##_children)
struct sysctl_ctx_entry {
struct sysctl_oid *entry;
TAILQ_ENTRY(sysctl_ctx_entry) link;
};
TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);
#define SYSCTL_NODE_CHILDREN(parent, name) \
sysctl_##parent##_##name##_children
#ifndef NO_SYSCTL_DESCR
#define __DESCR(d) d
#else
#define __DESCR(d) ""
#endif
#define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr)\
static struct sysctl_oid sysctl__##parent##_##name = { \
&sysctl_##parent##_children, \
{ NULL }, \
nbr, \
kind, \
a1, \
a2, \
#name, \
handler, \
fmt, \
0, \
0, \
__DESCR(descr) \
}; \
DATA_SET(sysctl_set, sysctl__##parent##_##name)
#define SYSCTL_ADD_OID(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
sysctl_add_oid(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr);
#define SYSCTL_NODE(parent, nbr, name, access, handler, descr) \
struct sysctl_oid_list SYSCTL_NODE_CHILDREN(parent, name); \
SYSCTL_OID(parent, nbr, name, CTLTYPE_NODE|(access), \
(void*)&SYSCTL_NODE_CHILDREN(parent, name), 0, handler, "N", descr)
#define SYSCTL_ADD_NODE(ctx, parent, nbr, name, access, handler, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_NODE|(access), \
0, 0, handler, "N", descr)
#define SYSCTL_STRING(parent, nbr, name, access, arg, len, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_STRING|(access), \
arg, len, sysctl_handle_string, "A", descr)
#define SYSCTL_ADD_STRING(ctx, parent, nbr, name, access, arg, len, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_STRING|(access), \
arg, len, sysctl_handle_string, "A", descr)
#define SYSCTL_INT(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, \
CTLTYPE_INT|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_int, "I", descr)
#define SYSCTL_ADD_INT(ctx, parent, nbr, name, access, ptr, val, descr) \
sysctl_add_oid(ctx, parent, nbr, name, \
CTLTYPE_INT|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_int, "I", descr)
#define SYSCTL_QUAD(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, \
CTLTYPE_QUAD|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_quad, "Q", descr)
#define SYSCTL_ADD_QUAD(ctx, parent, nbr, name, access, ptr, val, descr) \
sysctl_add_oid(ctx, parent, nbr, name, \
CTLTYPE_QUAD|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_quad, "Q", descr)
#define SYSCTL_UQUAD(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, \
CTLTYPE_UQUAD|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_quad, "QU", descr)
#define SYSCTL_ADD_UQUAD(ctx, parent, nbr, name, access, ptr, val, descr) \
sysctl_add_oid(ctx, parent, nbr, name, \
CTLTYPE_UQUAD|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_quad, "QU", descr)
#define SYSCTL_UINT(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, \
CTLTYPE_UINT|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_int, "IU", descr)
#define SYSCTL_ADD_UINT(ctx, parent, nbr, name, access, ptr, val, descr) \
sysctl_add_oid(ctx, parent, nbr, name, \
CTLTYPE_UINT|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_int, "IU", descr)
#define SYSCTL_LONG(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, \
CTLTYPE_LONG|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_long, "L", descr)
#define SYSCTL_ADD_LONG(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, \
CTLTYPE_LONG|CTLFLAG_NOLOCK|(access), \
ptr, 0, sysctl_handle_long, "L", descr)
#define SYSCTL_ULONG(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, \
CTLTYPE_ULONG|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_long, "LU", descr)
#define SYSCTL_ADD_ULONG(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, \
CTLTYPE_ULONG|CTLFLAG_NOLOCK|(access), \
ptr, 0, sysctl_handle_long, "LU", descr)
#define SYSCTL_S8(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_S8|(access), \
ptr, val, sysctl_handle_8, "C", descr)
#define SYSCTL_ADD_S8(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_S8|(access), \
ptr, 0, sysctl_handle_8, "C", descr)
#define SYSCTL_S16(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_S16|(access), \
ptr, val, sysctl_handle_16, "S", descr)
#define SYSCTL_ADD_S16(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_S16|(access), \
ptr, 0, sysctl_handle_16, "S", descr)
#define SYSCTL_S32(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_S32|(access), \
ptr, val, sysctl_handle_32, "I", descr)
#define SYSCTL_ADD_S32(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_S32|(access), \
ptr, 0, sysctl_handle_32, "I", descr)
#define SYSCTL_S64(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_S64|(access), \
ptr, val, sysctl_handle_64, "Q", descr)
#define SYSCTL_ADD_S64(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_S64|(access), \
ptr, 0, sysctl_handle_64, "Q", descr)
#define SYSCTL_U8(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_U8|(access), \
ptr, val, sysctl_handle_8, "CU", descr)
#define SYSCTL_ADD_U8(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_U8|(access), \
ptr, 0, sysctl_handle_8, "CU", descr)
#define SYSCTL_U16(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_U16|(access), \
ptr, val, sysctl_handle_16, "SU", descr)
#define SYSCTL_ADD_U16(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_U16|(access), \
ptr, 0, sysctl_handle_16, "SU", descr)
#define SYSCTL_U32(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_U32|(access), \
ptr, val, sysctl_handle_32, "IU", descr)
#define SYSCTL_ADD_U32(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_U32|(access), \
ptr, 0, sysctl_handle_32, "IU", descr)
#define SYSCTL_U64(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_U64|(access), \
ptr, val, sysctl_handle_64, "QU", descr)
#define SYSCTL_ADD_U64(ctx, parent, nbr, name, access, ptr, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_U64|(access), \
ptr, 0, sysctl_handle_64, "QU", descr)
#define SYSCTL_BIT32(parent, nbr, name, access, ptr, val, bit, descr) \
SYSCTL_OID(parent, nbr, name, \
CTLTYPE_BIT32(bit)|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_bit32, "I", descr)
#define SYSCTL_ADD_BIT32(ctx, parent, nbr, name, access, ptr, val, bit, descr) \
sysctl_add_oid(ctx, parent, nbr, name, \
CTLTYPE_BIT32(bit)|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_bit32, "I", descr)
#define SYSCTL_BIT64(parent, nbr, name, access, ptr, val, bit, descr) \
SYSCTL_OID(parent, nbr, name, \
CTLTYPE_BIT64(bit)|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_bit64, "I", descr)
#define SYSCTL_ADD_BIT64(ctx, parent, nbr, name, access, ptr, val, bit, descr) \
sysctl_add_oid(ctx, parent, nbr, name, \
CTLTYPE_BIT64(bit)|CTLFLAG_NOLOCK|(access), \
ptr, val, sysctl_handle_bit64, "I", descr)
#define SYSCTL_OPAQUE(parent, nbr, name, access, ptr, len, fmt, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|(access), \
ptr, len, sysctl_handle_opaque, fmt, descr)
#define SYSCTL_ADD_OPAQUE(ctx, parent, nbr, name, access, ptr, len, fmt, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_OPAQUE|(access), \
ptr, len, sysctl_handle_opaque, fmt, descr)
#define SYSCTL_STRUCT(parent, nbr, name, access, ptr, type, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|(access), \
ptr, sizeof(struct type), sysctl_handle_opaque, \
"S," #type, descr)
#define SYSCTL_ADD_STRUCT(ctx, parent, nbr, name, access, ptr, type, descr) \
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_OPAQUE|(access), \
ptr, sizeof(struct type), sysctl_handle_opaque, "S," #type, descr)
#define SYSCTL_PROC(parent, nbr, name, access, ptr, arg, handler, fmt, descr) \
SYSCTL_OID(parent, nbr, name, (access), \
ptr, arg, handler, fmt, descr)
#define SYSCTL_ADD_PROC(ctx, parent, nbr, name, access, ptr, arg, handler, fmt, descr) \
sysctl_add_oid(ctx, parent, nbr, name, (access), \
ptr, arg, handler, fmt, descr)
#endif
#define CTL_SYSCTL 0
#define CTL_KERN 1
#define CTL_VM 2
#define CTL_VFS 3
#define CTL_NET 4
#define CTL_DEBUG 5
#define CTL_HW 6
#define CTL_MACHDEP 7
#define CTL_USER 8
#define CTL_P1003_1B 9
#define CTL_LWKT 10
#define CTL_MAXID 11
#define CTL_SYSCTL_DEBUG 0
#define CTL_SYSCTL_NAME 1
#define CTL_SYSCTL_NEXT 2
#define CTL_SYSCTL_NAME2OID 3
#define CTL_SYSCTL_OIDFMT 4
#define CTL_SYSCTL_OIDDESCR 5
#define KERN_OSTYPE 1
#define KERN_OSRELEASE 2
#define KERN_OSREV 3
#define KERN_VERSION 4
#define KERN_MAXVNODES 5
#define KERN_MAXPROC 6
#define KERN_MAXFILES 7
#define KERN_ARGMAX 8
#define KERN_SECURELVL 9
#define KERN_HOSTNAME 10
#define KERN_HOSTID 11
#define KERN_CLOCKRATE 12
#define KERN_VNODE 13
#define KERN_PROC 14
#define KERN_FILE 15
#define KERN_UNUSED16 16
#define KERN_POSIX1 17
#define KERN_NGROUPS 18
#define KERN_JOB_CONTROL 19
#define KERN_SAVED_IDS 20
#define KERN_BOOTTIME 21
#define KERN_NISDOMAINNAME 22
#define KERN_UPDATEINTERVAL 23
#define KERN_OSRELDATE 24
#define KERN_NTP_PLL 25
#define KERN_BOOTFILE 26
#define KERN_MAXFILESPERPROC 27
#define KERN_MAXPROCPERUID 28
#define KERN_DUMPDEV 29
#define KERN_IPC 30
#define KERN_DUMMY 31
#define KERN_PS_STRINGS 32
#define KERN_USRSTACK 33
#define KERN_LOGSIGEXIT 34
#define KERN_IOV_MAX 35
#define KERN_MAXPOSIXLOCKSPERUID 36
#define KERN_STATIC_TLS_EXTRA 37
#define KERN_MAXID 38
#define KERN_PROC_ALL 0
#define KERN_PROC_PID 1
#define KERN_PROC_PGRP 2
#define KERN_PROC_SESSION 3
#define KERN_PROC_TTY 4
#define KERN_PROC_UID 5
#define KERN_PROC_RUID 6
#define KERN_PROC_ARGS 7
#define KERN_PROC_CWD 8
#define KERN_PROC_PATHNAME 9
#define KERN_PROC_SIGTRAMP 10
#define KERN_PROC_FLAGMASK 0xF0
#define KERN_PROC_FLAG_LWP 0x10
#define KERN_PROC_FLAG_LWKT 0x20
#define KIPC_MAXSOCKBUF 1
#define KIPC_SOCKBUF_WASTE 2
#define KIPC_SOMAXCONN 3
#define KIPC_MAX_LINKHDR 4
#define KIPC_MAX_PROTOHDR 5
#define KIPC_MAX_HDR 6
#define KIPC_MAX_DATALEN 7
#define KIPC_MBSTAT 8
#define KIPC_NMBCLUSTERS 9
#define HW_MACHINE 1
#define HW_MODEL 2
#define HW_NCPU 3
#define HW_BYTEORDER 4
#define HW_PHYSMEM 5
#define HW_USERMEM 6
#define HW_PAGESIZE 7
#define HW_DISKNAMES 8
#define HW_DISKSTATS 9
#define HW_FLOATINGPT 10
#define HW_MACHINE_ARCH 11
#define HW_MACHINE_PLATFORM 12
#define HW_SENSORS 13
#define HW_MAXID 14
#define USER_CS_PATH 1
#define USER_BC_BASE_MAX 2
#define USER_BC_DIM_MAX 3
#define USER_BC_SCALE_MAX 4
#define USER_BC_STRING_MAX 5
#define USER_COLL_WEIGHTS_MAX 6
#define USER_EXPR_NEST_MAX 7
#define USER_LINE_MAX 8
#define USER_RE_DUP_MAX 9
#define USER_POSIX2_VERSION 10
#define USER_POSIX2_C_BIND 11
#define USER_POSIX2_C_DEV 12
#define USER_POSIX2_CHAR_TERM 13
#define USER_POSIX2_FORT_DEV 14
#define USER_POSIX2_FORT_RUN 15
#define USER_POSIX2_LOCALEDEF 16
#define USER_POSIX2_SW_DEV 17
#define USER_POSIX2_UPE 18
#define USER_STREAM_MAX 19
#define USER_TZNAME_MAX 20
#define USER_MAXID 21
#define CTL_P1003_1B_ASYNCHRONOUS_IO 1
#define CTL_P1003_1B_MAPPED_FILES 2
#define CTL_P1003_1B_MEMLOCK 3
#define CTL_P1003_1B_MEMLOCK_RANGE 4
#define CTL_P1003_1B_MEMORY_PROTECTION 5
#define CTL_P1003_1B_MESSAGE_PASSING 6
#define CTL_P1003_1B_PRIORITIZED_IO 7
#define CTL_P1003_1B_PRIORITY_SCHEDULING 8
#define CTL_P1003_1B_REALTIME_SIGNALS 9
#define CTL_P1003_1B_SEMAPHORES 10
#define CTL_P1003_1B_FSYNC 11
#define CTL_P1003_1B_SHARED_MEMORY_OBJECTS 12
#define CTL_P1003_1B_SYNCHRONIZED_IO 13
#define CTL_P1003_1B_TIMERS 14
#define CTL_P1003_1B_AIO_LISTIO_MAX 15
#define CTL_P1003_1B_AIO_MAX 16
#define CTL_P1003_1B_AIO_PRIO_DELTA_MAX 17
#define CTL_P1003_1B_DELAYTIMER_MAX 18
#define CTL_P1003_1B_UNUSED19 19
#define CTL_P1003_1B_PAGESIZE 20
#define CTL_P1003_1B_RTSIG_MAX 21
#define CTL_P1003_1B_SEM_NSEMS_MAX 22
#define CTL_P1003_1B_UNUSED23 23
#define CTL_P1003_1B_SIGQUEUE_MAX 24
#define CTL_P1003_1B_TIMER_MAX 25
#ifdef _KERNEL
#define CTL_P1003_1B_MAXID 26
extern struct sysctl_oid_list sysctl__children;
SYSCTL_DECL(_kern);
SYSCTL_DECL(_kern_features);
SYSCTL_DECL(_sysctl);
SYSCTL_DECL(_vm);
SYSCTL_DECL(_vfs);
SYSCTL_DECL(_net);
SYSCTL_DECL(_debug);
SYSCTL_DECL(_debug_sizeof);
SYSCTL_DECL(_dev);
SYSCTL_DECL(_hw);
SYSCTL_DECL(_hw_bus);
SYSCTL_DECL(_machdep);
SYSCTL_DECL(_user);
SYSCTL_DECL(_compat);
SYSCTL_DECL(_lwkt);
SYSCTL_DECL(_security);
SYSCTL_DECL(_kern_ipc);
extern char machine[];
extern char osrelease[];
extern char ostype[];
extern char kern_ident[];
struct sysctl_oid *sysctl_add_oid(struct sysctl_ctx_list *clist,
struct sysctl_oid_list *parent, int nbr, const char *name,
int kind, void *arg1, int arg2,
int (*handler) (SYSCTL_HANDLER_ARGS),
const char *fmt, const char *descr);
void sysctl_rename_oid(struct sysctl_oid *oidp, const char *name);
int sysctl_remove_name(struct sysctl_oid *parent, const char *name, int del,
int recurse);
int sysctl_remove_oid(struct sysctl_oid *oidp, int del, int recurse);
int sysctl_ctx_init(struct sysctl_ctx_list *clist);
int sysctl_ctx_free(struct sysctl_ctx_list *clist);
struct sysctl_ctx_entry *sysctl_ctx_entry_add(struct sysctl_ctx_list *clist,
struct sysctl_oid *oidp);
struct sysctl_ctx_entry *sysctl_ctx_entry_find(struct sysctl_ctx_list *clist,
struct sysctl_oid *oidp);
int sysctl_ctx_entry_del(struct sysctl_ctx_list *clist,
struct sysctl_oid *oidp);
int kernel_sysctl(int *name, u_int namelen, void *old,
size_t *oldlenp, void *new, size_t newlen,
size_t *retval);
int kernel_sysctlbyname(char *name,
void *old, size_t *oldlenp, void *new, size_t newlen,
size_t *retval);
int userland_sysctl(int *name, u_int namelen, void *old,
size_t *oldlenp, int inkernel, void *new, size_t newlen,
size_t *retval);
int sysctl_find_oid(int *name, u_int namelen, struct sysctl_oid **noid,
int *nindx, struct sysctl_req *req);
int sysctl_int_range(SYSCTL_HANDLER_ARGS, int low, int high);
void _sysctl_xlock(void);
void _sysctl_xunlock(void);
struct sbuf;
struct sbuf *sbuf_new_for_sysctl(struct sbuf *, char *, int,
struct sysctl_req *);
#define FEATURE(name, desc) \
SYSCTL_INT(_kern_features, OID_AUTO, name, \
CTLFLAG_RD, NULL, 1, desc)
#endif
#if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL)
#include <sys/cdefs.h>
__BEGIN_DECLS
int sysctl(const int *, u_int, void *, size_t *, const void *, size_t);
int sysctlbyname(const char *, void *, size_t *, const void *, size_t);
int sysctlnametomib (const char *, int *, size_t *);
__END_DECLS
#endif
#endif