Subject: HBH Obsolete? (was Review of draft-ietf-6man-hbh-header-handling-01)

From: "Tim Martin (tmartin)" <[email-masked]>
Date: Thu, 24 Mar 2016 21:36:14 +0000

MLD requires the HBH with the router alert flag set

---

From: Brian Haberman <[email-masked]>
Date: Fri, 25 Mar 2016 09:11:09 -0400

Hi Tim,

> MLD requires the HBH with the router alert flag set

Actually, it doesn't from what I have seen. The implementations I am
aware of receive the MLD message because their interface(s) are
configured to receive all multicast-addressed packets. They process the
MLD messages because they recognize the ICMPv6 Type value as being an
MLD message.

Given my history of work in this area, I would be interested in knowing
of any implementation that actually relies on the Router Alert option to
process MLD messages.

Regards,
Brian

> 
> 
> 
> --------------------------------------------------------------------
> IETF IPv6 working group mailing list
> [email-masked]
> Administrative Requests: https://www.ietf.org/mailman/listinfo/ipv6
> --------------------------------------------------------------------
>

---

From: 神明達哉 <[email-masked]>
Date: Mon, 28 Mar 2016 13:21:26 -0700

At Fri, 25 Mar 2016 09:11:09 -0400,

> of any implementation that actually relies on the Router Alert option to

I guess the main concern is commercial routers, but as far as I can
remember/see the kernel implementation of (some) BSD variants checks
the existence of the router alert option.  This is a code excerpt of
the NetBSD implementation:

    /*
     * Multicast check
     */
    if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
...
        IN6_LOOKUP_MULTI(ip6->ip6_dst, m->m_pkthdr.rcvif, in6m);
        if (in6m)
            ours = 1;
...
    }
...
    if (ip6->ip6_nxt == IPPROTO_HOPOPTS) {
        if (ip6_hopopts_input(&plen, &rtalert, &m, &off)) {
...
        /*
         * accept the packet if a router alert option is included
         * and we act as an IPv6 router.
         */
        if (rtalert != ~0 && ip6_forwarding)
            ours = 1;
...
    }

So unless the node explicitly joins the specific multicast group
(IN6_LOOKUP_MULTI() succeeds) or it finds a router alert option in a
Hop-by-Hop options header, the kernel ignores the packet (as 'ours'
remains to be 0).

>From a quick look, recent FreeBSD implementations have removed the group
check and it seems to always accept any incoming multicast packets at
this layer.  It looks more likely to be an unintentional regression
than a deliberate behavior change, but I'm not sure about that.

--
JINMEI, Tatuya