On Wed, Aug 1, 2018 at 9:53 PM, Darrell Ball <db...@vmware.com> wrote:

> Thanks for the patch Yi-hung
>
> This patch does not seem to fit with this series somehow; it seems more
> related
> to flushing conntrack by zone and tuple ?
>

My apologies; after I reached the details of patch 10, I see why you wanted
to add
patch 9 as part of the series.



>
> I had a generic change in my queue. I think it is more straightforward,
> since it
> keeps opt_dpif_open() simple and improves the error handling and also
> simplifies
> dpctl_flush_conntrack() and any potential similar functions.
>
> https://patchwork.ozlabs.org/patch/952580/
>
>
>
>
> On 8/1/18, 5:45 PM, "ovs-dev-boun...@openvswitch.org on behalf of Yi-Hung
> Wei" <ovs-dev-boun...@openvswitch.org on behalf of yihung....@gmail.com>
> wrote:
>
>     Make opt_dpif_open() to support mulitple optional arguments.  It will
>     be useful for the following patches.
>
>     Signed-off-by: Yi-Hung Wei <yihung....@gmail.com>
>     ---
>      lib/dpctl.c | 85 ++++++++++++++++++++++++++++++
> ++-----------------------------
>      1 file changed, 44 insertions(+), 41 deletions(-)
>
>     diff --git a/lib/dpctl.c b/lib/dpctl.c
>     index 4f1e443f2662..35733774b331 100644
>     --- a/lib/dpctl.c
>     +++ b/lib/dpctl.c
>     @@ -191,14 +191,40 @@ parsed_dpif_open(const char *arg_, bool create,
> struct dpif **dpifp)
>       *
>       * The datapath name is not a mandatory parameter for this command.
> If
>       * it is not specified -- so 'argc' < 'max_args' -- we retrieve it
> from
>     - * the current setup, assuming only one exists.  On success stores the
>     - * opened dpif in '*dpifp'. */
>     + * the current setup, assuming only one exists.
>     + * For commands with multiple optional arguments, we try to use the
> first
>     + * argument as the dpif name. If it is failed, then we fallback to
>     + * retrieve it form the current setup.
>     + * On success stores the opened dpif in '*dpifp', and the next
> arugment
>     + * to be parsed in '*indexp'.  */
>      static int
>      opt_dpif_open(int argc, const char *argv[], struct dpctl_params
> *dpctl_p,
>     -              uint8_t max_args, struct dpif **dpifp)
>     +              uint8_t max_args, struct dpif **dpifp, bool multi_opt,
>     +              int *indexp)
>      {
>     +    char *dpname;
>          int error = 0;
>     -    char *dpname = argc >= max_args ? xstrdup(argv[1]) :
> get_one_dp(dpctl_p);
>     +
>     +    if (indexp) {
>     +        *indexp = 1;
>     +    }
>     +
>     +    if (multi_opt && argc > 1) {
>     +        error = parsed_dpif_open(argv[1], false, dpifp);
>     +        if (!error) {
>     +            if (indexp) {
>     +                *indexp = 2;
>     +            }
>     +            return 0;
>     +        } else if (argc == max_args) {
>     +            dpctl_error(dpctl_p, error, "invalid datapath");
>     +            return error;
>     +        }
>     +        dpname = get_one_dp(dpctl_p);
>     +    } else {
>     +        dpname = argc >= max_args ? xstrdup(argv[1]) :
> get_one_dp(dpctl_p);
>     +    }
>     +
>          if (!dpname) {
>              error = EINVAL;
>              dpctl_error(dpctl_p, error, "datapath not found");
>     @@ -863,7 +889,7 @@ dpctl_dump_flows(int argc, const char *argv[],
> struct dpctl_params *dpctl_p)
>              }
>          }
>
>     -    error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif);
>     +    error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif, false, NULL);
>          if (error) {
>              goto out_free;
>          }
>     @@ -990,7 +1016,7 @@ dpctl_put_flow(int argc, const char *argv[], enum
> dpif_flow_put_flags flags,
>          struct simap port_names;
>          int n, error;
>
>     -    error = opt_dpif_open(argc, argv, dpctl_p, 4, &dpif);
>     +    error = opt_dpif_open(argc, argv, dpctl_p, 4, &dpif, false, NULL);
>          if (error) {
>              return error;
>          }
>     @@ -1092,7 +1118,7 @@ dpctl_get_flow(int argc, const char *argv[],
> struct dpctl_params *dpctl_p)
>          struct ds ds;
>          int n, error;
>
>     -    error = opt_dpif_open(argc, argv, dpctl_p, 3, &dpif);
>     +    error = opt_dpif_open(argc, argv, dpctl_p, 3, &dpif, false, NULL);
>          if (error) {
>              return error;
>          }
>     @@ -1141,7 +1167,7 @@ dpctl_del_flow(int argc, const char *argv[],
> struct dpctl_params *dpctl_p)
>          struct simap port_names;
>          int n, error;
>
>     -    error = opt_dpif_open(argc, argv, dpctl_p, 3, &dpif);
>     +    error = opt_dpif_open(argc, argv, dpctl_p, 3, &dpif, false, NULL);
>          if (error) {
>              return error;
>          }
>     @@ -1210,7 +1236,7 @@ dpctl_del_flows(int argc, const char *argv[],
> struct dpctl_params *dpctl_p)
>      {
>          struct dpif *dpif;
>
>     -    int error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif);
>     +    int error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif, false,
> NULL);
>          if (error) {
>              return error;
>          }
>     @@ -1271,7 +1297,7 @@ dpctl_dump_conntrack(int argc, const char
> *argv[],
>              argc--;
>          }
>
>     -    error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif);
>     +    error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif, false, NULL);
>          if (error) {
>              return error;
>          }
>     @@ -1313,34 +1339,11 @@ dpctl_flush_conntrack(int argc, const char
> *argv[],
>          struct ct_dpif_tuple tuple, *ptuple = NULL;
>          struct ds ds = DS_EMPTY_INITIALIZER;
>          uint16_t zone, *pzone = NULL;
>     -    char *name;
>          int error, i = 1;
>     -    bool got_dpif = false;
>
>     -    /* Parse datapath name. It is not a mandatory parameter for this
> command.
>     -     * If it is not specified, we retrieve it from the current setup,
>     -     * assuming only one exists. */
>     -    if (argc >= 2) {
>     -        error = parsed_dpif_open(argv[i], false, &dpif);
>     -        if (!error) {
>     -            got_dpif = true;
>     -            i++;
>     -        } else if (argc == 4) {
>     -            dpctl_error(dpctl_p, error, "invalid datapath");
>     -            return error;
>     -        }
>     -    }
>     -    if (!got_dpif) {
>     -        name = get_one_dp(dpctl_p);
>     -        if (!name) {
>     -            return EINVAL;
>     -        }
>     -        error = parsed_dpif_open(name, false, &dpif);
>     -        free(name);
>     -        if (error) {
>     -            dpctl_error(dpctl_p, error, "opening datapath");
>     -            return error;
>     -        }
>     +    error = opt_dpif_open(argc, argv, dpctl_p, 4, &dpif, true, &i);
>     +    if (error) {
>     +        return error;
>          }
>
>          /* Parse zone */
>     @@ -1412,7 +1415,7 @@ dpctl_ct_stats_show(int argc, const char *argv[],
>              }
>          }
>
>     -    error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif);
>     +    error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif, false, NULL);
>          if (error) {
>              return error;
>          }
>     @@ -1537,7 +1540,7 @@ dpctl_ct_bkts(int argc, const char *argv[],
>              }
>          }
>
>     -    error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif);
>     +    error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif, false, NULL);
>          if (error) {
>              return error;
>          }
>     @@ -1617,7 +1620,7 @@ dpctl_ct_set_maxconns(int argc, const char
> *argv[],
>                            struct dpctl_params *dpctl_p)
>      {
>          struct dpif *dpif;
>     -    int error = opt_dpif_open(argc, argv, dpctl_p, 3, &dpif);
>     +    int error = opt_dpif_open(argc, argv, dpctl_p, 3, &dpif, false,
> NULL);
>          if (!error) {
>              uint32_t maxconns;
>              if (ovs_scan(argv[argc - 1], "%"SCNu32, &maxconns)) {
>     @@ -1643,7 +1646,7 @@ dpctl_ct_get_maxconns(int argc, const char
> *argv[],
>                          struct dpctl_params *dpctl_p)
>      {
>          struct dpif *dpif;
>     -    int error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif);
>     +    int error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif, false,
> NULL);
>          if (!error) {
>              uint32_t maxconns;
>              error = ct_dpif_get_maxconns(dpif, &maxconns);
>     @@ -1664,7 +1667,7 @@ dpctl_ct_get_nconns(int argc, const char *argv[],
>                          struct dpctl_params *dpctl_p)
>      {
>          struct dpif *dpif;
>     -    int error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif);
>     +    int error = opt_dpif_open(argc, argv, dpctl_p, 2, &dpif, false,
> NULL);
>          if (!error) {
>              uint32_t nconns;
>              error = ct_dpif_get_nconns(dpif, &nconns);
>     --
>     2.7.4
>
>     _______________________________________________
>     dev mailing list
>     d...@openvswitch.org
>     https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.
> openvswitch.org%2Fmailman%2Flistinfo%2Fovs-dev&amp;data=
> 02%7C01%7Cdball%40vmware.com%7C842c99b58e864589120208d5f8113452%
> 7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C1%7C0%7C636687675158408873&amp;
> sdata=SwCWGPm9Eb3TI%2Fj3I9kNkYzQ5Rwy%2FbxXO3P1LZdX0As%3D&amp;reserved=0
>
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to