1use crate::bgp::BgpMessage;
3use crate::network::{Afi, Asn};
4use serde::Serialize;
5use std::net::IpAddr;
6
7#[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#[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#[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#[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#[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}