--- zzzz-none-000/linux-2.6.39.4/net/ipv6/datagram.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/net/ipv6/datagram.c 2021-11-10 13:38:18.000000000 +0000 @@ -64,7 +64,7 @@ fl6.flowlabel = usin->sin6_flowinfo&IPV6_FLOWINFO_MASK; if (fl6.flowlabel&IPV6_FLOWLABEL_MASK) { flowlabel = fl6_sock_lookup(sk, fl6.flowlabel); - if (flowlabel == NULL) + if (!flowlabel) return -EINVAL; ipv6_addr_copy(&usin->sin6_addr, &flowlabel->dst); } @@ -327,7 +327,7 @@ err = -EAGAIN; skb = skb_dequeue(&sk->sk_error_queue); - if (skb == NULL) + if (!skb) goto out; copied = skb->len; @@ -426,7 +426,7 @@ err = -EAGAIN; skb = xchg(&np->rxpmtu, NULL); - if (skb == NULL) + if (!skb) goto out; copied = skb->len; @@ -475,7 +475,20 @@ ipv6_addr_copy(&src_info.ipi6_addr, &ipv6_hdr(skb)->daddr); put_cmsg(msg, SOL_IPV6, IPV6_PKTINFO, sizeof(src_info), &src_info); } +#ifdef CONFIG_TI_IP_PKTINFO_SOCKOPT + if (np->rxopt.bits.ti_rxinfo) { + struct ti_pktinfo info; + struct ethhdr *ehdr; +#ifdef CONFIG_TI_META_DATA + info.ifcpe_side = skb->ti_meta_info; + skb->ti_meta_info=0; +#endif + ehdr = eth_hdr(skb); + memcpy( info.mac_addr, ehdr->h_source, sizeof(info.mac_addr)); + put_cmsg(msg, SOL_IPV6, TI_IPV6_PKTINFO, sizeof(info), &info); + } +#endif if (np->rxopt.bits.rxhlim) { int hlim = ipv6_hdr(skb)->hop_limit; put_cmsg(msg, SOL_IPV6, IPV6_HOPLIMIT, sizeof(hlim), &hlim);