diff options
Diffstat (limited to 'net/ipv6/icmp.c')
| -rw-r--r-- | net/ipv6/icmp.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index 4ae661bc3677..03e62f94ff8e 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c | |||
| @@ -40,6 +40,7 @@ | |||
| 40 | #include <linux/skbuff.h> | 40 | #include <linux/skbuff.h> |
| 41 | #include <linux/init.h> | 41 | #include <linux/init.h> |
| 42 | #include <linux/netfilter.h> | 42 | #include <linux/netfilter.h> |
| 43 | #include <linux/slab.h> | ||
| 43 | 44 | ||
| 44 | #ifdef CONFIG_SYSCTL | 45 | #ifdef CONFIG_SYSCTL |
| 45 | #include <linux/sysctl.h> | 46 | #include <linux/sysctl.h> |
| @@ -67,11 +68,6 @@ | |||
| 67 | #include <asm/uaccess.h> | 68 | #include <asm/uaccess.h> |
| 68 | #include <asm/system.h> | 69 | #include <asm/system.h> |
| 69 | 70 | ||
| 70 | DEFINE_SNMP_STAT(struct icmpv6_mib, icmpv6_statistics) __read_mostly; | ||
| 71 | EXPORT_SYMBOL(icmpv6_statistics); | ||
| 72 | DEFINE_SNMP_STAT(struct icmpv6msg_mib, icmpv6msg_statistics) __read_mostly; | ||
| 73 | EXPORT_SYMBOL(icmpv6msg_statistics); | ||
| 74 | |||
| 75 | /* | 71 | /* |
| 76 | * The ICMP socket(s). This is the most convenient way to flow control | 72 | * The ICMP socket(s). This is the most convenient way to flow control |
| 77 | * our ICMP output as well as maintain a clean interface throughout | 73 | * our ICMP output as well as maintain a clean interface throughout |
| @@ -119,7 +115,7 @@ static __inline__ void icmpv6_xmit_unlock(struct sock *sk) | |||
| 119 | */ | 115 | */ |
| 120 | void icmpv6_param_prob(struct sk_buff *skb, u8 code, int pos) | 116 | void icmpv6_param_prob(struct sk_buff *skb, u8 code, int pos) |
| 121 | { | 117 | { |
| 122 | icmpv6_send(skb, ICMPV6_PARAMPROB, code, pos, skb->dev); | 118 | icmpv6_send(skb, ICMPV6_PARAMPROB, code, pos); |
| 123 | kfree_skb(skb); | 119 | kfree_skb(skb); |
| 124 | } | 120 | } |
| 125 | 121 | ||
| @@ -305,8 +301,7 @@ static inline void mip6_addr_swap(struct sk_buff *skb) {} | |||
| 305 | /* | 301 | /* |
| 306 | * Send an ICMP message in response to a packet in error | 302 | * Send an ICMP message in response to a packet in error |
| 307 | */ | 303 | */ |
| 308 | void icmpv6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, | 304 | void icmpv6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info) |
| 309 | struct net_device *dev) | ||
| 310 | { | 305 | { |
| 311 | struct net *net = dev_net(skb->dev); | 306 | struct net *net = dev_net(skb->dev); |
| 312 | struct inet6_dev *idev = NULL; | 307 | struct inet6_dev *idev = NULL; |
| @@ -486,8 +481,9 @@ route_done: | |||
| 486 | len + sizeof(struct icmp6hdr), | 481 | len + sizeof(struct icmp6hdr), |
| 487 | sizeof(struct icmp6hdr), hlimit, | 482 | sizeof(struct icmp6hdr), hlimit, |
| 488 | np->tclass, NULL, &fl, (struct rt6_info*)dst, | 483 | np->tclass, NULL, &fl, (struct rt6_info*)dst, |
| 489 | MSG_DONTWAIT); | 484 | MSG_DONTWAIT, np->dontfrag); |
| 490 | if (err) { | 485 | if (err) { |
| 486 | ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTERRORS); | ||
| 491 | ip6_flush_pending_frames(sk); | 487 | ip6_flush_pending_frames(sk); |
| 492 | goto out_put; | 488 | goto out_put; |
| 493 | } | 489 | } |
| @@ -565,9 +561,11 @@ static void icmpv6_echo_reply(struct sk_buff *skb) | |||
| 565 | 561 | ||
| 566 | err = ip6_append_data(sk, icmpv6_getfrag, &msg, skb->len + sizeof(struct icmp6hdr), | 562 | err = ip6_append_data(sk, icmpv6_getfrag, &msg, skb->len + sizeof(struct icmp6hdr), |
| 567 | sizeof(struct icmp6hdr), hlimit, np->tclass, NULL, &fl, | 563 | sizeof(struct icmp6hdr), hlimit, np->tclass, NULL, &fl, |
| 568 | (struct rt6_info*)dst, MSG_DONTWAIT); | 564 | (struct rt6_info*)dst, MSG_DONTWAIT, |
| 565 | np->dontfrag); | ||
| 569 | 566 | ||
| 570 | if (err) { | 567 | if (err) { |
| 568 | ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTERRORS); | ||
| 571 | ip6_flush_pending_frames(sk); | 569 | ip6_flush_pending_frames(sk); |
| 572 | goto out_put; | 570 | goto out_put; |
| 573 | } | 571 | } |
| @@ -951,7 +949,7 @@ ctl_table ipv6_icmp_table_template[] = { | |||
| 951 | { }, | 949 | { }, |
| 952 | }; | 950 | }; |
| 953 | 951 | ||
| 954 | struct ctl_table *ipv6_icmp_sysctl_init(struct net *net) | 952 | struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net) |
| 955 | { | 953 | { |
| 956 | struct ctl_table *table; | 954 | struct ctl_table *table; |
| 957 | 955 | ||
