12个版本
0.3.4 | 2023年10月26日 |
---|---|
0.3.3 | 2023年1月17日 |
0.3.0 |
|
0.2.1 | 2021年8月1日 |
0.1.2 | 2021年5月23日 |
#206 in 网络编程
每月471次下载
用于 3 crate
340KB
8K SLoC
zettabgp - BGP&BMP Rust库
这是一个为Rust编写的BGP和BMP协议驱动库。
BGP - 边界网关协议版本4。BMP - BGP监控协议版本3。
支持的BGP消息类型
- 打开
- 通知
- 保持活跃
- 更新
支持的BMP消息类型
- 初始化
- 终止
- PeerUpNotification
- 路由监控
支持的地址族NLRI(网络层可达信息)
- ipv4单播
- ipv4标签单播
- ipv4多播
- ipv4 mvpn
- ipv4 mdt
- vpnv4单播
- vpnv4多播
- ipv6单播
- ipv6标签单播
- ipv6多播
- ipv6 mdt
- vpnv6单播
- vpnv6多播
- vpls
- evpn
- flowspec ipv4
- flowspec ipv6
支持的路径属性
- MED
- 起源
- 本地优先级
- AS路径
- 社区
- 扩展社区
- 聚合AS
- 原子聚合
- 集群列表
- 发起者ID
- 属性集
- 连接器
- 一些PMSI隧道
用法
库允许您将协议消息(作为二进制缓冲区)解析到Rust数据结构以进行进一步处理。或从Rust数据结构生成有效的协议消息。因此,它可以在任何环境中(同步或异步)使用,以创建BGP RR、监控系统或BGP分析。
use zettabgp::prelude::*;
use std::io::{Read,Write};
let mut socket = match std::net::TcpStream::connect("127.0.0.1:179") {
Ok(sck) => sck,
Err(e) => {eprintln!("Unable to connect to BGP neighbor: {}",e);return;}
};
let params=BgpSessionParams::new(64512,180,BgpTransportMode::IPv4,std::net::Ipv4Addr::new(1,1,1,1),vec![BgpCapability::SafiIPv4u].into_iter().collect());
let mut buf = [0 as u8; 32768];
let mut open_my = params.open_message();
let open_sz = open_my.encode_to(¶ms, &mut buf[19..]).unwrap();
let tosend = params.prepare_message_buf(&mut buf, BgpMessageType::Open, open_sz).unwrap();
socket.write_all(&buf[0..tosend]).unwrap();//send my open message
socket.read_exact(&mut buf[0..19]).unwrap();//read response message head
let messagehead=params.decode_message_head(&buf).unwrap();//decode message head
if messagehead.0 == BgpMessageType::Open {
socket.read_exact(&mut buf[0..messagehead.1]).unwrap();//read message body
let mut bom = BgpOpenMessage::new();
bom.decode_from(¶ms, &buf[0..messagehead.1]).unwrap();//decode received message body
eprintln!("BGP Open message received: {:?}", bom);
}
Crates.io
https://crates.io/crates/zettabgp
文档
许可证
依赖关系
~46–250KB