An upcoming commit will introduce a second user for the new function actions_output_to_port().
Signed-off-by: Ben Pfaff <b...@nicira.com> --- lib/ofp-util.c | 15 +++++++++++++++ lib/ofp-util.h | 3 +++ ofproto/ofproto.c | 15 +++------------ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/lib/ofp-util.c b/lib/ofp-util.c index b749389..6db215c 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -4058,6 +4058,21 @@ action_outputs_to_port(const union ofp_action *action, ovs_be16 port) } } +bool +actions_output_to_port(const union ofp_action *actions, size_t n_actions, + ovs_be16 port) +{ + const union ofp_action *oa; + size_t left; + + OFPUTIL_ACTION_FOR_EACH_UNSAFE (oa, left, actions, n_actions) { + if (action_outputs_to_port(oa, port)) { + return true; + } + } + return false; +} + /* "Normalizes" the wildcards in 'rule'. That means: * * 1. If the type of level N is known, then only the valid fields for that diff --git a/lib/ofp-util.h b/lib/ofp-util.h index 28ba031..d80e038 100644 --- a/lib/ofp-util.h +++ b/lib/ofp-util.h @@ -682,7 +682,10 @@ ofputil_action_is_valid(const union ofp_action *a, size_t n_actions) enum ofperr validate_actions(const union ofp_action *, size_t n_actions, const struct flow *, int max_ports); + bool action_outputs_to_port(const union ofp_action *, ovs_be16 port); +bool actions_output_to_port(const union ofp_action *, size_t n_actions, + ovs_be16 port); enum ofperr ofputil_pull_actions(struct ofpbuf *, unsigned int actions_len, union ofp_action **, size_t *); diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 9f67fe0..d4408f5 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -1886,18 +1886,9 @@ ofproto_rule_destroy(struct rule *rule) static bool rule_has_out_port(const struct rule *rule, uint16_t out_port) { - const union ofp_action *oa; - size_t left; - - if (out_port == OFPP_NONE) { - return true; - } - OFPUTIL_ACTION_FOR_EACH_UNSAFE (oa, left, rule->actions, rule->n_actions) { - if (action_outputs_to_port(oa, htons(out_port))) { - return true; - } - } - return false; + return (out_port == OFPP_NONE + || actions_output_to_port(rule->actions, rule->n_actions, + htons(out_port))); } /* Executes the actions indicated by 'rule' on 'packet' and credits 'rule''s -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev