@@ -118,6 +118,9 @@ void lflow_table_add_lflow(struct lflow_table *, const struct ovn_datapath *,
.where = OVS_SOURCE_LOCATOR,
#define WITH_HINT(HINT) .stage_hint = HINT
+#define WITH_DP_GROUP(DP_BITMAP, DP_BITMAP_LEN) \
+ .dp_bitmap = DP_BITMAP, \
+ .dp_bitmap_len = DP_BITMAP_LEN
/* The IN_OUT_PORT argument tells the lport name that appears in the MATCH,
* which helps ovn-controller to bypass lflows parsing when the lport is
* not local to the chassis. The critiera of the lport to be added using this
@@ -133,14 +136,6 @@ void lflow_table_add_lflow(struct lflow_table *, const struct ovn_datapath *,
#define LFLOW_TABLE_ADD_ARGS_END }
-/* Adds a row with the specified contents to the Logical_Flow table. */
-#define ovn_lflow_add_with_dp_group(LFLOW_TABLE, DP_BITMAP, DP_BITMAP_LEN, \
- STAGE, PRIORITY, MATCH, ACTIONS, \
- STAGE_HINT, LFLOW_REF) \
- lflow_table_add_lflow(LFLOW_TABLE, NULL, DP_BITMAP, DP_BITMAP_LEN, STAGE, \
- PRIORITY, MATCH, ACTIONS, NULL, NULL, STAGE_HINT, \
- OVS_SOURCE_LOCATOR, NULL, LFLOW_REF)
-
/* Adds a row with the specified contents to the Logical_Flow table. */
#define ovn_lflow_add_default_drop(LFLOW_TABLE, OD, STAGE, LFLOW_REF, ...) \
lflow_table_add_lflow__( \
@@ -8084,10 +8084,11 @@ build_lb_rules_pre_stateful(struct lflow_table *lflows,
lb_vip->port_str);
}
- ovn_lflow_add_with_dp_group(
- lflows, lb_dps->nb_ls_map.map, ods_size(ls_datapaths),
- S_SWITCH_IN_PRE_STATEFUL, 120, ds_cstr(match), ds_cstr(action),
- &lb->nlb->header_, lb_dps->lflow_ref);
+ ovn_lflow_add(
+ lflows, NULL, S_SWITCH_IN_PRE_STATEFUL, 120, ds_cstr(match),
+ ds_cstr(action), lb_dps->lflow_ref,
+ WITH_HINT(&lb->nlb->header_),
+ WITH_DP_GROUP(lb_dps->nb_ls_map.map, ods_size(ls_datapaths)));
struct lflow_ref *lflow_ref = lb_dps->lflow_ref;
struct hmapx_node *hmapx_node;
@@ -8193,10 +8194,12 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows,
}
/* Create affinity check flow. */
- ovn_lflow_add_with_dp_group(
- lflows, dp_bitmap, ods_size(lr_datapaths), S_ROUTER_IN_LB_AFF_CHECK,
+ ovn_lflow_add(
+ lflows, NULL, S_ROUTER_IN_LB_AFF_CHECK,
100, new_lb_match, REGBIT_KNOWN_LB_SESSION" = chk_lb_aff(); next;",
- &lb->nlb->header_, lflow_ref);
+ lflow_ref,
+ WITH_HINT(&lb->nlb->header_),
+ WITH_DP_GROUP(dp_bitmap, ods_size(lr_datapaths)));
/* Prepare common part of affinity LB and affinity learn action. */
ds_put_cstr(&aff_action_learn, "commit_lb_aff(vip = \"");
@@ -8274,17 +8277,20 @@ build_lb_affinity_lr_flows(struct lflow_table *lflows,
lb->affinity_timeout);
/* Forward to OFTABLE_CHK_LB_AFFINITY table to store flow tuple. */
- ovn_lflow_add_with_dp_group(
- lflows, dp_bitmap, ods_size(lr_datapaths),
- S_ROUTER_IN_LB_AFF_LEARN, 100, ds_cstr(&aff_match_learn),
- ds_cstr(&aff_action_learn), &lb->nlb->header_,
- lflow_ref);
+ ovn_lflow_add(
+ lflows, NULL, S_ROUTER_IN_LB_AFF_LEARN, 100,
+ ds_cstr(&aff_match_learn),
+ ds_cstr(&aff_action_learn),
+ lflow_ref,
+ WITH_HINT(&lb->nlb->header_),
+ WITH_DP_GROUP(dp_bitmap, ods_size(lr_datapaths)));
/* Use already selected backend within affinity timeslot. */
- ovn_lflow_add_with_dp_group(
- lflows, dp_bitmap, ods_size(lr_datapaths), S_ROUTER_IN_DNAT, 150,
- ds_cstr(&aff_match), ds_cstr(&aff_action), &lb->nlb->header_,
- lflow_ref);
+ ovn_lflow_add(
+ lflows, NULL, S_ROUTER_IN_DNAT, 150,
+ ds_cstr(&aff_match), ds_cstr(&aff_action), lflow_ref,
+ WITH_HINT(&lb->nlb->header_),
+ WITH_DP_GROUP(dp_bitmap, ods_size(lr_datapaths)));
ds_truncate(&aff_action, aff_action_len);
ds_truncate(&aff_action_learn, aff_action_learn_len);
@@ -8364,10 +8370,12 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows,
static char *aff_check = REGBIT_KNOWN_LB_SESSION" = chk_lb_aff(); next;";
- ovn_lflow_add_with_dp_group(
- lflows, lb_dps->nb_ls_map.map, ods_size(ls_datapaths),
+ ovn_lflow_add(
+ lflows, NULL,
S_SWITCH_IN_LB_AFF_CHECK, 100, ds_cstr(&new_lb_match), aff_check,
- &lb_dps->lb->nlb->header_, lflow_ref);
+ lflow_ref,
+ WITH_HINT(&lb_dps->lb->nlb->header_),
+ WITH_DP_GROUP(lb_dps->nb_ls_map.map, ods_size(ls_datapaths)));
ds_destroy(&new_lb_match);
struct ds aff_action = DS_EMPTY_INITIALIZER;
@@ -8446,17 +8454,20 @@ build_lb_affinity_ls_flows(struct lflow_table *lflows,
lb->affinity_timeout);
/* Forward to OFTABLE_CHK_LB_AFFINITY table to store flow tuple. */
- ovn_lflow_add_with_dp_group(
- lflows, lb_dps->nb_ls_map.map, ods_size(ls_datapaths),
+ ovn_lflow_add(
+ lflows, NULL,
S_SWITCH_IN_LB_AFF_LEARN, 100, ds_cstr(&aff_match_learn),
- ds_cstr(&aff_action_learn), &lb->nlb->header_,
- lflow_ref);
+ ds_cstr(&aff_action_learn), lflow_ref,
+ WITH_HINT(&lb->nlb->header_),
+ WITH_DP_GROUP(lb_dps->nb_ls_map.map, ods_size(ls_datapaths)));
/* Use already selected backend within affinity timeslot. */
- ovn_lflow_add_with_dp_group(
- lflows, lb_dps->nb_ls_map.map, ods_size(ls_datapaths),
+ ovn_lflow_add(
+ lflows, NULL,
S_SWITCH_IN_LB, 150, ds_cstr(&aff_match), ds_cstr(&aff_action),
- &lb->nlb->header_, lflow_ref);
+ lflow_ref,
+ WITH_HINT(&lb->nlb->header_),
+ WITH_DP_GROUP(lb_dps->nb_ls_map.map, ods_size(ls_datapaths)));
ds_truncate(&aff_action, aff_action_len);
ds_truncate(&aff_action_learn, aff_action_learn_len);
@@ -8582,11 +8593,14 @@ build_lb_rules(struct lflow_table *lflows, struct ovn_lb_datapaths *lb_dps,
}
}
if (!reject || build_non_meter) {
- ovn_lflow_add_with_dp_group(
- lflows, dp_non_meter ? dp_non_meter : lb_dps->nb_ls_map.map,
- ods_size(ls_datapaths), S_SWITCH_IN_LB, priority,
- ds_cstr(match), ds_cstr(action), &lb->nlb->header_,
- lb_dps->lflow_ref);
+ ovn_lflow_add(
+ lflows, NULL, S_SWITCH_IN_LB, priority,
+ ds_cstr(match), ds_cstr(action), lb_dps->lflow_ref,
+ WITH_HINT(&lb->nlb->header_),
+ WITH_DP_GROUP(dp_non_meter ?
+ dp_non_meter :
+ lb_dps->nb_ls_map.map,
+ ods_size(ls_datapaths)));
}
bitmap_free(dp_non_meter);
}
@@ -12798,10 +12812,13 @@ build_gw_lrouter_nat_flows_for_lb(struct lrouter_nat_lb_flows_ctx *ctx,
}
}
if (!ctx->reject || build_non_meter) {
- ovn_lflow_add_with_dp_group(ctx->lflows,
- dp_non_meter ? dp_non_meter : dp_bitmap, ods_size(lr_datapaths),
- S_ROUTER_IN_DNAT, ctx->prio, ds_cstr(ctx->new_match),
- ctx->new_action[type], &ctx->lb->nlb->header_, lflow_ref);
+ ovn_lflow_add(ctx->lflows, NULL,
+ S_ROUTER_IN_DNAT, ctx->prio, ds_cstr(ctx->new_match),
+ ctx->new_action[type], lflow_ref,
+ WITH_HINT(&ctx->lb->nlb->header_),
+ WITH_DP_GROUP(dp_non_meter ?
+ dp_non_meter :
+ dp_bitmap, ods_size(lr_datapaths)));
}
bitmap_free(dp_non_meter);
}
@@ -13078,10 +13095,11 @@ build_lrouter_defrag_flows_for_lb(struct ovn_lb_datapaths *lb_dps,
ds_put_format(match, "ip && ip%c.dst == %s", ipv6 ? '6' : '4',
lb_vip->vip_str);
- ovn_lflow_add_with_dp_group(
- lflows, lb_dps->nb_lr_map.map, ods_size(lr_datapaths),
- S_ROUTER_IN_DEFRAG, prio, ds_cstr(match), "ct_dnat;",
- &lb_dps->lb->nlb->header_, lb_dps->lflow_ref);
+ ovn_lflow_add(
+ lflows, NULL, S_ROUTER_IN_DEFRAG, prio, ds_cstr(match),
+ "ct_dnat;", lb_dps->lflow_ref,
+ WITH_HINT(&lb_dps->lb->nlb->header_),
+ WITH_DP_GROUP(lb_dps->nb_lr_map.map, ods_size(lr_datapaths)));
}
}
This adds a new WITH_DP_GROUP() macro that can be used as an argument to ovn_lflow_add(). This commit converts all uses of ovn_lflow_add_with_dp_group() to ovn_lflow_add(). Signed-off-by: Mark Michelson <mmichels@redhat.com> --- northd/lflow-mgr.h | 11 ++---- northd/northd.c | 96 +++++++++++++++++++++++++++------------------- 2 files changed, 60 insertions(+), 47 deletions(-)