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:
commit
0c6dfe5236
2
Doc
2
Doc
@ -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
156
Makefile.in
Normal 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
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
#define _BIRD_CONF_H_
|
||||
|
||||
#include "lib/resource.h"
|
||||
#include "lib/timer.h"
|
||||
#include "sysdep/unix/timer.h"
|
||||
|
||||
|
||||
/* Configuration structure */
|
||||
|
@ -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"
|
||||
|
32
configure.in
32
configure.in
@ -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:
|
||||
|
@ -372,6 +372,8 @@ sub process_file
|
||||
}
|
||||
}
|
||||
#
|
||||
|
||||
local $ENV{PATH} = "$ENV{PATH}:/usr/lib/linuxdoc-tools";
|
||||
my($precmd) = "|sgmlpre output=$global->{format} $global->{define}";
|
||||
|
||||
#
|
||||
|
68
doc/Makefile
68
doc/Makefile
@ -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))
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
2
lib/Doc
2
lib/Doc
@ -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
7
lib/Makefile
Normal 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)
|
36
lib/Modules
36
lib/Modules
@ -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
|
@ -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 */
|
||||
|
||||
|
2
lib/ip.h
2
lib/ip.h
@ -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"
|
||||
|
@ -17,7 +17,7 @@
|
||||
* if possible.
|
||||
*/
|
||||
|
||||
#include "lib/endian.h"
|
||||
#include "sysdep/unix/endian.h"
|
||||
#include "lib/string.h"
|
||||
|
||||
static inline u16
|
||||
|
@ -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)
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
#ifndef PASSWORD_H
|
||||
#define PASSWORD_H
|
||||
#include "lib/timer.h"
|
||||
#include "sysdep/unix/timer.h"
|
||||
|
||||
struct password_item {
|
||||
node n;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
5
sysdep/bsd/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
src := krt-sock.c
|
||||
obj := $(src-o-files)
|
||||
$(all-daemon)
|
||||
$(conf-y-targets): $(s)krt-sock.Y
|
||||
|
@ -1,4 +0,0 @@
|
||||
krt-sock.c
|
||||
krt-sock.Y
|
||||
krt-sys.h
|
||||
sysio.h
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
4
sysdep/linux/Makefile
Normal file
@ -0,0 +1,4 @@
|
||||
src := netlink.c
|
||||
obj := $(src-o-files)
|
||||
$(all-daemon)
|
||||
$(conf-y-targets): $(s)netlink.Y
|
@ -1,5 +0,0 @@
|
||||
krt-sys.h
|
||||
netlink.c
|
||||
netlink.Y
|
||||
sysio.h
|
||||
syspriv.h
|
@ -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
5
sysdep/unix/Makefile
Normal 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
|
@ -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
|
@ -8,7 +8,7 @@
|
||||
|
||||
CF_HDR
|
||||
|
||||
#include "lib/unix.h"
|
||||
#include "sysdep/unix/unix.h"
|
||||
#include <stdio.h>
|
||||
|
||||
CF_DECLS
|
||||
|
@ -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
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
CF_HDR
|
||||
|
||||
#include "lib/krt.h"
|
||||
#include "sysdep/unix/krt.h"
|
||||
|
||||
CF_DEFINES
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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)
|
@ -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
|
@ -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
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user