Hi everyone,

The general problem I have is that I'm developing a feature for OVN. When a relevant packet arrives, I want to set some data and have that data available the entire time that the packet is being processed. My initial idea was to use one of reg0-reg9 for this. However, those register values get reset to 0 when the packet changes from the ingress to the egress pipeline and when the packet moves from one logical datapath to another.

My question is, is it possible (or acceptable) for me to use one of reg0-reg9 as a special purpose register and not to reset its value to 0 automatically? Or is there some other method that would be appropriate?



Here's a more detailed explanation of the problem. OpenShift is migrating from using their own custom use of OVS to using OVN (via ovn-kubernetes). One feature they currently offer is for any pod in a namespace to be able to send a multicast packet and have it reach all other pods in the same namespace. The actual multicast destination address is not important. This is on purpose so that separate namespaces can use the same multicast destination without the worry of collision. They want to maintain this feature when switching to OVN.

You may recall me talking about doing something like this quite some time ago, but the actual method has changed a bit since then.

My approach for implementing this is to create a new northbound table for multicast groups. This table contains a list of logical switch ports that represent members of the group. In ovn-northd, we do some magic to ensure that if any of these logical switch ports are on separate logical switches, then appropriate logical flows get installed so that the multicast packet attempts to traverse the logical router(s) that separate the logical switches.

When the packet initially arrives on a logical switch, we can use the logical input port, coupled with the multicast destination, to determine the multicast group that this packet should be sent to. However, once the packet reaches a logical router, there's nothing about the packet that we can use to determine which multicast group is the appropriate destination. Same thing occurs when the packet arrives in a logical switch from a logical router.

My idea for fixing this is to store the multicast group ID in a general-purpose register. But as stated above, if I set this value in a register, the register's value will get reset to 0 when the packet reaches the logical router pipeline. Hence my questions from the beginning.

Thanks everyone,
Mark Michelson
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to