From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id C24251FF14F for ; Wed, 17 Jun 2026 13:10:33 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 245B11F210; Wed, 17 Jun 2026 13:10:30 +0200 (CEST) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Subject: [PATCH proxmox 03/13] iproute2: add support for parsing interface flags Date: Wed, 17 Jun 2026 13:10:00 +0200 Message-ID: <20260617111012.312710-4-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260617111012.312710-1-s.hanreich@proxmox.com> References: <20260617111012.312710-1-s.hanreich@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1781694568538 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.598 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [lib.rs] Message-ID-Hash: LFUGRB3XLLLKR4A46BN26HHOUYLYGLOS X-Message-ID-Hash: LFUGRB3XLLLKR4A46BN26HHOUYLYGLOS X-MailFrom: s.hanreich@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Interface flags were not available in the parsed ip link output. The flags are required for determining the status of some interfaces, since WireGuard for example always sets the operating state to UNKNOWN, even if the interface is up and working. Signed-off-by: Stefan Hanreich --- proxmox-iproute2/src/lib.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/proxmox-iproute2/src/lib.rs b/proxmox-iproute2/src/lib.rs index f00d3475..1a7efd7e 100644 --- a/proxmox-iproute2/src/lib.rs +++ b/proxmox-iproute2/src/lib.rs @@ -64,6 +64,21 @@ pub enum Link { Unknown(UnknownLink), } +#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, serde::Deserialize)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum LinkFlag { + Pointopoint, + Noarp, + Up, + LowerUp, + Broadcast, + Multicast, + Loopback, + Promisc, + #[serde(untagged)] + Unknown(String), +} + /// An IpLink entry, as returned by `ip -details -json link show`. /// /// For now this parses only the fields that are used throughout our stack, the fields of this @@ -79,6 +94,8 @@ pub struct IpLink { link_type: Link, linkinfo: Option, operstate: String, + #[serde(default)] + flags: Vec, } impl IpLink { @@ -148,6 +165,11 @@ impl IpLink { self.altnames.iter() } + /// Returns the flags of this interface + pub fn flags(&self) -> impl Iterator { + self.flags.iter() + } + /// Returns whether the interface is currently in an UP state. pub fn active(&self) -> bool { self.operstate == "UP" -- 2.47.3