From cdc3ab6537be3a568c943169fdf644fb1d2da7f2 Mon Sep 17 00:00:00 2001 From: Ethan Jackson Date: Wed, 12 Jun 2013 14:16:01 -0700 Subject: [PATCH] ofproto-dpif: Hide struct dpif_backer. This patch removes the last reference to dpif_backer from ofproto-dpif-xlate, and moves it's definition into ofproto-dpif.c. Signed-off-by: Ethan Jackson --- ofproto/ofproto-dpif-xlate.c | 7 ++-- ofproto/ofproto-dpif.c | 74 ++++++++++++++++++++++++++++++++++++ ofproto/ofproto-dpif.h | 70 +--------------------------------- 3 files changed, 79 insertions(+), 72 deletions(-) diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 7d3a7c418..86c5348d9 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -1279,8 +1279,7 @@ xlate_enqueue_action(struct xlate_ctx *ctx, int error; /* Translate queue to priority. */ - error = dpif_queue_to_priority(ctx->ofproto->backer->dpif, - queue_id, &priority); + error = ofproto_dpif_queue_to_priority(ctx->ofproto, queue_id, &priority); if (error) { /* Fall back to ordinary output action. */ xlate_output_action(ctx, enqueue->port, 0, false); @@ -1313,8 +1312,8 @@ xlate_set_queue_action(struct xlate_ctx *ctx, uint32_t queue_id) { uint32_t skb_priority; - if (!dpif_queue_to_priority(ctx->ofproto->backer->dpif, - queue_id, &skb_priority)) { + if (!ofproto_dpif_queue_to_priority(ctx->ofproto, queue_id, + &skb_priority)) { ctx->xin->flow.skb_priority = skb_priority; } else { /* Couldn't translate queue to a priority. Nothing to do. A warning diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index a51b60de4..a22173406 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -298,6 +298,21 @@ struct dpif_completion { struct ofoperation *op; }; +/* 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. */ +}; COVERAGE_DEFINE(rev_reconfigure); COVERAGE_DEFINE(rev_stp); COVERAGE_DEFINE(rev_port_toggled); @@ -313,6 +328,58 @@ struct drop_key { size_t key_len; }; +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; +}; + /* All existing ofproto_backer instances, indexed by ofproto->up.type. */ static struct shash all_dpif_backers = SHASH_INITIALIZER(&all_dpif_backers); @@ -1881,6 +1948,13 @@ stp_process_packet(const struct ofport_dpif *ofport, } } +int +ofproto_dpif_queue_to_priority(const struct ofproto_dpif *ofproto, + uint32_t queue_id, uint32_t *priority) +{ + return dpif_queue_to_priority(ofproto->backer->dpif, queue_id, priority); +} + struct priority_to_dscp * get_priority(const struct ofport_dpif *ofport, uint32_t priority) { diff --git a/ofproto/ofproto-dpif.h b/ofproto/ofproto-dpif.h index 0c3252ccf..313141bde 100644 --- a/ofproto/ofproto-dpif.h +++ b/ofproto/ofproto-dpif.h @@ -35,22 +35,6 @@ enum { N_TABLES = 255 }; 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; @@ -75,58 +59,6 @@ struct rule_dpif { 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 { @@ -346,6 +278,8 @@ uint16_t vsp_realdev_to_vlandev(const struct ofproto_dpif *, struct priority_to_dscp *get_priority(const struct ofport_dpif *, uint32_t priority); +int ofproto_dpif_queue_to_priority(const struct ofproto_dpif *, + uint32_t queue_id, uint32_t *priority); #endif /* ofproto-dpif.h */ -- 2.43.0