aboutgitcodelistschat:MatrixIRC
path: root/gluten.h
diff options
context:
space:
mode:
Diffstat (limited to 'gluten.h')
-rw-r--r--gluten.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/gluten.h b/gluten.h
new file mode 100644
index 0000000..b20cab6
--- /dev/null
+++ b/gluten.h
@@ -0,0 +1,94 @@
+#ifndef GLUTEN_H
+#define GLUTEN_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#define MAX_FD_INJECTED 10
+
+enum ns_spec_type {
+ NS_NONE,
+ NS_SPEC_TARGET,
+ NS_SPEC_PID,
+ NS_SPEC_PATH,
+};
+
+struct ns_spec {
+ enum ns_spec_type type;
+ union {
+ pid_t pid;
+ char *path;
+ };
+};
+
+/*
+ * enum ns_type - Type of namespaces
+ */
+enum ns_type {
+ NS_CGROUP,
+ NS_IPC,
+ NS_NET,
+ NS_MOUNT,
+ NS_PID,
+ NS_TIME,
+ NS_USER,
+ NS_UTS,
+};
+
+/*
+ * struct act_context - Description of the context where the call needs to be executed
+ * @ns: Descrption of the each namespace where the call needs to be executed
+ */
+struct act_context {
+ struct ns_spec ns[sizeof(enum ns_type)];
+};
+
+enum action_type {
+ A_CALL,
+ A_BLOCK,
+ A_CONT,
+ A_INJECT,
+ A_INJECT_A,
+};
+
+struct act_call {
+ long nr;
+ void *args[6];
+ struct act_context context;
+};
+
+struct act_block {
+ int32_t error;
+};
+
+struct act_continue {
+ bool cont;
+};
+
+struct act_return {
+ int64_t value;
+};
+
+struct act_inject {
+ uint32_t newfd;
+ uint32_t old;
+};
+
+struct act_inject_a {
+ uint32_t newfd;
+ uint32_t old;
+ int64_t value;
+};
+
+struct action {
+ enum action_type type;
+ union {
+ struct act_call call;
+ struct act_block block;
+ struct act_continue cont;
+ struct act_return ret;
+ struct act_inject inj;
+ struct act_inject_a inj_a;
+ };
+};
+#endif /* GLUTEN_H */