Subject: Re: checking M_MCAST in ip_forward?
To: Bill Sommerfeld <sommerfeld@orchard.arlington.ma.us>
From: Ignatios Souvatzis <is@jocelyn.rhein.de>
List: tech-net
Date: 10/17/1999 20:43:59
On Sun, Oct 17, 1999 at 10:03:55AM -0400, Bill Sommerfeld wrote:
> Most importantly:
>
> Currently, ip_forward() contains the following:
>
> if (m->m_flags & M_BCAST || in_canforward(ip->ip_dst) == 0) {
> ipstat.ips_cantforward++;
> m_freem(m);
> return;
> }
>
> I'm pretty sure that this check should be:
>
> if (m->m_flags & (M_BCAST|M_MCAST) || in_canforward(ip->ip_dst) == 0)
>
> i'll commit this if i don't hear any objections soon..
This sounds good to me. Also, check the equivalent IPv6 code.
> A second "belt and suspenders" check would be to allow
> MAP_IP_MULTICAST to fail, causing if_ethersubr to drop the packet, if
> M_MCAST is set but the the next-hop address isn't a multicast address.
Well, I guess, the original reason to switch on the bit, rather than to
test the address is performance. This is more important for long
addresses like in IPv6.
I think adding this inside options DEBUG (or DIAGNOSTIC?), and complain
if it was inconsistently used, would be ok.
Regards,
-is