public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Hannes Laimer <h.laimer@proxmox.com>
To: Stefan Hanreich <s.hanreich@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH proxmox-ve-rs v4 1/7] sdn: fabric: add BGP protocol support
Date: Wed, 13 May 2026 15:00:47 +0200	[thread overview]
Message-ID: <b5d25585-6c3b-4157-9ea4-23afddef0dfd@proxmox.com> (raw)
In-Reply-To: <ebd653ed-cfb2-4a9d-b131-7027f7e2b481@proxmox.com>

thanks, will address in v5!

On 2026-05-13 14:30, Stefan Hanreich wrote:
> On 5/12/26 4:12 PM, Hannes Laimer wrote:
>> +impl AddressFamilies {
>> +    /// Merge another [`AddressFamilies`] into this one.
>> +    ///
>> +    /// For each address family: if `self` already has it, extend its neighbors, networks, and
>> +    /// redistribute lists. If `self` doesn't have it, take it from `other`.
>> +    pub fn merge(&mut self, other: AddressFamilies) {
> 
> maybe extend is the better name, as it mirrors existing conventions from
> std::Vec?
> 

makes sense, can do

[..]

>>              }
>>              FabricEntry::WireGuard(_) => {} // not a frr fabric
>> +            FabricEntry::Bgp(bgp_entry) => {
>> +                let Ok(node) = bgp_entry.node_section(&current_node) else {
>> +                    continue;
>> +                };
>> +
>> +                let BgpNode::Internal(properties) = node.properties() else {
>> +                    continue;
>> +                };
>> +
>> +                let fabric = bgp_entry.fabric_section();
>> +
>> +                let local_asn = properties.asn().as_u32();
> 
> makes me wonder if implementing AsRef<u32> would simplify handling ASN
> throughout the code?
> 

good point, probably also `Deref<Target=u32>`

[..]

>> +
>> +#[api(
>> +    type: Integer,
>> +    minimum: u32::MIN as i64,
>> +    maximum: u32::MAX as i64,
>> +)]
>> +#[derive(Debug, Clone, Serialize, Updater, Hash)]
>> +/// Autonomous system number as defined by RFC 6793
>> +pub struct ASN(u32);
> 
> potentially something for later, but I think we use ASN in several
> places - so we might want to add this to sdn-types instead and reuse it
> across the ve-rs crates?
> 

yes, sounds like a good follow-up that covers all places then

[..]

>> +impl<'de> Deserialize<'de> for ASN {
>> +    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
>> +    where
>> +        D: serde::Deserializer<'de>,
>> +    {
>> +        use serde::de::{self, Visitor};
>> +
>> +        struct AsnVisitor;
>> +
>> +        impl<'de> Visitor<'de> for AsnVisitor {
>> +            type Value = ASN;
>> +
>> +            fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
>> +                formatter.write_str("a u32 or string containing a u32")
>> +            }
>> +
>> +            fn visit_i64<E: de::Error>(self, v: i64) -> Result<ASN, E> {
>> +                u32::try_from(v)
>> +                    .map(ASN)
>> +                    .map_err(|_| E::custom(format!("ASN out of range: {v}")))
>> +            }
>> +
>> +            fn visit_u64<E: de::Error>(self, v: u64) -> Result<ASN, E> {
>> +                u32::try_from(v)
>> +                    .map(ASN)
>> +                    .map_err(|_| E::custom(format!("ASN out of range: {v}")))
>> +            }
>> +
>> +            fn visit_str<E: de::Error>(self, v: &str) -> Result<ASN, E> {
>> +                v.parse::<u32>()
>> +                    .map(ASN)
>> +                    .map_err(|_| E::custom(format!("invalid ASN: {v}")))
>> +            }
>> +        }
>> +
>> +        deserializer.deserialize_any(AsnVisitor)
>> +    }
>> +}
> 
> Is there a reason why proxmox_serde::perl::deserialize_u32 doesn't work?
> It should work the same afaict.
> 

i remeber there was a problem with the information that this is an int
being lost when passed through perlmod, but i tried to reproduce this
again and could not. so no reason :)

[..]




  reply	other threads:[~2026-05-13 13:01 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-12 14:12 [PATCH docs/manager/network/proxmox{-ve-rs,-perl-rs} v4 0/7] sdn: add BGP fabric Hannes Laimer
2026-05-12 14:12 ` [PATCH proxmox-ve-rs v4 1/7] sdn: fabric: add BGP protocol support Hannes Laimer
2026-05-13 12:29   ` Stefan Hanreich
2026-05-13 13:00     ` Hannes Laimer [this message]
2026-05-12 14:13 ` [PATCH proxmox-perl-rs v4 2/7] sdn: fabrics: add BGP config generation Hannes Laimer
2026-05-12 14:13 ` [PATCH proxmox-perl-rs v4 3/7] sdn: fabrics: add BGP status endpoints Hannes Laimer
2026-05-13 12:33   ` Stefan Hanreich
2026-05-13 13:02     ` Hannes Laimer
2026-05-12 14:13 ` [PATCH pve-network v4 4/7] sdn: fabrics: register bgp as a fabric protocol type Hannes Laimer
2026-05-12 14:13 ` [PATCH pve-network v4 5/7] test: evpn: add integration test for EVPN over BGP fabric Hannes Laimer
2026-05-12 14:13 ` [PATCH pve-manager v4 6/7] ui: sdn: add BGP fabric support Hannes Laimer
2026-05-13 12:38   ` Stefan Hanreich
2026-05-12 14:13 ` [PATCH pve-docs v4 7/7] sdn: add bgp fabric section Hannes Laimer
2026-05-13 12:39 ` [PATCH docs/manager/network/proxmox{-ve-rs,-perl-rs} v4 0/7] sdn: add BGP fabric Stefan Hanreich
2026-05-13 18:43 ` superseded: " Hannes Laimer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b5d25585-6c3b-4157-9ea4-23afddef0dfd@proxmox.com \
    --to=h.laimer@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=s.hanreich@proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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