703bcc1f8b0074f91433033e543d155a080fb935
[barrelfish] / usr / proc_mgmt / pending_clients.h
1 /*
2  * \brief Client handling internals for the process manager.
3  *
4  * Copyright (c) 2017, ETH Zurich.
5  * All rights reserved.
6  *
7  * This file is distributed under the terms in the attached LICENSE file.
8  * If you do not find this file, copies can be found by writing to:
9  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
10  */
11
12 #ifndef PENDING_CLIENTS_H
13 #define PENDING_CLIENTS_H
14
15 #include <barrelfish/barrelfish.h>
16 #include <if/proc_mgmt_defs.h>
17 #include <if/spawn_defs.h>
18
19 #define HASH_INDEX_BUCKETS 6151
20
21 enum ClientType {
22         ClientType_Spawn,
23         ClientType_SpawnWithCaps,
24         ClientType_Span,
25         ClientType_Kill,
26         ClientType_Exit,
27         ClientType_Cleanup
28         // TODO(razvan): Others?
29 };
30
31 struct pending_spawn {
32     struct capref domain_cap;
33
34         struct spawn_binding *b;
35         coreid_t core_id;
36         
37         const char *path;
38         
39         const char *argvbuf;
40         size_t argvbytes;
41         const char *envbuf;
42         size_t envbytes;
43         
44         struct capref inheritcn_cap;
45         struct capref argcn_cap;
46         
47         uint8_t flags;
48 };
49
50 struct pending_span {
51     struct capref domain_cap;
52
53         struct spawn_binding *b;
54
55         coreid_t core_id;
56         struct capref vroot;
57         struct capref dispframe;
58 };
59
60 struct pending_kill_exit_cleanup {
61     struct capref domain_cap;
62         struct spawn_binding *sb;
63         struct proc_mgmt_binding *pmb;
64 };
65
66 struct pending_client {
67     struct proc_mgmt_binding *b;
68
69     struct capref domain_cap;
70
71     coreid_t core_id;
72     enum ClientType type;
73
74     struct pending_client *next;
75 };
76
77 errval_t pending_clients_add(struct capref domain_cap,
78                              struct proc_mgmt_binding *b, enum ClientType type,
79                              coreid_t core_id);
80 errval_t pending_clients_release(struct capref domain_cap, enum ClientType type,
81                                  struct pending_client **ret_cl);
82 errval_t pending_clients_release_one(struct capref domain_cap,
83                                          enum ClientType type,
84                                          struct proc_mgmt_binding *b,
85                                      struct pending_client **ret_cl);
86
87 #endif  // PENDING_CLIENTS_H