NVIDIA/mctp
C
Captured source
source ↗NVIDIA/mctp
Description: Userspace tools for MCTP stack management
Language: C
License: GPL-2.0
Stars: 5
Forks: 1
Open issues: 0
Created: 2025-11-04T17:41:45Z
Pushed: 2026-06-10T18:07:55Z
Default branch: develop
Fork: no
Archived: no
README: mctp: Userspace tools for MCTP stack management ===============================================
This project contains two utilities for running a MCTP network from the local machine:
mctp: A small command-line utility to query and manage the state of the
kernel MCTP stack, in a similar way to iproute2's ip utility.
mctpd: A daemon implementing the MCTP control protocol; you'll need this
for the local host to perform as a bus-owner. The main function of mctpd is to assign EIDs to remote endpoints, and manage the resulting routes and neighbour-table entries for those endpoints.
Building & installing ---------------------
This project uses meson for building. To configure and compile:
$ meson setup obj $ ninja -C obj
to install to the default prefix (/usr/local), with optional DESTDIR:
$ meson install -C obj
For integration with systemd, there are a few example configuration files and systemd target definitions under the conf/ directory. These are not installed by default.
By default, meson is configured to enable tests, which requires a few extra dependencies (mainly pytest, python libraries, and dbus-run-session). In cases where the tests are not required, you can avoid these dependencies by configuring the build tree with -Dtests=false:
$ meson setup obj -Dtests=false
mctp Usage -------------
Use mctp help for the list of available commands:
$ mctp help mctp link mctp link show [ifname] mctp link set [up|down] [mtu ] [network ] [bus-owner ]
mctp address mctp address show [IFNAME] mctp address add dev mctp address del dev
mctp route mctp route show [net ] mctp route add [-] via [mtu ] mctp route add [-] gw [net ] [mtu ] mctp route del [-] via mctp route del [-] gw [net ]
mctp neigh mctp neigh show [dev ] mctp neigh add dev lladdr mctp neigh del dev
mctpd Usage -------------
mctpd should be run as a system service, once the local MCTP stack has been configured (ie., interfaces are enabled, and local addresses have been assigned). There are two sample systemd unit files under the conf/ directory, to coordinate the local setup and the supervision of the mctpd process.
mctpd can read some basic configuration from a file, by default /etc/mctpd.conf, but other files can be specified with the -c FILE argument. An example configuration is in [conf/mctpd.conf](conf/mctpd.conf).
The mctpd daemon will expose a dbus interface, claiming the bus name au.com.codeconstruct.MCTP1 and object path /au/com/codeconstruct/mctp1.
Each detected MCTP interface on the system provides a few functions for configuring remote endpoints on that bus:
busctl introspect au.com.codeconstruct.MCTP1 /au/com/codeconstruct/mctp1/interfaces/mctpi2c1
NAME TYPE SIGNATURE RESULT/VALUE FLAGS au.com.codeconstruct.MCTP.Interface1 interface - - - .AssignEndpoint method ay yisb - .AssignEndpointStatic method ayyay yisb - .LearnEndpoint method ay yisb - .SetupEndpoint method ay yisb -
Results of mctpd enumeration are also represented as dbus objects, using the OpenBMC-specified MCTP endpoint format. Each endpoint appears on the bus at the object path:
/au/com/codeconstruct/mctp/networks//endpoints/
where mctpd exposes three dbus interfaces for each:
xyz.openbmc_project.MCTP.Endpoint: Provides MCTP address information
(EID and NetworkID properties) and message-type support SupportedMessageTypes property).
This interface is defined by the MCTP.Endpoint phosphor-dbus specification.
xyz.openbmc_project.Common.UUID: MCTP UUID of the discovered endpoint
(UUID property).
This interface is defined by the Common.UUID phosphor-dbus specification.
au.com.codeconstruct.MCTP1.Endpoint1: Additional control methods for the
endpoint - for example, Remove
Testing -------
We have an initial test suite under tests/. To run:
meson setup obj ninja -C obj test
Alternatively, you can run pytest directly; this may be more useful during development:
cd obj pytest ../tests
To run without an existing dbus session:
dbus-run-session env DBUS_STARTER_BUS_TYPE=user pytest ../tests
The test infrastructure depends on a few python packages, including the pytest binary. You can use a python venv to provide these:
python3 -m venv venv venv/bin/pip install -r tests/requirements.txt
Then run the tests using the new venv's pytest:
PATH=$PWD/venv/bin/:$PATH meson setup obj ninja -C obj test
Excerpt shown — open the source for the full document.