rust_cni/libcni/
types.rs

1// Copyright (c) 2024 https://github.com/divinerapier/cni-rs
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Default, Clone)]
7pub struct Config {
8    pub plugin_dirs: Vec<String>,
9    pub plugin_conf_dir: String,
10    pub plugin_max_conf_num: i64,
11    pub prefix: String,
12}
13#[derive(Default, Clone, Serialize, Deserialize, Debug)]
14pub struct NetworkConfig {
15    pub network: NetConf,
16    pub bytes: Vec<u8>,
17}
18
19// impl <T> NetworkConfig<T> {
20//     pub fn new(bytes: &[u8]) ->
21// }
22#[derive(Default, Clone, Serialize, Deserialize, Debug)]
23pub struct NetConf {
24    #[serde(default, alias = "cniVersion")]
25    pub cni_version: String,
26    #[serde(default)]
27    pub name: String,
28    #[serde(default, alias = "type")]
29    pub _type: String,
30    #[serde(default)]
31    pub capabilities: HashMap<String, bool>,
32}
33
34#[derive(Serialize, Deserialize)]
35pub struct IPAM {
36    #[serde(rename = "type")]
37    pub _type: String,
38}
39
40pub struct NetConfList {
41    pub cni_version: String,
42    pub name: String,
43    pub disable_check: bool,
44    pub plugins: Vec<NetworkConfig>,
45}
46
47#[derive(Clone, Serialize, Deserialize, Default)]
48pub struct DNS {
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub nameservers: Option<Vec<String>>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub domain: Option<String>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub search: Option<Vec<String>>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub options: Option<Vec<String>>,
57}
58
59#[derive(Clone, Serialize, Deserialize)]
60pub struct Route {
61    #[serde(skip_serializing_if = "Option::is_none")]
62    #[serde(rename = "dst")]
63    pub dst: Option<ipnetwork::IpNetwork>,
64    #[serde(rename = "gw")]
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub gw: Option<std::net::IpAddr>,
67}