Use constants from /etc/iproute2/rt_* files.
This commit is contained in:
parent
73272f04af
commit
acc93efd4c
4 changed files with 87 additions and 2 deletions
15
configure.in
15
configure.in
|
@ -13,6 +13,7 @@ AC_ARG_ENABLE(ipv6,[ --enable-ipv6 enable building of IPv6 version (d
|
||||||
AC_ARG_WITH(sysconfig,[ --with-sysconfig=FILE use specified BIRD system configuration file])
|
AC_ARG_WITH(sysconfig,[ --with-sysconfig=FILE use specified BIRD system configuration file])
|
||||||
AC_ARG_WITH(protocols,[ --with-protocols=LIST include specified routing protocols (default: all)],,[with_protocols="all"])
|
AC_ARG_WITH(protocols,[ --with-protocols=LIST include specified routing protocols (default: all)],,[with_protocols="all"])
|
||||||
AC_ARG_WITH(sysinclude,[ --with-sysinclude=PATH search for system includes on specified place])
|
AC_ARG_WITH(sysinclude,[ --with-sysinclude=PATH search for system includes on specified place])
|
||||||
|
AC_ARG_WITH(iproutedir,[ --with-iproutedir=PATH path to iproute2 config files (default: /etc/iproute2)],[given_iproutedir="yes"])
|
||||||
AC_ARG_VAR([FLEX], [location of the Flex program])
|
AC_ARG_VAR([FLEX], [location of the Flex program])
|
||||||
AC_ARG_VAR([BISON], [location of the Bison program])
|
AC_ARG_VAR([BISON], [location of the Bison program])
|
||||||
AC_ARG_VAR([M4], [location of the M4 program])
|
AC_ARG_VAR([M4], [location of the M4 program])
|
||||||
|
@ -105,12 +106,14 @@ elif test -f sysconfig.h ; then
|
||||||
else
|
else
|
||||||
case "$ip:$host_os" in
|
case "$ip:$host_os" in
|
||||||
ipv4:linux*) BIRD_CHECK_LINUX_VERSION
|
ipv4:linux*) BIRD_CHECK_LINUX_VERSION
|
||||||
|
default_iproutedir="/etc/iproute2"
|
||||||
case $bird_cv_sys_linux_version in
|
case $bird_cv_sys_linux_version in
|
||||||
1.*|2.0.*) sysdesc=linux-20 ;;
|
1.*|2.0.*) sysdesc=linux-20 ;;
|
||||||
*) sysdesc=linux-22 ;;
|
*) sysdesc=linux-22 ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
ipv6:linux*) BIRD_CHECK_LINUX_VERSION
|
ipv6:linux*) BIRD_CHECK_LINUX_VERSION
|
||||||
|
default_iproutedir="/etc/iproute2"
|
||||||
case $bird_cv_sys_linux_version in
|
case $bird_cv_sys_linux_version in
|
||||||
1.*|2.0.*) AC_MSG_ERROR([This version of Linux doesn't support IPv6.]) ;;
|
1.*|2.0.*) AC_MSG_ERROR([This version of Linux doesn't support IPv6.]) ;;
|
||||||
*) sysdesc=linux-v6 ;;
|
*) sysdesc=linux-v6 ;;
|
||||||
|
@ -154,6 +157,15 @@ 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)
|
||||||
|
|
||||||
|
if test "$with_iproutedir" = no ; then with_iproutedir= ; fi
|
||||||
|
|
||||||
|
if test -n "$given_iproutedir"
|
||||||
|
then iproutedir=$with_iproutedir
|
||||||
|
else iproutedir=$default_iproutedir
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(iproutedir)
|
||||||
|
|
||||||
AC_MSG_CHECKING([protocols])
|
AC_MSG_CHECKING([protocols])
|
||||||
protocols=`echo "$with_protocols" | sed 's/,/ /g'`
|
protocols=`echo "$with_protocols" | sed 's/,/ /g'`
|
||||||
if test "$protocols" = no ; then protocols= ; fi
|
if test "$protocols" = no ; then protocols= ; fi
|
||||||
|
@ -234,11 +246,14 @@ $srcdir/tools/mergedirs $srcdir $srcdir_rel $objdir $sysdep_dirs]],
|
||||||
AC_CONFIG_FILES($makefiles)
|
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:
|
||||||
Source directory: $srcdir
|
Source directory: $srcdir
|
||||||
Object directory: $objdir
|
Object directory: $objdir
|
||||||
|
Iproute2 directory: $iproutedir
|
||||||
System configuration: $sysdesc
|
System configuration: $sysdesc
|
||||||
Debugging: $enable_debug
|
Debugging: $enable_debug
|
||||||
Routing protocols: $protocols
|
Routing protocols: $protocols
|
||||||
|
|
|
@ -266,8 +266,10 @@ protocol rip {
|
||||||
about configuring protocols in their own chapters. You can run more than one instance of
|
about configuring protocols in their own chapters. You can run more than one instance of
|
||||||
most protocols (like RIP or BGP). By default, no instances are configured.
|
most protocols (like RIP or BGP). By default, no instances are configured.
|
||||||
|
|
||||||
<tag>define <m/constant/ = (<m/expression/)|<m/number/|<m/IP address/</tag> Define a constant. You can use it later in every place
|
<tag>define <m/constant/ = (<m/expression/)|<m/number/|<m/IP address/</tag>
|
||||||
you could use a simple integer or an IP address.
|
Define a constant. You can use it later in every place you could use a simple integer or an IP address.
|
||||||
|
Besides, there are some predefined numeric constants based on /etc/iproute2/rt_* files.
|
||||||
|
A list of defined constants can be seen (together with other symbols) using 'show symbols' command.
|
||||||
|
|
||||||
<tag>router id <m/IPv4 address/</tag> Set BIRD's router ID. It's a world-wide unique identification of your router, usually one of router's IPv4 addresses. Default: in IPv4 version, the lowest IP address of a non-loopback interface. In IPv6 version, this option is mandatory.
|
<tag>router id <m/IPv4 address/</tag> Set BIRD's router ID. It's a world-wide unique identification of your router, usually one of router's IPv4 addresses. Default: in IPv4 version, the lowest IP address of a non-loopback interface. In IPv6 version, this option is mandatory.
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,66 @@ async_dump(void)
|
||||||
* Reading the Configuration
|
* Reading the Configuration
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef PATH_IPROUTE_DIR
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
add_num_const(char *name, int val)
|
||||||
|
{
|
||||||
|
struct symbol *s = cf_find_symbol(name);
|
||||||
|
s->class = SYM_NUMBER;
|
||||||
|
s->def = NULL;
|
||||||
|
s->aux = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* the code of read_iproute_table() is based on
|
||||||
|
rtnl_tab_initialize() from iproute2 package */
|
||||||
|
static void
|
||||||
|
read_iproute_table(char *file, char *prefix, int max)
|
||||||
|
{
|
||||||
|
char buf[512], namebuf[512];
|
||||||
|
char *name;
|
||||||
|
int val;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
strcpy(namebuf, prefix);
|
||||||
|
name = namebuf + strlen(prefix);
|
||||||
|
|
||||||
|
fp = fopen(file, "r");
|
||||||
|
if (!fp)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (fgets(buf, sizeof(buf), fp))
|
||||||
|
{
|
||||||
|
char *p = buf;
|
||||||
|
|
||||||
|
while (*p == ' ' || *p == '\t')
|
||||||
|
p++;
|
||||||
|
|
||||||
|
if (*p == '#' || *p == '\n' || *p == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (sscanf(p, "0x%x %s\n", &val, name) != 2 &&
|
||||||
|
sscanf(p, "0x%x %s #", &val, name) != 2 &&
|
||||||
|
sscanf(p, "%d %s\n", &val, name) != 2 &&
|
||||||
|
sscanf(p, "%d %s #", &val, name) != 2)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (val < 0 || val > max)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for(p = name; *p; p++)
|
||||||
|
if ((*p < 'a' || *p > 'z') && (*p < '0' || *p > '9') && (*p != '_'))
|
||||||
|
*p = '_';
|
||||||
|
|
||||||
|
add_num_const(namebuf, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // PATH_IPROUTE_DIR
|
||||||
|
|
||||||
|
|
||||||
static int conf_fd;
|
static int conf_fd;
|
||||||
static char *config_name = PATH_CONFIG;
|
static char *config_name = PATH_CONFIG;
|
||||||
|
|
||||||
|
@ -78,6 +138,13 @@ void
|
||||||
sysdep_preconfig(struct config *c)
|
sysdep_preconfig(struct config *c)
|
||||||
{
|
{
|
||||||
init_list(&c->logfiles);
|
init_list(&c->logfiles);
|
||||||
|
|
||||||
|
#ifdef PATH_IPROUTE_DIR
|
||||||
|
// read_iproute_table(PATH_IPROUTE_DIR "/rt_protos", "ipp_", 256);
|
||||||
|
read_iproute_table(PATH_IPROUTE_DIR "/rt_realms", "ipr_", 256);
|
||||||
|
read_iproute_table(PATH_IPROUTE_DIR "/rt_scopes", "ips_", 256);
|
||||||
|
read_iproute_table(PATH_IPROUTE_DIR "/rt_tables", "ipt_", 256);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -50,6 +50,7 @@ sysdep/paths.h:
|
||||||
echo >sysdep/paths.h "/* Generated by Makefile, don't edit manually! */"
|
echo >sysdep/paths.h "/* Generated by Makefile, don't edit manually! */"
|
||||||
echo >>sysdep/paths.h "#define PATH_CONFIG_DIR \"$(sysconfdir)\""
|
echo >>sysdep/paths.h "#define PATH_CONFIG_DIR \"$(sysconfdir)\""
|
||||||
echo >>sysdep/paths.h "#define PATH_CONTROL_SOCKET_DIR \"$(localstatedir)/run\""
|
echo >>sysdep/paths.h "#define PATH_CONTROL_SOCKET_DIR \"$(localstatedir)/run\""
|
||||||
|
if test -n "@iproutedir@" ; then echo >>sysdep/paths.h "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
|
||||||
|
|
||||||
tags:
|
tags:
|
||||||
cd $(srcdir) ; etags -lc `find $(static-dirs) $(addprefix $(objdir)/,$(dynamic-dirs)) $(client-dirs) -name *.[chY]`
|
cd $(srcdir) ; etags -lc `find $(static-dirs) $(addprefix $(objdir)/,$(dynamic-dirs)) $(client-dirs) -name *.[chY]`
|
||||||
|
|
Loading…
Reference in a new issue