[ovs-dev] [PATCH v2] ovn-controller: Fix match crieria for dynamic mac binding flows
Chandra S Vejendla
csvejend at us.ibm.com
Fri Sep 9 04:31:54 UTC 2016
match struct is not initialized before adding flows for each entry in
mac_bindings table. This results in incorrect match criteria.
Signed-off-by: Chandra Sekhar Vejendla <csvejend at us.ibm.com>
Signed-off-by: Ryan Moats <rmoats at us.ibm.com>
Co-authored-by: Ryan Moats <rmoats at us.ibm.com>
---
ovn/controller/lflow.c | 31 ++++++++++++++-----------------
1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/ovn/controller/lflow.c b/ovn/controller/lflow.c
index efac5b3..3ea7fc7 100644
--- a/ovn/controller/lflow.c
+++ b/ovn/controller/lflow.c
@@ -343,10 +343,13 @@ put_load(const uint8_t *data, size_t len,
static void
consider_neighbor_flow(const struct lport_index *lports,
const struct sbrec_mac_binding *b,
- struct ofpbuf *ofpacts_p,
- struct match *match_p,
struct hmap *flow_table)
{
+ struct ofpbuf ofpacts;
+ struct match match;
+ match_init_catchall(&match);
+ ofpbuf_init(&ofpacts, 0);
+
const struct sbrec_port_binding *pb
= lport_lookup_by_name(lports, b->logical_port);
if (!pb) {
@@ -368,7 +371,7 @@ consider_neighbor_flow(const struct lport_index *lports,
VLOG_WARN_RL(&rl, "bad 'ip' %s", b->ip);
return;
}
- match_set_reg(match_p, 0, ntohl(ip));
+ match_set_reg(&match, 0, ntohl(ip));
} else {
struct in6_addr ip6;
if (!ipv6_parse(b->ip, &ip6)) {
@@ -378,16 +381,17 @@ consider_neighbor_flow(const struct lport_index *lports,
}
ovs_be128 value;
memcpy(&value, &ip6, sizeof(value));
- match_set_xxreg(match_p, 0, ntoh128(value));
+ match_set_xxreg(&match, 0, ntoh128(value));
}
- match_set_metadata(match_p, htonll(pb->datapath->tunnel_key));
- match_set_reg(match_p, MFF_LOG_OUTPORT - MFF_REG0, pb->tunnel_key);
+ match_set_metadata(&match, htonll(pb->datapath->tunnel_key));
+ match_set_reg(&match, MFF_LOG_OUTPORT - MFF_REG0, pb->tunnel_key);
- ofpbuf_clear(ofpacts_p);
- put_load(mac.ea, sizeof mac.ea, MFF_ETH_DST, 0, 48, ofpacts_p);
+ ofpbuf_clear(&ofpacts);
+ put_load(mac.ea, sizeof mac.ea, MFF_ETH_DST, 0, 48, &ofpacts);
- ofctrl_add_flow(flow_table, OFTABLE_MAC_BINDING, 100, match_p, ofpacts_p);
+ ofctrl_add_flow(flow_table, OFTABLE_MAC_BINDING, 100, &match, &ofpacts);
+ ofpbuf_uninit(&ofpacts);
}
/* Adds an OpenFlow flow to flow tables for each MAC binding in the OVN
@@ -398,17 +402,10 @@ add_neighbor_flows(struct controller_ctx *ctx,
const struct lport_index *lports,
struct hmap *flow_table)
{
- struct ofpbuf ofpacts;
- struct match match;
- match_init_catchall(&match);
- ofpbuf_init(&ofpacts, 0);
-
const struct sbrec_mac_binding *b;
SBREC_MAC_BINDING_FOR_EACH (b, ctx->ovnsb_idl) {
- consider_neighbor_flow(lports, b, &ofpacts, &match, flow_table);
+ consider_neighbor_flow(lports, b, flow_table);
}
-
- ofpbuf_uninit(&ofpacts);
}
/* Translates logical flows in the Logical_Flow table in the OVN_SB database
--
1.9.1
More information about the dev
mailing list