enum { TBL_INTERNAL = N_TABLES - 1 }; /* Used for internal hidden rules. */
BUILD_ASSERT_DECL(N_TABLES >= 2 && N_TABLES <= 255);
-/* Reasons that we might need to revalidate every facet, and corresponding
- * coverage counters.
- *
- * A value of 0 means that there is no need to revalidate.
- *
- * It would be nice to have some cleaner way to integrate with coverage
- * counters, but with only a few reasons I guess this is good enough for
- * now. */
-enum revalidate_reason {
- REV_RECONFIGURE = 1, /* Switch configuration changed. */
- REV_STP, /* Spanning tree protocol port status change. */
- REV_PORT_TOGGLED, /* Port enabled or disabled by CFM, LACP, ...*/
- REV_FLOW_TABLE, /* Flow table changed. */
- REV_INCONSISTENCY /* Facet self-check failed. */
-};
-
struct rule_dpif {
struct rule up;
struct list facets; /* List of "struct facet"s. */
};
-struct avg_subfacet_rates {
- double add_rate; /* Moving average of new flows created per minute. */
- double del_rate; /* Moving average of flows deleted per minute. */
-};
-
-/* All datapaths of a given type share a single dpif backer instance. */
-struct dpif_backer {
- char *type;
- int refcount;
- struct dpif *dpif;
- struct timer next_expiration;
- struct hmap odp_to_ofport_map; /* ODP port to ofport mapping. */
-
- struct simap tnl_backers; /* Set of dpif ports backing tunnels. */
-
- /* Facet revalidation flags applying to facets which use this backer. */
- enum revalidate_reason need_revalidate; /* Revalidate every facet. */
- struct tag_set revalidate_set; /* Revalidate only matching facets. */
-
- struct hmap drop_keys; /* Set of dropped odp keys. */
- bool recv_set_enable; /* Enables or disables receiving packets. */
-
- struct hmap subfacets;
- struct governor *governor;
-
- /* Subfacet statistics.
- *
- * These keep track of the total number of subfacets added and deleted and
- * flow life span. They are useful for computing the flow rates stats
- * exposed via "ovs-appctl dpif/show". The goal is to learn about
- * traffic patterns in ways that we can use later to improve Open vSwitch
- * performance in new situations. */
- long long int created; /* Time when it is created. */
- unsigned max_n_subfacet; /* Maximum number of flows */
- unsigned avg_n_subfacet; /* Average number of flows. */
- long long int avg_subfacet_life; /* Average life span of subfacets. */
-
- /* The average number of subfacets... */
- struct avg_subfacet_rates hourly; /* ...over the last hour. */
- struct avg_subfacet_rates daily; /* ...over the last day. */
- struct avg_subfacet_rates lifetime; /* ...over the switch lifetime. */
- long long int last_minute; /* Last time 'hourly' was updated. */
-
- /* Number of subfacets added or deleted since 'last_minute'. */
- unsigned subfacet_add_count;
- unsigned subfacet_del_count;
-
- /* Number of subfacets added or deleted from 'created' to 'last_minute.' */
- unsigned long long int total_subfacet_add_count;
- unsigned long long int total_subfacet_del_count;
-};
-
/* Extra information about a classifier table.
* Currently used just for optimized flow revalidation. */
struct table_dpif {
int64_t byte_count; /* Number of bytes sent. */
};
-/* Node in 'ofport_dpif''s 'priorities' map. Used to maintain a map from
- * 'priority' (the datapath's term for QoS queue) to the dscp bits which all
- * traffic egressing the 'ofport' with that priority should be marked with. */
-struct priority_to_dscp {
- struct hmap_node hmap_node; /* Node in 'ofport_dpif''s 'priorities' map. */
- uint32_t priority; /* Priority of this queue (see struct flow). */
-
- uint8_t dscp; /* DSCP bits to mark outgoing traffic with. */
-};
-
static inline struct rule_dpif *rule_dpif_cast(const struct rule *rule)
{
return rule ? CONTAINER_OF(rule, struct rule_dpif, up) : NULL;
const union user_action_cookie *,
const size_t cookie_size);
-enum slow_path_reason process_special(struct ofproto_dpif *,
- const struct flow *,
- const struct ofport_dpif *,
- const struct ofpbuf *packet);
+bool stp_should_process_flow(const struct flow *);
+void stp_process_packet(const struct ofport_dpif *,
+ const struct ofpbuf *packet);
uint16_t vsp_realdev_to_vlandev(const struct ofproto_dpif *,
uint16_t realdev_ofp_port,
ovs_be16 vlan_tci);
-struct priority_to_dscp *get_priority(const struct ofport_dpif *,
- uint32_t priority);
+bool ofproto_dpif_dscp_from_priority(const struct ofport_dpif *,
+ uint32_t priority, uint8_t *dscp);
+int ofproto_dpif_queue_to_priority(const struct ofproto_dpif *,
+ uint32_t queue_id, uint32_t *priority);
#endif /* ofproto-dpif.h */