X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/3e170ce000f1506b7b5d2c5c7faec85ceabb573d..b226f5e54a60dc81db17b1260381d7dbfea3cdf1:/bsd/sys/kern_control.h diff --git a/bsd/sys/kern_control.h b/bsd/sys/kern_control.h index 3d87bce89..51324ea65 100644 --- a/bsd/sys/kern_control.h +++ b/bsd/sys/kern_control.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2004, 2012-2015 Apple Inc. All rights reserved. + * Copyright (c) 2000-2004, 2012-2016 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -36,6 +36,9 @@ #include +#include +#include +#include /* * Define Controller event subclass, and associated events. @@ -188,6 +191,9 @@ struct kctlstat { u_int64_t kcs_enqueue_fail __attribute__((aligned(8))); u_int64_t kcs_enqueue_fullsock __attribute__((aligned(8))); u_int64_t kcs_bad_kctlref __attribute__((aligned(8))); + u_int64_t kcs_tbl_size_too_big __attribute__((aligned(8))); + u_int64_t kcs_enqdata_mb_alloc_fail __attribute__((aligned(8))); + u_int64_t kcs_enqdata_sbappend_fail __attribute__((aligned(8))); }; #endif /* PRIVATE */ @@ -411,6 +417,31 @@ typedef void (*ctl_rcvd_func)(kern_ctl_ref kctlref, u_int32_t unit, void *unitin */ typedef errno_t (*ctl_send_list_func)(kern_ctl_ref kctlref, u_int32_t unit, void *unitinfo, mbuf_t m, int flags); + +/*! + @typedef ctl_bind_func + @discussion The ctl_bind_func is an optional function that allows the client + to set up their unitinfo prior to connecting. + @param kctlref The control ref for the kernel control the client is + binding to. + @param sac The address used to connect to this control. The field sc_unit + contains the unit number of the kernel control instance the client is + binding to. If CTL_FLAG_REG_ID_UNIT was set when the kernel control + was registered, sc_unit is the ctl_unit of the kern_ctl_reg structure. + If CTL_FLAG_REG_ID_UNIT was not set when the kernel control was + registered, sc_unit is the dynamically allocated unit number of + the new kernel control instance that is used for this connection. + @param unitinfo A placeholder for a pointer to the optional user-defined + private data associated with this kernel control instance. This + opaque info will be provided to the user when the rest of the + callback routines are executed. For example, it can be used + to pass a pointer to an instance-specific data structure in + order for the user to keep track of the states related to this + kernel control instance. + */ +typedef errno_t (*ctl_bind_func)(kern_ctl_ref kctlref, + struct sockaddr_ctl *sac, + void **unitinfo); #endif /* KERNEL_PRIVATE */ /*! @@ -468,6 +499,7 @@ struct kern_ctl_reg #ifdef KERNEL_PRIVATE ctl_rcvd_func ctl_rcvd; /* Only valid if CTL_FLAG_REG_EXTENDED is set */ ctl_send_list_func ctl_send_list; /* Only valid if CTL_FLAG_REG_EXTENDED is set */ + ctl_bind_func ctl_bind; #endif /* KERNEL_PRIVATE */ }; @@ -547,7 +579,7 @@ ctl_enqueuembuf(kern_ctl_ref kctlref, u_int32_t unit, mbuf_t m, u_int32_t flags) Not valid if ctl_flags contains CTL_FLAG_REG_SOCK_STREAM. @param kctlref The control reference of the kernel control. @param unit The unit number of the kernel control instance. - @param m An mbuf chain containing the data to send to the client. + @param m_list An mbuf chain containing the data to send to the client. @param flags Send flags. CTL_DATA_NOWAKEUP is the only supported flags. @param m_remain A pointer to the list of mbuf packets in the chain that @@ -594,7 +626,7 @@ ctl_getenqueuespace(kern_ctl_ref kctlref, u_int32_t unit, size_t *space); low-water mark for the socket receive buffer. @param kctlref The control reference of the kernel control. @param unit The unit number of the kernel control instance. - @param u_int32_t The address at which to return the current difference + @param difference The address at which to return the current difference between the low-water mark for the socket and the number of bytes enqueued. 0 indicates that the socket is readable by the client (the number of bytes in the buffer is above the low-water mark).