X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ofproto%2Fofproto-provider.h;h=2844e4cf5da358b75b82126813e2cc076fd06ee1;hb=df85c52098277ddaef2d23f436f7d6d8df2f4239;hp=bc3f9661086c196aa204432e960029325f4f7345;hpb=e555eb7c38c38b170c165b2e4b9cd222f0fd20e8;p=sliver-openvswitch.git diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index bc3f96610..2844e4cf5 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -81,10 +81,10 @@ struct ofproto { /* Datapath. */ struct hmap ports; /* Contains "struct ofport"s. */ 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. */ + struct hmap ofport_usage; /* Map ofport to last used time. */ /* Flow tables. */ long long int eviction_group_timer; /* For rate limited reheapification. */ @@ -306,7 +306,7 @@ struct oftable { * * 'rule->ref_count' protects 'rule' from being freed. It doesn't protect the * rule from being deleted from 'cls' (that's 'cls->rwlock') and it doesn't - * protect members of 'rule' from modification (that's 'rule->rwlock'). + * protect members of 'rule' from modification (that's 'rule->mutex'). * * 'rule->mutex' protects the members of 'rule' from modification. It doesn't * protect the rule from being deleted from 'cls' (that's 'cls->rwlock') and it @@ -398,6 +398,18 @@ struct rule_actions *rule_get_actions(const struct rule *rule) struct rule_actions *rule_get_actions__(const struct rule *rule) OVS_REQUIRES(rule->mutex); +/* Returns true if 'rule' is an OpenFlow 1.3 "table-miss" rule, false + * otherwise. + * + * ("Table-miss" rules are special because a packet_in generated through one + * uses OFPR_NO_MATCH as its reason, whereas packet_ins generated by any other + * rule use OFPR_ACTION.) */ +static inline bool +rule_is_table_miss(const struct rule *rule) +{ + return rule->cr.priority == 0 && cls_rule_is_catchall(&rule->cr); +} + /* A set of actions within a "struct rule". * * @@ -415,10 +427,11 @@ struct rule_actions { * lifetime. */ struct ofpact *ofpacts; /* Sequence of "struct ofpacts". */ unsigned int ofpacts_len; /* Size of 'ofpacts', in bytes. */ - uint32_t meter_id; /* Non-zero OF meter_id, or zero. */ + uint32_t provider_meter_id; /* Datapath meter_id, or UINT32_MAX. */ }; -struct rule_actions *rule_actions_create(const struct ofpact *, size_t); +struct rule_actions *rule_actions_create(const struct ofproto *, + const struct ofpact *, size_t); void rule_actions_ref(struct rule_actions *); void rule_actions_unref(struct rule_actions *);