Yoshifuji-san,

I noticed that ping6 forces the IPV6_PMTUDISC_DO option on packets sent to multicast destinations. Is this a requirement?

Due to the following check recently introduced in the ip6_fragment() code, multicast packets that are over PMTU in size are never sent out, since ping6 code always sets the PMTUDISC_DO option and ip6_fragment() always fails.


=== net/ipv6/ip6_output.c ===

 573 static int ip6_fragment(struct sk_buff *skb, int (*output)
                             (struct sk_buff *))
 574 {
 ......
 592         /* We must not fragment if the socket is set to force MTU
                discovery
 ......

 596         if (!np || np->pmtudisc >= IPV6_PMTUDISC_DO) {
 597                 skb->dev = skb->dst->dev;
 598                 icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu,
                                   skb->dev);
 599                 IP6_INC_STATS(ip6_dst_idev(skb->dst),
                                   IPSTATS_MIB_FRAGFAILS);
 600                 kfree_skb(skb);
 601                 return -EMSGSIZE;
 602         }
 ......
--


This check in the kernel code makes perfect sense, since the option is implies "do not fragment."

Should the ping6 code be fixed in that case?


Thanks,
- Tushar
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to