I’m trying to implement virtual network between two instances of the L4Linux. Moreover, each L4Linux has access to own ethernet controller. Genode hasn’t support two NIC drivers yet. It not work because each NIC try to use one IRQ and interrupt handler doesn't work correct. It can be solved by remapping PCI interrupts. The interrupt handler was temporarily moved to PCI driver. But it isn’t a good solution.
I have used a Nic interface for internal network drivers and I have implemented two drivers, the first driver has implementation Nic server and the second - Nic client. But I need one L4Linux would have two connection to different Nic session. As I understand it cannot be solved in current Genode implementation. For solve it I have made copy of the nic_session headers with announce Nic2 session name.
Part of my config:
...
<start name="l4linux.1">
<binary name="l4linux-srv"/>
<resource name="RAM" quantum="200M"/>
<config args="mem=128M console=tty1 console=ttyS0 l4x_rd=rootfs1.cpio.gz l4x_cpus=1 l4x_cpus_map=0"/>
<provides>
<service name="Nic2"/>
</provides>
<route>
<service name="Input"> <child name="linux.1"/> </service>
<service name="Framebuffer"> <child name="linux.1"/> </service>
<service name="Nic"> <child name="nic_drv.1"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="l4linux.2">
<binary name="l4linux-clnt"/>
<resource name="RAM" quantum="200M"/>
<config args="mem=128M console=tty1 l4x_rd=rootfs2.cpio.gz l4x_cpus=1 l4x_cpus_map=1"/>
<route>
<service name="Input"> <child name="linux.2"/> </service>
<service name="Framebuffer"> <child name="linux.2"/> </service>
<service name="Nic"> <child name="nic_drv.2"/> </service>
<service name="Nic2"> <child name="l4linux.1"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
...
I think it would be nice to have session name can be changed in the config like binary executable name and session name for connection can be specified at runtime. This may look like:
config: <provides> <service name=”Nic2” base_name=”Nic”/></provides>
and source: Nic::Connection nic(“Nic2”);
Is it possible? Maybe you have another solution?