We already store whether a datapath is a switch or not. No need to do
an smap lookup through its external IDs every time we need this
information.
Signed-off-by: Dumitru Ceara <[email protected]>
---
controller/lflow.c | 25 ++++++++++++++-----------
controller/pinctrl.c | 2 +-
2 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/controller/lflow.c b/controller/lflow.c
index 933e2f3cc..2474342d4 100644
--- a/controller/lflow.c
+++ b/controller/lflow.c
@@ -582,7 +582,7 @@ lflow_parse_ctrl_meter(const struct sbrec_logical_flow
*lflow,
static void
add_matches_to_flow_table(const struct sbrec_logical_flow *lflow,
- const struct sbrec_datapath_binding *dp,
+ const struct local_datapath *ldp,
struct hmap *matches, uint8_t ptable,
uint8_t output_ptable, struct ofpbuf *ovnacts,
bool ingress, struct lflow_ctx_in *l_ctx_in,
@@ -592,7 +592,7 @@ add_matches_to_flow_table(const struct sbrec_logical_flow
*lflow,
.sbrec_multicast_group_by_name_datapath
= l_ctx_in->sbrec_multicast_group_by_name_datapath,
.sbrec_port_binding_by_name = l_ctx_in->sbrec_port_binding_by_name,
- .dp = dp,
+ .dp = ldp->datapath,
.lflow = lflow,
.lfrr = l_ctx_out->lfrr,
.chassis_tunnels = l_ctx_in->chassis_tunnels,
@@ -612,7 +612,7 @@ add_matches_to_flow_table(const struct sbrec_logical_flow
*lflow,
.lookup_port = lookup_port_cb,
.tunnel_ofport = tunnel_ofport_cb,
.aux = &aux,
- .is_switch = datapath_is_switch(dp),
+ .is_switch = ldp->is_switch,
.group_table = l_ctx_out->group_table,
.meter_table = l_ctx_out->meter_table,
.lflow_uuid = lflow->header_.uuid,
@@ -634,13 +634,13 @@ add_matches_to_flow_table(const struct sbrec_logical_flow
*lflow,
struct expr_match *m;
HMAP_FOR_EACH (m, hmap_node, matches) {
- match_set_metadata(&m->match, htonll(dp->tunnel_key));
- if (datapath_is_switch(dp)) {
+ match_set_metadata(&m->match, htonll(ldp->datapath->tunnel_key));
+ if (ldp->is_switch) {
unsigned int reg_index
= (ingress ? MFF_LOG_INPORT : MFF_LOG_OUTPORT) - MFF_REG0;
int64_t port_id = m->match.flow.regs[reg_index];
if (port_id) {
- int64_t dp_id = dp->tunnel_key;
+ int64_t dp_id = ldp->datapath->tunnel_key;
char buf[16];
get_unique_lport_key(dp_id, port_id, buf, sizeof(buf));
if (!sset_contains(l_ctx_in->related_lport_ids, buf)) {
@@ -691,7 +691,7 @@ add_matches_to_flow_table(const struct sbrec_logical_flow
*lflow,
*/
static struct expr *
convert_match_to_expr(const struct sbrec_logical_flow *lflow,
- const struct sbrec_datapath_binding *dp,
+ const struct local_datapath *ldp,
struct expr **prereqs,
const struct shash *addr_sets,
const struct shash *port_groups,
@@ -704,7 +704,8 @@ convert_match_to_expr(const struct sbrec_logical_flow
*lflow,
struct expr *e = expr_parse_string(lflow->match, &symtab, addr_sets,
port_groups, &addr_sets_ref,
- &port_groups_ref, dp->tunnel_key,
+ &port_groups_ref,
+ ldp->datapath->tunnel_key,
&error);
const char *addr_set_name;
SSET_FOR_EACH (addr_set_name, &addr_sets_ref) {
@@ -751,7 +752,9 @@ consider_logical_flow__(const struct sbrec_logical_flow
*lflow,
struct lflow_ctx_in *l_ctx_in,
struct lflow_ctx_out *l_ctx_out)
{
- if (!get_local_datapath(l_ctx_in->local_datapaths, dp->tunnel_key)) {
+ struct local_datapath *ldp = get_local_datapath(l_ctx_in->local_datapaths,
+ dp->tunnel_key);
+ if (!ldp) {
VLOG_DBG("lflow "UUID_FMT" is not for local datapath, skip",
UUID_ARGS(&lflow->header_.uuid));
return;
@@ -864,7 +867,7 @@ consider_logical_flow__(const struct sbrec_logical_flow
*lflow,
/* Get match expr, either from cache or from lflow match. */
switch (lcv_type) {
case LCACHE_T_NONE:
- expr = convert_match_to_expr(lflow, dp, &prereqs, l_ctx_in->addr_sets,
+ expr = convert_match_to_expr(lflow, ldp, &prereqs, l_ctx_in->addr_sets,
l_ctx_in->port_groups, l_ctx_out->lfrr,
&pg_addr_set_ref);
if (!expr) {
@@ -928,7 +931,7 @@ consider_logical_flow__(const struct sbrec_logical_flow
*lflow,
break;
}
- add_matches_to_flow_table(lflow, dp, matches, ptable, output_ptable,
+ add_matches_to_flow_table(lflow, ldp, matches, ptable, output_ptable,
&ovnacts, ingress, l_ctx_in, l_ctx_out);
/* Update cache if needed. */
diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index d2bb7f441..ee34ac6f4 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -4283,7 +4283,7 @@ run_buffered_binding(struct ovsdb_idl_index
*sbrec_mac_binding_by_lport_ip,
* a router datapath. Hence we can skip logical switch
* datapaths.
* */
- if (datapath_is_switch(ld->datapath)) {
+ if (ld->is_switch) {
continue;
}