diff options
-rw-r--r-- | include/net/ipv6.h | 2 | ||||
-rw-r--r-- | net/ipv6/af_inet6.c | 21 | ||||
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 16 |
3 files changed, 23 insertions, 16 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 0a2ad51cff82..851376108ac2 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -240,6 +240,8 @@ extern struct ipv6_txoptions * ipv6_renew_options(struct sock *sk, struct ipv6_t | |||
240 | struct ipv6_txoptions *ipv6_fixup_options(struct ipv6_txoptions *opt_space, | 240 | struct ipv6_txoptions *ipv6_fixup_options(struct ipv6_txoptions *opt_space, |
241 | struct ipv6_txoptions *opt); | 241 | struct ipv6_txoptions *opt); |
242 | 242 | ||
243 | extern int ipv6_opt_accepted(struct sock *sk, struct sk_buff *skb); | ||
244 | |||
243 | extern int ip6_frag_nqueues; | 245 | extern int ip6_frag_nqueues; |
244 | extern atomic_t ip6_frag_mem; | 246 | extern atomic_t ip6_frag_mem; |
245 | 247 | ||
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 23675ef1f428..bf17aab9b776 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c | |||
@@ -663,6 +663,27 @@ int inet6_sk_rebuild_header(struct sock *sk) | |||
663 | 663 | ||
664 | EXPORT_SYMBOL_GPL(inet6_sk_rebuild_header); | 664 | EXPORT_SYMBOL_GPL(inet6_sk_rebuild_header); |
665 | 665 | ||
666 | int ipv6_opt_accepted(struct sock *sk, struct sk_buff *skb) | ||
667 | { | ||
668 | struct ipv6_pinfo *np = inet6_sk(sk); | ||
669 | struct inet6_skb_parm *opt = IP6CB(skb); | ||
670 | |||
671 | if (np->rxopt.all) { | ||
672 | if ((opt->hop && (np->rxopt.bits.hopopts || | ||
673 | np->rxopt.bits.ohopopts)) || | ||
674 | ((IPV6_FLOWINFO_MASK & *(u32*)skb->nh.raw) && | ||
675 | np->rxopt.bits.rxflow) || | ||
676 | (opt->srcrt && (np->rxopt.bits.srcrt || | ||
677 | np->rxopt.bits.osrcrt)) || | ||
678 | ((opt->dst1 || opt->dst0) && | ||
679 | (np->rxopt.bits.dstopts || np->rxopt.bits.odstopts))) | ||
680 | return 1; | ||
681 | } | ||
682 | return 0; | ||
683 | } | ||
684 | |||
685 | EXPORT_SYMBOL_GPL(ipv6_opt_accepted); | ||
686 | |||
666 | int | 687 | int |
667 | snmp6_mib_init(void *ptr[2], size_t mibsize, size_t mibalign) | 688 | snmp6_mib_init(void *ptr[2], size_t mibsize, size_t mibalign) |
668 | { | 689 | { |
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index cb880079daf3..e5c8a669e84e 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -711,22 +711,6 @@ static struct request_sock_ops tcp6_request_sock_ops = { | |||
711 | .send_reset = tcp_v6_send_reset | 711 | .send_reset = tcp_v6_send_reset |
712 | }; | 712 | }; |
713 | 713 | ||
714 | static int ipv6_opt_accepted(struct sock *sk, struct sk_buff *skb) | ||
715 | { | ||
716 | struct ipv6_pinfo *np = inet6_sk(sk); | ||
717 | struct inet6_skb_parm *opt = IP6CB(skb); | ||
718 | |||
719 | if (np->rxopt.all) { | ||
720 | if ((opt->hop && (np->rxopt.bits.hopopts || np->rxopt.bits.ohopopts)) || | ||
721 | ((IPV6_FLOWINFO_MASK & *(u32*)skb->nh.raw) && np->rxopt.bits.rxflow) || | ||
722 | (opt->srcrt && (np->rxopt.bits.srcrt || np->rxopt.bits.osrcrt)) || | ||
723 | ((opt->dst1 || opt->dst0) && (np->rxopt.bits.dstopts || np->rxopt.bits.odstopts))) | ||
724 | return 1; | ||
725 | } | ||
726 | return 0; | ||
727 | } | ||
728 | |||
729 | |||
730 | static void tcp_v6_send_check(struct sock *sk, int len, struct sk_buff *skb) | 714 | static void tcp_v6_send_check(struct sock *sk, int len, struct sk_buff *skb) |
731 | { | 715 | { |
732 | struct ipv6_pinfo *np = inet6_sk(sk); | 716 | struct ipv6_pinfo *np = inet6_sk(sk); |