1 /* 2 * cmdl.h Framework for handling command line options. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 * 9 * Authors: Richard Alpe <richard.alpe (at) ericsson.com> 10 */ 11 12 #ifndef _TIPC_CMDL_H 13 #define _TIPC_CMDL_H 14 15 #include <libmnl/libmnl.h> 16 17 extern int help_flag; 18 19 enum { 20 OPT_KEY = (1 << 0), 21 OPT_KEYVAL = (1 << 1), 22 }; 23 24 struct cmdl { 25 int optind; 26 int argc; 27 char **argv; 28 }; 29 30 struct tipc_sup_media { 31 char *media; 32 char *identifier; 33 void (*help)(struct cmdl *cmdl, char *media); 34 }; 35 36 struct cmd { 37 const char *cmd; 38 int (*func)(struct nlmsghdr *nlh, const struct cmd *cmd, 39 struct cmdl *cmdl, void *data); 40 void (*help)(struct cmdl *cmdl); 41 }; 42 43 struct opt { 44 const char *key; 45 uint16_t flag; 46 char *val; 47 }; 48 49 struct opt *get_opt(struct opt *opts, char *key); 50 bool has_opt(struct opt *opts, char *key); 51 int parse_opts(struct opt *opts, struct cmdl *cmdl); 52 char *shift_cmdl(struct cmdl *cmdl); 53 54 int run_cmd(struct nlmsghdr *nlh, const struct cmd *caller, 55 const struct cmd *cmds, struct cmdl *cmdl, void *data); 56 57 const struct cmd *find_cmd(const struct cmd *cmds, char *str); 58 59 #endif 60