--- patch-3.4.67-vs2.3.3.9.diff 2013-10-26 20:37:43.000000000 +0200 +++ patch-3.4.67-vs2.3.3.9.diff.new 2014-02-03 15:49:11.515183472 +0100 @@ -24676,10 +24676,10 @@ diff -NurpP --minimal linux-3.4.67/net/i #include #include -@@ -110,8 +112,10 @@ int inet_sk_diag_fill(struct sock *sk, s +@@ -114,8 +116,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, @@ -24689,18 +24689,18 @@ diff -NurpP --minimal linux-3.4.67/net/i /* 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; +@@ -241,8 +245,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_ +@@ -287,12 +291,14 @@ int inet_diag_dump_one_icsk(struct inet_ err = -EINVAL; if (req->sdiag_family == AF_INET) { @@ -24715,7 +24715,7 @@ diff -NurpP --minimal linux-3.4.67/net/i sk = inet6_lookup(&init_net, hashinfo, (struct in6_addr *)req->id.idiag_dst, req->id.idiag_dport, -@@ -482,6 +488,7 @@ int inet_diag_bc_sk(const struct nlattr +@@ -493,6 +499,7 @@ int inet_diag_bc_sk(const struct nlattr } else #endif { @@ -24723,7 +24723,7 @@ diff -NurpP --minimal linux-3.4.67/net/i entry.saddr = &inet->inet_rcv_saddr; entry.daddr = &inet->inet_daddr; } -@@ -639,6 +646,7 @@ static int inet_twsk_diag_dump(struct in +@@ -650,6 +657,7 @@ static int inet_twsk_diag_dump(struct in } else #endif { @@ -24731,18 +24731,18 @@ diff -NurpP --minimal linux-3.4.67/net/i entry.saddr = &tw->tw_rcv_saddr; entry.daddr = &tw->tw_daddr; } -@@ -714,8 +722,8 @@ static int inet_diag_fill_req(struct sk_ +@@ -729,8 +737,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 +@@ -800,6 +808,7 @@ static int inet_diag_dump_reqs(struct sk continue; if (bc) { @@ -24750,7 +24750,7 @@ diff -NurpP --minimal linux-3.4.67/net/i inet_diag_req_addrs(sk, req, &entry); entry.dport = ntohs(ireq->rmt_port); -@@ -834,6 +843,8 @@ void inet_diag_dump_icsk(struct inet_has +@@ -850,6 +859,8 @@ void inet_diag_dump_icsk(struct inet_has sk_nulls_for_each(sk, node, &ilb->head) { struct inet_sock *inet = inet_sk(sk); @@ -24759,7 +24759,7 @@ diff -NurpP --minimal linux-3.4.67/net/i if (num < s_num) { num++; continue; -@@ -904,6 +915,8 @@ skip_listen_ht: +@@ -920,6 +931,8 @@ skip_listen_ht: sk_nulls_for_each(sk, node, &head->chain) { struct inet_sock *inet = inet_sk(sk); @@ -24768,7 +24768,7 @@ diff -NurpP --minimal linux-3.4.67/net/i if (num < s_num) goto next_normal; if (!(r->idiag_states & (1 << sk->sk_state))) -@@ -931,6 +944,8 @@ next_normal: +@@ -947,6 +960,8 @@ next_normal: inet_twsk_for_each(tw, node, &head->twchain) {