public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address
@ 2025-08-06 14:29 Stefan Hanreich
  2025-08-06 14:29 ` [pbs-devel] [PATCH proxmox 1/1] network-api: make address field optional Stefan Hanreich
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Stefan Hanreich @ 2025-08-06 14:29 UTC (permalink / raw)
  To: pbs-devel

As reported in the forum by [1], there are types of interfaces that do not have
a MAC address, so the address field in IpLink need to be optional instead of
required.

[1] https://forum.proxmox.com/threads/proxmox-backup-proxy-seemingly-crashes-after-being-accessed-through-reverse-proxy-after-update-to-4-0.169313/

proxmox:

Stefan Hanreich (1):
  network-api: make address field optional

 proxmox-network-api/src/config/helper.rs | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)


proxmox-network-interface-pinning:

Stefan Hanreich (1):
  network-interface-pinning: adapt to optional mac address

 src/main.rs | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)


Summary over all repositories:
  2 files changed, 20 insertions(+), 15 deletions(-)

-- 
Generated by git-murpp 0.8.0

_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pbs-devel] [PATCH proxmox 1/1] network-api: make address field optional
  2025-08-06 14:29 [pbs-devel] [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address Stefan Hanreich
@ 2025-08-06 14:29 ` Stefan Hanreich
  2025-08-08  7:29   ` Christian Ebner
  2025-08-06 14:29 ` [pbs-devel] [PATCH proxmox-network-interface-pinning 1/1] network-interface-pinning: adapt to optional mac address Stefan Hanreich
  2025-08-08 11:56 ` [pbs-devel] superseded: [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address Stefan Hanreich
  2 siblings, 1 reply; 6+ messages in thread
From: Stefan Hanreich @ 2025-08-06 14:29 UTC (permalink / raw)
  To: pbs-devel

Certain network interfaces do not have a MAC address, for instance
tailscale is layer-3 only, therefore the interfaces do not have a MAC
address. Make the address field optional to prevent the network
interface parsing logic from throwing an error in such cases.

Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
---
 proxmox-network-api/src/config/helper.rs | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/proxmox-network-api/src/config/helper.rs b/proxmox-network-api/src/config/helper.rs
index 4f17b9ee..ca80d47f 100644
--- a/proxmox-network-api/src/config/helper.rs
+++ b/proxmox-network-api/src/config/helper.rs
@@ -137,7 +137,7 @@ pub struct IpLink {
     altnames: Vec<String>,
     ifindex: i64,
     link_type: String,
-    address: MacAddress,
+    address: Option<MacAddress>,
     linkinfo: Option<LinkInfo>,
     operstate: String,
 }
@@ -157,12 +157,10 @@ impl IpLink {
         &self.ifname
     }
 
-    pub fn permanent_mac(&self) -> MacAddress {
+    pub fn permanent_mac(&self) -> Option<MacAddress> {
         if let Some(link_info) = &self.linkinfo {
             if let Some(info_slave_data) = &link_info.info_slave_data {
-                if let Some(perm_hw_addr) = info_slave_data.perm_hw_addr {
-                    return perm_hw_addr;
-                }
+                return info_slave_data.perm_hw_addr;
             }
         }
 
-- 
2.47.2


_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pbs-devel] [PATCH proxmox-network-interface-pinning 1/1] network-interface-pinning: adapt to optional mac address
  2025-08-06 14:29 [pbs-devel] [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address Stefan Hanreich
  2025-08-06 14:29 ` [pbs-devel] [PATCH proxmox 1/1] network-api: make address field optional Stefan Hanreich
@ 2025-08-06 14:29 ` Stefan Hanreich
  2025-08-08 11:56 ` [pbs-devel] superseded: [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address Stefan Hanreich
  2 siblings, 0 replies; 6+ messages in thread
From: Stefan Hanreich @ 2025-08-06 14:29 UTC (permalink / raw)
  To: pbs-devel

MAC addresses can be optional, so the return value of permanent_mac()
has changed to Option<MacAddress>. Adapt all call sites to gracefully
handle the case where a link has no permanent MAC address.

Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
---
 src/main.rs | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 4e1fa4f..bff0660 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -63,7 +63,12 @@ impl InterfaceMapping {
 
         for ip_link in sorted_links {
             if let Some(new_name) = self.mapping.get(ip_link.name()) {
-                let link_file = LinkFile::new_ether(ip_link.permanent_mac(), new_name.to_string());
+                let link_file = LinkFile::new_ether(
+                    ip_link
+                        .permanent_mac()
+                        .ok_or_else(|| anyhow!("trying to pin interface without a MAC address!"))?,
+                    new_name.to_string(),
+                );
 
                 std::fs::write(
                     format!("{}/{}", SYSTEMD_LINK_FILE_PATH, link_file.file_name()),
@@ -407,10 +412,11 @@ impl PinningTool {
             .get(interface_name)
             .ok_or_else(|| anyhow!("cannot find interface with name {interface_name}"))?;
 
-        if self
-            .pinned_interfaces
-            .contains_key(&ip_link.permanent_mac())
-        {
+        let Some(mac_address) = ip_link.permanent_mac() else {
+            bail!("Interface does not have a MAC address, so it cannot be pinned!");
+        };
+
+        if self.pinned_interfaces.contains_key(&mac_address) {
             bail!("pin already exists for interface {interface_name}");
         }
 
@@ -483,11 +489,12 @@ impl PinningTool {
             .ip_links
             .values()
             .filter(|ip_link| {
-                ip_link.is_physical()
-                    && self
-                        .pinned_interfaces
-                        .get(&ip_link.permanent_mac())
-                        .is_none()
+                if let Some(mac_address) = ip_link.permanent_mac() {
+                    return ip_link.is_physical()
+                        && self.pinned_interfaces.get(&mac_address).is_none();
+                }
+
+                false
             })
             .cloned()
             .map(IpLink::from)
-- 
2.47.2


_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [pbs-devel] [PATCH proxmox 1/1] network-api: make address field optional
  2025-08-06 14:29 ` [pbs-devel] [PATCH proxmox 1/1] network-api: make address field optional Stefan Hanreich
@ 2025-08-08  7:29   ` Christian Ebner
  2025-08-08  8:01     ` Stefan Hanreich
  0 siblings, 1 reply; 6+ messages in thread
From: Christian Ebner @ 2025-08-08  7:29 UTC (permalink / raw)
  To: Proxmox Backup Server development discussion, Stefan Hanreich

Tested this with success on a device with wwan interface, reporting a 
link type `link/none` in `ip link show` output!

Unfortunately this does not fix the issue on a host were I have an IPv6 
tunnel set up. The link there reports as `link/sit 0.0.0.0 peer <peer-ip>`.

So it would be probably best to bundle mac address and link type ether 
in a struct or named tuple, and leave the option for other link types 
which might have different, non-mac hardware addresses.


_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [pbs-devel] [PATCH proxmox 1/1] network-api: make address field optional
  2025-08-08  7:29   ` Christian Ebner
@ 2025-08-08  8:01     ` Stefan Hanreich
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Hanreich @ 2025-08-08  8:01 UTC (permalink / raw)
  To: Christian Ebner, Proxmox Backup Server development discussion

On 8/8/25 9:29 AM, Christian Ebner wrote:
> Tested this with success on a device with wwan interface, reporting a
> link type `link/none` in `ip link show` output!
> 
> Unfortunately this does not fix the issue on a host were I have an IPv6
> tunnel set up. The link there reports as `link/sit 0.0.0.0 peer <peer-ip>`.
> 
> So it would be probably best to bundle mac address and link type ether
> in a struct or named tuple, and leave the option for other link types
> which might have different, non-mac hardware addresses.

Thanks for testing this, I'll look into implementing your suggestion!


_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pbs-devel] superseded: [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address
  2025-08-06 14:29 [pbs-devel] [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address Stefan Hanreich
  2025-08-06 14:29 ` [pbs-devel] [PATCH proxmox 1/1] network-api: make address field optional Stefan Hanreich
  2025-08-06 14:29 ` [pbs-devel] [PATCH proxmox-network-interface-pinning 1/1] network-interface-pinning: adapt to optional mac address Stefan Hanreich
@ 2025-08-08 11:56 ` Stefan Hanreich
  2 siblings, 0 replies; 6+ messages in thread
From: Stefan Hanreich @ 2025-08-08 11:56 UTC (permalink / raw)
  To: pbs-devel

https://lore.proxmox.com/pbs-devel/20250808102333.121994-1-s.hanreich@proxmox.com/

On 8/6/25 4:31 PM, Stefan Hanreich wrote:
> As reported in the forum by [1], there are types of interfaces that do not have
> a MAC address, so the address field in IpLink need to be optional instead of
> required.
> 
> [1] https://forum.proxmox.com/threads/proxmox-backup-proxy-seemingly-crashes-after-being-accessed-through-reverse-proxy-after-update-to-4-0.169313/
> 
> proxmox:
> 
> Stefan Hanreich (1):
>   network-api: make address field optional
> 
>  proxmox-network-api/src/config/helper.rs | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> 
> proxmox-network-interface-pinning:
> 
> Stefan Hanreich (1):
>   network-interface-pinning: adapt to optional mac address
> 
>  src/main.rs | 27 +++++++++++++++++----------
>  1 file changed, 17 insertions(+), 10 deletions(-)
> 
> 
> Summary over all repositories:
>   2 files changed, 20 insertions(+), 15 deletions(-)
> 



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-08-08 11:55 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-06 14:29 [pbs-devel] [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address Stefan Hanreich
2025-08-06 14:29 ` [pbs-devel] [PATCH proxmox 1/1] network-api: make address field optional Stefan Hanreich
2025-08-08  7:29   ` Christian Ebner
2025-08-08  8:01     ` Stefan Hanreich
2025-08-06 14:29 ` [pbs-devel] [PATCH proxmox-network-interface-pinning 1/1] network-interface-pinning: adapt to optional mac address Stefan Hanreich
2025-08-08 11:56 ` [pbs-devel] superseded: [PATCH proxmox{, -network-interface-pinning} 0/2] fix reading ip link output for interfaces without MAC address Stefan Hanreich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal