From 25697773b529d80278679978b7416ca9c87e15e9 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Fri, 15 May 1998 07:56:13 +0000 Subject: 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. --- Makefile | 19 ++++++++++++++----- Rules | 27 +++++++++++++++++++++------ lib/Makefile | 9 --------- lib/Modules | 19 +++++++++++++++++++ lib/birdlib.h | 4 ++-- lib/ip.h | 6 ++++++ lib/ipv4.c | 4 ++++ lib/ipv4.h | 6 +++--- lib/ipv6.c | 4 ++++ lib/ipv6.h | 2 ++ lib/timer.h | 26 -------------------------- sysdep/cf/linux-20.h | 4 ++++ sysdep/cf/linux-21.h | 4 ++++ sysdep/cf/linux-v6.h | 4 ++++ sysdep/linux/Makefile | 1 - sysdep/linux/Modules | 0 sysdep/unix/Makefile | 3 --- sysdep/unix/Modules | 3 +++ sysdep/unix/main.c | 25 +++++++++++++++++++++++++ sysdep/unix/timer.h | 26 ++++++++++++++++++++++++++ tools/mergedirs | 36 ++++++++++++++++++++++++++++++++++++ 21 files changed, 177 insertions(+), 55 deletions(-) delete mode 100644 lib/Makefile create mode 100644 lib/Modules delete mode 100644 lib/timer.h delete mode 100644 sysdep/linux/Makefile create mode 100644 sysdep/linux/Modules delete mode 100644 sysdep/unix/Makefile create mode 100644 sysdep/unix/Modules create mode 100644 sysdep/unix/main.c create mode 100644 sysdep/unix/timer.h create mode 100755 tools/mergedirs diff --git a/Makefile b/Makefile index 45e69af..3a74205 100644 --- a/Makefile +++ b/Makefile @@ -2,32 +2,41 @@ # (c) 1998 Martin Mares 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 a0a1418..2d9c0a8 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 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 */ diff --git a/lib/ip.h b/lib/ip.h index c368399..87cd3aa 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 52f5b0b..cc67373 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 fa8a27b..de9f4e5 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 e612af7..2d01e83 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 845955f..08ed5f8 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/lib/timer.h b/lib/timer.h deleted file mode 100644 index 506e3c9..0000000 --- a/lib/timer.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * BIRD Timers - * - * (c) 1998 Martin Mares - * - * Can be freely distributed and used under the terms of the GNU GPL. - */ - -#ifndef _BIRD_TIMER_H_ -#define _BIRD_TIMER_H_ - -#include "lib/resource.h" - -typedef struct timer { - resource r; - void (*hook)(struct timer *); - void *data; - /* internal fields should be here */ -} timer; - -timer *tm_new(pool *, void (*hook)(timer *), void *data); -void tm_start(timer *, unsigned after); -void tm_stop(timer *); -void tm_trigger(timer *); - -#endif 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 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 + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#include + +#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/sysdep/unix/timer.h b/sysdep/unix/timer.h new file mode 100644 index 0000000..506e3c9 --- /dev/null +++ b/sysdep/unix/timer.h @@ -0,0 +1,26 @@ +/* + * BIRD Timers + * + * (c) 1998 Martin Mares + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#ifndef _BIRD_TIMER_H_ +#define _BIRD_TIMER_H_ + +#include "lib/resource.h" + +typedef struct timer { + resource r; + void (*hook)(struct timer *); + void *data; + /* internal fields should be here */ +} timer; + +timer *tm_new(pool *, void (*hook)(timer *), void *data); +void tm_start(timer *, unsigned after); +void tm_stop(timer *); +void tm_trigger(timer *); + +#endif 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 " + 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 <