X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ofproto%2Fofproto-provider.h;h=1655c3a4ab90718d9b343467c823fc9fd46ce017;hb=7155fa52f0e585eb515ceebf3790d90554bbe18e;hp=2f429e0b703ff6cdae6da873373901894aa6c757;hpb=29089a540cfa30a834e3ee19a8b4c52ff2e331b2;p=sliver-openvswitch.git diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index 2f429e0b7..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" @@ -33,6 +34,7 @@ struct match; struct ofpact; struct ofputil_flow_mod; +struct bfd_cfg; /* An OpenFlow switch. * @@ -47,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. */ @@ -64,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. */ @@ -102,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". * @@ -116,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; }; @@ -204,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. */ @@ -231,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) { @@ -241,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 *); @@ -687,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, @@ -1144,6 +1155,21 @@ struct ofproto_class { bool (*get_cfm_status)(const struct ofport *ofport, struct ofproto_cfm_status *status); + /* Configures BFD on 'ofport'. + * + * If 'cfg' is NULL, or 'cfg' does not contain the key value pair + * "enable=true", removes BFD from 'ofport'. Otherwise, configures BFD + * according to 'cfg'. + * + * EOPNOTSUPP as a return value indicates that this ofproto_class does not + * support BFD, as does a null pointer. */ + int (*set_bfd)(struct ofport *ofport, const struct smap *cfg); + + /* Populates 'smap' with the status of BFD on 'ofport'. Returns 0 on + * success, or a positive errno. EOPNOTSUPP as a return value indicates + * that this ofproto_class does not support BFD, as does a null pointer. */ + int (*get_bfd_status)(struct ofport *ofport, struct smap *smap); + /* Configures spanning tree protocol (STP) on 'ofproto' using the * settings defined in 's'. * @@ -1298,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;