diff -uprN ../../debian.old/build/iptables-1.2.9/extensions/.connrate-test iptables-1.2.9/extensions/.connrate-test --- ../../debian.old/build/iptables-1.2.9/extensions/.connrate-test 1970-01-01 02:00:00.000000000 +0200 +++ iptables-1.2.9/extensions/.connrate-test 2004-02-08 07:18:35.000000000 +0200 @@ -0,0 +1,2 @@ +#! /bin/sh +[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_connrate.c ] && echo connrate diff -uprN ../../debian.old/build/iptables-1.2.9/extensions/Makefile iptables-1.2.9/extensions/Makefile --- ../../debian.old/build/iptables-1.2.9/extensions/Makefile 2003-10-16 10:34:36.000000000 +0300 +++ iptables-1.2.9/extensions/Makefile 2004-02-08 21:13:57.000000000 +0200 @@ -5,7 +5,7 @@ # header files are present in the include/linux directory of this iptables # package (HW) # -PF_EXT_SLIB:=ah connlimit connmark conntrack dscp ecn esp helper icmp iprange length limit mac mark multiport owner physdev pkttype realm rpc standard state tcp tcpmss tos ttl udp unclean CLASSIFY CONNMARK DNAT DSCP ECN LOG MARK MASQUERADE MIRROR NETMAP NOTRACK REDIRECT REJECT SAME SNAT TARPIT TCPMSS TOS TRACE TTL ULOG +PF_EXT_SLIB:=ah connlimit connmark connrate conntrack dscp ecn esp helper icmp iprange length limit mac mark multiport owner physdev pkttype realm rpc standard state tcp tcpmss tos ttl udp unclean CLASSIFY CONNMARK DNAT DSCP ECN LOG MARK MASQUERADE MIRROR NETMAP NOTRACK REDIRECT REJECT SAME SNAT TARPIT TCPMSS TOS TRACE TTL ULOG PF6_EXT_SLIB:=eui64 hl icmpv6 length limit mac mark multiport owner standard tcp udp HL LOG MARK TRACE # Optionals diff -uprN ../../debian.old/build/iptables-1.2.9/extensions/libipt_connrate.c iptables-1.2.9/extensions/libipt_connrate.c --- ../../debian.old/build/iptables-1.2.9/extensions/libipt_connrate.c 1970-01-01 02:00:00.000000000 +0200 +++ iptables-1.2.9/extensions/libipt_connrate.c 2004-02-08 21:17:51.000000000 +0200 @@ -0,0 +1,135 @@ +/* Shared library add-on to iptables to add connection rate tracking + support. */ +#include +#include +#include +#include +#include +#include +#include +#include + +/* Function which prints out usage message. */ +static void +help(void) +{ + printf( +"connrate v%s options:\n" +" [!] --connrate from:[to]\n" +" FIXME\n" +"\n", IPTABLES_VERSION); +} + +static struct option opts[] = { + { "connrate", 1, 0, '1' }, + {0} +}; + +/* Initialize the match. */ +static void +init(struct ipt_entry_match *m, unsigned int *nfcache) +{ + /* Can't cache this */ + *nfcache |= NFC_UNKNOWN; +} + +static void +parse_range(const char *arg, struct ipt_connrate_info *si) +{ + char *colon,*p; + + si->from = strtol(arg,&colon,10); + if (*colon != ':') + exit_error(PARAMETER_PROBLEM, "Bad range `%s'", arg); + si->to = strtol(colon+1,&p,10); + if (p == colon+1) { + /* second number omited */ + si->to = 0xffffffff; + } + if (si->from > si->to) + exit_error(PARAMETER_PROBLEM, "%lu should be less than %lu", si->from,si->to); +} + +/* Function which parses command options; returns true if it + ate an option */ +static int +parse(int c, char **argv, int invert, unsigned int *flags, + const struct ipt_entry *entry, + unsigned int *nfcache, + struct ipt_entry_match **match) +{ + struct ipt_connrate_info *sinfo = (struct ipt_connrate_info *)(*match)->data; + int i; + + switch (c) { + case '1': + if (check_inverse(optarg, &invert, &optind, 0)) + optind++; + + parse_range(argv[optind-1], sinfo); + if (invert) { + i = sinfo->from; + sinfo->from = sinfo->to; + sinfo->to = i; + } + *flags = 1; + break; + + default: + return 0; + } + + return 1; +} + +static void final_check(unsigned int flags) +{ + if (!flags) + exit_error(PARAMETER_PROBLEM, "You must specify `--connrate'"); +} + +/* Prints out the matchinfo. */ +static void +print(const struct ipt_ip *ip, + const struct ipt_entry_match *match, + int numeric) +{ + struct ipt_connrate_info *sinfo = (struct ipt_connrate_info *)match->data; + + if (sinfo->from > sinfo->to) + printf("connrate ! %lu:%lu",sinfo->to,sinfo->from); + else + printf("connrate %lu:%lu",sinfo->from,sinfo->to); +} + +/* Saves the matchinfo in parsable form to stdout. */ +static void save(const struct ipt_ip *ip, const struct ipt_entry_match *match) +{ + struct ipt_connrate_info *sinfo = (struct ipt_connrate_info *)match->data; + + if (sinfo->from > sinfo->to) + printf("! --connrate %lu:%lu",sinfo->to,sinfo->from); + else + printf("--connrate %lu:%lu",sinfo->from,sinfo->to); +} + +static +struct iptables_match state += { NULL, + "connrate", + IPTABLES_VERSION, + IPT_ALIGN(sizeof(struct ipt_connrate_info)), + IPT_ALIGN(sizeof(struct ipt_connrate_info)), + &help, + &init, + &parse, + &final_check, + &print, + &save, + opts +}; + +void _init(void) +{ + register_match(&state); +}