Subject: [pim] Snooping switches, RFC4541 and unspecified/zero IP source addresses for queries

From: Linus Lüssing <[email-masked]>
Date: Sun, 16 Jun 2013 07:30:11 +0200

Hi,

I'm currently wondering about the implications of a subtle
difference between MLDv1/v2 and IGMPv2/v3:

While IGMP seems to have no problem with an all-zeroes IPv4 source
address for a Query message, MLD specifically dissallows sending
or processing any Query with an unspecified IPv6 source address
(::) (RFC2710, section 6, "query received from a router with a
lower IP address"; RFC3810, section 5.1.14).

I'd therefore conclude, that for one thing an MLD snooping switch
may only either perform its snooping and dropping of packets if it
is capable of acting as a proper Querier (which means it must not
if it has no link-local IPv6 address configured). Or if it is not
able to act as a proper Querier then only if it detected a proper
Querier on the link.

I'd further conclude that RFC4541, section 2.1.1.1b) does
not apply for IPv6 because a snooping switch may send valid MLD
Queries, too, not just multicast routers, and would end up
receiving multicast data it might not be interested in.

This would however also mean, that if an MLD snooping switch is
not capable of performing MRD according to RFC4286 then it may not
perform any snooping and dropping of packets with multicast
destination of scope greater than link-scope.

(Or, alternatively if we wanted to adhear to RFC4541, section
2.1.1.1b) for IPv6, too, then we must not perform any querying at
all and must stop any snooping and dropping if there is no proper
Querier on the link - more on that below.)

For IPv4 I'm not quite sure what to conclude yet. Does it mean
that an IGMP snooping switch:

a) Must never perform any querying and must not perform any
snooping and dropping if it did not detect any Querier on the
link because we would not get any periodic reports.
(with the downsides of flooding multicast packets and possible
delays when activating ports)

b) Must perform querying with a zero-source IPv4 address only.
   (with the downside of possibly having a noisy link due to many
   zero-source queries if there are multiple IGMP snooping switches
   on a link)
b.1) And must detect other, valid queriers and must refrain from
     querying if it detected one.
b.2) And should detect other, valid queriers and should refrain
     from querying if it detected one.

c) RFC4541, section 2.1.1.1b) should be ignored and an IGMP snooping
   switch should behave like the MLD snooping switch described
   above (except that it must not snoop and drop any IPv4
   link-local multicast packets, packets from the 224.0.0.x range,
   due to RFC4541, section 2.1.2.2); and that it must not perform
   any snooping and dropping if it is not capable of performing MRD).
   (which doesn't seem to have any downsides other than violating
   an informational RFC?)

Note that an option d) with an IGMP snooping switch performing a
proper, valid IGMP Querier protocol (so with a non-zero IPv4
source address) - which would not have the downside of a)/b)/c) -
together with RFC4541, section 2.1.1.1b) is not possible as we might
become a black hole for multicast data which is supposed to get
routed.

I'd be very interested in hearing what others think, which of
the stated conclusions and options are correct or wrong, or if
there are more. And which of them should be prefered.

Cheers, Linus