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 <[email protected]> --- northd/lflow-mgr.c | 8 ++++ northd/lflow-mgr.h | 11 ++---- northd/northd.c | 96 +++++++++++++++++++++++++++------------------- 3 files changed, 68 insertions(+), 47 deletions(-) diff --git a/northd/lflow-mgr.c b/northd/lflow-mgr.c index bdd290814..7f7288416 100644 --- a/northd/lflow-mgr.c +++ b/northd/lflow-mgr.c @@ -776,6 +776,14 @@ lflow_table_add_lflow(struct lflow_table *lflow_table, void lflow_table_add_lflow__(struct lflow_table_add_args *args) { + /* It is invalid for both args.dp_bitmap and args.od to be + * Non-NULL. We favor the non-NULL args.dp_bitmap over the + * non-NULL args.od + */ + if (args->dp_bitmap) { + args->od = NULL; + } + lflow_table_add_lflow(args->table, args->od, args->dp_bitmap, args->dp_bitmap_len, args->stage, args->priority, args->match, args->actions, args->io_port, diff --git a/northd/lflow-mgr.h b/northd/lflow-mgr.h index 8eb69c958..bacfd25b6 100644 --- a/northd/lflow-mgr.h +++ b/northd/lflow-mgr.h @@ -107,6 +107,9 @@ void lflow_table_add_lflow(struct lflow_table *, const struct ovn_datapath *, #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 @@ -120,14 +123,6 @@ void lflow_table_add_lflow(struct lflow_table *, const struct ovn_datapath *, #define WITH_IO_PORT(IO_PORT) .io_port = IO_PORT #define WITH_CTRL_METER(CTRL_METER) .ctrl_meter = CTRL_METER -/* 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, ...) \ ovn_lflow_add(LFLOW_TABLE, OD, STAGE, 0, "1", debug_drop_action(), \ diff --git a/northd/northd.c b/northd/northd.c index e45d00e1f..17da62d97 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -8092,10 +8092,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; @@ -8201,10 +8202,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 = \""); @@ -8282,17 +8285,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); @@ -8372,10 +8378,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; @@ -8454,17 +8462,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); @@ -8590,11 +8601,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); } @@ -12806,10 +12820,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); } @@ -13086,10 +13103,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))); } } -- 2.51.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
