Author: pluto                        Date: Thu Sep 15 12:19:58 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- moved from LINUX_2_6.

---- Files affected:
SOURCES:
   iptables-nf-ULOG.patch (1.1 -> 1.2)  (NEW), iptables-nf-comment.patch (1.1 
-> 1.2)  (NEW), iptables-nf-expire.patch (1.1 -> 1.2)  (NEW), 
iptables-nf-geoip.patch (1.1 -> 1.2)  (NEW), iptables-nf-goto.patch (1.1 -> 
1.2)  (NEW), iptables-nf-ip_queue_vwmark.patch (1.1 -> 1.2)  (NEW), 
iptables-nf-ipp2p.patch (1.1 -> 1.2)  (NEW), iptables-nf-policy.patch (1.1 -> 
1.2)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/iptables-nf-ULOG.patch
diff -u /dev/null SOURCES/iptables-nf-ULOG.patch:1.2
--- /dev/null   Thu Sep 15 14:19:58 2005
+++ SOURCES/iptables-nf-ULOG.patch      Thu Sep 15 14:19:53 2005
@@ -0,0 +1,273 @@
+ .ULOG-test6      |    2 
+ libip6t_ULOG.c   |  227 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ libip6t_ULOG.man |   27 ++++++
+ 3 files changed, 256 insertions(+)
+
+diff -Nur --exclude '*.orig' iptables.org/extensions/.ULOG-test6 
iptables/extensions/.ULOG-test6
+--- iptables.org/extensions/.ULOG-test6        1970-01-01 01:00:00.000000000 
+0100
++++ iptables/extensions/.ULOG-test6    2005-09-15 10:33:24.000000000 +0200
+@@ -0,0 +1,2 @@
++#!/bin/sh
++[ -f $KERNEL_DIR/net/ipv6/netfilter/ip6t_ULOG.c ] && echo ULOG
+diff -Nur --exclude '*.orig' iptables.org/extensions/libip6t_ULOG.c 
iptables/extensions/libip6t_ULOG.c
+--- iptables.org/extensions/libip6t_ULOG.c     1970-01-01 01:00:00.000000000 
+0100
++++ iptables/extensions/libip6t_ULOG.c 2005-09-15 10:33:24.000000000 +0200
+@@ -0,0 +1,227 @@
++/* Shared library add-on to ip6tables to add ULOG support.
++ * 
++ * (C) 2000 by Harald Welte <[EMAIL PROTECTED]>
++ *
++ * multipart netlink support based on ideas by Sebastian Zander 
++ *                                            <[EMAIL PROTECTED]>
++ *
++ * This software is released under the terms of GNU GPL
++ */
++#include <stdio.h>
++#include <netdb.h>
++#include <string.h>
++#include <stdlib.h>
++#include <syslog.h>
++#include <getopt.h>
++#include <ip6tables.h>
++#include <linux/netfilter_ipv6/ip6_tables.h>
++/* For 64bit kernel / 32bit userspace */
++#include "../include/linux/netfilter_ipv4/ipt_ULOG.h"
++
++
++void print_groups(unsigned int gmask)
++{
++      int b;
++      unsigned int test;
++
++      for (b = 31; b >= 0; b--) {
++              test = (1 << b);
++              if (gmask & test)
++                      printf("%d ", b + 1);
++      }
++}
++
++/* Function which prints out usage message. */
++static void help(void)
++{
++      printf("ULOG v%s options:\n"
++             " --ulog-nlgroup nlgroup         NETLINK group used for 
logging\n"
++             " --ulog-cprange size            Bytes of each packet to be 
passed\n"
++             " --ulog-qthreshold              Threshold of in-kernel queue\n"
++             " --ulog-prefix prefix           Prefix log messages with this 
prefix.\n\n",
++             IPTABLES_VERSION);
++}
++
++static struct option opts[] = {
++      {"ulog-nlgroup", 1, 0, '!'},
++      {"ulog-prefix", 1, 0, '#'},
++      {"ulog-cprange", 1, 0, 'A'},
++      {"ulog-qthreshold", 1, 0, 'B'},
++      {0}
++};
++
++/* Initialize the target. */
++static void init(struct ip6t_entry_target *t, unsigned int *nfcache)
++{
++      struct ipt_ulog_info *loginfo = (struct ipt_ulog_info *) t->data;
++
++      loginfo->nl_group = ULOG_DEFAULT_NLGROUP;
++      loginfo->qthreshold = ULOG_DEFAULT_QTHRESHOLD;
++
++      /* Can't cache this */
++      *nfcache |= NFC_UNKNOWN;
++}
++
++#define IPT_LOG_OPT_NLGROUP 0x01
++#define IPT_LOG_OPT_PREFIX 0x02
++#define IPT_LOG_OPT_CPRANGE 0x04
++#define IPT_LOG_OPT_QTHRESHOLD 0x08
++
++/* 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 ipt_ulog_info *loginfo =
++          (struct ipt_ulog_info *) (*target)->data;
++      int group_d;
++
++      switch (c) {
++      case '!':
++              if (*flags & IPT_LOG_OPT_NLGROUP)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Can't specify --ulog-nlgroup twice");
++
++              if (check_inverse(optarg, &invert, NULL, 0))
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Unexpected `!' after --ulog-nlgroup");
++              group_d = atoi(optarg);
++              if (group_d > 32 || group_d < 1)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "--ulog-nlgroup has to be between 1 and 32");
++
++              loginfo->nl_group = (1 << (group_d - 1));
++
++              *flags |= IPT_LOG_OPT_NLGROUP;
++              break;
++
++      case '#':
++              if (*flags & IPT_LOG_OPT_PREFIX)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Can't specify --ulog-prefix twice");
++
++              if (check_inverse(optarg, &invert, NULL, 0))
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Unexpected `!' after --ulog-prefix");
++
++              if (strlen(optarg) > sizeof(loginfo->prefix) - 1)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Maximum prefix length %u for --ulog-prefix",
++                                 (unsigned int)sizeof(loginfo->prefix) - 1);
++
++              strcpy(loginfo->prefix, optarg);
++              *flags |= IPT_LOG_OPT_PREFIX;
++              break;
++      case 'A':
++              if (*flags & IPT_LOG_OPT_CPRANGE)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Can't specify --ulog-cprange twice");
++              if (atoi(optarg) < 0)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Negative copy range?");
++#ifdef KERNEL_64_USERSPACE_32
++              loginfo->copy_range = (unsigned long long)atoll(optarg);
++#else
++              loginfo->copy_range = atoi(optarg);
++#endif
++              *flags |= IPT_LOG_OPT_CPRANGE;
++              break;
++      case 'B':
++              if (*flags & IPT_LOG_OPT_QTHRESHOLD)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Can't specify --ulog-qthreshold twice");
++              if (atoi(optarg) < 1)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Negative or zero queue threshold ?");
++              if (atoi(optarg) > ULOG_MAX_QLEN)
++                      exit_error(PARAMETER_PROBLEM,
++                                 "Maximum queue length exceeded");
++#ifdef KERNEL_64_USERSPACE_32
++              loginfo->qthreshold = (unsigned long long)atoll(optarg);
++#else
++              loginfo->qthreshold = atoi(optarg);
++#endif
++              *flags |= IPT_LOG_OPT_QTHRESHOLD;
++              break;
++      }
++      return 1;
++}
++
++/* Final check; nothing. */
++static void final_check(unsigned int flags)
++{
++}
++
++/* Saves the union ip6t_targinfo in parsable form to stdout. */
++static void save(const struct ip6t_ip6 *ip,
++               const struct ip6t_entry_target *target)
++{
++      const struct ipt_ulog_info *loginfo
++          = (const struct ipt_ulog_info *) target->data;
++
++      if (strcmp(loginfo->prefix, "") != 0)
++              printf("--ulog-prefix \"%s\" ", loginfo->prefix);
++
++      if (loginfo->nl_group != ULOG_DEFAULT_NLGROUP) {
++              printf("--ulog-nlgroup ");
++              print_groups(loginfo->nl_group);
++      }
++#ifdef KERNEL_64_USERSPACE_32
++      if (loginfo->copy_range)
++              printf("--ulog-cprange %llu ", loginfo->copy_range);
++
++      if (loginfo->qthreshold != ULOG_DEFAULT_QTHRESHOLD)
++              printf("--ulog-qthreshold %llu ", loginfo->qthreshold);
++#else
++      if (loginfo->copy_range)
++              printf("--ulog-cprange %u ", (unsigned int)loginfo->copy_range);
++
++      if (loginfo->qthreshold != ULOG_DEFAULT_QTHRESHOLD)
++              printf("--ulog-qthreshold %u ", (unsigned 
int)loginfo->qthreshold);
++#endif
++}
++
++/* Prints out the targinfo. */
++static void
++print(const struct ip6t_ip6 *ip,
++      const struct ip6t_entry_target *target, int numeric)
++{
++      const struct ipt_ulog_info *loginfo
++          = (const struct ipt_ulog_info *) target->data;
++
++      printf("ULOG ");
++#ifdef KERNEL_64_USERSPACE_32
++      printf("copy_range %llu nlgroup ", loginfo->copy_range);
++#else
++      printf("copy_range %u nlgroup ", (unsigned int)loginfo->copy_range);
++#endif
++      print_groups(loginfo->nl_group);
++      if (strcmp(loginfo->prefix, "") != 0)
++              printf("prefix `%s' ", loginfo->prefix);
++#ifdef KERNEL_64_USERSPACE_32
++      printf("queue_threshold %llu ", loginfo->qthreshold);
++#else
++      printf("queue_threshold %u ", (unsigned int)loginfo->qthreshold);
++#endif
++}
++
++static struct ip6tables_target ulog = {
++      .next           = NULL,
++      .name           = "ULOG",
++      .version        = IPTABLES_VERSION,
++      .size           = IP6T_ALIGN(sizeof(struct ipt_ulog_info)),
++      .userspacesize  = IP6T_ALIGN(sizeof(struct ipt_ulog_info)),
++      .help           = &help,
++      .init           = &init,
++      .parse          = &parse,
++      .final_check    = &final_check,
++      .print          = &print,
++      .save           = &save,
++      .extra_opts     = opts
++};
++
++void _init(void)
++{
++      register_target6(&ulog);
++}
+diff -Nur --exclude '*.orig' iptables.org/extensions/libip6t_ULOG.man 
iptables/extensions/libip6t_ULOG.man
+--- iptables.org/extensions/libip6t_ULOG.man   1970-01-01 01:00:00.000000000 
+0100
++++ iptables/extensions/libip6t_ULOG.man       2005-09-15 10:33:24.000000000 
+0200
+@@ -0,0 +1,27 @@
++This target provides userspace logging of matching packets.  When this
++target is set for a rule, the Linux kernel will multicast this packet
++through a
++.IR netlink 
++socket. One or more userspace processes may then subscribe to various 
++multicast groups and receive the packets.
++Like LOG, this is a "non-terminating target", i.e. rule traversal
++continues at the next rule.
++.TP
++.BI "--ulog-nlgroup " "nlgroup"
++This specifies the netlink group (1-32) to which the packet is sent.
++Default value is 1.
++.TP
++.BI "--ulog-prefix " "prefix"
++Prefix log messages with the specified prefix; up to 32 characters
++long, and useful for distinguishing messages in the logs.
++.TP
++.BI "--ulog-cprange " "size"
++Number of bytes to be copied to userspace.  A value of 0 always copies
++the entire packet, regardless of its size.  Default is 0.
++.TP
++.BI "--ulog-qthreshold " "size"
++Number of packet to queue inside kernel.  Setting this value to, e.g. 10
++accumulates ten packets inside the kernel and transmits them as one
++netlink multipart message to userspace.  Default is 1 (for backwards
++compatibility).
++.br

================================================================
Index: SOURCES/iptables-nf-comment.patch
diff -u /dev/null SOURCES/iptables-nf-comment.patch:1.2
--- /dev/null   Thu Sep 15 14:19:58 2005
+++ SOURCES/iptables-nf-comment.patch   Thu Sep 15 14:19:53 2005
@@ -0,0 +1,115 @@
+ .comment-test    |    2 +
+ libipt_comment.c |   58 
++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 34 insertions(+), 26 deletions(-)
+
+diff -Nur iptables.org/extensions/.comment-test 
iptables/extensions/.comment-test
+--- iptables.org/extensions/.comment-test      1970-01-01 01:00:00.000000000 
+0100
++++ iptables/extensions/.comment-test  2005-09-15 08:20:04.000000000 +0200
+@@ -0,0 +1,2 @@
++#!/bin/sh
++[ -f $KERNEL_DIR/include/linux/netfilter_ipv4/ipt_comment.h ] && echo comment
+diff -Nur iptables.org/extensions/libipt_comment.c 
iptables/extensions/libipt_comment.c
+--- iptables.org/extensions/libipt_comment.c   2005-09-15 08:05:41.000000000 
+0200
++++ iptables/extensions/libipt_comment.c       2005-09-15 08:20:04.000000000 
+0200
+@@ -1,5 +1,5 @@
+-/* Shared library add-on to iptables to add comment match support.
+- *
++/* Shared library add-on to iptables to add comment match support. 
++ * 
+  * ChangeLog
+  *     2003-05-13: Brad Fisher <[EMAIL PROTECTED]>
+  *         Initial comment match
+@@ -29,16 +29,24 @@
+       {0}
+ };
+ 
++/* Initialize the match. */
+ static void
+-parse_comment(const char *s, struct ipt_comment_info *info)
++init(struct ipt_entry_match *m, unsigned int *nfcache)
++{
++      *nfcache |= NFC_UNKNOWN;
++}
++
++static void
++parse_comment(const unsigned char *s, struct ipt_comment_info *info)
+ {     
+       int slen = strlen(s);
+ 
+-      if (slen >= IPT_MAX_COMMENT_LEN) {
++      if (slen > IPT_MAX_COMMENT_LEN) {
+               exit_error(PARAMETER_PROBLEM,
+                       "COMMENT must be shorter than %i characters", 
IPT_MAX_COMMENT_LEN);
+       }
+-      strcpy((char *)info->comment, s);
++      
++      strcpy(info->comment, s);
+ }
+ 
+ /* Function which parses command options; returns true if it
+@@ -53,11 +61,12 @@
+ 
+       switch (c) {
+       case '1':
+-              check_inverse(argv[optind-1], &invert, &optind, 0);
++              check_inverse(optarg, &invert, &optind, 0);
+               if (invert) {
+                       exit_error(PARAMETER_PROBLEM,
+                                       "Sorry, you can't have an inverted 
comment");
+               }
++              
+               parse_comment(argv[optind-1], commentinfo);
+               *flags = 1;
+               break;
+@@ -83,34 +92,31 @@
+       const struct ipt_entry_match *match,
+       int numeric)
+ {
+-      struct ipt_comment_info *commentinfo = (struct ipt_comment_info 
*)match->data;
+-
+-      commentinfo->comment[IPT_MAX_COMMENT_LEN-1] = '\0';
+-      printf("/* %s */ ", commentinfo->comment);
++      printf("/* %s */ ", ((struct ipt_comment_info *)match->data)->comment);
+ }
+ 
+ /* Saves the union ipt_matchinfo in parsable form to stdout. */
+ static void
+ save(const struct ipt_ip *ip, const struct ipt_entry_match *match)
+ {
+-      struct ipt_comment_info *commentinfo = (struct ipt_comment_info 
*)match->data;
+-
+-      commentinfo->comment[IPT_MAX_COMMENT_LEN-1] = '\0';
+-      printf("--comment \"%s\" ", commentinfo->comment);
++/* I wonder whether this works? */
++      printf("--comment \"%s\" ", ((struct ipt_comment_info 
*)match->data)->comment );
+ }
+ 
+-static struct iptables_match comment = {
+-    .next             = NULL,
+-    .name             = "comment",
+-    .version          = IPTABLES_VERSION,
+-    .size             = IPT_ALIGN(sizeof(struct ipt_comment_info)),
+-    .userspacesize    = IPT_ALIGN(sizeof(struct ipt_comment_info)),
+-    .help             = &help,
+-    .parse            = &parse,
+-    .final_check      = &final_check,
+-    .print            = &print,
+-    .save             = &save,
+-    .extra_opts               = opts
++static
++struct iptables_match comment
++= { .next            = NULL,
++    .name            = "comment",
++    .version         = IPTABLES_VERSION,
++    .size            = IPT_ALIGN(sizeof(struct ipt_comment_info)),
++    .userspacesize   = IPT_ALIGN(sizeof(struct ipt_comment_info)),
++    .help            = &help,
++    .init            = &init,
++    .parse           = &parse,
++    .final_check     = &final_check,
++    .print           = &print,
++    .save            = &save,
++    .extra_opts      = opts
+ };
+ 
+ void _init(void)

================================================================
Index: SOURCES/iptables-nf-expire.patch
diff -u /dev/null SOURCES/iptables-nf-expire.patch:1.2
--- /dev/null   Thu Sep 15 14:19:58 2005
+++ SOURCES/iptables-nf-expire.patch    Thu Sep 15 14:19:53 2005
@@ -0,0 +1,388 @@
+ .expire-test       |    3 
+ .expire-test6      |    3 
+ libip6t_expire.c   |  170 
+++++++++++++++++++++++++++++++++++++++++++++++++++++
+ libip6t_expire.man |    5 +
+ libipt_expire.c    |  170 
+++++++++++++++++++++++++++++++++++++++++++++++++++++
+ libipt_expire.man  |    5 +
+ 6 files changed, 356 insertions(+)
+
+diff -uNr iptables-1.3.3/extensions/.expire-test 
iptables-1.3.3.patched/extensions/.expire-test
+--- iptables-1.3.3/extensions/.expire-test     1970-01-01 01:00:00.000000000 
+0100
++++ iptables-1.3.3.patched/extensions/.expire-test     2005-09-15 
09:51:28.547760250 +0200
+@@ -0,0 +1,3 @@
++#!/bin/sh
++
++[ -f $KERNEL_DIR/include/linux/netfilter_ipv4/ipt_expire.h ] && echo expire
+diff -uNr iptables-1.3.3/extensions/.expire-test6 
iptables-1.3.3.patched/extensions/.expire-test6
+--- iptables-1.3.3/extensions/.expire-test6    1970-01-01 01:00:00.000000000 
+0100
++++ iptables-1.3.3.patched/extensions/.expire-test6    2005-09-15 
09:51:28.547760250 +0200
+@@ -0,0 +1,3 @@
++#!/bin/sh
++
++[ -f $KERNEL_DIR/include/linux/netfilter_ipv6/ip6t_expire.h ] && echo expire
+diff -uNr iptables-1.3.3/extensions/libip6t_expire.c 
iptables-1.3.3.patched/extensions/libip6t_expire.c
+--- iptables-1.3.3/extensions/libip6t_expire.c 1970-01-01 01:00:00.000000000 
+0100
++++ iptables-1.3.3.patched/extensions/libip6t_expire.c 2005-09-15 
09:51:28.551760500 +0200
+@@ -0,0 +1,170 @@
++/* This library manipulates expiring firewall rules
++ *
++ * This library is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this library; if not, write to:
++ *      The Free Software Foundation, Inc.
++ *      59 Temple Place, Suite 330
++ *      Boston, MA  02111-1307  USA
++ *
++ * Copyright Š 2005 Bryan Cardillo <[EMAIL PROTECTED]>
++ */
++
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++#include <getopt.h>
++#include <time.h>
++
++#include <ip6tables.h>
++#include <linux/netfilter_ipv6/ip6t_expire.h>
++
++static void ip6t_exp_help(void);
++static int ip6t_exp_parse(int, char **, int, unsigned int *,
++              const struct ip6t_entry *, unsigned int *,
++              struct ip6t_entry_match **);
++static void ip6t_exp_final_check(unsigned int);
++static void ip6t_exp_print(const struct ip6t_ip *,
++              const struct ip6t_entry_match *, int);
++static void ip6t_exp_save(const struct ip6t_ip *, const struct 
ip6t_entry_match *);
++
++/**
++ * options
++ */
++static struct option ip6t_exp_opts[] = {
++      { "expiration", 1, 0, 'e' },
++      { 0 }
++};
++
++/**
++ * match
++ */
++static struct iptables_match ip6t_expire_match = {
++      .next = NULL,
++      .name = "expire",
++      .version = IPTABLES_VERSION,
++      .size = IP6T_ALIGN(sizeof(struct ip6t_exp_info)),
++      .userspacesize = IP6T_ALIGN(sizeof(struct ip6t_exp_info)),
++      .help = &ip6t_exp_help,
++      .parse = &ip6t_exp_parse,
++      .final_check = &ip6t_exp_final_check,
++      .print = &ip6t_exp_print,
++      .save = &ip6t_exp_save,
++      .extra_opts = ip6t_exp_opts
++};
++
++/**
++ * shared library initialization
++ * @see register_match()
++ */
++void
++_init(void)
++{
++      register_match(&ip6t_expire_match);
++}
++
++/**
++ * print usage information
++ */
++static void
++ip6t_exp_help(void)
++{
++    printf("EXPIRE match options\n"
++           "  --expiration [+]TIME\t\t"
++         "rule expires at [in] TIME\n\n");
++}
++
++/**
++ * parse module specific options
++ * @param c the short option character
++ * @param argv the arguments array
++ * @param invert is this an inverted argument
++ * @param flags module specific flags
++ * @param entry the entry
++ * @param nfcache netfilter cache flags
++ * @param match the match
++ * @return zero if an option was found, non-zero otherwise
++ */
++static int
++ip6t_exp_parse(int c, char **argv, int invert, unsigned int *flags,
++      const struct ip6t_entry *entry, unsigned int *nfcache,
++      struct ip6t_entry_match **match)
++{
++      char *arg;
++      struct ip6t_exp_info *info;
++      
++      info = (struct ip6t_exp_info *)(*match)->data;
++      info->expiration = 0;
++      switch (c) {
++              case 'e':
++                      arg = argv[optind-1];
++                      check_inverse(arg, &invert, &optind, 0);
++                      if (invert)
++                              exit_error(PARAMETER_PROBLEM,
++                                      "--expiration cannot be inverted");
++                        if (*arg == '+')
++                              arg++;
++                      if (string_to_number_l(
++                                      arg, 1, 0, &info->expiration) < 0)
++                              exit_error(PARAMETER_PROBLEM,
++                                      "invalid expiration time");
++                      *flags = 1;
++                      if (*argv[optind-1] == '+')
++                              info->expiration += time(NULL);
++                      break;
++              default:
++                      return 0;
++      }
++      return 1;
++}
++
++/**
++ * ensures an expiration was specified
++ * @param flags module specific flags from options parsing
++ */
++static void
++ip6t_exp_final_check(unsigned int flags)
++{
++      if (flags != 1)
++              exit_error(PARAMETER_PROBLEM,
++                      "you must specify an expiration time (--expiration)");
++}
++
++/**
++ * print information about an expiring match
++ * in a format suitable for viewing
++ * @param ip the address information
++ * @param match the match
++ * @param numeric the verbose level (?)
++ */
++static void
++ip6t_exp_print(const struct ip6t_ip *ip,
++      const struct ip6t_entry_match *match, int numeric)
++{
++      struct ip6t_exp_info *info;
++      info = (struct ip6t_exp_info *)match->data;
++      printf("expires in %lds ", info->expiration - time(NULL));
++}
++
++/**
++ * print information about an expiring match
++ * in a format suitable for reconstructing the match
++ * @param ip the address information
++ * @param match the match
++ */
++static void
++ip6t_exp_save(const struct ip6t_ip *ip, const struct ip6t_entry_match *match)
<<Diff was trimmed, longer than 597 lines>>
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to