3 * \brief Process management service.
7 * Copyright (c) 2017, ETH Zurich.
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
16 #include <barrelfish/barrelfish.h>
17 #include <barrelfish/nameservice_client.h>
18 #include <barrelfish/proc_mgmt_client.h>
19 #include <if/proc_mgmt_defs.h>
23 static struct proc_mgmt_rpc_rx_vtbl rpc_rx_vtbl;
25 static errval_t alloc_ep_handler(struct proc_mgmt_binding *b, errval_t *err,
28 struct proc_mgmt_lmp_binding *lmpb = (struct proc_mgmt_lmp_binding*) malloc(
29 sizeof(struct proc_mgmt_lmp_binding));
32 *err = proc_mgmt_client_lmp_accept(lmpb, get_default_waitset(),
33 DEFAULT_LMP_BUF_WORDS);
34 if (err_is_ok(*err)) {
35 *ep = lmpb->chan.local_cap;
37 // struct proc_mgmt_state *st = (struct proc_mgmt_state*) malloc(
38 // sizeof(struct proc_mgmt_state));
39 // assert(st != NULL);
40 // st->queue.head = st->queue.tail = NULL;
42 lmpb->b.rpc_rx_vtbl = rpc_rx_vtbl;
51 static errval_t spawn_handler(struct proc_mgmt_binding *b,
60 struct capref *domainid_cap)
62 return LIB_ERR_NOT_IMPLEMENTED;
65 static errval_t span_handler(struct proc_mgmt_binding *b,
66 struct capref domainid_cap,
69 struct capref disp_mem,
72 return LIB_ERR_NOT_IMPLEMENTED;
75 static errval_t kill_handler(struct proc_mgmt_binding *b,
76 struct capref domainid_cap,
79 return LIB_ERR_NOT_IMPLEMENTED;
82 static struct proc_mgmt_rpc_rx_vtbl rpc_rx_vtbl = {
83 .alloc_ep_call = alloc_ep_handler,
84 .spawn_call = spawn_handler,
85 .span_call = span_handler,
86 .kill_call = kill_handler
89 static void export_cb(void *st, errval_t err, iref_t iref)
91 if (err_is_fail(err)) {
92 USER_PANIC_ERR(err, "export failed");
97 size_t len = snprintf(namebuf, sizeof(namebuf), "%s.%d", SERVICE_BASENAME,
99 assert(len < sizeof(namebuf));
100 namebuf[sizeof(namebuf) - 1] = '\0';
102 // register this iref with the name service
103 err = nameservice_register(namebuf, iref);
104 if (err_is_fail(err)) {
105 USER_PANIC_ERR(err, "nameservice_register failed");
109 static errval_t connect_cb(void *st, struct proc_mgmt_binding *b)
111 b->rpc_rx_vtbl = rpc_rx_vtbl;
115 errval_t start_service(void)
117 return proc_mgmt_export(NULL, export_cb, connect_cb, get_default_waitset(),
118 IDC_EXPORT_FLAGS_DEFAULT);