[ovs-dev] [PATCH 05/11] ovn-nbctl: Don't die in parse_priority().

Jakub Sitnicki jkbs at redhat.com
Tue Jul 17 13:34:09 UTC 2018


Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs at redhat.com>
---
 ovn/utilities/ovn-nbctl.c | 44 ++++++++++++++++++++++++++++++++++----------
 1 file changed, 34 insertions(+), 10 deletions(-)

diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c
index f89ddbc0a..1cee059f2 100644
--- a/ovn/utilities/ovn-nbctl.c
+++ b/ovn/utilities/ovn-nbctl.c
@@ -1684,16 +1684,17 @@ parse_direction(const char *arg)
     }
 }
 
-static int
-parse_priority(const char *arg)
+static char * OVS_WARN_UNUSED_RESULT
+parse_priority(const char *arg, int64_t *priority_p)
 {
     /* Validate priority. */
     int64_t priority;
     if (!ovs_scan(arg, "%"SCNd64, &priority)
         || priority < 0 || priority > 32767) {
-        ctl_fatal("%s: priority must in range 0...32767", arg);
+        return xasprintf("%s: priority must in range 0...32767", arg);
     }
-    return priority;
+    *priority_p = priority;
+    return NULL;
 }
 
 static void
@@ -1710,7 +1711,12 @@ nbctl_acl_add(struct ctl_context *ctx)
     }
 
     const char *direction = parse_direction(ctx->argv[2]);
-    int64_t priority = parse_priority(ctx->argv[3]);
+    int64_t priority;
+    error = parse_priority(ctx->argv[3], &priority);
+    if (error) {
+        ctx->error = error;
+        return;
+    }
 
     /* Validate action. */
     if (strcmp(action, "allow") && strcmp(action, "allow-related")
@@ -1825,7 +1831,11 @@ nbctl_acl_del(struct ctl_context *ctx)
         return;
     }
 
-    int64_t priority = parse_priority(ctx->argv[3]);
+    int64_t priority;
+    error = parse_priority(ctx->argv[3], &priority);
+    if (error) {
+        ctl_fatal("%s", error);
+    }
 
     if (ctx->argc == 4) {
         ctl_fatal("cannot specify priority without match");
@@ -1908,12 +1918,18 @@ nbctl_qos_add(struct ctl_context *ctx)
 {
     const struct nbrec_logical_switch *ls;
     const char *direction = parse_direction(ctx->argv[2]);
-    int64_t priority = parse_priority(ctx->argv[3]);
+    int64_t priority;
     int64_t dscp = -1;
     int64_t rate = 0;
     int64_t burst = 0;
+    char *error;
 
-    char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, &ls);
+    error = parse_priority(ctx->argv[3], &priority);
+    if (error) {
+        ctx->error = error;
+        return;
+    }
+    error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, &ls);
     if (error) {
         ctx->error = error;
         return;
@@ -2039,7 +2055,11 @@ nbctl_qos_del(struct ctl_context *ctx)
         return;
     }
 
-    int64_t priority = parse_priority(ctx->argv[3]);
+    int64_t priority;
+    error = parse_priority(ctx->argv[3], &priority);
+    if (error) {
+        ctl_fatal("%s", error);
+    }
 
     if (ctx->argc == 4) {
         ctl_fatal("cannot specify priority without match");
@@ -3352,7 +3372,11 @@ nbctl_lrp_set_gateway_chassis(struct ctl_context *ctx)
 
     const char *chassis_name = ctx->argv[2];
     if (ctx->argv[3]) {
-        priority = parse_priority(ctx->argv[3]);
+        error = parse_priority(ctx->argv[3], &priority);
+        if (error) {
+            ctx->error = error;
+            return;
+        }
     }
 
     gc_name = xasprintf("%s-%s", lrp_name, chassis_name);
-- 
2.14.4



More information about the dev mailing list