1/* 2 * Copyright (c) 1999-2004 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_APACHE_LICENSE_HEADER_START@ 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * @APPLE_APACHE_LICENSE_HEADER_END@ 19 */ 20/* 21 * bootstrap -- fundamental service initiator and port server 22 * Mike DeMoney, NeXT, Inc. 23 * Copyright, 1990. All rights reserved. 24 */ 25 26subsystem job 400; 27 28#include <mach/std_types.defs> 29#include <mach/mach_types.defs> 30#include "job_types.defs" 31 32import "vproc.h"; 33import "vproc_priv.h"; 34import "vproc_internal.h"; 35 36userprefix vproc_mig_; 37serverprefix job_mig_; 38 39routine 40create_server( 41 j : job_t; 42 servercmd : cmd_t; 43 serveruid : uid_t; 44 ondemand : boolean_t; 45out serverport : mach_port_make_send_t 46); 47 48routine 49reboot2( 50 j : job_t; 51 flags : uint64_t 52); 53 54routine 55check_in2( 56 j : job_t; 57 servicename : name_t; 58out serviceport : mach_port_move_receive_t; 59out instanceid : uuid_t; 60 flags : uint64_t 61); 62 63routine 64register2( 65 j : job_t; 66 servicename : name_t; 67 serviceport : mach_port_t; 68 flags : uint64_t 69); 70 71routine 72look_up2( 73 j : job_t; 74sreplyport rp : mach_port_make_send_once_t; 75 servicename : name_t; 76out serviceport : mach_port_t; 77UserAuditToken servercreds : audit_token_t; 78 targetpid : pid_t; 79 instanceid : uuid_t; 80 flags : uint64_t 81); 82 83routine 84send_signal( 85 j : job_t; 86sreplyport rp : mach_port_make_send_once_t; 87 label : name_t; 88 sig : integer_t 89); 90 91routine 92parent( 93 j : job_t; 94sreplyport rp : mach_port_make_send_once_t; 95out parentport : mach_port_make_send_t 96); 97 98routine 99post_fork_ping( 100 j : job_t; 101 taskport : task_t; 102out asport : mach_port_t 103); 104 105routine 106info( 107 j : job_t; 108out names : name_array_t, dealloc; 109out jobs : name_array_t, dealloc; 110out actives : bootstrap_status_array_t, dealloc; 111 flags : uint64_t 112); 113 114routine 115subset( 116 j : job_t; 117 reqport : mach_port_t; 118out subsetport : mach_port_make_send_t 119); 120 121skip; /* Formerly setup_shmem. */ 122 123routine 124take_subset( 125 j : job_t; 126out reqport : mach_port_move_send_t; 127out recvport : mach_port_move_receive_t; 128out jobs : pointer_t, dealloc; 129out ports : mach_port_move_send_array_t, dealloc 130); 131 132routine 133getsocket( 134 j : job_t; 135out sockpath : name_t 136); 137 138skip; /* Formerly spawn. */ 139 140skip; /* Formerly wait. */ 141 142skip; /* Formerly uncork_fork. */ 143 144routine 145swap_integer( 146 j : job_t; 147 inkey : vproc_gsk_t; 148 outkey : vproc_gsk_t; 149 inval : int64_t; 150out outval : int64_t 151); 152 153routine 154log( 155 j : job_t; 156 pri : integer_t; 157 err : integer_t; 158 message : logmsg_t 159); 160 161routine 162lookup_per_user_context( 163 j : job_t; 164 uid : uid_t; 165out userbport : mach_port_t 166); 167 168routine 169move_subset( 170 j : job_t; 171 targetport : mach_port_t; 172 session : name_t; 173 asport : mach_port_t; 174 flags : uint64_t 175); 176 177routine 178swap_complex( 179 j : job_t; 180 inkey : vproc_gsk_t; 181 outkey : vproc_gsk_t; 182 inval : pointer_t; 183out outval : pointer_t, dealloc 184); 185 186routine 187log_drain( 188 j : job_t; 189sreplyport rp : mach_port_make_send_once_t; 190out outval : pointer_t, dealloc 191); 192 193routine 194log_forward( 195 j : job_t; 196 inval : pointer_t 197); 198 199routine 200kickstart( 201 j : job_t; 202 label : name_t; 203out pid : pid_t; 204 flags : natural_t 205); 206 207skip; /* Formerly embedded_wait. */ 208 209routine 210lookup_children( 211 j : job_t; 212out childports : mach_port_move_send_array_t, dealloc; 213out childnames : name_array_t, dealloc; 214out childprops : bootstrap_property_array_t, dealloc 215); 216 217routine 218switch_to_session( 219 j : job_t; 220 reqport : mach_port_t; 221 session : name_t; 222 asport : mach_port_t; 223out newbsport : mach_port_make_send_t 224); 225 226skip; /* Formerly transaction_count_for_pid. */ 227 228routine 229pid_is_managed( 230 j : job_t; 231 pid : pid_t; 232out managed : boolean_t 233); 234 235routine 236port_for_label( 237 j : job_t; 238 label : name_t; 239out jport : mach_port_make_send_t 240); 241 242routine 243init_session( 244 j : job_t; 245 session : name_t; 246 asport : mach_port_t 247); 248 249routine 250set_security_session( 251 j : job_t; 252 uuid : uuid_t; 253 asport : mach_port_t 254); 255 256skip; /* Formerly wait2. */ 257 258skip; /* Formerly event_source_check_in. */ 259 260skip; /* Formerly event_set_state. */ 261 262routine 263spawn2( 264 j : job_t; 265sreplyport rp : mach_port_make_send_once_t; 266 job : pointer_t; 267 asport : mach_port_t; 268out outpid : pid_t; 269out obsrvport : mach_port_move_receive_t 270); 271 272routine 273get_root_bootstrap( 274 j : job_t; 275out rootbs : mach_port_move_send_t 276); 277 278#ifdef SHOW_LEGACY 279routine 280legacy_ipc_request( 281 j : job_t; 282 request : pointer_t; 283 request_fds : mach_port_move_send_array_t; 284out reply : pointer_t, dealloc; 285out reply_fds : mach_port_move_send_array_t, dealloc; 286 asport : mach_port_t 287); 288#endif 289 290routine 291get_listener_port_rights( 292 j : job_t; 293out sports : mach_port_make_send_array_t, dealloc 294); 295 296routine 297register_gui_session( 298 j : job_t; 299 asport : mach_port_t 300); 301