2022-01-04 15:17:41 +00:00
|
|
|
dnl Process this file with autoconf to produce a configure script
|
|
|
|
AC_INIT([osmo-hnbgw],
|
|
|
|
m4_esyscmd([./git-version-gen .tarball-version]),
|
|
|
|
[openbsc@lists.osmocom.org])
|
|
|
|
|
|
|
|
dnl *This* is the root dir, even if an install-sh exists in ../ or ../../
|
|
|
|
AC_CONFIG_AUX_DIR([.])
|
|
|
|
|
|
|
|
AM_INIT_AUTOMAKE([dist-bzip2])
|
|
|
|
AC_CONFIG_TESTDIR(tests)
|
|
|
|
|
|
|
|
CFLAGS="$CFLAGS -std=gnu11"
|
|
|
|
|
|
|
|
dnl kernel style compile messages
|
|
|
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
|
|
|
|
|
|
|
dnl include release helper
|
|
|
|
RELMAKE='-include osmo-release.mk'
|
|
|
|
AC_SUBST([RELMAKE])
|
|
|
|
|
|
|
|
dnl checks for programs
|
|
|
|
AC_PROG_MAKE_SET
|
|
|
|
AC_PROG_CC
|
|
|
|
AC_PROG_INSTALL
|
|
|
|
LT_INIT
|
|
|
|
|
|
|
|
dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang
|
|
|
|
AS_CASE(["$LD"],[*clang*],
|
|
|
|
[AS_CASE(["${host_os}"],
|
|
|
|
[*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
|
|
|
|
|
|
|
|
dnl check for pkg-config (explained in detail in libosmocore/configure.ac)
|
|
|
|
AC_PATH_PROG(PKG_CONFIG_INSTALLED, pkg-config, no)
|
|
|
|
if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
|
|
|
|
AC_MSG_WARN([You need to install pkg-config])
|
|
|
|
fi
|
|
|
|
PKG_PROG_PKG_CONFIG([0.20])
|
|
|
|
|
|
|
|
dnl checks for libraries
|
|
|
|
old_LIBS=$LIBS
|
|
|
|
AC_SEARCH_LIBS([sctp_recvmsg], [sctp], [
|
|
|
|
AC_DEFINE(HAVE_LIBSCTP, 1, [Define 1 to enable SCTP support])
|
|
|
|
AC_SUBST(HAVE_LIBSCTP, [1])
|
|
|
|
if test -n "$ac_lib"; then
|
|
|
|
AC_SUBST(LIBSCTP_LIBS, [-l$ac_lib])
|
|
|
|
fi
|
|
|
|
], [
|
|
|
|
AC_MSG_ERROR([sctp_recvmsg not found in searched libs])])
|
|
|
|
LIBS=$old_LIBS
|
|
|
|
|
|
|
|
PKG_CHECK_MODULES(LIBASN1C, libasn1c >= 0.9.30)
|
2024-07-25 08:05:58 +00:00
|
|
|
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.10.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.10.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.10.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.10.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.5.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMOSIGTRAN, libosmo-sigtran >= 1.9.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMORUA, libosmo-rua >= 1.6.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMORANAP, libosmo-ranap >= 1.6.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMOHNBAP, libosmo-hnbap >= 1.6.0)
|
|
|
|
PKG_CHECK_MODULES(LIBOSMOMGCPCLIENT, libosmo-mgcp-client >= 1.13.0)
|
2022-08-09 15:19:53 +00:00
|
|
|
|
|
|
|
# Enable PFCP support for GTP tunnel mapping via UPF
|
|
|
|
AC_ARG_ENABLE([pfcp], [AS_HELP_STRING([--enable-pfcp], [Build with PFCP support, for GTP tunnel mapping via UPF])],
|
|
|
|
[osmo_ac_pfcp="$enableval"],[osmo_ac_pfcp="no"])
|
|
|
|
if test "x$osmo_ac_pfcp" = "xyes" ; then
|
2024-07-25 08:05:58 +00:00
|
|
|
PKG_CHECK_MODULES(LIBOSMOPFCP, libosmo-pfcp >= 0.4.0)
|
2022-08-09 15:19:53 +00:00
|
|
|
AC_DEFINE(ENABLE_PFCP, 1, [Define to build with PFCP support])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(ENABLE_PFCP, test "x$osmo_ac_pfcp" = "xyes")
|
|
|
|
AC_SUBST(osmo_ac_pfcp)
|
2022-01-04 15:17:41 +00:00
|
|
|
|
per-HNB GTP-U traffic counters via nft
Add optional feature: retrieve GTP-U traffic counters per hNodeB (not
per individual subscriber!) using nftables, to provide new rate_ctr
stats.
This is a "workaround" to get performance indicators per hNodeB, without
needing a UPF that supports URR.
When an hNodeB registers, set up nftables rules to count GTP-U packets
(UDP port 2152) to and from that hNodeB's address -- we are assuming
that it is the same address that Iuh is connecting from.
From the per-hNodeB packet and byte counters from nftables, also derive
a "UE bytes" counter, which is counting only the GTP-U payload. Assume
IP header of 20 bytes; UDP and GTP-U headers are 8 bytes each:
ue_bytes = total_bytes - packets * (20 + 8 + 8)
Query these periodically, as configurable by new timer X34. Default is
one second of wait time between querying counters (excluding the time it
takes to retrieve and update the counters).
Add compile-time switch --enable-nftables, to build with/without
external dependency libnftables. Default is without, as before.
Add jenkins axis NFTABLES to switch --enable-nftables.
Add cfg file option 'hnbgw' / 'nft-kpi' to enable use of nftables.
This requires osmo-hnbgw to be run with cap_net_admin.
The VTY config commands are always visible -- simplifies VTY testing.
Refuse to start osmo-hnbgw when the user is requesting nft-kpi in the
config but when built without --enable-nftables.
Do nft commands in 2 separate threads. Run the same request queue
implementation twice, with two thread workers to handle them:
- one thread receives all requests to init the nft table, add and remove
hNodeB counters, and start and stop counting for a specific hNodeB.
- Another thread handles all retrieval and parsing of counters from nft.
The main() thread hence never blocks for nftables commands, and services
the responses from nft when they are ready, via an osmo_it_q registered
in the main() select loop.
Persistently keep an nftables named counter for each seen hNodeB cell id
in the nftables ruleset, for the lifetime of a hnb_persistent instance
that holds the target rate_ctrs.
Add the rules to feed into these persistent counters to the ruleset when
the particular cell attaches and detaches via HNBAP HNB (De-)Register.
On hnb_persistent_free(), remove all items relating to this cell id from
nftables, including the persistent named counters.
Loosely related: upcoming patches will implement
- a hashtable for faster cell id lookup (important for updating
counters)
Iecb81eba28263ecf90a09c108995f6fb6f5f81f2
- proper MNC-3-digit support in cell ids (better have a 100% correct
primary key).
Id9a91c80cd2745424a916aef4736993bb7cd8ba0
- idle timeout for disconnected hnbp, so we are sure stale state does
not build up for eternity.
Ic819d7cbc03fb39e98c204b70d016c5170dc6307
Related: SYS#6773
Related: OS#6425
Change-Id: Ib2f0a9252715ea4b2fe9c367aa65f771357768ca
2024-03-22 03:43:42 +00:00
|
|
|
# Enable libnftables support for traffic counters using nft
|
|
|
|
AC_ARG_ENABLE([nftables], [AS_HELP_STRING([--enable-nftables], [Build with libnftables support, for traffic counters using nft])],
|
|
|
|
[osmo_ac_nftables="$enableval"],[osmo_ac_nftables="no"])
|
|
|
|
if test "x$osmo_ac_nftables" = "xyes" ; then
|
|
|
|
PKG_CHECK_MODULES(LIBNFTABLES, libnftables >= 1.0.2)
|
|
|
|
AC_DEFINE(ENABLE_NFTABLES, 1, [Define to build with libnftables support])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(ENABLE_NFTABLES, test "x$osmo_ac_nftables" = "xyes")
|
|
|
|
AC_SUBST(osmo_ac_nftables)
|
|
|
|
|
2022-01-04 15:17:41 +00:00
|
|
|
dnl checks for header files
|
|
|
|
AC_HEADER_STDC
|
|
|
|
|
|
|
|
dnl Checks for typedefs, structures and compiler characteristics
|
|
|
|
|
|
|
|
AC_ARG_ENABLE(sanitize,
|
|
|
|
[AS_HELP_STRING(
|
|
|
|
[--enable-sanitize],
|
|
|
|
[Compile with address sanitizer enabled],
|
|
|
|
)],
|
|
|
|
[sanitize=$enableval], [sanitize="no"])
|
|
|
|
if test x"$sanitize" = x"yes"
|
|
|
|
then
|
|
|
|
CFLAGS="$CFLAGS -fsanitize=address -fsanitize=undefined"
|
|
|
|
CPPFLAGS="$CPPFLAGS -fsanitize=address -fsanitize=undefined"
|
|
|
|
fi
|
|
|
|
|
|
|
|
AC_ARG_ENABLE(werror,
|
|
|
|
[AS_HELP_STRING(
|
|
|
|
[--enable-werror],
|
|
|
|
[Turn all compiler warnings into errors, with exceptions:
|
|
|
|
a) deprecation (allow upstream to mark deprecation without breaking builds);
|
|
|
|
b) "#warning" pragmas (allow to remind ourselves of errors without breaking builds)
|
|
|
|
]
|
|
|
|
)],
|
|
|
|
[werror=$enableval], [werror="no"])
|
|
|
|
if test x"$werror" = x"yes"
|
|
|
|
then
|
|
|
|
WERROR_FLAGS="-Werror"
|
|
|
|
WERROR_FLAGS+=" -Wno-error=deprecated -Wno-error=deprecated-declarations"
|
|
|
|
WERROR_FLAGS+=" -Wno-error=cpp" # "#warning"
|
|
|
|
CFLAGS="$CFLAGS $WERROR_FLAGS"
|
|
|
|
CPPFLAGS="$CPPFLAGS $WERROR_FLAGS"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# The following test is taken from WebKit's webkit.m4
|
|
|
|
saved_CFLAGS="$CFLAGS"
|
|
|
|
CFLAGS="$CFLAGS -fvisibility=hidden "
|
|
|
|
AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])],
|
|
|
|
[ AC_MSG_RESULT([yes])
|
|
|
|
SYMBOL_VISIBILITY="-fvisibility=hidden"],
|
|
|
|
AC_MSG_RESULT([no]))
|
|
|
|
CFLAGS="$saved_CFLAGS"
|
|
|
|
AC_SUBST(SYMBOL_VISIBILITY)
|
|
|
|
|
|
|
|
# Coverage build taken from WebKit's configure.in
|
|
|
|
AC_MSG_CHECKING([whether to enable code coverage support])
|
|
|
|
AC_ARG_ENABLE(coverage,
|
|
|
|
AC_HELP_STRING([--enable-coverage],
|
|
|
|
[enable code coverage support [default=no]]),
|
|
|
|
[],[enable_coverage="no"])
|
|
|
|
AC_MSG_RESULT([$enable_coverage])
|
|
|
|
if test "$enable_coverage" = "yes"; then
|
|
|
|
COVERAGE_CFLAGS="-ftest-coverage -fprofile-arcs"
|
|
|
|
COVERAGE_LDFLAGS="-ftest-coverage -fprofile-arcs"
|
|
|
|
AC_SUBST([COVERAGE_CFLAGS])
|
|
|
|
AC_SUBST([COVERAGE_LDFLAGS])
|
|
|
|
fi
|
|
|
|
|
|
|
|
AC_ARG_ENABLE(profile,
|
|
|
|
[AS_HELP_STRING([--enable-profile], [Compile with profiling support enabled], )],
|
|
|
|
[profile=$enableval], [profile="no"])
|
|
|
|
if test x"$profile" = x"yes"
|
|
|
|
then
|
|
|
|
CFLAGS="$CFLAGS -pg"
|
|
|
|
CPPFLAGS="$CPPFLAGS -pg"
|
|
|
|
fi
|
|
|
|
|
|
|
|
AC_ARG_ENABLE([external_tests],
|
|
|
|
AC_HELP_STRING([--enable-external-tests],
|
|
|
|
[Include the VTY/CTRL tests in make check [default=no]]),
|
|
|
|
[enable_ext_tests="$enableval"],[enable_ext_tests="no"])
|
|
|
|
if test "x$enable_ext_tests" = "xyes" ; then
|
|
|
|
AC_CHECK_PROG(PYTHON3_AVAIL,python3,yes)
|
|
|
|
if test "x$PYTHON3_AVAIL" != "xyes" ; then
|
|
|
|
AC_MSG_ERROR([Please install python3 to run the VTY/CTRL tests.])
|
|
|
|
fi
|
|
|
|
AC_CHECK_PROG(OSMOTESTEXT_CHECK,osmotestvty.py,yes)
|
|
|
|
if test "x$OSMOTESTEXT_CHECK" != "xyes" ; then
|
2022-06-18 10:11:02 +00:00
|
|
|
AC_MSG_ERROR([Please install https://gitea.osmocom.org/cellular-infrastructure/osmo-python-tests to run the VTY/CTRL tests.])
|
2022-01-04 15:17:41 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
AC_MSG_CHECKING([whether to enable VTY/CTRL tests])
|
|
|
|
AC_MSG_RESULT([$enable_ext_tests])
|
|
|
|
AM_CONDITIONAL(ENABLE_EXT_TESTS, test "x$enable_ext_tests" = "xyes")
|
|
|
|
|
|
|
|
# Generate manuals
|
|
|
|
AC_ARG_ENABLE(manuals,
|
|
|
|
[AS_HELP_STRING(
|
|
|
|
[--enable-manuals],
|
|
|
|
[Generate manual PDFs [default=no]],
|
|
|
|
)],
|
|
|
|
[osmo_ac_build_manuals=$enableval], [osmo_ac_build_manuals="no"])
|
|
|
|
AM_CONDITIONAL([BUILD_MANUALS], [test x"$osmo_ac_build_manuals" = x"yes"])
|
|
|
|
AC_ARG_VAR(OSMO_GSM_MANUALS_DIR, [path to common osmo-gsm-manuals files, overriding pkg-config and "../osmo-gsm-manuals"
|
|
|
|
fallback])
|
|
|
|
if test x"$osmo_ac_build_manuals" = x"yes"
|
|
|
|
then
|
|
|
|
# Find OSMO_GSM_MANUALS_DIR (env, pkg-conf, fallback)
|
|
|
|
if test -n "$OSMO_GSM_MANUALS_DIR"; then
|
|
|
|
echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from env)"
|
|
|
|
else
|
|
|
|
OSMO_GSM_MANUALS_DIR="$($PKG_CONFIG osmo-gsm-manuals --variable=osmogsmmanualsdir 2>/dev/null)"
|
|
|
|
if test -n "$OSMO_GSM_MANUALS_DIR"; then
|
|
|
|
echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from pkg-conf)"
|
|
|
|
else
|
|
|
|
OSMO_GSM_MANUALS_DIR="../osmo-gsm-manuals"
|
|
|
|
echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (fallback)"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
if ! test -d "$OSMO_GSM_MANUALS_DIR"; then
|
|
|
|
AC_MSG_ERROR("OSMO_GSM_MANUALS_DIR does not exist! Install osmo-gsm-manuals or set OSMO_GSM_MANUALS_DIR.")
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Find and run check-depends
|
|
|
|
CHECK_DEPENDS="$OSMO_GSM_MANUALS_DIR/check-depends.sh"
|
|
|
|
if ! test -x "$CHECK_DEPENDS"; then
|
|
|
|
CHECK_DEPENDS="osmo-gsm-manuals-check-depends"
|
|
|
|
fi
|
|
|
|
if ! $CHECK_DEPENDS; then
|
|
|
|
AC_MSG_ERROR("missing dependencies for --enable-manuals")
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Put in Makefile with absolute path
|
|
|
|
OSMO_GSM_MANUALS_DIR="$(realpath "$OSMO_GSM_MANUALS_DIR")"
|
|
|
|
AC_SUBST([OSMO_GSM_MANUALS_DIR])
|
|
|
|
fi
|
|
|
|
|
|
|
|
# https://www.freedesktop.org/software/systemd/man/daemon.html
|
|
|
|
AC_ARG_WITH([systemdsystemunitdir],
|
|
|
|
[AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
|
|
|
|
[with_systemdsystemunitdir=auto])
|
|
|
|
AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
|
|
|
|
def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
|
|
|
|
|
|
|
|
AS_IF([test "x$def_systemdsystemunitdir" = "x"],
|
|
|
|
[AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
|
|
|
|
[AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
|
|
|
|
with_systemdsystemunitdir=no],
|
|
|
|
[with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
|
|
|
|
AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
|
|
|
|
[AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
|
|
|
|
AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$with_systemdsystemunitdir" != "xno"])
|
|
|
|
|
|
|
|
AC_MSG_RESULT([CFLAGS="$CFLAGS"])
|
|
|
|
AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
|
|
|
|
|
|
|
|
dnl Generate the output
|
|
|
|
AM_CONFIG_HEADER(config.h)
|
|
|
|
|
|
|
|
AC_OUTPUT(
|
|
|
|
include/Makefile
|
|
|
|
include/osmocom/Makefile
|
|
|
|
include/osmocom/hnbgw/Makefile
|
|
|
|
src/Makefile
|
|
|
|
src/osmo-hnbgw/Makefile
|
|
|
|
tests/Makefile
|
|
|
|
tests/atlocal
|
2022-01-06 14:45:35 +00:00
|
|
|
tests/ranap_rab_ass/Makefile
|
2024-05-21 01:05:27 +00:00
|
|
|
tests/umts_cell_id/Makefile
|
2022-01-04 15:17:41 +00:00
|
|
|
doc/Makefile
|
|
|
|
doc/examples/Makefile
|
|
|
|
doc/manuals/Makefile
|
2023-02-11 04:58:42 +00:00
|
|
|
doc/charts/Makefile
|
2022-01-04 15:17:41 +00:00
|
|
|
contrib/Makefile
|
|
|
|
contrib/systemd/Makefile
|
|
|
|
Makefile)
|