]>
Commit | Line | Data |
---|---|---|
9583bc14 EJ |
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" | |
e1ec7dd4 | 21 | #include "odp-util.h" |
70742c7f | 22 | #include "ofp-util.h" |
9fbe253e | 23 | #include "ovs-thread.h" |
9583bc14 EJ |
24 | #include "timer.h" |
25 | #include "util.h" | |
ec89fc6f | 26 | #include "ovs-thread.h" |
9583bc14 EJ |
27 | |
28 | union user_action_cookie; | |
70742c7f | 29 | struct dpif_flow_stats; |
46c88433 EJ |
30 | struct ofproto_dpif; |
31 | struct ofport_dpif; | |
8449c4d6 | 32 | struct dpif_backer; |
70742c7f | 33 | struct OVS_LOCKABLE rule_dpif; |
9583bc14 | 34 | |
e1ec7dd4 EJ |
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 | ||
ad3efdcb | 63 | void rule_dpif_lookup(struct ofproto_dpif *, const struct flow *, |
a2143702 | 64 | struct flow_wildcards *, struct rule_dpif **rule); |
ad3efdcb EJ |
65 | |
66 | bool rule_dpif_lookup_in_table(struct ofproto_dpif *, const struct flow *, | |
67 | struct flow_wildcards *, uint8_t table_id, | |
a2143702 | 68 | struct rule_dpif **rule); |
70742c7f | 69 | |
a2143702 BP |
70 | void rule_dpif_ref(struct rule_dpif *); |
71 | void rule_dpif_unref(struct rule_dpif *); | |
70742c7f | 72 | |
cd1acaab SH |
73 | void rule_dpif_credit_stats(struct rule_dpif *rule , |
74 | const struct dpif_flow_stats *); | |
70742c7f EJ |
75 | |
76 | bool rule_dpif_fail_open(const struct rule_dpif *rule); | |
77 | ||
6f00e29b | 78 | struct rule_actions *rule_dpif_get_actions(const struct rule_dpif *); |
ad3efdcb | 79 | |
70742c7f | 80 | ovs_be64 rule_dpif_get_flow_cookie(const struct rule_dpif *rule); |
9583bc14 | 81 | |
70742c7f EJ |
82 | void rule_dpif_reduce_timeouts(struct rule_dpif *rule, uint16_t idle_timeout, |
83 | uint16_t hard_timeout); | |
9583bc14 | 84 | |
70742c7f EJ |
85 | void choose_miss_rule(enum ofputil_port_config, |
86 | struct rule_dpif *miss_rule, | |
87 | struct rule_dpif *no_packet_in_rule, | |
a2143702 | 88 | struct rule_dpif **rule); |
ec89fc6f | 89 | |
46c88433 | 90 | bool ofproto_has_vlan_splinters(const struct ofproto_dpif *); |
4e022ec0 AW |
91 | ofp_port_t vsp_realdev_to_vlandev(const struct ofproto_dpif *, |
92 | ofp_port_t realdev_ofp_port, | |
93 | ovs_be16 vlan_tci); | |
8449c4d6 | 94 | bool vsp_adjust_flow(const struct ofproto_dpif *, struct flow *); |
9583bc14 | 95 | |
46c88433 EJ |
96 | void ofproto_dpif_send_packet_in(struct ofproto_dpif *, |
97 | struct ofputil_packet_in *pin); | |
91d6cd12 | 98 | int ofproto_dpif_send_packet(const struct ofport_dpif *, struct ofpbuf *); |
3d9c5e58 | 99 | void ofproto_dpif_flow_mod(struct ofproto_dpif *, struct ofputil_flow_mod *); |
46c88433 | 100 | |
8449c4d6 EJ |
101 | struct ofport_dpif *odp_port_to_ofport(const struct dpif_backer *, odp_port_t); |
102 | ||
9583bc14 | 103 | #endif /* ofproto-dpif.h */ |