Hi.

After not receiving a response for two weeks second try:

The attached patch adds a new option --terminate to the MARK target 
which lets the user choose
if MARK should return IPT_CONTINUE (normal behaviour) or NF_ACCEPT (to 
terminate further rule processing).
This can be useful if you have complex marking rules, f.e. for QoS.
The current patch is against a clean MARK target, if anyone wishes i can 
also make a patch which will apply after MARK-operations.
A CONNMARK patch will follow but currently CONNMARK doesn't apply clean 
against 2.4.18/2.4.19-pre10 ..

Bye,
Patrick

diff -urN userspace-clean/patch-o-matic/extra/MARK-terminate.patch 
userspace/patch-o-matic/extra/MARK-terminate.patch
--- userspace-clean/patch-o-matic/extra/MARK-terminate.patch    Thu Jan  1 01:00:00 
1970
+++ userspace/patch-o-matic/extra/MARK-terminate.patch  Mon Jun 17 05:36:21 2002
@@ -0,0 +1,23 @@
+diff -urN linux/include/linux/netfilter_ipv4/ipt_MARK.h 
+linux-2.4.18-terminate/include/linux/netfilter_ipv4/ipt_MARK.h
+--- linux/include/linux/netfilter_ipv4/ipt_MARK.h      Fri Mar 17 19:56:20 2000
++++ linux-2.4.18-terminate/include/linux/netfilter_ipv4/ipt_MARK.h     Mon Jun 17 
+05:07:29 2002
+@@ -3,6 +3,7 @@
+ 
+ struct ipt_mark_target_info {
+       unsigned long mark;
++      u_int8_t terminate;
+ };
+ 
+ #endif /*_IPT_MARK_H_target*/
+diff -urN linux/net/ipv4/netfilter/ipt_MARK.c 
+linux-2.4.18-terminate/net/ipv4/netfilter/ipt_MARK.c
+--- linux/net/ipv4/netfilter/ipt_MARK.c        Sun Sep 30 21:26:08 2001
++++ linux-2.4.18-terminate/net/ipv4/netfilter/ipt_MARK.c       Mon Jun 17 05:07:58 
+2002
+@@ -21,7 +21,7 @@
+               (*pskb)->nfmark = markinfo->mark;
+               (*pskb)->nfcache |= NFC_ALTERED;
+       }
+-      return IPT_CONTINUE;
++      return markinfo->terminate ? NF_ACCEPT : IPT_CONTINUE;
+ }
+ 
+ static int
diff -urN userspace-clean/patch-o-matic/extra/MARK-terminate.patch.help 
userspace/patch-o-matic/extra/MARK-terminate.patch.help
--- userspace-clean/patch-o-matic/extra/MARK-terminate.patch.help       Thu Jan  1 
01:00:00 1970
+++ userspace/patch-o-matic/extra/MARK-terminate.patch.help     Mon Jun 17 05:36:21 
+2002
@@ -0,0 +1,9 @@
+Author: Patrick McHardy <[EMAIL PROTECTED]>
+Status: Working
+
+This patch adds a new option --terminate to MARK to terminate chain traversal.
+
+# iptables -t mangle -A PREROUTING -m tos --tos 0x08 -j MARK --set-mark 0x15 
+--terminate
+
+***** WARNING ***** This patch also patch the userspace directory which means that you
+                    you have to recompile and reinstall the iptables package after 
+that.
diff -urN userspace-clean/patch-o-matic/extra/MARK-terminate.patch.userspace 
userspace/patch-o-matic/extra/MARK-terminate.patch.userspace
--- userspace-clean/patch-o-matic/extra/MARK-terminate.patch.userspace  Thu Jan  1 
01:00:00 1970
+++ userspace/patch-o-matic/extra/MARK-terminate.patch.userspace        Mon Jun 17 
+05:36:21 2002
@@ -0,0 +1,42 @@
+diff -urN extensions/libipt_MARK.c extensions/libipt_MARK.c
+--- extensions/libipt_MARK.c   Wed May 29 15:08:16 2002
++++ extensions/libipt_MARK.c   Mon Jun 17 05:21:16 2002
+@@ -26,6 +26,7 @@
+ 
+ static struct option opts[] = {
+       { "set-mark", 1, 0, '1' },
++      { "terminate", 0, 0, '2' },
+       { 0 }
+ };
+ 
+@@ -57,6 +58,10 @@
+               *flags = 1;
+               break;
+ 
++      case '2':
++              markinfo->terminate = 1;
++              break;
++              
+       default:
+               return 0;
+       }
+@@ -88,6 +93,9 @@
+               (const struct ipt_mark_target_info *)target->data;
+       printf("MARK set ");
+       print_mark(markinfo->mark, numeric);
++      
++      if (markinfo->terminate)
++              printf("terminate ");
+ }
+ 
+ /* Saves the union ipt_targinfo in parsable form to stdout. */
+@@ -98,6 +106,9 @@
+               (const struct ipt_mark_target_info *)target->data;
+ 
+       printf("--set-mark 0x%lx ", markinfo->mark);
++
++      if (markinfo->terminate)
++              printf("--terminate ");
+ }
+ 
+ static

Reply via email to