pkt_cls.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
- #ifndef __NET_PKT_CLS_H
- #define __NET_PKT_CLS_H
- #include <linux/pkt_cls.h>
- struct rtattr;
- struct tcmsg;
- /* Basic packet classifier frontend definitions. */
- struct tcf_result
- {
- unsigned long class;
- u32 classid;
- };
- struct tcf_proto
- {
- /* Fast access part */
- struct tcf_proto *next;
- void *root;
- int (*classify)(struct sk_buff*, struct tcf_proto*, struct tcf_result *);
- u32 protocol;
- /* All the rest */
- u32 prio;
- u32 classid;
- struct Qdisc *q;
- void *data;
- struct tcf_proto_ops *ops;
- };
- struct tcf_walker
- {
- int stop;
- int skip;
- int count;
- int (*fn)(struct tcf_proto *, unsigned long node, struct tcf_walker *);
- };
- struct tcf_proto_ops
- {
- struct tcf_proto_ops *next;
- char kind[IFNAMSIZ];
- int (*classify)(struct sk_buff*, struct tcf_proto*, struct tcf_result *);
- int (*init)(struct tcf_proto*);
- void (*destroy)(struct tcf_proto*);
- unsigned long (*get)(struct tcf_proto*, u32 handle);
- void (*put)(struct tcf_proto*, unsigned long);
- int (*change)(struct tcf_proto*, unsigned long, u32 handle, struct rtattr **, unsigned long *);
- int (*delete)(struct tcf_proto*, unsigned long);
- void (*walk)(struct tcf_proto*, struct tcf_walker *arg);
- /* rtnetlink specific */
- int (*dump)(struct tcf_proto*, unsigned long, struct sk_buff *skb, struct tcmsg*);
- };
- /* Main classifier routine: scans classifier chain attached
- to this qdisc, (optionally) tests for protocol and asks
- specific classifiers.
- */
- static inline int tc_classify(struct sk_buff *skb, struct tcf_proto *tp, struct tcf_result *res)
- {
- int err = 0;
- u32 protocol = skb->protocol;
- for ( ; tp; tp = tp->next) {
- if ((tp->protocol == protocol ||
- tp->protocol == __constant_htons(ETH_P_ALL)) &&
- (err = tp->classify(skb, tp, res)) >= 0)
- return err;
- }
- return -1;
- }
- extern int register_tcf_proto_ops(struct tcf_proto_ops *ops);
- extern int unregister_tcf_proto_ops(struct tcf_proto_ops *ops);
- #endif