Hi everyone,
In today's IRC meeting I brought up the fact I was enhancing multicast
support in OVN, and I was asked to expand on this a bit. So here are
details about what all I am working on.
Right now, OVN logical switches treat all multicast destinations as if
they were broadcast. That is, the packet gets sent to all ports on the
switch. OVN logical routers block all traffic destined to a multicast
address.
My goal is for there to be more intelligence. IP traffic sent to
multicast addresses should be sent to members of that multicast group
when possible.
My work consists of the following phases:
Phase 1: Northbound changes; multicast on a single logical switch port.
For this part, we create a new northbound table called Multicast_Group.
It consists of:
* A name
* A multicast IP address
* A list of logical switch ports
The general idea is that traffic sent to the IP address should reach all
logical switch ports listed.
In practice, each northbound multicast group will result in southbound
multicast groups being added to the datapaths that the logical switch
ports reside on. Logical flows are introduced on the logical switch
ingress pipelines to output packets that are destined for the multicast
IP address and the corresponding derived multicast ethernet address [1]
to the constituent ports.
In practice, this set of changes only works if all ports in the
multicast group are on the same logical switch.
I already have this implemented and have a test written for the
testsuite that passes. You can see what I have at
https://github.com/putnopvut/ovs/tree/multicast-improvements
Phase 2: Add multicast routing support
This expands on the work in phase 1 by creating southbound multicast
groups on logical router datapaths for router ports connected to logical
switches with multicast groups on them. This way, a multicast group
distributed across multiple logical switches can have the traffic routed
as desired.
This also requires adding new logical flows for the router pipeline to
ensure that traffic bound to known multicast IPs is sent where we expect.
I'm currently working on this phase. I have a test written and it is not
passing.
Phase 3: Expand to IPv6 support.
The previous phases are very IPv4-centric. This phase expands on what we
have already by making it work with IPv6 as well. Mostly, this means
removing IPv4-centric idioms and installing IPv6 flows in parallel with
the IPv4 flows.
With those three phases complete, I think I'll have a decent patchset to
submit for approval. There are other enhancements that can be
implemented as well later on:
* IGMP/MLD snooping in ovn-controller.
* Installation of rules for well-known multicast addresses with semantic
significance.
That's all for that. If you have questions/concerns, please let me know.
Mark!
[1] I initially had wanted to only use the multicast ethernet address
for determining where to send the packets. However, the way that
multicast IP translates into multicast ethernet addresses, there can be
ambiguity. Therefore the logical switch needs to also examine the
multicast IP address.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev