I didn't see followups to this, so I'm re-sending to the list just in case
it got dropped in the cracks..
--
Pekka Savola "You each name yourselves king, yet the
Netcore Oy kingdom bleeds."
Systems. Networks. Security. -- George R.R. Martin: A Clash of Kings
---------- Forwarded message ----------
Date: Mon, 28 Jul 2003 13:20:31 -0400
From: "Weng, Wending" <WWending@xxxxxxxxxxx>
To: netdev@xxxxxxxxxxx
Subject: multicast IP datagram forwarding bug and fix
> Hi,
>
> LINUX doesn't forward multicast IP datagram if it has option(s), there is
> is a bug in the module ipmr.c, function
> ipmr_forward_finish, below is the current version of this function:
>
> static inline int ipmr_forward_finish(struct sk_buff *skb)
> {
> struct dst_entry *dst = skb->dst;
>
> if (skb->len <= dst->pmtu)
> return dst->output(skb);
> else
> return ip_fragment(skb, dst->output);
> }
>
> it forgets to recalculate the checksum in case the option is modified.
>
> The following code works properly:
>
> static inline int ipmr_forward_finish(struct sk_buff *skb)
> {
> struct dst_entry *dst = skb->dst;
>
> ip_forward_options (skb); /* this line recalculates checksum if
> needed. */
>
> if (skb->len <= dst->pmtu)
> return dst->output(skb);
> else
> return ip_fragment(skb, dst->output);
> }
>
> Wending Weng
|