]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
- Solve the Coverity Scan PW.ASSIGN_WHERE_COMPARE_MEANT
[mirror_frr.git] / configure.ac
CommitLineData
7ea487bc 1##
447a8fe9 2## Configure template file for FRRouting.
7ea487bc 3## autoconf will generate configure script.
4##
5## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
e8f2984c 6## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
7ea487bc 7##
9bc6875a 8AC_PREREQ(2.60)
7ea487bc 9
4952d0f0 10AC_INIT(frr, 3.1-dev, [https://github.com/frrouting/frr/issues])
d6180888 11PACKAGE_URL="https://frrouting.org/"
447a8fe9 12PACKAGE_FULLNAME="FRRouting"
a07169b1
DL
13AC_SUBST(PACKAGE_FULLNAME)
14
5ee1bde7 15CONFIG_ARGS="$ac_configure_args"
80db5ac1 16AC_SUBST(CONFIG_ARGS)
a07169b1 17
fa1253d0 18AC_CONFIG_SRCDIR(lib/zebra.h)
62c9f504 19AC_CONFIG_MACRO_DIR([m4])
dfb9a545 20
21dnl -----------------------------------
22dnl Get hostname and other information.
23dnl -----------------------------------
24AC_CANONICAL_BUILD()
25AC_CANONICAL_HOST()
26AC_CANONICAL_TARGET()
27
f77cba1b
AS
28# Disable portability warnings -- our automake code (in particular
29# common.am) uses some constructs specific to gmake.
a6cf5da4 30AM_INIT_AUTOMAKE([1.12 -Wno-portability])
50cfc0d2 31m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
e54583ea 32AM_SILENT_RULES([yes])
303bb005 33AC_CONFIG_HEADERS(config.h)
7ea487bc 34
0be793e6 35AC_PATH_PROG(PERL, perl)
00c03bc9 36PKG_PROG_PKG_CONFIG
03ecfb67 37
d6b72f7a 38dnl default is to match previous behavior
c4f0efe6 39exampledir=${sysconfdir}
d6b72f7a 40AC_ARG_ENABLE([exampledir],
23925784 41 AS_HELP_STRING([--enable-exampledir],
d6b72f7a 42 [specify alternate directory for examples]),
43 exampledir="$enableval",)
c4f0efe6 44dnl XXX add --exampledir to autoconf standard directory list somehow
d6b72f7a 45AC_SUBST(exampledir)
46
cbd04084 47dnl default is to match previous behavior
48pkgsrcrcdir=""
49pkgsrcdir=""
50AC_ARG_ENABLE([pkgsrcrcdir],
23925784 51 AS_HELP_STRING([--enable-pkgsrcrcdir],
cbd04084 52 [specify directory for rc.d scripts]),
53 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
54dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
55AC_SUBST(pkgsrcdir)
56AC_SUBST(pkgsrcrcdir)
57
30771d65
DL
58AC_ARG_WITH([moduledir], [AS_HELP_STRING([--with-moduledir=DIR], [module directory (${libdir}/frr/modules)])], [
59 moduledir="$withval"
60], [
61 moduledir="\${libdir}/frr/modules"
62])
63AC_SUBST([moduledir], [$moduledir])
64
3f9c7369 65AC_ARG_ENABLE(tcmalloc,
428cd73f 66 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
3f9c7369
DS
67[case "${enableval}" in
68 yes) tcmalloc_enabled=true
69LIBS="$LIBS -ltcmalloc_minimal"
70 ;;
71 no) tcmalloc_enabled=false ;;
72 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
73esac],[tcmalloc_enabled=false])
74
75
fbd0bae6
DL
76dnl Thanks autoconf, but we don't want a default -g -O2. We have our own
77dnl flag determination logic.
78CFLAGS="${CFLAGS:-}"
79
1969e4b9 80dnl --------------------
81dnl Check CC and friends
82dnl --------------------
a89b1641
DL
83dnl note orig_cflags is also used further down
84orig_cflags="$CFLAGS"
46bc0e43 85AC_LANG([C])
7ea487bc 86AC_PROG_CC
1969e4b9 87AC_PROG_CPP
46bc0e43 88AM_PROG_CC_C_O
a89b1641
DL
89dnl remove autoconf default "-g -O2"
90CFLAGS="$orig_cflags"
1769aff8 91AC_PROG_CC_C99
8aa42b82 92dnl NB: see C11 below
553bdfe3 93
a89b1641 94AC_PROG_EGREP
2fb975da 95PKG_PROG_PKG_CONFIG
a89b1641 96
553bdfe3
GT
97dnl autoconf 2.59 appears not to support AC_PROG_SED
98dnl AC_PROG_SED
99AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
1969e4b9 100
a89b1641
DL
101dnl try and enable CFLAGS that are useful for Quagga
102dnl - specifically, options to control warnings
1969e4b9 103
b31fd749 104AC_USE_SYSTEM_EXTENSIONS
988225dd
DL
105AC_DEFUN([AC_C_FLAG], [{
106 AC_LANG_PUSH(C)
107 ac_c_flag_save="$CFLAGS"
108 CFLAGS="$CFLAGS $1"
109 AC_MSG_CHECKING([[whether $CC supports $1]])
110 AC_COMPILE_IFELSE(
111 [AC_LANG_PROGRAM([[]])],
112 [
113 AC_MSG_RESULT([yes])
114 m4_if([$3], [], [], [
115 CFLAGS="$ac_c_flag_save"
116 $3
117 ])
118 ], [
119 CFLAGS="$ac_c_flag_save"
120 AC_MSG_RESULT([no])
121 $2
122 ])
123 AC_LANG_POP(C)
124 }])
125
a89b1641
DL
126dnl ICC won't bail on unknown options without -diag-error 10006
127dnl need to do this first so we get useful results for the other options
128AC_C_FLAG([-diag-error 10006])
129
8aa42b82
DL
130dnl AC_PROG_CC_C99 may change CC to include -std=gnu99 or something
131ac_cc="$CC"
132CC="${CC% -std=gnu99}"
133CC="${CC% -std=c99}"
134
135AC_C_FLAG([-std=gnu11], [CC="$ac_cc"], [CC="$CC -std=gnu11"])
136
a89b1641
DL
137dnl if the user specified any CFLAGS, we don't add "-g -Os/-O2" here
138if test "z$orig_cflags" = "z"; then
139 AC_C_FLAG([-g])
140 AC_C_FLAG([-Os], [
141 AC_C_FLAG([-O2])
142 ])
143fi
144
145dnl always want these CFLAGS
146AC_C_FLAG([-fno-omit-frame-pointer])
147AC_C_FLAG([-Wall])
148AC_C_FLAG([-Wextra])
149AC_C_FLAG([-Wmissing-prototypes])
150AC_C_FLAG([-Wmissing-declarations])
151AC_C_FLAG([-Wpointer-arith])
152AC_C_FLAG([-Wbad-function-cast])
153AC_C_FLAG([-Wwrite-strings])
154if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
155 AC_C_FLAG([-Wcast-qual])
156 AC_C_FLAG([-Wstrict-prototypes])
157 AC_C_FLAG([-Wmissing-noreturn])
158 AC_C_FLAG([-Wmissing-format-attribute])
159 AC_C_FLAG([-Wunreachable-code])
160 AC_C_FLAG([-Wpacked])
161 AC_C_FLAG([-Wpadded])
6a4b8832 162else
a89b1641 163 AC_C_FLAG([-Wno-unused-result])
1969e4b9 164fi
a89b1641
DL
165AC_C_FLAG([-Wno-unused-parameter])
166AC_C_FLAG([-Wno-missing-field-initializers])
167
168dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
169dnl for some reason the string consts get 'promoted' to char *,
170dnl triggering a const to non-const conversion warning.
171AC_C_FLAG([-diag-disable 3179])
1969e4b9 172
aa9584c1
DS
173if test x"${enable_werror}" = x"yes" ; then
174 WERROR="-Werror"
175fi
176AC_SUBST(WERROR)
177
2e83e8e9
DL
178dnl need link on this one, not compile
179AC_LANG_PUSH(C)
180ac_ld_flag_save="$LDFLAGS"
181LDFLAGS="$LDFLAGS -rdynamic"
182AC_MSG_CHECKING([[whether linker supports -rdynamic]])
183AC_LINK_IFELSE(
184 [AC_LANG_PROGRAM([[]])],
185 [AC_MSG_RESULT([yes])],
186 [
187 LDFLAGS="$ac_ld_flag_save"
188 AC_MSG_RESULT([no])
189 ])
190AC_LANG_POP(C)
191
b31fd749
DL
192dnl ----------
193dnl Essentials
194dnl ----------
195
196AX_PTHREAD([
197 CC="$PTHREAD_CC"
198 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
199 LIBS="$PTHREAD_LIBS $LIBS"
200], [
201 AC_MSG_FAILURE([This Quagga version needs pthreads])
202])
203
7ea487bc 204dnl --------------
205dnl Check programs
206dnl --------------
7ea487bc 207AC_PROG_INSTALL
6f0e3f6e 208AC_PROG_LN_S
7ea487bc 209AC_PROG_MAKE_SET
210AC_CHECK_TOOL(AR, ar)
7ea487bc 211
d46d2a24
PJ
212dnl -----------------
213dnl System extensions
214dnl -----------------
d46d2a24 215AC_GNU_SOURCE
7ea487bc 216
87efd646 217dnl -------
218dnl libtool
219dnl -------
95bb8305 220LT_INIT
87efd646 221
7ea487bc 222dnl ----------------------
223dnl Packages configuration
224dnl ----------------------
1080c13f
JN
225AC_ARG_WITH(pkg-extra-version,
226 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
227 [EXTRAVERSION=$withval],)
0be793e6
DL
228AC_ARG_WITH(pkg-git-version,
229 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
a16dcf7c 230 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
7ea487bc 231AC_ARG_ENABLE(vtysh,
23925784 232 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
cbcd9bfc 233AC_ARG_ENABLE(doc,
23925784 234 AS_HELP_STRING([--disable-doc], [do not build docs]))
7ea487bc 235AC_ARG_ENABLE(zebra,
23925784 236 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
7ea487bc 237AC_ARG_ENABLE(bgpd,
23925784 238 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
7ea487bc 239AC_ARG_ENABLE(ripd,
23925784 240 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
7ea487bc 241AC_ARG_ENABLE(ripngd,
23925784 242 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
7ea487bc 243AC_ARG_ENABLE(ospfd,
23925784 244 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
7ea487bc 245AC_ARG_ENABLE(ospf6d,
23925784 246 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
eac6e3f0
RW
247AC_ARG_ENABLE(ldpd,
248 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
2fb975da
TT
249AC_ARG_ENABLE(nhrpd,
250 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
7f57883e
DS
251AC_ARG_ENABLE(eigrpd,
252 AS_HELP_STRING([--disable-eigrpd], [do not build eigrpd]))
9473e340
DS
253AC_ARG_ENABLE(watchfrr,
254 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
9e867fe6 255AC_ARG_ENABLE(isisd,
c3a9461e 256 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
12e41d03 257AC_ARG_ENABLE(pimd,
23925784 258 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
7ea487bc 259AC_ARG_ENABLE(bgp-announce,
23925784 260 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
65efcfce 261AC_ARG_ENABLE(bgp-vnc,
f95f2ad9 262 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
65efcfce
LB
263AC_ARG_WITH(rfp-path,
264 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
7ea487bc 265AC_ARG_ENABLE(snmp,
23925784 266 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
7ea487bc 267AC_ARG_WITH(libpam,
23925784 268 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
71c0fb50 269AC_ARG_ENABLE(tcp-zebra,
23925784 270 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
1ef74ef7 271AC_ARG_ENABLE(ospfapi,
23925784 272 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
1ef74ef7 273AC_ARG_ENABLE(ospfclient,
23925784
DL
274 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
275 (this is the default if --disable-ospfapi is set)]))
7ea487bc 276AC_ARG_ENABLE(multipath,
23925784 277 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
fe86b484 278AC_ARG_ENABLE(user,
b2f36157 279 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
fe86b484 280AC_ARG_ENABLE(group,
b2f36157 281 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
edd7c245 282AC_ARG_ENABLE(vty_group,
23925784 283 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
aa593d5e 284AC_ARG_ENABLE(configfile_mask,
23925784 285 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
aa593d5e 286AC_ARG_ENABLE(logfile_mask,
23925784 287 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
5fd1f747 288AC_ARG_ENABLE(shell_access,
23925784 289 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
71c0fb50 290AC_ARG_ENABLE(rtadv,
23925784 291 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
ca776988 292AC_ARG_ENABLE(irdp,
23925784 293 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
41d3fc96 294AC_ARG_ENABLE(capabilities,
23925784 295 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
47f6aef0 296AC_ARG_ENABLE(rusage,
23925784 297 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
6b6942f9 298AC_ARG_ENABLE(gcc_ultra_verbose,
23925784 299 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
3453a712 300AC_ARG_ENABLE(linux24_tcp_md5,
23925784 301 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
8c99b4c1 302AC_ARG_ENABLE(backtrace,
23925784 303 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
924b9229 304AC_ARG_ENABLE(time-check,
23925784 305 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
25f45887 306AC_ARG_ENABLE(pcreposix,
23925784 307 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
5adc2528 308AC_ARG_ENABLE(fpm,
23925784 309 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
ddd82ff6 310AC_ARG_ENABLE(systemd,
23925784 311 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
0a95a0d0 312AC_ARG_ENABLE(poll,
23925784 313 AS_HELP_STRING([--enable-poll], [enable usage of Poll instead of select]))
aa9584c1
DS
314AC_ARG_ENABLE(werror,
315 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
000cf1fb 316AC_ARG_ENABLE(cumulus,
23925784 317 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
df970aa6
DS
318AC_ARG_ENABLE(datacenter,
319 AS_HELP_STRING([--enable-datacenter], [enable Compilation for Data Center Extensions]))
76981cd3
DS
320AC_ARG_ENABLE(rr-semantics,
321 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
dad253b4
AS
322AC_ARG_ENABLE([protobuf],
323 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
28436d6d 324AC_ARG_ENABLE([oldvpn_commands],
fcc65b0f 325 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
6b6942f9 326
112072ac
DS
327AC_CHECK_HEADERS(json-c/json.h)
328AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
329if test $ac_cv_lib_json_c_json_object_get = no; then
10b8ab26
DS
330 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
331 if test $ac_cv_lib_json_json_object_get = no; then
332 AC_MSG_ERROR([lib json is needed to compile])
333 fi
c2f4c19c
DS
334fi
335
3b8282a8
AS
336AC_ARG_ENABLE([dev_build],
337 AS_HELP_STRING([--enable-dev-build], [build for development]))
338
924b9229 339if test x"${enable_time_check}" != x"no" ; then
340 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
341 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
342 else
343 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
344 fi
345fi
346
37219958
DS
347case "${enable_systemd}" in
348 "no") ;;
349 "yes")
350 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
351 if test $ac_cv_lib_systemd_sd_notify = no; then
352 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
63e30864
DS
353 else
354 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
37219958
DS
355 fi
356 ;;
357 "*") ;;
358esac
ddd82ff6 359
76981cd3
DS
360if test "${enable_rr_semantics}" != "no" ; then
361 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
362fi
363
0a95a0d0 364if test "${enable_poll}" = "yes" ; then
704ef00b 365 AC_DEFINE(HAVE_POLL_CALL,,Compile systemd support in)
0a95a0d0
DS
366fi
367
be0dba35
RW
368dnl ----------
369dnl MPLS check
370dnl ----------
be0dba35 371AC_MSG_CHECKING(whether this OS has MPLS stack)
fe6c7157
RW
372case "$host" in
373 *-linux*)
95f40dbe 374 MPLS_METHOD="zebra_mpls_netlink.o zebra_mpls.o"
fe6c7157
RW
375 AC_MSG_RESULT(Linux MPLS)
376 ;;
377 *-openbsd*)
95f40dbe 378 MPLS_METHOD="zebra_mpls_openbsd.o zebra_mpls.o"
fe6c7157
RW
379 AC_MSG_RESULT(OpenBSD MPLS)
380 ;;
381 *)
382 MPLS_METHOD="zebra_mpls_null.o"
383 AC_MSG_RESULT(Unsupported kernel)
384 ;;
385esac
be0dba35
RW
386AC_SUBST(MPLS_METHOD)
387
df970aa6
DS
388if test "${enable_datacenter}" = "yes" ; then
389 AC_DEFINE(HAVE_DATACENTER,,Compile extensions for a DataCenter)
8efe88ea
DL
390 DFLT_NAME="datacenter"
391else
392 DFLT_NAME="traditional"
000cf1fb 393fi
df970aa6
DS
394
395if test "${enable_cumulus}" = "yes" ; then
396 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
397fi
398
8efe88ea
DL
399AC_SUBST(DFLT_NAME)
400AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
000cf1fb 401
576b6b5d
DS
402if test "${enable_shell_access}" = "yes"; then
403 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
404fi
405
4f8ea50c 406AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
5adc2528 407
3b8282a8
AS
408if test "x${enable_dev_build}" = "xyes"; then
409 AC_DEFINE(DEV_BUILD,,Build for development)
410fi
411AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
412
dad253b4
AS
413#
414# Logic for protobuf support.
415#
416if test "$enable_protobuf" = "yes"; then
417 have_protobuf=yes
418
419 # Check for protoc-c
420 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
421 if test "x$PROTOC_C" = "x/bin/false"; then
422 have_protobuf=no
423 else
424 found_protobuf_c=no
425 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
426 [found_protobuf_c=yes],
427 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
428
429 if test "x$found_protobuf_c" = "xyes"; then
430 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
431 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
432 else
433 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
434 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
435 fi
436 fi
437fi
438
28436d6d
PG
439#
440# Logic for old vpn commans support.
441#
fcc65b0f 442if test "$enable_oldvpn_commands" = "yes"; then
28436d6d
PG
443 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
444fi
445
dad253b4
AS
446# Fail if the user explicity enabled protobuf support and we couldn't
447# find the compiler or libraries.
448if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
449 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
450fi
451
452if test "x$have_protobuf" = "xyes"; then
453 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
454fi
455
456AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
457
458#
459# End of logic for protobuf support.
460#
461
7ea487bc 462if test "${enable_tcp_zebra}" = "yes"; then
463 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
464fi
465
3453a712
PJ
466if test "${enable_linux24_tcp_md5}" = "yes"; then
467 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
468fi
469
d2a0ccc6 470AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
471if test "${enable_rtadv}" != "no"; then
71c0fb50 472 AC_MSG_RESULT(yes)
d2a0ccc6 473 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
2487bea1 474else
475 AC_MSG_RESULT(no)
71c0fb50 476fi
7ea487bc 477
ca776988 478if test "${enable_irdp}" = "yes"; then
479 AC_DEFINE(HAVE_IRDP,, IRDP )
480fi
481
0b02a1b4
JAG
482if test x"${enable_user}" = x"no"; then
483 enable_user=""
484else
485 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
b2f36157 486 enable_user="frr"
0b02a1b4 487 fi
b2f36157 488 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
edd7c245 489fi
edd7c245 490
0b02a1b4
JAG
491if test x"${enable_group}" = x"no"; then
492 enable_group=""
493else
494 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
b2f36157 495 enable_group="frr"
0b02a1b4 496 fi
b2f36157 497 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
edd7c245 498fi
edd7c245 499
500if test x"${enable_vty_group}" = x"yes" ; then
8d4aee5d 501 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
79cb2169 502elif test x"${enable_vty_group}" != x""; then
8d4aee5d 503 if test x"${enable_vty_group}" != x"no"; then
edd7c245 504 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
505 fi
506fi
26275b05 507AC_SUBST([enable_user])
508AC_SUBST([enable_group])
509AC_SUBST([enable_vty_group])
edd7c245 510
aa593d5e 511enable_configfile_mask=${enable_configfile_mask:-0600}
512AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
513
514enable_logfile_mask=${enable_logfile_mask:-0600}
515AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
516
7a6da5ba 517MPATH_NUM=1
7ea487bc 518
519case "${enable_multipath}" in
7c5d2b76 520 0)
7a6da5ba 521 MPATH_NUM=64
7c5d2b76 522 ;;
90fb3e13 523 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
7a6da5ba 524 MPATH_NUM="${enable_multipath}"
7ea487bc 525 ;;
526 "")
527 ;;
528 *)
6f0e3f6e 529 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
7ea487bc 530 ;;
531esac
532
7a6da5ba 533AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
7ea487bc 534
1080c13f
JN
535dnl -----------------------------------
536dnl Add extra version string to package
537dnl name, string and version fields.
538dnl -----------------------------------
539if test "x${EXTRAVERSION}" != "x" ; then
0be793e6
DL
540 VERSION="${VERSION}${EXTRAVERSION}"
541 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
3ab11ecc 542 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
0be793e6 543 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
1080c13f
JN
544fi
545
a16dcf7c
DL
546if test "x$with_pkg_git_version" = "xyes"; then
547 if test -d "${srcdir}/.git"; then
548 AC_DEFINE(GIT_VERSION, [1], [include git version info])
549 else with_pkg_git_version="no"
550 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
551 fi
552fi
553AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
0be793e6 554
6f0e3f6e
PJ
555dnl ------------------------------------
556dnl Check C keywords and standard types
557dnl ------------------------------------
558AC_C_CONST
559AC_C_INLINE
6f0e3f6e 560AC_C_VOLATILE
dc7a2bf1 561AC_HEADER_STDC
6f0e3f6e
PJ
562dnl AC_TYPE_PID_T
563AC_TYPE_UID_T
564AC_TYPE_MODE_T
565AC_TYPE_SIZE_T
6f0e3f6e 566AC_STRUCT_TM
dc7a2bf1 567
6f0e3f6e
PJ
568dnl -------------------------
569dnl Check other header files.
570dnl -------------------------
24f5e2fc
DL
571AC_CHECK_HEADERS([stropts.h sys/ksym.h \
572 linux/version.h asm/types.h \
573 sys/cdefs.h])
6f0e3f6e 574
899a4fd2
DL
575ac_stdatomic_ok=false
576AC_DEFINE(FRR_AUTOCONF_ATOMIC, 1, [did autoconf checks for atomic funcs])
577AC_CHECK_HEADER([stdatomic.h],[
578
579 AC_MSG_CHECKING([whether _Atomic qualifier works])
580 AC_LINK_IFELSE([AC_LANG_SOURCE([[
581#include <stdatomic.h>
582int main(int argc, char **argv) {
583 _Atomic int i = 0;
584 return i;
585}
586]])], [
587 AC_DEFINE(HAVE_STDATOMIC_H, 1, [found stdatomic.h])
588 AC_MSG_RESULT([yes])
589 ac_stdatomic_ok=true
590 ], [
591 AC_MSG_RESULT([no])
592 ])
593])
594
595AS_IF([$ac_stdatomic_ok], [true], [
596 AC_MSG_CHECKING([for __atomic_* builtins])
597 AC_LINK_IFELSE([AC_LANG_SOURCE([[
598int main(int argc, char **argv) {
599 volatile int i = 1;
600 __atomic_store_n (&i, 0, __ATOMIC_RELEASE);
601 return __atomic_load_n (&i, __ATOMIC_ACQUIRE);
602}
603]])], [
604 AC_DEFINE(HAVE___ATOMIC, 1, [found __atomic builtins])
605 AC_MSG_RESULT([yes])
606 ], [
607 AC_MSG_RESULT([no])
608
609 dnl FreeBSD 9 has a broken stdatomic.h where _Atomic doesn't work
610 AC_MSG_CHECKING([for __sync_* builtins])
611 AC_LINK_IFELSE([AC_LANG_SOURCE([[
612int main(int argc, char **argv) {
613 volatile int i = 1;
614 __sync_fetch_and_sub (&i, 1);
615 return __sync_val_compare_and_swap (&i, 0, 1);
616}
617]])], [
618 AC_DEFINE(HAVE___SYNC, 1, [found __sync builtins])
619 AC_MSG_RESULT([yes])
620
621 AC_MSG_CHECKING([for __sync_swap builtin])
622 AC_LINK_IFELSE([AC_LANG_SOURCE([[
623int main(int argc, char **argv) {
624 volatile int i = 1;
625 return __sync_swap (&i, 2);
626}
627]])], [
628 AC_DEFINE(HAVE___SYNC_SWAP, 1, [found __sync_swap builtin])
629 AC_MSG_RESULT([yes])
630 ], [
631 AC_MSG_RESULT([no])
632 ])
633
634 ], [
635 AC_MSG_RESULT([no])
636 AC_MSG_FAILURE([stdatomic.h unavailable and $CC has neither __atomic nor __sync builtins])
637 ])
638 ])
639])
640
6f0e3f6e 641dnl Utility macro to avoid retyping includes all the time
8e4da10b 642m4_define([FRR_INCLUDES],
6f0e3f6e
PJ
643[#ifdef SUNOS_5
644#define _XPG4_2
645#define __EXTENSIONS__
646#endif
647#include <stdio.h>
24f5e2fc
DL
648#include <stdlib.h>
649#include <stddef.h>
650#include <sys/types.h>
6f0e3f6e 651/* sys/conf.h depends on param.h on FBSD at least */
24f5e2fc 652#include <sys/param.h>
6f0e3f6e 653/* Required for MAXSIG */
24f5e2fc
DL
654#include <signal.h>
655#include <sys/socket.h>
ea057677
HT
656#ifdef __APPLE__
657# define __APPLE_USE_RFC_3542
658#endif
24f5e2fc
DL
659#include <netinet/in.h>
660#include <sys/time.h>
661#include <time.h>
662#include <net/if.h>
2b43bf23
DO
663])dnl
664
665dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
666dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
667dnl an additional round for it.
668
8e4da10b 669AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
2b43bf23 670
8e4da10b
DL
671m4_define([FRR_INCLUDES],
672FRR_INCLUDES
2b43bf23
DO
673[#if HAVE_NET_IF_VAR_H
674# include <net/if_var.h>
675#endif
676])dnl
677
24f5e2fc
DL
678AC_CHECK_HEADERS([netinet/in_var.h \
679 net/if_dl.h net/netopt.h \
680 inet/nd.h netinet/ip_icmp.h \
6f0e3f6e 681 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
8e4da10b 682 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
683
684AC_CHECK_HEADERS([ucontext.h], [], [],
685[#ifndef __USE_GNU
686#define __USE_GNU
687#endif /* __USE_GNU */
8e4da10b 688FRR_INCLUDES
6f0e3f6e
PJ
689])
690
bccbd141
JT
691m4_define([UCONTEXT_INCLUDES],
692[#include <ucontext.h>])dnl
693
694AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
695 [], [], [UCONTEXT_INCLUDES])
696AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
697 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
698 [], [], [UCONTEXT_INCLUDES])],
699 [], [UCONTEXT_INCLUDES])
700AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
701 [], [], [UCONTEXT_INCLUDES])
702
8e4da10b
DL
703m4_define([FRR_INCLUDES],
704FRR_INCLUDES
24f5e2fc
DL
705[
706#include <sys/un.h>
707#include <netinet/in_systm.h>
6f0e3f6e
PJ
708#if HAVE_NETINET_IN_VAR_H
709# include <netinet/in_var.h>
710#endif
711#if HAVE_NET_IF_DL_H
712# include <net/if_dl.h>
713#endif
6f0e3f6e
PJ
714#if HAVE_NET_NETOPT_H
715# include <net/netopt.h>
716#endif
24f5e2fc 717#include <net/route.h>
6f0e3f6e
PJ
718#if HAVE_INET_ND_H
719# include <inet/nd.h>
720#endif
24f5e2fc 721#include <arpa/inet.h>
11770e10
PJ
722/* Required for IDRP */
723#if HAVE_NETINET_IP_ICMP_H
724# include <netinet/ip_icmp.h>
725#endif
6f0e3f6e 726])dnl
dc7a2bf1 727
fa3232e1 728dnl V6 headers are checked below, after we check for v6
7ea487bc 729
7ea487bc 730dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
731case "$host" in
afd8a129 732 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
7ea487bc 733 opsys=sol2-6
afd8a129 734 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
19877dd2 735 AC_DEFINE(SUNOS_5, 1, SunOS 5)
7ea487bc 736 AC_CHECK_LIB(xnet, main)
737 CURSES=-lcurses
a77d2023 738 SOLARIS="solaris"
7ea487bc 739 ;;
1b73de8b 740 [*-sunos5.[8-9]] \
741 | [*-sunos5.1[0-9]] \
742 | [*-sunos5.1[0-9].[0-9]] \
743 | [*-solaris2.[8-9]] \
744 | [*-solaris2.1[0-9]] \
745 | [*-solaris2.1[0-9].[0-9]])
afd8a129 746 opsys=sol8
fb66b29c
PJ
747 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
748 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
19877dd2 749 AC_CHECK_LIB(socket, main)
750 AC_CHECK_LIB(nsl, main)
1b73de8b 751 AC_CHECK_LIB(umem, main)
fb66b29c
PJ
752 AC_CHECK_FUNCS([printstack],
753 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
754 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
755 ])
19877dd2 756 CURSES=-lcurses
a77d2023 757 SOLARIS="solaris"
19877dd2 758 ;;
7ea487bc 759 *-sunos5* | *-solaris2*)
19877dd2 760 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
7ea487bc 761 AC_CHECK_LIB(socket, main)
762 AC_CHECK_LIB(nsl, main)
763 CURSES=-lcurses
a77d2023 764 SOLARIS="solaris"
7ea487bc 765 ;;
c45eb839 766 *-linux*)
7ea487bc 767 opsys=gnu-linux
768 AC_DEFINE(GNU_LINUX,,GNU Linux)
769 ;;
7ea487bc 770 *-openbsd*)
771 opsys=openbsd
772 AC_DEFINE(OPEN_BSD,,OpenBSD)
773 ;;
7ea487bc 774esac
775
62c9f504
PJ
776AC_SYS_LARGEFILE
777
7ea487bc 778dnl ---------------------
779dnl Integrated VTY option
780dnl ---------------------
781case "${enable_vtysh}" in
f0646db0
DS
782 "no") VTYSH="";;
783 *) VTYSH="vtysh";
7ea487bc 784 AC_DEFINE(VTYSH,,VTY shell)
fc9d0745 785dnl Vtysh uses libreadline, which looks for termcap functions at
6f0e3f6e 786dnl configure time. We follow readlines search order.
fc9d0745 787dnl The required procedures are in libtermcap on NetBSD, in
788dnl [TODO] on Linux, and in [TODO] on Solaris.
c0689394 789 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
a969459c 790 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
791 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
792 [AC_CHECK_LIB(ncurses, tputs,
793 LIBREADLINE="$LIBREADLINE -lncurses")]
794 )]
795 )]
796 )
4c2f8e95 797 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
a969459c 798 "$LIBREADLINE")
7ea487bc 799 if test $ac_cv_lib_readline_main = no; then
fc9d0745 800 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
7ea487bc 801 fi
802 AC_CHECK_HEADER(readline/history.h)
803 if test $ac_cv_header_readline_history_h = no;then
804 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
805 fi
a969459c 806 AC_CHECK_LIB(readline, rl_completion_matches,
807 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
3d3de8c4 808 if test $ac_cv_lib_readline_rl_completion_matches = no; then
809 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
810 fi
811 ;;
7ea487bc 812esac
c0689394 813AC_SUBST(LIBREADLINE)
f027d331 814AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
7ea487bc 815
816dnl ----------
817dnl PAM module
6159928d
DO
818dnl
819dnl Quagga detects the PAM library it is built against by checking for a
820dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
821dnl is known to #include pam_appl.h, the standard header of a PAM library, and
822dnl openpam.h doesn't do that, although depends on the header too. Hence a
823dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
824dnl of OpenPAM.
7ea487bc 825dnl ----------
24cd435b 826if test "$with_libpam" = "yes"; then
6f0e3f6e
PJ
827 AC_CHECK_HEADER([security/pam_misc.h],
828 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
829 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
830 pam_conv_func="misc_conv"
831 ],
8e4da10b 832 [], FRR_INCLUDES)
6f0e3f6e
PJ
833 AC_CHECK_HEADER([security/openpam.h],
834 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
835 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
836 pam_conv_func="openpam_ttyconv"
837 ],
8e4da10b 838 [], FRR_INCLUDES[#include <security/pam_appl.h>])
24cd435b 839 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
840 AC_MSG_WARN([*** pam support will not be built ***])
841 with_libpam="no"
842 fi
843fi
844
7ea487bc 845if test "$with_libpam" = "yes"; then
6f0e3f6e 846dnl took this test from proftpds configure.in and suited to our needs
7ea487bc 847dnl -------------------------------------------------------------------------
848dnl
849dnl This next check looks funky due to a linker problem with some versions
850dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
851dnl omitted requiring libdl linking information. PAM-0.72 or better ships
852dnl with RedHat 6.2 and Debian 2.2 or better.
853AC_CHECK_LIB(pam, pam_start,
24cd435b 854 [AC_CHECK_LIB(pam, $pam_conv_func,
7ea487bc 855 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
856 LIBPAM="-lpam"],
857 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
858 LIBPAM="-lpam -lpam_misc"]
859 )
860 ],
861
862 [AC_CHECK_LIB(pam, pam_end,
24cd435b 863 [AC_CHECK_LIB(pam, $pam_conv_func,
a159ed93 864 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 865 LIBPAM="-lpam -ldl"],
a159ed93 866 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 867 LIBPAM="-lpam -ldl -lpam_misc"]
868 )
869 ],AC_MSG_WARN([*** pam support will not be built ***]),
870 [-ldl])
871 ]
872)
873fi
874AC_SUBST(LIBPAM)
875
876dnl -------------------------------
877dnl Endian-ness check
878dnl -------------------------------
879AC_WORDS_BIGENDIAN
880
881dnl -------------------------------
882dnl check the size in byte of the C
883dnl -------------------------------
884dnl AC_CHECK_SIZEOF(char)
885dnl AC_CHECK_SIZEOF(int)
886dnl AC_CHECK_SIZEOF(short)
887dnl AC_CHECK_SIZEOF(long)
888
889dnl ----------------------------
890dnl check existance of functions
891dnl ----------------------------
6f0e3f6e
PJ
892AC_FUNC_FNMATCH
893AC_FUNC_FORK
6f0e3f6e 894AC_FUNC_MKTIME
6f0e3f6e 895AC_FUNC_STAT
6f0e3f6e
PJ
896
897dnl -------------------------------
898dnl bgpd needs pow() and hence libm
899dnl -------------------------------
900TMPLIBS="$LIBS"
901AC_CHECK_HEADER([math.h],
902 [AC_CHECK_LIB([m], [pow],
903 [LIBM="-lm"
904 LIBS="$LIBS $LIBM"
6f0e3f6e
PJ
905 AC_CHECK_FUNCS(pow,[],[LIBM=""])
906 ])
907])
908if test x"$LIBM" = x ; then
909 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
910fi
911LIBS="$TMPLIBS"
912AC_SUBST(LIBM)
913
914dnl ---------------
915dnl other functions
916dnl ---------------
24f5e2fc
DL
917AC_CHECK_FUNCS([ \
918 strlcat strlcpy \
919 getgrouplist \
920 pledge])
6f0e3f6e 921
13460c44
FL
922AC_CHECK_HEADER([asm-generic/unistd.h],
923 [AC_CHECK_DECL(__NR_setns,
924 AC_DEFINE(HAVE_NETNS,, Have netns),,
8e4da10b 925 FRR_INCLUDES [#include <asm-generic/unistd.h>
13460c44 926 ])
428cd73f 927 AC_CHECK_FUNCS(setns)]
13460c44
FL
928 )
929
7ea487bc 930dnl ------------------------------------
931dnl Determine routing get and set method
932dnl ------------------------------------
933AC_MSG_CHECKING(zebra between kernel interface method)
934if test x"$opsys" = x"gnu-linux"; then
35c4bf71
DL
935 AC_MSG_RESULT(netlink)
936 RT_METHOD=rt_netlink.o
1fdc9eae 937 KERNEL_METHOD=kernel_netlink.o
35c4bf71
DL
938 AC_DEFINE(HAVE_NETLINK,,netlink)
939 netlink=yes
940 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
865730ab 941else
19877dd2 942 AC_MSG_RESULT(Route socket)
943 KERNEL_METHOD="kernel_socket.o"
944 RT_METHOD="rt_socket.o"
7ea487bc 945fi
946AC_SUBST(RT_METHOD)
947AC_SUBST(KERNEL_METHOD)
5adc2528 948AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
7ea487bc 949
238497fc
PJ
950dnl --------------------------
951dnl Determine IS-IS I/O method
952dnl --------------------------
745bf05f
DL
953AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
954AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
955AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
238497fc
PJ
956AC_CHECK_HEADER(net/bpf.h)
957AC_CHECK_HEADER(sys/dlpi.h)
958AC_MSG_CHECKING(zebra IS-IS I/O method)
959if test x"$opsys" = x"gnu-linux"; then
960 AC_MSG_RESULT(pfpacket)
745bf05f 961 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
238497fc
PJ
962elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
963 AC_MSG_RESULT(DLPI)
745bf05f 964 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc
PJ
965else
966 if test $ac_cv_header_net_bpf_h = no; then
967 if test $ac_cv_header_sys_dlpi_h = no; then
968 AC_MSG_RESULT(none)
969 AC_MSG_WARN([*** IS-IS support will not be built ***])
970 ISISD=""
971 else
972 AC_MSG_RESULT(DLPI)
973 fi
745bf05f 974 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc
PJ
975 else
976 AC_MSG_RESULT(BPF)
745bf05f 977 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
238497fc
PJ
978 fi
979fi
745bf05f 980AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
238497fc 981
b99760ab 982dnl ------------------------------------
983dnl check for broken CMSG_FIRSTHDR macro
984dnl ------------------------------------
6c20046f 985AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
5b087528 986AC_RUN_IFELSE([AC_LANG_SOURCE([[
b99760ab 987#ifdef SUNOS_5
988#define _XPG4_2
989#define __EXTENSIONS__
990#endif
24f5e2fc 991#include <stdlib.h>
b99760ab 992#include <sys/types.h>
993#include <sys/socket.h>
994
995main()
996{
997 struct msghdr msg;
998 char buf[4];
999
1000 msg.msg_control = buf;
1001 msg.msg_controllen = 0;
1002
1003 if (CMSG_FIRSTHDR(&msg) != NULL)
1004 exit(0);
1005 exit (1);
5b087528 1006}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
d33e8d7b 1007[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
b99760ab 1008
7ea487bc 1009dnl ------------------------------
1010dnl check kernel route read method
1011dnl ------------------------------
b2f36157 1012AC_CACHE_CHECK([route read method], [frr_cv_rtread_method],
5589ffa7 1013[if test "x$netlink" = xyes; then
b2f36157 1014 frr_cv_rtread_method="netlink"
7ea487bc 1015else
b2f36157 1016for frr_cv_rtread_method in /dev/ip /dev/null;
7ea487bc 1017do
b2f36157 1018 test x`ls $frr_cv_rtread_method 2>/dev/null` = x"$frr_cv_rtread_method" && break
7ea487bc 1019done
b2f36157 1020case $frr_cv_rtread_method in
9c30ab6b 1021 "/dev/ip")
1022 case "$host" in
b2f36157
DL
1023 *-freebsd*) frr_cv_rtread_method="sysctl";;
1024 *) frr_cv_rtread_method="getmsg";;
9c30ab6b 1025 esac;;
5589ffa7 1026 *)
b2f36157 1027 frr_cv_rtread_method="sysctl";;
7ea487bc 1028esac
1029fi])
b2f36157 1030RTREAD_METHOD=rtread_${frr_cv_rtread_method}.o
7ea487bc 1031AC_SUBST(RTREAD_METHOD)
1032
1033dnl -----------------------------
1034dnl check interface lookup method
1035dnl -----------------------------
19877dd2 1036IOCTL_METHOD=ioctl.o
7ea487bc 1037AC_MSG_CHECKING(interface looking up method)
1038if test "$netlink" = yes; then
1039 AC_MSG_RESULT(netlink)
1040 IF_METHOD=if_netlink.o
19877dd2 1041elif test "$opsys" = "sol2-6";then
1042 AC_MSG_RESULT(Solaris GIF)
1043 IF_METHOD=if_ioctl.o
afd8a129 1044elif test "$opsys" = "sol8";then
19877dd2 1045 AC_MSG_RESULT(Solaris GLIF)
1046 IF_METHOD=if_ioctl_solaris.o
1047 IOCTL_METHOD=ioctl_solaris.o
19877dd2 1048elif test "$opsys" = "openbsd";then
1049 AC_MSG_RESULT(openbsd)
1050 IF_METHOD=if_ioctl.o
1051elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
1052 AC_MSG_RESULT(sysctl)
7ea487bc 1053 IF_METHOD=if_sysctl.o
1054 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
19877dd2 1055else
7ea487bc 1056 AC_MSG_RESULT(ioctl)
1057 IF_METHOD=if_ioctl.o
7ea487bc 1058fi
1059AC_SUBST(IF_METHOD)
19877dd2 1060AC_SUBST(IOCTL_METHOD)
7ea487bc 1061
42c98199 1062dnl ---------------------------------------------------------------
1063dnl figure out how to specify an interface in multicast sockets API
1064dnl ---------------------------------------------------------------
8e4da10b 1065AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
42c98199 1066
b3f2bf7c 1067AC_CHECK_HEADERS([linux/mroute.h], [], [],[
24f5e2fc
DL
1068 #include <sys/socket.h>
1069 #include <netinet/in.h>
b3f2bf7c
RW
1070 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1071 #include <linux/types.h>
1072])
1073
8e4da10b
DL
1074m4_define([FRR_INCLUDES],
1075FRR_INCLUDES
b3f2bf7c
RW
1076[#if HAVE_LINUX_MROUTE_H
1077# include <linux/mroute.h>
1078#endif
1079])dnl
1080
1081AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
24f5e2fc
DL
1082 #include <sys/socket.h>
1083 #include <sys/types.h>
1084 #include <netinet/in.h>
1085 #include <net/route.h>
b3f2bf7c
RW
1086])
1087
8e4da10b
DL
1088m4_define([FRR_INCLUDES],
1089FRR_INCLUDES
b3f2bf7c
RW
1090[#if HAVE_NETINET_IP_MROUTE_H
1091# include <netinet/ip_mroute.h>
1092#endif
1093])dnl
1094
42c98199 1095AC_MSG_CHECKING([for BSD struct ip_mreq hack])
24f5e2fc
DL
1096AC_TRY_COMPILE([#include <sys/param.h>],
1097[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__sun)
42c98199 1098 return (0);
1099#else
1100 #error No support for BSD struct ip_mreq hack detected
1101#endif],[AC_MSG_RESULT(yes)
1102AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1103AC_MSG_RESULT(no))
1104
10d04cdb
DT
1105AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1106AC_TRY_COMPILE([
1107#include <sys/types.h>
1108#include <netinet/in.h>
1109], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1110], [AC_MSG_RESULT(yes)
1111AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1112AC_MSG_RESULT(no))
1113
c543a173
AS
1114dnl ---------------------------------------------------------------
1115dnl figure out how to check link-state
1116dnl ---------------------------------------------------------------
24f5e2fc
DL
1117AC_CHECK_HEADER( [net/if_media.h],
1118 [m4_define([LINK_DETECT_INCLUDES],
8e4da10b 1119 FRR_INCLUDES
24f5e2fc
DL
1120 [#include <net/if_media.h>
1121 ])
1122 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1123 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1124 [], LINK_DETECT_INCLUDES)],
1125 [],
8e4da10b 1126 FRR_INCLUDES)
c543a173 1127
9234b382
DV
1128dnl ---------------------------------------------------------------
1129dnl Additional, newer way to check link-state using ifi_link_state.
1130dnl Not available in all BSD's when ifmediareq available
1131dnl ---------------------------------------------------------------
24f5e2fc
DL
1132AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1133 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
8e4da10b 1134 [], FRR_INCLUDES)
9234b382 1135
0df7c91f
PJ
1136dnl ------------------------
1137dnl TCP_MD5SIG socket option
1138dnl ------------------------
1139
1140AC_CHECK_HEADER([netinet/tcp.h],
1141 [m4_define([MD5_INCLUDES],
8e4da10b 1142 FRR_INCLUDES
0df7c91f
PJ
1143 [#include <netinet/tcp.h>
1144 ])
1145 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1146 [],
8e4da10b 1147 FRR_INCLUDES)
0df7c91f
PJ
1148if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1149 AC_CHECK_HEADER([linux/tcp.h],
1150 [m4_define([MD5_INCLUDES],
8e4da10b 1151 FRR_INCLUDES
0df7c91f
PJ
1152 [#include <linux/tcp.h>
1153 ])
1154 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1155fi
1156
7ea487bc 1157dnl -----------------------------
1158dnl check ipforward detect method
1159dnl -----------------------------
b2f36157 1160AC_CACHE_CHECK([ipforward method], [frr_cv_ipforward_method],
ca9f342c
DL
1161[if test x$cross_compiling = xyes; then
1162 if test x"$opsys" = x"gnu-linux"; then
b2f36157 1163 frr_cv_ipforward_method=/proc/net/snmp
ca9f342c 1164 else
b2f36157 1165 frr_cv_ipforward_method=/dev/ip
ca9f342c
DL
1166 fi
1167else
b2f36157 1168 for frr_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
ca9f342c 1169 do
b2f36157 1170 test x`ls $frr_cv_ipforward_method 2>/dev/null` = x"$frr_cv_ipforward_method" && break
ca9f342c
DL
1171 done
1172fi
b2f36157
DL
1173case $frr_cv_ipforward_method in
1174 "/proc/net/snmp") frr_cv_ipforward_method="proc";;
7ea487bc 1175 "/dev/ip")
1176 case "$host" in
b2f36157
DL
1177 *-freebsd*) frr_cv_ipforward_method="sysctl";;
1178 *) frr_cv_ipforward_method="solaris";;
7ea487bc 1179 esac;;
b2f36157 1180 *) frr_cv_ipforward_method="sysctl";;
7ea487bc 1181esac])
b2f36157 1182IPFORWARD=ipforward_${frr_cv_ipforward_method}.o
7ea487bc 1183AC_SUBST(IPFORWARD)
1184
60060acc
RW
1185dnl ----------------------------------------------------------------------------
1186dnl figure out if domainname is available in the utsname struct (GNU extension).
1187dnl ----------------------------------------------------------------------------
1188AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1189
7ea487bc 1190dnl ----------
1191dnl IPv6 check
1192dnl ----------
1193AC_MSG_CHECKING(whether does this OS have IPv6 stack)
7ea487bc 1194dnl ---------
1195dnl KAME IPv6
1196dnl ---------
1cbb5dfc 1197 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
a159ed93 1198 AC_DEFINE(KAME,1,KAME IPv6)
a159ed93 1199 AC_MSG_RESULT(KAME)
19877dd2 1200dnl ------------------------------------
1201dnl Solaris 9, 10 and potentially higher
1202dnl ------------------------------------
afd8a129 1203 elif test x"$opsys" = x"sol8"; then
19877dd2 1204 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
19877dd2 1205 AC_MSG_RESULT(Solaris IPv6)
7ea487bc 1206dnl ----------
1207dnl Linux IPv6
1208dnl ----------
42bb3dfd 1209 elif test x"$opsys" = x"gnu-linux"; then
3ef0b877 1210 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
d8dc5257
DS
1211 dnl Linux has a compilation problem with mixing
1212 dnl netinet/in.h and linux/in6.h they are not
1213 dnl compatible. There has been discussion on
1214 dnl how to fix it but no real progress on implementation
1215 dnl when they fix it, remove this
1216 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
42bb3dfd
DL
1217 AC_MSG_RESULT(Linux IPv6)
1218 else
80ec006d 1219 AC_MSG_ERROR([Failed to detect IPv6 stack])
a159ed93 1220 fi
7ea487bc 1221
fa3232e1 1222dnl ------------------
1223dnl IPv6 header checks
1224dnl ------------------
24f5e2fc 1225AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
6f0e3f6e 1226 netinet6/in6_var.h netinet6/nd6.h], [], [],
8e4da10b 1227 FRR_INCLUDES)
fa3232e1 1228
8e4da10b
DL
1229m4_define([FRR_INCLUDES],dnl
1230FRR_INCLUDES
6f0e3f6e
PJ
1231[#if HAVE_NETINET6_IN6_H
1232#include <netinet6/in6.h>
1233#endif
1234#if HAVE_NETINET_IN6_VAR_H
1235#include <netinet/in6_var.h>
1236#endif
24f5e2fc 1237#include <netinet/icmp6.h>
6f0e3f6e
PJ
1238#if HAVE_NETINET6_IN6_VAR_H
1239# include <netinet6/in6_var.h>
1240#endif
1241#if HAVE_NETINET6_ND6_H
fbf24544 1242# include <netinet6/nd6.h>
6f0e3f6e
PJ
1243#endif
1244])dnl
1245
cbcd9bfc
JT
1246dnl disable doc check
1247if test "${enable_doc}" = "no";then
1248 DOC=""
1249else
1250 DOC="doc"
1251fi
1252
7ea487bc 1253dnl --------------------
1254dnl Daemon disable check
1255dnl --------------------
1256if test "${enable_zebra}" = "no";then
1257 ZEBRA=""
1258else
1259 ZEBRA="zebra"
1260fi
f027d331 1261AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
7ea487bc 1262
1263if test "${enable_bgpd}" = "no";then
1264 BGPD=""
1265else
1266 BGPD="bgpd"
1267fi
f027d331 1268AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
7ea487bc 1269
1270if test "${enable_ripd}" = "no";then
1271 RIPD=""
1272else
1273 RIPD="ripd"
1274fi
f027d331 1275AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
7ea487bc 1276
1277if test "${enable_ospfd}" = "no";then
1278 OSPFD=""
1279else
1280 OSPFD="ospfd"
1281fi
f027d331 1282AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
7ea487bc 1283
6ba069f3
DS
1284if test "${enable_ldpd}" = "no";then
1285 LDPD=""
1286else
7758fe9f
DL
1287 AX_PROG_PERL_MODULES(XML::LibXML, , [
1288 if test -f "${srcdir}/ldpd/ldp_vty_cmds.c"; then
1289 AC_MSG_WARN([XML::LibXML perl module not found, using pregenerated ldp_vty_cmds.c])
1290 else
1291 AC_MSG_ERROR([XML::LibXML perl module not found and pregenerated ldp_vty_cmds.c missing])
1292 fi
1293 ])
1294
eac6e3f0 1295 LDPD="ldpd"
87ab4aec 1296 AC_DEFINE(HAVE_LDPD, 1, ldpd)
eac6e3f0
RW
1297fi
1298AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1299
42350cfc
DL
1300NHRPD=""
1301if test "$opsys" = "gnu-linux"; then
1302 if test "${enable_nhrpd}" != "no"; then
1303 NHRPD="nhrpd"
1304 fi
2fb975da 1305else
42350cfc
DL
1306 if test "${enable_nhrpd}" = "yes"; then
1307 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1308 fi
2fb975da
TT
1309fi
1310AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1311
7f57883e
DS
1312if test "${enable_eigrpd}" = "no";then
1313 EIGRPD=""
1314else
1315 EIGRPD="eigrpd"
1316fi
1317AM_CONDITIONAL(EIGRPD, test "x$EIGRPD" = "xeigrpd")
1318
9473e340
DS
1319if test "${enable_watchfrr}" = "no";then
1320 WATCHFRR=""
d0199430 1321else
9473e340 1322 WATCHFRR="watchfrr"
d0199430 1323fi
9473e340 1324AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
d0199430 1325
1ef74ef7 1326OSPFCLIENT=""
cd66cd4c 1327if test "${enable_ospfapi}" != "no";then
9a569848 1328 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1ef74ef7 1329
cd66cd4c 1330 if test "${enable_ospfclient}" != "no";then
1ef74ef7 1331 OSPFCLIENT="ospfclient"
1ef74ef7 1332 fi
7ea487bc 1333fi
cd66cd4c 1334
f027d331 1335AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
7ea487bc 1336
1337case "${enable_ripngd}" in
7ea487bc 1338 "no" ) RIPNGD="";;
80ec006d 1339 * ) RIPNGD="ripngd";;
7ea487bc 1340esac
f027d331 1341AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
7ea487bc 1342
1343case "${enable_ospf6d}" in
7ea487bc 1344 "no" ) OSPF6D="";;
80ec006d 1345 * ) OSPF6D="ospf6d";;
7ea487bc 1346esac
f027d331 1347AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
7ea487bc 1348
9e867fe6 1349case "${enable_isisd}" in
9e867fe6 1350 "no" ) ISISD="";;
c3a9461e 1351 * ) ISISD="isisd";;
9e867fe6 1352esac
f027d331 1353AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
9e867fe6 1354
12e41d03 1355case "${enable_pimd}" in
12e41d03 1356 "no" ) PIMD="";;
f0646db0 1357 * ) PIMD="pimd";;
12e41d03
DL
1358esac
1359AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1360
7ea487bc 1361if test "${enable_bgp_announce}" = "no";then
750e8146
PJ
1362 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1363else
1364 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
7ea487bc 1365fi
1366
65efcfce
LB
1367if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1368 with_rfp_path="bgpd/rfp-example"
1369fi
1370if test "${with_rfp_path}" != "no"; then
1371 VNC_RFP_PATH="${with_rfp_path}"
1372 AC_SUBST(VNC_RFP_PATH)
1373fi
1374
f95f2ad9 1375if test "${enable_bgp_vnc}" != "no";then
65efcfce
LB
1376 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1377 RFPTEST="${with_rfp_path}/rfptest"
1378 LIBRFP="${with_rfp_path}/librfp"
1379 RFPINC="${with_rfp_path}/librfp"
1380else
1381 RFPTEST=
1382 LIBRFP=
1383 RFPINC="bgpd/rfp-example/librfp"
1384fi
1385# set
f95f2ad9 1386AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
65efcfce 1387
cbcd9bfc 1388AC_SUBST(DOC)
7ea487bc 1389AC_SUBST(ZEBRA)
65efcfce
LB
1390AC_SUBST(RFPTEST)
1391AC_SUBST(LIBRFP)
1392AC_SUBST(RFPINC)
7ea487bc 1393AC_SUBST(BGPD)
1394AC_SUBST(RIPD)
1395AC_SUBST(RIPNGD)
1396AC_SUBST(OSPFD)
1397AC_SUBST(OSPF6D)
eac6e3f0 1398AC_SUBST(LDPD)
2fb975da 1399AC_SUBST(NHRPD)
7f57883e 1400AC_SUBST(EIGRPD)
9473e340 1401AC_SUBST(WATCHFRR)
9e867fe6 1402AC_SUBST(ISISD)
12e41d03 1403AC_SUBST(PIMD)
97cee877 1404AC_SUBST(SOLARIS)
7ea487bc 1405AC_SUBST(VTYSH)
7ea487bc 1406AC_SUBST(CURSES)
1407AC_SUBST(OSPFCLIENT)
1ef74ef7 1408AC_SUBST(OSPFAPI)
7ea487bc 1409AC_CHECK_LIB(crypt, crypt)
1410AC_CHECK_LIB(resolv, res_init)
7ea487bc 1411
25f45887
JJ
1412dnl ---------------------------
1413dnl check system has PCRE regexp
1414dnl ---------------------------
1415if test "x$enable_pcreposix" = "xyes"; then
1416 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1417 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1418fi
25f45887 1419AC_SUBST(HAVE_LIBPCREPOSIX)
7ea487bc 1420
2fb975da
TT
1421dnl ------------------
1422dnl check C-Ares library
1423dnl ------------------
42350cfc 1424if test "${NHRPD}" != ""; then
2fb975da
TT
1425 PKG_CHECK_MODULES([CARES], [libcares])
1426fi
1427
1428
7ea487bc 1429dnl ------------------
b1fc9acb 1430dnl check Net-SNMP library
7ea487bc 1431dnl ------------------
d6be5fb9 1432if test "${enable_snmp}" != ""; then
08d7f653
VB
1433 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1434 if test x"$NETSNMP_CONFIG" = x"no"; then
1435 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1436 fi
46081234
DL
1437 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1438 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
08d7f653
VB
1439 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1440 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1441int main(void);
1442],
1443[
1444{
1445 return 0;
1446}
1447])],[AC_MSG_RESULT(yes)],[
1448 AC_MSG_RESULT(no)
1449 AC_MSG_ERROR([--enable-snmp given but not usable])])
d6be5fb9
VB
1450 case "${enable_snmp}" in
1451 yes)
1452 SNMP_METHOD=agentx
1453 ;;
1454 smux|agentx)
1455 SNMP_METHOD="${enable_snmp}"
1456 ;;
1457 *)
1458 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1459 ;;
1460 esac
1461 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1462 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1463 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
6cf9df08 1464fi
46081234
DL
1465AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1466AC_SUBST(SNMP_LIBS)
1467AC_SUBST(SNMP_CFLAGS)
6cf9df08 1468
b249c083
DL
1469dnl ---------------
1470dnl dlopen & dlinfo
1471dnl ---------------
30771d65
DL
1472AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1473 AC_MSG_ERROR([unable to find the dlopen()])
1474])
1475
b249c083
DL
1476AC_CHECK_HEADERS([link.h])
1477
1478AC_MSG_CHECKING([for dlinfo(RTLD_DI_ORIGIN)])
1479AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1480#include <stdlib.h>
1481#ifdef HAVE_LINK_H
1482#include <link.h>
1483#endif
1484#include <dlfcn.h>
1485]], [[
1486 char origin[1];
1487 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1488]])], [
1489 AC_MSG_RESULT(yes)
1490 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1491], [
1492 AC_MSG_RESULT(no)
1493])
1494
1495AC_MSG_CHECKING([for dlinfo(RTLD_DI_LINKMAP)])
1496AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1497#include <stdlib.h>
1498#ifdef HAVE_LINK_H
1499#include <link.h>
1500#endif
1501#include <dlfcn.h>
1502]], [[
1503 struct link_map *lm = NULL;
1504 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1505]])], [
1506 AC_MSG_RESULT(yes)
1507 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1508], [
1509 AC_MSG_RESULT(no)
1510])
1511
6cf9df08 1512
62ff928b
DS
1513AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1514
7ea487bc 1515dnl ---------------------------
6f0e3f6e 1516dnl sockaddr and netinet checks
7ea487bc 1517dnl ---------------------------
24f5e2fc
DL
1518AC_CHECK_TYPES([
1519 struct sockaddr_dl,
1520 struct vifctl, struct mfcctl, struct sioc_sg_req,
12e41d03 1521 vifi_t, struct sioc_vif_req, struct igmpmsg,
6f0e3f6e
PJ
1522 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1523 struct nd_opt_adv_interval, struct rt_addrinfo,
11770e10 1524 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
8e4da10b 1525 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
1526
1527AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1528 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
ca3ccd87 1529 struct sockaddr_dl.sdl_len,
6f0e3f6e
PJ
1530 struct if6_aliasreq.ifra_lifetime,
1531 struct nd_opt_adv_interval.nd_opt_ai_type],
8e4da10b 1532 [], [], FRR_INCLUDES)
29c4c9bd 1533
6f0e3f6e 1534dnl ---------------------------
11770e10 1535dnl IRDP/pktinfo/icmphdr checks
6f0e3f6e
PJ
1536dnl ---------------------------
1537AC_CHECK_TYPES([struct in_pktinfo],
11770e10
PJ
1538 [AC_CHECK_TYPES([struct icmphdr],
1539 [if test "${enable_irdp}" != "no"; then
1540 AC_DEFINE(HAVE_IRDP,, IRDP)
1541 fi],
1542 [if test "${enable_irdp}" = "yes"; then
1543 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
8e4da10b 1544 fi], [FRR_INCLUDES])],
6f0e3f6e
PJ
1545 [if test "${enable_irdp}" = "yes"; then
1546 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
8e4da10b 1547 fi], [FRR_INCLUDES])
29c4c9bd 1548
12e41d03
DL
1549dnl -----------------------
1550dnl checking for IP_PKTINFO
1551dnl -----------------------
1552AC_MSG_CHECKING(for IP_PKTINFO)
1553AC_TRY_COMPILE([#include <netdb.h>], [
1554 int opt = IP_PKTINFO;
1555], [
1556 AC_MSG_RESULT(yes)
1557 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1558], [
1559 AC_MSG_RESULT(no)
1560])
1561
1562dnl ---------------------------
1563dnl checking for IP_RECVDSTADDR
1564dnl ---------------------------
1565AC_MSG_CHECKING(for IP_RECVDSTADDR)
1566AC_TRY_COMPILE([#include <netinet/in.h>], [
1567 int opt = IP_RECVDSTADDR;
1568], [
1569 AC_MSG_RESULT(yes)
1570 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1571], [
1572 AC_MSG_RESULT(no)
1573])
1574
1575dnl ----------------------
1576dnl checking for IP_RECVIF
1577dnl ----------------------
1578AC_MSG_CHECKING(for IP_RECVIF)
1579AC_TRY_COMPILE([#include <netinet/in.h>], [
1580 int opt = IP_RECVIF;
1581], [
1582 AC_MSG_RESULT(yes)
1583 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1584], [
1585 AC_MSG_RESULT(no)
1586])
1587
eac6e3f0
RW
1588dnl ----------------------
1589dnl checking for SO_BINDANY
1590dnl ----------------------
1591AC_MSG_CHECKING(for SO_BINDANY)
1592AC_TRY_COMPILE([#include <sys/socket.h>], [
1593 int opt = SO_BINDANY;
1594], [
1595 AC_MSG_RESULT(yes)
1596 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1597], [
1598 AC_MSG_RESULT(no)
1599])
1600
1601dnl ----------------------
1602dnl checking for IP_FREEBIND
1603dnl ----------------------
1604AC_MSG_CHECKING(for IP_FREEBIND)
1605AC_TRY_COMPILE([#include <netinet/in.h>], [
1606 int opt = IP_FREEBIND;
1607], [
1608 AC_MSG_RESULT(yes)
1609 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1610], [
1611 AC_MSG_RESULT(no)
1612])
1613
ba0cb3fe
DS
1614dnl --------------------------------------
1615dnl checking for be32dec existence or not
1616dnl --------------------------------------
1617AC_CHECK_DECLS([be32enc, be32dec], [], [],
1618 [#include <sys/endian.h>])
1619
c4376c9d
SH
1620dnl --------------------------------------
1621dnl checking for clock_time monotonic struct and call
1622dnl --------------------------------------
6511cab2
PJ
1623AC_CHECK_DECL(CLOCK_MONOTONIC,
1624 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
9964fcfc 1625 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
8e4da10b 1626], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
c4376c9d 1627
bbf5ffa0
QY
1628dnl --------------------------------------
1629dnl checking for flex and bison
1630dnl --------------------------------------
4a06690f 1631
bbf5ffa0 1632AM_PROG_LEX
4a06690f
DL
1633AC_MSG_CHECKING(version of flex)
1634quagga_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1635quagga_ac_flex_version="${quagga_ac_flex_version##* }"
1636AC_MSG_RESULT([$quagga_ac_flex_version])
1637AX_COMPARE_VERSION([$quagga_ac_flex_version], [lt], [2.5.20], [
1638 LEX="$SHELL $missing_dir/missing flex"
1639 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1640 AC_MSG_WARN([using pregenerated flex output files])
1641 else
1642 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1643 fi
1644 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1645 AC_SUBST([LEXLIB], [''])
1646])
0d37f9f3 1647
bbf5ffa0 1648AC_PROG_YACC
0d37f9f3
DL
1649dnl thanks GNU bison for this b*llshit...
1650AC_MSG_CHECKING(version of bison)
1651quagga_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1652quagga_ac_bison_version="${quagga_ac_bison_version##* }"
1653quagga_ac_bison_missing="false"
1654case "x${quagga_ac_bison_version}" in
1655 x2.7*)
1656 BISON_OPENBRACE='"'
1657 BISON_CLOSEBRACE='"'
05dbb7df 1658 BISON_VERBOSE=''
0d37f9f3
DL
1659 AC_MSG_RESULT([$quagga_ac_bison_version - 2.7 or older])
1660 ;;
1661 x2.*|x1.*)
1662 AC_MSG_RESULT([$quagga_ac_bison_version])
1663 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1664 quagga_ac_bison_missing="true"
1665 ;;
1666 x)
1667 AC_MSG_RESULT([none])
1668 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1669 quagga_ac_bison_missing="true"
1670 ;;
1671 *)
1672 BISON_OPENBRACE='{'
1673 BISON_CLOSEBRACE='}'
05dbb7df 1674 BISON_VERBOSE='-Dparse.error=verbose'
0d37f9f3
DL
1675 AC_MSG_RESULT([$quagga_ac_bison_version - 3.0 or newer])
1676 ;;
1677esac
1678AC_SUBST(BISON_OPENBRACE)
1679AC_SUBST(BISON_CLOSEBRACE)
05dbb7df 1680AC_SUBST(BISON_VERBOSE)
0d37f9f3
DL
1681
1682if $quagga_ac_bison_missing; then
1683 YACC="$SHELL $missing_dir/missing bison -y"
1684 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1685 AC_MSG_WARN([using pregenerated bison output files])
1686 else
1687 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1688 fi
1689fi
bbf5ffa0 1690
edd7c245 1691dnl -------------------
1692dnl capabilities checks
1693dnl -------------------
41d3fc96 1694if test "${enable_capabilities}" != "no"; then
1695 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1696 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1697 [AC_MSG_RESULT(yes)
1698 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
8e4da10b 1699 frr_ac_keepcaps="yes"],
41d3fc96 1700 AC_MSG_RESULT(no)
edd7c245 1701 )
8e4da10b 1702 if test x"${frr_ac_keepcaps}" = x"yes"; then
41d3fc96 1703 AC_CHECK_HEADERS(sys/capability.h)
1704 fi
1705 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1706 AC_CHECK_LIB(cap, cap_init,
1707 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1708 LIBCAP="-lcap"
8e4da10b 1709 frr_ac_lcaps="yes"]
41d3fc96 1710 )
ceacedba 1711 else
1712 AC_CHECK_HEADERS(priv.h,
1713 [AC_MSG_CHECKING(Solaris style privileges are available)
1714 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1715 [AC_MSG_RESULT(yes)
1716 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
8e4da10b 1717 frr_ac_scaps="yes"],
ceacedba 1718 AC_MSG_RESULT(no)
1719 )
1720 ]
1721 )
1722 fi
8e4da10b
DL
1723 if test x"${frr_ac_scaps}" = x"yes" \
1724 -o x"${frr_ac_lcaps}" = x"yes"; then
ceacedba 1725 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
41d3fc96 1726 fi
edd7c245 1727fi
1728AC_SUBST(LIBCAP)
1729
fb2d1502 1730dnl ---------------------------
1731dnl check for glibc 'backtrace'
1732dnl ---------------------------
8c99b4c1
DL
1733if test x"${enable_backtrace}" != x"no" ; then
1734 backtrace_ok=no
1735 AC_CHECK_HEADER([execinfo.h], [
1736 AC_SEARCH_LIBS([backtrace], [execinfo], [
1737 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1738 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1739 backtrace_ok=yes
1740 ],, [-lm])
eda3529e 1741 ])
8c99b4c1
DL
1742
1743 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1744 dnl user explicitly requested backtrace but we failed to find support
1745 AC_MSG_FAILURE([failed to find backtrace support])
1746 fi
1747fi
fb2d1502 1748
41be32bf
PJ
1749dnl -----------------------------------------
1750dnl check for malloc mallinfo struct and call
1751dnl this must try and link using LIBS, in
1752dnl order to check no alternative allocator
1753dnl has been specified, which might not provide
1754dnl mallinfo, e.g. such as Umem on Solaris.
1755dnl -----------------------------------------
6f0e3f6e 1756AC_CHECK_HEADER([malloc.h],
41be32bf
PJ
1757 [AC_MSG_CHECKING(whether mallinfo is available)
1758 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1759 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1760 [AC_MSG_RESULT(yes)
1761 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1762 AC_MSG_RESULT(no)
1763 )
8e4da10b 1764 ], [], FRR_INCLUDES)
41be32bf 1765
408ad943 1766dnl ----------
1767dnl configure date
1768dnl ----------
1769CONFDATE=`date '+%Y%m%d'`
1770AC_SUBST(CONFDATE)
1771
7ea487bc 1772dnl ------------------------------
a159ed93 1773dnl set paths for state directory
23bd12c3 1774dnl ------------------------------
e84999d9 1775AC_MSG_CHECKING(directory to use for state file)
23bd12c3 1776if test "${prefix}" = "NONE"; then
b2f36157 1777 frr_statedir_prefix="";
23bd12c3 1778else
b2f36157 1779 frr_statedir_prefix=${prefix}
23bd12c3 1780fi
1781if test "${localstatedir}" = '${prefix}/var'; then
8e4da10b 1782 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
b2f36157
DL
1783 ${frr_statedir_prefix}/var/adm dnl
1784 ${frr_statedir_prefix}/etc dnl
a159ed93 1785 /var/run dnl
1786 /var/adm dnl
1787 /etc dnl
1788 /dev/null;
23bd12c3 1789 do
8e4da10b 1790 test -d $FRR_STATE_DIR && break
23bd12c3 1791 done
8e4da10b 1792 frr_statedir=$FRR_STATE_DIR
23bd12c3 1793else
b2f36157 1794 frr_statedir=${localstatedir}
a159ed93 1795fi
b2f36157 1796if test $frr_statedir = "/dev/null"; then
a159ed93 1797 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1798fi
b2f36157
DL
1799AC_MSG_RESULT(${frr_statedir})
1800AC_SUBST(frr_statedir)
1801
b2f36157 1802AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
b2f36157 1803AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
b2f36157 1804AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
7ea487bc 1805
95c4aff2
DL
1806dnl autoconf does this, but it does it too late...
1807test "x$prefix" = xNONE && prefix=$ac_default_prefix
1808test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1809
1810dnl get the full path, recursing through variables...
1811vtysh_bin="$bindir/vtysh"
1812for I in 1 2 3 4 5 6 7 8 9 10; do
1813 eval vtysh_bin="\"$vtysh_bin\""
1814done
1815AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1816
a07169b1
DL
1817CFG_SYSCONF="$sysconfdir"
1818CFG_SBIN="$sbindir"
1819CFG_STATE="$frr_statedir"
30771d65 1820CFG_MODULE="$moduledir"
a07169b1
DL
1821for I in 1 2 3 4 5 6 7 8 9 10; do
1822 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1823 eval CFG_SBIN="\"$CFG_SBIN\""
1824 eval CFG_STATE="\"$CFG_STATE\""
30771d65 1825 eval CFG_MODULE="\"$CFG_MODULE\""
a07169b1
DL
1826done
1827AC_SUBST(CFG_SYSCONF)
1828AC_SUBST(CFG_SBIN)
1829AC_SUBST(CFG_STATE)
30771d65
DL
1830AC_SUBST(CFG_MODULE)
1831AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
a07169b1 1832
7ea487bc 1833dnl ---------------------------
1834dnl Check htonl works correctly
1835dnl ---------------------------
1836AC_MSG_CHECKING(for working htonl)
6f0e3f6e 1837AC_CACHE_VAL(ac_cv_htonl_works,
8e4da10b 1838 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
6f0e3f6e
PJ
1839 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1840 ]
1841)
7ea487bc 1842AC_MSG_RESULT($ac_cv_htonl_works)
1843
dad253b4 1844AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
9473e340 1845 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
eac6e3f0 1846 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
f281ab97 1847 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
12e41d03 1848 pimd/Makefile
7f57883e 1849 eigrpd/Makefile
2fb975da 1850 nhrpd/Makefile
f281ab97 1851 redhat/Makefile
1018422a 1852 tools/Makefile
69f1fc22 1853 pkgsrc/Makefile
93c7bed1 1854 fpm/Makefile
8b0cdbb8 1855 redhat/frr.spec
3ab11ecc
MW
1856 snapcraft/Makefile
1857 snapcraft/snapcraft.yaml
b7a97f82 1858 lib/version.h
8efe88ea 1859 tests/lib/cli/test_cli.refout
14c17fd8 1860 doc/defines.texi
461c7bee
DL
1861 doc/bgpd.8
1862 doc/isisd.8
1863 doc/ospf6d.8
1864 doc/ospfclient.8
1865 doc/ospfd.8
1866 doc/ldpd.8
1867 doc/ripd.8
6c85c081 1868 doc/eigrpd.8
461c7bee
DL
1869 doc/ripngd.8
1870 doc/pimd.8
caba6093 1871 doc/nhrpd.8
461c7bee 1872 doc/vtysh.1
9473e340 1873 doc/watchfrr.8
461c7bee 1874 doc/zebra.8
438f5286 1875 doc/frr.1
cbd04084 1876 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
7f57883e
DS
1877 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
1878 pkgsrc/eigrpd.sh])
65efcfce 1879
f95f2ad9 1880if test "${enable_bgp_vnc}" != "no"; then
65efcfce
LB
1881 if test "${with_rfp_path}" = "bgpd/rfp-example" ; then
1882 AC_CONFIG_FILES([bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile])
1883 else
1884 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1885 fi
1886fi
1887
26275b05 1888AC_CONFIG_FILES([solaris/Makefile])
1889
670bbf19 1890AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
65efcfce 1891
48577196 1892## Hack, but working solution to avoid rebuilding of quagga.info.
1893## It's already in CVS until texinfo 4.7 is more common.
14c17fd8 1894AC_OUTPUT
7ea487bc 1895
1896echo "
447a8fe9 1897FRRouting configuration
b2f36157
DL
1898------------------------------
1899FRR version : ${PACKAGE_VERSION}
1080c13f 1900host operating system : ${host_os}
7ea487bc 1901source code location : ${srcdir}
1902compiler : ${CC}
1903compiler flags : ${CFLAGS}
6f0e3f6e 1904make : ${MAKE-make}
6f0e3f6e 1905linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
b2f36157 1906state file directory : ${frr_statedir}
dc7a2bf1 1907config file directory : `eval echo \`echo ${sysconfdir}\``
d6b72f7a 1908example directory : `eval echo \`echo ${exampledir}\``
30771d65 1909module directory : ${CFG_MODULE}
b2f36157
DL
1910user to run as : ${enable_user}
1911group to run as : ${enable_group}
1912group for vty sockets : ${enable_vty_group}
aa593d5e 1913config file mask : ${enable_configfile_mask}
1914log file mask : ${enable_logfile_mask}
dad253b4 1915zebra protobuf enabled : ${have_protobuf:-no}
dc7a2bf1 1916
1917The above user and group must have read/write access to the state file
105b8239 1918directory and to the config files in the config file directory."