haiku/headers/private/kernel/sysctl.h

122 lines
4.0 KiB
C

/* sysctl.h
* should really be installed as sys/sysctl.h
*/
#ifndef _SYS_SYSCTL_H
#define _SYS_SYSCTL_H
/* This file contains definitions for the sysctl call.
* The call uses a heirachy of names for objects that can be
* examined or modified. The name is expressed as a sequence
* of integers and works in a similar manner to a filename, ie each
* component is dependant upon it's place in the heirachy.
*
* NB this file defines only the top level and kernel level (_KERN)
* identifiers with others being defined in files specific to
* the subsystem concerned.
*/
#define CTL_MAXNAME 12 /* This is the largest no. of components we support */
/* Each subsystem defines a list of variables for that subsystem.
* The name can either be:
* - a node that has further levels defined below it, or
* - a leaf in a particular type.
* Each level of sysctl has a set of name/type pairs used when manipulating
* that level.
*/
struct ctlname {
char *ctl_name; /* the subsystem name */
int ctl_type; /* type of name */
};
#define CTLTYPE_NODE 1 /* it's a node */
#define CTLTYPE_INT 2 /* integer */
#define CTLTYPE_STRING 3 /* string */
#define CTLTYPE_QUAD 4 /* 64-bit number */
#define CTLTYPE_STRUCT 5 /* it's a structure */
/* The top level identifiers we support */
#define CTL_UNSPEC 0 /* unused */
#define CTL_KERN 1 /* Kernel level */
#define CTL_VM 2 /* VM */
#define CTL_FS 3 /* Filesystem */
#define CTL_NET 4 /* networking (socket.h) */
#define CTL_HW 5 /* hardware */
#define CTL_NAMES { \
{ 0, 0 }, \
{ "kern", CTLTYPE_NODE }, \
{ "vm" , CTLTYPE_NODE }, \
{ "fs" , CTLTYPE_NODE }, \
{ "net" , CTLTYPE_NODE }, \
{ "hardware", CTL_TYPE_NODE }, \
}
/* Identifiers for use in the CTL_KERN subsystem */
#define KERN_OSTYPE 1 /* string: system type string */
#define KERN_OSRELEASE 2 /* string: system release */
#define KERN_OSVERSION 3 /* int: system revision */
#define KERN_HOSTNAME 4 /* string: hostname of system */
#define KERN_DOMAINNAME 5 /* string: (YP) domain name */
#define KERN_VERSION 6 /* string: system version string */
#define CTL_KERN_NAMES { \
{ 0, 0 }, \
{ "ostype" , CTLTYPE_STRING }, \
{ "osrelease" , CTLTYPE_STRING }, \
{ "osversion" , CTLTYPE_STRING }, \
{ "hostname" , CTLTYPE_STRING }, \
{ "domainname" , CTLTYPE_STRING }, \
{ "version" , CTLTYPE_STRING }, \
}
/*
* CTL_HW identifiers
*/
#define HW_MACHINE 1 /* string: machine class */
#define HW_MODEL 2 /* string: specific machine model */
#define HW_NCPU 3 /* int: number of cpus */
#define HW_BYTEORDER 4 /* int: machine byte order */
#define HW_PHYSMEM 5 /* int: total memory */
#define HW_USERMEM 6 /* int: non-kernel memory */
#define HW_PAGESIZE 7 /* int: software page size */
#define HW_DISKNAMES 8 /* strings: disk drive names */
#define HW_DISKSTATS 9 /* struct: diskstats[] */
#define HW_DISKCOUNT 10 /* int: number of disks */
#define HW_MAXID 11 /* number of valid hw ids */
#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_STRING }, \
{ "diskstats", CTLTYPE_STRUCT }, \
{ "diskcount", CTLTYPE_INT }, \
}
#ifdef _KERNEL_MODE
typedef int (sysctlfn)(int *, uint, void *, size_t *, void *, size_t);
int sys_sysctl(int *, uint, void *, size_t *, void *, size_t);
int hw_sysctl(int *, uint, void *, size_t *, void *, size_t);
int sysctl_int (void *, size_t *, void *, size_t, int *);
int sysctl_rdint (void *, size_t *, void *, int);
int sysctl_tstring(void *, size_t *, void *, size_t, char *, int);
int sysctl__string(void *, size_t *, void *, size_t, char *, int, int);
int sysctl_rdstring(void *, size_t *, void *, char *);
int user_sysctl(int *, uint, void *, size_t *, void *, size_t);
#endif
int sysctl(int *, uint, void *, size_t *, void *, size_t);
#endif /* _SYS_SYSCTL_H */