trunk.. same deal as changeset:6526
[openwrt/staging/florian.git] / package / iptables / patches / 005-imq1.patch
diff --git a/package/iptables/patches/005-imq1.patch b/package/iptables/patches/005-imq1.patch
new file mode 100644 (file)
index 0000000..4591890
--- /dev/null
@@ -0,0 +1,224 @@
+diff -urN iptables.old/extensions/.IMQ-test iptables.dev/extensions/.IMQ-test
+--- iptables.old/extensions/.IMQ-test  1970-01-01 01:00:00.000000000 +0100
++++ iptables.dev/extensions/.IMQ-test  2005-10-09 01:00:36.358959750 +0200
+@@ -0,0 +1,3 @@
++#!/bin/sh
++# True if IMQ target patch is applied.
++[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_IMQ.c ] && echo IMQ
+diff -urN iptables.old/extensions/.IMQ-test6 iptables.dev/extensions/.IMQ-test6
+--- iptables.old/extensions/.IMQ-test6 1970-01-01 01:00:00.000000000 +0100
++++ iptables.dev/extensions/.IMQ-test6 2005-10-09 01:00:36.358959750 +0200
+@@ -0,0 +1,3 @@
++#!/bin/sh
++# True if IMQ target patch is applied.
++[ -f $KERNEL_DIR/net/ipv6/netfilter/ip6t_IMQ.c ] && echo IMQ
+diff -urN iptables.old/extensions/libip6t_IMQ.c iptables.dev/extensions/libip6t_IMQ.c
+--- iptables.old/extensions/libip6t_IMQ.c      1970-01-01 01:00:00.000000000 +0100
++++ iptables.dev/extensions/libip6t_IMQ.c      2005-10-09 01:00:36.358959750 +0200
+@@ -0,0 +1,101 @@
++/* Shared library add-on to iptables to add IMQ target support. */
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++#include <getopt.h>
++
++#include <ip6tables.h>
++#include <linux/netfilter_ipv6/ip6_tables.h>
++#include <linux/netfilter_ipv6/ip6t_IMQ.h>
++
++/* Function which prints out usage message. */
++static void
++help(void)
++{
++      printf(
++"IMQ target v%s options:\n"
++"  --todev <N>                enqueue to imq<N>, defaults to 0\n", 
++IPTABLES_VERSION);
++}
++
++static struct option opts[] = {
++      { "todev", 1, 0, '1' },
++      { 0 }
++};
++
++/* Initialize the target. */
++static void
++init(struct ip6t_entry_target *t, unsigned int *nfcache)
++{
++      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)t->data;
++
++      mr->todev = 0;
++      *nfcache |= NFC_UNKNOWN;
++}
++
++/* 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 ip6t_entry *entry,
++      struct ip6t_entry_target **target)
++{
++      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)(*target)->data;
++      
++      switch(c) {
++      case '1':
++              if (check_inverse(optarg, &invert, NULL, 0))
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Unexpected `!' after --todev");
++              mr->todev=atoi(optarg);
++              break;
++      default:
++              return 0;
++      }
++      return 1;
++}
++
++static void
++final_check(unsigned int flags)
++{
++}
++
++/* Prints out the targinfo. */
++static void
++print(const struct ip6t_ip6 *ip,
++      const struct ip6t_entry_target *target,
++      int numeric)
++{
++      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;
++
++      printf("IMQ: todev %u ", mr->todev);
++}
++
++/* Saves the union ipt_targinfo in parsable form to stdout. */
++static void
++save(const struct ip6t_ip6 *ip, const struct ip6t_entry_target *target)
++{
++      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;
++
++      printf("--todev %u", mr->todev);
++}
++
++static struct ip6tables_target imq = {
++      .next           = NULL,
++      .name           = "IMQ",
++      .version        = IPTABLES_VERSION,
++      .size           = IP6T_ALIGN(sizeof(struct ip6t_imq_info)),
++      .userspacesize  = IP6T_ALIGN(sizeof(struct ip6t_imq_info)),
++      .help           = &help,
++      .init           = &init,
++      .parse          = &parse,
++      .final_check    = &final_check,
++      .print          = &print,
++      .save           = &save,
++      .extra_opts     = opts
++};
++
++void _init(void)
++{
++      register_target6(&imq);
++}
+diff -urN iptables.old/extensions/libipt_IMQ.c iptables.dev/extensions/libipt_IMQ.c
+--- iptables.old/extensions/libipt_IMQ.c       1970-01-01 01:00:00.000000000 +0100
++++ iptables.dev/extensions/libipt_IMQ.c       2005-10-09 01:00:36.358959750 +0200
+@@ -0,0 +1,101 @@
++/* Shared library add-on to iptables to add IMQ target support. */
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++#include <getopt.h>
++
++#include <iptables.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ipt_IMQ.h>
++
++/* Function which prints out usage message. */
++static void
++help(void)
++{
++      printf(
++"IMQ target v%s options:\n"
++"  --todev <N>                enqueue to imq<N>, defaults to 0\n", 
++IPTABLES_VERSION);
++}
++
++static struct option opts[] = {
++      { "todev", 1, 0, '1' },
++      { 0 }
++};
++
++/* Initialize the target. */
++static void
++init(struct ipt_entry_target *t, unsigned int *nfcache)
++{
++      struct ipt_imq_info *mr = (struct ipt_imq_info*)t->data;
++
++      mr->todev = 0;
++      *nfcache |= NFC_UNKNOWN;
++}
++
++/* 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,
++      struct ipt_entry_target **target)
++{
++      struct ipt_imq_info *mr = (struct ipt_imq_info*)(*target)->data;
++      
++      switch(c) {
++      case '1':
++              if (check_inverse(optarg, &invert, NULL, 0))
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Unexpected `!' after --todev");
++              mr->todev=atoi(optarg);
++              break;
++      default:
++              return 0;
++      }
++      return 1;
++}
++
++static void
++final_check(unsigned int flags)
++{
++}
++
++/* Prints out the targinfo. */
++static void
++print(const struct ipt_ip *ip,
++      const struct ipt_entry_target *target,
++      int numeric)
++{
++      struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;
++
++      printf("IMQ: todev %u ", mr->todev);
++}
++
++/* Saves the union ipt_targinfo in parsable form to stdout. */
++static void
++save(const struct ipt_ip *ip, const struct ipt_entry_target *target)
++{
++      struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;
++
++      printf("--todev %u", mr->todev);
++}
++
++static struct iptables_target imq = {
++      .next           = NULL,
++      .name           = "IMQ",
++      .version        = IPTABLES_VERSION,
++      .size           = IPT_ALIGN(sizeof(struct ipt_imq_info)),
++      .userspacesize  = IPT_ALIGN(sizeof(struct ipt_imq_info)),
++      .help           = &help,
++      .init           = &init,
++      .parse          = &parse,
++      .final_check    = &final_check,
++      .print          = &print,
++      .save           = &save,
++      .extra_opts     = opts
++};
++
++void _init(void)
++{
++      register_target(&imq);
++}