X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fipv4%2Fnetfilter%2Fipt_TTL.c;h=b769eb231970ba82a4737e6cd6654254f0e1a848;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=f48892ae0be5c8bbd094b7296929ed45f94df4bd;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/net/ipv4/netfilter/ipt_TTL.c b/net/ipv4/netfilter/ipt_TTL.c index f48892ae0..b769eb231 100644 --- a/net/ipv4/netfilter/ipt_TTL.c +++ b/net/ipv4/netfilter/ipt_TTL.c @@ -20,10 +20,9 @@ MODULE_DESCRIPTION("IP tables TTL modification module"); MODULE_LICENSE("GPL"); static unsigned int -ipt_ttl_target(struct sk_buff **pskb, - const struct net_device *in, const struct net_device *out, - unsigned int hooknum, const struct xt_target *target, - const void *targinfo, void *userinfo) +ipt_ttl_target(struct sk_buff **pskb, const struct net_device *in, + const struct net_device *out, unsigned int hooknum, + const void *targinfo, void *userinfo) { struct iphdr *iph; const struct ipt_TTL_info *info = targinfo; @@ -68,41 +67,53 @@ ipt_ttl_target(struct sk_buff **pskb, static int ipt_ttl_checkentry(const char *tablename, const void *e, - const struct xt_target *target, void *targinfo, unsigned int targinfosize, unsigned int hook_mask) { struct ipt_TTL_info *info = targinfo; + if (targinfosize != IPT_ALIGN(sizeof(struct ipt_TTL_info))) { + printk(KERN_WARNING "ipt_TTL: targinfosize %u != %Zu\n", + targinfosize, + IPT_ALIGN(sizeof(struct ipt_TTL_info))); + return 0; + } + + if (strcmp(tablename, "mangle")) { + printk(KERN_WARNING "ipt_TTL: can only be called from " + "\"mangle\" table, not \"%s\"\n", tablename); + return 0; + } + if (info->mode > IPT_TTL_MAXMODE) { printk(KERN_WARNING "ipt_TTL: invalid or unknown Mode %u\n", info->mode); return 0; } + if ((info->mode != IPT_TTL_SET) && (info->ttl == 0)) return 0; + return 1; } static struct ipt_target ipt_TTL = { .name = "TTL", .target = ipt_ttl_target, - .targetsize = sizeof(struct ipt_TTL_info), - .table = "mangle", .checkentry = ipt_ttl_checkentry, .me = THIS_MODULE, }; -static int __init ipt_ttl_init(void) +static int __init init(void) { return ipt_register_target(&ipt_TTL); } -static void __exit ipt_ttl_fini(void) +static void __exit fini(void) { ipt_unregister_target(&ipt_TTL); } -module_init(ipt_ttl_init); -module_exit(ipt_ttl_fini); +module_init(init); +module_exit(fini);