1/*
2 * Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012, 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, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10interface spawn "Interface to spawn domains" {
11    typedef struct {
12    uint8 status;
13    } ps_entry;
14
15    rpc spawn_domain(in String path[2048], in char argvbuf[argvbytes, 2048], in char envbuf[envbytes, 2048],
16                     in uint8 flags, out errval err, out domainid domain_id);
17
18    rpc spawn_domain_with_caps(in String path[2048], in char argvbuf[argvbytes, 2048],
19                               in char envbuf[envbytes, 2048], in cap inheritcn_cap,
20                               in cap argcn_cap, in uint8 flags, out errval err,
21                               out domainid domain_id);
22
23    // Messages for the async interface with the process manager.
24    message spawn_request(cap procmng_cap,
25                          cap domain_cap,
26                          String path[2048],
27                          char argvbuf[argvbytes, 2048],
28                          char envbuf[envbytes, 2048],
29                          uint8 flags);
30
31    message spawn_with_caps_request(cap procmng_cap,
32                                    cap domain_cap,
33                                    String path[2048],
34                                    char argvbuf[argvbytes, 2048],
35                                    char envbuf[envbytes, 2048],
36                                    cap inheritcn_cap,
37                                    cap argcn_cap,
38                                    uint8 flags);
39
40    message span_request(cap procmng_cap, cap domain_cap, cap vroot,
41                         cap dispframe);
42
43    message kill_request(cap procmng_cap, cap domain_cap);
44
45    message cleanup_request(cap procmng_cap, cap domain_cap);
46    
47    message spawn_reply(errval err);
48
49    rpc spawn_proc_mgmt_domain(in cap domain_cap,
50                               in String path[2048],
51                               in char argvbuf[argvbytes, 2048],
52                               in char envbuf[envbytes, 2048],
53                               in uint8 flags,
54                               out errval err);
55
56    rpc spawn_proc_mgmt_domain_with_caps(in cap domain_cap,
57                                         in String path[2048],
58                                         in char argvbuf[argvbytes, 2048],
59                                         in char envbuf[envbytes, 2048],
60                                         in cap inheritcn_cap,
61                                         in cap argcn_cap,
62                                         in uint8 flags,
63                                         out errval err);
64
65    rpc span(in cap domain_cap, in cap vroot, in cap dispframe, out errval err);
66
67    rpc use_local_memserv();
68    rpc kill(in domainid domain_id, out errval err);
69
70    /*
71     * XXX: domain_id shouldn't be here. Instead, spawnd should figure
72     * out from the binding what domain it is sending the request.
73     */
74    rpc exit(in domainid domain_id, in uint8 exitcode);
75
76    rpc wait(in domainid domain_id, in bool nohang, out uint8 exitcode, out errval err);
77
78    // XXX: Should be domainid instead of uint8, but it's not yet supported
79    rpc get_domainlist(out uint8 domains[len, 2048]);
80
81    rpc status(in domainid domain_id, out ps_entry ps_entry, out char argv[len, 2048],
82    	       out errval err);
83
84    // Capability debugging
85    rpc dump_capabilities(in domainid domain_id, out errval err);
86};
87