fprintf(stderr, "-d Enable more debugging information.\n");
fprintf(stderr, "-u socket Specify the Unix-domain socket used for communication with lldpd(8).\n");
- fprintf(stderr, "-f format Choose output format (plain, keyvalue, json or xml).\n");
+ fprintf(stderr, "-f format Choose output format (plain, keyvalue, json, json0"
+#if defined USE_XML
+ ", xml"
+#endif
+ ").\n");
if (!is_lldpctl(NULL))
fprintf(stderr, "-c conf Read the provided configuration file.\n");
lldpctl_atom_dec_ref(config);
return 0;
}
- log_info("lldpctl", "immediate retransmission requested successfuly");
+ log_info("lldpctl", "immediate retransmission requested successfully");
lldpctl_atom_dec_ref(config);
return 1;
}
fflush(stderr);
if (fgets(line, sizeof(line) - 2, stdin) == NULL)
return NULL;
- return line;
+ return strdup(line);
}
#endif
if (strcmp(fmt, "plain") == 0) w = txt_init(stdout);
else if (strcmp(fmt, "keyvalue") == 0) w = kv_init(stdout);
+ else if (strcmp(fmt, "json") == 0) w = json_init(stdout, 1);
+ else if (strcmp(fmt, "json0") == 0) w = json_init(stdout, 0);
#ifdef USE_XML
else if (strcmp(fmt, "xml") == 0) w = xml_init(stdout);
#endif
-#ifdef USE_JANSSON
- else if (strcmp(fmt, "json") == 0) w = jansson_init(stdout);
-#endif
-#ifdef USE_JSONC
- else if (strcmp(fmt, "json") == 0) w = jsonc_init(stdout);
-#endif
- else w = txt_init(stdout);
+ else {
+ log_warnx("lldpctl", "unknown output format \"%s\"", fmt);
+ w = txt_init(stdout);
+ }
/* Execute command */
int rc = commands_execute(conn, w,
* @param acceptdir 1 if we accept a directory, 0 otherwise
*/
static void
-input_append(const char *arg, struct inputs *inputs, int acceptdir)
+input_append(const char *arg, struct inputs *inputs, int acceptdir, int warn)
{
struct stat statbuf;
if (stat(arg, &statbuf) == -1) {
- log_info("lldpctl", "cannot find configuration file/directory %s",
- arg);
+ if (warn) {
+ log_warn("lldpctl", "cannot find configuration file/directory %s",
+ arg);
+ } else {
+ log_debug("lldpctl", "cannot find configuration file/directory %s",
+ arg);
+ }
return;
}
for (int i=0; i < n; i++) {
char *fullname;
if (asprintf(&fullname, "%s/%s", arg, namelist[i]->d_name) != -1) {
- input_append(fullname, inputs, 0);
+ input_append(fullname, inputs, 0, 1);
free(fullname);
}
free(namelist[i]);
int
main(int argc, char *argv[])
{
- int ch, debug = 1, rc = EXIT_FAILURE;
+ int ch, debug = 0, use_syslog = 0, rc = EXIT_FAILURE;
const char *fmt = "plain";
lldpctl_conn_t *conn = NULL;
- const char *options = is_lldpctl(argv[0])?"hdvf:":"hdsvf:c:u:";
+ const char *options = is_lldpctl(argv[0])?"hdvf:u:":"hdsvf:c:C:u:";
- int gotinputs = 0;
+ int gotinputs = 0, version = 0;
struct inputs inputs;
TAILQ_INIT(&inputs);
signal(SIGHUP, SIG_IGN);
- /* Initialize logging */
- while ((ch = getopt(argc, argv, options)) != -1) {
- switch (ch) {
- case 'd': debug++; break;
- case 's': debug--; break;
- }
- }
- log_init(debug, __progname);
-
/* Get and parse command line options */
optind = 1;
while ((ch = getopt(argc, argv, options)) != -1) {
switch (ch) {
- case 'd': break;
- case 's': break;
+ case 'd':
+ if (use_syslog)
+ use_syslog = 0;
+ else
+ debug++;
+ break;
+ case 's':
+ if (debug == 0)
+ use_syslog = 1;
+ else
+ debug--;
+ break;
case 'h':
usage();
break;
ctlname = optarg;
break;
case 'v':
- fprintf(stdout, "%s\n", PACKAGE_VERSION);
- exit(0);
+ version++;
break;
case 'f':
fmt = optarg;
break;
+ case 'C':
case 'c':
- gotinputs = 1;
- input_append(optarg, &inputs, 1);
+ if (!gotinputs) {
+ log_init(use_syslog, debug, __progname);
+ lldpctl_log_level(debug + 1);
+ gotinputs = 1;
+ }
+ input_append(optarg, &inputs, 1, ch == 'c');
break;
default:
usage();
}
}
+ if (version) {
+ version_display(stdout, "lldpcli", version > 1);
+ exit(0);
+ }
+
+ if (!gotinputs) {
+ log_init(use_syslog, debug, __progname);
+ lldpctl_log_level(debug + 1);
+ }
+
/* Disable SIGPIPE */
signal(SIGPIPE, SIG_IGN);
log_debug("lldpctl", "process: %s", first->name);
FILE *file = fopen(first->name, "r");
if (file) {
- size_t len;
+ size_t n;
+ ssize_t len;
char *line;
- while ((line = fgetln(file, &len))) {
- line = strndup(line, len);
+ while (line = NULL, len = 0, (len = getline(&line, &n, file)) > 0) {
if (line[len - 1] == '\n') {
line[len - 1] = '\0';
parse_and_exec(conn, fmt, line);
}
free(line);
}
+ free(line);
fclose(file);
} else {
log_warn("lldpctl", "unable to open %s",
int cargc;
cargv = &((const char **)argv)[optind];
cargc = argc - optind;
- if (cmd_exec(conn, fmt, cargc, cargv) != -1)
+ if (cmd_exec(conn, fmt, cargc, cargv) == 1)
rc = EXIT_SUCCESS;
goto end;
}
rl_bind_key('?', cmd_help);
rl_bind_key('\t', cmd_complete);
#endif
- const char *line;
+ char *line = NULL;
do {
if ((line = readline(prompt()))) {
int n = parse_and_exec(conn, fmt, line);
- (void)n;
+ if (n != 0) {
#ifdef HAVE_READLINE_HISTORY
- if (n != 0) add_history(line);
+ add_history(line);
#endif
+ }
+ free(line);
}
} while (!must_exit && line != NULL);
rc = EXIT_SUCCESS;