Open source platform communication with MCTP

Main Room,

The Management Controller Transport Protocol (MCTP) defines a mostly-hardware-neutral way of messaging between components of an embedded platform. There has been a lot happening in MCTP support for Linux recently, as well as infrastructure and libraries for use in non-Linux embedded systems too.

This talk covers the current status of MCTP support in the upstream Linux kernel, what hardware transport options are available, plus other facilities useful for incorporating MCTP into an open source firmware stack.

MCTP gives us a fairly lightweight protocol definition, which can be abstracted to a range of different hardware packet transports. This gives us a convenient way to implement message-based communication between components of an embedded system, handling endpoint addressing, message fragmentation and reassembly, request-to-response correlation and multiplexing different upper-layer protocols.

While this is mainly targeted for "management controller" platforms - typically a Baseboard Management Controller (BMC) and the devices it manages - the lower-layer protocol is suitable for carrying messages of any type. This could be handy for all sorts of embedded communication mechanisms!

Linux kernel support for MCTP landed in v5.15, providing a simple sockets-based interface to MCTP messaging with platform devices. Since then, new features and hardware transports have been added, allowing MCTP communication over i2c, serial and i3c, with some new transports landing soon.

There are also a number of other projects that provide support for MCTP - including userspace utilities for the kernel stack, upper-layer protocols that use MCTP for messaging, userspace MCTP stacks, and repositories suited for lower-level embedded MCTP implementations.

This talk will provide a brief overview of MCTP, and the current status of support for MCTP in the open source ecosystem, some implementation hints, and some quirks to be aware of along the way.

Resources: