#include <linux/inet_diag.h>
#include <linux/sock_diag.h>
-@@ -110,8 +112,10 @@ int inet_sk_diag_fill(struct sock *sk, s
+@@ -112,8 +112,10 @@ int inet_sk_diag_fill(struct sock *sk, s
+ memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));
+ memset(&r->id.idiag_dst, 0, sizeof(r->id.idiag_dst));
- r->id.idiag_sport = inet->inet_sport;
- r->id.idiag_dport = inet->inet_dport;
- r->id.idiag_src[0] = inet->inet_rcv_saddr;
- r->id.idiag_dst[0] = inet->inet_daddr;
+ r->id.idiag_src[0] = nx_map_sock_lback(sk->sk_nx_info,
+ r->id.idiag_dst[0] = nx_map_sock_lback(sk->sk_nx_info,
+ inet->inet_daddr);
- /* IPv6 dual-stack sockets use inet->tos for IPv4 connections,
- * hence this needs to be included regardless of socket family.
-@@ -231,8 +235,8 @@ static int inet_twsk_diag_fill(struct in
- sock_diag_save_cookie(tw, r->id.idiag_cookie);
- r->id.idiag_sport = tw->tw_sport;
- r->id.idiag_dport = tw->tw_dport;
+ if (nla_put_u8(skb, INET_DIAG_SHUTDOWN, sk->sk_shutdown))
+ goto errout;
+@@ -256,8 +258,8 @@ static int inet_twsk_diag_fill(struct in
+ memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));
+ memset(&r->id.idiag_dst, 0, sizeof(r->id.idiag_dst));
+
- r->id.idiag_src[0] = tw->tw_rcv_saddr;
- r->id.idiag_dst[0] = tw->tw_daddr;
+ r->id.idiag_src[0] = nx_map_sock_lback(tw->tw_nx_info, tw->tw_rcv_saddr);
+ r->id.idiag_dst[0] = nx_map_sock_lback(tw->tw_nx_info, tw->tw_daddr);
+
r->idiag_state = tw->tw_substate;
r->idiag_timer = 3;
- r->idiag_expires = DIV_ROUND_UP(tmo * 1000, HZ);
@@ -276,12 +280,14 @@ int inet_diag_dump_one_icsk(struct inet_
err = -EINVAL;
entry.saddr = &tw->tw_rcv_saddr;
entry.daddr = &tw->tw_daddr;
}
-@@ -714,8 +722,8 @@ static int inet_diag_fill_req(struct sk_
+@@ -753,8 +755,8 @@ static int inet_diag_fill_req(struct sk_
+ memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));
+ memset(&r->id.idiag_dst, 0, sizeof(r->id.idiag_dst));
- r->id.idiag_sport = inet->inet_sport;
- r->id.idiag_dport = ireq->rmt_port;
- r->id.idiag_src[0] = ireq->loc_addr;
- r->id.idiag_dst[0] = ireq->rmt_addr;
+ r->id.idiag_src[0] = nx_map_sock_lback(sk->sk_nx_info, ireq->loc_addr);
+ r->id.idiag_dst[0] = nx_map_sock_lback(sk->sk_nx_info, ireq->rmt_addr);
+
r->idiag_expires = jiffies_to_msecs(tmo);
r->idiag_rqueue = 0;
- r->idiag_wqueue = 0;
@@ -784,6 +792,7 @@ static int inet_diag_dump_reqs(struct sk
continue;