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 22static void 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 */ 35void 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} 49EXPORT_SYMBOL_GPL(nf_tproxy_assign_sock); 50 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 58module_init(nf_tproxy_init); 59 60MODULE_LICENSE("GPL"); 61MODULE_AUTHOR("Krisztian Kovacs"); 62MODULE_DESCRIPTION("Transparent proxy support core routines"); 63