36 #ifndef _SYS_SYSCTL_H_ 37 #define _SYS_SYSCTL_H_ 40 #include <sys/queue.h> 52 #define CTL_MAXNAME 24 67 #define CTLTYPE_NODE 1 69 #define CTLTYPE_STRING 3 70 #define CTLTYPE_QUAD 4 71 #define CTLTYPE_OPAQUE 5 72 #define CTLTYPE_STRUCT CTLTYPE_OPAQUE 73 #define CTLTYPE_UINT 6 74 #define CTLTYPE_LONG 7 75 #define CTLTYPE_ULONG 8 77 #define CTLFLAG_RD 0x80000000 78 #define CTLFLAG_WR 0x40000000 79 #define CTLFLAG_RW (CTLFLAG_RD|CTLFLAG_WR) 80 #define CTLFLAG_NOLOCK 0x20000000 81 #define CTLFLAG_ANYBODY 0x10000000 82 #define CTLFLAG_SECURE 0x08000000 83 #define CTLFLAG_PRISON 0x04000000 84 #define CTLFLAG_DYN 0x02000000 85 #define CTLFLAG_SKIP 0x01000000 86 #define CTLMASK_SECURE 0x00F00000 87 #define CTLFLAG_TUN 0x00080000 88 #define CTLFLAG_RDTUN (CTLFLAG_RD|CTLFLAG_TUN) 95 #define CTLSHIFT_SECURE 20 96 #define CTLFLAG_SECURE1 (CTLFLAG_SECURE | (0 << CTLSHIFT_SECURE)) 97 #define CTLFLAG_SECURE2 (CTLFLAG_SECURE | (1 << CTLSHIFT_SECURE)) 98 #define CTLFLAG_SECURE3 (CTLFLAG_SECURE | (2 << CTLSHIFT_SECURE)) 107 #define OID_AUTO (-1) 113 #define CTL_AUTO_START 0x100 116 #define SYSCTL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, int arg2, \ 117 struct sysctl_req *req 120 #define REQ_UNLOCKED 0 134 int (*oldfunc)(
struct sysctl_req *,
const void *, size_t);
138 int (*newfunc)(
struct sysctl_req *,
void *, size_t);
142 SLIST_HEAD(sysctl_oid_list, sysctl_oid);
149 struct sysctl_oid_list *oid_parent;
150 SLIST_ENTRY(sysctl_oid) oid_link;
155 const char *oid_name;
156 int (*oid_handler)(SYSCTL_HANDLER_ARGS);
162 #define SYSCTL_IN(r, p, l) (r->newfunc)(r, p, l) 163 #define SYSCTL_OUT(r, p, l) (r->oldfunc)(r, p, l) 165 int sysctl_handle_int(SYSCTL_HANDLER_ARGS);
166 int sysctl_handle_long(SYSCTL_HANDLER_ARGS);
167 int sysctl_handle_intptr(SYSCTL_HANDLER_ARGS);
168 int sysctl_handle_string(SYSCTL_HANDLER_ARGS);
169 int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS);
174 void sysctl_register_oid(
struct sysctl_oid *oidp);
175 void sysctl_unregister_oid(
struct sysctl_oid *oidp);
178 #define SYSCTL_DECL(name) \ 179 extern struct sysctl_oid_list sysctl_##name##_children 182 #define SYSCTL_CHILDREN(oid_ptr) (struct sysctl_oid_list *) \ 184 #define SYSCTL_CHILDREN_SET(oid_ptr, val) \ 185 (oid_ptr)->oid_arg1 = (val); 186 #define SYSCTL_STATIC_CHILDREN(oid_name) \ 187 (&sysctl_##oid_name##_children) 192 struct sysctl_ctx_entry {
193 struct sysctl_oid *
entry;
194 TAILQ_ENTRY(sysctl_ctx_entry)
link;
197 TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);
199 #define SYSCTL_NODE_CHILDREN(parent, name) \ 200 sysctl_##parent##_##name##_children 203 #define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr) \ 204 static struct sysctl_oid sysctl__##parent##_##name = { \ 205 &sysctl_##parent##_children, { 0 }, \ 206 nbr, kind, a1, a2, #name, handler, fmt, 0, descr }; \ 207 DATA_SET(sysctl_set, sysctl__##parent##_##name) 209 #define SYSCTL_ADD_OID(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr) \ 210 sysctl_add_oid(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr) 213 #define SYSCTL_NODE(parent, nbr, name, access, handler, descr) \ 214 struct sysctl_oid_list SYSCTL_NODE_CHILDREN(parent, name); \ 215 SYSCTL_OID(parent, nbr, name, CTLTYPE_NODE|(access), \ 216 (void*)&SYSCTL_NODE_CHILDREN(parent, name), 0, handler, \ 219 #define SYSCTL_ADD_NODE(ctx, parent, nbr, name, access, handler, descr) \ 220 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_NODE|(access), \ 221 0, 0, handler, "N", descr) 224 #define SYSCTL_STRING(parent, nbr, name, access, arg, len, descr) \ 225 SYSCTL_OID(parent, nbr, name, CTLTYPE_STRING|(access), \ 226 arg, len, sysctl_handle_string, "A", descr) 228 #define SYSCTL_ADD_STRING(ctx, parent, nbr, name, access, arg, len, descr) \ 229 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_STRING|(access), \ 230 arg, len, sysctl_handle_string, "A", descr) 233 #define SYSCTL_INT(parent, nbr, name, access, ptr, val, descr) \ 234 SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|(access), \ 235 ptr, val, sysctl_handle_int, "I", descr) 237 #define SYSCTL_ADD_INT(ctx, parent, nbr, name, access, ptr, val, descr) \ 238 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_INT|(access), \ 239 ptr, val, sysctl_handle_int, "I", descr) 242 #define SYSCTL_UINT(parent, nbr, name, access, ptr, val, descr) \ 243 SYSCTL_OID(parent, nbr, name, CTLTYPE_UINT|(access), \ 244 ptr, val, sysctl_handle_int, "IU", descr) 246 #define SYSCTL_ADD_UINT(ctx, parent, nbr, name, access, ptr, val, descr) \ 247 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_UINT|(access), \ 248 ptr, val, sysctl_handle_int, "IU", descr) 251 #define SYSCTL_LONG(parent, nbr, name, access, ptr, val, descr) \ 252 SYSCTL_OID(parent, nbr, name, CTLTYPE_LONG|(access), \ 253 ptr, val, sysctl_handle_long, "L", descr) 255 #define SYSCTL_ADD_LONG(ctx, parent, nbr, name, access, ptr, descr) \ 256 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_LONG|(access), \ 257 ptr, 0, sysctl_handle_long, "L", descr) 260 #define SYSCTL_ULONG(parent, nbr, name, access, ptr, val, descr) \ 261 SYSCTL_OID(parent, nbr, name, CTLTYPE_ULONG|(access), \ 262 ptr, val, sysctl_handle_long, "LU", descr) 264 #define SYSCTL_ADD_ULONG(ctx, parent, nbr, name, access, ptr, descr) \ 265 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_ULONG|(access), \ 266 ptr, 0, sysctl_handle_long, "LU", descr) 269 #define SYSCTL_OPAQUE(parent, nbr, name, access, ptr, len, fmt, descr) \ 270 SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|(access), \ 271 ptr, len, sysctl_handle_opaque, fmt, descr) 273 #define SYSCTL_ADD_OPAQUE(ctx, parent, nbr, name, access, ptr, len, fmt, descr)\ 274 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_OPAQUE|(access), \ 275 ptr, len, sysctl_handle_opaque, fmt, descr) 278 #define SYSCTL_STRUCT(parent, nbr, name, access, ptr, type, descr) \ 279 SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|(access), \ 280 ptr, sizeof(struct type), sysctl_handle_opaque, \ 283 #define SYSCTL_ADD_STRUCT(ctx, parent, nbr, name, access, ptr, type, descr) \ 284 sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_OPAQUE|(access), \ 285 ptr, sizeof(struct type), sysctl_handle_opaque, "S," #type, descr) 288 #define SYSCTL_PROC(parent, nbr, name, access, ptr, arg, handler, fmt, descr) \ 289 SYSCTL_OID(parent, nbr, name, (access), \ 290 ptr, arg, handler, fmt, descr) 292 #define SYSCTL_ADD_PROC(ctx, parent, nbr, name, access, ptr, arg, handler, fmt, descr) \ 293 sysctl_add_oid(ctx, parent, nbr, name, (access), \ 294 ptr, arg, handler, fmt, descr) 308 #define CTL_MACHDEP 7 310 #define CTL_P1003_1B 9 313 #define CTL_NAMES { \ 315 { "kern", CTLTYPE_NODE }, \ 316 { "vm", CTLTYPE_NODE }, \ 317 { "vfs", CTLTYPE_NODE }, \ 318 { "net", CTLTYPE_NODE }, \ 319 { "debug", CTLTYPE_NODE }, \ 320 { "hw", CTLTYPE_NODE }, \ 321 { "machdep", CTLTYPE_NODE }, \ 322 { "user", CTLTYPE_NODE }, \ 323 { "p1003_1b", CTLTYPE_NODE }, \ 329 #define KERN_OSTYPE 1 330 #define KERN_OSRELEASE 2 332 #define KERN_VERSION 4 333 #define KERN_MAXVNODES 5 334 #define KERN_MAXPROC 6 335 #define KERN_MAXFILES 7 336 #define KERN_ARGMAX 8 337 #define KERN_SECURELVL 9 338 #define KERN_HOSTNAME 10 339 #define KERN_HOSTID 11 340 #define KERN_CLOCKRATE 12 341 #define KERN_VNODE 13 345 #define KERN_POSIX1 17 346 #define KERN_NGROUPS 18 347 #define KERN_JOB_CONTROL 19 348 #define KERN_SAVED_IDS 20 349 #define KERN_BOOTTIME 21 350 #define KERN_NISDOMAINNAME 22 351 #define KERN_UPDATEINTERVAL 23 352 #define KERN_OSRELDATE 24 353 #define KERN_NTP_PLL 25 354 #define KERN_BOOTFILE 26 355 #define KERN_MAXFILESPERPROC 27 356 #define KERN_MAXPROCPERUID 28 357 #define KERN_DUMPDEV 29 359 #define KERN_DUMMY 31 360 #define KERN_PS_STRINGS 32 361 #define KERN_USRSTACK 33 362 #define KERN_LOGSIGEXIT 34 363 #define KERN_IOV_MAX 35 364 #define KERN_MAXID 36 366 #define CTL_KERN_NAMES { \ 368 { "ostype", CTLTYPE_STRING }, \ 369 { "osrelease", CTLTYPE_STRING }, \ 370 { "osrevision", CTLTYPE_INT }, \ 371 { "version", CTLTYPE_STRING }, \ 372 { "maxvnodes", CTLTYPE_INT }, \ 373 { "maxproc", CTLTYPE_INT }, \ 374 { "maxfiles", CTLTYPE_INT }, \ 375 { "argmax", CTLTYPE_INT }, \ 376 { "securelevel", CTLTYPE_INT }, \ 377 { "hostname", CTLTYPE_STRING }, \ 378 { "hostid", CTLTYPE_UINT }, \ 379 { "clockrate", CTLTYPE_STRUCT }, \ 380 { "vnode", CTLTYPE_STRUCT }, \ 381 { "proc", CTLTYPE_STRUCT }, \ 382 { "file", CTLTYPE_STRUCT }, \ 383 { "profiling", CTLTYPE_NODE }, \ 384 { "posix1version", CTLTYPE_INT }, \ 385 { "ngroups", CTLTYPE_INT }, \ 386 { "job_control", CTLTYPE_INT }, \ 387 { "saved_ids", CTLTYPE_INT }, \ 388 { "boottime", CTLTYPE_STRUCT }, \ 389 { "nisdomainname", CTLTYPE_STRING }, \ 390 { "update", CTLTYPE_INT }, \ 391 { "osreldate", CTLTYPE_INT }, \ 392 { "ntp_pll", CTLTYPE_NODE }, \ 393 { "bootfile", CTLTYPE_STRING }, \ 394 { "maxfilesperproc", CTLTYPE_INT }, \ 395 { "maxprocperuid", CTLTYPE_INT }, \ 396 { "ipc", CTLTYPE_NODE }, \ 397 { "dummy", CTLTYPE_INT }, \ 398 { "ps_strings", CTLTYPE_INT }, \ 399 { "usrstack", CTLTYPE_INT }, \ 400 { "logsigexit", CTLTYPE_INT }, \ 401 { "iov_max", CTLTYPE_INT }, \ 407 #define CTL_VFS_NAMES { \ 408 { "vfsconf", CTLTYPE_STRUCT }, \ 414 #define KERN_PROC_ALL 0 415 #define KERN_PROC_PID 1 416 #define KERN_PROC_PGRP 2 417 #define KERN_PROC_SESSION 3 418 #define KERN_PROC_TTY 4 419 #define KERN_PROC_UID 5 420 #define KERN_PROC_RUID 6 421 #define KERN_PROC_ARGS 7 422 #define KERN_PROC_PROC 8 423 #define KERN_PROC_SV_NAME 9 424 #define KERN_PROC_RGID 10 425 #define KERN_PROC_GID 11 426 #define KERN_PROC_INC_THREAD 0x10 434 #define KIPC_MAXSOCKBUF 1 435 #define KIPC_SOCKBUF_WASTE 2 436 #define KIPC_SOMAXCONN 3 437 #define KIPC_MAX_LINKHDR 4 438 #define KIPC_MAX_PROTOHDR 5 439 #define KIPC_MAX_HDR 6 440 #define KIPC_MAX_DATALEN 7 448 #define HW_BYTEORDER 4 451 #define HW_PAGESIZE 7 452 #define HW_DISKNAMES 8 453 #define HW_DISKSTATS 9 454 #define HW_FLOATINGPT 10 455 #define HW_MACHINE_ARCH 11 458 #define CTL_HW_NAMES { \ 460 { "machine", CTLTYPE_STRING }, \ 461 { "model", CTLTYPE_STRING }, \ 462 { "ncpu", CTLTYPE_INT }, \ 463 { "byteorder", CTLTYPE_INT }, \ 464 { "physmem", CTLTYPE_ULONG }, \ 465 { "usermem", CTLTYPE_ULONG }, \ 466 { "pagesize", CTLTYPE_INT }, \ 467 { "disknames", CTLTYPE_STRUCT }, \ 468 { "diskstats", CTLTYPE_STRUCT }, \ 469 { "floatingpoint", CTLTYPE_INT }, \ 475 #define USER_CS_PATH 1 476 #define USER_BC_BASE_MAX 2 477 #define USER_BC_DIM_MAX 3 478 #define USER_BC_SCALE_MAX 4 479 #define USER_BC_STRING_MAX 5 480 #define USER_COLL_WEIGHTS_MAX 6 481 #define USER_EXPR_NEST_MAX 7 482 #define USER_LINE_MAX 8 483 #define USER_RE_DUP_MAX 9 484 #define USER_POSIX2_VERSION 10 485 #define USER_POSIX2_C_BIND 11 486 #define USER_POSIX2_C_DEV 12 487 #define USER_POSIX2_CHAR_TERM 13 488 #define USER_POSIX2_FORT_DEV 14 489 #define USER_POSIX2_FORT_RUN 15 490 #define USER_POSIX2_LOCALEDEF 16 491 #define USER_POSIX2_SW_DEV 17 492 #define USER_POSIX2_UPE 18 493 #define USER_STREAM_MAX 19 494 #define USER_TZNAME_MAX 20 495 #define USER_MAXID 21 497 #define CTL_USER_NAMES { \ 499 { "cs_path", CTLTYPE_STRING }, \ 500 { "bc_base_max", CTLTYPE_INT }, \ 501 { "bc_dim_max", CTLTYPE_INT }, \ 502 { "bc_scale_max", CTLTYPE_INT }, \ 503 { "bc_string_max", CTLTYPE_INT }, \ 504 { "coll_weights_max", CTLTYPE_INT }, \ 505 { "expr_nest_max", CTLTYPE_INT }, \ 506 { "line_max", CTLTYPE_INT }, \ 507 { "re_dup_max", CTLTYPE_INT }, \ 508 { "posix2_version", CTLTYPE_INT }, \ 509 { "posix2_c_bind", CTLTYPE_INT }, \ 510 { "posix2_c_dev", CTLTYPE_INT }, \ 511 { "posix2_char_term", CTLTYPE_INT }, \ 512 { "posix2_fort_dev", CTLTYPE_INT }, \ 513 { "posix2_fort_run", CTLTYPE_INT }, \ 514 { "posix2_localedef", CTLTYPE_INT }, \ 515 { "posix2_sw_dev", CTLTYPE_INT }, \ 516 { "posix2_upe", CTLTYPE_INT }, \ 517 { "stream_max", CTLTYPE_INT }, \ 518 { "tzname_max", CTLTYPE_INT }, \ 521 #define CTL_P1003_1B_ASYNCHRONOUS_IO 1 522 #define CTL_P1003_1B_MAPPED_FILES 2 523 #define CTL_P1003_1B_MEMLOCK 3 524 #define CTL_P1003_1B_MEMLOCK_RANGE 4 525 #define CTL_P1003_1B_MEMORY_PROTECTION 5 526 #define CTL_P1003_1B_MESSAGE_PASSING 6 527 #define CTL_P1003_1B_PRIORITIZED_IO 7 528 #define CTL_P1003_1B_PRIORITY_SCHEDULING 8 529 #define CTL_P1003_1B_REALTIME_SIGNALS 9 530 #define CTL_P1003_1B_SEMAPHORES 10 531 #define CTL_P1003_1B_FSYNC 11 532 #define CTL_P1003_1B_SHARED_MEMORY_OBJECTS 12 533 #define CTL_P1003_1B_SYNCHRONIZED_IO 13 534 #define CTL_P1003_1B_TIMERS 14 535 #define CTL_P1003_1B_AIO_LISTIO_MAX 15 536 #define CTL_P1003_1B_AIO_MAX 16 537 #define CTL_P1003_1B_AIO_PRIO_DELTA_MAX 17 538 #define CTL_P1003_1B_DELAYTIMER_MAX 18 539 #define CTL_P1003_1B_MQ_OPEN_MAX 19 540 #define CTL_P1003_1B_PAGESIZE 20 541 #define CTL_P1003_1B_RTSIG_MAX 21 542 #define CTL_P1003_1B_SEM_NSEMS_MAX 22 543 #define CTL_P1003_1B_SEM_VALUE_MAX 23 544 #define CTL_P1003_1B_SIGQUEUE_MAX 24 545 #define CTL_P1003_1B_TIMER_MAX 25 547 #define CTL_P1003_1B_MAXID 26 549 #define CTL_P1003_1B_NAMES { \ 551 { "asynchronous_io", CTLTYPE_INT }, \ 552 { "mapped_files", CTLTYPE_INT }, \ 553 { "memlock", CTLTYPE_INT }, \ 554 { "memlock_range", CTLTYPE_INT }, \ 555 { "memory_protection", CTLTYPE_INT }, \ 556 { "message_passing", CTLTYPE_INT }, \ 557 { "prioritized_io", CTLTYPE_INT }, \ 558 { "priority_scheduling", CTLTYPE_INT }, \ 559 { "realtime_signals", CTLTYPE_INT }, \ 560 { "semaphores", CTLTYPE_INT }, \ 561 { "fsync", CTLTYPE_INT }, \ 562 { "shared_memory_objects", CTLTYPE_INT }, \ 563 { "synchronized_io", CTLTYPE_INT }, \ 564 { "timers", CTLTYPE_INT }, \ 565 { "aio_listio_max", CTLTYPE_INT }, \ 566 { "aio_max", CTLTYPE_INT }, \ 567 { "aio_prio_delta_max", CTLTYPE_INT }, \ 568 { "delaytimer_max", CTLTYPE_INT }, \ 569 { "mq_open_max", CTLTYPE_INT }, \ 570 { "pagesize", CTLTYPE_INT }, \ 571 { "rtsig_max", CTLTYPE_INT }, \ 572 { "nsems_max", CTLTYPE_INT }, \ 573 { "sem_value_max", CTLTYPE_INT }, \ 574 { "sigqueue_max", CTLTYPE_INT }, \ 575 { "timer_max", CTLTYPE_INT }, \ 583 extern struct sysctl_oid_list sysctl__children;
585 SYSCTL_DECL(_sysctl);
590 SYSCTL_DECL(_debug_sizeof);
592 SYSCTL_DECL(_machdep);
594 SYSCTL_DECL(_compat);
596 extern char machine[];
597 extern char osrelease[];
598 extern char ostype[];
599 extern char kern_ident[];
602 struct sysctl_oid *sysctl_add_oid(
struct sysctl_ctx_list *clist,
603 struct sysctl_oid_list *parent,
int nbr,
const char *name,
604 int kind,
void *arg1,
int arg2,
605 int (*handler) (SYSCTL_HANDLER_ARGS),
606 const char *fmt,
const char *descr);
607 int sysctl_move_oid(
struct sysctl_oid *oidp,
608 struct sysctl_oid_list *parent);
609 int sysctl_remove_oid(
struct sysctl_oid *oidp,
int del,
int recurse);
610 int sysctl_ctx_init(
struct sysctl_ctx_list *clist);
611 int sysctl_ctx_free(
struct sysctl_ctx_list *clist);
612 struct sysctl_ctx_entry *sysctl_ctx_entry_add(
struct sysctl_ctx_list *clist,
613 struct sysctl_oid *oidp);
614 struct sysctl_ctx_entry *sysctl_ctx_entry_find(
struct sysctl_ctx_list *clist,
615 struct sysctl_oid *oidp);
616 int sysctl_ctx_entry_del(
struct sysctl_ctx_list *clist,
617 struct sysctl_oid *oidp);
619 int kernel_sysctl(
struct thread *td,
int *name, u_int namelen,
void *old,
620 size_t *oldlenp,
void *
new,
size_t newlen,
622 int kernel_sysctlbyname(
struct thread *td,
char *name,
623 void *old,
size_t *oldlenp,
void *
new,
size_t newlen,
625 int userland_sysctl(
struct thread *td,
int *name, u_int namelen,
void *old,
626 size_t *oldlenp,
int inkernel,
void *
new,
size_t newlen,
628 int sysctl_find_oid(
int *name, u_int namelen,
struct sysctl_oid **noid,
629 int *nindx,
struct sysctl_req *req);
630 int sysctl_wire_old_buffer(
struct sysctl_req *req,
size_t len);
633 #include <sys/cdefs.h> 636 int sysctl(
int *, u_int,
void *,
size_t *,
void *,
size_t);
637 int sysctlbyname(
const char *,
void *,
size_t *,
void *,
size_t);
638 int sysctlnametomib(
const char *,
int *,
size_t *);
int link(const char *path1, const char *path2)
link() - POSIX 1003.1b - 5.3.4 - Create a new link
Definition: link.c:28
Definition: nfs_prot.h:234