Received: with ECARTIS (v1.0.0; list netdev); Sun, 23 Jan 2005 15:03:41 -0800 (PST) Received: from b.mx.projectdream.org (eth0-0.arisu.projectdream.org [194.158.4.191]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id j0NN3Yh0023169 for ; Sun, 23 Jan 2005 15:03:34 -0800 Received: from postel.suug.ch (postel.suug.ch [195.134.158.23]) (using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 bits)) (No client certificate requested) by b.mx.projectdream.org (Postfix) with ESMTP id 942C685; Mon, 24 Jan 2005 00:03:11 +0100 (CET) Received: by postel.suug.ch (Postfix, from userid 10001) id 0647D1C0EA; Mon, 24 Jan 2005 00:03:55 +0100 (CET) Date: Mon, 24 Jan 2005 00:03:54 +0100 From: Thomas Graf To: "David S. Miller" Cc: netdev@oss.sgi.com Subject: [PATCH 4/6] PKT_SCHED: u32 ematch Message-ID: <20050123230354.GF23931@postel.suug.ch> References: <20050123230012.GB23931@postel.suug.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050123230012.GB23931@postel.suug.ch> X-Virus-Scanned: ClamAV 0.80/650/Sun Jan 2 19:00:02 2005 clamav-milter version 0.80j on 127.0.0.1 X-Virus-Status: Clean X-archive-position: 678 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: tgraf@suug.ch Precedence: bulk X-list: netdev Content-Length: 3954 Lines: 119 The u32 ematch behaves exactly the same as a u32 match and will replace it in the long term. It allows the underlying classifiers to give hints about the position of the next protocol header (i.e. nexthdr+). Signed-off-by: Thomas Graf diff -Nru linux-2.6.11-rc1-bk9.orig/include/linux/pkt_cls.h linux-2.6.11-rc1-bk9/include/linux/pkt_cls.h --- linux-2.6.11-rc1-bk9.orig/include/linux/pkt_cls.h 2005-01-22 03:39:23.000000000 +0100 +++ linux-2.6.11-rc1-bk9/include/linux/pkt_cls.h 2005-01-22 12:19:56.000000000 +0100 @@ -385,6 +385,7 @@ TCF_EM_CONTAINER, TCF_EM_CMP, TCF_EM_NBYTE, + TCF_EM_U32, __TCF_EM_MAX }; diff -Nru linux-2.6.11-rc1-bk9.orig/include/net/pkt_cls.h linux-2.6.11-rc1-bk9/include/net/pkt_cls.h --- linux-2.6.11-rc1-bk9.orig/include/net/pkt_cls.h 2005-01-22 02:56:33.000000000 +0100 +++ linux-2.6.11-rc1-bk9/include/net/pkt_cls.h 2005-01-22 12:21:33.000000000 +0100 @@ -153,6 +153,8 @@ */ struct tcf_pkt_info { + unsigned char * ptr; + int nexthdr; }; #ifdef CONFIG_NET_EMATCH diff -Nru linux-2.6.11-rc1-bk9.orig/net/sched/Kconfig linux-2.6.11-rc1-bk9/net/sched/Kconfig --- linux-2.6.11-rc1-bk9.orig/net/sched/Kconfig 2005-01-22 03:39:23.000000000 +0100 +++ linux-2.6.11-rc1-bk9/net/sched/Kconfig 2005-01-22 12:19:56.000000000 +0100 @@ -418,6 +418,16 @@ To compile this code as a module, choose M here: the module will be called em_nbyte. +config NET_EMATCH_U32 + tristate "U32 hashing key" + depends on NET_EMATCH + ---help--- + Say Y here if you want to be able to classify packets using + the famous u32 key in combination with logic relations. + + To compile this code as a module, choose M here: the + module will be called em_u32. + config NET_CLS_ACT bool "Packet ACTION" depends on EXPERIMENTAL && NET_CLS && NET_QOS diff -Nru linux-2.6.11-rc1-bk9.orig/net/sched/Makefile linux-2.6.11-rc1-bk9/net/sched/Makefile --- linux-2.6.11-rc1-bk9.orig/net/sched/Makefile 2005-01-22 03:39:23.000000000 +0100 +++ linux-2.6.11-rc1-bk9/net/sched/Makefile 2005-01-22 12:19:56.000000000 +0100 @@ -36,3 +36,4 @@ obj-$(CONFIG_NET_EMATCH) += ematch.o obj-$(CONFIG_NET_EMATCH_CMP) += em_cmp.o obj-$(CONFIG_NET_EMATCH_NBYTE) += em_nbyte.o +obj-$(CONFIG_NET_EMATCH_U32) += em_u32.o diff -Nru linux-2.6.11-rc1-bk9.orig/net/sched/em_u32.c linux-2.6.11-rc1-bk9/net/sched/em_u32.c --- linux-2.6.11-rc1-bk9.orig/net/sched/em_u32.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.11-rc1-bk9/net/sched/em_u32.c 2005-01-22 12:37:28.000000000 +0100 @@ -0,0 +1,58 @@ +/* + * net/sched/em_u32.c U32 Ematch + * + * This program 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. + * + * Authors: Thomas Graf + * Alexey Kuznetsov, + * + * Based on net/sched/cls_u32.c + */ + +#include +#include +#include +#include +#include +#include + +static int em_u32_match(struct sk_buff *skb, struct tcf_ematch *em, + struct tcf_pkt_info *info) +{ + struct tc_u32_key *key = (struct tc_u32_key *) em->data; + unsigned char *ptr = skb->nh.raw; + + if (info) { + if (info->ptr) + ptr = info->ptr; + ptr += (info->nexthdr & key->offmask); + } + + return !((*(u32*) (ptr + key->off) ^ key->val) & key->mask); +} + +static struct tcf_ematch_ops em_u32_ops = { + .kind = TCF_EM_U32, + .datalen = sizeof(struct tc_u32_key), + .match = em_u32_match, + .owner = THIS_MODULE, + .link = LIST_HEAD_INIT(em_u32_ops.link) +}; + +static int __init init_em_u32(void) +{ + return tcf_em_register(&em_u32_ops); +} + +static void __exit exit_em_u32(void) +{ + tcf_em_unregister(&em_u32_ops); +} + +MODULE_LICENSE("GPL"); + +module_init(init_em_u32); +module_exit(exit_em_u32);