+++ /dev/null
-diff -ruN xtables-addons-1.47.1/extensions/libxt_DNETMAP.c xtables-addons-2.0/extensions/libxt_DNETMAP.c
---- xtables-addons-1.47.1/extensions/libxt_DNETMAP.c 2012-10-15 21:29:22.000000000 +0200
-+++ xtables-addons-2.0/extensions/libxt_DNETMAP.c 2012-11-12 19:03:51.000000000 +0100
-@@ -69,19 +69,8 @@
- return bits;
- }
-
--static void DNETMAP_init(struct xt_entry_target *t)
--{
-- struct xt_DNETMAP_tginfo *tginfo = (void *)&t->data;
-- struct nf_nat_ipv4_multi_range_compat *mr = &tginfo->prefix;
--
-- /* Actually, it's 0, but it's ignored at the moment. */
-- mr->rangesize = 1;
-- tginfo->ttl = 0;
-- tginfo->flags = 0;
--}
--
- /* Parses network address */
--static void parse_prefix(char *arg, struct nf_nat_ipv4_range *range)
-+static void parse_prefix(char *arg, struct nf_nat_range *range)
- {
- char *slash;
- const struct in_addr *ip;
-@@ -97,7 +86,7 @@
- if (ip == NULL)
- xtables_error(PARAMETER_PROBLEM, "Bad IP address \"%s\"\n",
- arg);
-- range->min_ip = ip->s_addr;
-+ range->min_addr.in = *ip;
- if (slash) {
- if (strchr(slash + 1, '.')) {
- ip = xtables_numeric_to_ipmask(slash + 1);
-@@ -123,20 +112,20 @@
- } else
- netmask = ~0;
-
-- if (range->min_ip & ~netmask) {
-+ if (range->min_addr.ip & ~netmask) {
- if (slash)
- *slash = '/';
- xtables_error(PARAMETER_PROBLEM, "Bad network address \"%s\"\n",
- arg);
- }
-- range->max_ip = range->min_ip | ~netmask;
-+ range->max_addr.ip = range->min_addr.ip | ~netmask;
- }
-
- static int DNETMAP_parse(int c, char **argv, int invert, unsigned int *flags,
- const void *entry, struct xt_entry_target **target)
- {
- struct xt_DNETMAP_tginfo *tginfo = (void *)(*target)->data;
-- struct nf_nat_ipv4_multi_range_compat *mr = &tginfo->prefix;
-+ struct nf_nat_range *mr = &tginfo->prefix;
- char *end;
-
- switch (c) {
-@@ -147,7 +136,7 @@
- invert);
-
- /* TO-DO use xtables_ipparse_any instead? */
-- parse_prefix(optarg, &mr->range[0]);
-+ parse_prefix(optarg, mr);
- *flags |= XT_DNETMAP_PREFIX;
- tginfo->flags |= XT_DNETMAP_PREFIX;
- return 1;
-@@ -192,14 +181,13 @@
- int numeric)
- {
- struct xt_DNETMAP_tginfo *tginfo = (void *)&target->data;
-- const struct nf_nat_ipv4_multi_range_compat *mr = &tginfo->prefix;
-- const struct nf_nat_ipv4_range *r = &mr->range[0];
-+ const struct nf_nat_range *r = &tginfo->prefix;
- struct in_addr a;
- int bits;
-
-- a.s_addr = r->min_ip;
-+ a = r->min_addr.in;
- printf("%s", xtables_ipaddr_to_numeric(&a));
-- a.s_addr = ~(r->min_ip ^ r->max_ip);
-+ a.s_addr = ~(r->min_addr.ip ^ r->max_addr.ip);
- bits = netmask2bits(a.s_addr);
- if (bits < 0)
- printf("/%s", xtables_ipaddr_to_numeric(&a));
-@@ -265,7 +253,6 @@
- .size = XT_ALIGN(sizeof(struct xt_DNETMAP_tginfo)),
- .userspacesize = XT_ALIGN(sizeof(struct xt_DNETMAP_tginfo)),
- .help = DNETMAP_help,
-- .init = DNETMAP_init,
- .parse = DNETMAP_parse,
- .print = DNETMAP_print,
- .save = DNETMAP_save,
-diff -ruN xtables-addons-1.47.1/extensions/xt_DNETMAP.c xtables-addons-2.0/extensions/xt_DNETMAP.c
---- xtables-addons-1.47.1/extensions/xt_DNETMAP.c 2012-10-15 21:29:22.000000000 +0200
-+++ xtables-addons-2.0/extensions/xt_DNETMAP.c 2012-11-12 19:03:51.000000000 +0100
-@@ -84,7 +78,7 @@
- };
-
- struct dnetmap_prefix {
-- struct nf_nat_ipv4_multi_range_compat prefix;
-+ struct nf_nat_range prefix;
- char prefix_str[16];
- #ifdef CONFIG_PROC_FS
- char proc_str_data[20];
-@@ -179,7 +168,7 @@
-
- static struct dnetmap_prefix *
- dnetmap_prefix_lookup(struct dnetmap_net *dnetmap_net,
-- const struct nf_nat_ipv4_multi_range_compat *mr)
-+ const struct nf_nat_range *mr)
- {
- struct dnetmap_prefix *p;
-
-@@ -258,7 +247,7 @@
- {
- struct dnetmap_net *dnetmap_net = dnetmap_pernet(par->net);
- const struct xt_DNETMAP_tginfo *tginfo = par->targinfo;
-- const struct nf_nat_ipv4_multi_range_compat *mr = &tginfo->prefix;
-+ const struct nf_nat_range *mr = &tginfo->prefix;
- struct dnetmap_prefix *p;
- struct dnetmap_entry *e;
- #ifdef CONFIG_PROC_FS
-@@ -274,14 +263,10 @@
- return ret;
- }
-
-- if (!(mr->range[0].flags & NF_NAT_RANGE_MAP_IPS)) {
-+ if (!(mr->flags & NF_NAT_RANGE_MAP_IPS)) {
- pr_debug("DNETMAP:check: bad MAP_IPS.\n");
- return -EINVAL;
- }
-- if (mr->rangesize != 1) {
-- pr_debug("DNETMAP:check: bad rangesize %u.\n", mr->rangesize);
-- return -EINVAL;
-- }
-
- mutex_lock(&dnetmap_mutex);
- p = dnetmap_prefix_lookup(dnetmap_net, mr);
-@@ -307,15 +292,15 @@
- INIT_LIST_HEAD(&p->lru_list);
- INIT_LIST_HEAD(&p->elist);
-
-- ip_min = ntohl(mr->range[0].min_ip) + (whole_prefix == 0);
-- ip_max = ntohl(mr->range[0].max_ip) - (whole_prefix == 0);
-+ ip_min = ntohl(mr->min_addr.ip) + (whole_prefix == 0);
-+ ip_max = ntohl(mr->max_addr.ip) - (whole_prefix == 0);
-
-- sprintf(p->prefix_str, NIPQUAD_FMT "/%u", NIPQUAD(mr->range[0].min_ip),
-+ sprintf(p->prefix_str, NIPQUAD_FMT "/%u", NIPQUAD(mr->min_addr.ip),
- 33 - ffs(~(ip_min ^ ip_max)));
- #ifdef CONFIG_PROC_FS
-- sprintf(p->proc_str_data, NIPQUAD_FMT "_%u", NIPQUAD(mr->range[0].min_ip),
-+ sprintf(p->proc_str_data, NIPQUAD_FMT "_%u", NIPQUAD(mr->min_addr.ip),
- 33 - ffs(~(ip_min ^ ip_max)));
-- sprintf(p->proc_str_stat, NIPQUAD_FMT "_%u_stat", NIPQUAD(mr->range[0].min_ip),
-+ sprintf(p->proc_str_stat, NIPQUAD_FMT "_%u_stat", NIPQUAD(mr->min_addr.ip),
- 33 - ffs(~(ip_min ^ ip_max)));
- #endif
- printk(KERN_INFO KBUILD_MODNAME ": new prefix %s\n", p->prefix_str);
-@@ -381,8 +366,8 @@
- enum ip_conntrack_info ctinfo;
- __be32 prenat_ip, postnat_ip, prenat_ip_prev;
- const struct xt_DNETMAP_tginfo *tginfo = par->targinfo;
-- const struct nf_nat_ipv4_multi_range_compat *mr = &tginfo->prefix;
-- struct nf_nat_ipv4_range newrange;
-+ const struct nf_nat_range *mr = &tginfo->prefix;
-+ struct nf_nat_range newrange;
- struct dnetmap_entry *e;
- struct dnetmap_prefix *p;
- __s32 jttl;
-@@ -419,15 +404,14 @@
-
- spin_unlock_bh(&dnetmap_lock);
-
-- newrange = ((struct nf_nat_ipv4_range) {
-- mr->range[0].flags | NF_NAT_RANGE_MAP_IPS,
-- e->prenat_addr, e->prenat_addr,
-- mr->range[0].min, mr->range[0].max});
--
-- /* Hand modified range to generic setup. */
-+ memset(&newrange, 0, sizeof(newrange));
-+ newrange.flags = mr->flags | NF_NAT_RANGE_MAP_IPS;
-+ newrange.min_addr.ip = e->prenat_addr;
-+ newrange.max_addr.ip = e->prenat_addr;
-+ newrange.min_proto = mr->min_proto;
-+ newrange.max_proto = mr->max_proto;
- return nf_nat_setup_info(ct, &newrange,
- HOOK2MANIP(par->hooknum));
--
- }
-
- prenat_ip = ip_hdr(skb)->saddr;
-@@ -509,12 +493,12 @@
-
- spin_unlock_bh(&dnetmap_lock);
-
-- newrange = ((struct nf_nat_ipv4_range) {
-- mr->range[0].flags | NF_NAT_RANGE_MAP_IPS,
-- postnat_ip, postnat_ip,
-- mr->range[0].min, mr->range[0].max});
--
-- /* Hand modified range to generic setup. */
-+ memset(&newrange, 0, sizeof(newrange));
-+ newrange.flags = mr->flags | NF_NAT_RANGE_MAP_IPS;
-+ newrange.min_addr.ip = postnat_ip;
-+ newrange.max_addr.ip = postnat_ip;
-+ newrange.min_proto = mr->min_proto;
-+ newrange.max_proto = mr->max_proto;
- return nf_nat_setup_info(ct, &newrange, HOOK2MANIP(par->hooknum));
-
- no_rev_map:
-@@ -528,7 +512,7 @@
- {
- struct dnetmap_net *dnetmap_net = dnetmap_pernet(par->net);
- const struct xt_DNETMAP_tginfo *tginfo = par->targinfo;
-- const struct nf_nat_ipv4_multi_range_compat *mr = &tginfo->prefix;
-+ const struct nf_nat_range *mr = &tginfo->prefix;
- struct dnetmap_prefix *p;
-
- if (!(tginfo->flags & XT_DNETMAP_PREFIX))
-diff -ruN xtables-addons-1.47.1/extensions/xt_DNETMAP.h xtables-addons-2.0/extensions/xt_DNETMAP.h
---- xtables-addons-1.47.1/extensions/xt_DNETMAP.h 2012-10-15 21:29:22.000000000 +0200
-+++ xtables-addons-2.0/extensions/xt_DNETMAP.h 2012-11-12 19:03:51.000000000 +0100
-@@ -13,7 +13,7 @@
- };
-
- struct xt_DNETMAP_tginfo {
-- struct nf_nat_ipv4_multi_range_compat prefix;
-+ struct nf_nat_range prefix;
- __u8 flags;
- __s32 ttl;
- };
-diff -ruN xtables-addons-1.47.1/include/linux/netfilter/nf_nat.h xtables-addons-2.0/include/linux/netfilter/nf_nat.h
---- xtables-addons-1.47.1/include/linux/netfilter/nf_nat.h 2012-10-15 21:29:22.000000000 +0200
-+++ xtables-addons-2.0/include/linux/netfilter/nf_nat.h 2012-11-12 19:03:51.000000000 +0100
-@@ -22,4 +22,12 @@
- struct nf_nat_ipv4_range range[1];
- };
-
-+struct nf_nat_range {
-+ unsigned int flags;
-+ union nf_inet_addr min_addr;
-+ union nf_inet_addr max_addr;
-+ union nf_conntrack_man_proto min_proto;
-+ union nf_conntrack_man_proto max_proto;
-+};
-+
- #endif /* _NETFILTER_NF_NAT_H */
-diff -ruN xtables-addons-1.47.1/mconfig xtables-addons-2.0/mconfig
---- xtables-addons-1.47.1/mconfig 2012-10-15 21:29:22.000000000 +0200
-+++ xtables-addons-2.0/mconfig 2012-11-12 19:03:51.000000000 +0100
-@@ -2,10 +2,9 @@
- #
- build_ACCOUNT=m
- build_CHAOS=m
--build_CHECKSUM=
- build_DELUDE=m
- build_DHCPMAC=m
--build_DNETMAP=m
-+build_DNETMAP=
- build_ECHO=m
- build_IPMARK=m
- build_LOGMARK=m
-@@ -13,7 +12,6 @@
- build_STEAL=m
- build_SYSRQ=m
- build_TARPIT=m
--build_TEE=
- build_condition=m
- build_fuzzy=m
- build_geoip=m