pkt_cls.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef __NET_PKT_CLS_H
  2. #define __NET_PKT_CLS_H
  3. #include <linux/pkt_cls.h>
  4. struct rtattr;
  5. struct tcmsg;
  6. /* Basic packet classifier frontend definitions. */
  7. struct tcf_result
  8. {
  9. unsigned long class;
  10. u32 classid;
  11. };
  12. struct tcf_proto
  13. {
  14. /* Fast access part */
  15. struct tcf_proto *next;
  16. void *root;
  17. int (*classify)(struct sk_buff*, struct tcf_proto*, struct tcf_result *);
  18. u32 protocol;
  19. /* All the rest */
  20. u32 prio;
  21. u32 classid;
  22. struct Qdisc *q;
  23. void *data;
  24. struct tcf_proto_ops *ops;
  25. };
  26. struct tcf_walker
  27. {
  28. int stop;
  29. int skip;
  30. int count;
  31. int (*fn)(struct tcf_proto *, unsigned long node, struct tcf_walker *);
  32. };
  33. struct tcf_proto_ops
  34. {
  35. struct tcf_proto_ops *next;
  36. char kind[IFNAMSIZ];
  37. int (*classify)(struct sk_buff*, struct tcf_proto*, struct tcf_result *);
  38. int (*init)(struct tcf_proto*);
  39. void (*destroy)(struct tcf_proto*);
  40. unsigned long (*get)(struct tcf_proto*, u32 handle);
  41. void (*put)(struct tcf_proto*, unsigned long);
  42. int (*change)(struct tcf_proto*, unsigned long, u32 handle, struct rtattr **, unsigned long *);
  43. int (*delete)(struct tcf_proto*, unsigned long);
  44. void (*walk)(struct tcf_proto*, struct tcf_walker *arg);
  45. /* rtnetlink specific */
  46. int (*dump)(struct tcf_proto*, unsigned long, struct sk_buff *skb, struct tcmsg*);
  47. };
  48. /* Main classifier routine: scans classifier chain attached
  49.    to this qdisc, (optionally) tests for protocol and asks
  50.    specific classifiers.
  51.  */
  52. static inline int tc_classify(struct sk_buff *skb, struct tcf_proto *tp, struct tcf_result *res)
  53. {
  54. int err = 0;
  55. u32 protocol = skb->protocol;
  56. for ( ; tp; tp = tp->next) {
  57. if ((tp->protocol == protocol ||
  58.      tp->protocol == __constant_htons(ETH_P_ALL)) &&
  59.     (err = tp->classify(skb, tp, res)) >= 0)
  60. return err;
  61. }
  62. return -1;
  63. }
  64. extern int register_tcf_proto_ops(struct tcf_proto_ops *ops);
  65. extern int unregister_tcf_proto_ops(struct tcf_proto_ops *ops);
  66. #endif