From a72687af3a2ab1600ca9e87c00d4e7d138ecdc1a Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 25 Oct 2013 14:00:43 -0700 Subject: [PATCH] ofproto: Use ofproto_check_ofpacts() from modify_flows__(). Until now this code has called ofpacts_check() directly, but that omits the additional check that the ofproto_check_ofpacts() wrapper includes. Reported-by: Jarno Rajahalme Signed-off-by: Ben Pfaff Acked-by: Jarno Rajahalme --- ofproto/ofproto.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 1d340c9b2..91a39efe9 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -2824,14 +2824,14 @@ static enum ofperr ofproto_check_ofpacts(struct ofproto *ofproto, const struct ofpact ofpacts[], size_t ofpacts_len, struct flow *flow, uint8_t table_id, - bool enforce_consistency) + const struct ofp_header *oh) { enum ofperr error; uint32_t mid; error = ofpacts_check(ofpacts, ofpacts_len, flow, u16_to_ofp(ofproto->max_ports), table_id, - enforce_consistency); + oh && oh->version > OFP10_VERSION); if (error) { return error; } @@ -2889,8 +2889,7 @@ handle_packet_out(struct ofconn *ofconn, const struct ofp_header *oh) /* Verify actions against packet, then send packet if successful. */ in_port_.ofp_port = po.in_port; flow_extract(payload, 0, 0, NULL, &in_port_, &flow); - error = ofproto_check_ofpacts(p, po.ofpacts, po.ofpacts_len, &flow, 0, - oh->version > OFP10_VERSION); + error = ofproto_check_ofpacts(p, po.ofpacts, po.ofpacts_len, &flow, 0, oh); if (!error) { error = p->ofproto_class->packet_out(p, payload, &flow, po.ofpacts, po.ofpacts_len); @@ -3940,8 +3939,7 @@ add_flow(struct ofproto *ofproto, struct ofconn *ofconn, /* Verify actions. */ error = ofproto_check_ofpacts(ofproto, fm->ofpacts, fm->ofpacts_len, - &fm->match.flow, table_id, - request && request->version > OFP10_VERSION); + &fm->match.flow, table_id, request); if (error) { cls_rule_destroy(&cr); return error; @@ -4050,9 +4048,9 @@ modify_flows__(struct ofproto *ofproto, struct ofconn *ofconn, for (i = 0; i < rules->n; i++) { struct rule *rule = rules->rules[i]; - error = ofpacts_check(fm->ofpacts, fm->ofpacts_len, &fm->match.flow, - u16_to_ofp(ofproto->max_ports), rule->table_id, - request && request->version > OFP10_VERSION); + error = ofproto_check_ofpacts(ofproto, fm->ofpacts, fm->ofpacts_len, + &fm->match.flow, rule->table_id, + request); if (error) { return error; } -- 2.20.1