#include <stdlib.h>
#include <syslog.h>
#include <getopt.h>
+#include <stddef.h>
#include <iptables.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <linux/netfilter_ipv4/ipt_ACCOUNT.h>
{ .name = 0 }
};
+/* Compat glue for iptables 1.4.0 */
+#ifndef XTABLES_VERSION
+#define XTABLES_VERSION IPTABLES_VERSION
+#endif
+
/* Function which prints out usage message. */
static void help(void)
{
"ACCOUNT v%s options:\n"
" --%s ip/netmask\t\tBase network IP and netmask used for this table\n"
" --%s name\t\t\tTable name for the userspace library\n",
-IPTABLES_VERSION, opts[0].name, opts[1].name);
+XTABLES_VERSION, opts[0].name, opts[1].name);
}
/* Initialize the target. */
exit_error(PARAMETER_PROBLEM, "Unexpected `!' after --%s",
opts[0].name);
- //loginfo->level = parse_level(optarg);
+#ifdef XTABLES_VERSION_CODE
+ ipparse_hostnetworkmask(optarg, &addrs, &mask, &naddrs);
+#else
parse_hostnetworkmask(optarg, &addrs, &mask, &naddrs);
+#endif
if (naddrs > 1)
exit_error(PARAMETER_PROBLEM, "multiple IP addresses not allowed");
opts[0].name, opts[1].name);
}
+static const char *print_helper_ip(struct in_addr a)
+{
+#ifdef XTABLES_VERSION_CODE
+ return ipaddr_to_numeric(&a);
+#else
+ return addr_to_dotted(&a);
+#endif
+}
+
+static const char *print_helper_mask(struct in_addr a)
+{
+#ifdef XTABLES_VERSION_CODE
+ return ipmask_to_numeric(&a);
+#else
+ return mask_to_dotted(&a);
+#endif
+}
+
static void print_it(const void *ip,
const struct xt_entry_target *target, char do_prefix)
{
printf("%s ", opts[0].name);
a.s_addr = accountinfo->net_ip;
- printf("%s", addr_to_dotted(&a));
+ printf("%s", print_helper_ip(a));
a.s_addr = accountinfo->net_mask;
- printf("%s", mask_to_dotted(&a));
+ printf("%s", print_helper_mask(a));
printf(" ");
if (do_prefix)
}
static
-struct iptables_target account
+struct xtables_target account
= {
.next = NULL,
.name = "ACCOUNT",
- .version = IPTABLES_VERSION,
+ .family = AF_INET,
+ .version = XTABLES_VERSION,
.size = IPT_ALIGN(sizeof(struct ipt_acc_info)),
- .userspacesize = IPT_ALIGN(sizeof(struct ipt_acc_info)),
+ .userspacesize = offsetof(struct ipt_acc_info, table_nr),
.help = &help,
.init = &init,
.parse = &parse,
void _init(void)
{
- register_target(&account);
+ xtables_register_target(&account);
}