trace: use standard POSIX header for basename()
[project/procd.git] / service / instance.h
index f76e79573986c2f9b663681e23fd1bb299edb60f..15eb99714c65bffd51d46d046b0bd19d0ada503a 100644 (file)
 
 #include <libubox/vlist.h>
 #include <libubox/uloop.h>
+#include <libubox/ustream.h>
 #include "../utils/utils.h"
 
 #define RESPAWN_ERROR  (5 * 60)
+#define SIGNALLED_OFFSET 128
+
+struct jail {
+       bool procfs;
+       bool sysfs;
+       bool ubus;
+       bool log;
+       bool ronly;
+       bool netns;
+       bool userns;
+       bool cgroupsns;
+       bool console;
+       char *name;
+       char *hostname;
+       char *pidfile;
+       struct blobmsg_list mount;
+       struct blobmsg_list setns;
+       int argc;
+};
+
+typedef enum instance_watchdog {
+       INSTANCE_WATCHDOG_MODE_DISABLED,
+       INSTANCE_WATCHDOG_MODE_PASSIVE,
+       INSTANCE_WATCHDOG_MODE_ACTIVE,
+       __INSTANCE_WATCHDOG_MODE_MAX,
+} instance_watchdog_mode_t;
+
+struct watchdog {
+       instance_watchdog_mode_t mode;
+       uint32_t freq;
+       struct uloop_timeout timeout;
+};
 
 struct service_instance {
        struct vlist_node node;
@@ -29,15 +62,36 @@ struct service_instance {
        int8_t nice;
        bool valid;
 
+       char *user;
        uid_t uid;
-       gid_t gid;
+       gid_t pw_gid;
+       char *group;
+       gid_t gr_gid;
 
        bool halt;
        bool restart;
        bool respawn;
        int respawn_count;
+       int reload_signal;
        struct timespec start;
 
+       bool trace;
+       bool has_jail;
+       bool require_jail;
+       bool immediately;
+       bool no_new_privs;
+       struct jail jail;
+       char *seccomp;
+       char *capabilities;
+       char *pidfile;
+       char *extroot;
+       char *overlaydir;
+       char *tmpoverlaysize;
+       char *bundle;
+       int syslog_facility;
+       int exit_code;
+
+       uint32_t term_timeout;
        uint32_t respawn_timeout;
        uint32_t respawn_threshold;
        uint32_t respawn_retry;
@@ -45,6 +99,10 @@ struct service_instance {
        struct blob_attr *config;
        struct uloop_process proc;
        struct uloop_timeout timeout;
+       struct ustream_fd _stdout;
+       struct ustream_fd _stderr;
+       struct ustream_fd console;
+       struct ustream_fd console_client;
 
        struct blob_attr *command;
        struct blob_attr *trigger;
@@ -54,11 +112,13 @@ struct service_instance {
        struct blobmsg_list file;
        struct blobmsg_list limits;
        struct blobmsg_list errors;
+
+       struct watchdog watchdog;
 };
 
 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);