This repo contains an attempt at making an MCTP Endpoint in Rust. This project was inspired by a need to enable automated testing of the MCTP framework within OpenBMC.
Here are the current design requirements:
- Support Simple and Dynamic (bus owners and bridges) Endpoints
- Support all control messages (mostly a requirement to be a bus owner).
- Create a pluggable Physical Transport layer to allow any physical interface to be used (E.g. Aardvark I2C adapter, or local TTY port).
- Allow network to be defined in some configurable manner (e.g. # of endpoints and network configuration).
- Capture meaningful metrics about runtime to facilitate automated test requirements (E.g. report # of detected endpoints, # of control messages received, # of invalid commands received, did discovery complete successfully, any dropped packets, ...).
This is a non-exhaustive list of things that I want to track. This is not everything that needs to be done. Just a list of interesting (novel) ideas on what needs to be done.
- Switch
mctp-emu-lib
to usingthiserror
for better error encapsulation - Find a better solution for displaying bitfield structures. Might need 2 structures and an automatice
From
interface to hide this behind the scenes. Ultimately, want to take advantage of all type hints to aid development but still serialize into the correct wire representation. - Support in-kernel networks
- Support TTY physical transports
- Support running on a RaspberryPi I2C bus (see
rppal
). - Support a Aardvark I2C Adapter
- Support a Prodigy I3C Adapter
- Develop an FPGA SPI-to-I3C and/or USB-to-I3C bridge and support it as an Adapter (connect SPI to rPi?).