ipv6: fix incorrect type in declaration
[linux-drm-fsl-dcu.git] / net / ipv6 / ipv6_sockglue.c
index 1c6ce3119ff8ce45f1b406c9b1356a2400f6fc1d..759fbf96515b70f3018fddf9e19773af3301bbe4 100644 (file)
@@ -1019,7 +1019,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                                put_cmsg(&msg, SOL_IPV6, IPV6_HOPLIMIT, sizeof(hlim), &hlim);
                        }
                        if (np->rxopt.bits.rxtclass) {
-                               int tclass = np->rcv_tclass;
+                               int tclass = ntohl(np->rcv_flowinfo & IPV6_TCLASS_MASK) >> 20;
                                put_cmsg(&msg, SOL_IPV6, IPV6_TCLASS, sizeof(tclass), &tclass);
                        }
                        if (np->rxopt.bits.rxoinfo) {
@@ -1034,6 +1034,11 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                                int hlim = np->mcast_hops;
                                put_cmsg(&msg, SOL_IPV6, IPV6_2292HOPLIMIT, sizeof(hlim), &hlim);
                        }
+                       if (np->rxopt.bits.rxflow) {
+                               __be32 flowinfo = np->rcv_flowinfo;
+
+                               put_cmsg(&msg, SOL_IPV6, IPV6_FLOWINFO, sizeof(flowinfo), &flowinfo);
+                       }
                }
                len -= msg.msg_controllen;
                return put_user(len, optlen);