Releases: bgpkit/bgpkit-parser
Releases · bgpkit/bgpkit-parser
v0.10.9
BMP messages SDK improvements
- expose all pub structs and enums for BMP messages
- this allows users to access struct definitions and operate on them directly
- added
Copy
toBmpMsgType
,BmpPeerType
andBmpPerPeerHeader
,PerPeerFlags
,BmpPeerType
- implemented
Default
,PartialEq
,Eq
andHash
forBmpPerPeerHeader
- this allows users and compare and hash
BmpPerPeerHeader
structs - also implemented
.strip_timestamp()
to remove the timestamp from theBmpPerPeerHeader
struct for cases where
the timestamp is not needed
- this allows users and compare and hash
- rename
MessageBody
toBmpMessageBody
- derive
Clone
,PartialEq
toBmpMessage
andMessageBody
- added serialization/deserialization support for
BmpMessage
andBmpMessageBody
v0.10.8
Highlights
- improve support for more BMP data types and better error
handling (#163)- added explicit enum
PeerDownReason
,TerminationReason
,PeerUpTlvType
instead of saving them as integers - added support for AFI-SAFI gauge for
StatisticsReport
message- this fixes issue #162
- added
UnknownTlvType
andUnknownTlvValue
errors for parsing BMP TLV records - added
Clone
andPartialEq
derives to most of the BMP message structs
- added explicit enum
v0.10.7
v0.10.6
v0.10.5
Highlights
- by default handles only
gzip
andbzip2
files- to support
xz
andlz
files, use the optional featurexz
andlz
- to support
v0.10.4
Hot fix
- update
oneio
tov0.16.4
- add
http2
andcharset
feature flag toreqwest
- add
[YANKED] v0.10.3
v0.10.3 YANKED DUE TO UPSTREAM LIBRARY ISSUE, USE v0.10.4 OR ABOVE
Highlights
- fixed an panic issue when sometimes merging AS path segments of 4-byte ASN path and 2-byte ASN path
- see issue #156 for details
- update
oneio
tov0.16.3
- gzip decompression depends on
flate2
'srust-backend
feature instead ofzlib-ng
that requirescmake
to build
- gzip decompression depends on
v0.10.2
Highlights
- added new
ip_version
filter type with values ofipv4
oripv6
- library users can use this filter to filter BGP messages by IP version
- CLI users can specify
-4
or-6
to filter BGP messages by IP version
- add new dependency security checkups using
cargo audit
- all new releases will need to pass
cargo audit
checks before being published - weekly
cargo audit
checks added to the CI pipeline
- all new releases will need to pass
v0.10.1
Highlights
- updating
oneio
tov0.16.2
- switching to
flate2
withzlib-ng
for handlinggzip
files, which is significantly faster than the default pure-Rust implementation
- switching to
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: