]>
Commit | Line | Data |
---|---|---|
1 | /* Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. | |
2 | * | |
3 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
4 | * you may not use this file except in compliance with the License. | |
5 | * You may obtain a copy of the License at: | |
6 | * | |
7 | * http://www.apache.org/licenses/LICENSE-2.0 | |
8 | * | |
9 | * Unless required by applicable law or agreed to in writing, software | |
10 | * distributed under the License is distributed on an "AS IS" BASIS, | |
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 | * See the License for the specific language governing permissions and | |
13 | * limitations under the License. */ | |
14 | ||
15 | #ifndef OFPROTO_DPIF_H | |
16 | #define OFPROTO_DPIF_H 1 | |
17 | ||
18 | #include <stdint.h> | |
19 | ||
20 | #include "hmapx.h" | |
21 | #include "odp-util.h" | |
22 | #include "ofp-util.h" | |
23 | #include "ovs-thread.h" | |
24 | #include "timer.h" | |
25 | #include "util.h" | |
26 | #include "ovs-thread.h" | |
27 | ||
28 | union user_action_cookie; | |
29 | struct dpif_flow_stats; | |
30 | struct ofproto_dpif; | |
31 | struct ofport_dpif; | |
32 | struct dpif_backer; | |
33 | struct OVS_LOCKABLE rule_dpif; | |
34 | ||
35 | /* Ofproto-dpif -- DPIF based ofproto implementation. | |
36 | * | |
37 | * Ofproto-dpif provides an ofproto implementation for those platforms which | |
38 | * implement the netdev and dpif interface defined in netdev.h and dpif.h. The | |
39 | * most important of which is the Linux Kernel Module (dpif-linux), but | |
40 | * alternatives are supported such as a userspace only implementation | |
41 | * (dpif-netdev), and a dummy implementation used for unit testing. | |
42 | * | |
43 | * Ofproto-dpif is divided into three major chunks. | |
44 | * | |
45 | * - ofproto-dpif.c | |
46 | * The main ofproto-dpif module is responsible for implementing the | |
47 | * provider interface, installing and removing datapath flows, maintaining | |
48 | * packet statistics, running protocols (BFD, LACP, STP, etc), and | |
49 | * configuring relevant submodules. | |
50 | * | |
51 | * - ofproto-dpif-upcall.c | |
52 | * Ofproto-dpif-upcall is responsible for retrieving upcalls from the kernel, | |
53 | * processing miss upcalls, and handing more complex ones up to the main | |
54 | * ofproto-dpif module. Miss upcall processing boils down to figuring out | |
55 | * what each packet's actions are, executing them (i.e. asking the kernel to | |
56 | * forward it), and handing it up to ofproto-dpif to decided whether or not | |
57 | * to install a kernel flow. | |
58 | * | |
59 | * - ofproto-dpif-xlate.c | |
60 | * Ofproto-dpif-xlate is responsible for translating translating OpenFlow | |
61 | * actions into datapath actions. */ | |
62 | ||
63 | void rule_dpif_lookup(struct ofproto_dpif *, const struct flow *, | |
64 | struct flow_wildcards *, struct rule_dpif **rule) | |
65 | OVS_ACQ_RDLOCK(*rule); | |
66 | ||
67 | bool rule_dpif_lookup_in_table(struct ofproto_dpif *, const struct flow *, | |
68 | struct flow_wildcards *, uint8_t table_id, | |
69 | struct rule_dpif **rule) | |
70 | OVS_TRY_RDLOCK(true, *rule); | |
71 | ||
72 | void rule_dpif_release(struct rule_dpif *rule) OVS_RELEASES(rule); | |
73 | ||
74 | void rule_dpif_credit_stats(struct rule_dpif *rule , | |
75 | const struct dpif_flow_stats *); | |
76 | ||
77 | bool rule_dpif_fail_open(const struct rule_dpif *rule); | |
78 | ||
79 | void rule_dpif_get_actions(const struct rule_dpif *rule, | |
80 | const struct ofpact **ofpacts, | |
81 | size_t *ofpacts_len); | |
82 | ||
83 | ovs_be64 rule_dpif_get_flow_cookie(const struct rule_dpif *rule); | |
84 | ||
85 | void rule_dpif_reduce_timeouts(struct rule_dpif *rule, uint16_t idle_timeout, | |
86 | uint16_t hard_timeout); | |
87 | ||
88 | void choose_miss_rule(enum ofputil_port_config, | |
89 | struct rule_dpif *miss_rule, | |
90 | struct rule_dpif *no_packet_in_rule, | |
91 | struct rule_dpif **rule) | |
92 | OVS_ACQ_RDLOCK(*rule); | |
93 | ||
94 | bool ofproto_has_vlan_splinters(const struct ofproto_dpif *); | |
95 | ofp_port_t vsp_realdev_to_vlandev(const struct ofproto_dpif *, | |
96 | ofp_port_t realdev_ofp_port, | |
97 | ovs_be16 vlan_tci); | |
98 | bool vsp_adjust_flow(const struct ofproto_dpif *, struct flow *); | |
99 | ||
100 | void ofproto_dpif_send_packet_in(struct ofproto_dpif *, | |
101 | struct ofputil_packet_in *pin); | |
102 | void ofproto_dpif_flow_mod(struct ofproto_dpif *, struct ofputil_flow_mod *); | |
103 | ||
104 | struct ofport_dpif *odp_port_to_ofport(const struct dpif_backer *, odp_port_t); | |
105 | ||
106 | #endif /* ofproto-dpif.h */ |