bgp_models/mrt/
bgp4mp.rs

1//! MRT BGP4MP structs
2use crate::bgp::BgpMessage;
3use crate::network::{Afi, Asn};
4use serde::Serialize;
5use std::net::IpAddr;
6
7/// BGP states enum.
8#[derive(Debug, Primitive, Copy, Clone, Serialize, PartialEq, Eq)]
9pub enum BgpState {
10    Idle = 1,
11    Connect = 2,
12    Active = 3,
13    OpenSent = 4,
14    OpenConfirm = 5,
15    Established = 6,
16}
17
18/// BGP4MP message types.
19#[derive(Debug, Clone, Serialize, PartialEq, Eq)]
20pub enum Bgp4Mp {
21    Bgp4MpStateChange(Bgp4MpStateChange),
22    Bgp4MpStateChangeAs4(Bgp4MpStateChange),
23    Bgp4MpMessage(Bgp4MpMessage),
24    Bgp4MpMessageLocal(Bgp4MpMessage),
25    Bgp4MpMessageAs4(Bgp4MpMessage),
26    Bgp4MpMessageAs4Local(Bgp4MpMessage),
27}
28
29/// BGP4MP message subtypes.
30#[derive(Debug, Primitive, Copy, Clone, Serialize, PartialEq, Eq)]
31pub enum Bgp4MpType {
32    Bgp4MpStateChange = 0,
33    Bgp4MpMessage = 1,
34    Bgp4MpMessageAs4 = 4,
35    Bgp4MpStateChangeAs4 = 5,
36    Bgp4MpMessageLocal = 6,
37    Bgp4MpMessageAs4Local = 7,
38    Bgp4MpMessageAddpath = 8,
39    Bgp4MpMessageAs4Addpath = 9,
40    Bgp4MpMessageLocalAddpath = 10,
41    Bgp4MpMessageLocalAs4Addpath = 11,
42}
43
44/// BGP4MP state change message.
45#[derive(Debug, Clone, Serialize, PartialEq, Eq)]
46pub struct Bgp4MpStateChange {
47    pub msg_type: Bgp4MpType,
48    pub peer_asn: Asn,
49    pub local_asn: Asn,
50    pub interface_index: u16,
51    pub address_family: Afi,
52    pub peer_addr: IpAddr,
53    pub local_addr: IpAddr,
54    pub old_state: BgpState,
55    pub new_state: BgpState,
56}
57
58/// BGP4MP message.
59#[derive(Debug, Clone, Serialize, PartialEq, Eq)]
60pub struct Bgp4MpMessage {
61    pub msg_type: Bgp4MpType,
62    pub peer_asn: Asn,
63    pub local_asn: Asn,
64    pub interface_index: u16,
65    pub afi: Afi,
66    pub peer_ip: IpAddr,
67    pub local_ip: IpAddr,
68    pub bgp_message: BgpMessage,
69}