* [PATCH] CLASSIFY target
@ 2003-04-08 16:04 Patrick McHardy
2003-04-08 20:05 ` Martin Josefsson
0 siblings, 1 reply; 8+ messages in thread
From: Patrick McHardy @ 2003-04-08 16:04 UTC (permalink / raw)
To: Netfilter Development Mailinglist
[-- Attachment #1: Type: text/plain, Size: 232 bytes --]
This patch adds a new target "CLASSIFY" which sets skb->priority.
Several qdiscs can use this for classification. A list of the qdiscs
currently capable of doing so is in the help text. Please consider
for inclusion.
Bye,
Patrick
[-- Attachment #2: nf-CLASSIFY.diff --]
[-- Type: text/plain, Size: 7982 bytes --]
diff -urN a/patch-o-matic/extra/CLASSIFY.patch b/patch-o-matic/extra/CLASSIFY.patch
--- a/patch-o-matic/extra/CLASSIFY.patch 1970-01-01 01:00:00.000000000 +0100
+++ b/patch-o-matic/extra/CLASSIFY.patch 2003-04-07 21:53:09.000000000 +0200
@@ -0,0 +1,83 @@
+diff -urN linux-2.4.20-clean/include/linux/netfilter_ipv4/ipt_CLASSIFY.h linux-2.4.20_nfclassify/include/linux/netfilter_ipv4/ipt_CLASSIFY.h
+--- linux-2.4.20-clean/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.20_nfclassify/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 2003-01-25 02:11:35.000000000 +0100
+@@ -0,0 +1,8 @@
++#ifndef _IPT_CLASSIFY_H
++#define _IPT_CLASSIFY_H
++
++struct ipt_classify_target_info {
++ unsigned int priority;
++};
++
++#endif /*_IPT_CLASSIFY_H */
+diff -urN linux-2.4.20-clean/net/ipv4/netfilter/ipt_CLASSIFY.c linux-2.4.20_nfclassify/net/ipv4/netfilter/ipt_CLASSIFY.c
+--- linux-2.4.20-clean/net/ipv4/netfilter/ipt_CLASSIFY.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.20_nfclassify/net/ipv4/netfilter/ipt_CLASSIFY.c 2003-01-25 02:09:36.000000000 +0100
+@@ -0,0 +1,67 @@
++/* This is a module which is used for setting the skb->priority field of an skb for qdisc classification. */
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/ip.h>
++#include <net/checksum.h>
++
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ipt_CLASSIFY.h>
++
++static unsigned int
++target(struct sk_buff **pskb,
++ unsigned int hooknum,
++ const struct net_device *in,
++ const struct net_device *out,
++ const void *targinfo,
++ void *userinfo)
++{
++ const struct ipt_classify_target_info *clinfo = targinfo;
++
++ if((*pskb)->priority != clinfo->priority) {
++ (*pskb)->priority = clinfo->priority;
++ (*pskb)->nfcache |= NFC_ALTERED;
++ }
++ return IPT_CONTINUE;
++}
++
++static int
++checkentry(const char *tablename,
++ const struct ipt_entry *e,
++ void *targinfo,
++ unsigned int targinfosize,
++ unsigned int hook_mask)
++{
++ if (targinfosize != IPT_ALIGN(sizeof(struct ipt_classify_target_info))) {
++ printk(KERN_WARNING "CLASSIFY: targinfosize %u != %Zu\n",
++ targinfosize,
++ IPT_ALIGN(sizeof(struct ipt_classify_target_info)));
++ return 0;
++ }
++
++ if (strcmp(tablename, "mangle") != 0) {
++ printk(KERN_WARNING "CLASSIFY: can only be called from \"mangle\" table, not \"%s\"\n", tablename);
++ return 0;
++ }
++
++ return 1;
++}
++
++static struct ipt_target ipt_classify_reg
++= { { NULL, NULL }, "CLASSIFY", target, checkentry, NULL, THIS_MODULE };
++
++static int __init init(void)
++{
++ if (ipt_register_target(&ipt_classify_reg))
++ return -EINVAL;
++
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ ipt_unregister_target(&ipt_classify_reg);
++}
++
++module_init(init);
++module_exit(fini);
++MODULE_LICENSE("GPL");
diff -urN a/patch-o-matic/extra/CLASSIFY.patch.config.in b/patch-o-matic/extra/CLASSIFY.patch.config.in
--- a/patch-o-matic/extra/CLASSIFY.patch.config.in 1970-01-01 01:00:00.000000000 +0100
+++ b/patch-o-matic/extra/CLASSIFY.patch.config.in 2003-04-07 21:53:09.000000000 +0200
@@ -0,0 +1,2 @@
+ dep_tristate ' MARK target support' CONFIG_IP_NF_TARGET_MARK $CONFIG_IP_NF_MANGLE
+ dep_tristate ' CLASSIFY target support (EXPERIMENTAL)' CONFIG_IP_NF_TARGET_CLASSIFY $CONFIG_IP_NF_FILTER
diff -urN a/patch-o-matic/extra/CLASSIFY.patch.help b/patch-o-matic/extra/CLASSIFY.patch.help
--- a/patch-o-matic/extra/CLASSIFY.patch.help 1970-01-01 01:00:00.000000000 +0100
+++ b/patch-o-matic/extra/CLASSIFY.patch.help 2003-04-07 21:59:52.000000000 +0200
@@ -0,0 +1,16 @@
+Author: Patrick McHardy <kaber@trash.net>
+Status: working
+
+This patch adds support for the CLASSIFY target which sets skb->priority.
+Some qdiscs can use this value for classification, among these are
+
+- atm
+- cbq
+- dsmark
+- pfifo_fast
+- htb
+- prio
+
+Usage:
+ iptables -t mangle ... -j CLASSIFY --set-class MAJOR:MINOR
+
diff -urN a/patch-o-matic/extra/CLASSIFY.patch.makefile b/patch-o-matic/extra/CLASSIFY.patch.makefile
--- a/patch-o-matic/extra/CLASSIFY.patch.makefile 1970-01-01 01:00:00.000000000 +0100
+++ b/patch-o-matic/extra/CLASSIFY.patch.makefile 2003-04-07 21:53:09.000000000 +0200
@@ -0,0 +1,2 @@
+obj-$(CONFIG_IP_NF_TARGET_MIRROR) += ipt_MIRROR.o
+obj-$(CONFIG_IP_NF_TARGET_CLASSIFY) += ipt_CLASSIFY.o
diff -urN a/userspace/extensions/.CLASSIFY-test b/userspace/extensions/.CLASSIFY-test
--- a/userspace/extensions/.CLASSIFY-test 1970-01-01 01:00:00.000000000 +0100
+++ b/userspace/extensions/.CLASSIFY-test 2003-04-07 21:53:09.000000000 +0200
@@ -0,0 +1,3 @@
+#! /bin/sh
+[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_CLASSIFY.c ] && echo CLASSIFY
+
diff -urN a/userspace/extensions/libipt_CLASSIFY.c b/userspace/extensions/libipt_CLASSIFY.c
--- a/userspace/extensions/libipt_CLASSIFY.c 1970-01-01 01:00:00.000000000 +0100
+++ b/userspace/extensions/libipt_CLASSIFY.c 2003-04-07 21:53:09.000000000 +0200
@@ -0,0 +1,130 @@
+/* Shared library add-on to iptables to add CLASSIFY 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_CLASSIFY.h>
+#include <linux/types.h>
+#include <linux/pkt_sched.h>
+
+/* Function which prints out usage message. */
+static void
+help(void)
+{
+ printf(
+"CLASSIFY target v%s options:\n"
+" --set-class [MAJOR:MINOR] Set skb->priority value\n"
+"\n",
+IPTABLES_VERSION);
+}
+
+static struct option opts[] = {
+ { "set-class", 1, 0, '1' },
+ { 0 }
+};
+
+/* Initialize the target. */
+static void
+init(struct ipt_entry_target *t, unsigned int *nfcache)
+{
+}
+
+int string_to_priority(const unsigned char *s, unsigned int *p)
+{
+ unsigned int i, j;
+
+ if (sscanf(s, "%x:%x", &i, &j) != 2)
+ return 1;
+
+ *p = TC_H_MAKE(i<<16, j);
+ return 0;
+}
+
+/* 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_classify_target_info *clinfo
+ = (struct ipt_classify_target_info *)(*target)->data;
+
+ switch (c) {
+ case '1':
+ if (string_to_priority(optarg, &clinfo->priority))
+ exit_error(PARAMETER_PROBLEM,
+ "Bad class value `%s'", optarg);
+ if (*flags)
+ exit_error(PARAMETER_PROBLEM,
+ "CLASSIFY: Can't specify --set-class twice");
+ *flags = 1;
+ break;
+
+ default:
+ return 0;
+ }
+
+ return 1;
+}
+
+static void
+final_check(unsigned int flags)
+{
+ if (!flags)
+ exit_error(PARAMETER_PROBLEM,
+ "CLASSIFY: Parameter --set-class is required");
+}
+
+static void
+print_class(unsigned int priority, int numeric)
+{
+ printf("%x:%x ", TC_H_MAJ(priority)>>16, TC_H_MIN(priority));
+}
+
+/* Prints out the targinfo. */
+static void
+print(const struct ipt_ip *ip,
+ const struct ipt_entry_target *target,
+ int numeric)
+{
+ const struct ipt_classify_target_info *clinfo =
+ (const struct ipt_classify_target_info *)target->data;
+ printf("CLASSIFY set ");
+ print_class(clinfo->priority, numeric);
+}
+
+/* Saves the union ipt_targinfo in parsable form to stdout. */
+static void
+save(const struct ipt_ip *ip, const struct ipt_entry_target *target)
+{
+ const struct ipt_classify_target_info *clinfo =
+ (const struct ipt_classify_target_info *)target->data;
+
+ printf("--set-class %.4x:%.4x ",
+ TC_H_MAJ(clinfo->priority)>>16, TC_H_MIN(clinfo->priority));
+}
+
+static
+struct iptables_target classify
+= { NULL,
+ "CLASSIFY",
+ IPTABLES_VERSION,
+ IPT_ALIGN(sizeof(struct ipt_classify_target_info)),
+ IPT_ALIGN(sizeof(struct ipt_classify_target_info)),
+ &help,
+ &init,
+ &parse,
+ &final_check,
+ &print,
+ &save,
+ opts
+};
+
+void _init(void)
+{
+ register_target(&classify);
+}
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH] CLASSIFY target
2003-04-08 16:04 [PATCH] CLASSIFY target Patrick McHardy
@ 2003-04-08 20:05 ` Martin Josefsson
2003-04-08 23:26 ` Patrick McHardy
2003-04-13 16:22 ` Harald Welte
0 siblings, 2 replies; 8+ messages in thread
From: Martin Josefsson @ 2003-04-08 20:05 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Netfilter-devel, Jozsef Kadlecsik
On Tue, 2003-04-08 at 18:04, Patrick McHardy wrote:
> This patch adds a new target "CLASSIFY" which sets skb->priority.
> Several qdiscs can use this for classification. A list of the qdiscs
> currently capable of doing so is in the help text. Please consider
> for inclusion.
Hi Patrick,
It's usually Harald who decides which patches go in or not. And Harald
has been quite hard to get a response from during the last weeks :(
He seems to have a lot of things in the air at the same time.
I have a memory-corruption fix that havn't been OK'd yet...
Jozsef, do you feel like stepping in and adding some patches to p-o-m
after you've approved them? I don't have commit-rights to the whole
repository.
Regarding this patch... iirc, Bert Hubert wrote a similar target a while
ago and I think he wanted a small change in the core QoS stuff and that
was voted down, might be something to look into?
I think the discussion took place on the netdev list.
--
/Martin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] CLASSIFY target
2003-04-08 20:05 ` Martin Josefsson
@ 2003-04-08 23:26 ` Patrick McHardy
2003-04-09 0:21 ` Martin Josefsson
2003-04-13 16:22 ` Harald Welte
1 sibling, 1 reply; 8+ messages in thread
From: Patrick McHardy @ 2003-04-08 23:26 UTC (permalink / raw)
To: Martin Josefsson; +Cc: Netfilter-devel, Jozsef Kadlecsik
Hi Martin,
thanks for your response,
Martin Josefsson wrote:
>Regarding this patch... iirc, Bert Hubert wrote a similar target a while
>ago and I think he wanted a small change in the core QoS stuff and that
>was voted down, might be something to look into?
>
>I think the discussion took place on the netdev list.
>
Google found a discussion about moving "skb->priority = sk->priority"
line to
ip_queue_xmit2 to allow netfilter targets to override SO_PRIORITY value of
local sockets. A quick check told me this change was never made, so the
CLASSIFY target is only working correctly in the POST_ROUTING chain, which
is what i have tested. This doesn't seem to affect usage of the target,
worse
would be if POST_ROUTING didn't work correctly. My suggestion is to
restrict usage to POST_ROUTING chain, this seems like a natural place for
QoS classification. What do you think ?
Thanks,
Patrick
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] CLASSIFY target
2003-04-08 23:26 ` Patrick McHardy
@ 2003-04-09 0:21 ` Martin Josefsson
2003-04-09 1:14 ` Patrick McHardy
2003-04-13 16:24 ` Harald Welte
0 siblings, 2 replies; 8+ messages in thread
From: Martin Josefsson @ 2003-04-09 0:21 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Netfilter-devel, Jozsef Kadlecsik
On Wed, 2003-04-09 at 01:26, Patrick McHardy wrote:
> Google found a discussion about moving "skb->priority = sk->priority"
> line to
> ip_queue_xmit2 to allow netfilter targets to override SO_PRIORITY value of
> local sockets. A quick check told me this change was never made, so the
> CLASSIFY target is only working correctly in the POST_ROUTING chain, which
> is what i have tested. This doesn't seem to affect usage of the target,
> worse
> would be if POST_ROUTING didn't work correctly. My suggestion is to
> restrict usage to POST_ROUTING chain, this seems like a natural place for
> QoS classification. What do you think ?
Sounds like a good idea since Bert's suggestion was shot down (I think).
Better not upset the gods by including it in this patch :)
We want to touch as little outside code as possible and if someone
really needs this they can google and maybe find this discussion and
then find the original thread and the patch :)
You'll send an updated patch I hope?
--
/Martin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] CLASSIFY target
2003-04-09 0:21 ` Martin Josefsson
@ 2003-04-09 1:14 ` Patrick McHardy
2003-04-11 10:15 ` Jozsef Kadlecsik
2003-04-13 16:24 ` Harald Welte
1 sibling, 1 reply; 8+ messages in thread
From: Patrick McHardy @ 2003-04-09 1:14 UTC (permalink / raw)
To: Martin Josefsson; +Cc: Netfilter-devel, Jozsef Kadlecsik
[-- Attachment #1: Type: text/plain, Size: 564 bytes --]
Martin Josefsson wrote:
>Sounds like a good idea since Bert's suggestion was shot down (I think).
>Better not upset the gods by including it in this patch :)
>
>
I'll sacifize a nice lamb on my grill tonight ;)
>We want to touch as little outside code as possible and if someone
>really needs this they can google and maybe find this discussion and
>then find the original thread and the patch :)
>
>You'll send an updated patch I hope?
>
An updated version is attached, this one checks if it is called in
POST_ROUTING chain
of mangle table.
Bye,
Patrick
[-- Attachment #2: nf-CLASSIFY.diff --]
[-- Type: text/plain, Size: 8053 bytes --]
diff -urN a/patch-o-matic/extra/CLASSIFY.patch b/patch-o-matic/extra/CLASSIFY.patch
--- a/patch-o-matic/extra/CLASSIFY.patch 1970-01-01 01:00:00.000000000 +0100
+++ b/patch-o-matic/extra/CLASSIFY.patch 2003-04-09 03:04:18.000000000 +0200
@@ -0,0 +1,89 @@
+diff -urN a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h
+--- a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 1970-01-01 01:00:00.000000000 +0100
++++ b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 2003-04-09 02:50:19.000000000 +0200
+@@ -0,0 +1,8 @@
++#ifndef _IPT_CLASSIFY_H
++#define _IPT_CLASSIFY_H
++
++struct ipt_classify_target_info {
++ unsigned int priority;
++};
++
++#endif /*_IPT_CLASSIFY_H */
+diff -urN a/net/ipv4/netfilter/ipt_CLASSIFY.c b/net/ipv4/netfilter/ipt_CLASSIFY.c
+--- a/net/ipv4/netfilter/ipt_CLASSIFY.c 1970-01-01 01:00:00.000000000 +0100
++++ b/net/ipv4/netfilter/ipt_CLASSIFY.c 2003-04-09 02:58:08.000000000 +0200
+@@ -0,0 +1,73 @@
++/* This is a module which is used for setting the skb->priority field of an skb for qdisc classification. */
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/ip.h>
++#include <net/checksum.h>
++
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ipt_CLASSIFY.h>
++
++static unsigned int
++target(struct sk_buff **pskb,
++ unsigned int hooknum,
++ const struct net_device *in,
++ const struct net_device *out,
++ const void *targinfo,
++ void *userinfo)
++{
++ const struct ipt_classify_target_info *clinfo = targinfo;
++
++ if((*pskb)->priority != clinfo->priority) {
++ (*pskb)->priority = clinfo->priority;
++ (*pskb)->nfcache |= NFC_ALTERED;
++ }
++
++ return IPT_CONTINUE;
++}
++
++static int
++checkentry(const char *tablename,
++ const struct ipt_entry *e,
++ void *targinfo,
++ unsigned int targinfosize,
++ unsigned int hook_mask)
++{
++ if (targinfosize != IPT_ALIGN(sizeof(struct ipt_classify_target_info))){
++ printk(KERN_ERR "CLASSIFY: invalid size (%u != %u).\n",
++ targinfosize,
++ IPT_ALIGN(sizeof(struct ipt_classify_target_info)));
++ return 0;
++ }
++
++ if (hook_mask & ~(1 << NF_IP_POST_ROUTING)) {
++ printk(KERN_ERR "CLASSIFY: only valid in POST_ROUTING.\n");
++ return 0;
++ }
++
++ if (strcmp(tablename, "mangle") != 0) {
++ printk(KERN_WARNING "CLASSIFY: can only be called from \"mangle\" table, not \"%s\".\n", tablename);
++ return 0;
++ }
++
++ return 1;
++}
++
++static struct ipt_target ipt_classify_reg
++= { { NULL, NULL }, "CLASSIFY", target, checkentry, NULL, THIS_MODULE };
++
++static int __init init(void)
++{
++ if (ipt_register_target(&ipt_classify_reg))
++ return -EINVAL;
++
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ ipt_unregister_target(&ipt_classify_reg);
++}
++
++module_init(init);
++module_exit(fini);
++MODULE_LICENSE("GPL");
diff -urN a/patch-o-matic/extra/CLASSIFY.patch.config.in b/patch-o-matic/extra/CLASSIFY.patch.config.in
--- a/patch-o-matic/extra/CLASSIFY.patch.config.in 1970-01-01 01:00:00.000000000 +0100
+++ b/patch-o-matic/extra/CLASSIFY.patch.config.in 2003-04-09 02:47:07.000000000 +0200
@@ -0,0 +1,2 @@
+ dep_tristate ' MARK target support' CONFIG_IP_NF_TARGET_MARK $CONFIG_IP_NF_MANGLE
+ dep_tristate ' CLASSIFY target support (EXPERIMENTAL)' CONFIG_IP_NF_TARGET_CLASSIFY $CONFIG_IP_NF_FILTER
diff -urN a/patch-o-matic/extra/CLASSIFY.patch.help b/patch-o-matic/extra/CLASSIFY.patch.help
--- a/patch-o-matic/extra/CLASSIFY.patch.help 1970-01-01 01:00:00.000000000 +0100
+++ b/patch-o-matic/extra/CLASSIFY.patch.help 2003-04-09 03:05:05.000000000 +0200
@@ -0,0 +1,18 @@
+Author: Patrick McHardy <kaber@trash.net>
+Status: working
+
+This patch adds support for the CLASSIFY target which sets skb->priority.
+Some qdiscs can use this value for classification, among these are
+
+- atm
+- cbq
+- dsmark
+- pfifo_fast
+- htb
+- prio
+
+This target is only valid in the POST_ROUTING chain of the mangle table.
+
+Usage:
+ iptables -t mangle -A POSTROUTING .. -j CLASSIFY --set-class MAJOR:MINOR
+
diff -urN a/patch-o-matic/extra/CLASSIFY.patch.makefile b/patch-o-matic/extra/CLASSIFY.patch.makefile
--- a/patch-o-matic/extra/CLASSIFY.patch.makefile 1970-01-01 01:00:00.000000000 +0100
+++ b/patch-o-matic/extra/CLASSIFY.patch.makefile 2003-04-09 02:47:07.000000000 +0200
@@ -0,0 +1,2 @@
+obj-$(CONFIG_IP_NF_TARGET_MIRROR) += ipt_MIRROR.o
+obj-$(CONFIG_IP_NF_TARGET_CLASSIFY) += ipt_CLASSIFY.o
diff -urN a/userspace/extensions/.CLASSIFY-test b/userspace/extensions/.CLASSIFY-test
--- a/userspace/extensions/.CLASSIFY-test 1970-01-01 01:00:00.000000000 +0100
+++ b/userspace/extensions/.CLASSIFY-test 2003-04-09 02:47:07.000000000 +0200
@@ -0,0 +1,3 @@
+#! /bin/sh
+[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_CLASSIFY.c ] && echo CLASSIFY
+
diff -urN a/userspace/extensions/libipt_CLASSIFY.c b/userspace/extensions/libipt_CLASSIFY.c
--- a/userspace/extensions/libipt_CLASSIFY.c 1970-01-01 01:00:00.000000000 +0100
+++ b/userspace/extensions/libipt_CLASSIFY.c 2003-04-09 02:47:07.000000000 +0200
@@ -0,0 +1,130 @@
+/* Shared library add-on to iptables to add CLASSIFY 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_CLASSIFY.h>
+#include <linux/types.h>
+#include <linux/pkt_sched.h>
+
+/* Function which prints out usage message. */
+static void
+help(void)
+{
+ printf(
+"CLASSIFY target v%s options:\n"
+" --set-class [MAJOR:MINOR] Set skb->priority value\n"
+"\n",
+IPTABLES_VERSION);
+}
+
+static struct option opts[] = {
+ { "set-class", 1, 0, '1' },
+ { 0 }
+};
+
+/* Initialize the target. */
+static void
+init(struct ipt_entry_target *t, unsigned int *nfcache)
+{
+}
+
+int string_to_priority(const unsigned char *s, unsigned int *p)
+{
+ unsigned int i, j;
+
+ if (sscanf(s, "%x:%x", &i, &j) != 2)
+ return 1;
+
+ *p = TC_H_MAKE(i<<16, j);
+ return 0;
+}
+
+/* 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_classify_target_info *clinfo
+ = (struct ipt_classify_target_info *)(*target)->data;
+
+ switch (c) {
+ case '1':
+ if (string_to_priority(optarg, &clinfo->priority))
+ exit_error(PARAMETER_PROBLEM,
+ "Bad class value `%s'", optarg);
+ if (*flags)
+ exit_error(PARAMETER_PROBLEM,
+ "CLASSIFY: Can't specify --set-class twice");
+ *flags = 1;
+ break;
+
+ default:
+ return 0;
+ }
+
+ return 1;
+}
+
+static void
+final_check(unsigned int flags)
+{
+ if (!flags)
+ exit_error(PARAMETER_PROBLEM,
+ "CLASSIFY: Parameter --set-class is required");
+}
+
+static void
+print_class(unsigned int priority, int numeric)
+{
+ printf("%x:%x ", TC_H_MAJ(priority)>>16, TC_H_MIN(priority));
+}
+
+/* Prints out the targinfo. */
+static void
+print(const struct ipt_ip *ip,
+ const struct ipt_entry_target *target,
+ int numeric)
+{
+ const struct ipt_classify_target_info *clinfo =
+ (const struct ipt_classify_target_info *)target->data;
+ printf("CLASSIFY set ");
+ print_class(clinfo->priority, numeric);
+}
+
+/* Saves the union ipt_targinfo in parsable form to stdout. */
+static void
+save(const struct ipt_ip *ip, const struct ipt_entry_target *target)
+{
+ const struct ipt_classify_target_info *clinfo =
+ (const struct ipt_classify_target_info *)target->data;
+
+ printf("--set-class %.4x:%.4x ",
+ TC_H_MAJ(clinfo->priority)>>16, TC_H_MIN(clinfo->priority));
+}
+
+static
+struct iptables_target classify
+= { NULL,
+ "CLASSIFY",
+ IPTABLES_VERSION,
+ IPT_ALIGN(sizeof(struct ipt_classify_target_info)),
+ IPT_ALIGN(sizeof(struct ipt_classify_target_info)),
+ &help,
+ &init,
+ &parse,
+ &final_check,
+ &print,
+ &save,
+ opts
+};
+
+void _init(void)
+{
+ register_target(&classify);
+}
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH] CLASSIFY target
2003-04-09 1:14 ` Patrick McHardy
@ 2003-04-11 10:15 ` Jozsef Kadlecsik
0 siblings, 0 replies; 8+ messages in thread
From: Jozsef Kadlecsik @ 2003-04-11 10:15 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Martin Josefsson, Netfilter-devel
Hi Patrick,
On Wed, 9 Apr 2003, Patrick McHardy wrote:
> An updated version is attached, this one checks if it is called in
> POST_ROUTING chain
> of mangle table.
Patch is applied - I added a CLASSIFY.patch.configure.help file.
Best regards,
Jozsef
-
E-mail : kadlec@blackhole.kfki.hu, kadlec@sunserv.kfki.hu
PGP key : http://www.kfki.hu/~kadlec/pgp_public_key.txt
Address : KFKI Research Institute for Particle and Nuclear Physics
H-1525 Budapest 114, POB. 49, Hungary
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] CLASSIFY target
2003-04-09 0:21 ` Martin Josefsson
2003-04-09 1:14 ` Patrick McHardy
@ 2003-04-13 16:24 ` Harald Welte
1 sibling, 0 replies; 8+ messages in thread
From: Harald Welte @ 2003-04-13 16:24 UTC (permalink / raw)
To: Martin Josefsson; +Cc: Patrick McHardy, Netfilter-devel, Jozsef Kadlecsik
[-- Attachment #1: Type: text/plain, Size: 1147 bytes --]
On Wed, Apr 09, 2003 at 02:21:47AM +0200, Martin Josefsson wrote:
> Sounds like a good idea since Bert's suggestion was shot down (I think).
> Better not upset the gods by including it in this patch :)
actually, I don't mind this change.
As of now, I have no plan to submit the CLASSIFY target to the kernel,
so there is no 'ideological/political' problem with the core networking
change.
> We want to touch as little outside code as possible and if someone
> really needs this they can google and maybe find this discussion and
> then find the original thread and the patch :)
although, there is the practical issue. Patching something in the core
networking reliably over lots of 2.4.x and 2.5.x kernels seems to be
almost impossible.
> /Martin
--
- Harald Welte <laforge@netfilter.org> http://www.netfilter.org/
============================================================================
"Fragmentation is like classful addressing -- an interesting early
architectural error that shows how much experimentation was going
on while IP was being designed." -- Paul Vixie
[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] CLASSIFY target
2003-04-08 20:05 ` Martin Josefsson
2003-04-08 23:26 ` Patrick McHardy
@ 2003-04-13 16:22 ` Harald Welte
1 sibling, 0 replies; 8+ messages in thread
From: Harald Welte @ 2003-04-13 16:22 UTC (permalink / raw)
To: Martin Josefsson; +Cc: Patrick McHardy, Netfilter-devel, Jozsef Kadlecsik
[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]
On Tue, Apr 08, 2003 at 10:05:00PM +0200, Martin Josefsson wrote:
> On Tue, 2003-04-08 at 18:04, Patrick McHardy wrote:
> > This patch adds a new target "CLASSIFY" which sets skb->priority.
> > Several qdiscs can use this for classification. A list of the qdiscs
> > currently capable of doing so is in the help text. Please consider
> > for inclusion.
>
> Hi Patrick,
>
> It's usually Harald who decides which patches go in or not. And Harald
> has been quite hard to get a response from during the last weeks :(
> He seems to have a lot of things in the air at the same time.
> I have a memory-corruption fix that havn't been OK'd yet...
Just a quick note: I've re-appeared from the dark voids of
again-being-two-months-too-late-with-a-commercial-project-and-not-wanting-to-be-any-later.
> /Martin
--
- Harald Welte <laforge@netfilter.org> http://www.netfilter.org/
============================================================================
"Fragmentation is like classful addressing -- an interesting early
architectural error that shows how much experimentation was going
on while IP was being designed." -- Paul Vixie
[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2003-04-13 16:24 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-04-08 16:04 [PATCH] CLASSIFY target Patrick McHardy
2003-04-08 20:05 ` Martin Josefsson
2003-04-08 23:26 ` Patrick McHardy
2003-04-09 0:21 ` Martin Josefsson
2003-04-09 1:14 ` Patrick McHardy
2003-04-11 10:15 ` Jozsef Kadlecsik
2003-04-13 16:24 ` Harald Welte
2003-04-13 16:22 ` Harald Welte
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.