/* 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 #include #include #include #include #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 */