.Nm SYSCTL_ADD_PROC ,
.Nm SYSCTL_ADD_QUAD ,
.Nm SYSCTL_ADD_ROOT_NODE ,
+.Nm SYSCTL_ADD_S8 ,
+.Nm SYSCTL_ADD_S16 ,
+.Nm SYSCTL_ADD_S32 ,
+.Nm SYSCTL_ADD_S64 ,
.Nm SYSCTL_ADD_STRING ,
.Nm SYSCTL_ADD_STRUCT ,
.Nm SYSCTL_ADD_U8 ,
.Nm SYSCTL_ADD_U16 ,
+.Nm SYSCTL_ADD_U32 ,
+.Nm SYSCTL_ADD_U64 ,
.Nm SYSCTL_ADD_UAUTO ,
.Nm SYSCTL_ADD_UINT ,
.Nm SYSCTL_ADD_ULONG ,
.Nm SYSCTL_PROC ,
.Nm SYSCTL_QUAD ,
.Nm SYSCTL_ROOT_NODE ,
+.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
.Fa "const char *name"
.Fa "int ctlflags"
.Fa "int *ptr"
-.Fa "intptr_t val"
+.Fa "int val"
.Fa "const char *descr"
.Fc
.Ft struct sysctl_oid *
.Fa "int number"
.Fa "const char *name"
.Fa "int ctlflags"
-.Fa "quad_t *ptr"
+.Fa "int64_t *ptr"
.Fa "const char *descr"
.Fc
.Ft struct sysctl_oid *
.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 ctlflags"
+.Fa "int8_t *ptr"
+.Fa "int8_t val"
+.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 ctlflags"
+.Fa "int16_t *ptr"
+.Fa "int16_t val"
+.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 ctlflags"
+.Fa "int32_t *ptr"
+.Fa "int32_t val"
+.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 ctlflags"
+.Fa "int64_t *ptr"
+.Fa "int64_t val"
+.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"
.Fa "int number"
.Fa "const char *name"
.Fa "int ctlflags"
-.Fa "unsigned int *ptr"
-.Fa "intptr_t val"
+.Fa "uint8_t *ptr"
+.Fa "uint8_t val"
.Fa "const char *descr"
.Fc
.Ft struct sysctl_oid *
.Fa "int number"
.Fa "const char *name"
.Fa "int ctlflags"
-.Fa "unsigned int *ptr"
-.Fa "intptr_t val"
+.Fa "uint16_t *ptr"
+.Fa "uint16_t val"
+.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"
+.Fa "int number"
+.Fa "const char *name"
+.Fa "int ctlflags"
+.Fa "uint32_t *ptr"
+.Fa "uint32_t val"
+.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 ctlflags"
+.Fa "uint64_t *ptr"
+.Fa "uint64_t val"
.Fa "const char *descr"
.Fc
.Ft struct sysctl_oid *
.Fa "const char *name"
.Fa "int ctlflags"
.Fa "unsigned int *ptr"
-.Fa "intptr_t val"
+.Fa "unsigned int val"
.Fa "const char *descr"
.Fc
.Ft struct sysctl_oid *
.Fa "int number"
.Fa "const char *name"
.Fa "int ctlflags"
-.Fa "u_quad_t *ptr"
+.Fa "uint64_t *ptr"
.Fa "const char *descr"
.Fc
.Ft struct sysctl_oid *
.Fn SYSCTL_OPAQUE parent number name ctlflags ptr len format descr
.Fn SYSCTL_PROC parent number name ctlflags arg1 arg2 handler format descr
.Fn SYSCTL_QUAD parent number name ctlflags ptr val descr
+.Fn SYSCTL_ROOT_NODE number name ctlflags handler descr
+.Fn SYSCTL_S8 parent number name ctlflags ptr val descr
+.Fn SYSCTL_S16 parent number name ctlflags ptr val descr
+.Fn SYSCTL_S32 parent number name ctlflags ptr val descr
+.Fn SYSCTL_S64 parent number name ctlflags ptr val descr
.Fn SYSCTL_STRING parent number name ctlflags arg len descr
.Fn SYSCTL_STRUCT parent number name ctlflags ptr struct_type descr
-.Fn SYSCTL_ROOT_NODE number name ctlflags handler descr
.Fn SYSCTL_U8 parent number name ctlflags ptr val descr
.Fn SYSCTL_U16 parent number name ctlflags ptr val descr
+.Fn SYSCTL_U32 parent number name ctlflags ptr val descr
+.Fn SYSCTL_U64 parent number name ctlflags ptr val descr
.Fn SYSCTL_UINT parent number name ctlflags ptr val descr
.Fn SYSCTL_ULONG parent number name ctlflags ptr val descr
.Fn SYSCTL_UQUAD parent number name ctlflags ptr val descr
.Fn SYSCTL_PROC ,
.Fn SYSCTL_QUAD ,
.Fn SYSCTL_ROOT_NODE ,
+.Fn SYSCTL_S8 ,
+.Fn SYSCTL_S16 ,
+.Fn SYSCTL_S32 ,
+.Fn SYSCTL_S64 ,
.Fn SYSCTL_STRING ,
.Fn SYSCTL_STRUCT ,
.Fn SYSCTL_U8 ,
.Fn SYSCTL_U16 ,
+.Fn SYSCTL_U32 ,
+.Fn SYSCTL_U64 ,
.Fn SYSCTL_UINT ,
.Fn SYSCTL_ULONG
or
.Fn SYSCTL_ADD_PROC ,
.Fn SYSCTL_ADD_QUAD ,
.Fn SYSCTL_ADD_ROOT_NODE ,
+.Fn SYSCTL_ADD_S8 ,
+.Fn SYSCTL_ADD_S16 ,
+.Fn SYSCTL_ADD_S32 ,
+.Fn SYSCTL_ADD_S64 ,
.Fn SYSCTL_ADD_STRING ,
.Fn SYSCTL_ADD_STRUCT ,
.Fn SYSCTL_ADD_U8 ,
.Fn SYSCTL_ADD_U16 ,
+.Fn SYSCTL_ADD_U32 ,
+.Fn SYSCTL_ADD_U64 ,
.Fn SYSCTL_ADD_UAUTO ,
.Fn SYSCTL_ADD_UINT ,
.Fn SYSCTL_ADD_ULONG ,
This is a signed integer.
.It Dv CTLTYPE_STRING
This is a nul-terminated string stored in a character array.
+.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_OPAQUE
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
This is a signed long.
.It Dv CTLTYPE_ULONG
This is an unsigned long.
-.It Dv CTLTYPE_U64
-This is a 64-bit unsigned integer.
.El
.Pp
All sysctl types except for new node declarations require one of the following
#define CTLTYPE_U64 9 /* 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 */
#define CTLFLAG_WR 0x40000000 /* Allow writes to the variable */
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_msec_to_ticks(SYSCTL_HANDLER_ARGS);
int sysctl_handle_long(SYSCTL_HANDLER_ARGS);
-int sysctl_handle_64(SYSCTL_HANDLER_ARGS);
int sysctl_handle_string(SYSCTL_HANDLER_ARGS);
int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS);
int sysctl_handle_counter_u64(SYSCTL_HANDLER_ARGS);
__arg, len, sysctl_handle_string, "A", __DESCR(descr)); \
})
+/* Oid for a signed 8-bit int. If ptr is NULL, val is returned. */
+#define SYSCTL_NULL_S8_PTR ((unsigned *)NULL)
+#define SYSCTL_S8(parent, nbr, name, access, ptr, val, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_S8 | CTLFLAG_MPSAFE | (access), \
+ ptr, val, sysctl_handle_8, "C", descr); \
+ CTASSERT((((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S8) && \
+ sizeof(int8_t) == sizeof(*(ptr)))
+
+#define SYSCTL_ADD_S8(ctx, parent, nbr, name, access, ptr, val, descr) \
+({ \
+ int8_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S8); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_S8 | CTLFLAG_MPSAFE | (access), \
+ __ptr, val, sysctl_handle_8, "C", __DESCR(descr)); \
+})
+
/* Oid for an unsigned 8-bit int. If ptr is NULL, val is returned. */
#define SYSCTL_NULL_U8_PTR ((unsigned *)NULL)
#define SYSCTL_U8(parent, nbr, name, access, ptr, val, descr) \
__ptr, val, sysctl_handle_8, "CU", __DESCR(descr)); \
})
+/* Oid for a signed 16-bit int. If ptr is NULL, val is returned. */
+#define SYSCTL_NULL_S16_PTR ((unsigned *)NULL)
+#define SYSCTL_S16(parent, nbr, name, access, ptr, val, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_S16 | CTLFLAG_MPSAFE | (access), \
+ ptr, val, sysctl_handle_16, "S", descr); \
+ CTASSERT((((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S16) && \
+ sizeof(int16_t) == sizeof(*(ptr)))
+
+#define SYSCTL_ADD_S16(ctx, parent, nbr, name, access, ptr, val, descr) \
+({ \
+ int16_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S16); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_S16 | CTLFLAG_MPSAFE | (access), \
+ __ptr, val, sysctl_handle_16, "S", __DESCR(descr)); \
+})
+
/* Oid for an unsigned 16-bit int. If ptr is NULL, val is returned. */
#define SYSCTL_NULL_U16_PTR ((unsigned *)NULL)
#define SYSCTL_U16(parent, nbr, name, access, ptr, val, descr) \
#define SYSCTL_ADD_U16(ctx, parent, nbr, name, access, ptr, val, descr) \
({ \
- uint16_t *__ptr = (ptr); \
+ uint16_t *__ptr = (ptr); \
CTASSERT(((access) & CTLTYPE) == 0 || \
((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U16); \
sysctl_add_oid(ctx, parent, nbr, name, \
__ptr, val, sysctl_handle_16, "SU", __DESCR(descr)); \
})
+/* Oid for a signed 32-bit int. If ptr is NULL, val is returned. */
+#define SYSCTL_NULL_S32_PTR ((unsigned *)NULL)
+#define SYSCTL_S32(parent, nbr, name, access, ptr, val, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_S32 | CTLFLAG_MPSAFE | (access), \
+ ptr, val, sysctl_handle_32, "I", descr); \
+ CTASSERT((((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S32) && \
+ sizeof(int32_t) == sizeof(*(ptr)))
+
+#define SYSCTL_ADD_S32(ctx, parent, nbr, name, access, ptr, val, descr) \
+({ \
+ int32_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S32); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_S32 | CTLFLAG_MPSAFE | (access), \
+ __ptr, val, sysctl_handle_32, "I", __DESCR(descr)); \
+})
+
+/* Oid for an unsigned 32-bit int. If ptr is NULL, val is returned. */
+#define SYSCTL_NULL_U32_PTR ((unsigned *)NULL)
+#define SYSCTL_U32(parent, nbr, name, access, ptr, val, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_U32 | CTLFLAG_MPSAFE | (access), \
+ ptr, val, sysctl_handle_32, "IU", descr); \
+ CTASSERT((((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U32) && \
+ sizeof(uint32_t) == sizeof(*(ptr)))
+
+#define SYSCTL_ADD_U32(ctx, parent, nbr, name, access, ptr, val, descr) \
+({ \
+ uint32_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U32); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_U32 | CTLFLAG_MPSAFE | (access), \
+ __ptr, val, sysctl_handle_32, "IU", __DESCR(descr)); \
+})
+
+/* Oid for a signed 64-bit int. If ptr is NULL, val is returned. */
+#define SYSCTL_NULL_S64_PTR ((unsigned *)NULL)
+#define SYSCTL_S64(parent, nbr, name, access, ptr, val, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_S64 | CTLFLAG_MPSAFE | (access), \
+ ptr, val, sysctl_handle_64, "Q", descr); \
+ CTASSERT((((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64) && \
+ sizeof(int64_t) == sizeof(*(ptr)))
+
+#define SYSCTL_ADD_S64(ctx, parent, nbr, name, access, ptr, val, descr) \
+({ \
+ int64_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_S64 | CTLFLAG_MPSAFE | (access), \
+ __ptr, val, sysctl_handle_64, "Q", __DESCR(descr)); \
+})
+
+/* Oid for an unsigned 64-bit int. If ptr is NULL, val is returned. */
+#define SYSCTL_NULL_U64_PTR ((unsigned *)NULL)
+#define SYSCTL_U64(parent, nbr, name, access, ptr, val, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), \
+ ptr, val, sysctl_handle_64, "QU", descr); \
+ CTASSERT((((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U64) && \
+ sizeof(uint64_t) == sizeof(*(ptr)))
+
+#define SYSCTL_ADD_U64(ctx, parent, nbr, name, access, ptr, val, descr) \
+({ \
+ uint64_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U64); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), \
+ __ptr, val, sysctl_handle_64, "QU", __DESCR(descr)); \
+})
+
/* Oid for an int. If ptr is SYSCTL_NULL_INT_PTR, val is returned. */
#define SYSCTL_NULL_INT_PTR ((int *)NULL)
#define SYSCTL_INT(parent, nbr, name, access, ptr, val, descr) \