X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ofproto%2Fofproto-provider.h;h=1655c3a4ab90718d9b343467c823fc9fd46ce017;hb=7155fa52f0e585eb515ceebf3790d90554bbe18e;hp=b9d6f0d431328d578a54b716328a07b35e290e23;hpb=ccc096898c4618e8869a7696b40ca7f17e8b9560;p=sliver-openvswitch.git diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index b9d6f0d43..1655c3a4a 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -23,6 +23,7 @@ #include "cfm.h" #include "classifier.h" #include "heap.h" +#include "hindex.h" #include "list.h" #include "ofp-errors.h" #include "ofp-util.h" @@ -48,9 +49,6 @@ struct ofproto { /* Settings. */ uint64_t fallback_dpid; /* Datapath ID if no better choice found. */ uint64_t datapath_id; /* Datapath ID. */ - unsigned flow_eviction_threshold; /* Threshold at which to begin flow - * table eviction. Only affects the - * ofproto-dpif implementation */ bool forward_bpdu; /* Option to allow forwarding of BPDU frames * when NORMAL action is invoked. */ char *mfr_desc; /* Manufacturer (NULL for default)b. */ @@ -65,13 +63,15 @@ struct ofproto { struct shash port_by_name; unsigned long *ofp_port_ids;/* Bitmap of used OpenFlow port numbers. */ struct simap ofp_requests; /* OpenFlow port number requests. */ - uint16_t alloc_port_no; /* Last allocated OpenFlow port number. */ - uint16_t max_ports; /* Max possible OpenFlow port num, plus one. */ + ofp_port_t alloc_port_no; /* Last allocated OpenFlow port number. */ + ofp_port_t max_ports; /* Max possible OpenFlow port num, plus one. */ /* Flow tables. */ struct oftable *tables; int n_tables; + struct hindex cookies; /* Rules indexed on their cookie values. */ + /* Optimisation for flow expiry. * These flows should all be present in tables. */ struct list expirable; /* Expirable 'struct rule"s in all tables. */ @@ -103,10 +103,10 @@ struct ofproto { }; void ofproto_init_tables(struct ofproto *, int n_tables); -void ofproto_init_max_ports(struct ofproto *, uint16_t max_ports); +void ofproto_init_max_ports(struct ofproto *, ofp_port_t max_ports); struct ofproto *ofproto_lookup(const char *name); -struct ofport *ofproto_get_port(const struct ofproto *, uint16_t ofp_port); +struct ofport *ofproto_get_port(const struct ofproto *, ofp_port_t ofp_port); /* An OpenFlow port within a "struct ofproto". * @@ -117,8 +117,9 @@ struct ofport { struct ofproto *ofproto; /* The ofproto that contains this port. */ struct netdev *netdev; struct ofputil_phy_port pp; - uint16_t ofp_port; /* OpenFlow port number. */ + ofp_port_t ofp_port; /* OpenFlow port number. */ unsigned int change_seq; + long long int created; /* Time created, in msec. */ int mtu; }; @@ -205,6 +206,7 @@ struct rule { struct ofoperation *pending; /* Operation now in progress, if nonnull. */ ovs_be64 flow_cookie; /* Controller-issued identifier. */ + struct hindex_node cookie_node; /* In owning ofproto's 'cookies' index. */ long long int created; /* Creation time. */ long long int modified; /* Time of last modification. */ @@ -232,6 +234,14 @@ struct rule { * is expirable, otherwise empty. */ }; +/* Threshold at which to begin flow table eviction. Only affects the + * ofproto-dpif implementation */ +extern unsigned flow_eviction_threshold; + +/* Determines which model to use for handling misses in the ofproto-dpif + * implementation */ +extern enum ofproto_flow_miss_model flow_miss_model; + static inline struct rule * rule_from_cls_rule(const struct cls_rule *cls_rule) { @@ -242,12 +252,12 @@ void ofproto_rule_update_used(struct rule *, long long int used); void ofproto_rule_expire(struct rule *, uint8_t reason); void ofproto_rule_destroy(struct rule *); -bool ofproto_rule_has_out_port(const struct rule *, uint16_t out_port); +bool ofproto_rule_has_out_port(const struct rule *, ofp_port_t out_port); void ofoperation_complete(struct ofoperation *, enum ofperr); struct rule *ofoperation_get_victim(struct ofoperation *); -bool ofoperation_has_out_port(const struct ofoperation *, uint16_t out_port); +bool ofoperation_has_out_port(const struct ofoperation *, ofp_port_t out_port); bool ofproto_rule_is_hidden(const struct rule *); @@ -688,7 +698,7 @@ struct ofproto_class { * It doesn't matter whether the new port will be returned by a later call * to ->port_poll(); the implementation may do whatever is more * convenient. */ - int (*port_del)(struct ofproto *ofproto, uint16_t ofp_port); + int (*port_del)(struct ofproto *ofproto, ofp_port_t ofp_port); /* Get port stats */ int (*port_get_stats)(const struct ofport *port, @@ -1314,7 +1324,7 @@ struct ofproto_class { * This function should be NULL if a an implementation does not support * it. */ int (*set_realdev)(struct ofport *ofport, - uint16_t realdev_ofp_port, int vid); + ofp_port_t realdev_ofp_port, int vid); }; extern const struct ofproto_class ofproto_dpif_class;