X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ofproto%2Fofproto-provider.h;h=19d15517285c890dd95cf34e400120e998adec07;hb=f1c8a79c626f383926b70eb1885c40f8a427ba23;hp=bd4ff5fe9ff3cdb1f7aed714497d02e192676b3d;hpb=da4a619179d6d6e9e6a82977c41cfcc2d1533ad8;p=sliver-openvswitch.git diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index bd4ff5fe9..19d155172 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -260,6 +260,9 @@ struct oftable { uint32_t eviction_group_id_basis; struct hmap eviction_groups_by_id; struct heap eviction_groups_by_size; + + /* Table config: contains enum ofp_table_config; accessed atomically. */ + atomic_uint config; }; /* Assigns TABLE to each oftable, in turn, in OFPROTO. @@ -343,7 +346,7 @@ struct rule { * The classifier owns one reference. * Any thread trying to keep a rule from being freed should hold its own * reference. */ - atomic_uint ref_count; + struct ovs_refcount ref_count; /* Operation now in progress, if nonnull. */ struct ofoperation *pending OVS_GUARDED_BY(ofproto_mutex); @@ -423,7 +426,7 @@ rule_is_table_miss(const struct rule *rule) * 'rule' is the rule for which 'rule->actions == actions') or that owns a * reference to 'actions->ref_count' (or both). */ struct rule_actions { - atomic_uint ref_count; + struct ovs_refcount ref_count; /* These members are immutable: they do not change during the struct's * lifetime. */ @@ -452,13 +455,13 @@ void rule_collection_ref(struct rule_collection *) OVS_REQUIRES(ofproto_mutex); void rule_collection_unref(struct rule_collection *); void rule_collection_destroy(struct rule_collection *); -/* Threshold at which to begin flow table eviction. Only affects the - * ofproto-dpif implementation */ -extern unsigned flow_eviction_threshold; +/* Limits the number of flows allowed in the datapath. Only affects the + * ofproto-dpif implementation. */ +extern unsigned ofproto_flow_limit; -/* Number of upcall handler threads. Only affects the ofproto-dpif - * implementation. */ -extern unsigned n_handler_threads; +/* Number of upcall handler and revalidator threads. Only affects the + * ofproto-dpif implementation. */ +extern size_t n_handlers, n_revalidators; /* Determines which model to use for handling misses in the ofproto-dpif * implementation */ @@ -688,16 +691,6 @@ struct ofproto_class { * Returns 0 if successful, otherwise a positive errno value. */ int (*type_run)(const char *type); - /* Performs periodic activity required on ofprotos of type 'type' - * that needs to be done with the least possible latency. - * - * This is run multiple times per main loop. An ofproto provider may - * implement it or not, according to whether it provides a performance - * boost for that ofproto implementation. - * - * Returns 0 if successful, otherwise a positive errno value. */ - int (*type_run_fast)(const char *type); - /* Causes the poll loop to wake up when a type 'type''s 'run' * function needs to be called, e.g. by calling the timer or fd * waiting functions in poll-loop.h. @@ -781,14 +774,6 @@ struct ofproto_class { * Returns 0 if successful, otherwise a positive errno value. */ int (*run)(struct ofproto *ofproto); - /* Performs periodic activity required by 'ofproto' that needs to be done - * with the least possible latency. - * - * This is run multiple times per main loop. An ofproto provider may - * implement it or not, according to whether it provides a performance - * boost for that ofproto implementation. */ - int (*run_fast)(struct ofproto *ofproto); - /* Causes the poll loop to wake up when 'ofproto''s 'run' function needs to * be called, e.g. by calling the timer or fd waiting functions in * poll-loop.h. */ @@ -801,6 +786,12 @@ struct ofproto_class { void (*get_memory_usage)(const struct ofproto *ofproto, struct simap *usage); + /* Adds some memory usage statistics for the implementation of 'type' + * into 'usage', for use with memory_report(). + * + * This function is optional. */ + void (*type_get_memory_usage)(const char *type, struct simap *usage); + /* Every "struct rule" in 'ofproto' is about to be deleted, one by one. * This function may prepare for that, for example by clearing state in * advance. It should *not* actually delete any "struct rule"s from