ipv6: add flowinfo for tcp6 pkt_options for all cases
[linux-drm-fsl-dcu.git] / net / ipv6 / tcp_ipv6.c
index 0740f93a114a26ac09150638576f523bcd53694c..79a1963695582c248edd189e944abc4f62933bf0 100644 (file)
@@ -1136,6 +1136,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
                newnp->mcast_oif   = inet6_iif(skb);
                newnp->mcast_hops  = ipv6_hdr(skb)->hop_limit;
                newnp->rcv_tclass  = ipv6_get_dsfield(ipv6_hdr(skb));
+               newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb));
 
                /*
                 * No need to charge this sock to the relevant IPv6 refcnt debug socks count
@@ -1216,6 +1217,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
        newnp->mcast_oif  = inet6_iif(skb);
        newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
        newnp->rcv_tclass = ipv6_get_dsfield(ipv6_hdr(skb));
+       newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb));
 
        /* Clone native IPv6 options from listening socket (if any)
 
@@ -1427,6 +1429,8 @@ ipv6_pktoptions:
                        np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit;
                if (np->rxopt.bits.rxtclass)
                        np->rcv_tclass = ipv6_get_dsfield(ipv6_hdr(opt_skb));
+               if (np->rxopt.bits.rxflow)
+                       np->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(opt_skb));
                if (ipv6_opt_accepted(sk, opt_skb)) {
                        skb_set_owner_r(opt_skb, sk);
                        opt_skb = xchg(&np->pktoptions, opt_skb);