Implement kill_request_handler in spawnd, using domain caps.
[barrelfish] / usr / spawnd / ps.h
1 /*
2  * Copyright (c) 2009, 2011, ETH Zurich.
3  * All rights reserved.
4  *
5  * This file is distributed under the terms in the attached LICENSE file.
6  * If you do not find this file, copies can be found by writing to:
7  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8  */
9
10 #ifndef PS_H
11 #define PS_H
12
13 #include <stdbool.h>
14 #include <barrelfish/barrelfish.h>
15 #include <barrelfish_kpi/types.h>
16 #include <barrelfish_kpi/init.h>
17
18 #define MAX_DOMAINS     256
19
20 enum ps_status {
21     PS_STATUS_RUNNING,
22     PS_STATUS_ZOMBIE
23 };
24
25 struct ps_waiter {
26     struct ps_waiter *next;
27     struct spawn_binding *binding;
28 };
29
30 struct ps_entry {
31     char *argv[MAX_CMDLINE_ARGS];
32     char *argbuf;
33     size_t argbytes;
34
35     domainid_t domain_id;
36
37     struct capref domain_cap;
38     uint64_t domain_cap_hash;
39     
40     struct capref rootcn_cap;
41     struct capref dcb;
42     struct cnoderef rootcn;
43     uint8_t exitcode;
44     enum ps_status status;
45     struct ps_waiter *waiters;
46 };
47
48 errval_t ps_allocate(struct ps_entry *entry, domainid_t *domainid);
49 void ps_remove(domainid_t domain_id);
50 bool ps_exists(domainid_t domain_id);
51 struct ps_entry *ps_get(domainid_t domain_id);
52
53 errval_t ps_hash_domain(struct ps_entry *entry, struct capref domain_cap);
54 errval_t ps_release_domain(struct capref domain_cap,
55                            struct ps_entry **ret_entry);
56
57 #endif