#ifndef _SYS_SYSCTL_H_
#define _SYS_SYSCTL_H_
#ifndef KERNEL
#include <sys/time.h>
#include <sys/ucred.h>
#endif
#include <sys/vm.h>
#include <sys/proc.h>
#include <sys/linker_set.h>
#define CTL_MAXNAME 12
struct ctlname {
char *ctl_name;
int ctl_type;
};
#define CTLTYPE 0xf
#define CTLTYPE_NODE 1
#define CTLTYPE_INT 2
#define CTLTYPE_STRING 3
#define CTLTYPE_QUAD 4
#define CTLTYPE_OPAQUE 5
#define CTLTYPE_STRUCT CTLTYPE_OPAQUE
#define CTLFLAG_RD 0x80000000
#define CTLFLAG_WR 0x40000000
#define CTLFLAG_RW (CTLFLAG_RD|CTLFLAG_WR)
#define CTLFLAG_NOLOCK 0x20000000
#define CTLFLAG_ANYBODY 0x10000000
#define CTLFLAG_SECURE 0x08000000
#define OID_AUTO (-1)
#ifdef KERNEL
#define SYSCTL_HANDLER_ARGS (struct sysctl_oid *oidp, void *arg1, int arg2, \
struct sysctl_req *req)
struct sysctl_req {
struct proc *p;
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);
};
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;
};
#define SYSCTL_IN(r, p, l) (r->newfunc)(r, p, l)
#define SYSCTL_OUT(r, p, l) (r->oldfunc)(r, p, l)
int sysctl_handle_int SYSCTL_HANDLER_ARGS;
int sysctl_handle_long SYSCTL_HANDLER_ARGS;
int sysctl_handle_intptr SYSCTL_HANDLER_ARGS;
int sysctl_handle_string SYSCTL_HANDLER_ARGS;
int sysctl_handle_opaque SYSCTL_HANDLER_ARGS;
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_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
struct sysctl_oid sysctl_##parent##_##name## = { \
&sysctl_##parent##_children, { 0 }, \
nbr, kind, a1, a2, #name, handler, fmt };
#define SYSCTL_NODE(parent, nbr, name, access, handler, descr) \
struct sysctl_oid_list sysctl_##parent##_##name##_children; \
SYSCTL_OID(parent, nbr, name, CTLTYPE_NODE|access, \
(void*)&sysctl_##parent##_##name##_children, 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_INT(parent, nbr, name, access, ptr, val, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|access, \
ptr, val, sysctl_handle_int, "I", descr)
#define SYSCTL_LONG(parent, nbr, name, access, ptr, descr) \
SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|access, \
ptr, 0, sysctl_handle_long, "L", 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_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_PROC(parent, nbr, name, access, ptr, arg, handler, fmt, descr) \
SYSCTL_OID(parent, nbr, name, access, \
ptr, arg, handler, fmt, descr)
#endif
#define CTL_UNSPEC 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_MAXID 9
#define CTL_NAMES { \
{ 0, 0 }, \
{ "kern", CTLTYPE_NODE }, \
{ "vm", CTLTYPE_NODE }, \
{ "vfs", CTLTYPE_NODE }, \
{ "net", CTLTYPE_NODE }, \
{ "debug", CTLTYPE_NODE }, \
{ "hw", CTLTYPE_NODE }, \
{ "machdep", CTLTYPE_NODE }, \
{ "user", CTLTYPE_NODE }, \
}
#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_PROF 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_DOMAINNAME KERN_NISDOMAINNAME
#define KERN_MAXPARTITIONS 23
#define KERN_KDEBUG 24
#define KERN_UPDATEINTERVAL 25
#define KERN_OSRELDATE 26
#define KERN_NTP_PLL 27
#define KERN_BOOTFILE 28
#define KERN_MAXFILESPERPROC 29
#define KERN_MAXPROCPERUID 30
#define KERN_DUMPDEV 31
#define KERN_IPC 32
#define KERN_DUMMY 33
#define KERN_PS_STRINGS 34
#define KERN_USRSTACK 35
#define KERN_LOGSIGEXIT 36
#define KERN_SYMFILE 37
#define KERN_PROCARGS 38
#define KERN_PCSAMPLES 39
#define KERN_MAXID 40
#define KERN_KDEFLAGS 1
#define KERN_KDDFLAGS 2
#define KERN_KDENABLE 3
#define KERN_KDSETBUF 4
#define KERN_KDGETBUF 5
#define KERN_KDSETUP 6
#define KERN_KDREMOVE 7
#define KERN_KDSETREG 8
#define KERN_KDGETREG 9
#define KERN_KDREADTR 10
#define KERN_KDPIDTR 11
#define KERN_KDTHRMAP 12
#define KERN_KDPIDEX 14
#define KERN_KDSETRTCDEC 15
#define KERN_PCDISABLE 1
#define KERN_PCSETBUF 2
#define KERN_PCGETBUF 3
#define KERN_PCSETUP 4
#define KERN_PCREMOVE 5
#define KERN_PCREADBUF 6
#define KERN_PCSETREG 7
#define KERN_PCCOMM 8
#define CTL_KERN_NAMES { \
{ 0, 0 }, \
{ "ostype", CTLTYPE_STRING }, \
{ "osrelease", CTLTYPE_STRING }, \
{ "osrevision", CTLTYPE_INT }, \
{ "version", CTLTYPE_STRING }, \
{ "maxvnodes", CTLTYPE_INT }, \
{ "maxproc", CTLTYPE_INT }, \
{ "maxfiles", CTLTYPE_INT }, \
{ "argmax", CTLTYPE_INT }, \
{ "securelevel", CTLTYPE_INT }, \
{ "hostname", CTLTYPE_STRING }, \
{ "hostid", CTLTYPE_INT }, \
{ "clockrate", CTLTYPE_STRUCT }, \
{ "vnode", CTLTYPE_STRUCT }, \
{ "proc", CTLTYPE_STRUCT }, \
{ "file", CTLTYPE_STRUCT }, \
{ "profiling", CTLTYPE_NODE }, \
{ "posix1version", CTLTYPE_INT }, \
{ "ngroups", CTLTYPE_INT }, \
{ "job_control", CTLTYPE_INT }, \
{ "saved_ids", CTLTYPE_INT }, \
{ "boottime", CTLTYPE_STRUCT }, \
{ "nisdomainname", CTLTYPE_STRING }, \
{ "maxpartitions", CTLTYPE_INT }, \
{ "kdebug", CTLTYPE_INT }, \
{ "update", CTLTYPE_INT }, \
{ "osreldate", CTLTYPE_INT }, \
{ "ntp_pll", CTLTYPE_NODE }, \
{ "bootfile", CTLTYPE_STRING }, \
{ "maxfilesperproc", CTLTYPE_INT }, \
{ "maxprocperuid", CTLTYPE_INT }, \
{ "dumpdev", CTLTYPE_STRUCT }, \
{ "ipc", CTLTYPE_NODE }, \
{ "dummy", CTLTYPE_INT }, \
{ "ps_strings", CTLTYPE_INT }, \
{ "usrstack", CTLTYPE_INT }, \
{ "logsigexit", CTLTYPE_INT }, \
{ "symfile",CTLTYPE_STRING },\
}
#define CTL_VFS_NAMES { \
{ "vfsconf", CTLTYPE_STRUCT }, \
}
#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
struct kinfo_proc {
struct extern_proc kp_proc;
struct eproc {
struct proc *e_paddr;
struct session *e_sess;
struct pcred e_pcred;
struct ucred e_ucred;
#ifdef sparc
struct {
segsz_t vm_rssize;
segsz_t vm_tsize;
segsz_t vm_dsize;
segsz_t vm_ssize;
} e_vm;
#else
struct vmspace e_vm;
#endif
pid_t e_ppid;
pid_t e_pgid;
short e_jobc;
dev_t e_tdev;
pid_t e_tpgid;
struct session *e_tsess;
#define WMESGLEN 7
char e_wmesg[WMESGLEN+1];
segsz_t e_xsize;
short e_xrssize;
short e_xccount;
short e_xswrss;
long e_flag;
#define EPROC_CTTY 0x01
#define EPROC_SLEADER 0x02
char e_login[MAXLOGNAME];
long e_spare[4];
} kp_eproc;
};
#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 VM_METER 1
#define VM_LOADAVG 2
#define VM_MAXID 3
#define VM_MACHFACTOR 4
#define CTL_VM_NAMES { \
{ 0, 0 }, \
{ "vmmeter", CTLTYPE_STRUCT }, \
{ "loadavg", CTLTYPE_STRUCT }, \
}
#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_EPOCH 10
#define HW_FLOATINGPT 11
#define HW_MACHINE_ARCH 12
#define HW_VECTORUNIT 13
#define HW_BUS_FREQ 14
#define HW_CPU_FREQ 15
#define HW_CACHELINE 16
#define HW_L1ICACHESIZE 17
#define HW_L1DCACHESIZE 18
#define HW_L2SETTINGS 19
#define HW_L2CACHESIZE 20
#define HW_L3SETTINGS 21
#define HW_L3CACHESIZE 22
#define HW_MAXID 23
#define CTL_HW_NAMES { \
{ 0, 0 }, \
{ "machine", CTLTYPE_STRING }, \
{ "model", CTLTYPE_STRING }, \
{ "ncpu", CTLTYPE_INT }, \
{ "byteorder", CTLTYPE_INT }, \
{ "physmem", CTLTYPE_INT }, \
{ "usermem", CTLTYPE_INT }, \
{ "pagesize", CTLTYPE_INT }, \
{ "disknames", CTLTYPE_STRUCT }, \
{ "diskstats", CTLTYPE_STRUCT }, \
{ "epoch", CTLTYPE_INT }, \
{ "floatingpoint", CTLTYPE_INT }, \
{ "machinearch", CTLTYPE_STRING }, \
{ "vectorunit", CTLTYPE_INT }, \
{ "busfrequency", CTLTYPE_INT }, \
{ "cpufrequency", CTLTYPE_INT }, \
{ "cachelinesize", CTLTYPE_INT }, \
{ "l1icachesize", CTLTYPE_INT }, \
{ "l1dcachesize", CTLTYPE_INT }, \
{ "l2settings", CTLTYPE_INT }, \
{ "l2cachesize", CTLTYPE_INT }, \
{ "l3settings", CTLTYPE_INT }, \
{ "l3cachesize", CTLTYPE_INT }, \
}
#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_USER_NAMES { \
{ 0, 0 }, \
{ "cs_path", CTLTYPE_STRING }, \
{ "bc_base_max", CTLTYPE_INT }, \
{ "bc_dim_max", CTLTYPE_INT }, \
{ "bc_scale_max", CTLTYPE_INT }, \
{ "bc_string_max", CTLTYPE_INT }, \
{ "coll_weights_max", CTLTYPE_INT }, \
{ "expr_nest_max", CTLTYPE_INT }, \
{ "line_max", CTLTYPE_INT }, \
{ "re_dup_max", CTLTYPE_INT }, \
{ "posix2_version", CTLTYPE_INT }, \
{ "posix2_c_bind", CTLTYPE_INT }, \
{ "posix2_c_dev", CTLTYPE_INT }, \
{ "posix2_char_term", CTLTYPE_INT }, \
{ "posix2_fort_dev", CTLTYPE_INT }, \
{ "posix2_fort_run", CTLTYPE_INT }, \
{ "posix2_localedef", CTLTYPE_INT }, \
{ "posix2_sw_dev", CTLTYPE_INT }, \
{ "posix2_upe", CTLTYPE_INT }, \
{ "stream_max", CTLTYPE_INT }, \
{ "tzname_max", CTLTYPE_INT }, \
}
#define CTL_DEBUG_NAME 0
#define CTL_DEBUG_VALUE 1
#define CTL_DEBUG_MAXID 20
#ifdef KERNEL
extern struct sysctl_oid_list sysctl__children;
SYSCTL_DECL(_kern);
SYSCTL_DECL(_sysctl);
SYSCTL_DECL(_vm);
SYSCTL_DECL(_vfs);
SYSCTL_DECL(_net);
SYSCTL_DECL(_debug);
SYSCTL_DECL(_hw);
SYSCTL_DECL(_machdep);
SYSCTL_DECL(_user);
#ifdef DEBUG
struct ctldebug {
char *debugname;
int *debugvar;
};
extern struct ctldebug debug0, debug1, debug2, debug3, debug4;
extern struct ctldebug debug5, debug6, debug7, debug8, debug9;
extern struct ctldebug debug10, debug11, debug12, debug13, debug14;
extern struct ctldebug debug15, debug16, debug17, debug18, debug19;
#endif
extern char machine[];
extern char osrelease[];
extern char ostype[];
struct linker_set;
void sysctl_register_set(struct linker_set *lsp);
void sysctl_unregister_set(struct linker_set *lsp);
int kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old,
size_t *oldlenp, void *new, size_t newlen,
size_t *retval);
int userland_sysctl(struct proc *p, int *name, u_int namelen, void *old,
size_t *oldlenp, int inkernel, void *new, size_t newlen,
size_t *retval);
typedef int (sysctlfn)
__P((int *, u_int, void *, size_t *, void *, size_t, struct proc *));
int sysctl_int __P((void *, size_t *, void *, size_t, int *));
int sysctl_rdint __P((void *, size_t *, void *, int));
int sysctl_string __P((void *, size_t *, void *, size_t, char *, int));
int sysctl_rdstring __P((void *, size_t *, void *, char *));
int sysctl_rdstruct __P((void *, size_t *, void *, void *, int));
void fill_eproc __P((struct proc *, struct eproc *));
#else
#include <sys/cdefs.h>
__BEGIN_DECLS
int sysctl __P((int *, u_int, void *, size_t *, void *, size_t));
int sysctlbyname __P((const char *, void *, size_t *, void *, size_t));
__END_DECLS
#endif
#endif