aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/ipv6.h2
-rw-r--r--net/ipv6/af_inet6.c21
-rw-r--r--net/ipv6/tcp_ipv6.c16
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
240struct ipv6_txoptions *ipv6_fixup_options(struct ipv6_txoptions *opt_space, 240struct ipv6_txoptions *ipv6_fixup_options(struct ipv6_txoptions *opt_space,
241 struct ipv6_txoptions *opt); 241 struct ipv6_txoptions *opt);
242 242
243extern int ipv6_opt_accepted(struct sock *sk, struct sk_buff *skb);
244
243extern int ip6_frag_nqueues; 245extern int ip6_frag_nqueues;
244extern atomic_t ip6_frag_mem; 246extern 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
664EXPORT_SYMBOL_GPL(inet6_sk_rebuild_header); 664EXPORT_SYMBOL_GPL(inet6_sk_rebuild_header);
665 665
666int 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
685EXPORT_SYMBOL_GPL(ipv6_opt_accepted);
686
666int 687int
667snmp6_mib_init(void *ptr[2], size_t mibsize, size_t mibalign) 688snmp6_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
714static 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
730static void tcp_v6_send_check(struct sock *sk, int len, struct sk_buff *skb) 714static 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);