> /* Check the consistency of a random facet, to aid debugging. */ > - if (!hmap_is_empty(&ofproto->facets) && !ofproto->need_revalidate) { > + if (!hmap_is_empty(&ofproto->facets) && > ofproto->backer->need_revalidate) {
Reid Price pointed out off list that I lost a "!" when making this change. I've folded the fix into the patch. Ethan > struct facet *facet; > > facet = CONTAINER_OF(hmap_random_node(&ofproto->facets), > struct facet, hmap_node); > - if (!tag_set_intersects(&ofproto->revalidate_set, facet->tags)) { > + if (!tag_set_intersects(&ofproto->backer->revalidate_set, > + facet->tags)) { > if (!facet_check_consistency(facet)) { > - ofproto->need_revalidate = REV_INCONSISTENCY; > + ofproto->backer->need_revalidate = REV_INCONSISTENCY; > } > } > } > @@ -1396,7 +1406,7 @@ wait(struct ofproto *ofproto_) > if (ofproto->sflow) { > dpif_sflow_wait(ofproto->sflow); > } > - if (!tag_set_is_empty(&ofproto->revalidate_set)) { > + if (!tag_set_is_empty(&ofproto->backer->revalidate_set)) { > poll_immediate_wake(); > } > HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) { > @@ -1410,7 +1420,7 @@ wait(struct ofproto *ofproto_) > } > mac_learning_wait(ofproto->ml); > stp_wait(ofproto); > - if (ofproto->need_revalidate) { > + if (ofproto->backer->need_revalidate) { > /* Shouldn't happen, but if it does just go around again. */ > VLOG_DBG_RL(&rl, "need revalidate in ofproto_wait_cb()"); > poll_immediate_wake(); > @@ -1511,7 +1521,7 @@ port_construct(struct ofport *port_) > struct dpif_port dpif_port; > int error; > > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > port->bundle = NULL; > port->cfm = NULL; > port->tag = tag_create_random(); > @@ -1567,7 +1577,7 @@ port_destruct(struct ofport *port_) > > sset_find_and_delete(&ofproto->ports, devname); > hmap_remove(&ofproto->backer->odp_to_ofport_map, &port->odp_port_node); > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > bundle_remove(port_); > set_cfm(port_, NULL); > if (ofproto->sflow) { > @@ -1598,7 +1608,7 @@ port_reconfigured(struct ofport *port_, enum > ofputil_port_config old_config) > if (changed & (OFPUTIL_PC_NO_RECV | OFPUTIL_PC_NO_RECV_STP | > OFPUTIL_PC_NO_FWD | OFPUTIL_PC_NO_FLOOD | > OFPUTIL_PC_NO_PACKET_IN)) { > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > > if (changed & OFPUTIL_PC_NO_FLOOD && port->bundle) { > bundle_update(port->bundle); > @@ -1621,13 +1631,13 @@ set_sflow(struct ofproto *ofproto_, > HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) { > dpif_sflow_add_port(ds, &ofport->up, ofport->odp_port); > } > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > dpif_sflow_set_options(ds, sflow_options); > } else { > if (ds) { > dpif_sflow_destroy(ds); > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > ofproto->sflow = NULL; > } > } > @@ -1647,7 +1657,7 @@ set_cfm(struct ofport *ofport_, const struct > cfm_settings *s) > struct ofproto_dpif *ofproto; > > ofproto = ofproto_dpif_cast(ofport->up.ofproto); > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > ofport->cfm = cfm_create(netdev_get_name(ofport->up.netdev)); > } > > @@ -1735,7 +1745,7 @@ set_stp(struct ofproto *ofproto_, const struct > ofproto_stp_settings *s) > > /* Only revalidate flows if the configuration changed. */ > if (!s != !ofproto->stp) { > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > > if (s) { > @@ -1803,12 +1813,13 @@ update_stp_port_state(struct ofport_dpif *ofport) > if (stp_learn_in_state(ofport->stp_state) > != stp_learn_in_state(state)) { > /* xxx Learning action flows should also be flushed. */ > - mac_learning_flush(ofproto->ml, &ofproto->revalidate_set); > + mac_learning_flush(ofproto->ml, > + &ofproto->backer->revalidate_set); > } > fwd_change = stp_forward_in_state(ofport->stp_state) > != stp_forward_in_state(state); > > - ofproto->need_revalidate = REV_STP; > + ofproto->backer->need_revalidate = REV_STP; > ofport->stp_state = state; > ofport->stp_state_entered = time_msec(); > > @@ -1908,7 +1919,7 @@ stp_run(struct ofproto_dpif *ofproto) > } > > if (stp_check_and_reset_fdb_flush(ofproto->stp)) { > - mac_learning_flush(ofproto->ml, &ofproto->revalidate_set); > + mac_learning_flush(ofproto->ml, > &ofproto->backer->revalidate_set); > } > } > } > @@ -2006,12 +2017,12 @@ set_queues(struct ofport *ofport_, > pdscp = xmalloc(sizeof *pdscp); > pdscp->priority = priority; > pdscp->dscp = dscp; > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > > if (pdscp->dscp != dscp) { > pdscp->dscp = dscp; > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > > hmap_insert(&new, &pdscp->hmap_node, hash_int(pdscp->priority, 0)); > @@ -2019,7 +2030,7 @@ set_queues(struct ofport *ofport_, > > if (!hmap_is_empty(&ofport->priorities)) { > ofport_clear_priorities(ofport); > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > > hmap_swap(&new, &ofport->priorities); > @@ -2046,7 +2057,7 @@ bundle_flush_macs(struct ofbundle *bundle, bool > all_ofprotos) > struct mac_learning *ml = ofproto->ml; > struct mac_entry *mac, *next_mac; > > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > LIST_FOR_EACH_SAFE (mac, next_mac, lru_node, &ml->lrus) { > if (mac->port.p == bundle) { > if (all_ofprotos) { > @@ -2059,7 +2070,6 @@ bundle_flush_macs(struct ofbundle *bundle, bool > all_ofprotos) > e = mac_learning_lookup(o->ml, mac->mac, mac->vlan, > NULL); > if (e) { > - tag_set_add(&o->revalidate_set, e->tag); > mac_learning_expire(o->ml, e); > } > } > @@ -2123,7 +2133,7 @@ bundle_del_port(struct ofport_dpif *port) > { > struct ofbundle *bundle = port->bundle; > > - bundle->ofproto->need_revalidate = REV_RECONFIGURE; > + bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE; > > list_remove(&port->bundle_node); > port->bundle = NULL; > @@ -2151,7 +2161,7 @@ bundle_add_port(struct ofbundle *bundle, uint32_t > ofp_port, > } > > if (port->bundle != bundle) { > - bundle->ofproto->need_revalidate = REV_RECONFIGURE; > + bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE; > if (port->bundle) { > bundle_del_port(port); > } > @@ -2164,7 +2174,7 @@ bundle_add_port(struct ofbundle *bundle, uint32_t > ofp_port, > } > } > if (lacp) { > - port->bundle->ofproto->need_revalidate = REV_RECONFIGURE; > + bundle->ofproto->backer->need_revalidate = REV_RECONFIGURE; > lacp_slave_register(bundle->lacp, port, lacp); > } > > @@ -2192,7 +2202,7 @@ bundle_destroy(struct ofbundle *bundle) > mirror_destroy(m); > } else if (hmapx_find_and_delete(&m->srcs, bundle) > || hmapx_find_and_delete(&m->dsts, bundle)) { > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > } > } > @@ -2264,7 +2274,7 @@ bundle_set(struct ofproto *ofproto_, void *aux, > /* LACP. */ > if (s->lacp) { > if (!bundle->lacp) { > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > bundle->lacp = lacp_create(); > } > lacp_configure(bundle->lacp, s->lacp); > @@ -2370,11 +2380,11 @@ bundle_set(struct ofproto *ofproto_, void *aux, > bundle->ofproto->has_bonded_bundles = true; > if (bundle->bond) { > if (bond_reconfigure(bundle->bond, s->bond)) { > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > } else { > bundle->bond = bond_create(s->bond); > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > > LIST_FOR_EACH (port, bundle_node, &bundle->ports) { > @@ -2494,7 +2504,7 @@ bundle_run(struct ofbundle *bundle) > bond_slave_set_may_enable(bundle->bond, port, port->may_enable); > } > > - bond_run(bundle->bond, &bundle->ofproto->revalidate_set, > + bond_run(bundle->bond, &bundle->ofproto->backer->revalidate_set, > lacp_status(bundle->lacp)); > if (bond_should_send_learning_packets(bundle->bond)) { > bundle_send_learning_packets(bundle); > @@ -2679,9 +2689,10 @@ mirror_set(struct ofproto *ofproto_, void *aux, > } > } > > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > ofproto->has_mirrors = true; > - mac_learning_flush(ofproto->ml, &ofproto->revalidate_set); > + mac_learning_flush(ofproto->ml, > + &ofproto->backer->revalidate_set); > mirror_update_dups(ofproto); > > return 0; > @@ -2700,8 +2711,8 @@ mirror_destroy(struct ofmirror *mirror) > } > > ofproto = mirror->ofproto; > - ofproto->need_revalidate = REV_RECONFIGURE; > - mac_learning_flush(ofproto->ml, &ofproto->revalidate_set); > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > + mac_learning_flush(ofproto->ml, &ofproto->backer->revalidate_set); > > mirror_bit = MIRROR_MASK_C(1) << mirror->idx; > HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) { > @@ -2752,7 +2763,7 @@ set_flood_vlans(struct ofproto *ofproto_, unsigned long > *flood_vlans) > { > struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_); > if (mac_learning_set_flood_vlans(ofproto->ml, flood_vlans)) { > - mac_learning_flush(ofproto->ml, &ofproto->revalidate_set); > + mac_learning_flush(ofproto->ml, &ofproto->backer->revalidate_set); > } > return 0; > } > @@ -2769,7 +2780,7 @@ static void > forward_bpdu_changed(struct ofproto *ofproto_) > { > struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_); > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > } > > static void > @@ -2852,7 +2863,7 @@ port_run(struct ofport_dpif *ofport) > struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto); > > if (ofproto->has_bundle_action) { > - ofproto->need_revalidate = REV_PORT_TOGGLED; > + ofproto->backer->need_revalidate = REV_PORT_TOGGLED; > } > } > > @@ -3758,7 +3769,7 @@ expire(struct dpif_backer *backer) > > HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) { > if (bundle->bond) { > - bond_rebalance(bundle->bond, &ofproto->revalidate_set); > + bond_rebalance(bundle->bond, &backer->revalidate_set); > } > } > } > @@ -4322,8 +4333,9 @@ facet_lookup_valid(struct ofproto_dpif *ofproto, const > struct flow *flow, > > facet = facet_find(ofproto, flow, hash); > if (facet > - && (ofproto->need_revalidate > - || tag_set_intersects(&ofproto->revalidate_set, facet->tags))) { > + && (ofproto->backer->need_revalidate > + || tag_set_intersects(&ofproto->backer->revalidate_set, > + facet->tags))) { > facet_revalidate(facet); > } > > @@ -6615,7 +6627,7 @@ update_learning_table(struct ofproto_dpif *ofproto, > in_bundle->name, vlan); > > mac->port.p = in_bundle; > - tag_set_add(&ofproto->revalidate_set, > + tag_set_add(&ofproto->backer->revalidate_set, > mac_learning_changed(ofproto->ml, mac)); > } > } > @@ -6891,7 +6903,7 @@ table_update_taggable(struct ofproto_dpif *ofproto, > uint8_t table_id) > if (table->catchall_table != catchall || table->other_table != other) { > table->catchall_table = catchall; > table->other_table = other; > - ofproto->need_revalidate = REV_FLOW_TABLE; > + ofproto->backer->need_revalidate = REV_FLOW_TABLE; > } > } > > @@ -6909,13 +6921,13 @@ rule_invalidate(const struct rule_dpif *rule) > > table_update_taggable(ofproto, rule->up.table_id); > > - if (!ofproto->need_revalidate) { > + if (!ofproto->backer->need_revalidate) { > struct table_dpif *table = &ofproto->tables[rule->up.table_id]; > > if (table->other_table && rule->tag) { > - tag_set_add(&ofproto->revalidate_set, rule->tag); > + tag_set_add(&ofproto->backer->revalidate_set, rule->tag); > } else { > - ofproto->need_revalidate = REV_FLOW_TABLE; > + ofproto->backer->need_revalidate = REV_FLOW_TABLE; > } > } > } > @@ -6925,9 +6937,8 @@ set_frag_handling(struct ofproto *ofproto_, > enum ofp_config_flags frag_handling) > { > struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_); > - > if (frag_handling != OFPC_FRAG_REASM) { > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > return true; > } else { > return false; > @@ -7059,10 +7070,10 @@ ofproto_unixctl_fdb_flush(struct unixctl_conn *conn, > int argc, > unixctl_command_reply_error(conn, "no such bridge"); > return; > } > - mac_learning_flush(ofproto->ml, &ofproto->revalidate_set); > + mac_learning_flush(ofproto->ml, &ofproto->backer->revalidate_set); > } else { > HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) { > - mac_learning_flush(ofproto->ml, &ofproto->revalidate_set); > + mac_learning_flush(ofproto->ml, > &ofproto->backer->revalidate_set); > } > } > > @@ -7430,7 +7441,7 @@ ofproto_dpif_self_check__(struct ofproto_dpif *ofproto, > struct ds *reply) > } > } > if (errors) { > - ofproto->need_revalidate = REV_INCONSISTENCY; > + ofproto->backer->need_revalidate = REV_INCONSISTENCY; > } > > if (errors) { > @@ -7723,7 +7734,7 @@ set_realdev(struct ofport *ofport_, uint16_t > realdev_ofp_port, int vid) > return 0; > } > > - ofproto->need_revalidate = REV_RECONFIGURE; > + ofproto->backer->need_revalidate = REV_RECONFIGURE; > > if (ofport->realdev_ofp_port) { > vsp_remove(ofport); > -- > 1.7.9.5 > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev