3个版本 (破坏性更新)
0.3.0 | 2022年8月27日 |
---|---|
0.2.4 | 2022年8月19日 |
0.2.2 |
|
0.1.0 | 2022年2月10日 |
#145 in #长度
在 rugged 中使用
165KB
4.5K SLoC
rl2tp
L2TP协议的Rust实现。
lib.rs
:
L2TP协议的Rust实现。该包提供了一套完整的协议消息,用于进行L2TP通信,以及一些用于读取和写入这些消息的实用特性。
示例
从缓冲区中读取L2TP数据
use rl2tp::{Message, common::SliceReader};
let buffer = vec![
0x13, 0x20, // Flags
0x00, 0x14, // Length
0x00, 0x02, // Tunnel ID
0x00, 0x03, // Session ID
0x00, 0x04, // Ns
0x00, 0x05, // Nr
// AVP Payload
0x00, 0x08, // Flags and Length
0x00, 0x00, // Vendor ID
0x00, 0x00, // Attribute Type (Message Type)
0x00, 0x01, // Type 1 (StartControlConnectionRequest)
];
let mut r = SliceReader::from(&buffer);
let msg = Message::try_read(&mut r).unwrap();
match msg {
Message::Data(_) => (),
Message::Control(_) => (),
}
将L2TP控制消息写入 Vec
use rl2tp::{Message, common::VecWriter, avp::{AVP, types::MessageType}};
let mut w = VecWriter::new();
let msg = Message::<Vec<u8>>::Control(rl2tp::ControlMessage {
length: 0,
tunnel_id: 5,
session_id: 0,
ns: 0,
nr: 0,
avps: vec![
AVP::MessageType(MessageType::StartControlConnectionConnected),
],
});
unsafe { msg.write(&mut w) };
将L2TP数据消息写入缓冲区
use rl2tp::{Message, common::VecWriter};
use core::borrow::Borrow;
let data = vec![0xde,0xad,0xbe,0xef];
let mut w = rl2tp::common::VecWriter::new();
let msg = rl2tp::Message::Data(rl2tp::DataMessage {
is_prioritized: false,
length: None,
tunnel_id: 5,
session_id: 0,
ns_nr: None,
offset: None,
data: data.borrow(),
});
unsafe { msg.write(&mut w) };
Cargo功能
benchmarks
- 启用基准测试,使用 criterion.rs。
依赖项
~2–12MB
~131K SLoC