summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--conf/Makefile24
-rw-r--r--sysdep/unix/main.c39
3 files changed, 59 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index eec90c7b..c7dd7025 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,8 @@ CFLAGS=$(OPT) $(DEBUG) -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses
PROTOCOLS=rip
LIBDIRS=sysdep/linux sysdep/unix lib
-STDDIRS=nest $(addprefix proto/,$(PROTOCOLS))
+BASEDIRS=nest $(addprefix proto/,$(PROTOCOLS))
+STDDIRS=$(BASEDIRS) $(OBJDIR)/conf
DIRS=$(STDDIRS) $(OBJDIR)/lib
PARTOBJS=$(join $(addsuffix /,$(STDDIRS)),$(subst /,_,$(addsuffix .o,$(STDDIRS))))
LIBS=$(OBJDIR)/lib/birdlib.a
diff --git a/conf/Makefile b/conf/Makefile
new file mode 100644
index 00000000..e448189e
--- /dev/null
+++ b/conf/Makefile
@@ -0,0 +1,24 @@
+CONFS=$(TOPDIR)/conf/confbase.Y @CONFS@$(addprefix $(TOPDIR)/,$(addsuffix /config.Y,$(BASEDIRS)))
+OBJS=cf-parse.tab.o cf-lex.o
+CONF=$(TOPDIR)/conf
+
+ifdef DEBUG
+BISON_DEBUG=-t
+#FLEX_DEBUG=-d
+endif
+
+include $(TOPDIR)/Rules
+
+cf-parse.tab.c cf-parse-tab.h: cf-parse.y
+ bison -bcf-parse -dv -pcf_ $(BISON_DEBUG) cf-parse.y
+
+cf-parse.y: $(CONFS) $(CONF)/gen_parser.m4
+ m4 -P $(CONF)/gen_parser.m4 $(CONFS) >cf-parse.y
+
+keywords.h: $(CONFS) $(CONF)/gen_keywords.m4
+ m4 -P $(CONF)/gen_keywords.m4 $(CONFS) >keywords.h
+
+cf-lex.c: cf-lex.l
+ flex $(FLEX_DEBUG) -sB8 -ocf-lex.c -Pcf_ cf-lex.l
+
+dep: keywords.h
diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c
index 3d927cb7..c649cb27 100644
--- a/sysdep/unix/main.c
+++ b/sysdep/unix/main.c
@@ -7,6 +7,8 @@
*/
#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
#include <sys/signal.h>
#include "nest/bird.h"
@@ -16,7 +18,7 @@
#include "nest/route.h"
#include "nest/protocol.h"
#include "nest/iface.h"
-#include "nest/confile.h"
+#include "conf/conf.h"
#include "unix.h"
#include "krt.h"
@@ -54,11 +56,32 @@ signal_init(void)
}
/*
- * Config Pool
+ * Reading the Configuration
*/
-pool *cfg_pool;
-mempool *cfg_mem;
+static int conf_fd;
+
+static int
+cf_read(byte *dest, unsigned int len)
+{
+ int l = read(conf_fd, dest, len);
+ if (l < 0)
+ cf_error("Read error");
+ return l;
+}
+
+static void
+read_config(void)
+{
+ cf_lex_init_tables();
+ cf_allocate();
+ conf_fd = open(PATH_CONFIG, O_RDONLY);
+ if (conf_fd < 0)
+ die("Unable to open configuration file " PATH_CONFIG ": %m");
+ cf_read_hook = cf_read;
+ cf_lex_init(1);
+ cf_parse();
+}
/*
* Hic Est main()
@@ -71,9 +94,11 @@ main(void)
log_init_debug(NULL);
resource_init();
- cfg_pool = rp_new(&root_pool, "Config");
- cfg_mem = mp_new(cfg_pool, 1024);
+ debug("Reading configuration file.\n");
+ read_config();
+
+ debug("Initializing.\n");
io_init();
rt_init();
if_init();
@@ -88,7 +113,9 @@ main(void)
scan_if_init();
auto_router_id();
+#if 0
protos_start();
+#endif
handle_sigusr(0);