@@ -813,7 +813,8 @@ nbctl_show(struct ctl_context *ctx)
if (ctx->argc == 2) {
char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], false, &ls);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (ls) {
print_ls(ls, &ctx->output);
@@ -828,7 +829,8 @@ nbctl_show(struct ctl_context *ctx)
if (ctx->argc == 2) {
char *error = lr_by_name_or_uuid(ctx, ctx->argv[1], false, &lr);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (lr) {
print_lr(lr, &ctx->output);
@@ -1126,7 +1128,8 @@ nbctl_lsp_del(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, ctx->argv[1], must_exist, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (!lsp) {
return;
@@ -1158,7 +1161,8 @@ nbctl_lsp_list(struct ctl_context *ctx)
char *error = ls_by_name_or_uuid(ctx, id, true, &ls);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
smap_init(&lsps);
@@ -1183,7 +1187,8 @@ nbctl_lsp_get_parent(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, ctx->argv[1], true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (lsp->parent_name) {
ds_put_format(&ctx->output, "%s\n", lsp->parent_name);
@@ -1197,7 +1202,8 @@ nbctl_lsp_get_tag(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, ctx->argv[1], true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (lsp->n_tag > 0) {
ds_put_format(&ctx->output, "%"PRId64"\n", lsp->tag[0]);
@@ -1212,7 +1218,8 @@ nbctl_lsp_set_addresses(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
int i;
@@ -1245,7 +1252,8 @@ nbctl_lsp_get_addresses(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
svec_init(&addresses);
@@ -1267,7 +1275,8 @@ nbctl_lsp_set_port_security(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
nbrec_logical_switch_port_set_port_security(lsp,
(const char **) ctx->argv + 2, ctx->argc - 2);
@@ -1284,7 +1293,8 @@ nbctl_lsp_get_port_security(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
svec_init(&addrs);
for (i = 0; i < lsp->n_port_security; i++) {
@@ -1305,7 +1315,8 @@ nbctl_lsp_get_up(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
ds_put_format(&ctx->output,
"%s\n", (lsp->up && *lsp->up) ? "up" : "down");
@@ -1336,12 +1347,14 @@ nbctl_lsp_set_enabled(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
bool enabled;
error = parse_enabled(state, &enabled);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
nbrec_logical_switch_port_set_enabled(lsp, &enabled, 1);
}
@@ -1354,7 +1367,8 @@ nbctl_lsp_get_enabled(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
ds_put_format(&ctx->output, "%s\n",
!lsp->enabled || *lsp->enabled ? "enabled" : "disabled");
@@ -1389,7 +1403,8 @@ nbctl_lsp_get_type(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
ds_put_format(&ctx->output, "%s\n", lsp->type);
}
@@ -1404,7 +1419,8 @@ nbctl_lsp_set_options(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
for (i = 2; i < ctx->argc; i++) {
char *key, *value;
@@ -1430,7 +1446,8 @@ nbctl_lsp_get_options(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
SMAP_FOR_EACH(node, &lsp->options) {
ds_put_format(&ctx->output, "%s=%s\n", node->key, node->value);
@@ -1445,13 +1462,15 @@ nbctl_lsp_set_dhcpv4_options(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
const struct nbrec_dhcp_options *dhcp_opt = NULL;
if (ctx->argc == 3 ) {
error = dhcp_options_get(ctx, ctx->argv[2], true, &dhcp_opt);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
}
@@ -1475,13 +1494,15 @@ nbctl_lsp_set_dhcpv6_options(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
const struct nbrec_dhcp_options *dhcp_opt = NULL;
if (ctx->argc == 3) {
error = dhcp_options_get(ctx, ctx->argv[2], true, &dhcp_opt);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
}
@@ -1505,7 +1526,8 @@ nbctl_lsp_get_dhcpv4_options(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (lsp->dhcpv4_options) {
ds_put_format(&ctx->output, UUID_FMT " (%s)\n",
@@ -1522,7 +1544,8 @@ nbctl_lsp_get_dhcpv6_options(struct ctl_context *ctx)
char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (lsp->dhcpv6_options) {
ds_put_format(&ctx->output, UUID_FMT " (%s)\n",
@@ -1623,7 +1646,8 @@ nbctl_acl_list(struct ctl_context *ctx)
char *error = acl_cmd_get_pg_or_ls(ctx, &ls, &pg);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
size_t n_acls = pg ? pg->n_acls : ls->n_acls;
@@ -1802,7 +1826,8 @@ nbctl_acl_del(struct ctl_context *ctx)
char *error = acl_cmd_get_pg_or_ls(ctx, &ls, &pg);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (ctx->argc == 2) {
@@ -1821,7 +1846,8 @@ nbctl_acl_del(struct ctl_context *ctx)
const char *direction;
error = parse_direction(ctx->argv[2], &direction);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
size_t n_acls = pg ? pg->n_acls : ls->n_acls;
@@ -1852,7 +1878,8 @@ nbctl_acl_del(struct ctl_context *ctx)
int64_t priority;
error = parse_priority(ctx->argv[3], &priority);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (ctx->argc == 4) {
@@ -1892,7 +1919,8 @@ nbctl_qos_list(struct ctl_context *ctx)
char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, &ls);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
qos_rules = xmalloc(sizeof *qos_rules * ls->n_qos_rules);
@@ -2046,7 +2074,8 @@ nbctl_qos_del(struct ctl_context *ctx)
const struct nbrec_logical_switch *ls;
char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, &ls);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (ctx->argc == 2) {
@@ -2086,7 +2115,8 @@ nbctl_qos_del(struct ctl_context *ctx)
int64_t priority;
error = parse_priority(ctx->argv[3], &priority);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (ctx->argc == 4) {
@@ -2433,7 +2463,8 @@ nbctl_lr_lb_del(struct ctl_context *ctx)
const struct nbrec_load_balancer *del_lb;
char *error = lr_by_name_or_uuid(ctx, ctx->argv[1], true, &lr);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (ctx->argc == 2) {
@@ -2446,7 +2477,8 @@ nbctl_lr_lb_del(struct ctl_context *ctx)
error = lb_by_name_or_uuid(ctx, ctx->argv[2], true, &del_lb);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
for (size_t i = 0; i < lr->n_load_balancer; i++) {
const struct nbrec_load_balancer *lb
@@ -2484,7 +2516,8 @@ nbctl_lr_lb_list(struct ctl_context *ctx)
char *error = lr_by_name_or_uuid(ctx, lr_name, true, &lr);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
for (int i = 0; i < lr->n_load_balancer; i++) {
const struct nbrec_load_balancer *lb
@@ -2554,7 +2587,8 @@ nbctl_ls_lb_del(struct ctl_context *ctx)
const struct nbrec_load_balancer *del_lb;
char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, &ls);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (ctx->argc == 2) {
@@ -2567,7 +2601,8 @@ nbctl_ls_lb_del(struct ctl_context *ctx)
error = lb_by_name_or_uuid(ctx, ctx->argv[2], true, &del_lb);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
for (size_t i = 0; i < ls->n_load_balancer; i++) {
const struct nbrec_load_balancer *lb
@@ -2605,7 +2640,8 @@ nbctl_ls_lb_list(struct ctl_context *ctx)
char *error = ls_by_name_or_uuid(ctx, ls_name, true, &ls);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
for (int i = 0; i < ls->n_load_balancer; i++) {
const struct nbrec_load_balancer *lb
@@ -2762,7 +2798,8 @@ nbctl_dhcp_options_set_options(struct ctl_context *ctx)
const struct nbrec_dhcp_options *dhcp_opts;
char *error = dhcp_options_get(ctx, ctx->argv[1], true, &dhcp_opts);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
struct smap dhcp_options = SMAP_INITIALIZER(&dhcp_options);
@@ -2786,7 +2823,8 @@ nbctl_dhcp_options_get_options(struct ctl_context *ctx)
const struct nbrec_dhcp_options *dhcp_opts;
char *error = dhcp_options_get(ctx, ctx->argv[1], true, &dhcp_opts);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
struct smap_node *node;
@@ -2804,7 +2842,8 @@ nbctl_dhcp_options_del(struct ctl_context *ctx)
char *error = dhcp_options_get(ctx, id, must_exist, &dhcp_opts);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (!dhcp_opts) {
return;
@@ -3265,7 +3304,8 @@ nbctl_lr_nat_list(struct ctl_context *ctx)
const struct nbrec_logical_router *lr;
char *error = lr_by_name_or_uuid(ctx, ctx->argv[1], true, &lr);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
struct smap lr_nats = SMAP_INITIALIZER(&lr_nats);
@@ -3422,7 +3462,8 @@ nbctl_lrp_set_gateway_chassis(struct ctl_context *ctx)
const struct nbrec_gateway_chassis *existing_gc;
error = gc_by_name_or_uuid(ctx, gc_name, false, &existing_gc);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (existing_gc) {
nbrec_gateway_chassis_set_priority(existing_gc, priority);
@@ -3714,7 +3755,8 @@ nbctl_lrp_del(struct ctl_context *ctx)
char *error = lrp_by_name_or_uuid(ctx, ctx->argv[1], must_exist, &lrp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (!lrp) {
return;
@@ -3747,7 +3789,8 @@ nbctl_lrp_list(struct ctl_context *ctx)
char *error = lr_by_name_or_uuid(ctx, id, true, &lr);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
smap_init(&lrps);
@@ -3800,7 +3843,8 @@ nbctl_lrp_get_enabled(struct ctl_context *ctx)
char *error = lrp_by_name_or_uuid(ctx, id, true, &lrp);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
if (!lrp) {
return;
@@ -3883,7 +3927,8 @@ nbctl_lr_route_list(struct ctl_context *ctx)
char *error = lr_by_name_or_uuid(ctx, ctx->argv[1], true, &lr);
if (error) {
- ctl_fatal("%s", error);
+ ctx->error = error;
+ return;
}
ipv4_routes = xmalloc(sizeof *ipv4_routes * lr->n_static_routes);
Instead of dying let the main loop handle the error. This will allow us to report errors when running in daemon mode. This is a result of applying the following semantic patch: @@ identifier F; identifier C; identifier E; @@ static void F(struct ctl_context *C) { <... if (E) { - ctl_fatal("%s", E); + C->error = E; + return; } ...> } Signed-off-by: Jakub Sitnicki <jkbs@redhat.com> --- ovn/utilities/ovn-nbctl.c | 135 ++++++++++++++++++++++++++++++---------------- 1 file changed, 90 insertions(+), 45 deletions(-)