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 112CC1FF183 for ; Wed, 16 Jul 2025 17:17:24 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3C64F15C79; Wed, 16 Jul 2025 17:18:22 +0200 (CEST) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Date: Wed, 16 Jul 2025 17:18:08 +0200 Message-Id: <20250716151815.348161-2-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250716151815.348161-1-s.hanreich@proxmox.com> References: <20250716151815.348161-1-s.hanreich@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.222 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 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 proxmox-network-interface-pinning tool which can be used for pinning interface names. Signed-off-by: Stefan Hanreich --- 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