* we don't know about.
*
* - The ofproto client didn't configure the port as part of a bundle.
+ * This is particularly likely to happen if a packet was received on the
+ * port after it was created, but before the client had a chance to
+ * configure its bundle.
*/
if (warn) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
struct ofpp_garbage *garbage, *next;
LIST_FOR_EACH_SAFE (garbage, next, list_node, &br->ofpp_garbage) {
+ /* It's a bit dangerous to call bridge_run_fast() here as ofproto's
+ * internal datastructures may not be consistent. Eventually, when
+ * port additions and deletions are cheaper, these calls should be
+ * removed. */
+ bridge_run_fast();
ofproto_port_del(br->ofproto, garbage->ofp_port);
list_remove(&garbage->list_node);
free(garbage);
if (time_msec() >= deadline) {
return false;
}
+ bridge_run_fast();
}
}
hmap_remove(&br->if_cfg_todo, &if_cfg->hmap_node);
free(if_cfg);
- /* Do the bits that can fail up front. */
+ /* Do the bits that can fail up front.
+ *
+ * It's a bit dangerous to call bridge_run_fast() here as ofproto's
+ * internal datastructures may not be consistent. Eventually, when port
+ * additions and deletions are cheaper, these calls should be removed. */
+ bridge_run_fast();
assert(!iface_lookup(br, iface_cfg->name));
error = iface_do_create(br, iface_cfg, port_cfg, &ofp_port, &netdev);
+ bridge_run_fast();
if (error) {
iface_clear_db_record(iface_cfg);
return false;