static void nf_tproxy_destructor(struct sk_buff *skb) { struct sock *sk = skb->sk; skb->sk = NULL; skb->destructor = NULL; if (sk) nf_tproxy_put_sock(sk); }
/* consumes sk */ int nf_tproxy_assign_sock(struct sk_buff *skb, struct sock *sk) { if (inet_sk(sk)->transparent) { skb->sk = sk; skb->destructor = nf_tproxy_destructor; return 1; } else nf_tproxy_put_sock(sk); return 0; }