📄 pkt_cls.h
字号:
#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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -