~james-page/ubuntu/saucy/openvswitch/1.12-snapshot

« back to all changes in this revision

Viewing changes to ofproto/ofproto-dpif.h

  • Committer: James Page
  • Date: 2013-08-21 10:16:57 UTC
  • mfrom: (1.1.20)
  • Revision ID: james.page@canonical.com-20130821101657-3o0z0qeiv5zkwlzi
New upstream snapshot

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 "ofproto/ofproto-provider.h"
 
22
#include "tag.h"
 
23
#include "timer.h"
 
24
#include "util.h"
 
25
 
 
26
union user_action_cookie;
 
27
struct ofproto_dpif;
 
28
struct ofport_dpif;
 
29
 
 
30
struct rule_dpif {
 
31
    struct rule up;
 
32
 
 
33
    /* These statistics:
 
34
     *
 
35
     *   - Do include packets and bytes from facets that have been deleted or
 
36
     *     whose own statistics have been folded into the rule.
 
37
     *
 
38
     *   - Do include packets and bytes sent "by hand" that were accounted to
 
39
     *     the rule without any facet being involved (this is a rare corner
 
40
     *     case in rule_execute()).
 
41
     *
 
42
     *   - Do not include packet or bytes that can be obtained from any facet's
 
43
     *     packet_count or byte_count member or that can be obtained from the
 
44
     *     datapath by, e.g., dpif_flow_get() for any subfacet.
 
45
     */
 
46
    uint64_t packet_count;       /* Number of packets received. */
 
47
    uint64_t byte_count;         /* Number of bytes received. */
 
48
 
 
49
    tag_type tag;                /* Caches rule_calculate_tag() result. */
 
50
};
 
51
 
 
52
static inline struct rule_dpif *rule_dpif_cast(const struct rule *rule)
 
53
{
 
54
    return rule ? CONTAINER_OF(rule, struct rule_dpif, up) : NULL;
 
55
}
 
56
 
 
57
struct rule_dpif *rule_dpif_lookup_in_table(struct ofproto_dpif *,
 
58
                                            const struct flow *,
 
59
                                            struct flow_wildcards *,
 
60
                                            uint8_t table_id);
 
61
 
 
62
tag_type rule_calculate_tag(const struct flow *flow, const struct minimask *,
 
63
                            uint32_t secret);
 
64
 
 
65
struct rule_dpif *rule_dpif_miss_rule(struct ofproto_dpif *ofproto,
 
66
                                      const struct flow *);
 
67
 
 
68
void rule_credit_stats(struct rule_dpif *, const struct dpif_flow_stats *);
 
69
 
 
70
void ofproto_trace(struct ofproto_dpif *, const struct flow *,
 
71
                   const struct ofpbuf *packet, struct ds *);
 
72
 
 
73
size_t put_userspace_action(const struct ofproto_dpif *,
 
74
                            struct ofpbuf *odp_actions, const struct flow *,
 
75
                            const union user_action_cookie *,
 
76
                            const size_t cookie_size);
 
77
 
 
78
bool stp_should_process_flow(const struct flow *, struct flow_wildcards *);
 
79
void stp_process_packet(const struct ofport_dpif *,
 
80
                        const struct ofpbuf *packet);
 
81
 
 
82
bool ofproto_has_vlan_splinters(const struct ofproto_dpif *);
 
83
ofp_port_t vsp_realdev_to_vlandev(const struct ofproto_dpif *,
 
84
                                  ofp_port_t realdev_ofp_port,
 
85
                                  ovs_be16 vlan_tci);
 
86
 
 
87
bool ofproto_dpif_dscp_from_priority(const struct ofport_dpif *,
 
88
                                     uint32_t priority, uint8_t *dscp);
 
89
int ofproto_dpif_queue_to_priority(const struct ofproto_dpif *,
 
90
                                   uint32_t queue_id, uint32_t *priority);
 
91
tag_type calculate_flow_tag(struct ofproto_dpif *, const struct flow *,
 
92
                            uint8_t table_id, struct rule_dpif *);
 
93
 
 
94
void ofproto_dpif_send_packet_in(struct ofproto_dpif *,
 
95
                                 struct ofputil_packet_in *pin);
 
96
int ofproto_dpif_flow_mod(struct ofproto_dpif *, struct ofputil_flow_mod *);
 
97
 
 
98
#endif /* ofproto-dpif.h */