0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

Merge branch 'int-new' into int-new-merged

This commit is contained in:
Jan Moskyto Matejka 2016-05-10 14:30:49 +02:00
commit 0c6dfe5236
64 changed files with 429 additions and 586 deletions

2
Doc
View File

@ -1,3 +1,4 @@
D doc/prog-head.sgml
C doc
C nest
C conf
@ -5,3 +6,4 @@ C filter
C proto
C sysdep
C lib
D doc/prog-foot.sgml

156
Makefile.in Normal file
View File

@ -0,0 +1,156 @@
# Makefile for the BIRD Internet Routing Daemon
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
# (c) 2016 Jan Moskyto Matejka <mq@ucw.cz>
# Disable build-in rules
MAKEFLAGS += -r
# Variable definitions
CPPFLAGS=-I$(objdir) -I$(srcdir) @CPPFLAGS@
CFLAGS=$(CPPFLAGS) @CFLAGS@
LDFLAGS=@LDFLAGS@
LIBS=@LIBS@
CLIENT_LIBS=@CLIENT_LIBS@
CC=@CC@
M4=@M4@
BISON=@BISON@
FLEX=@FLEX@
RANLIB=@RANLIB@
INSTALL=@INSTALL@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
INSTALL_DATA=@INSTALL_DATA@
client=$(addprefix $(exedir)/,@CLIENT@)
daemon=$(exedir)/bird
protocols = @protocols@
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
sbindir=@sbindir@
sysconfdir=@sysconfdir@
localstatedir=@localstatedir@
docdir=@prefix@/doc
srcdir := @srcdir@
objdir := @objdir@
exedir := @exedir@
ifeq ($(objdir),.)
objdir := $(realpath .)
endif
ifeq ($(VERBOSE),)
Q:=@
else
Q:=
endif
# Meta rules
cleangoals := clean distclean
docgoals := docs userdocs progdocs
.PHONY: all daemon cli $(cleangoals) $(docgoals) tags
all: daemon cli
daemon: $(daemon)
cli: $(client)
# Include directories
dirs := client conf doc filter lib nest $(addprefix proto/,$(protocols)) @sysdep_dirs@
conf-y-targets := $(addprefix $(objdir)/conf/,cf-parse.y keywords.h commands.h)
cf-local = $(conf-y-targets): $(s)config.Y
src-o-files = $(patsubst %.c,$(o)%.o,$(src))
all-daemon = $(exedir)/bird: $(obj)
all-client = $(exedir)/birdc $(exedir)/birdcl: $(obj)
s = $(dir $(lastword $(MAKEFILE_LIST)))
ifeq ($(srcdir),.)
o = $(objdir)/$(s)
else
o = $(patsubst $(srcdir)%,$(objdir)%,$(s))
endif
define clean_in =
clean::
rm -f $(addprefix $(o),$(1))
endef
clean = $(eval $(call clean_in,$(1)))
include $(addsuffix /Makefile,$(addprefix $(srcdir)/,$(dirs)))
# Generic rules
$(objdir)/%.o: $(srcdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
$(Q)echo CC -o $@ -c $<
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
$(objdir)/%.o: $(objdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
$(Q)echo CC -o $@ -c $<
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
$(objdir)/.dir-stamp:
$(Q)echo MKDIR -p $(addprefix $(objdir)/,$(dirs) doc)
$(Q)mkdir -p $(addprefix $(objdir)/,$(dirs) doc)
$(Q)touch $@
$(client) $(daemon):
$(Q)echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
$(objdir)/sysdep/paths.h: Makefile
echo >$@ "/* Generated by Makefile, don't edit manually! */"
echo >>$@ "#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
echo >>$@ "#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
if test -n "@iproutedir@" ; then echo >>$@ "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
# Finally include the computed dependencies
ifneq ($(filter-out $(cleangoals),$(MAKECMDGOALS)),)
-include $(shell find $(objdir) -name "*.d")
endif
ifeq ($(MAKECMDGOALS),)
-include $(shell find $(objdir) -name "*.d")
endif
tags:
cd $(srcdir) ; etags -lc `find $(dirs) -name *.[chY]`
# Install
install: all
$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/@runtimedir@
$(INSTALL_PROGRAM) $(exedir)/bird $(DESTDIR)/$(sbindir)/bird
$(INSTALL_PROGRAM) $(exedir)/birdcl $(DESTDIR)/$(sbindir)/birdcl
if test -n "@CLIENT@" ; then \
$(INSTALL_PROGRAM) $(exedir)/birdc $(DESTDIR)/$(sbindir)/birdc ; \
fi
if ! test -f $(DESTDIR)/@CONFIG_FILE@ ; then \
$(INSTALL_DATA) $(srcdir)/doc/bird.conf.example $(DESTDIR)/@CONFIG_FILE@ ; \
else \
echo "Not overwriting old bird.conf" ; \
fi
install-docs:
$(INSTALL) -d $(DESTDIR)/$(docdir)
$(INSTALL_DATA) $(objdir)/doc/{bird,prog}{,-*}.html $(DESTDIR)/$(docdir)/
# Cleanup
clean::
rm -f $(objdir)/sysdep/paths.h
rm -f $(addprefix $(exedir)/,bird birdc birdcl)
find $(objdir) -name "*.[od]" -exec rm -f '{}' '+'
ifeq ($(objdir),obj)
distclean: clean
rm -rf $(objdir)
rm -f config.log config.status configure Makefile
else
distclean: clean
rm -rf * .dir-stamp
rm -f config.log config.status configure Makefile
endif

View File

@ -1,11 +1,11 @@
source=commands.c util.c client.c
root-rel=../
dir-name=client
src := commands.c util.c client.c
obj := $(src-o-files)
clients := $(client) birdcl
$(all-client)
source-dep := $(source) $(addsuffix .c,$(clients))
$(o)commands.c.dep: $(objdir)/conf/commands.h
subdir: $(addsuffix .o,$(clients))
$(exedir)/birdc: $(o)birdc.o
$(exedir)/birdc: LIBS += $(CLIENT_LIBS)
include ../Rules
$(exedir)/birdcl: $(o)birdcl.o

View File

@ -1,31 +1,29 @@
source=cf-parse.tab.c cf-lex.c conf.c
root-rel=../
src := cf-parse.tab.c cf-lex.c conf.c
obj := $(src-o-files)
include ../Rules
conf-src=$(srcdir)/conf
conf-fragments=$(conf-src)/confbase.Y @CONFS@ $(addsuffix /config.Y,$(static-dir-paths))
$(all-daemon)
ifdef DEBUG
BISON_DEBUG=-t
#FLEX_DEBUG=-d
endif
cf-parse.tab.h: cf-parse.tab.c
$(o)cf-parse.tab.h: $(o)cf-parse.tab.c
cf-parse.tab.c: cf-parse.y
$(BISON) -bcf-parse -dv -pcf_ $(BISON_DEBUG) cf-parse.y
$(o)cf-parse.tab.c: $(o)cf-parse.y
echo $< $@ $(o)
$(BISON) -b$(@:.tab.c=) -dv -pcf_ $(BISON_DEBUG) $<
cf-parse.y: $(conf-fragments) $(conf-src)/gen_parser.m4
$(M4) -P $(conf-src)/gen_parser.m4 $(conf-fragments) >cf-parse.y
$(conf-y-targets): $(s)confbase.Y
$(M4) -P $| $^ >$@
keywords.h: $(conf-fragments) $(conf-src)/gen_keywords.m4
$(M4) -P $(conf-src)/gen_keywords.m4 $(conf-fragments) >keywords.h
$(o)cf-parse.y: | $(s)gen_parser.m4
$(o)keywords.h: | $(s)gen_keywords.m4
$(o)commands.h: | $(s)gen_commands.m4 $(srcdir)/client/cmds.m4
commands.h: $(conf-fragments) $(conf-src)/gen_commands.m4 $(srcdir)/client/cmds.m4
$(M4) -P $(conf-src)/gen_commands.m4 $(srcdir)/client/cmds.m4 $(conf-fragments) | sort >commands.h
$(o)cf-lex.c: $(s)cf-lex.l $(o)cf-parse.tab.h $(o)keywords.h $(o)commands.h
$(FLEX) $(FLEX_DEBUG) -s -B -8 -o$@ -Pcf_ $<
cf-lex.c: cf-lex.l
$(FLEX) $(FLEX_DEBUG) -s -B -8 -ocf-lex.c -Pcf_ cf-lex.l
$(addprefix $(o),cf-parse.tab.h cf-parse.tab.c cf-parse.y keywords.h commands.h cf-lex.c): $(objdir)/.dir-stamp
depend: keywords.h commands.h cf-parse.tab.c cf-lex.c
$(call clean,cf-parse.tab.h cf-parse.tab.c cf-parse.y keywords.h commands.h cf-lex.c cf-parse.output)

View File

@ -52,7 +52,7 @@
#include "lib/resource.h"
#include "lib/string.h"
#include "lib/event.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
#include "conf/conf.h"
#include "filter/filter.h"

View File

@ -10,7 +10,7 @@
#define _BIRD_CONF_H_
#include "lib/resource.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
/* Configuration structure */

View File

@ -14,7 +14,7 @@ CF_HDR
#include "conf/conf.h"
#include "lib/resource.h"
#include "lib/socket.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
#include "lib/string.h"
#include "nest/protocol.h"
#include "nest/iface.h"

View File

@ -23,24 +23,16 @@ AC_ARG_VAR([M4], [location of the M4 program])
if test "$srcdir" = . ; then
# Building in current directory => create obj directory holding all objects
objdir=obj
mkdir -p obj
srcdir_rel=..
makefiles="Makefile:tools/Makefile-top.in obj/Makefile:tools/Makefile.in obj/Rules:tools/Rules.in"
exedir=..
else
# Building in separate directory
objdir=.
srcdir_rel=$srcdir
makefiles="Makefile:tools/Makefile.in Rules:tools/Rules.in"
exedir=.
fi
case $srcdir_rel in
/*) srcdir_rel_mf=$srcdir_rel ;;
*) srcdir_rel_mf="\$(root-rel)$srcdir_rel" ;;
esac
exedir=.
AC_SUBST(objdir)
AC_SUBST(exedir)
AC_SUBST(srcdir_rel_mf)
AC_SUBST(srcdir)
AC_SUBST(runtimedir)
@ -162,7 +154,7 @@ sysname=`echo $sysdesc | sed 's/\.h$//'`
AC_DEFINE_UNQUOTED(SYSCONF_INCLUDE, "$sysdesc")
AC_MSG_CHECKING([system-dependent directories])
sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '` lib"
sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '`"
AC_MSG_RESULT($sysdep_dirs)
AC_SUBST(sysdep_dirs)
@ -234,10 +226,10 @@ if test "$enable_debug" = yes ; then
fi
fi
CLIENT=
CLIENT=birdcl
CLIENT_LIBS=
if test "$enable_client" = yes ; then
CLIENT=birdc
CLIENT="$CLIENT birdc"
AC_CHECK_LIB(history, add_history, CLIENT_LIBS="-lhistory")
AC_CHECK_LIB(ncurses, tgetent, USE_TERMCAP_LIB=-lncurses,
AC_CHECK_LIB(curses, tgetent, USE_TERMCAP_LIB=-lcurses,
@ -255,17 +247,9 @@ AC_SUBST(CLIENT_LIBS)
mkdir -p $objdir/sysdep
AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in])
AC_CONFIG_COMMANDS([merge],[[export CPP="$CPP"
$srcdir/tools/mergedirs $srcdir $srcdir_rel $objdir $sysdep_dirs]],
[[srcdir=$srcdir]
[srcdir_rel=$srcdir_rel]
[objdir=$objdir]
[sysdep_dirs="$sysdep_dirs"]])
AC_CONFIG_FILES($makefiles)
AC_CONFIG_FILES(Makefile:Makefile.in)
AC_OUTPUT
rm -f $objdir/sysdep/paths.h
cat >&AC_FD_MSG <<EOF
BIRD was configured with the following options:

View File

@ -372,6 +372,8 @@ sub process_file
}
}
#
local $ENV{PATH} = "$ENV{PATH}:/usr/lib/linuxdoc-tools";
my($precmd) = "|sgmlpre output=$global->{format} $global->{define}";
#

View File

@ -1,46 +1,48 @@
root-rel=../
dir-name=doc
ifneq ($(wildcard ../Rules),)
include ../Rules
else
srcdir=$(shell cd $(root-rel) ; pwd)
srcdir_abs=$(srcdir)
endif
# Force rebuilds
.PHONY: prog.sgml bird.sgml
.PHONY: progspell docs progdocs userdocs
doc-srcdir := $(shell cd $(s) && pwd)
sgml2 := $(doc-srcdir)/sgml2
docs: progdocs userdocs
progdocs: prog.html prog.ps
userdocs: bird.html bird.ps
prog.sgml:
$(srcdir)/tools/progdoc $(srcdir_abs)
doc-fmt = $(1): $(o)prog.$(1) $(o)bird.$(1)
$(call doc-fmt,html)
$(call doc-fmt,dvi)
$(call doc-fmt,ps)
$(call doc-fmt,pdf)
%.html: %.sgml
./sgml2html $<
progdocs: $(o)prog.html $(o)prog.pdf
userdocs: $(o)bird.html $(o)bird.pdf
progspell: $(o)prog.spell
%.dvi: %.tex
latex $<
latex $<
$(o)prog.sgml: $(srcdir)/tools/progdoc $(objdir)/.dir-stamp
$(srcdir)/tools/progdoc $(srcdir) $@
%.ps: %.dvi
$(o)%.sgml: $(s)%.sgml $(objdir)/.dir-stamp
cp $< $@
$(o)%.html: $(o)%.sgml
cd $(dir $@) && $(sgml2)html $(notdir $<)
$(o)%.dvi: $(o)%.tex
cd $(dir $@) && TEXINPUTS=$(TEXINPUTS):$(doc-srcdir)/tex latex $(notdir $<)
cd $(dir $@) && TEXINPUTS=$(TEXINPUTS):$(doc-srcdir)/tex latex $(notdir $<)
$(o)%.ps: $(o)%.dvi
dvips -D600 -ta4 -o $@ $<
%.tex: %.sgml
./sgml2latex --output=tex $<
$(o)%.pdf: $(o)%.ps
ps2pdf $< $@
%.txt: %.sgml
./sgml2txt $<
$(o)%.tex: $(o)%.sgml
cd $(dir $@) && $(sgml2)latex --output=tex $(notdir $<)
progspell: prog.sgml
sed -f prog-spell.sed <prog.sgml >prog.spell
ispell prog.spell
$(o)%.txt: $(o)%.sgml
cd $(dir $@) && $(sgml2)txt $(notdir $<)
clean:
rm -f *.tex *.dvi *.log *.txt *.aux *.toc *.spell
rm -f prog.sgml
$(o)prog.spell: $(o)prog.sgml $(s)prog-spell.sed
sed -f $(lastword $^) <$< >$@
ispell $@
distclean: clean
rm -f *.html *.ps
$(call clean,prog.spell $(addprefix *.,html dvi ps pdf sgml tex txt aux log toc))

View File

@ -17,8 +17,10 @@ use strict;
use vars qw($prefix $DataDir $BinDir $progs);
use FindBin;
$prefix = "/usr";
$DataDir = "sbase";
$DataDir = "$FindBin::Bin/sbase";
$BinDir = "/usr/bin";
use lib "/usr/share/linuxdoc-tools";
@ -32,9 +34,9 @@ $progs = {
"GROFFMACRO" => "-ms",
"AWK" => "/usr/share/linuxdoc-tools/awkwhich"
};
$ENV{"SGML_CATALOG_FILES"} = "sbase/dtd/catalog";
$ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog";
require "./LinuxDocTools.pm";
require "$FindBin::Bin/LinuxDocTools.pm";
&LinuxDocTools::init;
my @FileList = LinuxDocTools::process_options ("html", @ARGV);

View File

@ -17,8 +17,10 @@ use strict;
use vars qw($prefix $DataDir $BinDir $progs);
use FindBin;
$prefix = "/usr";
$DataDir = "sbase";
$DataDir = "$FindBin::Bin/sbase";
$BinDir = "/usr/bin";
use lib "/usr/share/linuxdoc-tools";
@ -32,9 +34,9 @@ $progs = {
"GROFFMACRO" => "-ms",
"AWK" => "/usr/share/linuxdoc-tools/awkwhich"
};
$ENV{"SGML_CATALOG_FILES"} = "sbase/dtd/catalog";
$ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog";
require "./LinuxDocTools.pm";
require "$FindBin::Bin/LinuxDocTools.pm";
&LinuxDocTools::init;
my @FileList = LinuxDocTools::process_options ("latex", @ARGV);

View File

@ -17,8 +17,10 @@ use strict;
use vars qw($prefix $DataDir $BinDir $progs);
use FindBin;
$prefix = "/usr";
$DataDir = "sbase";
$DataDir = "$FindBin::Bin/sbase";
$BinDir = "/usr/bin";
use lib "/usr/share/linuxdoc-tools";
@ -32,9 +34,9 @@ $progs = {
"GROFFMACRO" => "-ms",
"AWK" => "/usr/share/linuxdoc-tools/awkwhich"
};
$ENV{"SGML_CATALOG_FILES"} = "sbase/dtd/catalog";
$ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog";
require "./LinuxDocTools.pm";
require "$FindBin::Bin/LinuxDocTools.pm";
&LinuxDocTools::init;
my @FileList = LinuxDocTools::process_options ("txt", @ARGV);

View File

@ -1,5 +1,4 @@
source=f-util.c filter.c tree.c trie.c
root-rel=../
dir-name=filter
include ../Rules
src := filter.c f-util.c tree.c trie.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -1,5 +1,5 @@
H Library functions
S ip.c ipv4.c ipv6.c
S ip.c
S lists.c
S checksum.c bitops.c patmatch.c printf.c xmalloc.c tbf.c
D resource.sgml

7
lib/Makefile Normal file
View File

@ -0,0 +1,7 @@
src := bitops.c checksum.c ip.c lists.c md5.c net.c patmatch.c printf.c sha1.c sha256.c sha512.c slists.c xmalloc.c
obj := $(src-o-files)
$(all-client)
src := bitops.c checksum.c event.c idm.c ip.c lists.c md5.c mempool.c net.c patmatch.c printf.c resource.c sha1.c sha256.c sha512.c slab.c slists.c tbf.c xmalloc.c
obj := $(src-o-files)
$(all-daemon)

View File

@ -1,36 +0,0 @@
sha256.c
sha256.h
sha512.c
sha512.h
sha1.c
sha1.h
birdlib.h
bitops.c
bitops.h
idm.c
idm.h
ip.c
ip.h
lists.c
lists.h
md5.c
md5.h
mempool.c
resource.c
resource.h
slab.c
socket.h
tbf.c
unaligned.h
xmalloc.c
printf.c
string.h
patmatch.c
slists.c
slists.h
event.c
event.h
checksum.c
checksum.h
alloca.h
net.c

View File

@ -9,8 +9,8 @@
#ifndef _BIRD_BIRDLIB_H_
#define _BIRD_BIRDLIB_H_
#include "timer.h"
#include "alloca.h"
#include "sysdep/unix/timer.h"
#include "lib/alloca.h"
/* Ugly structure offset handling macros */

View File

@ -9,7 +9,7 @@
#ifndef _BIRD_IP_H_
#define _BIRD_IP_H_
#include "lib/endian.h"
#include "sysdep/unix/endian.h"
#include "lib/string.h"
#include "lib/bitops.h"
#include "lib/unaligned.h"

View File

@ -17,7 +17,7 @@
* if possible.
*/
#include "lib/endian.h"
#include "sysdep/unix/endian.h"
#include "lib/string.h"
static inline u16

View File

@ -1,6 +1,4 @@
source=rt-table.c rt-fib.c rt-attr.c proto.c iface.c rt-dev.c password.c cli.c locks.c cmds.c neighbor.c \
a-path.c a-set.c
root-rel=../
dir-name=nest
include ../Rules
src := a-path.c a-set.c cli.c cmds.c iface.c locks.c neighbor.c password.c proto.c rt-attr.c rt-dev.c rt-fib.c rt-table.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -9,7 +9,7 @@
#ifndef PASSWORD_H
#define PASSWORD_H
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
struct password_item {
node n;

View File

@ -12,7 +12,7 @@
#include "lib/lists.h"
#include "lib/resource.h"
#include "lib/event.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
#include "nest/route.h"
#include "conf/conf.h"
@ -271,7 +271,7 @@ proto_get_router_id(struct proto_config *pc)
}
/* Moved from route.h to avoid dependency conflicts */
static inline void rte_update(struct proto *p, net *net, rte *new) { rte_update2(p->main_channel, net, new, p->main_source); }
static inline void rte_update(struct proto *p, net_addr *n, rte *new) { rte_update2(p->main_channel, n, new, p->main_source); }
extern list proto_list;

View File

@ -11,7 +11,7 @@
#include "lib/lists.h"
#include "lib/resource.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
//#include "nest/protocol.h"
struct ea_list;
@ -276,7 +276,7 @@ static inline net *net_get(rtable *tab, const net_addr *addr) { return (net *) f
rte *rte_find(net *net, struct rte_src *src);
rte *rte_get_temp(struct rta *);
void rte_update2(struct channel *c, net *net, rte *new, struct rte_src *src);
void rte_update2(struct channel *c, net_addr *n, rte *new, struct rte_src *src);
/* rte_update() moved to protocol.h to avoid dependency conflicts */
void rte_discard(rtable *tab, rte *old);
int rt_examine(rtable *t, net_addr *a, struct proto *p, struct filter *filter);

View File

@ -55,24 +55,15 @@ dev_ifa_notify(struct proto *P, uint flags, struct ifa *ad)
if (flags & IF_CHANGE_DOWN)
{
net *n;
DBG("dev_if_notify: %s:%I going down\n", ad->iface->name, ad->ip);
n = net_find(c->table, &ad->prefix);
if (!n)
{
DBG("dev_if_notify: device shutdown: prefix not found\n");
return;
}
/* Use iface ID as local source ID */
struct rte_src *src = rt_get_source(P, ad->iface->index);
rte_update2(c, n, NULL, src);
rte_update2(c, &ad->prefix, NULL, src);
}
else if (flags & IF_CHANGE_UP)
{
rta *a;
net *n;
rte *e;
DBG("dev_if_notify: %s:%I going up\n", ad->iface->name, ad->ip);
@ -90,11 +81,9 @@ dev_ifa_notify(struct proto *P, uint flags, struct ifa *ad)
};
a = rta_lookup(&a0);
n = net_get(c->table, &ad->prefix);
e = rte_get_temp(a);
e->net = n;
e->pflags = 0;
rte_update2(c, n, e, src);
rte_update2(c, &ad->prefix, e, src);
}
}

View File

@ -1267,19 +1267,23 @@ rte_unhide_dummy_routes(net *net, rte **dummy)
*/
void
rte_update2(struct channel *c, net *net, rte *new, struct rte_src *src)
rte_update2(struct channel *c, net_addr *n, rte *new, struct rte_src *src)
{
struct proto *p = c->proto;
struct proto_stats *stats = &c->stats;
struct filter *filter = c->in_filter;
ea_list *tmpa = NULL;
rte *dummy = NULL;
net *nn;
ASSERT(c->channel_state == CS_UP);
rte_update_lock();
if (new)
{
nn = net_get(c->table, n);
new->net = nn;
new->sender = c;
if (!new->pref)
@ -1333,7 +1337,7 @@ rte_update2(struct channel *c, net *net, rte *new, struct rte_src *src)
{
stats->imp_withdraws_received++;
if (!net || !src)
if (!(nn = net_find(c->table, n)) || !src)
{
stats->imp_withdraws_ignored++;
rte_update_unlock();
@ -1342,9 +1346,9 @@ rte_update2(struct channel *c, net *net, rte *new, struct rte_src *src)
}
recalc:
rte_hide_dummy_routes(net, &dummy);
rte_recalculate(c, net, new, src);
rte_unhide_dummy_routes(net, &dummy);
rte_hide_dummy_routes(nn, &dummy);
rte_recalculate(c, nn, new, src);
rte_unhide_dummy_routes(nn, &dummy);
rte_update_unlock();
return;

View File

@ -1,5 +1,4 @@
source=bfd.c packets.c io.c
root-rel=../../
dir-name=proto/bfd
include ../../Rules
src := bfd.c io.c packets.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -12,7 +12,7 @@
#include "lib/resource.h"
#include "lib/event.h"
#include "lib/socket.h"
// #include "lib/timer.h"
// #include "sysdep/unix/timer.h"
typedef struct timer2

View File

@ -1,5 +1,4 @@
source=bgp.c attrs.c packets.c
root-rel=../../
dir-name=proto/bgp
include ../../Rules
src := attrs.c bgp.c packets.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -1,5 +1,4 @@
source=ospf.c topology.c packet.c hello.c neighbor.c iface.c dbdes.c lsreq.c lsupd.c lsack.c lsalib.c rt.c
root-rel=../../
dir-name=proto/ospf
include ../../Rules
src := dbdes.c hello.c iface.c lsack.c lsalib.c lsreq.c lsupd.c neighbor.c ospf.c packet.c rt.c topology.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -18,7 +18,7 @@
#include "lib/lists.h"
#include "lib/slists.h"
#include "lib/socket.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
#include "lib/resource.h"
#include "nest/protocol.h"
#include "nest/iface.h"

View File

@ -1973,7 +1973,6 @@ again1:
if (reload || ort_changed(nf, &a0))
{
net *ne = net_get(p->p.main_channel->table, nf->fn.addr);
rta *a = rta_lookup(&a0);
rte *e = rte_get_temp(a);
@ -1984,11 +1983,10 @@ again1:
e->u.ospf.tag = nf->old_tag = nf->n.tag;
e->u.ospf.router_id = nf->old_rid = nf->n.rid;
e->pflags = 0;
e->net = ne;
DBG("Mod rte type %d - %N via %I on iface %s, met %d\n",
a0.source, nf->fn.addr, a0.gw, a0.iface ? a0.iface->name : "(none)", nf->n.metric1);
rte_update(&p->p, ne, e);
rte_update(&p->p, nf->fn.addr, e);
}
}
else if (nf->old_rta)
@ -1997,8 +1995,7 @@ again1:
rta_free(nf->old_rta);
nf->old_rta = NULL;
net *ne = net_get(p->p.main_channel->table, nf->fn.addr);
rte_update(&p->p, ne, NULL);
rte_update(&p->p, nf->fn.addr, NULL);
}
/* Remove unused rt entry, some special entries are persistent */

View File

@ -1,6 +1,4 @@
source=pipe.c
root-rel=../../
dir-name=proto/pipe
include ../../Rules
src := pipe.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -50,7 +50,6 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
struct channel *dst = (src_ch == p->pri) ? p->sec : p->pri;
struct rte_src *src;
net *nn;
rte *e;
rta a;
@ -64,7 +63,6 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
return;
}
nn = net_get(dst->table, n->n.addr);
if (new)
{
memcpy(&a, new->attrs, sizeof(rta));
@ -73,7 +71,6 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
a.eattrs = attrs;
a.hostentry = NULL;
e = rte_get_temp(&a);
e->net = nn;
e->pflags = 0;
/* Copy protocol specific embedded attributes. */
@ -90,7 +87,7 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
}
src_ch->table->pipe_busy = 1;
rte_update2(dst, nn, e, src);
rte_update2(dst, n->n.addr, e, src);
src_ch->table->pipe_busy = 0;
}

View File

@ -1,5 +1,4 @@
source=radv.c packets.c
root-rel=../../
dir-name=proto/radv
include ../../Rules
src := packets.c radv.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -13,7 +13,7 @@
#include "lib/ip.h"
#include "lib/lists.h"
#include "lib/socket.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
#include "lib/resource.h"
#include "nest/protocol.h"
#include "nest/iface.h"

View File

@ -1,5 +1,4 @@
source=rip.c packets.c
root-rel=../../
dir-name=proto/rip
include ../../Rules
src := packets.c rip.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -143,8 +143,6 @@ rip_announce_rte(struct rip_proto *p, struct rip_entry *en)
if (rt)
{
/* Update */
net *n = net_get(p->p.main_channel->table, en->n.addr);
rta a0 = {
.src = p->p.main_source,
.source = RTS_RIP,
@ -204,16 +202,14 @@ rip_announce_rte(struct rip_proto *p, struct rip_entry *en)
e->u.rip.metric = rt_metric;
e->u.rip.tag = rt_tag;
e->net = n;
e->pflags = 0;
rte_update(&p->p, n, e);
rte_update(&p->p, en->n.addr, e);
}
else
{
/* Withdraw */
net *n = net_find(p->p.main_channel->table, en->n.addr);
rte_update(&p->p, n, NULL);
rte_update(&p->p, en->n.addr, NULL);
}
}

View File

@ -24,7 +24,7 @@
#include "lib/resource.h"
#include "lib/socket.h"
#include "lib/string.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
#define RIP_V1 1

View File

@ -1,6 +1,4 @@
source=static.c
root-rel=../../
dir-name=proto/static
include ../../Rules
src := static.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)

View File

@ -60,7 +60,6 @@ p_igp_table(struct proto *p)
static void
static_install(struct proto *p, struct static_route *r, struct iface *ifa)
{
net *n;
rta a;
rte *e;
@ -112,15 +111,13 @@ static_install(struct proto *p, struct static_route *r, struct iface *ifa)
/* We skip rta_lookup() here */
n = net_get(p->main_channel->table, r->net);
e = rte_get_temp(&a);
e->net = n;
e->pflags = 0;
if (r->cmds)
f_eval_rte(r->cmds, &e, static_lp);
rte_update(p, n, e);
rte_update(p, r->net, e);
r->installed = 1;
if (r->cmds)
@ -130,14 +127,11 @@ static_install(struct proto *p, struct static_route *r, struct iface *ifa)
static void
static_remove(struct proto *p, struct static_route *r)
{
net *n;
if (!r->installed)
return;
DBG("Removing static route %N via %I\n", r->net, r->via);
n = net_find(p->main_channel->table, r->net);
rte_update(p, n, NULL);
rte_update(p, r->net, NULL);
r->installed = 0;
}

5
sysdep/bsd/Makefile Normal file
View File

@ -0,0 +1,5 @@
src := krt-sock.c
obj := $(src-o-files)
$(all-daemon)
$(conf-y-targets): $(s)krt-sock.Y

View File

@ -1,4 +0,0 @@
krt-sock.c
krt-sock.Y
krt-sys.h
sysio.h

View File

@ -28,9 +28,9 @@
#include "nest/route.h"
#include "nest/protocol.h"
#include "nest/iface.h"
#include "lib/timer.h"
#include "lib/unix.h"
#include "lib/krt.h"
#include "sysdep/unix/timer.h"
#include "sysdep/unix/unix.h"
#include "sysdep/unix/krt.h"
#include "lib/string.h"
#include "lib/socket.h"

View File

@ -15,6 +15,9 @@
#define CONFIG_NO_IFACE_BIND
#define CONFIG_USE_HDRINCL
#define CONFIG_INCLUDE_SYSIO_H "sysdep/bsd/sysio.h"
#define CONFIG_INCLUDE_KRTSYS_H "sysdep/bsd/krt-sys.h"
/*
Link: sysdep/unix
Link: sysdep/bsd

View File

@ -14,7 +14,12 @@
#define CONFIG_MC_PROPER_SRC
#define CONFIG_UNIX_DONTROUTE
#define CONFIG_INCLUDE_SYSIO_H "sysdep/linux/sysio.h"
#define CONFIG_INCLUDE_KRTSYS_H "sysdep/linux/krt-sys.h"
#define CONFIG_RESTRICTED_PRIVILEGES
#define CONFIG_INCLUDE_SYSPRIV_H "sysdep/linux/syspriv.h"
/*
Link: sysdep/linux

4
sysdep/linux/Makefile Normal file
View File

@ -0,0 +1,4 @@
src := netlink.c
obj := $(src-o-files)
$(all-daemon)
$(conf-y-targets): $(s)netlink.Y

View File

@ -1,5 +0,0 @@
krt-sys.h
netlink.c
netlink.Y
sysio.h
syspriv.h

View File

@ -6,6 +6,7 @@
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#include <alloca.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
@ -20,9 +21,9 @@
#include "nest/protocol.h"
#include "nest/iface.h"
#include "lib/alloca.h"
#include "lib/timer.h"
#include "lib/unix.h"
#include "lib/krt.h"
#include "sysdep/unix/timer.h"
#include "sysdep/unix/unix.h"
#include "sysdep/unix/krt.h"
#include "lib/socket.h"
#include "lib/string.h"
#include "lib/hash.h"
@ -915,44 +916,49 @@ nl_send_route(struct krt_proto *p, rte *e, struct ea_list *eattrs, int new)
eattr *ea;
net *net = e->net;
rta *a = e->attrs;
int bufsize = 128 + KRT_METRICS_MAX*8 + nh_bufsize(a->nexthops);
struct {
struct nlmsghdr h;
struct rtmsg r;
char buf[128 + KRT_METRICS_MAX*8 + nh_bufsize(a->nexthops)];
} r;
char buf[0];
} *r;
int rsize = sizeof(*r) + bufsize;
r = alloca(rsize);
DBG("nl_send_route(%N,new=%d)\n", net->n.addr, new);
bzero(&r.h, sizeof(r.h));
bzero(&r.r, sizeof(r.r));
r.h.nlmsg_type = new ? RTM_NEWROUTE : RTM_DELROUTE;
r.h.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
r.h.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | (new ? NLM_F_CREATE|NLM_F_EXCL : 0);
bzero(&r->h, sizeof(r->h));
bzero(&r->r, sizeof(r->r));
r->h.nlmsg_type = new ? RTM_NEWROUTE : RTM_DELROUTE;
r->h.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
r->h.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | (new ? NLM_F_CREATE|NLM_F_EXCL : 0);
r.r.rtm_family = p->af;
r.r.rtm_dst_len = net_pxlen(net->n.addr);
r.r.rtm_protocol = RTPROT_BIRD;
r.r.rtm_scope = RT_SCOPE_UNIVERSE;
nl_add_attr_ipa(&r.h, sizeof(r), RTA_DST, net_prefix(net->n.addr));
r->r.rtm_family = p->af;
r->r.rtm_dst_len = net_pxlen(net->n.addr);
r->r.rtm_protocol = RTPROT_BIRD;
r->r.rtm_scope = RT_SCOPE_UNIVERSE;
nl_add_attr_ipa(&r->h, rsize, RTA_DST, net_prefix(net->n.addr));
if (krt_table_id(p) < 256)
r.r.rtm_table = krt_table_id(p);
r->r.rtm_table = krt_table_id(p);
else
nl_add_attr_u32(&r.h, sizeof(r), RTA_TABLE, krt_table_id(p));
nl_add_attr_u32(&r->h, rsize, RTA_TABLE, krt_table_id(p));
/* For route delete, we do not specify route attributes */
if (!new)
return nl_exchange(&r.h);
return nl_exchange(&r->h);
if (ea = ea_find(eattrs, EA_KRT_METRIC))
nl_add_attr_u32(&r.h, sizeof(r), RTA_PRIORITY, ea->u.data);
nl_add_attr_u32(&r->h, rsize, RTA_PRIORITY, ea->u.data);
if (ea = ea_find(eattrs, EA_KRT_PREFSRC))
nl_add_attr_ipa(&r.h, sizeof(r), RTA_PREFSRC, *(ip_addr *)ea->u.ptr->data);
nl_add_attr_ipa(&r->h, rsize, RTA_PREFSRC, *(ip_addr *)ea->u.ptr->data);
if (ea = ea_find(eattrs, EA_KRT_REALM))
nl_add_attr_u32(&r.h, sizeof(r), RTA_FLOW, ea->u.data);
nl_add_attr_u32(&r->h, rsize, RTA_FLOW, ea->u.data);
u32 metrics[KRT_METRICS_MAX];
@ -967,7 +973,7 @@ nl_send_route(struct krt_proto *p, rte *e, struct ea_list *eattrs, int new)
}
if (metrics[0])
nl_add_metrics(&r.h, sizeof(r), metrics, KRT_METRICS_MAX);
nl_add_metrics(&r->h, rsize, metrics, KRT_METRICS_MAX);
/* a->iface != NULL checked in krt_capable() for router and device routes */
@ -975,32 +981,32 @@ nl_send_route(struct krt_proto *p, rte *e, struct ea_list *eattrs, int new)
switch (a->dest)
{
case RTD_ROUTER:
r.r.rtm_type = RTN_UNICAST;
nl_add_attr_u32(&r.h, sizeof(r), RTA_OIF, a->iface->index);
nl_add_attr_ipa(&r.h, sizeof(r), RTA_GATEWAY, a->gw);
r->r.rtm_type = RTN_UNICAST;
nl_add_attr_u32(&r->h, rsize, RTA_OIF, a->iface->index);
nl_add_attr_ipa(&r->h, rsize, RTA_GATEWAY, a->gw);
break;
case RTD_DEVICE:
r.r.rtm_type = RTN_UNICAST;
nl_add_attr_u32(&r.h, sizeof(r), RTA_OIF, a->iface->index);
r->r.rtm_type = RTN_UNICAST;
nl_add_attr_u32(&r->h, rsize, RTA_OIF, a->iface->index);
break;
case RTD_BLACKHOLE:
r.r.rtm_type = RTN_BLACKHOLE;
r->r.rtm_type = RTN_BLACKHOLE;
break;
case RTD_UNREACHABLE:
r.r.rtm_type = RTN_UNREACHABLE;
r->r.rtm_type = RTN_UNREACHABLE;
break;
case RTD_PROHIBIT:
r.r.rtm_type = RTN_PROHIBIT;
r->r.rtm_type = RTN_PROHIBIT;
break;
case RTD_MULTIPATH:
r.r.rtm_type = RTN_UNICAST;
nl_add_multipath(&r.h, sizeof(r), a->nexthops);
r->r.rtm_type = RTN_UNICAST;
nl_add_multipath(&r->h, rsize, a->nexthops);
break;
default:
bug("krt_capable inconsistent with nl_send_route");
}
return nl_exchange(&r.h);
return nl_exchange(&r->h);
}
void

5
sysdep/unix/Makefile Normal file
View File

@ -0,0 +1,5 @@
src := io.c krt.c log.c main.c random.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)
$(conf-y-targets): $(s)krt.Y

View File

@ -1,12 +0,0 @@
log.c
main.c
timer.h
io.c
unix.h
endian.h
config.Y
random.c
krt.c
krt.h
krt.Y

View File

@ -8,7 +8,7 @@
CF_HDR
#include "lib/unix.h"
#include "sysdep/unix/unix.h"
#include <stdio.h>
CF_DECLS

View File

@ -32,14 +32,14 @@
#include "nest/bird.h"
#include "lib/lists.h"
#include "lib/resource.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
#include "lib/socket.h"
#include "lib/event.h"
#include "lib/string.h"
#include "nest/iface.h"
#include "lib/unix.h"
#include "lib/sysio.h"
#include "sysdep/unix/unix.h"
#include CONFIG_INCLUDE_SYSIO_H
/* Maximum number of calls of tx handler for one socket in one
* poll iteration. Should be small enough to not monopolize CPU by

View File

@ -8,7 +8,7 @@
CF_HDR
#include "lib/krt.h"
#include "sysdep/unix/krt.h"
CF_DEFINES

View File

@ -56,7 +56,7 @@
#include "nest/route.h"
#include "nest/protocol.h"
#include "filter/filter.h"
#include "lib/timer.h"
#include "sysdep/unix/timer.h"
#include "conf/conf.h"
#include "lib/string.h"
@ -345,18 +345,15 @@ krt_learn_announce_update(struct krt_proto *p, rte *e)
net *n = e->net;
rta *aa = rta_clone(e->attrs);
rte *ee = rte_get_temp(aa);
net *nn = net_get(p->p.main_channel->table, n->n.addr);
ee->net = nn;
ee->pflags = 0;
ee->u.krt = e->u.krt;
rte_update(&p->p, nn, ee);
rte_update(&p->p, n->n.addr, ee);
}
static void
krt_learn_announce_delete(struct krt_proto *p, net *n)
{
n = net_find(p->p.main_channel->table, n->n.addr);
rte_update(&p->p, n, NULL);
rte_update(&p->p, n->n.addr, NULL);
}
/* Called when alien route is discovered during scan */

View File

@ -15,7 +15,8 @@ struct krt_proto;
struct kif_config;
struct kif_proto;
#include "lib/krt-sys.h"
#include "sysdep/config.h"
#include CONFIG_INCLUDE_KRTSYS_H
/* Flags stored in net->n.flags, rest are in nest/route.h */
@ -111,7 +112,7 @@ struct kif_proto {
struct kif_state sys; /* Sysdep state */
};
struct kif_proto *kif_proto;
extern struct kif_proto *kif_proto;
#define KIF_CF ((struct kif_config *)p->p.cf)

View File

@ -26,7 +26,7 @@
#include "nest/mrtdump.h"
#include "lib/string.h"
#include "lib/lists.h"
#include "lib/unix.h"
#include "sysdep/unix/unix.h"
static FILE *dbgf;
static list *current_log_list;

View File

@ -69,7 +69,7 @@ async_dump(void)
*/
#ifdef CONFIG_RESTRICTED_PRIVILEGES
#include "lib/syspriv.h"
#include CONFIG_INCLUDE_SYSPRIV_H
#else
static inline void
@ -569,6 +569,10 @@ sysdep_shutdown_done(void)
* Signals
*/
volatile int async_config_flag;
volatile int async_dump_flag;
volatile int async_shutdown_flag;
static void
handle_sighup(int sig UNUSED)
{

View File

@ -91,9 +91,9 @@ int sockaddr_read(sockaddr *sa, int af, ip_addr *a, struct iface **ifa, uint *po
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) + strlen ((ptr)->sun_path))
#endif
volatile int async_config_flag;
volatile int async_dump_flag;
volatile int async_shutdown_flag;
extern volatile int async_config_flag;
extern volatile int async_dump_flag;
extern volatile int async_shutdown_flag;
void io_init(void);
void io_loop(void);

View File

@ -1,20 +0,0 @@
# Makefile for in place build of BIRD
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
objdir=@objdir@
all depend tags install install-docs:
$(MAKE) -C $(objdir) $@
docs userdocs progdocs:
$(MAKE) -C doc $@
clean:
$(MAKE) -C $(objdir) clean
find . -name "*~" -or -name "*.[oa]" -or -name "\#*\#" -or -name TAGS -or -name core -or -name depend -or -name ".#*" | xargs rm -f
distclean: clean
$(MAKE) -C doc distclean
rm -rf $(objdir) autom4te.cache
rm -f config.* configure sysdep/autoconf.h sysdep/paths.h Makefile

View File

@ -1,97 +0,0 @@
# Makefile for the BIRD Internet Routing Daemon
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
include Rules
.PHONY: all daemon birdc birdcl subdir depend clean distclean tags docs userdocs progdocs
all: sysdep/paths.h .dep-stamp subdir daemon birdcl @CLIENT@
daemon: $(exedir)/bird
birdc: $(exedir)/birdc
birdcl: $(exedir)/birdcl
bird-dep := $(addsuffix /all.o, $(static-dirs)) conf/all.o lib/birdlib.a
$(bird-dep): sysdep/paths.h .dep-stamp subdir
birdc-dep := client/birdc.o client/all.o lib/birdlib.a
$(birdc-dep): sysdep/paths.h .dep-stamp subdir
birdcl-dep := client/birdcl.o client/all.o lib/birdlib.a
$(birdcl-dep): sysdep/paths.h .dep-stamp subdir
export client := @CLIENT@
depend: sysdep/paths.h .dir-stamp
set -e ; for a in $(dynamic-dirs) ; do $(MAKE) -C $$a $@ ; done
set -e ; for a in $(static-dirs) $(client-dirs) ; do $(MAKE) -C $$a -f $(srcdir_abs)/$$a/Makefile $@ ; done
subdir: sysdep/paths.h .dir-stamp .dep-stamp
set -e ; for a in $(dynamic-dirs) ; do $(MAKE) -C $$a $@ ; done
set -e ; for a in $(static-dirs) $(client-dirs) ; do $(MAKE) -C $$a -f $(srcdir_abs)/$$a/Makefile $@ ; done
$(exedir)/bird: $(bird-dep)
@echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
@$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
$(exedir)/birdc: $(birdc-dep)
@echo LD $(LDFLAGS) -o $@ $^ $(LIBS) $(CLIENT_LIBS)
@$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(CLIENT_LIBS)
$(exedir)/birdcl: $(birdcl-dep)
@echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
@$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
.dir-stamp: sysdep/paths.h
mkdir -p $(static-dirs) $(client-dirs) $(doc-dirs)
touch .dir-stamp
.dep-stamp:
$(MAKE) depend
touch .dep-stamp
docs: userdocs progdocs
userdocs progdocs: .dir-stamp
$(MAKE) -C doc -f $(srcdir_abs)/doc/Makefile $@
sysdep/paths.h:
echo >sysdep/paths.h "/* Generated by Makefile, don't edit manually! */"
echo >>sysdep/paths.h "#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
echo >>sysdep/paths.h "#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
if test -n "@iproutedir@" ; then echo >>sysdep/paths.h "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
tags:
cd $(srcdir) ; etags -lc `find $(static-dirs) $(addprefix $(objdir)/,$(dynamic-dirs)) $(client-dirs) -name *.[chY]`
install: all
$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/@runtimedir@
$(INSTALL_PROGRAM) $(exedir)/bird $(DESTDIR)/$(sbindir)/bird
$(INSTALL_PROGRAM) $(exedir)/birdcl $(DESTDIR)/$(sbindir)/birdcl
if test -n "@CLIENT@" ; then \
$(INSTALL_PROGRAM) $(exedir)/birdc $(DESTDIR)/$(sbindir)/birdc ; \
fi
if ! test -f $(DESTDIR)/@CONFIG_FILE@ ; then \
$(INSTALL_DATA) $(srcdir)/doc/bird.conf.example $(DESTDIR)/@CONFIG_FILE@ ; \
else \
echo "Not overwriting old bird.conf" ; \
fi
install-docs:
$(INSTALL) -d $(DESTDIR)/$(docdir)
$(INSTALL_DATA) $(srcdir)/doc/{bird,prog}{,-*}.html $(DESTDIR)/$(docdir)/
clean:
find . -name "*.[oa]" -o -name core -o -name depend -o -name "*.html" | xargs rm -f
rm -f conf/cf-lex.c conf/cf-parse.* conf/commands.h conf/keywords.h
rm -f $(exedir)/bird $(exedir)/birdcl $(exedir)/birdc $(exedir)/bird.ctl $(exedir)/bird6.ctl .dep-stamp
distclean: clean
rm -f config.* configure sysdep/autoconf.h sysdep/paths.h Makefile Rules
rm -rf .dir-stamp $(clean-dirs)

View File

@ -1,91 +0,0 @@
# Makefile fragments for the BIRD Internet Routing Daemon
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
srcdir=@srcdir_rel_mf@
srcdir_abs := $(shell cd $(srcdir) ; pwd)
objdir=@objdir@
exedir=@exedir@
protocols=@protocols@
static-dirs := nest filter $(addprefix proto/,$(protocols))
static-dir-paths := $(addprefix $(srcdir)/,$(static-dirs))
dynamic-dirs := lib conf
dynamic-dir-paths := $(dynamic-dirs)
client-dirs := client
client-dir-paths := $(client-dirs)
doc-dirs := doc
doc-dir-paths := $(doc-dirs)
all-dirs:=$(static-dirs) $(dynamic-dirs) $(client-dirs) $(doc-dirs)
clean-dirs:=$(all-dirs) proto sysdep
CPPFLAGS=-I$(root-rel) -I$(srcdir) @CPPFLAGS@
CFLAGS=$(CPPFLAGS) @CFLAGS@
LDFLAGS=@LDFLAGS@
LIBS=@LIBS@
CLIENT_LIBS=@CLIENT_LIBS@
CC=@CC@
M4=@M4@
BISON=@BISON@
FLEX=@FLEX@
RANLIB=@RANLIB@
INSTALL=@INSTALL@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
INSTALL_DATA=@INSTALL_DATA@
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
sbindir=@sbindir@
sysconfdir=@sysconfdir@
localstatedir=@localstatedir@
docdir=@prefix@/doc
ifdef source
objs := $(subst .c,.o,$(source))
ifdef dir-name
src-path := $(srcdir)/$(dir-name)/
endif
all:
cd $(root-rel) && make
ifdef lib-dest
subdir: $(lib-dest)
$(lib-dest): $(objs)
rm -f $@
ar rcs $@ $^
$(RANLIB) $@
else
subdir: all.o
all.o: $(objs)
# $(LD) -r -o $@ $^
# Changed to $(CC) because $(LD) has problems with crosscompiling
@echo LD -r -o $@ $^
@$(CC) -nostdlib -r -o $@ $^
endif
%.o: $(src-path)%.c
@echo CC -o $@ -c $<
@$(CC) $(CFLAGS) -o $@ -c $<
ifndef source-dep
source-dep := $(source)
endif
depend:
$(CC) $(CPPFLAGS) -MM $(addprefix $(src-path),$(source-dep)) >depend
ifneq ($(wildcard depend),)
include depend
endif
endif

View File

@ -1,63 +0,0 @@
#!/bin/sh
if [ -z "$4" ] ; then
echo "Usage: mergedirs <src-dir> <src-dir-rel> <obj-dir> <list-of-dirs>"
exit 1
fi
cpp=${CPP:-cc -E}
SRCDIR=$1
shift
SRCREL=$1
case $SRCDIR in
/*) ;;
*) SRCREL="../$SRCREL" ;;
esac
shift
OBJDIR=$1
LIBDIR=$OBJDIR/lib
CONFDIR=$OBJDIR/conf
shift
echo "Merging system-dependent modules ($@)"
MODULES=`for a in $@ ; do
cat $SRCDIR/sysdep/config.h $SRCDIR/$a/Modules |
$cpp -U unix -D MACROS_ONLY -I $OBJDIR - |
sed "/^[ ]*\$/d;/^#/d;s@\\(.*\\)@\\1 $a/\\1@"
done |
sort -k1,1 -u |
cut -d ' ' -f 2`
rm -rf $LIBDIR $CONFDIR
mkdir -p $LIBDIR $CONFDIR
for a in $MODULES ; do
b=`basename $a`
case $b in
*.h) ln -s $SRCREL/$a $LIBDIR/$b
;;
*.c) OBJ=`echo $b | sed 's/\.c$/\.o/'`
OBJS="$OBJS $OBJ"
SRCS="$SRCS \\
$b"
ln -s $SRCREL/$a $LIBDIR/$b
;;
*.Y) CONFS="$CONFS\$(srcdir)/$a "
ln -s $SRCREL/$a $CONFDIR/$b
;;
*) echo "$b: Unknown file type"
exit 1
;;
esac
done
cat >$LIBDIR/Makefile <<EOF
source=$SRCS
lib-dest=birdlib.a
root-rel=../
include ../Rules
EOF
sed <$SRCDIR/conf/Makefile >$CONFDIR/Makefile "s|@CONFS@|$CONFS|"
CONFS=`cd $SRCDIR ; ls conf/*.[chl]`
for a in $CONFS ; do
ln -s $SRCREL/$a $CONFDIR/
done

View File

@ -1,17 +1,18 @@
#!/usr/bin/perl
$srcdir = $ARGV[0];
$out = $ARGV[1];
open(OUT, ">prog.sgml") || die "Cannot create output file";
include("doc/prog-head.sgml");
process("");
include("doc/prog-foot.sgml");
open(OUT, ">", $out) || die "Cannot create output file";
process($srcdir);
close OUT;
gen_deps();
exit 0;
sub include {
my $f = shift @_;
open(IN, "$srcdir/$f") || die "Unable to find $f";
open(IN, "$f") || die "Unable to find $f";
push(@deps, "$f");
while (<IN>) {
print OUT;
}
@ -21,7 +22,8 @@ sub include {
sub process {
my $dir = shift @_;
print "$dir/Doc\n";
open(IN, "$srcdir/$dir/Doc") || die "Unable to read $dir/Doc";
open(IN, "$dir/Doc") || die "Unable to read $dir/Doc";
push(@deps, "$dir/Doc");
my @docfile = <IN>;
close IN;
foreach $_ (@docfile) {
@ -36,7 +38,10 @@ sub process {
print OUT "<chapt>$arg\n";
} elsif ($cmd eq "S") {
print " $arg\n";
open(DOC, "cd $srcdir/$dir ; $srcdir/doc/kernel-doc -bird $arg |") || die "Unable to start kernel-doc";
my @files = map("$dir/$_", split(' ', $arg));
my $fargs = join(' ', @files);
open(DOC, "$srcdir/doc/kernel-doc -bird $fargs |") || die "Unable to start kernel-doc";
push(@deps, @files);
while (<DOC>) { print OUT; }
close DOC;
} elsif ($cmd eq "D") {
@ -45,3 +50,17 @@ sub process {
} else { die "Unknown command: $cmd"; }
}
}
sub gen_deps {
open(DEP, ">", "$out.d");
print DEP "$out:";
foreach $f (@deps) {
print DEP " \\\n $f";
}
print DEP "\n\n";
foreach $f (@deps) {
print DEP "$f:\n\n";
}
close DEP;
}