v0.10.0
Version 0.10.0 is a major release with a lot of changes and improvements.
Highlights
MRT Encoding
bgpkit-parser
now supports encoding MRT messages. The following MRT message types are supported:
- TableDumpV1
- TableDumpV2
- BGP4MP
It also supports encoding BMP messages into MRT files.
Example of writing BgpElems into a file RIB dump file:
let mut encoder = bgpkit_parser::encoder::MrtRibEncoder::new();
for elem in parser {
encoder.process_elem(&elem);
}
let mut writer = oneio::get_writer("filtered.rib.gz").unwrap();
writer.write_all(encoder.export_bytes().as_ref()).unwrap();
drop(writer);
Another example of writing BgpElem
to BGP updates bytes:
let mut encoder = bgpkit_parser::encoder::MrtUpdatesEncoder::new();
let mut elem = BgpElem::default();
elem.peer_ip = IpAddr::V4("10.0.0.1".parse().unwrap());
elem.peer_asn = Asn::from(65000);
elem.prefix.prefix = "10.250.0.0/24".parse().unwrap();
encoder.process_elem(&elem);
elem.prefix.prefix = "10.251.0.0/24".parse().unwrap();
encoder.process_elem(&elem);
let bytes = encoder.export_bytes();
let mut cursor = Cursor::new(bytes.clone());
while cursor.has_remaining() {
let parsed = parse_mrt_record(&mut cursor).unwrap();
dbg!(&parsed);
}
See encoder
module for more details.
Better developer experiences
- added several utility functions to
BgpElem
.is_announcement()
: check if the BGP element is an announcement.get_as_path_opt()
: get the AS path if it exists and no AS set or confederated segments.get_origin_asn_opt()
: get the origin ASN if it exists
- full
serde
serialization support - add
BgpElem
to PSV (pipe-separated values) conversion - improved time-related filters parsing
ts_start
start_ts
ts_end
end_ts
are all supported
- many quality of life improvements by @jmeggitt
Improved testing coverage
bgpkit-parser
code test coverage is now at 92%.- codecov.io coverage report is available at https://app.codecov.io/gh/bgpkit/bgpkit-parser
TLS backend choice
- by default,
bgpkit-parser
now usesrustls
as the default TLS backendopenssl
is still supported, but it is no longer the defaultopenssl
support can be enabled by using thenative-tls
feature flag and set default features tofalse
Added RFCs support
RFC 4724: Graceful Restart Mechanism for BGP
RFC 8671 Support for Adj-RIB-Out in the BGP Monitoring Protocol (BMP)
RFC 9069: Support for Local RIB in the BGP Monitoring Protocol (BMP)
- the supported RFCs list is documented at https://github.com/bgpkit/bgpkit-parser?tab=readme-ov-file#rfcs-support
Fixes
- fixed a bug where when multiple
AsSequences
are present, only the first one is parsed- issue: #140
- fixed a bug where the parser panics when messages are truncated
Other changes
- Move pybgpkit to its own repository at https://github.com/bgpkit/pybgpkit
- CLI build feature changed from
build-binary
tocli
- add more ways to install compiled
bgpkit-parser
CLI- homebrew on macOS:
brew install bgpkit/tap/bgpkit-parser
- other platforms:
cargo binstall bgpkit-parser
- homebrew on macOS: