Skip to main content

arcbox_oci/config/
seccomp.rs

1//! Seccomp and time offset configuration types.
2
3use serde::{Deserialize, Serialize};
4
5/// Seccomp configuration.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct Seccomp {
9    /// Default action.
10    pub default_action: String,
11    /// Default errno return value.
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub default_errno_ret: Option<u32>,
14    /// Architectures.
15    #[serde(default, skip_serializing_if = "Vec::is_empty")]
16    pub architectures: Vec<String>,
17    /// Flags.
18    #[serde(default, skip_serializing_if = "Vec::is_empty")]
19    pub flags: Vec<String>,
20    /// Listener path.
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub listener_path: Option<String>,
23    /// Listener metadata.
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub listener_metadata: Option<String>,
26    /// Syscall rules.
27    #[serde(default, skip_serializing_if = "Vec::is_empty")]
28    pub syscalls: Vec<SyscallRule>,
29}
30
31/// Seccomp syscall rule.
32#[derive(Debug, Clone, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct SyscallRule {
35    /// Syscall names.
36    pub names: Vec<String>,
37    /// Action to take.
38    pub action: String,
39    /// Errno return value.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub errno_ret: Option<u32>,
42    /// Arguments.
43    #[serde(default, skip_serializing_if = "Vec::is_empty")]
44    pub args: Vec<SyscallArg>,
45}
46
47/// Seccomp syscall argument filter.
48#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(rename_all = "camelCase")]
50pub struct SyscallArg {
51    /// Argument index.
52    pub index: u32,
53    /// Value to compare.
54    pub value: u64,
55    /// Secondary value (for masked equality).
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub value_two: Option<u64>,
58    /// Comparison operator.
59    pub op: String,
60}
61
62/// Time offsets configuration.
63#[derive(Debug, Clone, Default, Serialize, Deserialize)]
64pub struct TimeOffsets {
65    /// Monotonic clock offset.
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub monotonic: Option<TimeOffset>,
68    /// Boottime clock offset.
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub boottime: Option<TimeOffset>,
71}
72
73/// Time offset value.
74#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct TimeOffset {
76    /// Seconds offset.
77    pub secs: i64,
78    /// Nanoseconds offset.
79    pub nanosecs: u32,
80}