X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=sysdep%2Funix%2Fmain.c;h=921115b1a9cff12568e6ebe7a3bd0f7548fb27ff;hb=d7e8f00e7e35daff9bcf96aa455ebc6f932d0882;hp=1f47680e53351cf398118194cb653368a9e2db5d;hpb=b66a9e2f3376b4cb07ef4cc318f70a9c794f407a;p=thirdparty%2Fbird.git diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c index 1f47680e5..921115b1a 100644 --- a/sysdep/unix/main.c +++ b/sysdep/unix/main.c @@ -8,7 +8,9 @@ #undef LOCAL_DEBUG -#define _GNU_SOURCE 1 +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif #include #include @@ -25,6 +27,7 @@ #include "lib/resource.h" #include "lib/socket.h" #include "lib/event.h" +#include "lib/timer.h" #include "lib/string.h" #include "nest/route.h" #include "nest/protocol.h" @@ -41,12 +44,6 @@ * Debugging */ -#ifdef DEBUGGING -static int debug_flag = 1; -#else -static int debug_flag = 0; -#endif - void async_dump(void) { @@ -54,7 +51,7 @@ async_dump(void) rdump(&root_pool); sk_dump_all(); - tm_dump_all(); + // XXXX tm_dump_all(); if_dump_all(); neigh_dump_all(); rta_dump_all(); @@ -73,7 +70,7 @@ async_dump(void) #else static inline void -drop_uid(uid_t uid) +drop_uid(uid_t uid UNUSED) { die("Cannot change user on this platform"); } @@ -129,7 +126,7 @@ read_iproute_table(char *file, char *prefix, int max) if (*p == '#' || *p == '\n' || *p == 0) continue; - + if (sscanf(p, "0x%x %s\n", &val, name) != 2 && sscanf(p, "0x%x %s #", &val, name) != 2 && sscanf(p, "%d %s\n", &val, name) != 2 && @@ -182,7 +179,7 @@ sysdep_preconfig(struct config *c) int sysdep_commit(struct config *new, struct config *old UNUSED) { - log_switch(debug_flag, &new->logfiles, new->syslog_name); + log_switch(0, &new->logfiles, new->syslog_name); return 0; } @@ -210,7 +207,7 @@ read_config(void) if (!unix_read_config(&conf, config_name)) { if (conf->err_msg) - die("%s, line %d: %s", conf->err_file_name, conf->err_lino, conf->err_msg); + die("%s:%d:%d %s", conf->err_file_name, conf->err_lino, conf->err_chno, conf->err_msg); else die("Unable to open configuration file %s: %m", config_name); } @@ -227,7 +224,7 @@ async_config(void) if (!unix_read_config(&conf, config_name)) { if (conf->err_msg) - log(L_ERR "%s, line %d: %s", conf->err_file_name, conf->err_lino, conf->err_msg); + log(L_ERR "%s:%d:%d %s", conf->err_file_name, conf->err_lino, conf->err_chno, conf->err_msg); else log(L_ERR "Unable to open configuration file %s: %m", config_name); config_free(conf); @@ -248,7 +245,7 @@ cmd_read_config(char *name) if (!unix_read_config(&conf, name)) { if (conf->err_msg) - cli_msg(8002, "%s, line %d: %s", conf->err_file_name, conf->err_lino, conf->err_msg); + cli_msg(8002, "%s:%d:%d %s", conf->err_file_name, conf->err_lino, conf->err_chno, conf->err_msg); else cli_msg(8002, "%s: %m", name); config_free(conf); @@ -300,7 +297,7 @@ cmd_reconfig_undo_notify(void) } void -cmd_reconfig(char *name, int type, int timeout) +cmd_reconfig(char *name, int type, uint timeout) { if (cli_access_restricted()) return; @@ -419,7 +416,7 @@ cli_get_command(cli *c) } static int -cli_rx(sock *s, int size UNUSED) +cli_rx(sock *s, uint size UNUSED) { cli_kick(s->data); return 0; @@ -439,7 +436,7 @@ cli_err(sock *s, int err) } static int -cli_connect(sock *s, int size UNUSED) +cli_connect(sock *s, uint size UNUSED) { cli *c; @@ -519,7 +516,7 @@ write_pid_file(void) rv = ftruncate(pid_fd, 0); if (rv < 0) die("fruncate: %m"); - + rv = write(pid_fd, ps, pl); if(rv < 0) die("write: %m"); @@ -621,7 +618,7 @@ signal_init(void) * Parsing of command-line arguments */ -static char *opt_list = "c:dD:ps:P:u:g:flR"; +static char *opt_list = "bc:dD:ps:P:u:g:flRh"; static int parse_and_exit; char *bird_name; static char *use_user; @@ -629,10 +626,43 @@ static char *use_group; static int run_in_foreground = 0; static void -usage(void) +display_usage(void) +{ + fprintf(stderr, "Usage: %s [--version] [--help] [-c ] [OPTIONS]\n", bird_name); +} + +static void +display_help(void) +{ + display_usage(); + + fprintf(stderr, + "\n" + "Options: \n" + " -c Use given configuration file instead of\n" + " " PATH_CONFIG_FILE "\n" + " -d Enable debug messages and run bird in foreground\n" + " -D Log debug messages to given file instead of stderr\n" + " -f Run bird in foreground\n" + " -g Use given group ID\n" + " -h, --help Display this information\n" + " -l Look for a configuration file and a control socket\n" + " in the current working directory\n" + " -p Test configuration file and exit without start\n" + " -P Create a PID file with given filename\n" + " -R Apply graceful restart recovery after start\n" + " -s Use given filename for a control socket\n" + " -u Drop privileges and use given user ID\n" + " --version Display version of BIRD\n"); + + exit(0); +} + +static void +display_version(void) { - fprintf(stderr, "Usage: %s [-c ] [-d] [-D ] [-p] [-s ] [-P ] [-u ] [-g ] [-f] [-l] [-R]\n", bird_name); - exit(1); + fprintf(stderr, "BIRD version " BIRD_VERSION "\n"); + exit(0); } static inline char * @@ -706,12 +736,9 @@ parse_args(int argc, char **argv) if (argc == 2) { if (!strcmp(argv[1], "--version")) - { - fprintf(stderr, "BIRD version " BIRD_VERSION "\n"); - exit(0); - } + display_version(); if (!strcmp(argv[1], "--help")) - usage(); + display_help(); } while ((c = getopt(argc, argv, opt_list)) >= 0) switch (c) @@ -721,11 +748,11 @@ parse_args(int argc, char **argv) config_changed = 1; break; case 'd': - debug_flag |= 1; + log_init_debug(""); + run_in_foreground = 1; break; case 'D': log_init_debug(optarg); - debug_flag |= 2; break; case 'p': parse_and_exit = 1; @@ -755,11 +782,19 @@ parse_args(int argc, char **argv) case 'R': graceful_restart_recovery(); break; + case 'h': + display_help(); + break; default: - usage(); + fputc('\n', stderr); + display_usage(); + exit(1); } if (optind < argc) - usage(); + { + display_usage(); + exit(1); + } } /* @@ -775,11 +810,11 @@ main(int argc, char **argv) #endif parse_args(argc, argv); - if (debug_flag == 1) - log_init_debug(""); - log_switch(debug_flag, NULL, NULL); + log_switch(1, NULL, NULL); + net_init(); resource_init(); + timer_init(); olock_init(); io_init(); rt_init(); @@ -814,7 +849,7 @@ main(int argc, char **argv) if (parse_and_exit) exit(0); - if (!(debug_flag||run_in_foreground)) + if (!run_in_foreground) { pid_t pid = fork(); if (pid < 0)