home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / net / act_api.h next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.2 KB  |  117 lines

  1. #ifndef __NET_ACT_API_H
  2. #define __NET_ACT_API_H
  3.  
  4. /*
  5.  * Public police action API for classifiers/qdiscs
  6.  */
  7.  
  8. #include <net/sch_generic.h>
  9. #include <net/pkt_sched.h>
  10.  
  11. #define tca_gen(name) \
  12. struct tcf_##name *next; \
  13.     u32 index; \
  14.     int refcnt; \
  15.     int bindcnt; \
  16.     u32 capab; \
  17.     int action; \
  18.     struct tcf_t tm; \
  19.     struct gnet_stats_basic bstats; \
  20.     struct gnet_stats_queue qstats; \
  21.     struct gnet_stats_rate_est rate_est; \
  22.     spinlock_t *stats_lock; \
  23.     spinlock_t lock
  24.  
  25. struct tcf_police
  26. {
  27.     tca_gen(police);
  28.     int        result;
  29.     u32        ewma_rate;
  30.     u32        burst;
  31.     u32        mtu;
  32.     u32        toks;
  33.     u32        ptoks;
  34.     psched_time_t    t_c;
  35.     struct qdisc_rate_table *R_tab;
  36.     struct qdisc_rate_table *P_tab;
  37. };
  38.  
  39. #ifdef CONFIG_NET_CLS_ACT
  40.  
  41. #define ACT_P_CREATED 1
  42. #define ACT_P_DELETED 1
  43.  
  44. struct tcf_act_hdr
  45. {
  46.     tca_gen(act_hdr);
  47. };
  48.  
  49. struct tc_action
  50. {
  51.     void *priv;
  52.     struct tc_action_ops *ops;
  53.     __u32   type;   /* for backward compat(TCA_OLD_COMPAT) */
  54.     __u32   order; 
  55.     struct tc_action *next;
  56. };
  57.  
  58. #define TCA_CAP_NONE 0
  59. struct tc_action_ops
  60. {
  61.     struct tc_action_ops *next;
  62.     char    kind[IFNAMSIZ];
  63.     __u32   type; /* TBD to match kind */
  64.     __u32     capab;  /* capabilities includes 4 bit version */
  65.     struct module        *owner;
  66.     int     (*act)(struct sk_buff *, struct tc_action *, struct tcf_result *);
  67.     int     (*get_stats)(struct sk_buff *, struct tc_action *);
  68.     int     (*dump)(struct sk_buff *, struct tc_action *,int , int);
  69.     int     (*cleanup)(struct tc_action *, int bind);
  70.     int     (*lookup)(struct tc_action *, u32 );
  71.     int     (*init)(struct rtattr *,struct rtattr *,struct tc_action *, int , int );
  72.     int     (*walk)(struct sk_buff *, struct netlink_callback *, int , struct tc_action *);
  73. };
  74.  
  75. extern int tcf_register_action(struct tc_action_ops *a);
  76. extern int tcf_unregister_action(struct tc_action_ops *a);
  77. extern void tcf_action_destroy(struct tc_action *a, int bind);
  78. extern int tcf_action_exec(struct sk_buff *skb, struct tc_action *a, struct tcf_result *res);
  79. extern struct tc_action *tcf_action_init(struct rtattr *rta, struct rtattr *est, char *n, int ovr, int bind, int *err);
  80. extern struct tc_action *tcf_action_init_1(struct rtattr *rta, struct rtattr *est, char *n, int ovr, int bind, int *err);
  81. extern int tcf_action_dump(struct sk_buff *skb, struct tc_action *a, int, int);
  82. extern int tcf_action_dump_old(struct sk_buff *skb, struct tc_action *a, int, int);
  83. extern int tcf_action_dump_1(struct sk_buff *skb, struct tc_action *a, int, int);
  84. extern int tcf_action_copy_stats (struct sk_buff *,struct tc_action *, int);
  85. #endif /* CONFIG_NET_CLS_ACT */
  86.  
  87. extern int tcf_police(struct sk_buff *skb, struct tcf_police *p);
  88. extern void tcf_police_destroy(struct tcf_police *p);
  89. extern struct tcf_police * tcf_police_locate(struct rtattr *rta, struct rtattr *est);
  90. extern int tcf_police_dump(struct sk_buff *skb, struct tcf_police *p);
  91. extern int tcf_police_dump_stats(struct sk_buff *skb, struct tcf_police *p);
  92.  
  93. static inline int
  94. tcf_police_release(struct tcf_police *p, int bind)
  95. {
  96.     int ret = 0;
  97. #ifdef CONFIG_NET_CLS_ACT
  98.     if (p) {
  99.         if (bind) {
  100.              p->bindcnt--;
  101.         }
  102.         p->refcnt--;
  103.         if (p->refcnt <= 0 && !p->bindcnt) {
  104.             tcf_police_destroy(p);
  105.             ret = 1;
  106.         }
  107.     }
  108. #else
  109.     if (p && --p->refcnt == 0)
  110.         tcf_police_destroy(p);
  111.  
  112. #endif /* CONFIG_NET_CLS_ACT */
  113.     return ret;
  114. }
  115.  
  116. #endif
  117.