Customizing the Goa run-stage

Johannes Schlatow johannes.schlatow at genode-labs.com
Wed Jun 21 14:47:27 CEST 2023


Hi Pirmin,

thanks for your feedback and for sharing your ideas...

On 21/06/2023 11:19, Duss Pirmin wrote:
> Hello Genodians
> 
> The direction Goa is evolving is really cool! The new and upcoming 
> features address topics that are perfectly aligned with how we currently 
> use, or plan to use Goa.
> 
> In addition to what is already addressed in issue #44 [1], in order to 
> run or test some more complex projects we use:
> 
>   - a source for random (this can be achieved using jitter_sponge)
>   - accessing externally provided ROM modules
>   - multiple Nic/uplink interfaces and a nic_router
> 
> 
> For the random source I have a working commit, that I will have to 
> update to cleanly apply on top of staging. This will start jitter_sponge 
> if <requires> <terminal label="random"/> is found. To make this 
> available in general, the jitter_sponge binary would have to be 
> published by genodelabs. Do you think this approach is reasonable?

In principle, such extensions are reasonable. In the case of 
jitter_sponge, however, this would mean that we needed to make the Goa 
release dependent on the genode-world repo. I would rather avoid this.

> For accessing externally provided ROM modules I already have a patch 
> that enables this feature. It uses a fs_rom and a lx_fs to access ROM 
> modules listed in  <requires> <rom label=""/>. If you think this could 
> be a commonly useful feature, I can contribute it.

I could imagine this to become useful for running multiple Goa 
instances. I particularly have the 'clipboard' ROM (and Report) in mind. 
Even though running multiple Goa instances is not an established use 
case (yet), routing unrecognized ROM modules to lx_fs instead of to the 
black-hole component would not be much of a difference for the naive 
user. In return, we gain the ability to change ROM content at runtime 
for development/testing. Combined with a similar setup for the Report 
service, this would basically provide a report_rom functionality that we 
can easily introspect.

 From my perspective: I'd appreciate your contribution ;-)
> Providing multiple Nic/Uplink interfaces and a nic_router will require 
> some more engineering to do right. Our workaround instantiates a fixed 
> configuration which matches what we need. This is obviously not usable 
> in general. I see the following points that need to be considered:
> 
>   - number and names of interfaces? Probably each listed in <requires> 
> by label.

Currently (i.e. with #44), Goa uses the label as the name of the tap 
device. Do we agree that, if multiple <nic/> requirements exists, Goa 
should instantiate several nic_drv components and provide separated 
networks?

>   - when to start nic_router? Probably not as easy as start it when 
> multiple interfaces are configured.

For a <nic/> requirement, the nic_router is always instantiated because 
only the latter provides this service whereas the nic_drv acts as an 
Uplink client. When multiple nic drivers will be instantiated (i.e. 
separate networks are required), we could also have multiple instances 
of the nic_router.

>   - how should the nic_router config be provided? Here I don not see yet 
> a satisfying and practical solution.

For customising the nic_router config, I would go for integrating the 
nic_router into the pkg's runtime and, instead of using <nic/> 
requirements, let the pkg provide a couple of <uplink/> services. This 
would instruct Goa to instantiate multiple nic drivers (currently 
restricted to one driver) as Uplink clients.

Cheers
Johannes



More information about the users mailing list