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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  * Flow based forwarding rules (usage: firewalling, etc)
  4.  *
  5.  */
  6. #ifndef _NET_FLOW_H
  7. #define _NET_FLOW_H
  8. struct flowi {
  9. int proto; /* {TCP, UDP, ICMP} */
  10. union {
  11. struct {
  12. __u32 daddr;
  13. __u32 saddr;
  14. } ip4_u;
  15. struct {
  16. struct in6_addr * daddr;
  17. struct in6_addr * saddr;
  18. __u32 flowlabel;
  19. } ip6_u;
  20. } nl_u;
  21. #define fl6_dst nl_u.ip6_u.daddr
  22. #define fl6_src nl_u.ip6_u.saddr
  23. #define fl6_flowlabel nl_u.ip6_u.flowlabel
  24. #define fl4_dst nl_u.ip4_u.daddr
  25. #define fl4_src nl_u.ip4_u.saddr
  26. int oif;
  27. union {
  28. struct {
  29. __u16 sport;
  30. __u16 dport;
  31. } ports;
  32. struct {
  33. __u8 type;
  34. __u8 code;
  35. } icmpt;
  36. unsigned long data;
  37. } uli_u;
  38. };
  39. #define FLOWR_NODECISION 0 /* rule not appliable to flow */
  40. #define FLOWR_SELECT 1 /* flow must follow this rule */
  41. #define FLOWR_CLEAR 2 /* priority level clears flow */
  42. #define FLOWR_ERROR 3
  43. struct fl_acc_args {
  44. int type;
  45. #define FL_ARG_FORWARD 1
  46. #define FL_ARG_ORIGIN 2
  47. union {
  48. struct sk_buff *skb;
  49. struct {
  50. struct sock *sk;
  51. struct flowi *flow;
  52. } fl_o;
  53. } fl_u;
  54. };
  55. struct pkt_filter {
  56. atomic_t refcnt;
  57. unsigned int offset;
  58. __u32 value;
  59. __u32 mask;
  60. struct pkt_filter *next;
  61. };
  62. #define FLR_INPUT 1
  63. #define FLR_OUTPUT 2
  64. struct flow_filter {
  65. int type;
  66. union {
  67. struct pkt_filter *filter;
  68. struct sock *sk;
  69. } u;
  70. };
  71. struct flow_rule {
  72. struct flow_rule_ops *ops;
  73. unsigned char private[0];
  74. };
  75. struct flow_rule_ops {
  76. int (*accept)(struct rt6_info *rt,
  77.   struct rt6_info *rule,
  78.   struct fl_acc_args *args,
  79.   struct rt6_info **nrt);
  80. };
  81. #endif