blob: e2cdc85dcdd8475b872be1c2d1967de50d0ac98c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
/* The kernel call implemented in this file:
* m_type: SYS_STATECTL
*
* The parameters for this kernel call are:
* m_lsys_krn_sys_statectl.request (state control request)
*/
#include "kernel/system.h"
#if USE_STATECTL
/*===========================================================================*
* do_statectl *
*===========================================================================*/
int do_statectl(struct proc * caller, message * m_ptr)
{
/* Handle sys_statectl(). A process has issued a state control request. */
switch(m_ptr->m_lsys_krn_sys_statectl.request)
{
case SYS_STATE_CLEAR_IPC_REFS:
/* Clear IPC references for all the processes communicating
* with the caller.
*/
clear_ipc_refs(caller, EDEADSRCDST);
return(OK);
case SYS_STATE_SET_STATE_TABLE:
/* Set state table for the caller. */
priv(caller)->s_state_table = (vir_bytes) m_ptr->m_lsys_krn_sys_statectl.address;
priv(caller)->s_state_entries = m_ptr->m_lsys_krn_sys_statectl.length;
return(OK);
case SYS_STATE_ADD_IPC_BL_FILTER:
/* Add an IPC blacklist filter for the caller. */
return add_ipc_filter(caller, IPCF_BLACKLIST,
(vir_bytes) m_ptr->m_lsys_krn_sys_statectl.address,
m_ptr->m_lsys_krn_sys_statectl.length);
case SYS_STATE_ADD_IPC_WL_FILTER:
/* Add an IPC whitelist filter for the caller. */
return add_ipc_filter(caller, IPCF_WHITELIST,
(vir_bytes) m_ptr->m_lsys_krn_sys_statectl.address,
m_ptr->m_lsys_krn_sys_statectl.length);
case SYS_STATE_CLEAR_IPC_FILTERS:
/* Clear any IPC filter for the caller. */
clear_ipc_filters(caller);
return OK;
default:
printf("do_statectl: bad request %d\n",
m_ptr->m_lsys_krn_sys_statectl.request);
return EINVAL;
}
}
#endif /* USE_STATECTL */
|