From: Sascha Wildner Date: Sat, 6 Oct 2018 07:29:28 +0000 (+0200) Subject: kernel: Add further support for fixed-width integer type sysctls. X-Git-Tag: v5.5.0~111 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/347aefc6a85af5bf5b7a1a6918f706878a8232ef?ds=sidebyside kernel: Add further support for fixed-width integer type sysctls. U32 support was added in c48b2bac286ed1aaa6b974adfbc844e82bc65f38. QUAD and UQUAD are now aliases of S64 and U64. Taken-from: FreeBSD --- diff --git a/sbin/sysctl/sysctl.c b/sbin/sysctl/sysctl.c index 0bb9e17d96..567b293477 100644 --- a/sbin/sysctl/sysctl.c +++ b/sbin/sysctl/sysctl.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -157,14 +158,19 @@ parse(const char *string) size_t len; int i, j; void *newval = NULL; + int8_t i8val; + uint8_t u8val; + int16_t i16val; + uint16_t u16val; + int32_t i32val; uint32_t u32val; + int64_t i64val; + uint64_t u64val; int intval; unsigned int uintval; long longval; unsigned long ulongval; size_t newsize = 0; - quad_t quadval; - u_quad_t uquadval; int mib[CTL_MAXNAME]; char *cp, fmt[BUFSIZ]; const char *name; @@ -249,21 +255,46 @@ parse(const char *string) break; case CTLTYPE_STRING: break; - case CTLTYPE_QUAD: - quadval = strtoq(newval, NULL, 0); - newval = &quadval; - newsize = sizeof(quadval); + case CTLTYPE_S8: + i8val = (int8_t)strtol(newval, NULL, 0); + newval = &i8val; + newsize = sizeof(i8val); break; - case CTLTYPE_UQUAD: - uquadval = strtouq(newval, NULL, 0); - newval = &uquadval; - newsize = sizeof(uquadval); + case CTLTYPE_S16: + i16val = (int16_t)strtol(newval, NULL, 0); + newval = &i16val; + newsize = sizeof(i16val); + break; + case CTLTYPE_S32: + i32val = (int32_t)strtol(newval, NULL, 0); + newval = &i32val; + newsize = sizeof(i32val); + break; + case CTLTYPE_S64: + i64val = strtoimax(newval, NULL, 0); + newval = &i64val; + newsize = sizeof(i64val); + break; + case CTLTYPE_U8: + u8val = (uint8_t)strtoul(newval, NULL, 0); + newval = &u8val; + newsize = sizeof(u8val); + break; + case CTLTYPE_U16: + u16val = (uint16_t)strtoul(newval, NULL, 0); + newval = &u16val; + newsize = sizeof(u16val); break; case CTLTYPE_U32: u32val = (uint32_t)strtoul(newval, NULL, 0); newval = &u32val; newsize = sizeof(u32val); break; + case CTLTYPE_U64: + u64val = strtoumax(newval, NULL, 0); + newval = &u64val; + newsize = sizeof(u64val); + break; case CTLTYPE_OPAQUE: if (strcmp(fmt, "T,dev_t") == 0 || strcmp(fmt, "T,udev_t") == 0 diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile index 0514cf4849..63a410a6af 100644 --- a/share/man/man9/Makefile +++ b/share/man/man9/Makefile @@ -914,9 +914,16 @@ MLINKS+=sysctl.9 SYSCTL_DECL.9 \ sysctl.9 SYSCTL_OPAQUE.9 \ sysctl.9 SYSCTL_PROC.9 \ sysctl.9 SYSCTL_QUAD.9 \ + sysctl.9 SYSCTL_S8.9 \ + sysctl.9 SYSCTL_S16.9 \ + sysctl.9 SYSCTL_S32.9 \ + sysctl.9 SYSCTL_S64.9 \ sysctl.9 SYSCTL_STRING.9 \ sysctl.9 SYSCTL_STRUCT.9 \ + sysctl.9 SYSCTL_U8.9 \ + sysctl.9 SYSCTL_U16.9 \ sysctl.9 SYSCTL_U32.9 \ + sysctl.9 SYSCTL_U64.9 \ sysctl.9 SYSCTL_UINT.9 \ sysctl.9 SYSCTL_ULONG.9 \ sysctl.9 SYSCTL_UQUAD.9 @@ -927,9 +934,16 @@ MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_INT.9 \ sysctl_add_oid.9 SYSCTL_ADD_OPAQUE.9 \ sysctl_add_oid.9 SYSCTL_ADD_PROC.9 \ sysctl_add_oid.9 SYSCTL_ADD_QUAD.9 \ + sysctl_add_oid.9 SYSCTL_ADD_S8.9 \ + sysctl_add_oid.9 SYSCTL_ADD_S16.9 \ + sysctl_add_oid.9 SYSCTL_ADD_S32.9 \ + sysctl_add_oid.9 SYSCTL_ADD_S64.9 \ sysctl_add_oid.9 SYSCTL_ADD_STRING.9 \ sysctl_add_oid.9 SYSCTL_ADD_STRUCT.9 \ + sysctl_add_oid.9 SYSCTL_ADD_U8.9 \ + sysctl_add_oid.9 SYSCTL_ADD_U16.9 \ sysctl_add_oid.9 SYSCTL_ADD_U32.9 \ + sysctl_add_oid.9 SYSCTL_ADD_U64.9 \ sysctl_add_oid.9 SYSCTL_ADD_UINT.9 \ sysctl_add_oid.9 SYSCTL_ADD_ULONG.9 \ sysctl_add_oid.9 SYSCTL_ADD_UQUAD.9 \ diff --git a/share/man/man9/sysctl.9 b/share/man/man9/sysctl.9 index 6916f01340..1157d404b8 100644 --- a/share/man/man9/sysctl.9 +++ b/share/man/man9/sysctl.9 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD: src/share/man/man9/sysctl.9,v 1.3 2006/04/28 23:21:36 keramida Exp $ .\" -.Dd July 20, 2018 +.Dd October 6, 2018 .Dt SYSCTL 9 .Os .Sh NAME @@ -36,9 +36,16 @@ .Nm SYSCTL_NODE , .Nm SYSCTL_OPAQUE , .Nm SYSCTL_PROC , +.Nm SYSCTL_S8 , +.Nm SYSCTL_S16 , +.Nm SYSCTL_S32 , +.Nm SYSCTL_S64 , .Nm SYSCTL_STRING , .Nm SYSCTL_STRUCT , +.Nm SYSCTL_U8 , +.Nm SYSCTL_U16 , .Nm SYSCTL_U32 , +.Nm SYSCTL_U64 , .Nm SYSCTL_UINT , .Nm SYSCTL_ULONG , .Nm SYSCTL_UQUAD @@ -67,15 +74,6 @@ .Fa "val" .Fa "descr" .Fc -.Fo SYSCTL_QUAD -.Fa "parent" -.Fa "nbr" -.Fa "name" -.Fa "access" -.Fa "ptr" -.Fa "val" -.Fa "descr" -.Fc .Fo SYSCTL_NODE .Fa "parent" .Fa "nbr" @@ -105,6 +103,51 @@ .Fa "fmt" .Fa "descr" .Fc +.Fo SYSCTL_QUAD +.Fa "parent" +.Fa "nbr" +.Fa "name" +.Fa "access" +.Fa "ptr" +.Fa "val" +.Fa "descr" +.Fc +.Fo SYSCTL_S8 +.Fa "parent" +.Fa "number" +.Fa "name" +.Fa "access" +.Fa "ptr" +.Fa "val" +.Fa "descr" +.Fc +.Fo SYSCTL_S16 +.Fa "parent" +.Fa "number" +.Fa "name" +.Fa "access" +.Fa "ptr" +.Fa "val" +.Fa "descr" +.Fc +.Fo SYSCTL_S32 +.Fa "parent" +.Fa "number" +.Fa "name" +.Fa "access" +.Fa "ptr" +.Fa "val" +.Fa "descr" +.Fc +.Fo SYSCTL_S64 +.Fa "parent" +.Fa "number" +.Fa "name" +.Fa "access" +.Fa "ptr" +.Fa "val" +.Fa "descr" +.Fc .Fo SYSCTL_STRING .Fa "parent" .Fa "nbr" @@ -123,6 +166,24 @@ .Fa "type" .Fa "descr" .Fc +.Fo SYSCTL_U8 +.Fa "parent" +.Fa "number" +.Fa "name" +.Fa "access" +.Fa "ptr" +.Fa "val" +.Fa "descr" +.Fc +.Fo SYSCTL_U16 +.Fa "parent" +.Fa "number" +.Fa "name" +.Fa "access" +.Fa "ptr" +.Fa "val" +.Fa "descr" +.Fc .Fo SYSCTL_U32 .Fa "parent" .Fa "number" @@ -132,6 +193,15 @@ .Fa "val" .Fa "descr" .Fc +.Fo SYSCTL_U64 +.Fa "parent" +.Fa "number" +.Fa "name" +.Fa "access" +.Fa "ptr" +.Fa "val" +.Fa "descr" +.Fc .Fo SYSCTL_UINT .Fa "parent" .Fa "nbr" @@ -181,9 +251,16 @@ New nodes are declared using one of .Nm SYSCTL_NODE , .Nm SYSCTL_OPAQUE , .Nm SYSCTL_PROC , +.Nm SYSCTL_S8 , +.Nm SYSCTL_S16 , +.Nm SYSCTL_S32 , +.Nm SYSCTL_S64 , .Nm SYSCTL_STRING , .Nm SYSCTL_STRUCT , +.Nm SYSCTL_U8 , +.Nm SYSCTL_U16 , .Nm SYSCTL_U32 , +.Nm SYSCTL_U64 , .Nm SYSCTL_UINT , .Nm SYSCTL_ULONG , and @@ -205,6 +282,14 @@ including a type in the access mask is required: This is a node intended to be a parent for other nodes. .It Dv CTLTYPE_INT This is a signed integer. +.It Dv CTLTYPE_S8 +This is an 8-bit signed integer. +.It Dv CTLTYPE_S16 +This is a 16-bit signed integer. +.It Dv CTLTYPE_S32 +This is a 32-bit signed integer. +.It Dv CTLTYPE_S64 +This is a 64-bit signed integer. .It Dv CTLTYPE_STRING This is a nul-terminated string stored in a character array. .It Dv CTLTYPE_QUAD @@ -214,8 +299,14 @@ This is an opaque data structure. .It Dv CTLTYPE_STRUCT Alias for .Dv CTLTYPE_OPAQUE . +.It Dv CTLTYPE_U8 +This is an 8-bit unsigned integer. +.It Dv CTLTYPE_U16 +This is a 16-bit unsigned integer. .It Dv CTLTYPE_U32 This is a 32-bit unsigned integer. +.It Dv CTLTYPE_U64 +This is a 64-bit unsigned integer. .It Dv CTLTYPE_UINT This is an unsigned integer. .It Dv CTLTYPE_LONG diff --git a/share/man/man9/sysctl_add_oid.9 b/share/man/man9/sysctl_add_oid.9 index 2b85a4d83a..46ca8f3cb1 100644 --- a/share/man/man9/sysctl_add_oid.9 +++ b/share/man/man9/sysctl_add_oid.9 @@ -27,7 +27,7 @@ .\" .\" $FreeBSD: src/share/man/man9/sysctl_add_oid.9,v 1.21 2006/04/28 10:45:27 rwatson Exp $ .\" -.Dd July 21, 2018 +.Dd October 6, 2018 .Dt SYSCTL_ADD_OID 9 .Os .Sh NAME @@ -102,6 +102,50 @@ .Fa "const char *descr" .Fc .Ft struct sysctl_oid * +.Fo SYSCTL_ADD_S8 +.Fa "struct sysctl_ctx_list *ctx" +.Fa "struct sysctl_oid_list *parent" +.Fa "int number" +.Fa "const char *name" +.Fa "int access" +.Fa "int8_t *arg" +.Fa "int len" +.Fa "const char *descr" +.Fc +.Ft struct sysctl_oid * +.Fo SYSCTL_ADD_S16 +.Fa "struct sysctl_ctx_list *ctx" +.Fa "struct sysctl_oid_list *parent" +.Fa "int number" +.Fa "const char *name" +.Fa "int access" +.Fa "int16_t *arg" +.Fa "int len" +.Fa "const char *descr" +.Fc +.Ft struct sysctl_oid * +.Fo SYSCTL_ADD_S32 +.Fa "struct sysctl_ctx_list *ctx" +.Fa "struct sysctl_oid_list *parent" +.Fa "int number" +.Fa "const char *name" +.Fa "int access" +.Fa "int32_t *arg" +.Fa "int len" +.Fa "const char *descr" +.Fc +.Ft struct sysctl_oid * +.Fo SYSCTL_ADD_S64 +.Fa "struct sysctl_ctx_list *ctx" +.Fa "struct sysctl_oid_list *parent" +.Fa "int number" +.Fa "const char *name" +.Fa "int access" +.Fa "int64_t *arg" +.Fa "int len" +.Fa "const char *descr" +.Fc +.Ft struct sysctl_oid * .Fo SYSCTL_ADD_STRING .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" @@ -124,6 +168,28 @@ .Fa "const char *descr" .Fc .Ft struct sysctl_oid * +.Fo SYSCTL_ADD_U8 +.Fa "struct sysctl_ctx_list *ctx" +.Fa "struct sysctl_oid_list *parent" +.Fa "int number" +.Fa "const char *name" +.Fa "int access" +.Fa "uint8_t *arg" +.Fa "int len" +.Fa "const char *descr" +.Fc +.Ft struct sysctl_oid * +.Fo SYSCTL_ADD_U16 +.Fa "struct sysctl_ctx_list *ctx" +.Fa "struct sysctl_oid_list *parent" +.Fa "int number" +.Fa "const char *name" +.Fa "int access" +.Fa "uint16_t *arg" +.Fa "int len" +.Fa "const char *descr" +.Fc +.Ft struct sysctl_oid * .Fo SYSCTL_ADD_U32 .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" @@ -134,6 +200,17 @@ .Fa "const char *descr" .Fc .Ft struct sysctl_oid * +.Fo SYSCTL_ADD_U64 +.Fa "struct sysctl_ctx_list *ctx" +.Fa "struct sysctl_oid_list *parent" +.Fa "int number" +.Fa "const char *name" +.Fa "int access" +.Fa "uint64_t *arg" +.Fa "int len" +.Fa "const char *descr" +.Fc +.Ft struct sysctl_oid * .Fo SYSCTL_ADD_UINT .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" @@ -447,16 +524,44 @@ function. creates an oid of type .Dv CTLTYPE_NODE , to which child oids may be added. +.It Fn SYSCTL_ADD_S8 +creates an oid that handles an +.Li int8_t +variable. +.It Fn SYSCTL_ADD_S16 +creates an oid that handles an +.Li int16_t +variable. +.It Fn SYSCTL_ADD_S32 +creates an oid that handles an +.Li int16_t +variable. +.It Fn SYSCTL_ADD_S64 +creates an oid that handles an +.Li int64_t +variable. .It Fn SYSCTL_ADD_STRING creates an oid that handles a zero-terminated character string. .It Fn SYSCTL_ADD_INT creates an oid that handles an .Li int variable. +.It Fn SYSCTL_ADD_U8 +creates an oid that handles a +.Li uint8_t +variable. +.It Fn SYSCTL_ADD_U16 +creates an oid that handles a +.Li uint16_t +variable. .It Fn SYSCTL_ADD_U32 creates an oid that handles a .Li uint32_t variable. +.It Fn SYSCTL_ADD_U64 +creates an oid that handles a +.Li uint64_t +variable. .It Fn SYSCTL_ADD_UINT creates an oid that handles an .Li unsigned int diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index 0d4c3c1484..da0692ffc3 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -571,9 +571,18 @@ sysctl_sysctl_debug_dump_node(struct sysctl_oid_list *l, int i) } break; case CTLTYPE_INT: kprintf(" Int\n"); break; + case CTLTYPE_UINT: kprintf(" u_int\n"); break; + case CTLTYPE_LONG: kprintf(" Long\n"); break; + case CTLTYPE_ULONG: kprintf(" u_long\n"); break; case CTLTYPE_STRING: kprintf(" String\n"); break; - case CTLTYPE_QUAD: kprintf(" Quad\n"); break; + case CTLTYPE_S8: kprintf(" int8_t\n"); break; + case CTLTYPE_S16: kprintf(" int16_t\n"); break; + case CTLTYPE_S32: kprintf(" int32_t\n"); break; + case CTLTYPE_S64: kprintf(" int64_t\n"); break; + case CTLTYPE_U8: kprintf(" uint8_t\n"); break; + case CTLTYPE_U16: kprintf(" uint16_t\n"); break; case CTLTYPE_U32: kprintf(" uint32_t\n"); break; + case CTLTYPE_U64: kprintf(" uint64_t\n"); break; case CTLTYPE_OPAQUE: kprintf(" Opaque/struct\n"); break; default: kprintf("\n"); } @@ -856,6 +865,46 @@ SYSCTL_NODE(_sysctl, 5, oiddescr, CTLFLAG_RD | CTLFLAG_NOLOCK, * Default "handler" functions. */ +/* + * Handle an 8-bit number, signed or unsigned. arg1 points to it. + */ + +int +sysctl_handle_8(SYSCTL_HANDLER_ARGS) +{ + int error = 0; + + if (!arg1) + return (EINVAL); + error = SYSCTL_OUT(req, arg1, sizeof(int8_t)); + + if (error || !req->newptr) + return (error); + + error = SYSCTL_IN(req, arg1, sizeof(int8_t)); + return (error); +} + +/* + * Handle a 16-bit number, signed or unsigned. arg1 points to it. + */ + +int +sysctl_handle_16(SYSCTL_HANDLER_ARGS) +{ + int error = 0; + + if (!arg1) + return (EINVAL); + error = SYSCTL_OUT(req, arg1, sizeof(int16_t)); + + if (error || !req->newptr) + return (error); + + error = SYSCTL_IN(req, arg1, sizeof(int16_t)); + return (error); +} + /* * Handle a 32-bit number, signed or unsigned. arg1 points to it. */ @@ -876,6 +925,26 @@ sysctl_handle_32(SYSCTL_HANDLER_ARGS) return (error); } +/* + * Handle a 64-bit number, signed or unsigned. arg1 points to it. + */ + +int +sysctl_handle_64(SYSCTL_HANDLER_ARGS) +{ + int error = 0; + + if (!arg1) + return (EINVAL); + error = SYSCTL_OUT(req, arg1, sizeof(int64_t)); + + if (error || !req->newptr) + return (error); + + error = SYSCTL_IN(req, arg1, sizeof(int64_t)); + return (error); +} + /* * Handle an int, signed or unsigned. * Two cases: diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 6fea21aa43..87a182e770 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -70,13 +70,20 @@ struct ctlname { #define CTLTYPE_NODE 1 /* name is a node */ #define CTLTYPE_INT 2 /* name describes an integer */ #define CTLTYPE_STRING 3 /* name describes a string */ -#define CTLTYPE_QUAD 4 /* name describes a 64-bit number */ +#define CTLTYPE_S64 4 /* name describes a signed 64-bit number */ +#define CTLTYPE_QUAD CTLTYPE_S64 /* name describes a signed 64-bit number */ #define CTLTYPE_OPAQUE 5 /* name describes a structure */ #define CTLTYPE_STRUCT CTLTYPE_OPAQUE /* name describes a structure */ #define CTLTYPE_UINT 6 /* name describes an unsigned integer */ #define CTLTYPE_LONG 7 /* name describes a long */ #define CTLTYPE_ULONG 8 /* name describes an unsigned long */ -#define CTLTYPE_UQUAD 9 /* name describes an unsigned 64-bit number */ +#define CTLTYPE_U64 9 /* name describes an unsigned 64-bit number */ +#define CTLTYPE_UQUAD CTLTYPE_U64 /* name describes an unsigned 64-bit number */ +#define CTLTYPE_U8 0xa /* name describes an unsigned 8-bit number */ +#define CTLTYPE_U16 0xb /* name describes an unsigned 16-bit number */ +#define CTLTYPE_S8 0xc /* name describes a signed 8-bit number */ +#define CTLTYPE_S16 0xd /* name describes a signed 16-bit number */ +#define CTLTYPE_S32 0xe /* name describes a signed 32-bit number */ #define CTLTYPE_U32 0xf /* name describes an unsigned 32-bit number */ #define CTLFLAG_RD 0x80000000 /* Allow reads of variable */ @@ -158,7 +165,10 @@ struct sysctl_oid { #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); @@ -319,6 +329,60 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); CTLTYPE_ULONG|CTLFLAG_NOLOCK|(access), \ ptr, 0, sysctl_handle_long, "LU", descr) +/* Oid for a signed 8-bit int. The pointer must be non NULL. */ +#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) + +/* Oid for a signed 16-bit int. The pointer must be non NULL. */ +#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) + +/* Oid for a signed 32-bit int. The pointer must be non NULL. */ +#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) + +/* Oid for a signed 64-bit int. The pointer must be non NULL. */ +#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) + +/* Oid for an unsigned 8-bit int. The pointer must be non NULL. */ +#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) + +/* Oid for an unsigned 16-bit int. The pointer must be non NULL. */ +#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) + /* Oid for an unsigned 32-bit int. The pointer must be non NULL. */ #define SYSCTL_U32(parent, nbr, name, access, ptr, val, descr) \ SYSCTL_OID(parent, nbr, name, CTLTYPE_U32|(access), \ @@ -328,6 +392,15 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_U32|(access), \ ptr, 0, sysctl_handle_32, "IU", descr) +/* Oid for an unsigned 64-bit int. The pointer must be non NULL. */ +#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) + /* Oid for an opaque object. Specified by a pointer and a length. */ #define SYSCTL_OPAQUE(parent, nbr, name, access, ptr, len, fmt, descr) \ SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|(access), \