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 = "0.7.0";
9
10#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
12pub struct Spec {
13 #[serde(rename = "cdiVersion")]
14 pub(crate) version: String,
15
16 #[serde(rename = "kind")]
17 pub(crate) kind: String,
18
19 #[serde(
20 rename = "annotations",
21 default,
22 skip_serializing_if = "BTreeMap::is_empty"
23 )]
24 pub(crate) annotations: BTreeMap<String, String>,
25
26 #[serde(rename = "devices")]
27 pub(crate) devices: Vec<Device>,
28
29 #[serde(rename = "containerEdits", skip_serializing_if = "Option::is_none")]
30 pub container_edits: Option<ContainerEdits>,
31}
32
33#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
35pub struct Device {
36 #[serde(rename = "name")]
37 pub(crate) name: String,
38
39 #[serde(
40 rename = "annotations",
41 default,
42 skip_serializing_if = "BTreeMap::is_empty"
43 )]
44 pub(crate) annotations: BTreeMap<String, String>,
45
46 #[serde(rename = "containerEdits")]
47 pub(crate) container_edits: ContainerEdits,
48}
49
50#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
52pub struct ContainerEdits {
53 #[serde(rename = "env", skip_serializing_if = "Option::is_none")]
54 pub env: Option<Vec<String>>,
55
56 #[serde(rename = "deviceNodes", skip_serializing_if = "Option::is_none")]
57 pub device_nodes: Option<Vec<DeviceNode>>,
58
59 #[serde(rename = "hooks", skip_serializing_if = "Option::is_none")]
60 pub hooks: Option<Vec<Hook>>,
61
62 #[serde(rename = "mounts", skip_serializing_if = "Option::is_none")]
63 pub mounts: Option<Vec<Mount>>,
64
65 #[serde(rename = "intelRdt", skip_serializing_if = "Option::is_none")]
66 pub(crate) intel_rdt: Option<IntelRdt>,
67
68 #[serde(rename = "additionalGids", skip_serializing_if = "Option::is_none")]
69 pub(crate) additional_gids: Option<Vec<u32>>,
70}
71
72#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
74pub struct DeviceNode {
75 #[serde(rename = "path")]
76 pub(crate) path: String,
77
78 #[serde(rename = "hostPath", skip_serializing_if = "Option::is_none")]
79 pub(crate) host_path: Option<String>,
80
81 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
82 pub(crate) r#type: Option<String>,
83
84 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub major: Option<i64>,
86
87 #[serde(default, skip_serializing_if = "Option::is_none")]
88 pub minor: Option<i64>,
89
90 #[serde(rename = "fileMode", skip_serializing_if = "Option::is_none")]
91 pub file_mode: Option<mode_t>,
92
93 #[serde(rename = "permissions", skip_serializing_if = "Option::is_none")]
94 pub permissions: Option<String>,
95
96 #[serde(default, skip_serializing_if = "Option::is_none")]
97 pub uid: Option<u32>,
98
99 #[serde(default, skip_serializing_if = "Option::is_none")]
100 pub gid: Option<u32>,
101}
102
103#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
105pub struct Mount {
106 #[serde(rename = "hostPath")]
107 pub(crate) host_path: String,
108
109 #[serde(rename = "containerPath")]
110 pub(crate) container_path: String,
111
112 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
113 pub(crate) r#type: Option<String>,
114
115 #[serde(default, skip_serializing_if = "Option::is_none")]
116 pub(crate) options: Option<Vec<String>>,
117}
118
119#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
121pub struct Hook {
122 #[serde(rename = "hookName")]
123 pub(crate) hook_name: String,
124
125 #[serde(rename = "path")]
126 pub(crate) path: String,
127
128 #[serde(default, skip_serializing_if = "Option::is_none")]
129 pub(crate) args: Option<Vec<String>>,
130
131 #[serde(default, skip_serializing_if = "Option::is_none")]
132 pub(crate) env: Option<Vec<String>>,
133
134 #[serde(rename = "timeout", skip_serializing_if = "Option::is_none")]
135 pub(crate) timeout: Option<i64>,
136}
137
138#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Deserialize, Serialize)]
140pub struct IntelRdt {
141 #[serde(rename = "closID", skip_serializing_if = "Option::is_none")]
142 pub(crate) clos_id: Option<String>,
143
144 #[serde(rename = "l3CacheSchema", skip_serializing_if = "Option::is_none")]
145 pub(crate) l3_cache_schema: Option<String>,
146
147 #[serde(rename = "memBwSchema", skip_serializing_if = "Option::is_none")]
148 pub(crate) mem_bw_schema: Option<String>,
149
150 #[serde(default, rename = "enableCMT")]
151 pub(crate) enable_cmt: bool,
152
153 #[serde(default, rename = "enableMBM")]
154 pub(crate) enable_mbm: bool,
155}