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.
This commit is contained in:
parent
62aa008abd
commit
25697773b5
20 changed files with 152 additions and 30 deletions
19
Makefile
19
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
|
||||
|
|
29
Rules
29
Rules
|
@ -3,17 +3,32 @@
|
|||
|
||||
THISDIR=$(shell pwd)
|
||||
RELDIR=$(subst $(TOPDIR)/,,$(THISDIR))
|
||||
ANAME=$(subst /,_,$(RELDIR)).a
|
||||
ONAME=$(subst /,_,$(RELDIR)).o
|
||||
|
||||
ifndef SRCS
|
||||
SRCS=$(subst .o,.c,$(OBJS))
|
||||
|
||||
all: $(ANAME)
|
||||
|
||||
$(ANAME): $(OBJS)
|
||||
rm -f $(ANAME)
|
||||
ar rcs $(ANAME) $(OBJS)
|
||||
endif
|
||||
|
||||
ifdef OBJS
|
||||
|
||||
ifdef LIB
|
||||
|
||||
all: $(LIB)
|
||||
|
||||
$(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
|
||||
for a in $(SRCS) ; do gcc $(CPPFLAGS) -MM $$a >>.depend ; done
|
||||
|
|
|
@ -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
|
19
lib/Modules
Normal file
19
lib/Modules
Normal file
|
@ -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
|
|
@ -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 */
|
||||
|
|
6
lib/ip.h
6
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
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -9,3 +9,7 @@
|
|||
#undef CONFIG_TOS
|
||||
#undef CONFIG_MULTIPATH
|
||||
#undef CONFIG_NETLINK
|
||||
|
||||
/*
|
||||
Link: sysdep/linux
|
||||
*/
|
||||
|
|
|
@ -9,3 +9,7 @@
|
|||
#define CONFIG_TOS
|
||||
#define CONFIG_MULTIPATH
|
||||
#define CONFIG_NETLINK
|
||||
|
||||
/*
|
||||
Link: sysdep/linux
|
||||
*/
|
||||
|
|
|
@ -11,3 +11,7 @@
|
|||
#define CONFIG_TOS
|
||||
#define CONFIG_MULTIPATH
|
||||
#define CONFIG_NETLINK
|
||||
|
||||
/*
|
||||
Link: sysdep/linux
|
||||
*/
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
include $(TOPDIR)/Rules
|
0
sysdep/linux/Modules
Normal file
0
sysdep/linux/Modules
Normal file
|
@ -1,3 +0,0 @@
|
|||
OBJS=log.o
|
||||
|
||||
include $(TOPDIR)/Rules
|
3
sysdep/unix/Modules
Normal file
3
sysdep/unix/Modules
Normal file
|
@ -0,0 +1,3 @@
|
|||
log.c
|
||||
main.c
|
||||
timer.h
|
25
sysdep/unix/main.c
Normal file
25
sysdep/unix/main.c
Normal file
|
@ -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;
|
||||
}
|
36
tools/mergedirs
Executable file
36
tools/mergedirs
Executable file
|
@ -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
|
Loading…
Reference in a new issue