1 /* 2 * Transparent proxy support for Linux/iptables 3 * 4 * Copyright (c) 2006-2007 BalaBit IT Ltd. 5 * Author: Balazs Scheidler, Krisztian Kovacs 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 * 11 */ 12 13 #include <linux/module.h> 14 15 #include <linux/net.h> 16 #include <linux/if.h> 17 #include <linux/netdevice.h> 18 #include <net/udp.h> 19 #include <net/netfilter/nf_tproxy_core.h> 20 21 22 static void nf_tproxy_destructor(struct sk_buff * skb)23nf_tproxy_destructor(struct sk_buff *skb) 24 { 25 struct sock *sk = skb->sk; 26 27 skb->sk = NULL; 28 skb->destructor = NULL; 29 30 if (sk) 31 sock_put(sk); 32 } 33 34 /* consumes sk */ 35 void nf_tproxy_assign_sock(struct sk_buff * skb,struct sock * sk)36nf_tproxy_assign_sock(struct sk_buff *skb, struct sock *sk) 37 { 38 /* assigning tw sockets complicates things; most 39 * skb->sk->X checks would have to test sk->sk_state first */ 40 if (sk->sk_state == TCP_TIME_WAIT) { 41 inet_twsk_put(inet_twsk(sk)); 42 return; 43 } 44 45 skb_orphan(skb); 46 skb->sk = sk; 47 skb->destructor = nf_tproxy_destructor; 48 } 49 EXPORT_SYMBOL_GPL(nf_tproxy_assign_sock); 50 nf_tproxy_init(void)51static int __init nf_tproxy_init(void) 52 { 53 pr_info("NF_TPROXY: Transparent proxy support initialized, version 4.1.0\n"); 54 pr_info("NF_TPROXY: Copyright (c) 2006-2007 BalaBit IT Ltd.\n"); 55 return 0; 56 } 57 58 module_init(nf_tproxy_init); 59 60 MODULE_LICENSE("GPL"); 61 MODULE_AUTHOR("Krisztian Kovacs"); 62 MODULE_DESCRIPTION("Transparent proxy support core routines"); 63