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