/* RPCs which a friendly Hurd process will understand on its message port. Copyright (C) 1991,92,93,94,95,96,2002 Free Software Foundation, Inc. This file is part of the GNU Hurd. The GNU Hurd is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Hurd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU Hurd; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ subsystem msg 23000; #include #ifdef MSG_IMPORTS MSG_IMPORTS #endif /* WARNING: The file hurd/proc/stubs.c knows the RPC message ID's and formats for some of the RPC's in this file. */ /* Post a signal to the process. The refport indicates some permission attribute that the caller provides in the hope that the receiver will honor the signal. Conventional values include: Port Signals honored task port all session ID (see proc_getsidport) CONT ctty port (see term_getctty) INT, QUIT, TSTP, HUP async IO ID (see io_async) URG, IO */ routine msg_sig_post ( process: mach_port_t; sreplyport reply_port: sreply_port_t; signal: int; sigcode: natural_t; refport: mach_port_t); /* The parent or the process group of a process has been changed, or the orphaned status has changed. The task port is sent so that the recipient can know it's OK to honor the call. */ routine msg_proc_newids ( process: mach_port_t; task: task_t; ppid: pid_t; pgrp: pid_t; orphaned: int); /* Do a reauth after or-ing in new id's. */ routine msg_add_auth ( process: mach_port_t; auth: auth_t); /* Do a reauth after removing auth information. The task port is provided as an attempt at security. */ routine msg_del_auth ( process: mach_port_t; task: task_t; uids: intarray_t; gids: intarray_t); /* These eight calls fetch and store the ports and other information that were passed to the process at exec time (see hurd_types.h). The REFPORT can be the task port or the auth port. */ routine msg_get_init_port ( process: mach_port_t; refport: mach_port_t; which: int; out port: mach_port_send_t); routine msg_set_init_port ( process: mach_port_t; refport: mach_port_t; which: int; port: mach_port_send_t); routine msg_get_init_ports ( process: mach_port_t; refport: mach_port_t; out ports: portarray_t, dealloc); routine msg_set_init_ports ( process: mach_port_t; refport: mach_port_t; ports: portarray_t); routine msg_get_init_int ( process: mach_port_t; refport: mach_port_t; which: int; out value: int); routine msg_set_init_int ( process: mach_port_t; refport: mach_port_t; which: int; value: int); routine msg_get_init_ints ( process: mach_port_t; refport: mach_port_t; out values: intarray_t, dealloc); routine msg_set_init_ints ( process: mach_port_t; refport: mach_port_t; values: intarray_t); /* These two calls fetch and store the file descriptor table. */ routine msg_get_dtable ( process: mach_port_t; refport: mach_port_t; out dtable: portarray_t, dealloc); routine msg_set_dtable ( process: mach_port_t; refport: mach_port_t; dtable: portarray_t); /* These two calls fetch and store a single file descriptor. */ routine msg_get_fd ( process: mach_port_t; refport: mach_port_t; fd: int; out port: mach_port_send_t); routine msg_set_fd ( process: mach_port_t; refport: mach_port_t; fd: int; port: mach_port_send_t); /* These two calls fetch and store the whole environment, in "a=b\0c=d\0" form. */ routine msg_get_environment ( process: mach_port_t; out value: data_t, dealloc); routine msg_set_environment ( process: mach_port_t; refport: mach_port_t; value: data_t); /* These two calls fetch and store a single environment variable. */ routine msg_get_env_variable ( process: mach_port_t; variable: string_t; out value: data_t, dealloc); routine msg_set_env_variable ( process: mach_port_t; refport: mach_port_t; variable: string_t; value: string_t; replace: boolean_t); skip; /* Obsolete io_select_done. */ skip; /* Obsolete msg_startup_dosync. */ /* Like msg_sig_post, but the receiver should ignore his trace bit and deliver the signal normally even if traced, first resuming if he was suspended. */ routine msg_sig_post_untraced ( process: mach_port_t; sreplyport reply_port: sreply_port_t; signal: int; sigcode: natural_t; refport: mach_port_t); /* Return a description of why THREAD is waiting. THREAD must be a thread in this task. If the thread is not waiting, or the reason is unknown, return zero. WAIT_RPC is the RPC code of the RPC the thread is waiting on, or zero if it is not blocked in an RPC. */ routine msg_report_wait ( process: mach_port_t; thread: thread_t; out wait_desc: string_t; out wait_rpc: mach_msg_id_t); /* Given a list of port names in NAMES, return a description of the corresponding port from libc's point of view, in a '\0'-separated vector. Ports that libc doesn't know about should result in a zero-length entry. */ routine msg_describe_ports ( process: mach_port_t; refport: mach_port_t; names: mach_port_name_array_t; out descriptions: data_t);