X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ofproto%2Fofproto-provider.h;h=2c72fbcf6a909d0a800d691c3f76156a4eedf418;hb=6deaf05f06f940f2a7b9004b928f80ef304b09be;hp=bc08189ae5fc6f228e14ae67911660d11949b61f;hpb=67761761a4a49f8af7d04b0e3dd9ae9b0534540c;p=sliver-openvswitch.git diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index bc08189ae..2c72fbcf6 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -339,14 +339,16 @@ struct rule { /* Protects members marked OVS_GUARDED. * Readers only need to hold this mutex. - * Writers must hold both this mutex AND ofproto_mutex. */ + * Writers must hold both this mutex AND ofproto_mutex. + * By implication writers can read *without* taking this mutex while they + * hold ofproto_mutex. */ struct ovs_mutex mutex OVS_ACQ_AFTER(ofproto_mutex); /* Number of references. * 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); @@ -356,10 +358,6 @@ struct rule { ovs_be64 flow_cookie OVS_GUARDED; struct hindex_node cookie_node OVS_GUARDED_BY(ofproto_mutex); - /* Times. */ - long long int created OVS_GUARDED; /* Creation time. */ - long long int modified OVS_GUARDED; /* Time of last modification. */ - long long int used OVS_GUARDED; /* Last use; time created if never used. */ enum ofputil_flow_mod_flags flags OVS_GUARDED; /* Timeouts. */ @@ -393,6 +391,13 @@ struct rule { /* Optimisation for flow expiry. In ofproto's 'expirable' list if this * rule is expirable, otherwise empty. */ struct list expirable OVS_GUARDED_BY(ofproto_mutex); + + /* Times. Last so that they are more likely close to the stats managed + * by the provider. */ + long long int created OVS_GUARDED; /* Creation time. */ + + /* Must hold 'mutex' for both read/write, 'ofproto_mutex' not needed. */ + long long int modified OVS_GUARDED; /* Time of last modification. */ }; void ofproto_rule_ref(struct rule *); @@ -426,7 +431,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. */ @@ -455,17 +460,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 size_t n_handlers; - -/* Determines which model to use for handling misses in the ofproto-dpif - * implementation */ -extern enum ofproto_flow_miss_model flow_miss_model; +/* Number of upcall handler and revalidator threads. Only affects the + * ofproto-dpif implementation. */ +extern size_t n_handlers, n_revalidators; static inline struct rule * rule_from_cls_rule(const struct cls_rule *cls_rule) @@ -936,8 +937,9 @@ struct ofproto_class { void (*port_reconfigured)(struct ofport *ofport, enum ofputil_port_config old_config); - /* Looks up a port named 'devname' in 'ofproto'. On success, initializes - * '*port' appropriately. + /* Looks up a port named 'devname' in 'ofproto'. On success, returns 0 and + * initializes '*port' appropriately. Otherwise, returns a positive errno + * value. * * The caller owns the data in 'port' and must free it with * ofproto_port_destroy() when it is no longer needed. */ @@ -1279,7 +1281,7 @@ struct ofproto_class { * in '*byte_count'. UINT64_MAX indicates that the packet count or byte * count is unknown. */ void (*rule_get_stats)(struct rule *rule, uint64_t *packet_count, - uint64_t *byte_count) + uint64_t *byte_count, long long int *used) /* OVS_EXCLUDED(ofproto_mutex) */; /* Applies the actions in 'rule' to 'packet'. (This implements sending