Skip to main content

bgpkit_parser/models/mrt/
legacy_bgp.rs

1//! Models for the deprecated MRT Type 5 BGP format.
2
3use crate::models::{Asn, BgpMessage, BgpState};
4use std::net::IpAddr;
5
6/// A deprecated MRT Type 5 BGP message.
7///
8/// Defined in [RFC 6396, Appendix B.2.1].
9///
10/// [RFC 6396, Appendix B.2.1]: https://www.rfc-editor.org/rfc/rfc6396.html#appendix-B.2.1
11#[derive(Debug, Clone, PartialEq, Eq)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub enum LegacyBgp {
14    /// An OPEN, UPDATE, NOTIFICATION, or KEEPALIVE message with peer and local endpoint metadata.
15    Message(LegacyBgpMessage),
16    /// A BGP finite-state-machine transition.
17    StateChange(LegacyBgpStateChange),
18}
19
20/// Peer metadata and payload for a deprecated MRT Type 5 BGP message.
21#[derive(Debug, Clone, PartialEq, Eq)]
22#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
23pub struct LegacyBgpMessage {
24    pub peer_asn: Asn,
25    pub peer_ip: IpAddr,
26    pub local_asn: Asn,
27    pub local_ip: IpAddr,
28    pub bgp_message: BgpMessage,
29}
30
31/// A state transition from a deprecated MRT Type 5 BGP record.
32#[derive(Debug, Clone, PartialEq, Eq)]
33#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
34pub struct LegacyBgpStateChange {
35    pub peer_asn: Asn,
36    pub peer_ip: IpAddr,
37    pub old_state: BgpState,
38    pub new_state: BgpState,
39}