summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile19
-rw-r--r--Rules27
-rw-r--r--lib/Makefile9
-rw-r--r--lib/Modules19
-rw-r--r--lib/birdlib.h4
-rw-r--r--lib/ip.h6
-rw-r--r--lib/ipv4.c4
-rw-r--r--lib/ipv4.h6
-rw-r--r--lib/ipv6.c4
-rw-r--r--lib/ipv6.h2
-rw-r--r--sysdep/cf/linux-20.h4
-rw-r--r--sysdep/cf/linux-21.h4
-rw-r--r--sysdep/cf/linux-v6.h4
-rw-r--r--sysdep/linux/Makefile1
-rw-r--r--sysdep/linux/Modules0
-rw-r--r--sysdep/unix/Makefile3
-rw-r--r--sysdep/unix/Modules3
-rw-r--r--sysdep/unix/main.c25
-rw-r--r--sysdep/unix/timer.h (renamed from lib/timer.h)0
-rwxr-xr-xtools/mergedirs36
20 files changed, 151 insertions, 29 deletions
diff --git a/Makefile b/Makefile
index 45e69afa..3a74205b 100644
--- a/Makefile
+++ b/Makefile
@@ -2,32 +2,41 @@
# (c) 1998 Martin Mares <mj@ucw.cz>
TOPDIR=$(shell pwd)
+OBJDIR=obj
+
CPPFLAGS=-I$(TOPDIR)/sysdep/linux -I$(TOPDIR)
OPT=-O2
DEBUG=-g#gdb
CFLAGS=$(OPT) $(DEBUG) -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses
PROTOCOLS=
-DIRS=nest $(PROTOCOLS) lib sysdep/linux sysdep/unix
-ARCHS=$(join $(addsuffix /,$(DIRS)),$(subst /,_,$(addsuffix .a,$(DIRS))))
+LIBDIRS=sysdep/linux sysdep/unix lib
+STDDIRS=nest $(PROTOCOLS)
+DIRS=$(STDDIRS) $(OBJDIR)/lib
+PARTOBJS=$(join $(addsuffix /,$(STDDIRS)),$(subst /,_,$(addsuffix .o,$(STDDIRS))))
+LIBS=$(OBJDIR)/lib/birdlib.a
export
all: .dep all-dirs bird
all-dirs:
- set -e ; for a in $(DIRS) ; do $(MAKE) -C $$a ; done
+ set -e ; for a in $(DIRS) ; do $(MAKE) -C $$a all ; done
-bird: $(ARCHS)
+bird: $(PARTOBJS) $(LIBS)
$(CC) $(LDFLAGS) -o $@ $^
.dep:
$(MAKE) dep
- touch .dep
dep:
+ mkdir -p $(OBJDIR)
+ tools/mergedirs $(OBJDIR) $(LIBDIRS)
+# for a in $(STDDIRS) ; do mkdir -p $(OBJDIR)/$$a ; done
set -e ; for a in $(DIRS) ; do $(MAKE) -C $$a dep ; done
+ touch .dep
clean:
+ rm -rf obj
rm -f `find . -name "*~" -or -name "*.[oa]" -or -name "\#*\#" -or -name TAGS -or -name core -or -name .depend -or -name .#*`
rm -f bird .dep
diff --git a/Rules b/Rules
index a0a1418a..2d9c0a8a 100644
--- a/Rules
+++ b/Rules
@@ -3,16 +3,31 @@
THISDIR=$(shell pwd)
RELDIR=$(subst $(TOPDIR)/,,$(THISDIR))
-ANAME=$(subst /,_,$(RELDIR)).a
+ONAME=$(subst /,_,$(RELDIR)).o
+
+ifndef SRCS
SRCS=$(subst .o,.c,$(OBJS))
+endif
+
+ifdef OBJS
-all: $(ANAME)
+ifdef LIB
-$(ANAME): $(OBJS)
- rm -f $(ANAME)
- ar rcs $(ANAME) $(OBJS)
+all: $(LIB)
-ifdef OBJS
+$(LIB): $(OBJS)
+ rm -f $(LIB)
+ ar rcs $(LIB) $(OBJS)
+ ranlib $(LIB)
+
+else
+
+all: $(ONAME)
+
+$(ONAME): $(OBJS)
+ $(LD) -r -o $(ONAME) $(OBJS)
+
+endif
dep: $(SRCS)
rm -f .depend
diff --git a/lib/Makefile b/lib/Makefile
deleted file mode 100644
index 6eb14e1e..00000000
--- a/lib/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-OBJS=lists.o bitops.o resource.o xmalloc.o mempool.o slab.o md5.o
-
-ifdef IPV6
-OBJS += ipv6.o
-else
-OBJS += ipv4.o
-endif
-
-include $(TOPDIR)/Rules
diff --git a/lib/Modules b/lib/Modules
new file mode 100644
index 00000000..18447e1e
--- /dev/null
+++ b/lib/Modules
@@ -0,0 +1,19 @@
+birdlib.h
+bitops.c
+bitops.h
+ip.h
+ipv4.c
+ipv4.h
+ipv6.c
+ipv6.h
+lists.c
+lists.h
+md5.c
+md5.h
+mempool.c
+resource.c
+resource.h
+slab.c
+socket.h
+unaligned.h
+xmalloc.c
diff --git a/lib/birdlib.h b/lib/birdlib.h
index 5e533b66..842fce86 100644
--- a/lib/birdlib.h
+++ b/lib/birdlib.h
@@ -21,8 +21,8 @@
/* Logging and dying */
-void log(char *msg, ...);
-void die(char *msg, ...) NORET;
+void log(char *msg, ...) __attribute__((format(printf,1,2)));
+void die(char *msg, ...) __attribute__((format(printf,1,2))) NORET;
#define L_DEBUG "\001" /* Debugging messages */
#define L_INFO "\002" /* Informational messages */
diff --git a/lib/ip.h b/lib/ip.h
index c3683992..87cd3aa9 100644
--- a/lib/ip.h
+++ b/lib/ip.h
@@ -35,4 +35,10 @@
#define SCOPE_SITE 2
#define SCOPE_UNIVERSE 3
+/*
+ * Is it a valid network prefix?
+ */
+
+#define ip_is_prefix(a,l) (!ipa_nonzero(ipa_and(a, ipa_not(ipa_mkmask(l)))))
+
#endif
diff --git a/lib/ipv4.c b/lib/ipv4.c
index 52f5b0b2..cc673733 100644
--- a/lib/ipv4.c
+++ b/lib/ipv4.c
@@ -6,6 +6,8 @@
* Can be freely distributed and used under the terms of the GNU GPL.
*/
+#ifndef IPV6
+
#include "nest/bird.h"
#include "lib/ip.h"
@@ -27,3 +29,5 @@ ipv4_classify(u32 a)
return IADDR_BROADCAST | SCOPE_LINK;
return IADDR_INVALID;
}
+
+#endif
diff --git a/lib/ipv4.h b/lib/ipv4.h
index fa8a27b5..de9f4e57 100644
--- a/lib/ipv4.h
+++ b/lib/ipv4.h
@@ -25,7 +25,7 @@ typedef struct ipv4_addr {
} ip_addr;
#define _I(x) (x).addr
-#define _MI(x) ((struct ip_addr) { x })
+#define _MI(x) ((struct ipv4_addr) { x })
#else
@@ -36,6 +36,8 @@ typedef u32 ip_addr;
#endif
+#define BITS_PER_IP_ADDRESS 32
+
#define IPA_NONE (_MI(0))
#define ipa_equal(x,y) (_I(x) == _I(y))
@@ -50,8 +52,6 @@ typedef u32 ip_addr;
#define ipa_ntoh(x) x = _MI(ntohl(_I(x)))
#define ipa_classify(x) ipv4_classify(_I(x))
-unsigned ipv4_mklen(u32);
-u32 ipv4_mkmask(unsigned);
int ipv4_classify(u32);
/* FIXME: Is this hash function uniformly distributed over standard routing tables? */
diff --git a/lib/ipv6.c b/lib/ipv6.c
index e612af72..2d01e839 100644
--- a/lib/ipv6.c
+++ b/lib/ipv6.c
@@ -6,7 +6,11 @@
* Can be freely distributed and used under the terms of the GNU GPL.
*/
+#ifdef IPV6
+
#include "nest/bird.h"
#include "lib/ip.h"
#error "Ought to implement these."
+
+#endif
diff --git a/lib/ipv6.h b/lib/ipv6.h
index 845955f4..08ed5f88 100644
--- a/lib/ipv6.h
+++ b/lib/ipv6.h
@@ -22,6 +22,8 @@ typedef struct ipv4_addr {
#define _I2(a) ((a).addr[2])
#define _I3(a) ((a).addr[3])
+#define BITS_PER_IP_ADDRESS 128
+
#define IPA_NONE _MI(0,0,0,0)
#define ipa_equal(x,y) (!memcmp(&(x),&(y),sizeof(ip_addr)))
diff --git a/sysdep/cf/linux-20.h b/sysdep/cf/linux-20.h
index 6100add3..092ab71f 100644
--- a/sysdep/cf/linux-20.h
+++ b/sysdep/cf/linux-20.h
@@ -9,3 +9,7 @@
#undef CONFIG_TOS
#undef CONFIG_MULTIPATH
#undef CONFIG_NETLINK
+
+/*
+Link: sysdep/linux
+ */
diff --git a/sysdep/cf/linux-21.h b/sysdep/cf/linux-21.h
index a2afcbbd..c810ec1a 100644
--- a/sysdep/cf/linux-21.h
+++ b/sysdep/cf/linux-21.h
@@ -9,3 +9,7 @@
#define CONFIG_TOS
#define CONFIG_MULTIPATH
#define CONFIG_NETLINK
+
+/*
+Link: sysdep/linux
+ */
diff --git a/sysdep/cf/linux-v6.h b/sysdep/cf/linux-v6.h
index de397fc1..21939b86 100644
--- a/sysdep/cf/linux-v6.h
+++ b/sysdep/cf/linux-v6.h
@@ -11,3 +11,7 @@
#define CONFIG_TOS
#define CONFIG_MULTIPATH
#define CONFIG_NETLINK
+
+/*
+Link: sysdep/linux
+ */
diff --git a/sysdep/linux/Makefile b/sysdep/linux/Makefile
deleted file mode 100644
index a81db06d..00000000
--- a/sysdep/linux/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-include $(TOPDIR)/Rules
diff --git a/sysdep/linux/Modules b/sysdep/linux/Modules
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/sysdep/linux/Modules
diff --git a/sysdep/unix/Makefile b/sysdep/unix/Makefile
deleted file mode 100644
index 60f80576..00000000
--- a/sysdep/unix/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-OBJS=log.o
-
-include $(TOPDIR)/Rules
diff --git a/sysdep/unix/Modules b/sysdep/unix/Modules
new file mode 100644
index 00000000..450f5795
--- /dev/null
+++ b/sysdep/unix/Modules
@@ -0,0 +1,3 @@
+log.c
+main.c
+timer.h
diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c
new file mode 100644
index 00000000..f3b01d41
--- /dev/null
+++ b/sysdep/unix/main.c
@@ -0,0 +1,25 @@
+/*
+ * BIRD Internet Routing Daemon -- Unix Entry Point
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <stdio.h>
+
+#include "nest/bird.h"
+#include "lib/lists.h"
+#include "lib/resource.h"
+#include "nest/route.h"
+
+int
+main(void)
+{
+ log(L_INFO "Launching BIRD -1.-1-pre-omega...");
+
+ log_init_debug(NULL);
+ resource_init();
+
+ return 0;
+}
diff --git a/lib/timer.h b/sysdep/unix/timer.h
index 506e3c94..506e3c94 100644
--- a/lib/timer.h
+++ b/sysdep/unix/timer.h
diff --git a/tools/mergedirs b/tools/mergedirs
new file mode 100755
index 00000000..581ea4cd
--- /dev/null
+++ b/tools/mergedirs
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+if [ -z "$2" ] ; then
+ echo "Usage: mergedirs <obj-dir> <list-of-dirs>"
+ exit 1
+ fi
+TOPDIR=`pwd`
+OBJDIR=$1
+LIBDIR=$OBJDIR/lib
+shift
+echo "Merging system-dependent modules"
+MODULES=`for a in $@ ; do
+ sed <$a/Modules "s@\\(.*\\)@\\1 $a/\\1@"
+ done |
+ sort +0 -1 -u |
+ cut -d ' ' -f 2`
+rm -rf $LIBDIR
+mkdir -p $LIBDIR
+for a in $MODULES ; do
+ echo $a
+ b=`basename $a`
+ ln -s $TOPDIR/$a $LIBDIR/$b
+ OBJ=`echo $b | sed '/\.c$/!d;s/\.c$/\.o/'`
+ if [ -n "$OBJ" ] ; then
+ OBJS="$OBJS $OBJ"
+ SRCS="$SRCS \\
+ \$(TOPDIR)/$a"
+ fi
+ done
+cat >$LIBDIR/Makefile <<EOF
+OBJS=$OBJS
+SRCS=$SRCS
+LIB=birdlib.a
+
+include \$(TOPDIR)/Rules
+EOF