aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/sit.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/sit.c')
-rw-r--r--net/ipv6/sit.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index 60415711563f..49aea94c9be3 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -527,9 +527,6 @@ static int ipip6_err(struct sk_buff *skb, u32 info)
527 case ICMP_PORT_UNREACH: 527 case ICMP_PORT_UNREACH:
528 /* Impossible event. */ 528 /* Impossible event. */
529 return 0; 529 return 0;
530 case ICMP_FRAG_NEEDED:
531 /* Soft state for pmtu is maintained by IP core. */
532 return 0;
533 default: 530 default:
534 /* All others are translated to HOST_UNREACH. 531 /* All others are translated to HOST_UNREACH.
535 rfc2003 contains "deep thoughts" about NET_UNREACH, 532 rfc2003 contains "deep thoughts" about NET_UNREACH,
@@ -551,7 +548,17 @@ static int ipip6_err(struct sk_buff *skb, u32 info)
551 skb->dev, 548 skb->dev,
552 iph->daddr, 549 iph->daddr,
553 iph->saddr); 550 iph->saddr);
554 if (t == NULL || t->parms.iph.daddr == 0) 551 if (t == NULL)
552 goto out;
553
554 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
555 ipv4_update_pmtu(skb, dev_net(skb->dev), info,
556 t->dev->ifindex, 0, IPPROTO_IPV6, 0);
557 err = 0;
558 goto out;
559 }
560
561 if (t->parms.iph.daddr == 0)
555 goto out; 562 goto out;
556 563
557 err = 0; 564 err = 0;