diff options
author | Martin Mares <mj@ucw.cz> | 1998-05-15 09:56:13 +0200 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1998-05-15 09:56:13 +0200 |
commit | 25697773b529d80278679978b7416ca9c87e15e9 (patch) | |
tree | 8ca875571e57475a15e978abae76aeda58d82149 | |
parent | 62aa008abd627c6862310daf65ffd337a920bdbb (diff) | |
download | bird-25697773b529d80278679978b7416ca9c87e15e9.tar bird-25697773b529d80278679978b7416ca9c87e15e9.zip |
The library is now glued together from generic and OS-dependent parts
by the `mergedirs' script. Few more IP address manipulation functions
and some fixes.
-rw-r--r-- | Makefile | 19 | ||||
-rw-r--r-- | Rules | 27 | ||||
-rw-r--r-- | lib/Makefile | 9 | ||||
-rw-r--r-- | lib/Modules | 19 | ||||
-rw-r--r-- | lib/birdlib.h | 4 | ||||
-rw-r--r-- | lib/ip.h | 6 | ||||
-rw-r--r-- | lib/ipv4.c | 4 | ||||
-rw-r--r-- | lib/ipv4.h | 6 | ||||
-rw-r--r-- | lib/ipv6.c | 4 | ||||
-rw-r--r-- | lib/ipv6.h | 2 | ||||
-rw-r--r-- | sysdep/cf/linux-20.h | 4 | ||||
-rw-r--r-- | sysdep/cf/linux-21.h | 4 | ||||
-rw-r--r-- | sysdep/cf/linux-v6.h | 4 | ||||
-rw-r--r-- | sysdep/linux/Makefile | 1 | ||||
-rw-r--r-- | sysdep/linux/Modules | 0 | ||||
-rw-r--r-- | sysdep/unix/Makefile | 3 | ||||
-rw-r--r-- | sysdep/unix/Modules | 3 | ||||
-rw-r--r-- | sysdep/unix/main.c | 25 | ||||
-rw-r--r-- | sysdep/unix/timer.h (renamed from lib/timer.h) | 0 | ||||
-rwxr-xr-x | tools/mergedirs | 36 |
20 files changed, 151 insertions, 29 deletions
@@ -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 @@ -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 6eb14e1..0000000 --- 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 0000000..18447e1 --- /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 5e533b6..842fce8 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 */ @@ -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 @@ -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 @@ -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? */ @@ -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 @@ -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 6100add..092ab71 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 a2afcbb..c810ec1 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 de397fc..21939b8 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 a81db06..0000000 --- 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 0000000..e69de29 --- /dev/null +++ b/sysdep/linux/Modules diff --git a/sysdep/unix/Makefile b/sysdep/unix/Makefile deleted file mode 100644 index 60f8057..0000000 --- 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 0000000..450f579 --- /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 0000000..f3b01d4 --- /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 506e3c9..506e3c9 100644 --- a/lib/timer.h +++ b/sysdep/unix/timer.h diff --git a/tools/mergedirs b/tools/mergedirs new file mode 100755 index 0000000..581ea4c --- /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 |