pub enum AttributeValue {
Show 31 variants
Origin(Origin),
AsPath(AsPath),
As4Path(AsPath),
NextHop(IpAddr),
MultiExitDiscriminator(u32),
LocalPreference(u32),
OnlyToCustomer(Asn),
AtomicAggregate,
Aggregator {
asn: Asn,
id: BgpIdentifier,
},
As4Aggregator {
asn: Asn,
id: BgpIdentifier,
},
Communities(Vec<Community>),
ExtendedCommunities(Vec<ExtendedCommunity>),
Ipv6AddressSpecificExtendedCommunities(Vec<Ipv6AddrExtCommunity>),
LargeCommunities(Vec<LargeCommunity>),
OriginatorId(BgpIdentifier),
Clusters(Vec<u32>),
MpReachNlri(Nlri),
MpUnreachNlri(Nlri),
LinkState(LinkStateAttribute),
TunnelEncapsulation(TunnelEncapAttribute),
TrafficEngineering(TrafficEngineering),
BfdDiscriminator(BfdDiscriminatorAttribute),
BgpPrefixSid(BgpPrefixSidAttribute),
Bier(BierAttribute),
Sfp(SfpAttribute),
Development(Vec<u8>),
Raw(AttrRaw),
Deprecated(AttrRaw),
Unknown(AttrRaw),
Aigp(Aigp),
AttrSet(AttrSet),
}Expand description
The AttributeValue enum represents different kinds of Attribute values.
Serde (and therefore the WASM JSON output) uses default external tagging:
data-carrying variants serialize as { "<VariantName>": payload }, while
unit variants (e.g. AtomicAggregate) serialize as the bare string
"<VariantName>".
Long-tail variants (LinkState, TunnelEncapsulation, …) are typed as
opaque Record<string, unknown> in the generated TypeScript; the common
variants are fully typed. AsPath/As4Path payloads have a custom serde
encoding (flat array of ASNs, nested arrays for AS_SETs), inlined here.
Variants§
Origin(Origin)
AsPath(AsPath)
AS_PATH (type 2), RFC 4271 §4.3.
On encode, the segment width follows the session’s asn_len passed to
Attribute::encode_to: a 4-octet session encodes 4-octet AS
numbers directly. This is the variant to use when building announcements.
As4Path(AsPath)
AS4_PATH (type 17), RFC 6793 §4.2 — the migration fallback that carries the full path with 4-octet AS numbers alongside a 2-octet AS_PATH.
Segments always encode as 4-octet regardless of the session’s asn_len.
Only speakers sending 4-octet AS numbers over a 2-octet session should
emit this attribute; RFC 6793 §4.1 forbids it on 4-octet sessions.
NextHop(IpAddr)
MultiExitDiscriminator(u32)
LocalPreference(u32)
OnlyToCustomer(Asn)
AtomicAggregate
Aggregator
AGGREGATOR (type 7), RFC 4271 §4.3.8.
On encode, the AS number width follows the session’s asn_len.
As4Aggregator
AS4_AGGREGATOR (type 18), RFC 6793 — carries the aggregator AS number as 4 octets alongside a 2-octet AGGREGATOR. Always encodes the AS number as 4 octets.
Communities(Vec<Community>)
ExtendedCommunities(Vec<ExtendedCommunity>)
Ipv6AddressSpecificExtendedCommunities(Vec<Ipv6AddrExtCommunity>)
LargeCommunities(Vec<LargeCommunity>)
OriginatorId(BgpIdentifier)
Clusters(Vec<u32>)
MpReachNlri(Nlri)
MpUnreachNlri(Nlri)
LinkState(LinkStateAttribute)
BGP Link-State attribute - RFC 7752
TunnelEncapsulation(TunnelEncapAttribute)
BGP Tunnel Encapsulation attribute - RFC 9012
TrafficEngineering(TrafficEngineering)
BGP Traffic Engineering attribute - RFC 5543
BfdDiscriminator(BfdDiscriminatorAttribute)
BFD Discriminator attribute - RFC 9026
BgpPrefixSid(BgpPrefixSidAttribute)
BGP Prefix-SID attribute - RFC 8669
Bier(BierAttribute)
BIER attribute - RFC 9793
Sfp(SfpAttribute)
SFP attribute - RFC 9015
Development(Vec<u8>)
Raw(AttrRaw)
Deprecated(AttrRaw)
Unknown(AttrRaw)
Aigp(Aigp)
AIGP (Accumulated IGP Metric) attribute - RFC 7311
AttrSet(AttrSet)
ATTR_SET attribute - RFC 6368
Implementations§
Source§impl AttributeValue
impl AttributeValue
pub fn attr_type(&self) -> AttrType
pub fn attr_code(&self) -> u8
pub fn attr_category(&self) -> Option<AttributeCategory>
Sourcepub fn default_flags(&self) -> AttrFlags
pub fn default_flags(&self) -> AttrFlags
Get flags based on the attribute type. The AttrFlags::EXTENDED is not taken into account when determining the correct flags.
Trait Implementations§
Source§impl Clone for AttributeValue
impl Clone for AttributeValue
Source§fn clone(&self) -> AttributeValue
fn clone(&self) -> AttributeValue
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AttributeValue
impl Debug for AttributeValue
impl Eq for AttributeValue
Source§impl Extend<AttributeValue> for Attributes
impl Extend<AttributeValue> for Attributes
Source§fn extend<T: IntoIterator<Item = AttributeValue>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = AttributeValue>>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl From<AsPath> for AttributeValue
Converts to the AS_PATH (type 2) attribute value. Use AttributeValue::As4Path
explicitly to build the RFC 6793 migration-fallback attribute.
impl From<AsPath> for AttributeValue
Converts to the AS_PATH (type 2) attribute value. Use AttributeValue::As4Path
explicitly to build the RFC 6793 migration-fallback attribute.
Source§impl From<AttributeValue> for Attribute
impl From<AttributeValue> for Attribute
Source§fn from(value: AttributeValue) -> Self
fn from(value: AttributeValue) -> Self
Source§impl From<Origin> for AttributeValue
impl From<Origin> for AttributeValue
Source§impl FromIterator<AttributeValue> for Attributes
impl FromIterator<AttributeValue> for Attributes
Source§fn from_iter<T: IntoIterator<Item = AttributeValue>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = AttributeValue>>(iter: T) -> Self
Source§impl PartialEq for AttributeValue
impl PartialEq for AttributeValue
impl StructuralPartialEq for AttributeValue
Auto Trait Implementations§
impl !Freeze for AttributeValue
impl RefUnwindSafe for AttributeValue
impl Send for AttributeValue
impl Sync for AttributeValue
impl Unpin for AttributeValue
impl UnsafeUnpin for AttributeValue
impl UnwindSafe for AttributeValue
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more