Skip to content

Design Note: Need to think about multi-network systems in the media layer and transport layer #428

@thirtytwobits

Description

@thirtytwobits

This isn't immediately important. I'm okay with starting with a 1.0 that does not properly support multiple networks though we should watch for places where we might be inhibiting them. Also note that this is not an issue for redundant connections as such connections should be supported in libcyphal for CAN and should be handled by lower layers for UDP (see 802.1 CB). One exception to the latter will be support for 10baseT1S multi-drop but this solution can borrow from our CAN transport design given that the two technologies are quite similar. Indeed, this is probably easily supportable using libcyphal::transport::redundant and some minor modifications to the udp media layer.

It's unclear how a future evolution of libcyphal will support multiple networks with either a mix of CAN and Ethernet, with only one transport type but multiple interfaces, or with a mix of both. This issue will record a discussion for future design work.

Mixed Transports

The problem of mixed media could be punted by saying that libcyphal does not intend to support multiple networks at once but can work by instantiating the library in multiple threads/tasks/processes where each instance used a different transport. Indeed, this area is undefined by the Cyphal specification and the maintainers have discussed solutions involving transporting Cyphal on top of other protocols as a possible recommendation. This would fix Cyphal as a point-to-point or point-to-bus protocol only that did not address routing functions between networks.

Single Transport, Multiple Networks

There are a few ways to look at configurations including multiple networks. One is to consider heterogeneous redundancy which might "just work™" if the latencies aren't too great between the two. Another is more likely and is clearly not considered in the current design: different networks for different nodes. This is almost a routing problem except one could draw the line at bridging and only specify support for segmentation. That is, we might support systems where a map of node identifiers to networks is used when selecting the appropriate endpoint for publication, multi-plexing subscriptions, and tracking RPC transactions. This means NodeID becomes multi-keyed to be NodeID+networkID.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions