kern_control.h (5417B) - Raw
1 /* 2 * Copyright (c) 2000-2004, 2012-2016 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 /*! 29 * @header kern_control.h 30 * This header defines an API to communicate between a kernel 31 * extension and a process outside of the kernel. 32 */ 33 34 #ifndef KPI_KERN_CONTROL_H 35 #define KPI_KERN_CONTROL_H 36 37 38 #include <sys/appleapiopts.h> 39 #include <sys/_types/_u_char.h> 40 #include <sys/_types/_u_int16_t.h> 41 #include <sys/_types/_u_int32_t.h> 42 #include <sys/_types/_u_int64_t.h> 43 44 /* 45 * Define Controller event subclass, and associated events. 46 * Subclass of KEV_SYSTEM_CLASS 47 */ 48 49 /*! 50 * @defined KEV_CTL_SUBCLASS 51 * @discussion The kernel event subclass for kernel control events. 52 */ 53 #define KEV_CTL_SUBCLASS 2 54 55 /*! 56 * @defined KEV_CTL_REGISTERED 57 * @discussion The event code indicating a new controller was 58 * registered. The data portion will contain a ctl_event_data. 59 */ 60 #define KEV_CTL_REGISTERED 1 /* a new controller appears */ 61 62 /*! 63 * @defined KEV_CTL_DEREGISTERED 64 * @discussion The event code indicating a controller was unregistered. 65 * The data portion will contain a ctl_event_data. 66 */ 67 #define KEV_CTL_DEREGISTERED 2 /* a controller disappears */ 68 69 /*! 70 * @struct ctl_event_data 71 * @discussion This structure is used for KEV_CTL_SUBCLASS kernel 72 * events. 73 * @field ctl_id The kernel control id. 74 * @field ctl_unit The kernel control unit. 75 */ 76 struct ctl_event_data { 77 u_int32_t ctl_id; /* Kernel Controller ID */ 78 u_int32_t ctl_unit; 79 }; 80 81 /* 82 * Controls destined to the Controller Manager. 83 */ 84 85 /*! 86 * @defined CTLIOCGCOUNT 87 * @discussion The CTLIOCGCOUNT ioctl can be used to determine the 88 * number of kernel controllers registered. 89 */ 90 #define CTLIOCGCOUNT _IOR('N', 2, int) /* get number of control structures registered */ 91 92 /*! 93 * @defined CTLIOCGINFO 94 * @discussion The CTLIOCGINFO ioctl can be used to convert a kernel 95 * control name to a kernel control id. 96 */ 97 #define CTLIOCGINFO _IOWR('N', 3, struct ctl_info) /* get id from name */ 98 99 100 /*! 101 * @defined MAX_KCTL_NAME 102 * @discussion Kernel control names must be no longer than 103 * MAX_KCTL_NAME. 104 */ 105 #define MAX_KCTL_NAME 96 106 107 /* 108 * Controls destined to the Controller Manager. 109 */ 110 111 /*! 112 * @struct ctl_info 113 * @discussion This structure is used with the CTLIOCGINFO ioctl to 114 * translate from a kernel control name to a control id. 115 * @field ctl_id The kernel control id, filled out upon return. 116 * @field ctl_name The kernel control name to find. 117 */ 118 struct ctl_info { 119 u_int32_t ctl_id; /* Kernel Controller ID */ 120 char ctl_name[MAX_KCTL_NAME]; /* Kernel Controller Name (a C string) */ 121 }; 122 123 124 /*! 125 * @struct sockaddr_ctl 126 * @discussion The controller address structure is used to establish 127 * contact between a user client and a kernel controller. The 128 * sc_id/sc_unit uniquely identify each controller. sc_id is a 129 * unique identifier assigned to the controller. The identifier can 130 * be assigned by the system at registration time or be a 32-bit 131 * creator code obtained from Apple Computer. sc_unit is a unit 132 * number for this sc_id, and is privately used by the kernel 133 * controller to identify several instances of the controller. 134 * @field sc_len The length of the structure. 135 * @field sc_family AF_SYSTEM. 136 * @field ss_sysaddr AF_SYS_KERNCONTROL. 137 * @field sc_id Controller unique identifier. 138 * @field sc_unit Kernel controller private unit number. 139 * @field sc_reserved Reserved, must be set to zero. 140 */ 141 struct sockaddr_ctl { 142 u_char sc_len; /* depends on size of bundle ID string */ 143 u_char sc_family; /* AF_SYSTEM */ 144 u_int16_t ss_sysaddr; /* AF_SYS_KERNCONTROL */ 145 u_int32_t sc_id; /* Controller unique identifier */ 146 u_int32_t sc_unit; /* Developer private unit number */ 147 u_int32_t sc_reserved[5]; 148 }; 149 150 151 152 #endif /* KPI_KERN_CONTROL_H */