#include <libubox/vlist.h>
#include <libubox/uloop.h>
+#include <libubox/ustream.h>
#include "../utils/utils.h"
#define RESPAWN_ERROR (5 * 60)
+struct jail {
+ bool procfs;
+ bool sysfs;
+ bool ubus;
+ bool log;
+ bool ronly;
+ char *name;
+ char *hostname;
+ struct blobmsg_list mount;
+ int argc;
+};
+
struct service_instance {
struct vlist_node node;
struct service *srv;
int8_t nice;
bool valid;
+ char *user;
uid_t uid;
gid_t gid;
bool restart;
bool respawn;
int respawn_count;
+ int reload_signal;
struct timespec start;
+ bool trace;
+ bool has_jail;
+ bool no_new_privs;
+ struct jail jail;
+ char *seccomp;
+ char *pidfile;
+
+ uint32_t term_timeout;
uint32_t respawn_timeout;
uint32_t respawn_threshold;
uint32_t respawn_retry;
struct blob_attr *config;
struct uloop_process proc;
struct uloop_timeout timeout;
+ struct ustream_fd _stdout;
+ struct ustream_fd _stderr;
struct blob_attr *command;
struct blob_attr *trigger;
};
void instance_start(struct service_instance *in);
-void instance_stop(struct service_instance *in);
-bool instance_update(struct service_instance *in, struct service_instance *in_new);
+void instance_stop(struct service_instance *in, bool halt);
+void instance_update(struct service_instance *in, struct service_instance *in_new);
void instance_init(struct service_instance *in, struct service *s, struct blob_attr *config);
void instance_free(struct service_instance *in);
void instance_dump(struct blob_buf *b, struct service_instance *in, int debug);