netfilter: tproxy: nf_tproxy_assign_sock() can handle tw sockets

transparent field of a socket is either inet_twsk(sk)->tw_transparent
for timewait sockets, or inet_sk(sk)->transparent for other sockets
(TCP/UDP).

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Eric Dumazet 2010-09-21 21:17:29 +00:00 committed by David S. Miller
parent 3d13008e73
commit d485d500cf
1 changed files with 5 additions and 1 deletions

View File

@ -70,7 +70,11 @@ nf_tproxy_destructor(struct sk_buff *skb)
int int
nf_tproxy_assign_sock(struct sk_buff *skb, struct sock *sk) nf_tproxy_assign_sock(struct sk_buff *skb, struct sock *sk)
{ {
if (inet_sk(sk)->transparent) { bool transparent = (sk->sk_state == TCP_TIME_WAIT) ?
inet_twsk(sk)->tw_transparent :
inet_sk(sk)->transparent;
if (transparent) {
skb_orphan(skb); skb_orphan(skb);
skb->sk = sk; skb->sk = sk;
skb->destructor = nf_tproxy_destructor; skb->destructor = nf_tproxy_destructor;