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