arcbox_oci/config/
linux.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6use super::{IdMapping, Resources, Seccomp, TimeOffsets};
7
8#[derive(Debug, Clone, Default, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct Linux {
12 #[serde(default, skip_serializing_if = "Vec::is_empty")]
14 pub devices: Vec<Device>,
15
16 #[serde(default, skip_serializing_if = "Vec::is_empty")]
18 pub uid_mappings: Vec<IdMapping>,
19
20 #[serde(default, skip_serializing_if = "Vec::is_empty")]
22 pub gid_mappings: Vec<IdMapping>,
23
24 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
26 pub sysctl: HashMap<String, String>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub cgroups_path: Option<String>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub resources: Option<Resources>,
35
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub rootfs_propagation: Option<String>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub seccomp: Option<Seccomp>,
43
44 #[serde(default, skip_serializing_if = "Vec::is_empty")]
46 pub namespaces: Vec<Namespace>,
47
48 #[serde(default, skip_serializing_if = "Vec::is_empty")]
50 pub masked_paths: Vec<String>,
51
52 #[serde(default, skip_serializing_if = "Vec::is_empty")]
54 pub readonly_paths: Vec<String>,
55
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub mount_label: Option<String>,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub time_offsets: Option<TimeOffsets>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
67#[serde(rename_all = "camelCase")]
68pub struct Device {
69 #[serde(rename = "type")]
71 pub device_type: String,
72 pub path: String,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub major: Option<i64>,
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub minor: Option<i64>,
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub file_mode: Option<u32>,
83 #[serde(skip_serializing_if = "Option::is_none")]
85 pub uid: Option<u32>,
86 #[serde(skip_serializing_if = "Option::is_none")]
88 pub gid: Option<u32>,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct Namespace {
94 #[serde(rename = "type")]
96 pub ns_type: NamespaceType,
97 #[serde(skip_serializing_if = "Option::is_none")]
99 pub path: Option<String>,
100}
101
102#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
104#[serde(rename_all = "lowercase")]
105pub enum NamespaceType {
106 Pid,
108 Network,
110 Mount,
112 Ipc,
114 Uts,
116 User,
118 Cgroup,
120 Time,
122}