diff options
Diffstat (limited to 'net/ipv4/ip_gre.c')
-rw-r--r-- | net/ipv4/ip_gre.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 594cec35ac4d..0c3123566d76 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
@@ -528,6 +528,9 @@ static void ipgre_err(struct sk_buff *skb, u32 info) | |||
528 | if (code != ICMP_EXC_TTL) | 528 | if (code != ICMP_EXC_TTL) |
529 | return; | 529 | return; |
530 | break; | 530 | break; |
531 | |||
532 | case ICMP_REDIRECT: | ||
533 | break; | ||
531 | } | 534 | } |
532 | 535 | ||
533 | rcu_read_lock(); | 536 | rcu_read_lock(); |
@@ -543,7 +546,11 @@ static void ipgre_err(struct sk_buff *skb, u32 info) | |||
543 | t->parms.link, 0, IPPROTO_GRE, 0); | 546 | t->parms.link, 0, IPPROTO_GRE, 0); |
544 | goto out; | 547 | goto out; |
545 | } | 548 | } |
546 | 549 | if (type == ICMP_REDIRECT) { | |
550 | ipv4_redirect(skb, dev_net(skb->dev), t->parms.link, 0, | ||
551 | IPPROTO_GRE, 0); | ||
552 | goto out; | ||
553 | } | ||
547 | if (t->parms.iph.daddr == 0 || | 554 | if (t->parms.iph.daddr == 0 || |
548 | ipv4_is_multicast(t->parms.iph.daddr)) | 555 | ipv4_is_multicast(t->parms.iph.daddr)) |
549 | goto out; | 556 | goto out; |