On Tue, Jun 23, 2015 at 05:03:16PM -0300, Thadeu Lima de Souza Cascardo wrote: > Add support for MLDv1 and MLDv2. The behavior is not that different from > IGMP. Packets to all-hosts address and queries are always flooded, > reports go to routers, routers are added when a query is observed, and > all MLD packets go through slow path. > > Signed-off-by: Thadeu Lima de Souza Cascardo <casca...@redhat.com>
Thanks! This is quite nice. I think that this ought to update NEWS to mention the new feature. mld2_record should probably use ovs_16aligned_in6_addr, because corner cases can cause OVS userspace to process IPv6 packets that are on odd 16-bit boundaries. OVS coding style calls for {} around the function calls here: @@ -2073,12 +2106,17 @@ update_mcast_snooping_table(const struct xbridge *xbridge, break; } } if (!mcast_xbundle || mcast_xbundle != in_xbundle) { - update_mcast_snooping_table__(xbridge, flow, ms, flow->igmp_group_ip4, - vlan, in_xbundle, packet); + if (flow->dl_type == htons(ETH_TYPE_IP)) + update_mcast_snooping_table4__(xbridge, flow, ms, + flow->igmp_group_ip4, vlan, + in_xbundle, packet); + else + update_mcast_snooping_table6__(xbridge, flow, ms, vlan, + in_xbundle, packet); } ovs_rwlock_unlock(&ms->rwlock); } /* send the packet to ports having the multicast group learned */ Also here around the assignments: @ -2328,11 +2384,14 @@ xlate_normal(struct xlate_ctx *ctx) } } /* forwarding to group base ports */ ovs_rwlock_rdlock(&ms->rwlock); - grp = mcast_snooping_lookup4(ms, flow->nw_dst, vlan); + if (flow->dl_type == htons(ETH_TYPE_IP)) + grp = mcast_snooping_lookup4(ms, flow->nw_dst, vlan); + else if (flow->dl_type == htons(ETH_TYPE_IPV6)) + grp = mcast_snooping_lookup(ms, &flow->ipv6_dst, vlan); if (grp) { xlate_normal_mcast_send_group(ctx, ms, grp, in_xbundle, vlan); xlate_normal_mcast_send_fports(ctx, ms, in_xbundle, vlan); xlate_normal_mcast_send_mrouters(ctx, ms, in_xbundle, vlan); } else { and I see a couple more examples in mcast_snooping_add_mld(). I think the loop in mcast_snooping_add_mld() will loop forever if it hits an unknown record type. Also in mcast_snooping_add_mld(), I'd usually either write htons(0) in a case like this because GCC optimizes it better: + if (ntohs(record->nsrcs) == 0 I am looking forward to v2! _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev