summaryrefslogtreecommitdiff
path: root/src/sf.jail/state.h
blob: d22d374b489290924689d37735bfddc9cce5126e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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 *);