xref: /minix3/minix/servers/rs/proto.h (revision 181fb1b2b562251d07c6fcffd262fd8efbcd2ee0)
1433d6423SLionel Sambuc /* Function prototypes. */
2433d6423SLionel Sambuc 
3433d6423SLionel Sambuc /* Structs used in prototypes must be declared as such first. */
4433d6423SLionel Sambuc struct rproc;
5fb6bd596SCristiano Giuffrida struct rprocupd;
6433d6423SLionel Sambuc 
7433d6423SLionel Sambuc /* exec.c */
823199f62SDavid van Moolenbroek int srv_execve(int proc_e, char *exec, size_t exec_len, char *progname,
923199f62SDavid van Moolenbroek 	char *argv[], char **env);
10433d6423SLionel Sambuc 
11433d6423SLionel Sambuc /* main.c */
12433d6423SLionel Sambuc int main(void);
13433d6423SLionel Sambuc 
14433d6423SLionel Sambuc /* request.c */
15433d6423SLionel Sambuc int do_up(message *m);
16433d6423SLionel Sambuc int do_down(message *m);
17433d6423SLionel Sambuc int do_refresh(message *m);
18433d6423SLionel Sambuc int do_restart(message *m);
19433d6423SLionel Sambuc int do_clone(message *m);
20fb6bd596SCristiano Giuffrida int do_unclone(message *m);
21433d6423SLionel Sambuc int do_edit(message *m);
22433d6423SLionel Sambuc int do_shutdown(message *m);
23433d6423SLionel Sambuc void do_period(message *m);
24433d6423SLionel Sambuc int do_init_ready(message *m);
25433d6423SLionel Sambuc int do_update(message *m);
26433d6423SLionel Sambuc int do_upd_ready(message *m);
27433d6423SLionel Sambuc void do_sigchld(void);
28433d6423SLionel Sambuc int do_getsysinfo(message *m);
29433d6423SLionel Sambuc int do_lookup(message *m);
30fb6bd596SCristiano Giuffrida int do_sysctl(message *m);
313837bb5cSCristiano Giuffrida int do_fi(message *m);
32433d6423SLionel Sambuc 
33433d6423SLionel Sambuc /* manager.c */
34433d6423SLionel Sambuc int check_call_permission(endpoint_t caller, int call, struct rproc
35433d6423SLionel Sambuc 	*rp);
36433d6423SLionel Sambuc int copy_rs_start(endpoint_t src_e, char *src_rs_start, struct rs_start
37433d6423SLionel Sambuc 	*rs_start);
38433d6423SLionel Sambuc int copy_label(endpoint_t src_e, char *src_label, size_t src_len, char
39433d6423SLionel Sambuc 	*dst_label, size_t dst_len);
40fb6bd596SCristiano Giuffrida int init_state_data(endpoint_t src_e, int prepare_state,
41fb6bd596SCristiano Giuffrida 	struct rs_state_data *src_rs_state_data,
42fb6bd596SCristiano Giuffrida 	struct rs_state_data *dst_rs_state_data);
43433d6423SLionel Sambuc void build_cmd_dep(struct rproc *rp);
44433d6423SLionel Sambuc #define kill_service(rp, errstr, err) \
45433d6423SLionel Sambuc 	kill_service_debug(__FILE__, __LINE__, rp, errstr, err)
46433d6423SLionel Sambuc int kill_service_debug(char *file, int line, struct rproc *rp, char
47433d6423SLionel Sambuc 	*errstr, int err);
48433d6423SLionel Sambuc #define crash_service(rp) \
49433d6423SLionel Sambuc 	crash_service_debug(__FILE__, __LINE__, rp)
50433d6423SLionel Sambuc int crash_service_debug(char *file, int line, struct rproc *rp);
51433d6423SLionel Sambuc #define cleanup_service(rp) \
52433d6423SLionel Sambuc 	cleanup_service_debug(__FILE__, __LINE__, rp)
53fb6bd596SCristiano Giuffrida #define cleanup_service_now(rp) \
54fb6bd596SCristiano Giuffrida 	do { struct rproc *rpt = rp; cleanup_service(rpt); cleanup_service(rpt); } while(0)
55fb6bd596SCristiano Giuffrida void cleanup_service_debug(char *file, int line,
56fb6bd596SCristiano Giuffrida 	struct rproc *rp);
57fb6bd596SCristiano Giuffrida #define detach_service(rp) \
58fb6bd596SCristiano Giuffrida 	detach_service_debug(__FILE__, __LINE__, rp)
59fb6bd596SCristiano Giuffrida void detach_service_debug(char *file, int line,
60fb6bd596SCristiano Giuffrida 	struct rproc *rp);
61433d6423SLionel Sambuc int create_service(struct rproc *rp);
62fb6bd596SCristiano Giuffrida int clone_service(struct rproc *rp, int instance_flag, int init_flags);
63433d6423SLionel Sambuc int publish_service(struct rproc *rp);
64433d6423SLionel Sambuc int unpublish_service(struct rproc *rp);
65fb6bd596SCristiano Giuffrida int run_service(struct rproc *rp, int init_type, int init_flags);
66fb6bd596SCristiano Giuffrida int start_service(struct rproc *rp, int init_flags);
67433d6423SLionel Sambuc void stop_service(struct rproc *rp,int how);
68433d6423SLionel Sambuc void activate_service(struct rproc *rp, struct rproc *ex_rp);
69433d6423SLionel Sambuc void terminate_service(struct rproc *rp);
70433d6423SLionel Sambuc void restart_service(struct rproc *rp);
71fb6bd596SCristiano Giuffrida void inherit_service_defaults(struct rproc *def_rp,
72fb6bd596SCristiano Giuffrida 	struct rproc *rp);
73fb6bd596SCristiano Giuffrida void get_service_instances(struct rproc *rp, struct rproc ***rps,
74fb6bd596SCristiano Giuffrida 	int *length);
75433d6423SLionel Sambuc int read_exec(struct rproc *rp);
76433d6423SLionel Sambuc void share_exec(struct rproc *rp_src, struct rproc *rp_dst);
77433d6423SLionel Sambuc void free_exec(struct rproc *rp);
78fb6bd596SCristiano Giuffrida int init_slot(struct rproc *rp, struct rs_start *rs_start,
79fb6bd596SCristiano Giuffrida 	endpoint_t source);
80fb6bd596SCristiano Giuffrida int edit_slot(struct rproc *rp, struct rs_start *rs_start,
81fb6bd596SCristiano Giuffrida 	endpoint_t source);
82433d6423SLionel Sambuc int clone_slot(struct rproc *rp, struct rproc **clone_rpp);
83433d6423SLionel Sambuc void swap_slot(struct rproc **src_rpp, struct rproc **dst_rpp);
84433d6423SLionel Sambuc struct rproc* lookup_slot_by_label(char *label);
85433d6423SLionel Sambuc struct rproc* lookup_slot_by_pid(pid_t pid);
86433d6423SLionel Sambuc struct rproc* lookup_slot_by_dev_nr(dev_t dev_nr);
87*181fb1b2SDavid van Moolenbroek struct rproc* lookup_slot_by_domain(int domain);
88433d6423SLionel Sambuc struct rproc* lookup_slot_by_flags(int flags);
89433d6423SLionel Sambuc int alloc_slot(struct rproc **rpp);
90433d6423SLionel Sambuc void free_slot(struct rproc *rp);
91433d6423SLionel Sambuc char *get_next_label(char *ptr, char *label, char *caller_label);
92433d6423SLionel Sambuc void add_forward_ipc(struct rproc *rp, struct priv *privp);
93433d6423SLionel Sambuc void add_backward_ipc(struct rproc *rp, struct priv *privp);
94433d6423SLionel Sambuc void init_privs(struct rproc *rp, struct priv *privp);
95fb6bd596SCristiano Giuffrida void end_srv_init(struct rproc *rp);
96fb6bd596SCristiano Giuffrida 
97fb6bd596SCristiano Giuffrida /* update.c */
98fb6bd596SCristiano Giuffrida void rupdate_clear_upds(void);
99fb6bd596SCristiano Giuffrida void rupdate_add_upd(struct rprocupd* rpupd);
100fb6bd596SCristiano Giuffrida void rupdate_set_new_upd_flags(struct rprocupd* rpupd);
101fb6bd596SCristiano Giuffrida void rupdate_upd_init(struct rprocupd* rpupd, struct rproc *rp);
102fb6bd596SCristiano Giuffrida void rupdate_upd_clear(struct rprocupd* rpupd);
103fb6bd596SCristiano Giuffrida void rupdate_upd_move(struct rproc* src_rp, struct rproc* dst_rp);
104fb6bd596SCristiano Giuffrida #define request_prepare_update_service(rp, state) \
105fb6bd596SCristiano Giuffrida 	request_prepare_update_service_debug(__FILE__, __LINE__, rp, state)
106fb6bd596SCristiano Giuffrida void request_prepare_update_service_debug(char *file, int line,
107fb6bd596SCristiano Giuffrida 	struct rproc *rp, int state);
108fb6bd596SCristiano Giuffrida int srv_update(endpoint_t src_e, endpoint_t dst_e, int sys_upd_flags);
109fb6bd596SCristiano Giuffrida int update_service(struct rproc **src_rpp,
110fb6bd596SCristiano Giuffrida 	struct rproc **dst_rpp, int swap_flag, int sys_upd_flags);
111fb6bd596SCristiano Giuffrida void rollback_service(struct rproc **src_rpp,
112fb6bd596SCristiano Giuffrida 	struct rproc **dst_rpp);
113433d6423SLionel Sambuc void update_period(message *m_ptr);
114fb6bd596SCristiano Giuffrida int start_update_prepare(int allow_retries);
115fb6bd596SCristiano Giuffrida struct rprocupd* start_update_prepare_next(void);
116fb6bd596SCristiano Giuffrida int start_update(void);
117fb6bd596SCristiano Giuffrida int start_srv_update(struct rprocupd *rpupd);
118fb6bd596SCristiano Giuffrida int complete_srv_update(struct rprocupd *rpupd);
119fb6bd596SCristiano Giuffrida void end_srv_update(struct rprocupd *rpupd, int result, int reply_flag);
120fb6bd596SCristiano Giuffrida int abort_update_proc(int reason);
121fb6bd596SCristiano Giuffrida #define end_update(result, reply_flag) \
122fb6bd596SCristiano Giuffrida 	end_update_debug(__FILE__, __LINE__, result, reply_flag)
123fb6bd596SCristiano Giuffrida void end_update_debug(char *file, int line,
124fb6bd596SCristiano Giuffrida         int result, int reply_flag);
125433d6423SLionel Sambuc 
126433d6423SLionel Sambuc /* utility.c */
127fb6bd596SCristiano Giuffrida int init_service(struct rproc *rp, int type, int flags);
1283837bb5cSCristiano Giuffrida int fi_service(struct rproc *rp);
129433d6423SLionel Sambuc void fill_send_mask(sys_map_t *send_mask, int set_bits);
130fb6bd596SCristiano Giuffrida void fill_call_mask( int *calls, int tot_nr_calls,
131fb6bd596SCristiano Giuffrida 	bitchunk_t *call_mask, int call_base, int is_init);
132fb6bd596SCristiano Giuffrida #define srv_to_string(RP) srv_to_string_gen(RP, DEBUG)
133fb6bd596SCristiano Giuffrida char* srv_to_string_gen(struct rproc *rp, int is_verbose);
134fb6bd596SCristiano Giuffrida char* srv_upd_to_string(struct rprocupd *rpupd);
135fb6bd596SCristiano Giuffrida int rs_asynsend(struct rproc *rp, message *m_ptr, int no_reply);
136fb6bd596SCristiano Giuffrida int rs_receive_ticks(endpoint_t src, message *m_ptr,
137f16b761dSDavid van Moolenbroek     int *status_ptr, clock_t ticks);
138433d6423SLionel Sambuc void reply(endpoint_t who, struct rproc *rp, message *m_ptr);
139433d6423SLionel Sambuc void late_reply(struct rproc *rp, int code);
140433d6423SLionel Sambuc int rs_isokendpt(endpoint_t endpoint, int *proc);
141433d6423SLionel Sambuc int sched_init_proc(struct rproc *rp);
142fb6bd596SCristiano Giuffrida int update_sig_mgrs(struct rproc *rp, endpoint_t sig_mgr,
143fb6bd596SCristiano Giuffrida 	endpoint_t bak_sig_mgr);
144fb6bd596SCristiano Giuffrida int rs_is_idle(void);
145fb6bd596SCristiano Giuffrida void rs_idle_period(void);
146fb6bd596SCristiano Giuffrida void print_services_status(void);
147fb6bd596SCristiano Giuffrida void print_update_status(void);
148433d6423SLionel Sambuc 
149433d6423SLionel Sambuc /* error.c */
150433d6423SLionel Sambuc char * init_strerror(int errnum);
151433d6423SLionel Sambuc char * lu_strerror(int errnum);
152433d6423SLionel Sambuc 
153