container_device_interface/specs/
config.rs1use std::collections::BTreeMap;
2
3use libc::mode_t;
4
5use serde::{Deserialize, Serialize};
6
7pub const CURRENT_VERSION: &str = "1.1.0";
9
10#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
12#[serde(deny_unknown_fields)]
13pub struct Spec {
14 #[serde(rename = "cdiVersion")]
15 pub(crate) version: String,
16
17 #[serde(rename = "kind")]
18 pub(crate) kind: String,
19
20 #[serde(
21 rename = "annotations",
22 default,
23 skip_serializing_if = "BTreeMap::is_empty"
24 )]
25 pub(crate) annotations: BTreeMap<String, String>,
26
27 #[serde(rename = "devices")]
28 pub(crate) devices: Vec<Device>,
29
30 #[serde(rename = "containerEdits", skip_serializing_if = "Option::is_none")]
31 pub container_edits: Option<ContainerEdits>,
32}
33
34#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
36#[serde(deny_unknown_fields)]
37pub struct Device {
38 #[serde(rename = "name")]
39 pub(crate) name: String,
40
41 #[serde(
42 rename = "annotations",
43 default,
44 skip_serializing_if = "BTreeMap::is_empty"
45 )]
46 pub(crate) annotations: BTreeMap<String, String>,
47
48 #[serde(rename = "containerEdits")]
49 pub(crate) container_edits: ContainerEdits,
50}
51
52#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
54#[serde(deny_unknown_fields)]
55pub struct ContainerEdits {
56 #[serde(rename = "env", skip_serializing_if = "Option::is_none")]
57 pub env: Option<Vec<String>>,
58
59 #[serde(rename = "deviceNodes", skip_serializing_if = "Option::is_none")]
60 pub device_nodes: Option<Vec<DeviceNode>>,
61
62 #[serde(rename = "netDevices", skip_serializing_if = "Option::is_none")]
63 pub(crate) net_devices: Option<Vec<LinuxNetDevice>>,
64
65 #[serde(rename = "hooks", skip_serializing_if = "Option::is_none")]
66 pub hooks: Option<Vec<Hook>>,
67
68 #[serde(rename = "mounts", skip_serializing_if = "Option::is_none")]
69 pub mounts: Option<Vec<Mount>>,
70
71 #[serde(rename = "intelRdt", skip_serializing_if = "Option::is_none")]
72 pub(crate) intel_rdt: Option<IntelRdt>,
73
74 #[serde(rename = "additionalGids", skip_serializing_if = "Option::is_none")]
75 pub(crate) additional_gids: Option<Vec<u32>>,
76}
77
78#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
80#[serde(deny_unknown_fields)]
81pub struct DeviceNode {
82 #[serde(rename = "path")]
83 pub(crate) path: String,
84
85 #[serde(rename = "hostPath", skip_serializing_if = "Option::is_none")]
86 pub(crate) host_path: Option<String>,
87
88 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
89 pub(crate) r#type: Option<String>,
90
91 #[serde(default, skip_serializing_if = "Option::is_none")]
92 pub major: Option<i64>,
93
94 #[serde(default, skip_serializing_if = "Option::is_none")]
95 pub minor: Option<i64>,
96
97 #[serde(rename = "fileMode", skip_serializing_if = "Option::is_none")]
98 pub file_mode: Option<mode_t>,
99
100 #[serde(rename = "permissions", skip_serializing_if = "Option::is_none")]
101 pub permissions: Option<String>,
102
103 #[serde(default, skip_serializing_if = "Option::is_none")]
104 pub uid: Option<u32>,
105
106 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub gid: Option<u32>,
108}
109
110#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
112#[serde(deny_unknown_fields)]
113pub struct Mount {
114 #[serde(rename = "hostPath")]
115 pub(crate) host_path: String,
116
117 #[serde(rename = "containerPath")]
118 pub(crate) container_path: String,
119
120 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
121 pub(crate) r#type: Option<String>,
122
123 #[serde(default, skip_serializing_if = "Option::is_none")]
124 pub(crate) options: Option<Vec<String>>,
125}
126
127#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
129#[serde(deny_unknown_fields)]
130pub struct Hook {
131 #[serde(rename = "hookName")]
132 pub(crate) hook_name: String,
133
134 #[serde(rename = "path")]
135 pub(crate) path: String,
136
137 #[serde(default, skip_serializing_if = "Option::is_none")]
138 pub(crate) args: Option<Vec<String>>,
139
140 #[serde(default, skip_serializing_if = "Option::is_none")]
141 pub(crate) env: Option<Vec<String>>,
142
143 #[serde(rename = "timeout", skip_serializing_if = "Option::is_none")]
144 pub(crate) timeout: Option<i64>,
145}
146
147#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
149#[serde(deny_unknown_fields)]
150pub struct IntelRdt {
151 #[serde(rename = "closID", skip_serializing_if = "Option::is_none")]
152 pub(crate) clos_id: Option<String>,
153
154 #[serde(rename = "l3CacheSchema", skip_serializing_if = "Option::is_none")]
155 pub(crate) l3_cache_schema: Option<String>,
156
157 #[serde(rename = "memBwSchema", skip_serializing_if = "Option::is_none")]
158 pub(crate) mem_bw_schema: Option<String>,
159
160 #[serde(rename = "schemata", skip_serializing_if = "Option::is_none")]
161 pub(crate) schemata: Option<Vec<String>>,
162
163 #[serde(rename = "enableMonitoring", skip_serializing_if = "Option::is_none")]
164 pub(crate) enable_monitoring: Option<bool>,
165
166 #[serde(rename = "enableCMT", skip_serializing_if = "Option::is_none")]
167 pub(crate) enable_cmt: Option<bool>,
168
169 #[serde(rename = "enableMBM", skip_serializing_if = "Option::is_none")]
170 pub(crate) enable_mbm: Option<bool>,
171}
172
173#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
175#[serde(deny_unknown_fields)]
176pub struct LinuxNetDevice {
177 #[serde(rename = "hostInterfaceName")]
178 pub(crate) host_interface_name: String,
179
180 #[serde(rename = "name")]
181 pub(crate) name: String,
182}