]>
Commit | Line | Data |
---|---|---|
e6445719 PS |
1 | /* |
2 | * Copyright (c) 2007-2013 Nicira, Inc. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or | |
5 | * modify it under the terms of version 2 of the GNU General Public | |
6 | * License as published by the Free Software Foundation. | |
7 | * | |
8 | * This program is distributed in the hope that it will be useful, but | |
9 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | * General Public License for more details. | |
12 | * | |
13 | * You should have received a copy of the GNU General Public License | |
14 | * along with this program; if not, write to the Free Software | |
15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
16 | * 02110-1301, USA | |
17 | */ | |
18 | ||
19 | #ifndef FLOW_TABLE_H | |
20 | #define FLOW_TABLE_H 1 | |
21 | ||
22 | #include <linux/kernel.h> | |
23 | #include <linux/netlink.h> | |
24 | #include <linux/openvswitch.h> | |
25 | #include <linux/spinlock.h> | |
26 | #include <linux/types.h> | |
27 | #include <linux/rcupdate.h> | |
28 | #include <linux/if_ether.h> | |
29 | #include <linux/in6.h> | |
30 | #include <linux/jiffies.h> | |
31 | #include <linux/time.h> | |
32 | #include <linux/flex_array.h> | |
33 | ||
34 | #include <net/inet_ecn.h> | |
35 | #include <net/ip_tunnels.h> | |
36 | ||
37 | #include "flow.h" | |
38 | ||
b637e498 | 39 | struct table_instance { |
e6445719 | 40 | struct flex_array *buckets; |
b637e498 | 41 | unsigned int n_buckets; |
e6445719 | 42 | struct rcu_head rcu; |
e6445719 PS |
43 | int node_ver; |
44 | u32 hash_seed; | |
45 | bool keep_flows; | |
46 | }; | |
47 | ||
b637e498 PS |
48 | struct flow_table { |
49 | struct table_instance __rcu *ti; | |
74ed7ab9 | 50 | struct table_instance __rcu *ufid_ti; |
b637e498 PS |
51 | struct list_head mask_list; |
52 | unsigned long last_rehash; | |
53 | unsigned int count; | |
74ed7ab9 | 54 | unsigned int ufid_count; |
b637e498 PS |
55 | }; |
56 | ||
63e7959c JR |
57 | extern struct kmem_cache *flow_stats_cache; |
58 | ||
e6445719 PS |
59 | int ovs_flow_init(void); |
60 | void ovs_flow_exit(void); | |
61 | ||
23dabf88 | 62 | struct sw_flow *ovs_flow_alloc(void); |
e6445719 PS |
63 | void ovs_flow_free(struct sw_flow *, bool deferred); |
64 | ||
b637e498 | 65 | int ovs_flow_tbl_init(struct flow_table *); |
12eb18f7 | 66 | int ovs_flow_tbl_count(const struct flow_table *table); |
9b996e54 | 67 | void ovs_flow_tbl_destroy(struct flow_table *table); |
b637e498 | 68 | int ovs_flow_tbl_flush(struct flow_table *flow_table); |
e6445719 | 69 | |
618ed0c8 | 70 | int ovs_flow_tbl_insert(struct flow_table *table, struct sw_flow *flow, |
12eb18f7 | 71 | const struct sw_flow_mask *mask); |
e6445719 | 72 | void ovs_flow_tbl_remove(struct flow_table *table, struct sw_flow *flow); |
1bd7116f | 73 | int ovs_flow_tbl_num_masks(const struct flow_table *table); |
b637e498 | 74 | struct sw_flow *ovs_flow_tbl_dump_next(struct table_instance *table, |
e6445719 | 75 | u32 *bucket, u32 *idx); |
5bb50632 | 76 | struct sw_flow *ovs_flow_tbl_lookup_stats(struct flow_table *, |
1bd7116f AZ |
77 | const struct sw_flow_key *, |
78 | u32 *n_mask_hit); | |
5bb50632 AZ |
79 | struct sw_flow *ovs_flow_tbl_lookup(struct flow_table *, |
80 | const struct sw_flow_key *); | |
4a46b24e | 81 | struct sw_flow *ovs_flow_tbl_lookup_exact(struct flow_table *tbl, |
12eb18f7 | 82 | const struct sw_flow_match *match); |
74ed7ab9 JS |
83 | struct sw_flow *ovs_flow_tbl_lookup_ufid(struct flow_table *, |
84 | const struct sw_flow_id *); | |
85 | ||
86 | bool ovs_flow_cmp(const struct sw_flow *, const struct sw_flow_match *); | |
e6445719 | 87 | |
e6445719 | 88 | void ovs_flow_mask_key(struct sw_flow_key *dst, const struct sw_flow_key *src, |
ae5f2fb1 | 89 | bool full, const struct sw_flow_mask *mask); |
e6445719 | 90 | #endif /* flow_table.h */ |