Use a spinlock to protect the vdma data structures.
[linux-2.6/linux-mips.git] / include / net / flow.h
blob7ec259b5d632c2c44a0a19d1ec801bed66ad33d4
1 /*
3 * Generic internet FLOW.
5 */
7 #ifndef _NET_FLOW_H
8 #define _NET_FLOW_H
10 #include <linux/in6.h>
12 struct flowi {
13 int oif;
14 int iif;
16 union {
17 struct {
18 __u32 daddr;
19 __u32 saddr;
20 __u32 fwmark;
21 __u8 tos;
22 __u8 scope;
23 } ip4_u;
25 struct {
26 struct in6_addr daddr;
27 struct in6_addr saddr;
28 __u32 flowlabel;
29 } ip6_u;
31 struct {
32 __u16 daddr;
33 __u16 saddr;
34 __u32 fwmark;
35 __u8 scope;
36 } dn_u;
37 } nl_u;
38 #define fld_dst nl_u.dn_u.daddr
39 #define fld_src nl_u.dn_u.saddr
40 #define fld_fwmark nl_u.dn_u.fwmark
41 #define fld_scope nl_u.dn_u.scope
42 #define fl6_dst nl_u.ip6_u.daddr
43 #define fl6_src nl_u.ip6_u.saddr
44 #define fl6_flowlabel nl_u.ip6_u.flowlabel
45 #define fl4_dst nl_u.ip4_u.daddr
46 #define fl4_src nl_u.ip4_u.saddr
47 #define fl4_fwmark nl_u.ip4_u.fwmark
48 #define fl4_tos nl_u.ip4_u.tos
49 #define fl4_scope nl_u.ip4_u.scope
51 __u8 proto;
52 __u8 flags;
53 union {
54 struct {
55 __u16 sport;
56 __u16 dport;
57 } ports;
59 struct {
60 __u8 type;
61 __u8 code;
62 } icmpt;
64 struct {
65 __u16 sport;
66 __u16 dport;
67 __u8 objnum;
68 __u8 objnamel; /* Not 16 bits since max val is 16 */
69 __u8 objname[16]; /* Not zero terminated */
70 } dnports;
72 __u32 spi;
73 } uli_u;
74 #define fl_ip_sport uli_u.ports.sport
75 #define fl_ip_dport uli_u.ports.dport
76 #define fl_icmp_type uli_u.icmpt.type
77 #define fl_icmp_code uli_u.icmpt.code
78 #define fl_ipsec_spi uli_u.spi
81 #define FLOW_DIR_IN 0
82 #define FLOW_DIR_OUT 1
83 #define FLOW_DIR_FWD 2
85 typedef void (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir,
86 void **objp, atomic_t **obj_refp);
88 extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir,
89 flow_resolve_t resolver);
90 extern void flow_cache_flush(void);
91 extern atomic_t flow_cache_genid;
93 #endif