From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 238261FF17A for ; Fri, 18 Jul 2025 18:25:45 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 08C00354D3; Fri, 18 Jul 2025 18:26:46 +0200 (CEST) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Date: Fri, 18 Jul 2025 18:26:21 +0200 Message-Id: <20250718162638.444705-2-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250718162638.444705-1-s.hanreich@proxmox.com> References: <20250718162638.444705-1-s.hanreich@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.206 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 KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an 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. [proxmox.com, network.pm] Subject: [pve-devel] [PATCH pve-common v2 1/2] network: add ip link and altname helpers X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" Those helpers will be used by several other packages to implement the altname support. Those helpers will also be used by the new pveeth tool which can be used for pinning interface names. Signed-off-by: Stefan Hanreich Link: https://lore.proxmox.com/20250709194526.560709-2-s.hanreich@proxmox.com --- src/PVE/Network.pm | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm index d084b36..ce87b93 100644 --- a/src/PVE/Network.pm +++ b/src/PVE/Network.pm @@ -973,4 +973,49 @@ sub is_ovs_bridge { die "failed to query OVS to determine type of '$bridge': $res\n"; } +sub ip_link_details { + my $link_json = ''; + + PVE::Tools::run_command( + ['ip', '-details', '-json', 'link', 'show'], + outfunc => sub { + $link_json .= shift; + } + ); + + my $links = JSON::decode_json($link_json); + my %ip_links = map { $_->{ifname} => $_ } $links->@*; + + return \%ip_links; +} + +sub ip_link_is_physical { + my ($ip_link) = @_; + + # ether alone isn't enough, as virtual interfaces can also have link_type + # ether + return $ip_link->{link_type} eq 'ether' + && (!defined($ip_link->{linkinfo}) || !defined($ip_link->{linkinfo}->{info_kind})); +} + +sub altname_mapping { + my ($ip_links) = @_; + + $ip_links = ip_link_details() if !defined($ip_links); + + my $altnames = {}; + + foreach my $iface_name (keys $ip_links->%*) { + my $iface = $ip_links->{$iface_name}; + + next if !$iface->{altnames}; + + foreach my $altname ($iface->{altnames}->@*) { + $altnames->{$altname} = $iface_name; + } + } + + return $altnames; +} + 1; -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel