phosphor-host-ipmid and phosphor-net-ipmid architecture

Brad Bishop bradleyb at fuzziesquirrel.com
Fri Oct 13 03:37:51 AEDT 2017


> On Oct 12, 2017, at 12:25 PM, Xo Wang <xow at google.com> wrote:
> 
> On Thu, Oct 12, 2017 at 9:03 AM, Brad Bishop
> <bradleyb at fuzziesquirrel.com> wrote:
>> 
>>> On Oct 11, 2017, at 6:05 PM, Vernon Mauery <vernon.mauery at linux.intel.com> wrote:
>>> 
>>> I am working on an ipmi provider library and had a few questions and
>>> observations.
>>> 
>>> 1) Why are there separate ipmi message queues for the host and network?
>> 
>> iirc it was so that you could have a different set of providers
>> registered for each channel or even different, channel specific
>> implementations for the same command.
>> 
> 
> The reasoning here also derives from the "build the distro as you like
> it" approach. If you don't want a network interface to the BMC, then
> you can simply not build it or its handlers.
> 
> Of course we could write a single queue service for both host and
> network that can be configured and built to support only one, but that
> puts the onus on architecting and testing that service to ensure the
> all three configurations all work independently.

Another possible advantage for multiple queues might be cgroups prioritization.

> 
>>>  It seems awkward that for the host, the ipmi request comes from a
>>>  different process (btbridge, or in our case kcsbridge), while for the
>>>  network (RMCP+), the messages are handled directly in the same
>>>  process.
>> 
>> Is it still awkward if you accept the two queue approach?  The
>> additional layer is needed for the bt/kcs -> host-ipmid
>> abstraction.  No such abstraction is needed for network.
>> 
>>> 
>>>  It seems that the network handler could just as easily package the
>>>  command up and send it to ipmid the same way that btbridge does.
>>> 
>>> 2) Can we modify the signature of the handlers so that they can behave
>>>  in a more intelligent manner? It would be nice if they were handed a
>>>  gsl::span<uint8_t> instead of a void* and a length. This allows for
>>>  a no-copy, bounds-checked way of passing buffers.
>> 
>> sounds good to me!
>> 
> 
> We can use more intelligent (safer) data passing throughout phosphor code. :)
> 
>>> 
>>>  It would be nice to know what channel something came in on. We might
>>>  want to be able to change behavior based on the incoming channel (as
>>>  some channels are more secure than others).
>> 
>> I think the separate message queues solves this need; however, doing
>> this need not be mutually exclusive of having separate queues if that
>> enables another use case we don’t support today.
>> 
>> I’m not totally stuck on two queues.  Especially if some alternative
>> maintains the same level of flexibility.  The motivation for a single
>> queue isn’t clear yet to me though - without more discussion it sounds
>> like we’d end up with the same capability we already have…so why bother?
>> 
> 
> One set of cases is where a host might have multiple interfaces to the
> BMC (e.g. BT and SSIF).

What about three queues here?  (bt, ssif and rmcp)?  It would require
some rework of the bt/ssif/kcs -> host-ipmid interface to support multiple
host-ipmid instances. 


More information about the openbmc mailing list