Since 2.4.4, Path MTU discovery doesn't work for me.
In the function icmpv6_rcv, ICMPv6 header is extracted from skb->data,
rather from skb->h.raw, so the value of hdr->icmp6_mtu is not intended
and the call of the function rt6_pmtu_discovery makes no sense here.
The attached patch reverts to the same behavior of 2.4.3.
Regards,
--
Daiki Ueno
--- linux/net/ipv6/icmp.c~ Sun Jun 10 13:40:11 2001
+++ linux/net/ipv6/icmp.c Sun Jun 10 13:41:15 2001
@@ -559,18 +559,16 @@
case ICMPV6_PKT_TOOBIG:
/* BUGGG_FUTURE: if packet contains rthdr, we cannot update
standard destination cache. Seems, only "advanced"
destination cache will allow to solve this problem
--ANK (980726)
*/
- if (!pskb_may_pull(skb, sizeof(struct ipv6hdr)))
- goto discard_it;
- hdr = (struct icmp6hdr *) skb->data;
orig_hdr = (struct ipv6hdr *) (hdr + 1);
- rt6_pmtu_discovery(&orig_hdr->daddr, &orig_hdr->saddr, dev,
- ntohl(hdr->icmp6_mtu));
+ if (pskb_may_pull(skb, sizeof(struct ipv6hdr)))
+ rt6_pmtu_discovery(&orig_hdr->daddr, &orig_hdr->saddr,
dev,
+ ntohl(hdr->icmp6_mtu));
/*
* Drop through to notify
*/
case ICMPV6_DEST_UNREACH:
|