#lib #pci #req #byte #packet #rtlp #tlp

rtlp-lib

此库提供了解析PCI TLP的结构

3个不稳定版本

0.2.2 2023年2月18日
0.2.0 2023年2月18日
0.1.0 2022年7月15日

#1055数据结构

BSD-3-Clause

34KB
610

Rust TLP库

这个crate提供了解析PCI TLP数据包的struct和函数。

示例

use rtlp_lib::TlpPacket;
use rtlp_lib::TlpFmt;
use rtlp_lib::TlpType;
use rtlp_lib::new_msg_req;
use rtlp_lib::new_conf_req;
use rtlp_lib::new_mem_req;
use rtlp_lib::new_cmpl_req;

// Bytes for full TLP Packet
//               <------- DW1 -------->  <------- DW2 -------->  <------- DW3 -------->  <------- DW4 -------->
let bytes = vec![0x00, 0x00, 0x20, 0x01, 0x04, 0x00, 0x00, 0x01, 0x20, 0x01, 0xFF, 0x00, 0xC2, 0x81, 0xFF, 0x10];
let packet = TlpPacket::new(bytes);

let header = packet.get_header();
// TLP Type tells us what is this packet
let tlp_type = header.get_tlp_type().unwrap();
let tlp_format = packet.get_tlp_format();

// Get requester_id field from this TLP (TLP can be of different types)
let requester_id;
match (tlp_type) {
     TlpType::MemReadReq |
     TlpType::MemReadLockReq |
     TlpType::MemWriteReq |
     TlpType::IOReadReq |
     TlpType::IOWriteReq |
     TlpType::FetchAddAtomicOpReq |
     TlpType::SwapAtomicOpReq |
     TlpType::CompareSwapAtomicOpReq => requester_id = new_mem_req(packet.get_data(), &tlp_format).req_id(),
     TlpType::ConfType0ReadReq |
     TlpType::ConfType0WriteReq |
     TlpType::ConfType1ReadReq |
     TlpType::ConfType1WriteReq => requester_id = new_conf_req(packet.get_data(), &tlp_format).req_id(),
     TlpType::MsgReq |
     TlpType::MsgReqData => requester_id = new_msg_req(packet.get_data(), &tlp_format).req_id(),
     TlpType::Cpl |
     TlpType::CplData |
     TlpType::CplLocked |
     TlpType::CplDataLocked => requester_id = new_cmpl_req(packet.get_data(), &tlp_format).req_id(),
     TlpType::LocalTlpPrefix |
     TlpType::EndToEndTlpPrefix => println!("I need to implement This Type: {:?}", tlp_type),
}

println!("Requester ID from This TLP Packet: {}", requester_id);

文档

已发布版本的文档可在doc.rs上找到。要生成当前文档,请运行 cargo new docs --lib

许可证

许可证下

  • 3条款BSD许可证

依赖关系

~48KB