summaryrefslogtreecommitdiff
path: root/sysdep/unix/config.Y
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep/unix/config.Y')
-rw-r--r--sysdep/unix/config.Y62
1 files changed, 62 insertions, 0 deletions
diff --git a/sysdep/unix/config.Y b/sysdep/unix/config.Y
new file mode 100644
index 00000000..bd9c3822
--- /dev/null
+++ b/sysdep/unix/config.Y
@@ -0,0 +1,62 @@
+/*
+ * BIRD -- UNIX Configuration
+ *
+ * (c) 1999 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+CF_HDR
+
+#include "lib/unix.h"
+
+CF_DECLS
+
+CF_KEYWORDS(LOG, SYSLOG, ALL, DEBUG, TRACE, INFO, REMOTE, WARNING, ERROR, AUTH, FATAL, BUG)
+
+%type <i> log_mask log_mask_list log_cat
+
+CF_GRAMMAR
+
+CF_ADDTO(conf, log_config)
+
+log_config: LOG TEXT log_mask ';' {
+ struct log_config *c = cfg_allocz(sizeof(struct log_config));
+ FILE *f = rfopen(new_config->pool, $2, "a");
+ if (!f) cf_error("Unable to open log file `%s': %m", $2);
+ c->mask = $3;
+ c->fh = f;
+ add_tail(&new_config->logfiles, &c->n);
+ }
+ | LOG SYSLOG log_mask ';' {
+ struct log_config *c = cfg_allocz(sizeof(struct log_config));
+ c->mask = $3;
+ add_tail(&new_config->logfiles, &c->n);
+ }
+ ;
+
+log_mask:
+ ALL { $$ = ~0; }
+ | '{' log_mask_list '}' { $$ = $2; }
+ ;
+
+log_mask_list:
+ log_cat { $$ = 1 << $1; }
+ | log_mask_list ',' log_cat { $$ = $1 | (1 << $3); }
+ ;
+
+log_cat:
+ DEBUG { $$ = L_DEBUG[0]; }
+ | TRACE { $$ = L_TRACE[0]; }
+ | INFO { $$ = L_INFO[0]; }
+ | REMOTE { $$ = L_REMOTE[0]; }
+ | WARNING { $$ = L_WARN[0]; }
+ | ERROR { $$ = L_ERR[0]; }
+ | AUTH { $$ = L_AUTH[0]; }
+ | FATAL { $$ = L_FATAL[0]; }
+ | BUG { $$ = L_BUG[0]; }
+ ;
+
+CF_CODE
+
+CF_END