pub struct RouteRefreshMessage {
pub afi_raw: u16,
pub subtype_raw: u8,
pub safi_raw: u8,
pub orf: Option<OrfPayload>,
}Expand description
BGP ROUTE-REFRESH message (RFC 2918 + RFC 7313 + RFC 5291 ORF).
Requests a peer to re-advertise its Adj-RIB-Out for the specified address family. RFC 7313 reuses the third octet as a demarcation subtype (BoRR/EoRR). Raw wire values are stored so that unknown AFI/SAFI or subtype values can be decoded without error — the transport layer decides whether to act on or ignore them.
When the message body extends beyond the 4-byte AFI/Reserved/SAFI header,
the trailing bytes are an RFC 5291 ORF section, decoded into orf. A
plain or Enhanced Route Refresh has orf set to None.
Fields§
§afi_raw: u16Raw AFI value from the wire.
subtype_raw: u8Raw demarcation subtype byte from the wire.
safi_raw: u8Raw SAFI value from the wire.
orf: Option<OrfPayload>RFC 5291 ORF section, present when the body extends past the 4-byte
header. None for a plain (RFC 2918) or Enhanced (RFC 7313) refresh.
Implementations§
Source§impl RouteRefreshMessage
impl RouteRefreshMessage
Sourcepub fn new(afi: Afi, safi: Safi) -> Self
pub fn new(afi: Afi, safi: Safi) -> Self
Create a normal (subtype 0) ROUTE-REFRESH from typed AFI/SAFI values.
Sourcepub fn new_with_subtype(
afi: Afi,
safi: Safi,
subtype: RouteRefreshSubtype,
) -> Self
pub fn new_with_subtype( afi: Afi, safi: Safi, subtype: RouteRefreshSubtype, ) -> Self
Create a ROUTE-REFRESH with an explicit subtype.
Sourcepub fn new_with_orf(afi: Afi, safi: Safi, orf: OrfPayload) -> Self
pub fn new_with_orf(afi: Afi, safi: Safi, orf: OrfPayload) -> Self
Create an ORF-carrying ROUTE-REFRESH (RFC 5291 §5.2). The third octet is Reserved (subtype 0) for an ORF message.
Sourcepub fn safi(&self) -> Option<Safi>
pub fn safi(&self) -> Option<Safi>
Try to interpret the raw SAFI as a known sub-address family.
Sourcepub fn subtype(&self) -> RouteRefreshSubtype
pub fn subtype(&self) -> RouteRefreshSubtype
Decode the demarcation subtype.
Sourcepub fn decode(buf: &mut impl Buf, body_len: usize) -> Result<Self, DecodeError>
pub fn decode(buf: &mut impl Buf, body_len: usize) -> Result<Self, DecodeError>
Decode a ROUTE-REFRESH message body from a buffer.
A 4-byte body is a plain/Enhanced refresh (orf: None). A longer body
carries an RFC 5291 ORF section, decoded into orf. A malformed ORF
entry does not fail the decode — it is surfaced via
crate::orf::OrfEntries::Malformed so the caller can apply the RFC
5291 §5.2 reset semantics instead of tearing the session down.
§Errors
Returns DecodeError if the body length is below 4 or the buffer is
truncated relative to the declared body length. Unknown AFI/SAFI values
and unknown subtypes are preserved.
Sourcepub fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>
pub fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>
Encode a complete ROUTE-REFRESH message (header + body) into a buffer.
§Errors
Returns EncodeError if the total message length (with an ORF
section) exceeds the 16-bit length field.
Sourcepub fn encoded_len(&self) -> usize
pub fn encoded_len(&self) -> usize
Total encoded size on the wire (header + base body + any ORF section).
Trait Implementations§
Source§impl Clone for RouteRefreshMessage
impl Clone for RouteRefreshMessage
Source§fn clone(&self) -> RouteRefreshMessage
fn clone(&self) -> RouteRefreshMessage
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 RouteRefreshMessage
impl Debug for RouteRefreshMessage
Source§impl Display for RouteRefreshMessage
impl Display for RouteRefreshMessage
impl Eq for RouteRefreshMessage
Source§impl PartialEq for RouteRefreshMessage
impl PartialEq for RouteRefreshMessage
Source§fn eq(&self, other: &RouteRefreshMessage) -> bool
fn eq(&self, other: &RouteRefreshMessage) -> bool
self and other values to be equal, and is used by ==.