3个版本 (破坏性更新)

0.3.0 2022年8月27日
0.2.4 2022年8月19日
0.2.2 2022年6月28日
0.1.0 2022年2月10日

#145 in #长度


rugged 中使用

MIT 许可证

165KB
4.5K SLoC

rl2tp

L2TP协议的Rust实现。

Build, Lint and Test


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功能

依赖项

~2–12MB
~131K SLoC