An ovn_port keeps track of its peer in its 'peer' member, but the code updated by this commit instead did a redundant lookup of the peer.
Signed-off-by: Ben Pfaff <b...@ovn.org> --- ovn/northd/ovn-northd.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index 9047635..8418f53 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -2618,21 +2618,16 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports, * * The packet is still in peer's logical pipeline. So the match * should be on peer's outport. */ - if (op->nbr->peer) { - struct ovn_port *peer = ovn_port_find(ports, op->nbr->peer); - if (!peer) { - continue; - } - + if (op->peer && op->peer->nbr) { ds_clear(&match); ds_put_format(&match, "outport == %s && reg0 == ", - peer->json_key); + op->peer->json_key); op_put_networks(&match, op, false); ds_clear(&actions); ds_put_format(&actions, "eth.dst = %s; next;", op->lrp_networks.ea_s); - ovn_lflow_add(lflows, peer->od, S_ROUTER_IN_ARP_RESOLVE, + ovn_lflow_add(lflows, op->peer->od, S_ROUTER_IN_ARP_RESOLVE, 100, ds_cstr(&match), ds_cstr(&actions)); } } else if (op->od->n_router_ports && strcmp(op->nbs->type, "router")) { -- 2.1.3 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev