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

Vernon Mauery vernon.mauery at linux.intel.com
Fri Oct 13 08:41:15 AEDT 2017


On 12-Oct-2017 12:37 PM, Brad Bishop wrote:
> 
> > 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.

I think multiple queues might work out fine then. They do seem to have 
some compelling advantages. But I would like to at least consolidate the 
queueing portion of the code so all the queues have the same bugs.

> >>>  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. 

I think we could have as many queues as we want. I would vote for one 
per interface so that the interface information can be passed in via the 
context data to the handler.

--Vernon


More information about the openbmc mailing list