* add p cc
[mascara-docs.git] / i386 / linux / linux-2.3.21 / include / net / pkt_cls.h
blobf9c80dd0fbbf0d8e87b684886b3d5009fa1b26d6
1 #ifndef __NET_PKT_CLS_H
2 #define __NET_PKT_CLS_H
5 #include <linux/pkt_cls.h>
7 struct rtattr;
8 struct tcmsg;
10 /* Basic packet classifier frontend definitions. */
12 struct tcf_result
14 unsigned long class;
15 u32 classid;
18 struct tcf_proto
20 /* Fast access part */
21 struct tcf_proto *next;
22 void *root;
23 int (*classify)(struct sk_buff*, struct tcf_proto*, struct tcf_result *);
24 u32 protocol;
26 /* All the rest */
27 u32 prio;
28 u32 classid;
29 struct Qdisc *q;
30 void *data;
31 struct tcf_proto_ops *ops;
34 struct tcf_walker
36 int stop;
37 int skip;
38 int count;
39 int (*fn)(struct tcf_proto *, unsigned long node, struct tcf_walker *);
42 struct tcf_proto_ops
44 struct tcf_proto_ops *next;
45 char kind[IFNAMSIZ];
47 int (*classify)(struct sk_buff*, struct tcf_proto*, struct tcf_result *);
48 int (*init)(struct tcf_proto*);
49 void (*destroy)(struct tcf_proto*);
51 unsigned long (*get)(struct tcf_proto*, u32 handle);
52 void (*put)(struct tcf_proto*, unsigned long);
53 int (*change)(struct tcf_proto*, unsigned long, u32 handle, struct rtattr **, unsigned long *);
54 int (*delete)(struct tcf_proto*, unsigned long);
55 void (*walk)(struct tcf_proto*, struct tcf_walker *arg);
57 /* rtnetlink specific */
58 int (*dump)(struct tcf_proto*, unsigned long, struct sk_buff *skb, struct tcmsg*);
61 /* Main classifier routine: scans classifier chain attached
62 to this qdisc, (optionally) tests for protocol and asks
63 specific classifiers.
66 extern __inline__ int tc_classify(struct sk_buff *skb, struct tcf_proto *tp, struct tcf_result *res)
68 int err = 0;
69 u32 protocol = skb->protocol;
71 for ( ; tp; tp = tp->next) {
72 if ((tp->protocol == protocol ||
73 tp->protocol == __constant_htons(ETH_P_ALL)) &&
74 (err = tp->classify(skb, tp, res)) >= 0)
75 return err;
77 return -1;
82 extern int register_tcf_proto_ops(struct tcf_proto_ops *ops);
83 extern int unregister_tcf_proto_ops(struct tcf_proto_ops *ops);
87 #endif