Merge branch 'int-new' into int-new-merged
This commit is contained in:
commit
0c6dfe5236
64 changed files with 429 additions and 586 deletions
2
Doc
2
Doc
|
@ -1,3 +1,4 @@
|
||||||
|
D doc/prog-head.sgml
|
||||||
C doc
|
C doc
|
||||||
C nest
|
C nest
|
||||||
C conf
|
C conf
|
||||||
|
@ -5,3 +6,4 @@ C filter
|
||||||
C proto
|
C proto
|
||||||
C sysdep
|
C sysdep
|
||||||
C lib
|
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
|
src := commands.c util.c client.c
|
||||||
root-rel=../
|
obj := $(src-o-files)
|
||||||
dir-name=client
|
|
||||||
|
|
||||||
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
|
src := cf-parse.tab.c cf-lex.c conf.c
|
||||||
root-rel=../
|
obj := $(src-o-files)
|
||||||
|
|
||||||
include ../Rules
|
$(all-daemon)
|
||||||
|
|
||||||
conf-src=$(srcdir)/conf
|
|
||||||
conf-fragments=$(conf-src)/confbase.Y @CONFS@ $(addsuffix /config.Y,$(static-dir-paths))
|
|
||||||
|
|
||||||
ifdef DEBUG
|
ifdef DEBUG
|
||||||
BISON_DEBUG=-t
|
BISON_DEBUG=-t
|
||||||
#FLEX_DEBUG=-d
|
#FLEX_DEBUG=-d
|
||||||
endif
|
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
|
$(o)cf-parse.tab.c: $(o)cf-parse.y
|
||||||
$(BISON) -bcf-parse -dv -pcf_ $(BISON_DEBUG) cf-parse.y
|
echo $< $@ $(o)
|
||||||
|
$(BISON) -b$(@:.tab.c=) -dv -pcf_ $(BISON_DEBUG) $<
|
||||||
|
|
||||||
cf-parse.y: $(conf-fragments) $(conf-src)/gen_parser.m4
|
$(conf-y-targets): $(s)confbase.Y
|
||||||
$(M4) -P $(conf-src)/gen_parser.m4 $(conf-fragments) >cf-parse.y
|
$(M4) -P $| $^ >$@
|
||||||
|
|
||||||
keywords.h: $(conf-fragments) $(conf-src)/gen_keywords.m4
|
$(o)cf-parse.y: | $(s)gen_parser.m4
|
||||||
$(M4) -P $(conf-src)/gen_keywords.m4 $(conf-fragments) >keywords.h
|
$(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
|
$(o)cf-lex.c: $(s)cf-lex.l $(o)cf-parse.tab.h $(o)keywords.h $(o)commands.h
|
||||||
$(M4) -P $(conf-src)/gen_commands.m4 $(srcdir)/client/cmds.m4 $(conf-fragments) | sort >commands.h
|
$(FLEX) $(FLEX_DEBUG) -s -B -8 -o$@ -Pcf_ $<
|
||||||
|
|
||||||
cf-lex.c: 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
|
||||||
$(FLEX) $(FLEX_DEBUG) -s -B -8 -ocf-lex.c -Pcf_ cf-lex.l
|
|
||||||
|
|
||||||
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/resource.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
#include "lib/event.h"
|
#include "lib/event.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "conf/conf.h"
|
#include "conf/conf.h"
|
||||||
#include "filter/filter.h"
|
#include "filter/filter.h"
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#define _BIRD_CONF_H_
|
#define _BIRD_CONF_H_
|
||||||
|
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
|
|
||||||
|
|
||||||
/* Configuration structure */
|
/* Configuration structure */
|
||||||
|
|
|
@ -14,7 +14,7 @@ CF_HDR
|
||||||
#include "conf/conf.h"
|
#include "conf/conf.h"
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "lib/socket.h"
|
#include "lib/socket.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
#include "nest/protocol.h"
|
#include "nest/protocol.h"
|
||||||
#include "nest/iface.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
|
if test "$srcdir" = . ; then
|
||||||
# Building in current directory => create obj directory holding all objects
|
# Building in current directory => create obj directory holding all objects
|
||||||
objdir=obj
|
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
|
else
|
||||||
# Building in separate directory
|
# Building in separate directory
|
||||||
objdir=.
|
objdir=.
|
||||||
srcdir_rel=$srcdir
|
|
||||||
makefiles="Makefile:tools/Makefile.in Rules:tools/Rules.in"
|
|
||||||
exedir=.
|
|
||||||
fi
|
fi
|
||||||
case $srcdir_rel in
|
|
||||||
/*) srcdir_rel_mf=$srcdir_rel ;;
|
exedir=.
|
||||||
*) srcdir_rel_mf="\$(root-rel)$srcdir_rel" ;;
|
|
||||||
esac
|
|
||||||
AC_SUBST(objdir)
|
AC_SUBST(objdir)
|
||||||
AC_SUBST(exedir)
|
AC_SUBST(exedir)
|
||||||
AC_SUBST(srcdir_rel_mf)
|
AC_SUBST(srcdir)
|
||||||
AC_SUBST(runtimedir)
|
AC_SUBST(runtimedir)
|
||||||
|
|
||||||
|
|
||||||
|
@ -162,7 +154,7 @@ sysname=`echo $sysdesc | sed 's/\.h$//'`
|
||||||
AC_DEFINE_UNQUOTED(SYSCONF_INCLUDE, "$sysdesc")
|
AC_DEFINE_UNQUOTED(SYSCONF_INCLUDE, "$sysdesc")
|
||||||
|
|
||||||
AC_MSG_CHECKING([system-dependent directories])
|
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_MSG_RESULT($sysdep_dirs)
|
||||||
AC_SUBST(sysdep_dirs)
|
AC_SUBST(sysdep_dirs)
|
||||||
|
|
||||||
|
@ -234,10 +226,10 @@ if test "$enable_debug" = yes ; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CLIENT=
|
CLIENT=birdcl
|
||||||
CLIENT_LIBS=
|
CLIENT_LIBS=
|
||||||
if test "$enable_client" = yes ; then
|
if test "$enable_client" = yes ; then
|
||||||
CLIENT=birdc
|
CLIENT="$CLIENT birdc"
|
||||||
AC_CHECK_LIB(history, add_history, CLIENT_LIBS="-lhistory")
|
AC_CHECK_LIB(history, add_history, CLIENT_LIBS="-lhistory")
|
||||||
AC_CHECK_LIB(ncurses, tgetent, USE_TERMCAP_LIB=-lncurses,
|
AC_CHECK_LIB(ncurses, tgetent, USE_TERMCAP_LIB=-lncurses,
|
||||||
AC_CHECK_LIB(curses, tgetent, USE_TERMCAP_LIB=-lcurses,
|
AC_CHECK_LIB(curses, tgetent, USE_TERMCAP_LIB=-lcurses,
|
||||||
|
@ -255,17 +247,9 @@ AC_SUBST(CLIENT_LIBS)
|
||||||
|
|
||||||
mkdir -p $objdir/sysdep
|
mkdir -p $objdir/sysdep
|
||||||
AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in])
|
AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in])
|
||||||
AC_CONFIG_COMMANDS([merge],[[export CPP="$CPP"
|
AC_CONFIG_FILES(Makefile:Makefile.in)
|
||||||
$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_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
rm -f $objdir/sysdep/paths.h
|
|
||||||
|
|
||||||
cat >&AC_FD_MSG <<EOF
|
cat >&AC_FD_MSG <<EOF
|
||||||
|
|
||||||
BIRD was configured with the following options:
|
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}";
|
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
|
# 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
|
docs: progdocs userdocs
|
||||||
progdocs: prog.html prog.ps
|
|
||||||
userdocs: bird.html bird.ps
|
|
||||||
|
|
||||||
prog.sgml:
|
doc-fmt = $(1): $(o)prog.$(1) $(o)bird.$(1)
|
||||||
$(srcdir)/tools/progdoc $(srcdir_abs)
|
$(call doc-fmt,html)
|
||||||
|
$(call doc-fmt,dvi)
|
||||||
|
$(call doc-fmt,ps)
|
||||||
|
$(call doc-fmt,pdf)
|
||||||
|
|
||||||
%.html: %.sgml
|
progdocs: $(o)prog.html $(o)prog.pdf
|
||||||
./sgml2html $<
|
userdocs: $(o)bird.html $(o)bird.pdf
|
||||||
|
progspell: $(o)prog.spell
|
||||||
|
|
||||||
%.dvi: %.tex
|
$(o)prog.sgml: $(srcdir)/tools/progdoc $(objdir)/.dir-stamp
|
||||||
latex $<
|
$(srcdir)/tools/progdoc $(srcdir) $@
|
||||||
latex $<
|
|
||||||
|
|
||||||
%.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 $@ $<
|
dvips -D600 -ta4 -o $@ $<
|
||||||
|
|
||||||
%.tex: %.sgml
|
$(o)%.pdf: $(o)%.ps
|
||||||
./sgml2latex --output=tex $<
|
ps2pdf $< $@
|
||||||
|
|
||||||
%.txt: %.sgml
|
$(o)%.tex: $(o)%.sgml
|
||||||
./sgml2txt $<
|
cd $(dir $@) && $(sgml2)latex --output=tex $(notdir $<)
|
||||||
|
|
||||||
progspell: prog.sgml
|
$(o)%.txt: $(o)%.sgml
|
||||||
sed -f prog-spell.sed <prog.sgml >prog.spell
|
cd $(dir $@) && $(sgml2)txt $(notdir $<)
|
||||||
ispell prog.spell
|
|
||||||
|
|
||||||
clean:
|
$(o)prog.spell: $(o)prog.sgml $(s)prog-spell.sed
|
||||||
rm -f *.tex *.dvi *.log *.txt *.aux *.toc *.spell
|
sed -f $(lastword $^) <$< >$@
|
||||||
rm -f prog.sgml
|
ispell $@
|
||||||
|
|
||||||
distclean: clean
|
$(call clean,prog.spell $(addprefix *.,html dvi ps pdf sgml tex txt aux log toc))
|
||||||
rm -f *.html *.ps
|
|
||||||
|
|
|
@ -17,8 +17,10 @@ use strict;
|
||||||
|
|
||||||
use vars qw($prefix $DataDir $BinDir $progs);
|
use vars qw($prefix $DataDir $BinDir $progs);
|
||||||
|
|
||||||
|
use FindBin;
|
||||||
|
|
||||||
$prefix = "/usr";
|
$prefix = "/usr";
|
||||||
$DataDir = "sbase";
|
$DataDir = "$FindBin::Bin/sbase";
|
||||||
$BinDir = "/usr/bin";
|
$BinDir = "/usr/bin";
|
||||||
|
|
||||||
use lib "/usr/share/linuxdoc-tools";
|
use lib "/usr/share/linuxdoc-tools";
|
||||||
|
@ -32,9 +34,9 @@ $progs = {
|
||||||
"GROFFMACRO" => "-ms",
|
"GROFFMACRO" => "-ms",
|
||||||
"AWK" => "/usr/share/linuxdoc-tools/awkwhich"
|
"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;
|
&LinuxDocTools::init;
|
||||||
|
|
||||||
my @FileList = LinuxDocTools::process_options ("html", @ARGV);
|
my @FileList = LinuxDocTools::process_options ("html", @ARGV);
|
||||||
|
|
|
@ -17,8 +17,10 @@ use strict;
|
||||||
|
|
||||||
use vars qw($prefix $DataDir $BinDir $progs);
|
use vars qw($prefix $DataDir $BinDir $progs);
|
||||||
|
|
||||||
|
use FindBin;
|
||||||
|
|
||||||
$prefix = "/usr";
|
$prefix = "/usr";
|
||||||
$DataDir = "sbase";
|
$DataDir = "$FindBin::Bin/sbase";
|
||||||
$BinDir = "/usr/bin";
|
$BinDir = "/usr/bin";
|
||||||
|
|
||||||
use lib "/usr/share/linuxdoc-tools";
|
use lib "/usr/share/linuxdoc-tools";
|
||||||
|
@ -32,9 +34,9 @@ $progs = {
|
||||||
"GROFFMACRO" => "-ms",
|
"GROFFMACRO" => "-ms",
|
||||||
"AWK" => "/usr/share/linuxdoc-tools/awkwhich"
|
"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;
|
&LinuxDocTools::init;
|
||||||
|
|
||||||
my @FileList = LinuxDocTools::process_options ("latex", @ARGV);
|
my @FileList = LinuxDocTools::process_options ("latex", @ARGV);
|
||||||
|
|
|
@ -17,8 +17,10 @@ use strict;
|
||||||
|
|
||||||
use vars qw($prefix $DataDir $BinDir $progs);
|
use vars qw($prefix $DataDir $BinDir $progs);
|
||||||
|
|
||||||
|
use FindBin;
|
||||||
|
|
||||||
$prefix = "/usr";
|
$prefix = "/usr";
|
||||||
$DataDir = "sbase";
|
$DataDir = "$FindBin::Bin/sbase";
|
||||||
$BinDir = "/usr/bin";
|
$BinDir = "/usr/bin";
|
||||||
|
|
||||||
use lib "/usr/share/linuxdoc-tools";
|
use lib "/usr/share/linuxdoc-tools";
|
||||||
|
@ -32,9 +34,9 @@ $progs = {
|
||||||
"GROFFMACRO" => "-ms",
|
"GROFFMACRO" => "-ms",
|
||||||
"AWK" => "/usr/share/linuxdoc-tools/awkwhich"
|
"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;
|
&LinuxDocTools::init;
|
||||||
|
|
||||||
my @FileList = LinuxDocTools::process_options ("txt", @ARGV);
|
my @FileList = LinuxDocTools::process_options ("txt", @ARGV);
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
source=f-util.c filter.c tree.c trie.c
|
src := filter.c f-util.c tree.c trie.c
|
||||||
root-rel=../
|
obj := $(src-o-files)
|
||||||
dir-name=filter
|
$(all-daemon)
|
||||||
|
$(cf-local)
|
||||||
include ../Rules
|
|
||||||
|
|
2
lib/Doc
2
lib/Doc
|
@ -1,5 +1,5 @@
|
||||||
H Library functions
|
H Library functions
|
||||||
S ip.c ipv4.c ipv6.c
|
S ip.c
|
||||||
S lists.c
|
S lists.c
|
||||||
S checksum.c bitops.c patmatch.c printf.c xmalloc.c tbf.c
|
S checksum.c bitops.c patmatch.c printf.c xmalloc.c tbf.c
|
||||||
D resource.sgml
|
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_
|
#ifndef _BIRD_BIRDLIB_H_
|
||||||
#define _BIRD_BIRDLIB_H_
|
#define _BIRD_BIRDLIB_H_
|
||||||
|
|
||||||
#include "timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "alloca.h"
|
#include "lib/alloca.h"
|
||||||
|
|
||||||
/* Ugly structure offset handling macros */
|
/* Ugly structure offset handling macros */
|
||||||
|
|
||||||
|
|
2
lib/ip.h
2
lib/ip.h
|
@ -9,7 +9,7 @@
|
||||||
#ifndef _BIRD_IP_H_
|
#ifndef _BIRD_IP_H_
|
||||||
#define _BIRD_IP_H_
|
#define _BIRD_IP_H_
|
||||||
|
|
||||||
#include "lib/endian.h"
|
#include "sysdep/unix/endian.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
#include "lib/bitops.h"
|
#include "lib/bitops.h"
|
||||||
#include "lib/unaligned.h"
|
#include "lib/unaligned.h"
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
* if possible.
|
* if possible.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "lib/endian.h"
|
#include "sysdep/unix/endian.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
|
|
||||||
static inline u16
|
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 \
|
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
|
||||||
a-path.c a-set.c
|
obj := $(src-o-files)
|
||||||
root-rel=../
|
$(all-daemon)
|
||||||
dir-name=nest
|
$(cf-local)
|
||||||
|
|
||||||
include ../Rules
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#ifndef PASSWORD_H
|
#ifndef PASSWORD_H
|
||||||
#define PASSWORD_H
|
#define PASSWORD_H
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
|
|
||||||
struct password_item {
|
struct password_item {
|
||||||
node n;
|
node n;
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "lib/lists.h"
|
#include "lib/lists.h"
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "lib/event.h"
|
#include "lib/event.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "nest/route.h"
|
#include "nest/route.h"
|
||||||
#include "conf/conf.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 */
|
/* 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;
|
extern list proto_list;
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
#include "lib/lists.h"
|
#include "lib/lists.h"
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
//#include "nest/protocol.h"
|
//#include "nest/protocol.h"
|
||||||
|
|
||||||
struct ea_list;
|
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_find(net *net, struct rte_src *src);
|
||||||
rte *rte_get_temp(struct rta *);
|
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 */
|
/* rte_update() moved to protocol.h to avoid dependency conflicts */
|
||||||
void rte_discard(rtable *tab, rte *old);
|
void rte_discard(rtable *tab, rte *old);
|
||||||
int rt_examine(rtable *t, net_addr *a, struct proto *p, struct filter *filter);
|
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)
|
if (flags & IF_CHANGE_DOWN)
|
||||||
{
|
{
|
||||||
net *n;
|
|
||||||
|
|
||||||
DBG("dev_if_notify: %s:%I going down\n", ad->iface->name, ad->ip);
|
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 */
|
/* Use iface ID as local source ID */
|
||||||
struct rte_src *src = rt_get_source(P, ad->iface->index);
|
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)
|
else if (flags & IF_CHANGE_UP)
|
||||||
{
|
{
|
||||||
rta *a;
|
rta *a;
|
||||||
net *n;
|
|
||||||
rte *e;
|
rte *e;
|
||||||
|
|
||||||
DBG("dev_if_notify: %s:%I going up\n", ad->iface->name, ad->ip);
|
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);
|
a = rta_lookup(&a0);
|
||||||
n = net_get(c->table, &ad->prefix);
|
|
||||||
e = rte_get_temp(a);
|
e = rte_get_temp(a);
|
||||||
e->net = n;
|
|
||||||
e->pflags = 0;
|
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
|
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 *p = c->proto;
|
||||||
struct proto_stats *stats = &c->stats;
|
struct proto_stats *stats = &c->stats;
|
||||||
struct filter *filter = c->in_filter;
|
struct filter *filter = c->in_filter;
|
||||||
ea_list *tmpa = NULL;
|
ea_list *tmpa = NULL;
|
||||||
rte *dummy = NULL;
|
rte *dummy = NULL;
|
||||||
|
net *nn;
|
||||||
|
|
||||||
ASSERT(c->channel_state == CS_UP);
|
ASSERT(c->channel_state == CS_UP);
|
||||||
|
|
||||||
rte_update_lock();
|
rte_update_lock();
|
||||||
if (new)
|
if (new)
|
||||||
{
|
{
|
||||||
|
nn = net_get(c->table, n);
|
||||||
|
|
||||||
|
new->net = nn;
|
||||||
new->sender = c;
|
new->sender = c;
|
||||||
|
|
||||||
if (!new->pref)
|
if (!new->pref)
|
||||||
|
@ -1333,7 +1337,7 @@ rte_update2(struct channel *c, net *net, rte *new, struct rte_src *src)
|
||||||
{
|
{
|
||||||
stats->imp_withdraws_received++;
|
stats->imp_withdraws_received++;
|
||||||
|
|
||||||
if (!net || !src)
|
if (!(nn = net_find(c->table, n)) || !src)
|
||||||
{
|
{
|
||||||
stats->imp_withdraws_ignored++;
|
stats->imp_withdraws_ignored++;
|
||||||
rte_update_unlock();
|
rte_update_unlock();
|
||||||
|
@ -1342,9 +1346,9 @@ rte_update2(struct channel *c, net *net, rte *new, struct rte_src *src)
|
||||||
}
|
}
|
||||||
|
|
||||||
recalc:
|
recalc:
|
||||||
rte_hide_dummy_routes(net, &dummy);
|
rte_hide_dummy_routes(nn, &dummy);
|
||||||
rte_recalculate(c, net, new, src);
|
rte_recalculate(c, nn, new, src);
|
||||||
rte_unhide_dummy_routes(net, &dummy);
|
rte_unhide_dummy_routes(nn, &dummy);
|
||||||
rte_update_unlock();
|
rte_update_unlock();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
source=bfd.c packets.c io.c
|
src := bfd.c io.c packets.c
|
||||||
root-rel=../../
|
obj := $(src-o-files)
|
||||||
dir-name=proto/bfd
|
$(all-daemon)
|
||||||
|
$(cf-local)
|
||||||
include ../../Rules
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "lib/event.h"
|
#include "lib/event.h"
|
||||||
#include "lib/socket.h"
|
#include "lib/socket.h"
|
||||||
// #include "lib/timer.h"
|
// #include "sysdep/unix/timer.h"
|
||||||
|
|
||||||
|
|
||||||
typedef struct timer2
|
typedef struct timer2
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
source=bgp.c attrs.c packets.c
|
src := attrs.c bgp.c packets.c
|
||||||
root-rel=../../
|
obj := $(src-o-files)
|
||||||
dir-name=proto/bgp
|
$(all-daemon)
|
||||||
|
$(cf-local)
|
||||||
include ../../Rules
|
|
||||||
|
|
|
@ -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
|
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
|
||||||
root-rel=../../
|
obj := $(src-o-files)
|
||||||
dir-name=proto/ospf
|
$(all-daemon)
|
||||||
|
$(cf-local)
|
||||||
include ../../Rules
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include "lib/lists.h"
|
#include "lib/lists.h"
|
||||||
#include "lib/slists.h"
|
#include "lib/slists.h"
|
||||||
#include "lib/socket.h"
|
#include "lib/socket.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "nest/protocol.h"
|
#include "nest/protocol.h"
|
||||||
#include "nest/iface.h"
|
#include "nest/iface.h"
|
||||||
|
|
|
@ -1973,7 +1973,6 @@ again1:
|
||||||
|
|
||||||
if (reload || ort_changed(nf, &a0))
|
if (reload || ort_changed(nf, &a0))
|
||||||
{
|
{
|
||||||
net *ne = net_get(p->p.main_channel->table, nf->fn.addr);
|
|
||||||
rta *a = rta_lookup(&a0);
|
rta *a = rta_lookup(&a0);
|
||||||
rte *e = rte_get_temp(a);
|
rte *e = rte_get_temp(a);
|
||||||
|
|
||||||
|
@ -1984,11 +1983,10 @@ again1:
|
||||||
e->u.ospf.tag = nf->old_tag = nf->n.tag;
|
e->u.ospf.tag = nf->old_tag = nf->n.tag;
|
||||||
e->u.ospf.router_id = nf->old_rid = nf->n.rid;
|
e->u.ospf.router_id = nf->old_rid = nf->n.rid;
|
||||||
e->pflags = 0;
|
e->pflags = 0;
|
||||||
e->net = ne;
|
|
||||||
|
|
||||||
DBG("Mod rte type %d - %N via %I on iface %s, met %d\n",
|
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);
|
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)
|
else if (nf->old_rta)
|
||||||
|
@ -1997,8 +1995,7 @@ again1:
|
||||||
rta_free(nf->old_rta);
|
rta_free(nf->old_rta);
|
||||||
nf->old_rta = NULL;
|
nf->old_rta = NULL;
|
||||||
|
|
||||||
net *ne = net_get(p->p.main_channel->table, nf->fn.addr);
|
rte_update(&p->p, nf->fn.addr, NULL);
|
||||||
rte_update(&p->p, ne, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove unused rt entry, some special entries are persistent */
|
/* Remove unused rt entry, some special entries are persistent */
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
source=pipe.c
|
src := pipe.c
|
||||||
root-rel=../../
|
obj := $(src-o-files)
|
||||||
dir-name=proto/pipe
|
$(all-daemon)
|
||||||
|
$(cf-local)
|
||||||
include ../../Rules
|
|
||||||
|
|
||||||
|
|
|
@ -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 channel *dst = (src_ch == p->pri) ? p->sec : p->pri;
|
||||||
struct rte_src *src;
|
struct rte_src *src;
|
||||||
|
|
||||||
net *nn;
|
|
||||||
rte *e;
|
rte *e;
|
||||||
rta a;
|
rta a;
|
||||||
|
|
||||||
|
@ -64,7 +63,6 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, net *n, rte *new, rte *o
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
nn = net_get(dst->table, n->n.addr);
|
|
||||||
if (new)
|
if (new)
|
||||||
{
|
{
|
||||||
memcpy(&a, new->attrs, sizeof(rta));
|
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.eattrs = attrs;
|
||||||
a.hostentry = NULL;
|
a.hostentry = NULL;
|
||||||
e = rte_get_temp(&a);
|
e = rte_get_temp(&a);
|
||||||
e->net = nn;
|
|
||||||
e->pflags = 0;
|
e->pflags = 0;
|
||||||
|
|
||||||
/* Copy protocol specific embedded attributes. */
|
/* 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;
|
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;
|
src_ch->table->pipe_busy = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
source=radv.c packets.c
|
src := packets.c radv.c
|
||||||
root-rel=../../
|
obj := $(src-o-files)
|
||||||
dir-name=proto/radv
|
$(all-daemon)
|
||||||
|
$(cf-local)
|
||||||
include ../../Rules
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "lib/ip.h"
|
#include "lib/ip.h"
|
||||||
#include "lib/lists.h"
|
#include "lib/lists.h"
|
||||||
#include "lib/socket.h"
|
#include "lib/socket.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "nest/protocol.h"
|
#include "nest/protocol.h"
|
||||||
#include "nest/iface.h"
|
#include "nest/iface.h"
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
source=rip.c packets.c
|
src := packets.c rip.c
|
||||||
root-rel=../../
|
obj := $(src-o-files)
|
||||||
dir-name=proto/rip
|
$(all-daemon)
|
||||||
|
$(cf-local)
|
||||||
include ../../Rules
|
|
||||||
|
|
|
@ -143,8 +143,6 @@ rip_announce_rte(struct rip_proto *p, struct rip_entry *en)
|
||||||
if (rt)
|
if (rt)
|
||||||
{
|
{
|
||||||
/* Update */
|
/* Update */
|
||||||
net *n = net_get(p->p.main_channel->table, en->n.addr);
|
|
||||||
|
|
||||||
rta a0 = {
|
rta a0 = {
|
||||||
.src = p->p.main_source,
|
.src = p->p.main_source,
|
||||||
.source = RTS_RIP,
|
.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.metric = rt_metric;
|
||||||
e->u.rip.tag = rt_tag;
|
e->u.rip.tag = rt_tag;
|
||||||
|
|
||||||
e->net = n;
|
|
||||||
e->pflags = 0;
|
e->pflags = 0;
|
||||||
|
|
||||||
rte_update(&p->p, n, e);
|
rte_update(&p->p, en->n.addr, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Withdraw */
|
/* Withdraw */
|
||||||
net *n = net_find(p->p.main_channel->table, en->n.addr);
|
rte_update(&p->p, en->n.addr, NULL);
|
||||||
rte_update(&p->p, n, NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "lib/socket.h"
|
#include "lib/socket.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
|
|
||||||
|
|
||||||
#define RIP_V1 1
|
#define RIP_V1 1
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
source=static.c
|
src := static.c
|
||||||
root-rel=../../
|
obj := $(src-o-files)
|
||||||
dir-name=proto/static
|
$(all-daemon)
|
||||||
|
$(cf-local)
|
||||||
include ../../Rules
|
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,6 @@ p_igp_table(struct proto *p)
|
||||||
static void
|
static void
|
||||||
static_install(struct proto *p, struct static_route *r, struct iface *ifa)
|
static_install(struct proto *p, struct static_route *r, struct iface *ifa)
|
||||||
{
|
{
|
||||||
net *n;
|
|
||||||
rta a;
|
rta a;
|
||||||
rte *e;
|
rte *e;
|
||||||
|
|
||||||
|
@ -112,15 +111,13 @@ static_install(struct proto *p, struct static_route *r, struct iface *ifa)
|
||||||
|
|
||||||
/* We skip rta_lookup() here */
|
/* We skip rta_lookup() here */
|
||||||
|
|
||||||
n = net_get(p->main_channel->table, r->net);
|
|
||||||
e = rte_get_temp(&a);
|
e = rte_get_temp(&a);
|
||||||
e->net = n;
|
|
||||||
e->pflags = 0;
|
e->pflags = 0;
|
||||||
|
|
||||||
if (r->cmds)
|
if (r->cmds)
|
||||||
f_eval_rte(r->cmds, &e, static_lp);
|
f_eval_rte(r->cmds, &e, static_lp);
|
||||||
|
|
||||||
rte_update(p, n, e);
|
rte_update(p, r->net, e);
|
||||||
r->installed = 1;
|
r->installed = 1;
|
||||||
|
|
||||||
if (r->cmds)
|
if (r->cmds)
|
||||||
|
@ -130,14 +127,11 @@ static_install(struct proto *p, struct static_route *r, struct iface *ifa)
|
||||||
static void
|
static void
|
||||||
static_remove(struct proto *p, struct static_route *r)
|
static_remove(struct proto *p, struct static_route *r)
|
||||||
{
|
{
|
||||||
net *n;
|
|
||||||
|
|
||||||
if (!r->installed)
|
if (!r->installed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DBG("Removing static route %N via %I\n", r->net, r->via);
|
DBG("Removing static route %N via %I\n", r->net, r->via);
|
||||||
n = net_find(p->main_channel->table, r->net);
|
rte_update(p, r->net, NULL);
|
||||||
rte_update(p, n, NULL);
|
|
||||||
r->installed = 0;
|
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/route.h"
|
||||||
#include "nest/protocol.h"
|
#include "nest/protocol.h"
|
||||||
#include "nest/iface.h"
|
#include "nest/iface.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "lib/unix.h"
|
#include "sysdep/unix/unix.h"
|
||||||
#include "lib/krt.h"
|
#include "sysdep/unix/krt.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
#include "lib/socket.h"
|
#include "lib/socket.h"
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,9 @@
|
||||||
#define CONFIG_NO_IFACE_BIND
|
#define CONFIG_NO_IFACE_BIND
|
||||||
#define CONFIG_USE_HDRINCL
|
#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/unix
|
||||||
Link: sysdep/bsd
|
Link: sysdep/bsd
|
||||||
|
|
|
@ -14,7 +14,12 @@
|
||||||
#define CONFIG_MC_PROPER_SRC
|
#define CONFIG_MC_PROPER_SRC
|
||||||
#define CONFIG_UNIX_DONTROUTE
|
#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_RESTRICTED_PRIVILEGES
|
||||||
|
#define CONFIG_INCLUDE_SYSPRIV_H "sysdep/linux/syspriv.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Link: sysdep/linux
|
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.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <alloca.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -20,9 +21,9 @@
|
||||||
#include "nest/protocol.h"
|
#include "nest/protocol.h"
|
||||||
#include "nest/iface.h"
|
#include "nest/iface.h"
|
||||||
#include "lib/alloca.h"
|
#include "lib/alloca.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "lib/unix.h"
|
#include "sysdep/unix/unix.h"
|
||||||
#include "lib/krt.h"
|
#include "sysdep/unix/krt.h"
|
||||||
#include "lib/socket.h"
|
#include "lib/socket.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
#include "lib/hash.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;
|
eattr *ea;
|
||||||
net *net = e->net;
|
net *net = e->net;
|
||||||
rta *a = e->attrs;
|
rta *a = e->attrs;
|
||||||
|
int bufsize = 128 + KRT_METRICS_MAX*8 + nh_bufsize(a->nexthops);
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct nlmsghdr h;
|
struct nlmsghdr h;
|
||||||
struct rtmsg r;
|
struct rtmsg r;
|
||||||
char buf[128 + KRT_METRICS_MAX*8 + nh_bufsize(a->nexthops)];
|
char buf[0];
|
||||||
} r;
|
} *r;
|
||||||
|
|
||||||
|
int rsize = sizeof(*r) + bufsize;
|
||||||
|
r = alloca(rsize);
|
||||||
|
|
||||||
DBG("nl_send_route(%N,new=%d)\n", net->n.addr, new);
|
DBG("nl_send_route(%N,new=%d)\n", net->n.addr, new);
|
||||||
|
|
||||||
bzero(&r.h, sizeof(r.h));
|
bzero(&r->h, sizeof(r->h));
|
||||||
bzero(&r.r, sizeof(r.r));
|
bzero(&r->r, sizeof(r->r));
|
||||||
r.h.nlmsg_type = new ? RTM_NEWROUTE : RTM_DELROUTE;
|
r->h.nlmsg_type = new ? RTM_NEWROUTE : RTM_DELROUTE;
|
||||||
r.h.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
|
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->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_family = p->af;
|
||||||
r.r.rtm_dst_len = net_pxlen(net->n.addr);
|
r->r.rtm_dst_len = net_pxlen(net->n.addr);
|
||||||
r.r.rtm_protocol = RTPROT_BIRD;
|
r->r.rtm_protocol = RTPROT_BIRD;
|
||||||
r.r.rtm_scope = RT_SCOPE_UNIVERSE;
|
r->r.rtm_scope = RT_SCOPE_UNIVERSE;
|
||||||
nl_add_attr_ipa(&r.h, sizeof(r), RTA_DST, net_prefix(net->n.addr));
|
nl_add_attr_ipa(&r->h, rsize, RTA_DST, net_prefix(net->n.addr));
|
||||||
|
|
||||||
if (krt_table_id(p) < 256)
|
if (krt_table_id(p) < 256)
|
||||||
r.r.rtm_table = krt_table_id(p);
|
r->r.rtm_table = krt_table_id(p);
|
||||||
else
|
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 */
|
/* For route delete, we do not specify route attributes */
|
||||||
if (!new)
|
if (!new)
|
||||||
return nl_exchange(&r.h);
|
return nl_exchange(&r->h);
|
||||||
|
|
||||||
|
|
||||||
if (ea = ea_find(eattrs, EA_KRT_METRIC))
|
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))
|
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))
|
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];
|
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])
|
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 */
|
/* 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)
|
switch (a->dest)
|
||||||
{
|
{
|
||||||
case RTD_ROUTER:
|
case RTD_ROUTER:
|
||||||
r.r.rtm_type = RTN_UNICAST;
|
r->r.rtm_type = RTN_UNICAST;
|
||||||
nl_add_attr_u32(&r.h, sizeof(r), RTA_OIF, a->iface->index);
|
nl_add_attr_u32(&r->h, rsize, RTA_OIF, a->iface->index);
|
||||||
nl_add_attr_ipa(&r.h, sizeof(r), RTA_GATEWAY, a->gw);
|
nl_add_attr_ipa(&r->h, rsize, RTA_GATEWAY, a->gw);
|
||||||
break;
|
break;
|
||||||
case RTD_DEVICE:
|
case RTD_DEVICE:
|
||||||
r.r.rtm_type = RTN_UNICAST;
|
r->r.rtm_type = RTN_UNICAST;
|
||||||
nl_add_attr_u32(&r.h, sizeof(r), RTA_OIF, a->iface->index);
|
nl_add_attr_u32(&r->h, rsize, RTA_OIF, a->iface->index);
|
||||||
break;
|
break;
|
||||||
case RTD_BLACKHOLE:
|
case RTD_BLACKHOLE:
|
||||||
r.r.rtm_type = RTN_BLACKHOLE;
|
r->r.rtm_type = RTN_BLACKHOLE;
|
||||||
break;
|
break;
|
||||||
case RTD_UNREACHABLE:
|
case RTD_UNREACHABLE:
|
||||||
r.r.rtm_type = RTN_UNREACHABLE;
|
r->r.rtm_type = RTN_UNREACHABLE;
|
||||||
break;
|
break;
|
||||||
case RTD_PROHIBIT:
|
case RTD_PROHIBIT:
|
||||||
r.r.rtm_type = RTN_PROHIBIT;
|
r->r.rtm_type = RTN_PROHIBIT;
|
||||||
break;
|
break;
|
||||||
case RTD_MULTIPATH:
|
case RTD_MULTIPATH:
|
||||||
r.r.rtm_type = RTN_UNICAST;
|
r->r.rtm_type = RTN_UNICAST;
|
||||||
nl_add_multipath(&r.h, sizeof(r), a->nexthops);
|
nl_add_multipath(&r->h, rsize, a->nexthops);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bug("krt_capable inconsistent with nl_send_route");
|
bug("krt_capable inconsistent with nl_send_route");
|
||||||
}
|
}
|
||||||
|
|
||||||
return nl_exchange(&r.h);
|
return nl_exchange(&r->h);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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
|
CF_HDR
|
||||||
|
|
||||||
#include "lib/unix.h"
|
#include "sysdep/unix/unix.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
CF_DECLS
|
CF_DECLS
|
||||||
|
|
|
@ -32,14 +32,14 @@
|
||||||
#include "nest/bird.h"
|
#include "nest/bird.h"
|
||||||
#include "lib/lists.h"
|
#include "lib/lists.h"
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "lib/socket.h"
|
#include "lib/socket.h"
|
||||||
#include "lib/event.h"
|
#include "lib/event.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
#include "nest/iface.h"
|
#include "nest/iface.h"
|
||||||
|
|
||||||
#include "lib/unix.h"
|
#include "sysdep/unix/unix.h"
|
||||||
#include "lib/sysio.h"
|
#include CONFIG_INCLUDE_SYSIO_H
|
||||||
|
|
||||||
/* Maximum number of calls of tx handler for one socket in one
|
/* Maximum number of calls of tx handler for one socket in one
|
||||||
* poll iteration. Should be small enough to not monopolize CPU by
|
* poll iteration. Should be small enough to not monopolize CPU by
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
CF_HDR
|
CF_HDR
|
||||||
|
|
||||||
#include "lib/krt.h"
|
#include "sysdep/unix/krt.h"
|
||||||
|
|
||||||
CF_DEFINES
|
CF_DEFINES
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
#include "nest/route.h"
|
#include "nest/route.h"
|
||||||
#include "nest/protocol.h"
|
#include "nest/protocol.h"
|
||||||
#include "filter/filter.h"
|
#include "filter/filter.h"
|
||||||
#include "lib/timer.h"
|
#include "sysdep/unix/timer.h"
|
||||||
#include "conf/conf.h"
|
#include "conf/conf.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
|
|
||||||
|
@ -345,18 +345,15 @@ krt_learn_announce_update(struct krt_proto *p, rte *e)
|
||||||
net *n = e->net;
|
net *n = e->net;
|
||||||
rta *aa = rta_clone(e->attrs);
|
rta *aa = rta_clone(e->attrs);
|
||||||
rte *ee = rte_get_temp(aa);
|
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->pflags = 0;
|
||||||
ee->u.krt = e->u.krt;
|
ee->u.krt = e->u.krt;
|
||||||
rte_update(&p->p, nn, ee);
|
rte_update(&p->p, n->n.addr, ee);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
krt_learn_announce_delete(struct krt_proto *p, net *n)
|
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->n.addr, NULL);
|
||||||
rte_update(&p->p, n, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called when alien route is discovered during scan */
|
/* Called when alien route is discovered during scan */
|
||||||
|
|
|
@ -15,7 +15,8 @@ struct krt_proto;
|
||||||
struct kif_config;
|
struct kif_config;
|
||||||
struct kif_proto;
|
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 */
|
/* 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_state sys; /* Sysdep state */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kif_proto *kif_proto;
|
extern struct kif_proto *kif_proto;
|
||||||
|
|
||||||
#define KIF_CF ((struct kif_config *)p->p.cf)
|
#define KIF_CF ((struct kif_config *)p->p.cf)
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "nest/mrtdump.h"
|
#include "nest/mrtdump.h"
|
||||||
#include "lib/string.h"
|
#include "lib/string.h"
|
||||||
#include "lib/lists.h"
|
#include "lib/lists.h"
|
||||||
#include "lib/unix.h"
|
#include "sysdep/unix/unix.h"
|
||||||
|
|
||||||
static FILE *dbgf;
|
static FILE *dbgf;
|
||||||
static list *current_log_list;
|
static list *current_log_list;
|
||||||
|
|
|
@ -69,7 +69,7 @@ async_dump(void)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_RESTRICTED_PRIVILEGES
|
#ifdef CONFIG_RESTRICTED_PRIVILEGES
|
||||||
#include "lib/syspriv.h"
|
#include CONFIG_INCLUDE_SYSPRIV_H
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -569,6 +569,10 @@ sysdep_shutdown_done(void)
|
||||||
* Signals
|
* Signals
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
volatile int async_config_flag;
|
||||||
|
volatile int async_dump_flag;
|
||||||
|
volatile int async_shutdown_flag;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_sighup(int sig UNUSED)
|
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))
|
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) + strlen ((ptr)->sun_path))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
volatile int async_config_flag;
|
extern volatile int async_config_flag;
|
||||||
volatile int async_dump_flag;
|
extern volatile int async_dump_flag;
|
||||||
volatile int async_shutdown_flag;
|
extern volatile int async_shutdown_flag;
|
||||||
|
|
||||||
void io_init(void);
|
void io_init(void);
|
||||||
void io_loop(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
|
#!/usr/bin/perl
|
||||||
|
|
||||||
$srcdir = $ARGV[0];
|
$srcdir = $ARGV[0];
|
||||||
|
$out = $ARGV[1];
|
||||||
|
|
||||||
open(OUT, ">prog.sgml") || die "Cannot create output file";
|
open(OUT, ">", $out) || die "Cannot create output file";
|
||||||
include("doc/prog-head.sgml");
|
process($srcdir);
|
||||||
process("");
|
|
||||||
include("doc/prog-foot.sgml");
|
|
||||||
close OUT;
|
close OUT;
|
||||||
|
gen_deps();
|
||||||
exit 0;
|
exit 0;
|
||||||
|
|
||||||
sub include {
|
sub include {
|
||||||
my $f = shift @_;
|
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>) {
|
while (<IN>) {
|
||||||
print OUT;
|
print OUT;
|
||||||
}
|
}
|
||||||
|
@ -21,7 +22,8 @@ sub include {
|
||||||
sub process {
|
sub process {
|
||||||
my $dir = shift @_;
|
my $dir = shift @_;
|
||||||
print "$dir/Doc\n";
|
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>;
|
my @docfile = <IN>;
|
||||||
close IN;
|
close IN;
|
||||||
foreach $_ (@docfile) {
|
foreach $_ (@docfile) {
|
||||||
|
@ -36,7 +38,10 @@ sub process {
|
||||||
print OUT "<chapt>$arg\n";
|
print OUT "<chapt>$arg\n";
|
||||||
} elsif ($cmd eq "S") {
|
} elsif ($cmd eq "S") {
|
||||||
print " $arg\n";
|
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; }
|
while (<DOC>) { print OUT; }
|
||||||
close DOC;
|
close DOC;
|
||||||
} elsif ($cmd eq "D") {
|
} elsif ($cmd eq "D") {
|
||||||
|
@ -45,3 +50,17 @@ sub process {
|
||||||
} else { die "Unknown command: $cmd"; }
|
} 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 a new issue