ORe currently only partially supports shared-memory communication. This will be improved for future releases.
Currently, it is possible to hand over packets between client and server using the DROPS Streaming interface (DSI). To use DSI, you need to re-build ORe with make USE_DSI=y and link your client applications with the DSI client library.
Shared memory can be used for simple sending and receiving of packets. However, there are some drawbacks, because features are still not implemented and the DSI library does not fit our needs very well.
- Your application must be aware of the shared-mem communication and act upon it. That's why adding this feature to the L4Linux device driver is very hard - the whole L4Linux skb allocation would need to handle L4 dataspaces.
- Some shared-memory features have not been implemented yet (for instance sending a packet from a shared-mem ORe client to a local string IPC client).
- If the ring buffer is full and the client does not receive a packet thereby returning a free buffer, it is impossible to add further packets. Therefore it is not possible to overwrite old packets with new ones as in the string IPC case.
- Someone needs to care for the management of the data area. The first implementation of ORe and DSI will rely on the data area being managed correctly by the client.
- The ORe client lib supports timeouts for blocking receive operations. This is easy for string IPC connections, but handling is difficult with DSI. The ORe+DSI therefore only supports blocking receive() with an infinite timeout at the moment.