monitord/varlink/
network.rs1use serde::{Deserialize, Serialize};
6use zlink::{proxy, ReplyError};
7
8pub const NETWORK_SOCKET_PATH: &str = "/run/systemd/netif/io.systemd.Network";
9
10#[proxy("io.systemd.Network")]
12pub trait Network {
13 async fn describe(&mut self) -> zlink::Result<Result<DescribeOutput, NetworkError>>;
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct DescribeOutput {
20 #[serde(rename = "Interfaces")]
22 pub interfaces: Option<Vec<Interface>>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct Interface {
28 #[serde(rename = "Index")]
30 pub index: i64,
31 #[serde(rename = "Name")]
33 pub name: String,
34 #[serde(rename = "AdministrativeState")]
36 pub administrative_state: String,
37 #[serde(rename = "OperationalState")]
39 pub operational_state: String,
40 #[serde(rename = "CarrierState")]
42 pub carrier_state: String,
43 #[serde(rename = "AddressState")]
45 pub address_state: String,
46 #[serde(rename = "IPv4AddressState")]
48 pub ipv4_address_state: String,
49 #[serde(rename = "IPv6AddressState")]
51 pub ipv6_address_state: String,
52 #[serde(rename = "OnlineState")]
54 pub online_state: Option<String>,
55 #[serde(rename = "NetworkFile")]
57 pub network_file: Option<String>,
58 #[serde(rename = "RequiredForOnline")]
60 pub required_for_online: Option<bool>,
61}
62
63#[derive(Debug, Clone, PartialEq, ReplyError)]
65#[zlink(interface = "io.systemd.Network")]
66pub enum NetworkError {
67 NoSuchInterface,
69}
70
71impl std::fmt::Display for NetworkError {
72 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
73 match self {
74 NetworkError::NoSuchInterface => write!(f, "No such interface"),
75 }
76 }
77}
78
79impl std::error::Error for NetworkError {}