]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
zebra: Clean up indentation level in nexthop_active
[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" ])
08c369bd
DS
231AC_ARG_WITH(vtysh_pager,
232 AS_HELP_STRING([--with-vtysh-pager=PAGER], [control what pager is compiled in as default]),
233 VTYSH_PAGER=$withval, VTYSH_PAGER="more")
7ea487bc 234AC_ARG_ENABLE(vtysh,
23925784 235 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
cbcd9bfc 236AC_ARG_ENABLE(doc,
23925784 237 AS_HELP_STRING([--disable-doc], [do not build docs]))
7ea487bc 238AC_ARG_ENABLE(zebra,
23925784 239 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
7ea487bc 240AC_ARG_ENABLE(bgpd,
23925784 241 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
7ea487bc 242AC_ARG_ENABLE(ripd,
23925784 243 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
7ea487bc 244AC_ARG_ENABLE(ripngd,
23925784 245 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
7ea487bc 246AC_ARG_ENABLE(ospfd,
23925784 247 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
7ea487bc 248AC_ARG_ENABLE(ospf6d,
23925784 249 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
eac6e3f0
RW
250AC_ARG_ENABLE(ldpd,
251 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
2fb975da
TT
252AC_ARG_ENABLE(nhrpd,
253 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
7f57883e
DS
254AC_ARG_ENABLE(eigrpd,
255 AS_HELP_STRING([--disable-eigrpd], [do not build eigrpd]))
9473e340
DS
256AC_ARG_ENABLE(watchfrr,
257 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
9e867fe6 258AC_ARG_ENABLE(isisd,
c3a9461e 259 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
12e41d03 260AC_ARG_ENABLE(pimd,
23925784 261 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
7ea487bc 262AC_ARG_ENABLE(bgp-announce,
23925784 263 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
65efcfce 264AC_ARG_ENABLE(bgp-vnc,
f95f2ad9 265 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
65efcfce
LB
266AC_ARG_WITH(rfp-path,
267 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
7ea487bc 268AC_ARG_ENABLE(snmp,
23925784 269 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
7ea487bc 270AC_ARG_WITH(libpam,
23925784 271 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
71c0fb50 272AC_ARG_ENABLE(tcp-zebra,
23925784 273 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
1ef74ef7 274AC_ARG_ENABLE(ospfapi,
23925784 275 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
1ef74ef7 276AC_ARG_ENABLE(ospfclient,
23925784
DL
277 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
278 (this is the default if --disable-ospfapi is set)]))
7ea487bc 279AC_ARG_ENABLE(multipath,
23925784 280 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
fe86b484 281AC_ARG_ENABLE(user,
b2f36157 282 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
fe86b484 283AC_ARG_ENABLE(group,
b2f36157 284 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
edd7c245 285AC_ARG_ENABLE(vty_group,
23925784 286 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
aa593d5e 287AC_ARG_ENABLE(configfile_mask,
23925784 288 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
aa593d5e 289AC_ARG_ENABLE(logfile_mask,
23925784 290 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
5fd1f747 291AC_ARG_ENABLE(shell_access,
23925784 292 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
71c0fb50 293AC_ARG_ENABLE(rtadv,
23925784 294 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
ca776988 295AC_ARG_ENABLE(irdp,
23925784 296 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
41d3fc96 297AC_ARG_ENABLE(capabilities,
23925784 298 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
47f6aef0 299AC_ARG_ENABLE(rusage,
23925784 300 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
6b6942f9 301AC_ARG_ENABLE(gcc_ultra_verbose,
23925784 302 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
3453a712 303AC_ARG_ENABLE(linux24_tcp_md5,
23925784 304 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
8c99b4c1 305AC_ARG_ENABLE(backtrace,
23925784 306 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
924b9229 307AC_ARG_ENABLE(time-check,
23925784 308 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
25f45887 309AC_ARG_ENABLE(pcreposix,
23925784 310 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
5adc2528 311AC_ARG_ENABLE(fpm,
23925784 312 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
ddd82ff6 313AC_ARG_ENABLE(systemd,
23925784 314 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
aa9584c1
DS
315AC_ARG_ENABLE(werror,
316 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
000cf1fb 317AC_ARG_ENABLE(cumulus,
23925784 318 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
df970aa6
DS
319AC_ARG_ENABLE(datacenter,
320 AS_HELP_STRING([--enable-datacenter], [enable Compilation for Data Center Extensions]))
76981cd3
DS
321AC_ARG_ENABLE(rr-semantics,
322 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
dad253b4
AS
323AC_ARG_ENABLE([protobuf],
324 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
28436d6d 325AC_ARG_ENABLE([oldvpn_commands],
fcc65b0f 326 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
6b6942f9 327
112072ac
DS
328AC_CHECK_HEADERS(json-c/json.h)
329AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
330if test $ac_cv_lib_json_c_json_object_get = no; then
10b8ab26
DS
331 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
332 if test $ac_cv_lib_json_json_object_get = no; then
333 AC_MSG_ERROR([lib json is needed to compile])
334 fi
c2f4c19c
DS
335fi
336
3b8282a8
AS
337AC_ARG_ENABLE([dev_build],
338 AS_HELP_STRING([--enable-dev-build], [build for development]))
339
924b9229 340if test x"${enable_time_check}" != x"no" ; then
341 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
342 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
343 else
344 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
345 fi
346fi
347
37219958
DS
348case "${enable_systemd}" in
349 "no") ;;
350 "yes")
351 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
352 if test $ac_cv_lib_systemd_sd_notify = no; then
353 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
63e30864
DS
354 else
355 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
37219958
DS
356 fi
357 ;;
358 "*") ;;
359esac
ddd82ff6 360
76981cd3
DS
361if test "${enable_rr_semantics}" != "no" ; then
362 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
363fi
364
be0dba35
RW
365dnl ----------
366dnl MPLS check
367dnl ----------
be0dba35 368AC_MSG_CHECKING(whether this OS has MPLS stack)
fe6c7157
RW
369case "$host" in
370 *-linux*)
e8e0cc1a 371 MPLS_METHOD="zebra_mpls_netlink.o"
fe6c7157
RW
372 AC_MSG_RESULT(Linux MPLS)
373 ;;
374 *-openbsd*)
e8e0cc1a 375 MPLS_METHOD="zebra_mpls_openbsd.o"
fe6c7157
RW
376 AC_MSG_RESULT(OpenBSD MPLS)
377 ;;
378 *)
379 MPLS_METHOD="zebra_mpls_null.o"
380 AC_MSG_RESULT(Unsupported kernel)
381 ;;
382esac
be0dba35
RW
383AC_SUBST(MPLS_METHOD)
384
df970aa6
DS
385if test "${enable_datacenter}" = "yes" ; then
386 AC_DEFINE(HAVE_DATACENTER,,Compile extensions for a DataCenter)
8efe88ea
DL
387 DFLT_NAME="datacenter"
388else
389 DFLT_NAME="traditional"
000cf1fb 390fi
df970aa6
DS
391
392if test "${enable_cumulus}" = "yes" ; then
393 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
394fi
395
8efe88ea
DL
396AC_SUBST(DFLT_NAME)
397AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
000cf1fb 398
576b6b5d
DS
399if test "${enable_shell_access}" = "yes"; then
400 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
401fi
402
4f8ea50c 403AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
5adc2528 404
3b8282a8
AS
405if test "x${enable_dev_build}" = "xyes"; then
406 AC_DEFINE(DEV_BUILD,,Build for development)
407fi
408AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
409
dad253b4
AS
410#
411# Logic for protobuf support.
412#
413if test "$enable_protobuf" = "yes"; then
414 have_protobuf=yes
415
416 # Check for protoc-c
417 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
418 if test "x$PROTOC_C" = "x/bin/false"; then
419 have_protobuf=no
420 else
421 found_protobuf_c=no
422 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
423 [found_protobuf_c=yes],
424 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
425
426 if test "x$found_protobuf_c" = "xyes"; then
427 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
428 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
429 else
430 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
431 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
432 fi
433 fi
434fi
435
28436d6d
PG
436#
437# Logic for old vpn commans support.
438#
fcc65b0f 439if test "$enable_oldvpn_commands" = "yes"; then
28436d6d
PG
440 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
441fi
442
dad253b4
AS
443# Fail if the user explicity enabled protobuf support and we couldn't
444# find the compiler or libraries.
445if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
446 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
447fi
448
449if test "x$have_protobuf" = "xyes"; then
450 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
451fi
452
453AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
454
455#
456# End of logic for protobuf support.
457#
458
7ea487bc 459if test "${enable_tcp_zebra}" = "yes"; then
460 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
461fi
462
3453a712
PJ
463if test "${enable_linux24_tcp_md5}" = "yes"; then
464 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
465fi
466
d2a0ccc6 467AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
468if test "${enable_rtadv}" != "no"; then
71c0fb50 469 AC_MSG_RESULT(yes)
d2a0ccc6 470 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
2487bea1 471else
472 AC_MSG_RESULT(no)
71c0fb50 473fi
7ea487bc 474
ca776988 475if test "${enable_irdp}" = "yes"; then
476 AC_DEFINE(HAVE_IRDP,, IRDP )
477fi
478
0b02a1b4
JAG
479if test x"${enable_user}" = x"no"; then
480 enable_user=""
481else
482 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
b2f36157 483 enable_user="frr"
0b02a1b4 484 fi
b2f36157 485 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
edd7c245 486fi
edd7c245 487
0b02a1b4
JAG
488if test x"${enable_group}" = x"no"; then
489 enable_group=""
490else
491 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
b2f36157 492 enable_group="frr"
0b02a1b4 493 fi
b2f36157 494 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
edd7c245 495fi
edd7c245 496
497if test x"${enable_vty_group}" = x"yes" ; then
8d4aee5d 498 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
79cb2169 499elif test x"${enable_vty_group}" != x""; then
8d4aee5d 500 if test x"${enable_vty_group}" != x"no"; then
edd7c245 501 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
502 fi
503fi
26275b05 504AC_SUBST([enable_user])
505AC_SUBST([enable_group])
506AC_SUBST([enable_vty_group])
edd7c245 507
aa593d5e 508enable_configfile_mask=${enable_configfile_mask:-0600}
509AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
510
511enable_logfile_mask=${enable_logfile_mask:-0600}
512AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
513
7a6da5ba 514MPATH_NUM=1
7ea487bc 515
516case "${enable_multipath}" in
7c5d2b76 517 0)
7a6da5ba 518 MPATH_NUM=64
7c5d2b76 519 ;;
90fb3e13 520 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
7a6da5ba 521 MPATH_NUM="${enable_multipath}"
7ea487bc 522 ;;
523 "")
524 ;;
525 *)
6f0e3f6e 526 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
7ea487bc 527 ;;
528esac
529
7a6da5ba 530AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
7ea487bc 531
08c369bd
DS
532AC_DEFINE_UNQUOTED(VTYSH_PAGER, "$VTYSH_PAGER", [What pager to use])
533
1080c13f
JN
534dnl -----------------------------------
535dnl Add extra version string to package
536dnl name, string and version fields.
537dnl -----------------------------------
538if test "x${EXTRAVERSION}" != "x" ; then
0be793e6
DL
539 VERSION="${VERSION}${EXTRAVERSION}"
540 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
3ab11ecc 541 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
0be793e6 542 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
1080c13f
JN
543fi
544
a16dcf7c
DL
545if test "x$with_pkg_git_version" = "xyes"; then
546 if test -d "${srcdir}/.git"; then
547 AC_DEFINE(GIT_VERSION, [1], [include git version info])
548 else with_pkg_git_version="no"
549 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
550 fi
551fi
552AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
0be793e6 553
6f0e3f6e
PJ
554dnl ------------------------------------
555dnl Check C keywords and standard types
556dnl ------------------------------------
557AC_C_CONST
558AC_C_INLINE
6f0e3f6e 559AC_C_VOLATILE
dc7a2bf1 560AC_HEADER_STDC
6f0e3f6e
PJ
561dnl AC_TYPE_PID_T
562AC_TYPE_UID_T
563AC_TYPE_MODE_T
564AC_TYPE_SIZE_T
6f0e3f6e 565AC_STRUCT_TM
dc7a2bf1 566
6f0e3f6e
PJ
567dnl -------------------------
568dnl Check other header files.
569dnl -------------------------
24f5e2fc
DL
570AC_CHECK_HEADERS([stropts.h sys/ksym.h \
571 linux/version.h asm/types.h \
572 sys/cdefs.h])
6f0e3f6e 573
899a4fd2
DL
574ac_stdatomic_ok=false
575AC_DEFINE(FRR_AUTOCONF_ATOMIC, 1, [did autoconf checks for atomic funcs])
576AC_CHECK_HEADER([stdatomic.h],[
577
578 AC_MSG_CHECKING([whether _Atomic qualifier works])
579 AC_LINK_IFELSE([AC_LANG_SOURCE([[
580#include <stdatomic.h>
581int main(int argc, char **argv) {
582 _Atomic int i = 0;
583 return i;
584}
585]])], [
586 AC_DEFINE(HAVE_STDATOMIC_H, 1, [found stdatomic.h])
587 AC_MSG_RESULT([yes])
588 ac_stdatomic_ok=true
589 ], [
590 AC_MSG_RESULT([no])
591 ])
592])
593
594AS_IF([$ac_stdatomic_ok], [true], [
595 AC_MSG_CHECKING([for __atomic_* builtins])
596 AC_LINK_IFELSE([AC_LANG_SOURCE([[
597int main(int argc, char **argv) {
598 volatile int i = 1;
599 __atomic_store_n (&i, 0, __ATOMIC_RELEASE);
600 return __atomic_load_n (&i, __ATOMIC_ACQUIRE);
601}
602]])], [
603 AC_DEFINE(HAVE___ATOMIC, 1, [found __atomic builtins])
604 AC_MSG_RESULT([yes])
605 ], [
606 AC_MSG_RESULT([no])
607
608 dnl FreeBSD 9 has a broken stdatomic.h where _Atomic doesn't work
609 AC_MSG_CHECKING([for __sync_* builtins])
610 AC_LINK_IFELSE([AC_LANG_SOURCE([[
611int main(int argc, char **argv) {
612 volatile int i = 1;
613 __sync_fetch_and_sub (&i, 1);
614 return __sync_val_compare_and_swap (&i, 0, 1);
615}
616]])], [
617 AC_DEFINE(HAVE___SYNC, 1, [found __sync builtins])
618 AC_MSG_RESULT([yes])
619
620 AC_MSG_CHECKING([for __sync_swap builtin])
621 AC_LINK_IFELSE([AC_LANG_SOURCE([[
622int main(int argc, char **argv) {
623 volatile int i = 1;
624 return __sync_swap (&i, 2);
625}
626]])], [
627 AC_DEFINE(HAVE___SYNC_SWAP, 1, [found __sync_swap builtin])
628 AC_MSG_RESULT([yes])
629 ], [
630 AC_MSG_RESULT([no])
631 ])
632
633 ], [
634 AC_MSG_RESULT([no])
635 AC_MSG_FAILURE([stdatomic.h unavailable and $CC has neither __atomic nor __sync builtins])
636 ])
637 ])
638])
639
6f0e3f6e 640dnl Utility macro to avoid retyping includes all the time
8e4da10b 641m4_define([FRR_INCLUDES],
6f0e3f6e
PJ
642[#ifdef SUNOS_5
643#define _XPG4_2
644#define __EXTENSIONS__
645#endif
646#include <stdio.h>
24f5e2fc
DL
647#include <stdlib.h>
648#include <stddef.h>
649#include <sys/types.h>
6f0e3f6e 650/* sys/conf.h depends on param.h on FBSD at least */
24f5e2fc 651#include <sys/param.h>
6f0e3f6e 652/* Required for MAXSIG */
24f5e2fc
DL
653#include <signal.h>
654#include <sys/socket.h>
ea057677
HT
655#ifdef __APPLE__
656# define __APPLE_USE_RFC_3542
657#endif
24f5e2fc
DL
658#include <netinet/in.h>
659#include <sys/time.h>
660#include <time.h>
661#include <net/if.h>
2b43bf23
DO
662])dnl
663
664dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
665dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
666dnl an additional round for it.
667
8e4da10b 668AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
2b43bf23 669
8e4da10b
DL
670m4_define([FRR_INCLUDES],
671FRR_INCLUDES
2b43bf23
DO
672[#if HAVE_NET_IF_VAR_H
673# include <net/if_var.h>
674#endif
675])dnl
676
24f5e2fc
DL
677AC_CHECK_HEADERS([netinet/in_var.h \
678 net/if_dl.h net/netopt.h \
679 inet/nd.h netinet/ip_icmp.h \
6f0e3f6e 680 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
8e4da10b 681 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
682
683AC_CHECK_HEADERS([ucontext.h], [], [],
684[#ifndef __USE_GNU
685#define __USE_GNU
686#endif /* __USE_GNU */
8e4da10b 687FRR_INCLUDES
6f0e3f6e
PJ
688])
689
bccbd141
JT
690m4_define([UCONTEXT_INCLUDES],
691[#include <ucontext.h>])dnl
692
693AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
694 [], [], [UCONTEXT_INCLUDES])
695AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
696 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
697 [], [], [UCONTEXT_INCLUDES])],
698 [], [UCONTEXT_INCLUDES])
699AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
700 [], [], [UCONTEXT_INCLUDES])
701
8e4da10b
DL
702m4_define([FRR_INCLUDES],
703FRR_INCLUDES
24f5e2fc
DL
704[
705#include <sys/un.h>
706#include <netinet/in_systm.h>
6f0e3f6e
PJ
707#if HAVE_NETINET_IN_VAR_H
708# include <netinet/in_var.h>
709#endif
710#if HAVE_NET_IF_DL_H
711# include <net/if_dl.h>
712#endif
6f0e3f6e
PJ
713#if HAVE_NET_NETOPT_H
714# include <net/netopt.h>
715#endif
24f5e2fc 716#include <net/route.h>
6f0e3f6e
PJ
717#if HAVE_INET_ND_H
718# include <inet/nd.h>
719#endif
24f5e2fc 720#include <arpa/inet.h>
11770e10
PJ
721/* Required for IDRP */
722#if HAVE_NETINET_IP_ICMP_H
723# include <netinet/ip_icmp.h>
724#endif
6f0e3f6e 725])dnl
dc7a2bf1 726
fa3232e1 727dnl V6 headers are checked below, after we check for v6
7ea487bc 728
7ea487bc 729dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
730case "$host" in
afd8a129 731 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
7ea487bc 732 opsys=sol2-6
afd8a129 733 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
19877dd2 734 AC_DEFINE(SUNOS_5, 1, SunOS 5)
7ea487bc 735 AC_CHECK_LIB(xnet, main)
736 CURSES=-lcurses
a77d2023 737 SOLARIS="solaris"
7ea487bc 738 ;;
1b73de8b 739 [*-sunos5.[8-9]] \
740 | [*-sunos5.1[0-9]] \
741 | [*-sunos5.1[0-9].[0-9]] \
742 | [*-solaris2.[8-9]] \
743 | [*-solaris2.1[0-9]] \
744 | [*-solaris2.1[0-9].[0-9]])
afd8a129 745 opsys=sol8
fb66b29c
PJ
746 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
747 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
19877dd2 748 AC_CHECK_LIB(socket, main)
749 AC_CHECK_LIB(nsl, main)
1b73de8b 750 AC_CHECK_LIB(umem, main)
fb66b29c
PJ
751 AC_CHECK_FUNCS([printstack],
752 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
753 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
754 ])
19877dd2 755 CURSES=-lcurses
a77d2023 756 SOLARIS="solaris"
19877dd2 757 ;;
7ea487bc 758 *-sunos5* | *-solaris2*)
19877dd2 759 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
7ea487bc 760 AC_CHECK_LIB(socket, main)
761 AC_CHECK_LIB(nsl, main)
762 CURSES=-lcurses
a77d2023 763 SOLARIS="solaris"
7ea487bc 764 ;;
c45eb839 765 *-linux*)
7ea487bc 766 opsys=gnu-linux
767 AC_DEFINE(GNU_LINUX,,GNU Linux)
768 ;;
7ea487bc 769 *-openbsd*)
770 opsys=openbsd
771 AC_DEFINE(OPEN_BSD,,OpenBSD)
772 ;;
7ea487bc 773esac
774
62c9f504
PJ
775AC_SYS_LARGEFILE
776
7ea487bc 777dnl ---------------------
778dnl Integrated VTY option
779dnl ---------------------
780case "${enable_vtysh}" in
f0646db0
DS
781 "no") VTYSH="";;
782 *) VTYSH="vtysh";
7ea487bc 783 AC_DEFINE(VTYSH,,VTY shell)
fc9d0745 784dnl Vtysh uses libreadline, which looks for termcap functions at
6f0e3f6e 785dnl configure time. We follow readlines search order.
fc9d0745 786dnl The required procedures are in libtermcap on NetBSD, in
787dnl [TODO] on Linux, and in [TODO] on Solaris.
c0689394 788 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
a969459c 789 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
790 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
791 [AC_CHECK_LIB(ncurses, tputs,
792 LIBREADLINE="$LIBREADLINE -lncurses")]
793 )]
794 )]
795 )
4c2f8e95 796 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
a969459c 797 "$LIBREADLINE")
7ea487bc 798 if test $ac_cv_lib_readline_main = no; then
fc9d0745 799 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
7ea487bc 800 fi
801 AC_CHECK_HEADER(readline/history.h)
802 if test $ac_cv_header_readline_history_h = no;then
803 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
804 fi
a969459c 805 AC_CHECK_LIB(readline, rl_completion_matches,
806 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
3d3de8c4 807 if test $ac_cv_lib_readline_rl_completion_matches = no; then
808 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
809 fi
810 ;;
7ea487bc 811esac
c0689394 812AC_SUBST(LIBREADLINE)
f027d331 813AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
7ea487bc 814
815dnl ----------
816dnl PAM module
6159928d
DO
817dnl
818dnl Quagga detects the PAM library it is built against by checking for a
819dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
820dnl is known to #include pam_appl.h, the standard header of a PAM library, and
821dnl openpam.h doesn't do that, although depends on the header too. Hence a
822dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
823dnl of OpenPAM.
7ea487bc 824dnl ----------
24cd435b 825if test "$with_libpam" = "yes"; then
6f0e3f6e
PJ
826 AC_CHECK_HEADER([security/pam_misc.h],
827 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
828 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
829 pam_conv_func="misc_conv"
830 ],
8e4da10b 831 [], FRR_INCLUDES)
6f0e3f6e
PJ
832 AC_CHECK_HEADER([security/openpam.h],
833 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
834 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
835 pam_conv_func="openpam_ttyconv"
836 ],
8e4da10b 837 [], FRR_INCLUDES[#include <security/pam_appl.h>])
24cd435b 838 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
839 AC_MSG_WARN([*** pam support will not be built ***])
840 with_libpam="no"
841 fi
842fi
843
7ea487bc 844if test "$with_libpam" = "yes"; then
6f0e3f6e 845dnl took this test from proftpds configure.in and suited to our needs
7ea487bc 846dnl -------------------------------------------------------------------------
847dnl
848dnl This next check looks funky due to a linker problem with some versions
849dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
850dnl omitted requiring libdl linking information. PAM-0.72 or better ships
851dnl with RedHat 6.2 and Debian 2.2 or better.
852AC_CHECK_LIB(pam, pam_start,
24cd435b 853 [AC_CHECK_LIB(pam, $pam_conv_func,
7ea487bc 854 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
855 LIBPAM="-lpam"],
856 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
857 LIBPAM="-lpam -lpam_misc"]
858 )
859 ],
860
861 [AC_CHECK_LIB(pam, pam_end,
24cd435b 862 [AC_CHECK_LIB(pam, $pam_conv_func,
a159ed93 863 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 864 LIBPAM="-lpam -ldl"],
a159ed93 865 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 866 LIBPAM="-lpam -ldl -lpam_misc"]
867 )
868 ],AC_MSG_WARN([*** pam support will not be built ***]),
869 [-ldl])
870 ]
871)
872fi
873AC_SUBST(LIBPAM)
874
875dnl -------------------------------
876dnl Endian-ness check
877dnl -------------------------------
878AC_WORDS_BIGENDIAN
879
880dnl -------------------------------
881dnl check the size in byte of the C
882dnl -------------------------------
883dnl AC_CHECK_SIZEOF(char)
884dnl AC_CHECK_SIZEOF(int)
885dnl AC_CHECK_SIZEOF(short)
886dnl AC_CHECK_SIZEOF(long)
887
888dnl ----------------------------
889dnl check existance of functions
890dnl ----------------------------
6f0e3f6e
PJ
891AC_FUNC_FNMATCH
892AC_FUNC_FORK
6f0e3f6e 893AC_FUNC_MKTIME
6f0e3f6e 894AC_FUNC_STAT
6f0e3f6e
PJ
895
896dnl -------------------------------
897dnl bgpd needs pow() and hence libm
898dnl -------------------------------
899TMPLIBS="$LIBS"
900AC_CHECK_HEADER([math.h],
901 [AC_CHECK_LIB([m], [pow],
902 [LIBM="-lm"
903 LIBS="$LIBS $LIBM"
6f0e3f6e
PJ
904 AC_CHECK_FUNCS(pow,[],[LIBM=""])
905 ])
906])
907if test x"$LIBM" = x ; then
908 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
909fi
910LIBS="$TMPLIBS"
911AC_SUBST(LIBM)
912
913dnl ---------------
914dnl other functions
915dnl ---------------
24f5e2fc
DL
916AC_CHECK_FUNCS([ \
917 strlcat strlcpy \
918 getgrouplist \
919 pledge])
6f0e3f6e 920
13460c44
FL
921AC_CHECK_HEADER([asm-generic/unistd.h],
922 [AC_CHECK_DECL(__NR_setns,
923 AC_DEFINE(HAVE_NETNS,, Have netns),,
8e4da10b 924 FRR_INCLUDES [#include <asm-generic/unistd.h>
13460c44 925 ])
428cd73f 926 AC_CHECK_FUNCS(setns)]
13460c44
FL
927 )
928
7ea487bc 929dnl ------------------------------------
930dnl Determine routing get and set method
931dnl ------------------------------------
932AC_MSG_CHECKING(zebra between kernel interface method)
933if test x"$opsys" = x"gnu-linux"; then
35c4bf71
DL
934 AC_MSG_RESULT(netlink)
935 RT_METHOD=rt_netlink.o
1fdc9eae 936 KERNEL_METHOD=kernel_netlink.o
35c4bf71
DL
937 AC_DEFINE(HAVE_NETLINK,,netlink)
938 netlink=yes
939 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
865730ab 940else
19877dd2 941 AC_MSG_RESULT(Route socket)
942 KERNEL_METHOD="kernel_socket.o"
943 RT_METHOD="rt_socket.o"
7ea487bc 944fi
945AC_SUBST(RT_METHOD)
946AC_SUBST(KERNEL_METHOD)
5adc2528 947AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
7ea487bc 948
238497fc
PJ
949dnl --------------------------
950dnl Determine IS-IS I/O method
951dnl --------------------------
745bf05f
DL
952AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
953AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
954AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
238497fc
PJ
955AC_CHECK_HEADER(net/bpf.h)
956AC_CHECK_HEADER(sys/dlpi.h)
957AC_MSG_CHECKING(zebra IS-IS I/O method)
958if test x"$opsys" = x"gnu-linux"; then
959 AC_MSG_RESULT(pfpacket)
745bf05f 960 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
238497fc
PJ
961elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
962 AC_MSG_RESULT(DLPI)
745bf05f 963 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc
PJ
964else
965 if test $ac_cv_header_net_bpf_h = no; then
966 if test $ac_cv_header_sys_dlpi_h = no; then
967 AC_MSG_RESULT(none)
968 AC_MSG_WARN([*** IS-IS support will not be built ***])
969 ISISD=""
970 else
971 AC_MSG_RESULT(DLPI)
972 fi
745bf05f 973 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc
PJ
974 else
975 AC_MSG_RESULT(BPF)
745bf05f 976 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
238497fc
PJ
977 fi
978fi
745bf05f 979AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
238497fc 980
b99760ab 981dnl ------------------------------------
982dnl check for broken CMSG_FIRSTHDR macro
983dnl ------------------------------------
6c20046f 984AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
5b087528 985AC_RUN_IFELSE([AC_LANG_SOURCE([[
b99760ab 986#ifdef SUNOS_5
987#define _XPG4_2
988#define __EXTENSIONS__
989#endif
24f5e2fc 990#include <stdlib.h>
b99760ab 991#include <sys/types.h>
992#include <sys/socket.h>
993
994main()
995{
996 struct msghdr msg;
997 char buf[4];
998
999 msg.msg_control = buf;
1000 msg.msg_controllen = 0;
1001
1002 if (CMSG_FIRSTHDR(&msg) != NULL)
1003 exit(0);
1004 exit (1);
5b087528 1005}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
d33e8d7b 1006[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
b99760ab 1007
7ea487bc 1008dnl ------------------------------
1009dnl check kernel route read method
1010dnl ------------------------------
b2f36157 1011AC_CACHE_CHECK([route read method], [frr_cv_rtread_method],
5589ffa7 1012[if test "x$netlink" = xyes; then
b2f36157 1013 frr_cv_rtread_method="netlink"
7ea487bc 1014else
b2f36157 1015for frr_cv_rtread_method in /dev/ip /dev/null;
7ea487bc 1016do
b2f36157 1017 test x`ls $frr_cv_rtread_method 2>/dev/null` = x"$frr_cv_rtread_method" && break
7ea487bc 1018done
b2f36157 1019case $frr_cv_rtread_method in
9c30ab6b 1020 "/dev/ip")
1021 case "$host" in
b2f36157
DL
1022 *-freebsd*) frr_cv_rtread_method="sysctl";;
1023 *) frr_cv_rtread_method="getmsg";;
9c30ab6b 1024 esac;;
5589ffa7 1025 *)
b2f36157 1026 frr_cv_rtread_method="sysctl";;
7ea487bc 1027esac
1028fi])
b2f36157 1029RTREAD_METHOD=rtread_${frr_cv_rtread_method}.o
7ea487bc 1030AC_SUBST(RTREAD_METHOD)
1031
1032dnl -----------------------------
1033dnl check interface lookup method
1034dnl -----------------------------
19877dd2 1035IOCTL_METHOD=ioctl.o
7ea487bc 1036AC_MSG_CHECKING(interface looking up method)
1037if test "$netlink" = yes; then
1038 AC_MSG_RESULT(netlink)
1039 IF_METHOD=if_netlink.o
19877dd2 1040elif test "$opsys" = "sol2-6";then
1041 AC_MSG_RESULT(Solaris GIF)
1042 IF_METHOD=if_ioctl.o
afd8a129 1043elif test "$opsys" = "sol8";then
19877dd2 1044 AC_MSG_RESULT(Solaris GLIF)
1045 IF_METHOD=if_ioctl_solaris.o
1046 IOCTL_METHOD=ioctl_solaris.o
19877dd2 1047elif test "$opsys" = "openbsd";then
1048 AC_MSG_RESULT(openbsd)
1049 IF_METHOD=if_ioctl.o
1050elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
1051 AC_MSG_RESULT(sysctl)
7ea487bc 1052 IF_METHOD=if_sysctl.o
1053 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
19877dd2 1054else
7ea487bc 1055 AC_MSG_RESULT(ioctl)
1056 IF_METHOD=if_ioctl.o
7ea487bc 1057fi
1058AC_SUBST(IF_METHOD)
19877dd2 1059AC_SUBST(IOCTL_METHOD)
7ea487bc 1060
42c98199 1061dnl ---------------------------------------------------------------
1062dnl figure out how to specify an interface in multicast sockets API
1063dnl ---------------------------------------------------------------
8e4da10b 1064AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
42c98199 1065
b3f2bf7c 1066AC_CHECK_HEADERS([linux/mroute.h], [], [],[
24f5e2fc
DL
1067 #include <sys/socket.h>
1068 #include <netinet/in.h>
b3f2bf7c
RW
1069 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1070 #include <linux/types.h>
1071])
1072
8e4da10b
DL
1073m4_define([FRR_INCLUDES],
1074FRR_INCLUDES
b3f2bf7c
RW
1075[#if HAVE_LINUX_MROUTE_H
1076# include <linux/mroute.h>
1077#endif
1078])dnl
1079
1080AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
24f5e2fc
DL
1081 #include <sys/socket.h>
1082 #include <sys/types.h>
1083 #include <netinet/in.h>
1084 #include <net/route.h>
b3f2bf7c
RW
1085])
1086
8e4da10b
DL
1087m4_define([FRR_INCLUDES],
1088FRR_INCLUDES
b3f2bf7c
RW
1089[#if HAVE_NETINET_IP_MROUTE_H
1090# include <netinet/ip_mroute.h>
1091#endif
1092])dnl
1093
42c98199 1094AC_MSG_CHECKING([for BSD struct ip_mreq hack])
24f5e2fc
DL
1095AC_TRY_COMPILE([#include <sys/param.h>],
1096[#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 1097 return (0);
1098#else
1099 #error No support for BSD struct ip_mreq hack detected
1100#endif],[AC_MSG_RESULT(yes)
1101AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1102AC_MSG_RESULT(no))
1103
10d04cdb
DT
1104AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1105AC_TRY_COMPILE([
1106#include <sys/types.h>
1107#include <netinet/in.h>
1108], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1109], [AC_MSG_RESULT(yes)
1110AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1111AC_MSG_RESULT(no))
1112
c543a173
AS
1113dnl ---------------------------------------------------------------
1114dnl figure out how to check link-state
1115dnl ---------------------------------------------------------------
24f5e2fc
DL
1116AC_CHECK_HEADER( [net/if_media.h],
1117 [m4_define([LINK_DETECT_INCLUDES],
8e4da10b 1118 FRR_INCLUDES
24f5e2fc
DL
1119 [#include <net/if_media.h>
1120 ])
1121 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1122 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1123 [], LINK_DETECT_INCLUDES)],
1124 [],
8e4da10b 1125 FRR_INCLUDES)
c543a173 1126
9234b382
DV
1127dnl ---------------------------------------------------------------
1128dnl Additional, newer way to check link-state using ifi_link_state.
1129dnl Not available in all BSD's when ifmediareq available
1130dnl ---------------------------------------------------------------
24f5e2fc
DL
1131AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1132 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
8e4da10b 1133 [], FRR_INCLUDES)
9234b382 1134
0df7c91f
PJ
1135dnl ------------------------
1136dnl TCP_MD5SIG socket option
1137dnl ------------------------
1138
1139AC_CHECK_HEADER([netinet/tcp.h],
1140 [m4_define([MD5_INCLUDES],
8e4da10b 1141 FRR_INCLUDES
0df7c91f
PJ
1142 [#include <netinet/tcp.h>
1143 ])
1144 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1145 [],
8e4da10b 1146 FRR_INCLUDES)
0df7c91f
PJ
1147if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1148 AC_CHECK_HEADER([linux/tcp.h],
1149 [m4_define([MD5_INCLUDES],
8e4da10b 1150 FRR_INCLUDES
0df7c91f
PJ
1151 [#include <linux/tcp.h>
1152 ])
1153 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1154fi
1155
7ea487bc 1156dnl -----------------------------
1157dnl check ipforward detect method
1158dnl -----------------------------
b2f36157 1159AC_CACHE_CHECK([ipforward method], [frr_cv_ipforward_method],
ca9f342c
DL
1160[if test x$cross_compiling = xyes; then
1161 if test x"$opsys" = x"gnu-linux"; then
b2f36157 1162 frr_cv_ipforward_method=/proc/net/snmp
ca9f342c 1163 else
b2f36157 1164 frr_cv_ipforward_method=/dev/ip
ca9f342c
DL
1165 fi
1166else
b2f36157 1167 for frr_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
ca9f342c 1168 do
b2f36157 1169 test x`ls $frr_cv_ipforward_method 2>/dev/null` = x"$frr_cv_ipforward_method" && break
ca9f342c
DL
1170 done
1171fi
b2f36157
DL
1172case $frr_cv_ipforward_method in
1173 "/proc/net/snmp") frr_cv_ipforward_method="proc";;
7ea487bc 1174 "/dev/ip")
1175 case "$host" in
b2f36157
DL
1176 *-freebsd*) frr_cv_ipforward_method="sysctl";;
1177 *) frr_cv_ipforward_method="solaris";;
7ea487bc 1178 esac;;
b2f36157 1179 *) frr_cv_ipforward_method="sysctl";;
7ea487bc 1180esac])
b2f36157 1181IPFORWARD=ipforward_${frr_cv_ipforward_method}.o
7ea487bc 1182AC_SUBST(IPFORWARD)
1183
60060acc
RW
1184dnl ----------------------------------------------------------------------------
1185dnl figure out if domainname is available in the utsname struct (GNU extension).
1186dnl ----------------------------------------------------------------------------
1187AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1188
7ea487bc 1189dnl ----------
1190dnl IPv6 check
1191dnl ----------
1192AC_MSG_CHECKING(whether does this OS have IPv6 stack)
7ea487bc 1193dnl ---------
1194dnl KAME IPv6
1195dnl ---------
1cbb5dfc 1196 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
a159ed93 1197 AC_DEFINE(KAME,1,KAME IPv6)
a159ed93 1198 AC_MSG_RESULT(KAME)
19877dd2 1199dnl ------------------------------------
1200dnl Solaris 9, 10 and potentially higher
1201dnl ------------------------------------
afd8a129 1202 elif test x"$opsys" = x"sol8"; then
19877dd2 1203 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
19877dd2 1204 AC_MSG_RESULT(Solaris IPv6)
7ea487bc 1205dnl ----------
1206dnl Linux IPv6
1207dnl ----------
42bb3dfd 1208 elif test x"$opsys" = x"gnu-linux"; then
3ef0b877 1209 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
d8dc5257
DS
1210 dnl Linux has a compilation problem with mixing
1211 dnl netinet/in.h and linux/in6.h they are not
1212 dnl compatible. There has been discussion on
1213 dnl how to fix it but no real progress on implementation
1214 dnl when they fix it, remove this
1215 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
42bb3dfd
DL
1216 AC_MSG_RESULT(Linux IPv6)
1217 else
80ec006d 1218 AC_MSG_ERROR([Failed to detect IPv6 stack])
a159ed93 1219 fi
7ea487bc 1220
fa3232e1 1221dnl ------------------
1222dnl IPv6 header checks
1223dnl ------------------
24f5e2fc 1224AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
6f0e3f6e 1225 netinet6/in6_var.h netinet6/nd6.h], [], [],
8e4da10b 1226 FRR_INCLUDES)
fa3232e1 1227
8e4da10b
DL
1228m4_define([FRR_INCLUDES],dnl
1229FRR_INCLUDES
6f0e3f6e
PJ
1230[#if HAVE_NETINET6_IN6_H
1231#include <netinet6/in6.h>
1232#endif
1233#if HAVE_NETINET_IN6_VAR_H
1234#include <netinet/in6_var.h>
1235#endif
24f5e2fc 1236#include <netinet/icmp6.h>
6f0e3f6e
PJ
1237#if HAVE_NETINET6_IN6_VAR_H
1238# include <netinet6/in6_var.h>
1239#endif
1240#if HAVE_NETINET6_ND6_H
fbf24544 1241# include <netinet6/nd6.h>
6f0e3f6e
PJ
1242#endif
1243])dnl
1244
cbcd9bfc
JT
1245dnl disable doc check
1246if test "${enable_doc}" = "no";then
1247 DOC=""
1248else
1249 DOC="doc"
1250fi
1251
7ea487bc 1252dnl --------------------
1253dnl Daemon disable check
1254dnl --------------------
1255if test "${enable_zebra}" = "no";then
1256 ZEBRA=""
1257else
1258 ZEBRA="zebra"
1259fi
f027d331 1260AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
7ea487bc 1261
1262if test "${enable_bgpd}" = "no";then
1263 BGPD=""
1264else
1265 BGPD="bgpd"
1266fi
f027d331 1267AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
7ea487bc 1268
1269if test "${enable_ripd}" = "no";then
1270 RIPD=""
1271else
1272 RIPD="ripd"
1273fi
f027d331 1274AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
7ea487bc 1275
1276if test "${enable_ospfd}" = "no";then
1277 OSPFD=""
1278else
1279 OSPFD="ospfd"
1280fi
f027d331 1281AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
7ea487bc 1282
6ba069f3
DS
1283if test "${enable_ldpd}" = "no";then
1284 LDPD=""
1285else
7758fe9f
DL
1286 AX_PROG_PERL_MODULES(XML::LibXML, , [
1287 if test -f "${srcdir}/ldpd/ldp_vty_cmds.c"; then
1288 AC_MSG_WARN([XML::LibXML perl module not found, using pregenerated ldp_vty_cmds.c])
1289 else
1290 AC_MSG_ERROR([XML::LibXML perl module not found and pregenerated ldp_vty_cmds.c missing])
1291 fi
1292 ])
1293
eac6e3f0 1294 LDPD="ldpd"
87ab4aec 1295 AC_DEFINE(HAVE_LDPD, 1, ldpd)
eac6e3f0
RW
1296fi
1297AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1298
42350cfc
DL
1299NHRPD=""
1300if test "$opsys" = "gnu-linux"; then
1301 if test "${enable_nhrpd}" != "no"; then
1302 NHRPD="nhrpd"
1303 fi
2fb975da 1304else
42350cfc
DL
1305 if test "${enable_nhrpd}" = "yes"; then
1306 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1307 fi
2fb975da
TT
1308fi
1309AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1310
7f57883e
DS
1311if test "${enable_eigrpd}" = "no";then
1312 EIGRPD=""
1313else
1314 EIGRPD="eigrpd"
1315fi
1316AM_CONDITIONAL(EIGRPD, test "x$EIGRPD" = "xeigrpd")
1317
9473e340
DS
1318if test "${enable_watchfrr}" = "no";then
1319 WATCHFRR=""
d0199430 1320else
9473e340 1321 WATCHFRR="watchfrr"
d0199430 1322fi
9473e340 1323AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
d0199430 1324
1ef74ef7 1325OSPFCLIENT=""
cd66cd4c 1326if test "${enable_ospfapi}" != "no";then
9a569848 1327 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1ef74ef7 1328
cd66cd4c 1329 if test "${enable_ospfclient}" != "no";then
1ef74ef7 1330 OSPFCLIENT="ospfclient"
1ef74ef7 1331 fi
7ea487bc 1332fi
cd66cd4c 1333
f027d331 1334AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
7ea487bc 1335
1336case "${enable_ripngd}" in
7ea487bc 1337 "no" ) RIPNGD="";;
80ec006d 1338 * ) RIPNGD="ripngd";;
7ea487bc 1339esac
f027d331 1340AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
7ea487bc 1341
1342case "${enable_ospf6d}" in
7ea487bc 1343 "no" ) OSPF6D="";;
80ec006d 1344 * ) OSPF6D="ospf6d";;
7ea487bc 1345esac
f027d331 1346AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
7ea487bc 1347
9e867fe6 1348case "${enable_isisd}" in
9e867fe6 1349 "no" ) ISISD="";;
c3a9461e 1350 * ) ISISD="isisd";;
9e867fe6 1351esac
f027d331 1352AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
9e867fe6 1353
12e41d03 1354case "${enable_pimd}" in
12e41d03 1355 "no" ) PIMD="";;
f0646db0 1356 * ) PIMD="pimd";;
12e41d03
DL
1357esac
1358AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1359
7ea487bc 1360if test "${enable_bgp_announce}" = "no";then
750e8146
PJ
1361 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1362else
1363 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
7ea487bc 1364fi
1365
65efcfce
LB
1366if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1367 with_rfp_path="bgpd/rfp-example"
1368fi
1369if test "${with_rfp_path}" != "no"; then
1370 VNC_RFP_PATH="${with_rfp_path}"
1371 AC_SUBST(VNC_RFP_PATH)
1372fi
1373
f95f2ad9 1374if test "${enable_bgp_vnc}" != "no";then
65efcfce
LB
1375 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1376 RFPTEST="${with_rfp_path}/rfptest"
1377 LIBRFP="${with_rfp_path}/librfp"
1378 RFPINC="${with_rfp_path}/librfp"
1379else
1380 RFPTEST=
1381 LIBRFP=
1382 RFPINC="bgpd/rfp-example/librfp"
1383fi
1384# set
f95f2ad9 1385AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
65efcfce 1386
cbcd9bfc 1387AC_SUBST(DOC)
7ea487bc 1388AC_SUBST(ZEBRA)
65efcfce
LB
1389AC_SUBST(RFPTEST)
1390AC_SUBST(LIBRFP)
1391AC_SUBST(RFPINC)
7ea487bc 1392AC_SUBST(BGPD)
1393AC_SUBST(RIPD)
1394AC_SUBST(RIPNGD)
1395AC_SUBST(OSPFD)
1396AC_SUBST(OSPF6D)
eac6e3f0 1397AC_SUBST(LDPD)
2fb975da 1398AC_SUBST(NHRPD)
7f57883e 1399AC_SUBST(EIGRPD)
9473e340 1400AC_SUBST(WATCHFRR)
9e867fe6 1401AC_SUBST(ISISD)
12e41d03 1402AC_SUBST(PIMD)
97cee877 1403AC_SUBST(SOLARIS)
7ea487bc 1404AC_SUBST(VTYSH)
7ea487bc 1405AC_SUBST(CURSES)
1406AC_SUBST(OSPFCLIENT)
1ef74ef7 1407AC_SUBST(OSPFAPI)
7ea487bc 1408AC_CHECK_LIB(crypt, crypt)
1409AC_CHECK_LIB(resolv, res_init)
7ea487bc 1410
25f45887
JJ
1411dnl ---------------------------
1412dnl check system has PCRE regexp
1413dnl ---------------------------
1414if test "x$enable_pcreposix" = "xyes"; then
ad9a0825
DL
1415 AC_CHECK_LIB(pcreposix, regexec, [], [
1416 AC_MSG_ERROR([--enable-pcreposix given but unable to find libpcreposix])
1417 ])
25f45887 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."