All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
mctpdnow queries endpoints for their vendor-defined message support, and publishes as the newly-speccedVendorDefinedMessageTypesdbus property.
- mctpd's interface objects now expose the BusOwner1 interface when set as a BusOwner via the Role property
-
mctpdnow implements the Get Vendor Defined Message Support control protocol command, and allows registration of vendor-defined message types via dbus. -
mctpdwill now retry endpoint query commands (Get Message Type Support and Get Endpoint UUID) on initial endpoint enumeration. -
mctpdcan now poll for the presence of bridged endpoints once a bridge has been discovered and enumerated. Polling is implemented using a Get Endpoint ID command, at an interval configurable through theendpoint_poll_msconfiguration parameter within the bus-owner section. A value of0(the default) will disable polling.Once a bridged endpoint has been discovered, the endpoint will be enumerated, published on dbus, and polling will cease.
-
mctpd'sRegisterTypeSupportdbus method will no longer allow the VDM messaging types (0x7e and 0x7f) to be registered, as these do not make sense without a corresponding VDM type registration.Registering a VDM type will automatically include the corresponding VDM type in the Get Message Type Support response.
- Fixed
mctp-benchcompile on musl libc
-
mctpd: fixed an issue where endpoints may persist when their dependent interface is deleted
-
Header compatibility fixes for environments without a recent linux/mctp.h
-
Fixed a potential array overrun when dumping netlink change events
-
mctp-benchnow supports a "request receive" mode, wheremctp-bench recv eid <...>sends a command to start the benchmark session. -
mctpdnow supports a bus-owner configuration section -
Added documentation for
mctpd.confsettings -
mctpd's dynamic EID range is now configurable -
When in endpoint mode,
mctpdnow handles to Set Endpoint ID messages, assigning an EID to local interfaces. -
mctpdnow handles downstream MCTP bridges, which may request an EID pool from their Set Endpoint ID response. It will attempt an EID allocation from the dynamic range, and pass this to the bridge using a subsequent Allocate Endpoint IDs command. -
In endpoint mode,
mctpdnow supports the discovery process (Prepare for Endpoint Discovery -> Endpoint Discovery), where permitted by transport type. -
mctpdnow has a facility for applications to register support for MCTP message types. Those types are reported inmctpd's responses to Get Message Type Support and Get MCTP Version support commands. -
mctpd's Network1.LearnEndpoint method will now check for endpoint presence before publishing an endpoint.
-
Fixed an issue where peer pointers are kept over a potential realloc()
-
Netlink handling now handles interface deletion correctly; we no longer lose sync with the internal linkmap
-
When operating as a responder, mctpd now uses the correct instance id (IID) in the control protocol header
-
mctpdnow correctly handles error responses that contain only the CC, as permitted by the spec -
Ensure that
mctpderror response data is initialised
-
New debug tool,
mctp-bench, for sending and receiving a stream of MCTP messages between two processes. -
mctpd: Add
au.com.codeconstruct.MCTP.Network1interface, including- a
LocalEIDsproperty, representing the local EIDs assigned on this network - a
LearnEndpointmethod, for enumerating endpoints that already have an address assigned, and are routable
- a
-
tests: the fake mctp environment can now be run standalone, allowing experimentation with different system and network configurations
-
mctpd: Add a
NetworkIdproperty to theau.com.codecontruct.MCTP.Interface1interface, allowing link-to-network lookups -
mctpd: Better handling of strange cases of Set Endpoint ID responses, where the reported endpoint EID may either be different from expected, or invalid
-
New debug/test tool,
mctp-bench, for performing basic requests to MCTP endpoints, and printing their responses -
mctpnow supports gateway routes -
mctproute can add & delete range routes, using a - range format -
In-tree tests now include coverage for the
mctputility -
mctpdnow handles interface name changes, updating dbus objects to reflect new interface names.
-
tests are now run with address sanitizer enabled (-fsanitize=address)
-
mctp neighhardware address formatting is improved. -
mctp-benchnow reports at 2-second intervals rather than 10.
-
mctpd: Test mode (
-N) has been removed, as we have a more comprehensive test environment with the python mctpd wrapper code.To run using the wrapper:
(cd obj; python3 ../tests/mctpd/__init__.py) -
mctp-bench, mctp-req, mctp-echo: Message format has changed to use a vendor-defined message type, rather than MCTP type 1.
-
Fixed build on musl; we were relying on an implicit definition for
AF_MCTP -
Fixed some header includes where we were previously assuming a glibc layout
-
Fixed incorrect setup of peer message type data, where peer endpoints would report no types supported over dbus.
-
Interface objects (MCTP.Interface1) are now under au.com.codeconstruct prefix, to be consistent with the other interface names.
-
We now enforce IID checks on MCTP control protocol responses; this prevents odd behaviour from delayed or invalid responses.
-
In mctpd the initial route MTU for an endpoint is now set to the minimum MTU of the interface. This allows better compatibility with devices that have a low initial allowed packet size and require application negotiation to increase that packet size. Previously the initial MTU was left as the interface default (normally the maximum MTU). The .SetMTU method can be used to set the endpoint route MTU.
-
Hardware address formatting has been improved in cases where the address size is something other than a 1-byte value.
- mctpd: Add support for endpoint recovery
- mctpd: Allow recovery of devices reporting a nil UUID for development
- mctpd: Allow configuring .Connectivity as writable for development
- mctpd: Add AssignEndpointStatic for static EID allocations
- mctpd: New test infrastructure for control procotol messaging to mctpd
- mctpd: Add a configuration file facility, defaulting to /etc/mctpd.conf.
- mctpd: Add mctp/interfaces/ D-Bus object
-
dbus interface: the NetworkID field is now a
urather than ani, to match OpenBMC's MCTP endpoint specification -
Use Github Actions for CI
Note that this bumps the meson requirement from >=0.47.0 to >=0.59.0. The bump allows us to exploit some features helpful for chaining the solution together.
-
The
testsoption has changed type fromfeaturetoboolean. Tests are enabled by default. -
The dbus interface has undergone a major rework, using standard prefixes and version interface, bus owner and entry-point object names. See docs/mctpd.md for full details on the new interface.
-
In line with the above, bus-owner related dbus methods (SetupEndpoint and friends) now exist on the MCTP interface objects, and only when those interface objects have the bus owner role. Because those methods are now associated with the interface object, they no longer take the interface name as their first argument.
-
mctpd: EID assignments now work in the case where a new endpoint has a pre-configured EID that would conflict with other (already enumerated) endpoints. The new endpoint will get a non-conflicting address assigned.
-
mctpd: fix incorrect error detection on control socket reads