Re: MCTP Null EID - Physical addressing support - Binding private in API

Andrew Jeffery andrew at aj.id.au
Mon Jul 6 13:13:04 AEST 2020



On Fri, 5 Jun 2020, at 12:53, Thomaiyar, Richard Marian wrote:
> Thanks Andrew, 
> 
> inline comments. Captured this as an agenda for our next work group 
> call discussion https://github.com/openbmc/openbmc/wiki/OpenBMC-PMCI-WG

I noted in another thread that I've pushed patches implementing bridging and 
routing along with the provisional EID concept to gerrit:

https://gerrit.openbmc-project.xyz/q/topic:%2522routing%2522+(status:open+OR+status:merged)+project:openbmc/libmctp

In the end the implementation uses a "provisional" flag in both the mctp_eid_t 
type and the route table as there was one race that couldn't be safely 
eliminated without it.

> 
> [Richard]: We 
> can't know which EID can be used as provisional. It may be real EID in 
> a bridged network. Please educate me, if the same can be achieved 
> without having a conflict. 

Because the conflict shouldn't matter - it can be detected by the binding 
receiving the message by looking up the source EID in the route table and 
checking if the result is a provisional EID.

However, the complication occurs when trying to remove the provisional EID from 
the route table in order to deliver the message received from the endpoint that 
has been formally allocated the same EID. If there's an outstanding command 
whose response hasn't yet been sent which will need the provisional EID entry 
from the table in order for the message to be routed, we can't deliver the 
message received from the endpoint which is non-provisionally assigned the EID. 
It's hard to unwind that properly and still account for issues like deadlocks 
or application crashes which will lead to a denial of service.

So the result is we have a route table with two separate address spaces, one 
for formally assigned EIDs and another for provisional EIDs. This partition is 
managed by a flag on the route table entries in the current implementation.

Andrew


More information about the openbmc mailing list