| /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ |
| /* Copyright (C) 2017-2018 Netronome Systems, Inc. */ |
| /* Copyright Meta Platforms, Inc. and affiliates */ |
| |
| #ifndef __YNLTOOL_H |
| #define __YNLTOOL_H |
| |
| #ifndef _GNU_SOURCE |
| #define _GNU_SOURCE |
| #endif |
| #include <stdbool.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <errno.h> |
| #include <string.h> |
| |
| #include "json_writer.h" |
| |
| #define NEXT_ARG() ({ argc--; argv++; if (argc < 0) usage(); }) |
| #define NEXT_ARGP() ({ (*argc)--; (*argv)++; if (*argc < 0) usage(); }) |
| #define BAD_ARG() ({ p_err("what is '%s'?", *argv); -1; }) |
| #define GET_ARG() ({ argc--; *argv++; }) |
| #define REQ_ARGS(cnt) \ |
| ({ \ |
| int _cnt = (cnt); \ |
| bool _res; \ |
| \ |
| if (argc < _cnt) { \ |
| p_err("'%s' needs at least %d arguments, %d found", \ |
| argv[-1], _cnt, argc); \ |
| _res = false; \ |
| } else { \ |
| _res = true; \ |
| } \ |
| _res; \ |
| }) |
| |
| #define HELP_SPEC_OPTIONS \ |
| "OPTIONS := { {-j|--json} [{-p|--pretty}] }" |
| |
| extern const char *bin_name; |
| |
| extern json_writer_t *json_wtr; |
| extern bool json_output; |
| extern bool pretty_output; |
| |
| void __attribute__((format(printf, 1, 2))) p_err(const char *fmt, ...); |
| void __attribute__((format(printf, 1, 2))) p_info(const char *fmt, ...); |
| |
| bool is_prefix(const char *pfx, const char *str); |
| int detect_common_prefix(const char *arg, ...); |
| void usage(void) __attribute__((noreturn)); |
| |
| struct cmd { |
| const char *cmd; |
| int (*func)(int argc, char **argv); |
| }; |
| |
| int cmd_select(const struct cmd *cmds, int argc, char **argv, |
| int (*help)(int argc, char **argv)); |
| |
| /* subcommands */ |
| int do_page_pool(int argc, char **argv); |
| int do_qstats(int argc, char **argv); |
| |
| #endif /* __YNLTOOL_H */ |