This crate provide structs and functions to parse PCI TLP packets.
```rust use rtlplib::TlpPacket; use rtlplib::TlpFmt; use rtlplib::TlpType; use rtlplib::newmsgreq; use rtlplib::newconfreq; use rtlplib::newmemreq; use rtlplib::newcmpl_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.getheader(); // TLP Type tells us what is this packet let tlptype = header.gettlptype().unwrap(); let tlpformat = packet.gettlp_format();
// Get requesterid field from this TLP (TLP can be of different types) let requesterid; match (tlptype) { TlpType::MemReadReq | TlpType::MemReadLockReq | TlpType::MemWriteReq | TlpType::IOReadReq | TlpType::IOWriteReq | TlpType::FetchAddAtomicOpReq | TlpType::SwapAtomicOpReq | TlpType::CompareSwapAtomicOpReq => requesterid = newmemreq(packet.getdata(), &tlpformat).reqid(), TlpType::ConfType0ReadReq | TlpType::ConfType0WriteReq | TlpType::ConfType1ReadReq | TlpType::ConfType1WriteReq => requesterid = newconfreq(packet.getdata(), &tlpformat).reqid(), TlpType::MsgReq | TlpType::MsgReqData => requesterid = newmsgreq(packet.getdata(), &tlpformat).reqid(), TlpType::Cpl | TlpType::CplData | TlpType::CplLocked | TlpType::CplDataLocked => requesterid = newcmplreq(packet.getdata(), &tlpformat).reqid(), TlpType::LocalTlpPrefix | TlpType::EndToEndTlpPrefix => println!("I need to implement This Type: {:?}", tlptype), }
println!("Requester ID from This TLP Packet: {}", requester_id); ```
The documentation of the released version is available on doc.rs.
To generate current documentation please run cargo new docs --lib
Licensed under: