summaryrefslogtreecommitdiff
path: root/src/sf.jail/state.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/sf.jail/state.h')
-rw-r--r--src/sf.jail/state.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/sf.jail/state.h b/src/sf.jail/state.h
new file mode 100644
index 0000000..d22d374
--- /dev/null
+++ b/src/sf.jail/state.h
@@ -0,0 +1,93 @@
+#pragma once
+
+#include "../util.h"
+
+NAMED_ENUM(interface_type, eiface, steal);
+
+struct
+{
+ char *Name;
+ interface_type Type;
+ union
+ {
+ struct
+ {
+ } eiface;
+ struct
+ {
+ char *Interface;
+ } steal;
+ };
+} typedef interface_configuration;
+
+struct
+{
+ size_t Count;
+ interface_configuration *_;
+} typedef interfaces_configuration;
+
+struct
+{
+ char *Source;
+ char *Target;
+} typedef mapping;
+
+struct
+{
+ size_t LayerCount;
+ char **Layer;
+ char *Temporary;
+ size_t VolumeCount;
+ mapping *Volume;
+ s64 DevfsRuleset;
+} typedef filesystem_configuration;
+
+struct
+{
+ interfaces_configuration Interfaces;
+ filesystem_configuration Filesystem;
+ string_array Init;
+ string_array Shutdown;
+} typedef configuration;
+
+struct
+{
+ u32 ID;
+ interface_type Type;
+} typedef interface;
+
+struct
+{
+ size_t Count;
+ interface *_;
+} typedef interfaces;
+
+struct
+{
+ interfaces Interfaces;
+ jid_t JID;
+} typedef data;
+
+void Free_interface_configuration(interface_configuration *);
+void Free_interfaces_configuration(interfaces_configuration *);
+void Free_mapping(mapping *);
+void Free_filesystem_configuration(filesystem_configuration *);
+void Free_configuration(configuration *);
+void Free_interface(interface *);
+void Free_interfaces(interfaces *);
+void Free_data(data *);
+
+char *Parse_interface_type(interface_type *, ucl_object_t const *, char const *Position);
+char *Parse_interface_configuration(interface_configuration *, ucl_object_t const *, char const *Position);
+char *Parse_interfaces_configuration(interfaces_configuration *, ucl_object_t const *, char const *Position);
+char *Parse_mapping(mapping *, ucl_object_t const *, char const *Position);
+char *Parse_filesystem_configuration(filesystem_configuration *, ucl_object_t const *, char const *Position);
+char *Parse_configuration(configuration *, ucl_object_t const *, char const *Position);
+char *Parse_interface(interface *, ucl_object_t const *, char const *Position);
+char *Parse_interfaces(interfaces *, ucl_object_t const *, char const *Position);
+char *Parse_data(data *, ucl_object_t const *, char const *Position);
+
+void Save_interface_type(jprint_state *, interface_type const *);
+void Save_interface(jprint_state *, interface const *);
+void Save_interfaces(jprint_state *, interfaces const *);
+void Save_data(jprint_state *, data const *);