17 #include <linux/kernel.h>
18 #include <linux/module.h>
19 #include <linux/netdevice.h>
20 #include <linux/netfilter.h>
21 #include <linux/types.h>
22 #include <linux/netfilter_ipv4.h>
23 #include <linux/netfilter_ipv6.h>
24 #include <linux/netfilter/x_tables.h>
41 ct = nf_ct_get(skb, &ctinfo);
43 newdst = loopback_addr;
50 idev = __in6_dev_get(skb->
dev);
65 newrange.min_addr.in6 = newdst;
66 newrange.max_addr.in6 = newdst;
73 static int redirect_tg6_checkentry(
const struct xt_tgchk_param *par)
110 ct = nf_ct_get(skb, &ctinfo);
115 newdst =
htonl(0x7F000001);
117 struct in_device *indev;
118 struct in_ifaddr *ifa;
123 indev = __in_dev_get_rcu(skb->
dev);
124 if (indev && (ifa = indev->ifa_list))
125 newdst = ifa->ifa_local;
133 memset(&newrange.min_addr, 0,
sizeof(newrange.min_addr));
134 memset(&newrange.max_addr, 0,
sizeof(newrange.max_addr));
136 newrange.min_addr.ip = newdst;
137 newrange.max_addr.ip = newdst;
138 newrange.min_proto = mr->
range[0].min;
139 newrange.max_proto = mr->
range[0].max;
151 .checkentry = redirect_tg6_checkentry,
152 .target = redirect_tg6,
163 .target = redirect_tg4,
164 .checkentry = redirect_tg4_check,
172 static int __init redirect_tg_init(
void)
178 static void __exit redirect_tg_exit(
void)