initial osmocom boilerplate source tree
Related: SYS#5599 Depends: I0a46b147ec6a76d909df28136cfd2b764b2c75ea (libosmocore) Change-Id: I4352dd8738a1a9de6ba2fc250ee8eef69c65ff1e
This commit is contained in:
parent
275e4cd2ac
commit
103b69d99c
|
@ -0,0 +1,73 @@
|
||||||
|
debian/*.log
|
||||||
|
*.o
|
||||||
|
*.lo
|
||||||
|
*.a
|
||||||
|
.deps
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
config.h
|
||||||
|
config.h.in
|
||||||
|
*.pc
|
||||||
|
*~
|
||||||
|
|
||||||
|
*.*~
|
||||||
|
*.sw?
|
||||||
|
.libs
|
||||||
|
*.pyc
|
||||||
|
*.gcda
|
||||||
|
*.gcno
|
||||||
|
|
||||||
|
**/TAGS
|
||||||
|
|
||||||
|
#configure
|
||||||
|
aclocal.m4
|
||||||
|
autom4te.cache/
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
config.guess
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
compile
|
||||||
|
depcomp
|
||||||
|
install-sh
|
||||||
|
missing
|
||||||
|
stamp-h1
|
||||||
|
libtool
|
||||||
|
ltmain.sh
|
||||||
|
m4/*.m4
|
||||||
|
|
||||||
|
# git-version-gen magic
|
||||||
|
.tarball-version
|
||||||
|
.version
|
||||||
|
osmo-upf-*.tar.bz2
|
||||||
|
osmo-upf-*.tar.gz
|
||||||
|
|
||||||
|
tags
|
||||||
|
/deps
|
||||||
|
|
||||||
|
src/osmo-upf/osmo-upf
|
||||||
|
|
||||||
|
#tests
|
||||||
|
tests/testsuite.dir
|
||||||
|
tests/*/*_test
|
||||||
|
|
||||||
|
tests/atconfig
|
||||||
|
tests/atlocal
|
||||||
|
tests/package.m4
|
||||||
|
tests/testsuite
|
||||||
|
tests/testsuite.log
|
||||||
|
|
||||||
|
writtenconfig/
|
||||||
|
|
||||||
|
# manuals
|
||||||
|
doc/manuals/*.html
|
||||||
|
doc/manuals/*.svg
|
||||||
|
doc/manuals/*.pdf
|
||||||
|
doc/manuals/*__*.png
|
||||||
|
doc/manuals/*.check
|
||||||
|
doc/manuals/generated/
|
||||||
|
doc/manuals/osmoupf-usermanual.xml
|
||||||
|
doc/manuals/common
|
||||||
|
doc/manuals/build
|
||||||
|
|
||||||
|
contrib/osmo-upf.spec
|
|
@ -0,0 +1,3 @@
|
||||||
|
[gerrit]
|
||||||
|
host=gerrit.osmocom.org
|
||||||
|
project=osmo-upf
|
|
@ -0,0 +1,36 @@
|
||||||
|
AUTOMAKE_OPTIONS = foreign dist-bzip2 1.6
|
||||||
|
|
||||||
|
## FIXME: automake >= 1.13 or autoconf >= 2.70 provide better suited AC_CONFIG_MACRO_DIRS for configure.ac
|
||||||
|
## remove line below when OE toolchain is updated to version which include those
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
AM_CPPFLAGS = \
|
||||||
|
$(all_includes) \
|
||||||
|
-I$(top_srcdir)/include \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
SUBDIRS = \
|
||||||
|
include \
|
||||||
|
src \
|
||||||
|
tests \
|
||||||
|
doc \
|
||||||
|
contrib \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
BUILT_SOURCES = $(top_srcdir)/.version
|
||||||
|
EXTRA_DIST = \
|
||||||
|
.version \
|
||||||
|
contrib/osmo-upf.spec.in \
|
||||||
|
debian \
|
||||||
|
git-version-gen \
|
||||||
|
osmoappdesc.py \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
AM_DISTCHECK_CONFIGURE_FLAGS = \
|
||||||
|
--with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
|
||||||
|
|
||||||
|
@RELMAKE@
|
||||||
|
|
||||||
|
$(top_srcdir)/.version:
|
||||||
|
echo $(VERSION) > $@-t && mv $@-t $@
|
||||||
|
dist-hook:
|
||||||
|
echo $(VERSION) > $(distdir)/.tarball-version
|
|
@ -0,0 +1,54 @@
|
||||||
|
osmo-upf - Osmocom User Plane Function Implementation
|
||||||
|
=====================================================
|
||||||
|
|
||||||
|
Homepage
|
||||||
|
--------
|
||||||
|
|
||||||
|
The official homepage of the project is
|
||||||
|
https://osmocom.org/projects/osmoupf/wiki
|
||||||
|
|
||||||
|
GIT Repository
|
||||||
|
--------------
|
||||||
|
|
||||||
|
You can clone from the official osmo-upf.git repository using
|
||||||
|
|
||||||
|
git clone git://git.osmocom.org/osmo-upf.git
|
||||||
|
|
||||||
|
There is a cgit interface at https://git.osmocom.org/osmo-upf/
|
||||||
|
|
||||||
|
To submit patches, see "Contributing" below.
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
User Manuals and VTY reference manuals are [optionally] built in PDF form
|
||||||
|
as part of the build process.
|
||||||
|
|
||||||
|
Pre-rendered PDF version of the current "master" can be found at
|
||||||
|
[User Manual](https://ftp.osmocom.org/docs/latest/osmoupf-usermanual.pdf)
|
||||||
|
as well as the [VTY Reference Manual](https://ftp.osmocom.org/docs/latest/osmoupf-vty-reference.pdf)
|
||||||
|
|
||||||
|
|
||||||
|
Mailing List
|
||||||
|
------------
|
||||||
|
|
||||||
|
Discussions related to osmo-bts are happening on the
|
||||||
|
osmocom-net-gprs@lists.osmocom.org mailing list, please see
|
||||||
|
https://lists.osmocom.org/postorius/lists/osmocom-net-gprs@lists.osmocom.org/
|
||||||
|
for subscription options and the list archive.
|
||||||
|
|
||||||
|
Please observe the [Osmocom Mailing List
|
||||||
|
Rules](https://osmocom.org/projects/cellular-infrastructure/wiki/Mailing_List_Rules)
|
||||||
|
when posting.
|
||||||
|
|
||||||
|
Contributing
|
||||||
|
------------
|
||||||
|
|
||||||
|
Our coding standards are described at
|
||||||
|
https://osmocom.org/projects/cellular-infrastructure/wiki/Coding_standards
|
||||||
|
|
||||||
|
Submit patches at https://gerrit.osmocom.org/
|
||||||
|
See also https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit
|
||||||
|
|
||||||
|
The current patch queue for OsmoUPF can be seen at
|
||||||
|
https://gerrit.osmocom.org/#/q/project:osmo-upf+status:open
|
|
@ -0,0 +1,9 @@
|
||||||
|
# When cleaning up this file: bump API version in corresponding Makefile.am and rename corresponding debian/lib*.install
|
||||||
|
# according to https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
|
||||||
|
# In short:
|
||||||
|
# LIBVERSION=c:r:a
|
||||||
|
# If the library source code has changed at all since the last update, then increment revision: c:r + 1:a.
|
||||||
|
# If any interfaces have been added, removed, or changed since the last update: c + 1:0:0.
|
||||||
|
# If any interfaces have been added since the last public release: c:r:a + 1.
|
||||||
|
# If any interfaces have been removed or changed since the last public release: c:r:0.
|
||||||
|
#library what description / commit summary line
|
|
@ -0,0 +1,210 @@
|
||||||
|
AC_INIT([osmo-upf],
|
||||||
|
m4_esyscmd([./git-version-gen .tarball-version]),
|
||||||
|
[osmocom-net-gprs@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
|
||||||
|
AC_SEARCH_LIBS([dlopen], [dl dld], [LIBRARY_DL="$LIBS";LIBS=""])
|
||||||
|
AC_SUBST(LIBRARY_DL)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.5.0)
|
||||||
|
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.5.0)
|
||||||
|
PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.5.0)
|
||||||
|
|
||||||
|
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
|
||||||
|
AC_MSG_ERROR([Please install git://osmocom.org/python/osmo-python-tests to run the VTY/CTRL tests.])
|
||||||
|
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/upf/Makefile
|
||||||
|
src/Makefile
|
||||||
|
src/osmo-upf/Makefile
|
||||||
|
tests/Makefile
|
||||||
|
tests/atlocal
|
||||||
|
doc/Makefile
|
||||||
|
doc/examples/Makefile
|
||||||
|
doc/manuals/Makefile
|
||||||
|
contrib/Makefile
|
||||||
|
contrib/systemd/Makefile
|
||||||
|
Makefile)
|
|
@ -0,0 +1 @@
|
||||||
|
SUBDIRS = systemd
|
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# jenkins build helper script for osmo-upf. This is how we build on jenkins.osmocom.org
|
||||||
|
#
|
||||||
|
# environment variables:
|
||||||
|
# * WITH_MANUALS: build manual PDFs if set to "1"
|
||||||
|
# * PUBLISH: upload manuals after building if set to "1" (ignored without WITH_MANUALS = "1")
|
||||||
|
#
|
||||||
|
|
||||||
|
if ! [ -x "$(command -v osmo-build-dep.sh)" ]; then
|
||||||
|
echo "Error: We need to have scripts/osmo-deps.sh from http://git.osmocom.org/osmo-ci/ in PATH !"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
base="$PWD"
|
||||||
|
deps="$base/deps"
|
||||||
|
inst="$deps/install"
|
||||||
|
export deps inst
|
||||||
|
|
||||||
|
osmo-clean-workspace.sh
|
||||||
|
|
||||||
|
mkdir "$deps" || true
|
||||||
|
|
||||||
|
verify_value_string_arrays_are_terminated.py $(find . -name "*.[hc]")
|
||||||
|
|
||||||
|
export PKG_CONFIG_PATH="$inst/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||||
|
export LD_LIBRARY_PATH="$inst/lib"
|
||||||
|
export PATH="$inst/bin:$PATH"
|
||||||
|
|
||||||
|
osmo-build-dep.sh libosmocore "" --disable-doxygen
|
||||||
|
|
||||||
|
# Additional configure options and depends
|
||||||
|
CONFIG=""
|
||||||
|
if [ "$WITH_MANUALS" = "1" ]; then
|
||||||
|
CONFIG="--enable-manuals"
|
||||||
|
fi
|
||||||
|
|
||||||
|
set +x
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
echo " =============================== osmo-upf ==============================="
|
||||||
|
echo
|
||||||
|
set -x
|
||||||
|
|
||||||
|
cd "$base"
|
||||||
|
autoreconf --install --force
|
||||||
|
./configure --enable-sanitize --enable-external-tests $CONFIG
|
||||||
|
$MAKE $PARALLEL_MAKE
|
||||||
|
LD_LIBRARY_PATH="$inst/lib" $MAKE check \
|
||||||
|
|| cat-testlogs.sh
|
||||||
|
LD_LIBRARY_PATH="$inst/lib" \
|
||||||
|
DISTCHECK_CONFIGURE_FLAGS="--enable-vty-tests --enable-external-tests $CONFIG" \
|
||||||
|
$MAKE $PARALLEL_MAKE distcheck \
|
||||||
|
|| cat-testlogs.sh
|
||||||
|
|
||||||
|
if [ "$WITH_MANUALS" = "1" ] && [ "$PUBLISH" = "1" ]; then
|
||||||
|
make -C "$base/doc/manuals" publish
|
||||||
|
fi
|
||||||
|
|
||||||
|
$MAKE $PARALLEL_MAKE maintainer-clean
|
||||||
|
osmo-clean-workspace.sh
|
|
@ -0,0 +1,86 @@
|
||||||
|
#
|
||||||
|
# spec file for package osmo-upf
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017, Martin Hauke <mardnh@gmx.de>
|
||||||
|
#
|
||||||
|
# All modifications and additions to the file contributed by third parties
|
||||||
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
|
# upon. The license for this file, and modifications and additions to the
|
||||||
|
# file, is the same license as for the pristine package itself (unless the
|
||||||
|
# license for the pristine package is not an Open Source License, in which
|
||||||
|
# case the license is the MIT License). An "Open Source License" is a
|
||||||
|
# license that conforms to the Open Source Definition (Version 1.9)
|
||||||
|
# published by the Open Source Initiative.
|
||||||
|
|
||||||
|
## Disable LTO for now since it breaks compilation of the tests
|
||||||
|
## https://osmocom.org/issues/4113
|
||||||
|
%define _lto_cflags %{nil}
|
||||||
|
|
||||||
|
Name: osmo-upf
|
||||||
|
Version: @VERSION@
|
||||||
|
Release: 0
|
||||||
|
Summary: OsmoUPF: Osmocom User Plane Function
|
||||||
|
License: AGPL-3.0-or-later AND GPL-2.0-or-later
|
||||||
|
Group: Hardware/Mobile
|
||||||
|
URL: https://osmocom.org/projects/osmoupf
|
||||||
|
Source: %{name}-%{version}.tar.xz
|
||||||
|
BuildRequires: autoconf-archive
|
||||||
|
BuildRequires: automake >= 1.9
|
||||||
|
BuildRequires: libtool >= 2
|
||||||
|
BuildRequires: lksctp-tools-devel
|
||||||
|
BuildRequires: pkgconfig >= 0.20
|
||||||
|
%if 0%{?suse_version}
|
||||||
|
BuildRequires: systemd-rpm-macros
|
||||||
|
%endif
|
||||||
|
BuildRequires: pkgconfig(libosmocore) >= 1.6.0
|
||||||
|
BuildRequires: pkgconfig(libosmoctrl) >= 1.6.0
|
||||||
|
BuildRequires: pkgconfig(libosmovty) >= 1.6.0
|
||||||
|
BuildRequires: pkgconfig(talloc)
|
||||||
|
%{?systemd_requires}
|
||||||
|
|
||||||
|
%description
|
||||||
|
OsmoUPF: Osmocom User Plane Function
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
echo "%{version}" >.tarball-version
|
||||||
|
autoreconf -fi
|
||||||
|
%configure \
|
||||||
|
--docdir=%{_docdir}/%{name} \
|
||||||
|
--with-systemdsystemunitdir=%{_unitdir}
|
||||||
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
|
%install
|
||||||
|
%make_install
|
||||||
|
|
||||||
|
%if 0%{?suse_version}
|
||||||
|
%preun
|
||||||
|
%service_del_preun %{name}.service
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%service_del_postun %{name}.service
|
||||||
|
|
||||||
|
%pre
|
||||||
|
%service_add_pre %{name}.service
|
||||||
|
|
||||||
|
%post
|
||||||
|
%service_add_post %{name}.service
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%check
|
||||||
|
make %{?_smp_mflags} check || (find . -name testsuite.log -exec cat {} +)
|
||||||
|
|
||||||
|
%files
|
||||||
|
%license COPYING
|
||||||
|
%doc AUTHORS README.md
|
||||||
|
%{_bindir}/osmo-upf
|
||||||
|
%dir %{_docdir}/%{name}/examples
|
||||||
|
%dir %{_docdir}/%{name}/examples/osmo-upf
|
||||||
|
%{_docdir}/%{name}/examples/osmo-upf/osmo-upf.cfg
|
||||||
|
%dir %{_sysconfdir}/osmocom
|
||||||
|
%config(noreplace) %{_sysconfdir}/osmocom/osmo-upf.cfg
|
||||||
|
%{_unitdir}/%{name}.service
|
||||||
|
|
||||||
|
%changelog
|
|
@ -0,0 +1,6 @@
|
||||||
|
EXTRA_DIST = osmo-upf.service
|
||||||
|
|
||||||
|
if HAVE_SYSTEMD
|
||||||
|
systemdsystemunit_DATA = \
|
||||||
|
osmo-upf.service
|
||||||
|
endif
|
|
@ -0,0 +1,11 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Osmocom User Plane Function (UPF)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Restart=always
|
||||||
|
ExecStart=/usr/bin/osmo-upf -c /etc/osmocom/osmo-upf.cfg
|
||||||
|
RestartSec=2
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1 @@
|
||||||
|
9
|
|
@ -0,0 +1,42 @@
|
||||||
|
Source: osmo-upf
|
||||||
|
Section: net
|
||||||
|
Priority: extra
|
||||||
|
Maintainer: Osmocom team <openbsc@lists.osmocom.org>
|
||||||
|
Build-Depends: debhelper (>=9),
|
||||||
|
dh-autoreconf,
|
||||||
|
autotools-dev,
|
||||||
|
autoconf,
|
||||||
|
autoconf-archive,
|
||||||
|
automake,
|
||||||
|
libtool,
|
||||||
|
pkg-config,
|
||||||
|
python3-minimal,
|
||||||
|
libtalloc-dev,
|
||||||
|
libosmocore-dev (>= 1.6.0),
|
||||||
|
osmo-gsm-manuals-dev (>= 1.2.0)
|
||||||
|
Standards-Version: 3.9.8
|
||||||
|
Vcs-Git: git://git.osmocom.org/osmo-upf.git
|
||||||
|
Vcs-Browser: https://git.osmocom.org/osmo-upf/
|
||||||
|
Homepage: https://projects.osmocom.org/projects/osmo-upf
|
||||||
|
|
||||||
|
Package: osmo-upf
|
||||||
|
Architecture: any
|
||||||
|
Multi-Arch: foreign
|
||||||
|
Depends: ${misc:Depends}, ${shlibs:Depends}
|
||||||
|
Description: OsmoUPF: Osmocom User Plane Function
|
||||||
|
|
||||||
|
Package: osmo-upf-dbg
|
||||||
|
Section: debug
|
||||||
|
Architecture: any
|
||||||
|
Multi-Arch: same
|
||||||
|
Depends: osmo-upf (= ${binary:Version}), ${misc:Depends}
|
||||||
|
Description: OsmoUPF: Osmocom User Plane Function
|
||||||
|
|
||||||
|
Package: osmo-upf-doc
|
||||||
|
Architecture: all
|
||||||
|
Section: doc
|
||||||
|
Priority: optional
|
||||||
|
Depends: ${misc:Depends}
|
||||||
|
Description: ${misc:Package} PDF documentation
|
||||||
|
Various manuals: user manual, VTY reference manual and/or
|
||||||
|
protocol/interface manuals.
|
|
@ -0,0 +1,19 @@
|
||||||
|
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Upstream-Name: osmo-upf
|
||||||
|
Source: git://git.osmocom.org/osmo-upf
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: 2021-2022 sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
|
License: AGPL-3.0+
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
.
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
@ -0,0 +1,4 @@
|
||||||
|
etc/osmocom/osmo-upf.cfg
|
||||||
|
lib/systemd/system/osmo-upf.service
|
||||||
|
usr/bin/osmo-upf
|
||||||
|
usr/share/doc/osmo-upf/examples/osmo-upf/osmo-upf.cfg usr/share/doc/osmo-upf/examples
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
# You must remove unused comment lines for the released package.
|
||||||
|
# See debhelper(7) (uncomment to enable)
|
||||||
|
# This is an autogenerated template for debian/rules.
|
||||||
|
#
|
||||||
|
# Output every command that modifies files on the build system.
|
||||||
|
#export DH_VERBOSE = 1
|
||||||
|
#
|
||||||
|
# Copy some variable definitions from pkg-info.mk and vendor.mk
|
||||||
|
# under /usr/share/dpkg/ to here if they are useful.
|
||||||
|
#
|
||||||
|
# See FEATURE AREAS/ENVIRONMENT in dpkg-buildflags(1)
|
||||||
|
# Apply all hardening options
|
||||||
|
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||||
|
# Package maintainers to append CFLAGS
|
||||||
|
#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
|
||||||
|
# Package maintainers to append LDFLAGS
|
||||||
|
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
|
||||||
|
#
|
||||||
|
# With debhelper version 9 or newer, the dh command exports
|
||||||
|
# all buildflags. So there is no need to include the
|
||||||
|
# /usr/share/dpkg/buildflags.mk file here if compat is 9 or newer.
|
||||||
|
#
|
||||||
|
# These are rarely used code. (START)
|
||||||
|
#
|
||||||
|
# The following include for *.mk magically sets miscellaneous
|
||||||
|
# variables while honoring existing values of pertinent
|
||||||
|
# environment variables:
|
||||||
|
#
|
||||||
|
# Architecture-related variables such as DEB_TARGET_MULTIARCH:
|
||||||
|
#include /usr/share/dpkg/architecture.mk
|
||||||
|
# Vendor-related variables such as DEB_VENDOR:
|
||||||
|
#include /usr/share/dpkg/vendor.mk
|
||||||
|
# Package-related variables such as DEB_DISTRIBUTION
|
||||||
|
#include /usr/share/dpkg/pkg-info.mk
|
||||||
|
#
|
||||||
|
# You may alternatively set them susing a simple script such as:
|
||||||
|
# DEB_VENDOR ?= $(shell dpkg-vendor --query Vendor)
|
||||||
|
#
|
||||||
|
# These are rarely used code. (END)
|
||||||
|
#
|
||||||
|
|
||||||
|
# main packaging script based on dh7 syntax
|
||||||
|
%:
|
||||||
|
dh $@ --with autoreconf
|
||||||
|
|
||||||
|
# debmake generated override targets
|
||||||
|
CONFIGURE_FLAGS += --with-systemdsystemunitdir=/lib/systemd/system --enable-manuals
|
||||||
|
override_dh_auto_configure:
|
||||||
|
dh_auto_configure -- $(CONFIGURE_FLAGS)
|
||||||
|
#
|
||||||
|
# Do not install libtool archive, python .pyc .pyo
|
||||||
|
#override_dh_install:
|
||||||
|
# dh_install --list-missing -X.la -X.pyc -X.pyo
|
||||||
|
|
||||||
|
# See https://www.debian.org/doc/manuals/developers-reference/best-pkging-practices.html#bpp-dbg
|
||||||
|
override_dh_strip:
|
||||||
|
dh_strip -posmo-upf --dbg-package=osmo-upf-dbg
|
||||||
|
|
||||||
|
# Print test results in case of a failure
|
||||||
|
override_dh_auto_test:
|
||||||
|
dh_auto_test || (find . -name testsuite.log -exec cat {} \; ; false)
|
||||||
|
|
||||||
|
# Don't create .pdf.gz files (barely saves space and they can't be opened directly by most pdf readers)
|
||||||
|
override_dh_compress:
|
||||||
|
dh_compress -X.pdf
|
|
@ -0,0 +1 @@
|
||||||
|
3.0 (native)
|
|
@ -0,0 +1,4 @@
|
||||||
|
SUBDIRS = \
|
||||||
|
examples \
|
||||||
|
manuals \
|
||||||
|
$(NULL)
|
|
@ -0,0 +1,30 @@
|
||||||
|
OSMOCONF_FILES = \
|
||||||
|
osmo-upf/osmo-upf.cfg
|
||||||
|
|
||||||
|
osmoconfdir = $(sysconfdir)/osmocom
|
||||||
|
osmoconf_DATA = $(OSMOCONF_FILES)
|
||||||
|
|
||||||
|
EXTRA_DIST = $(OSMOCONF_FILES)
|
||||||
|
|
||||||
|
CFG_FILES = find $(srcdir) -name '*.cfg*' | sed -e 's,^$(srcdir),,'
|
||||||
|
|
||||||
|
dist-hook:
|
||||||
|
for f in $$($(CFG_FILES)); do \
|
||||||
|
j="$(distdir)/$$f" && \
|
||||||
|
mkdir -p "$$(dirname $$j)" && \
|
||||||
|
$(INSTALL_DATA) $(srcdir)/$$f $$j; \
|
||||||
|
done
|
||||||
|
|
||||||
|
install-data-hook:
|
||||||
|
for f in $$($(CFG_FILES)); do \
|
||||||
|
j="$(DESTDIR)$(docdir)/examples/$$f" && \
|
||||||
|
mkdir -p "$$(dirname $$j)" && \
|
||||||
|
$(INSTALL_DATA) $(srcdir)/$$f $$j; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-hook:
|
||||||
|
@$(PRE_UNINSTALL)
|
||||||
|
for f in $$($(CFG_FILES)); do \
|
||||||
|
j="$(DESTDIR)$(docdir)/examples/$$f" && \
|
||||||
|
$(RM) $$j; \
|
||||||
|
done
|
|
@ -0,0 +1,9 @@
|
||||||
|
log stderr
|
||||||
|
logging filter all 1
|
||||||
|
logging color 1
|
||||||
|
logging print level 1
|
||||||
|
logging print category 1
|
||||||
|
logging print category-hex 0
|
||||||
|
logging print file basename last
|
||||||
|
logging print extended-timestamp 1
|
||||||
|
logging level set-all notice
|
|
@ -0,0 +1,25 @@
|
||||||
|
EXTRA_DIST = \
|
||||||
|
osmoupf-usermanual.adoc \
|
||||||
|
osmoupf-usermanual-docinfo.xml \
|
||||||
|
osmoupf-vty-reference.xml \
|
||||||
|
chapters \
|
||||||
|
regen_doc.sh \
|
||||||
|
vty
|
||||||
|
|
||||||
|
if BUILD_MANUALS
|
||||||
|
ASCIIDOC = osmoupf-usermanual.adoc
|
||||||
|
include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.asciidoc.inc
|
||||||
|
osmoupf-usermanual.pdf: $(srcdir)/chapters/*.adoc
|
||||||
|
|
||||||
|
VTY_REFERENCE = osmoupf-vty-reference.xml
|
||||||
|
|
||||||
|
BUILT_REFERENCE_XML = $(builddir)/vty/upf_vty_reference.xml
|
||||||
|
$(builddir)/vty/upf_vty_reference.xml: $(top_builddir)/src/osmo-upf/osmo-upf
|
||||||
|
mkdir -p $(builddir)/vty
|
||||||
|
$(top_builddir)/src/osmo-upf/osmo-upf --vty-ref-xml > $@
|
||||||
|
|
||||||
|
include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.vty-reference.inc
|
||||||
|
|
||||||
|
OSMO_REPOSITORY = osmo-upf
|
||||||
|
include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.common.inc
|
||||||
|
endif
|
|
@ -0,0 +1,24 @@
|
||||||
|
OsmoUPF
|
||||||
|
|
||||||
|
[[overview]]
|
||||||
|
== Overview
|
||||||
|
|
||||||
|
This manual should help you getting started with OsmoUPF. It will cover
|
||||||
|
aspects of configuring and running OsmoUPF.
|
||||||
|
|
||||||
|
[[intro_overview]]
|
||||||
|
=== About OsmoUPF
|
||||||
|
|
||||||
|
OsmoUPF is the Osmocom implementation of a User Plane Function for 2G, 3G, 4G
|
||||||
|
and 5G mobile network packet switched user data management. It implements:
|
||||||
|
|
||||||
|
- A Packet Forwarding Control Protocol (PFCP) entity to manage the GTP user
|
||||||
|
plane of mobile subscribers.
|
||||||
|
- GTP forwarding as well as encapsulation/decapsulation of user traffic, using
|
||||||
|
the Linux mainline kernel GTP module.
|
||||||
|
|
||||||
|
The aim is to provide:
|
||||||
|
|
||||||
|
- 1000 modifications of tunnel state per second (add/remove/modify),
|
||||||
|
- 4-8 Gbps throughput,
|
||||||
|
- 100-125k concurrent GTP tunnels.
|
|
@ -0,0 +1,47 @@
|
||||||
|
<revhistory>
|
||||||
|
<revision>
|
||||||
|
<revnumber>1</revnumber>
|
||||||
|
<date>December 2021</date>
|
||||||
|
<authorinitials>NJH</authorinitials>
|
||||||
|
<revremark>
|
||||||
|
Initial OsmoUPF manual
|
||||||
|
</revremark>
|
||||||
|
</revision>
|
||||||
|
</revhistory>
|
||||||
|
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname>Neels Janosch</firstname>
|
||||||
|
<surname>Hofmeyr</surname>
|
||||||
|
<email>nhofmeyr@sysmocom.de</email>
|
||||||
|
<authorinitials>NJH</authorinitials>
|
||||||
|
<affiliation>
|
||||||
|
<shortaffil>sysmocom</shortaffil>
|
||||||
|
<orgname>sysmocom - s.f.m.c. GmbH</orgname>
|
||||||
|
<jobtitle>Software Developer</jobtitle>
|
||||||
|
</affiliation>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
<year>2021-2022</year>
|
||||||
|
<holder>sysmocom - s.f.m.c. GmbH</holder>
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<legalnotice>
|
||||||
|
<para>
|
||||||
|
Permission is granted to copy, distribute and/or modify this
|
||||||
|
document under the terms of the GNU Free Documentation License,
|
||||||
|
Version 1.3 or any later version published by the Free Software
|
||||||
|
Foundation; with the Invariant Sections being just 'Foreword',
|
||||||
|
'Acknowledgements' and 'Preface', with no Front-Cover Texts,
|
||||||
|
and no Back-Cover Texts. A copy of the license is included in
|
||||||
|
the section entitled "GNU Free Documentation License".
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The Asciidoc source code of this manual can be found at
|
||||||
|
<ulink url="http://git.osmocom.org/osmo-gsm-manuals/">
|
||||||
|
http://git.osmocom.org/osmo-gsm-manuals/
|
||||||
|
</ulink>
|
||||||
|
</para>
|
||||||
|
</legalnotice>
|
|
@ -0,0 +1,28 @@
|
||||||
|
:gfdl-enabled:
|
||||||
|
:program-name: OsmoUPF
|
||||||
|
|
||||||
|
OsmoUPF User Manual
|
||||||
|
===================
|
||||||
|
Neels Janosch Hofmeyr <nhofmeyr@sysmocom.de>
|
||||||
|
|
||||||
|
include::./common/chapters/preface.adoc[]
|
||||||
|
|
||||||
|
include::{srcdir}/chapters/overview.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/vty.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/logging.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/counters-overview.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/control_if.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/vty_cpu_sched.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/port_numbers.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/bibliography.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/glossary.adoc[]
|
||||||
|
|
||||||
|
include::./common/chapters/gfdl.adoc[]
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
ex:ts=2:sw=42sts=2:et
|
||||||
|
-*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||||
|
-->
|
||||||
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN"
|
||||||
|
"http://docbook.org/xml/5.0/dtd/docbook.dtd" [
|
||||||
|
<!ENTITY chapter-vty SYSTEM "./common/chapters/vty.xml" >
|
||||||
|
<!ENTITY sections-vty SYSTEM "generated/docbook_vty.xml" >
|
||||||
|
]>
|
||||||
|
|
||||||
|
<book>
|
||||||
|
<info>
|
||||||
|
<revhistory>
|
||||||
|
<revision>
|
||||||
|
<revnumber>v1</revnumber>
|
||||||
|
<date>30th November 2021</date>
|
||||||
|
<authorinitials>NJH</authorinitials>
|
||||||
|
<revremark>Initial</revremark>
|
||||||
|
</revision>
|
||||||
|
</revhistory>
|
||||||
|
|
||||||
|
<title>OsmoUPF VTY Reference</title>
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
<year>2021-2022</year>
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<legalnotice>
|
||||||
|
<para>This work is copyright by <orgname>sysmocom - s.f.m.c. GmbH</orgname>. All rights reserved.
|
||||||
|
</para>
|
||||||
|
</legalnotice>
|
||||||
|
</info>
|
||||||
|
|
||||||
|
<!-- Main chapters-->
|
||||||
|
&chapter-vty;
|
||||||
|
</book>
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh -x
|
||||||
|
|
||||||
|
if [ -z "$DOCKER_PLAYGROUND" ]; then
|
||||||
|
echo "You need to set DOCKER_PLAYGROUND"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SCRIPT=$(realpath "$0")
|
||||||
|
MANUAL_DIR=$(dirname "$SCRIPT")
|
||||||
|
|
||||||
|
COMMIT=${COMMIT:-$(git log -1 --format=format:%H)}
|
||||||
|
|
||||||
|
cd "$DOCKER_PLAYGROUND/scripts" || exit 1
|
||||||
|
|
||||||
|
OSMO_UPF_BRANCH=$COMMIT ./regen_doc.sh osmo-upf 4273 \
|
||||||
|
"$MANUAL_DIR/chapters/counters_generated.adoc" \
|
||||||
|
"$MANUAL_DIR/vty/upf_vty_reference.xml"
|
|
@ -0,0 +1,2 @@
|
||||||
|
<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'>
|
||||||
|
</vtydoc>
|
|
@ -0,0 +1,151 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Print a version string.
|
||||||
|
scriptversion=2010-01-28.01
|
||||||
|
|
||||||
|
# Copyright (C) 2007-2010 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
|
||||||
|
# It may be run two ways:
|
||||||
|
# - from a git repository in which the "git describe" command below
|
||||||
|
# produces useful output (thus requiring at least one signed tag)
|
||||||
|
# - from a non-git-repo directory containing a .tarball-version file, which
|
||||||
|
# presumes this script is invoked like "./git-version-gen .tarball-version".
|
||||||
|
|
||||||
|
# In order to use intra-version strings in your project, you will need two
|
||||||
|
# separate generated version string files:
|
||||||
|
#
|
||||||
|
# .tarball-version - present only in a distribution tarball, and not in
|
||||||
|
# a checked-out repository. Created with contents that were learned at
|
||||||
|
# the last time autoconf was run, and used by git-version-gen. Must not
|
||||||
|
# be present in either $(srcdir) or $(builddir) for git-version-gen to
|
||||||
|
# give accurate answers during normal development with a checked out tree,
|
||||||
|
# but must be present in a tarball when there is no version control system.
|
||||||
|
# Therefore, it cannot be used in any dependencies. GNUmakefile has
|
||||||
|
# hooks to force a reconfigure at distribution time to get the value
|
||||||
|
# correct, without penalizing normal development with extra reconfigures.
|
||||||
|
#
|
||||||
|
# .version - present in a checked-out repository and in a distribution
|
||||||
|
# tarball. Usable in dependencies, particularly for files that don't
|
||||||
|
# want to depend on config.h but do want to track version changes.
|
||||||
|
# Delete this file prior to any autoconf run where you want to rebuild
|
||||||
|
# files to pick up a version string change; and leave it stale to
|
||||||
|
# minimize rebuild time after unrelated changes to configure sources.
|
||||||
|
#
|
||||||
|
# It is probably wise to add these two files to .gitignore, so that you
|
||||||
|
# don't accidentally commit either generated file.
|
||||||
|
#
|
||||||
|
# Use the following line in your configure.ac, so that $(VERSION) will
|
||||||
|
# automatically be up-to-date each time configure is run (and note that
|
||||||
|
# since configure.ac no longer includes a version string, Makefile rules
|
||||||
|
# should not depend on configure.ac for version updates).
|
||||||
|
#
|
||||||
|
# AC_INIT([GNU project],
|
||||||
|
# m4_esyscmd([build-aux/git-version-gen .tarball-version]),
|
||||||
|
# [bug-project@example])
|
||||||
|
#
|
||||||
|
# Then use the following lines in your Makefile.am, so that .version
|
||||||
|
# will be present for dependencies, and so that .tarball-version will
|
||||||
|
# exist in distribution tarballs.
|
||||||
|
#
|
||||||
|
# BUILT_SOURCES = $(top_srcdir)/.version
|
||||||
|
# $(top_srcdir)/.version:
|
||||||
|
# echo $(VERSION) > $@-t && mv $@-t $@
|
||||||
|
# dist-hook:
|
||||||
|
# echo $(VERSION) > $(distdir)/.tarball-version
|
||||||
|
|
||||||
|
case $# in
|
||||||
|
1) ;;
|
||||||
|
*) echo 1>&2 "Usage: $0 \$srcdir/.tarball-version"; exit 1;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
tarball_version_file=$1
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
|
||||||
|
# First see if there is a tarball-only version file.
|
||||||
|
# then try "git describe", then default.
|
||||||
|
if test -f $tarball_version_file
|
||||||
|
then
|
||||||
|
v=`cat $tarball_version_file` || exit 1
|
||||||
|
case $v in
|
||||||
|
*$nl*) v= ;; # reject multi-line output
|
||||||
|
[0-9]*) ;;
|
||||||
|
*) v= ;;
|
||||||
|
esac
|
||||||
|
test -z "$v" \
|
||||||
|
&& echo "$0: WARNING: $tarball_version_file seems to be damaged" 1>&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$v"
|
||||||
|
then
|
||||||
|
: # use $v
|
||||||
|
elif
|
||||||
|
v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \
|
||||||
|
|| git describe --abbrev=4 HEAD 2>/dev/null` \
|
||||||
|
&& case $v in
|
||||||
|
[0-9]*) ;;
|
||||||
|
v[0-9]*) ;;
|
||||||
|
*) (exit 1) ;;
|
||||||
|
esac
|
||||||
|
then
|
||||||
|
# Is this a new git that lists number of commits since the last
|
||||||
|
# tag or the previous older version that did not?
|
||||||
|
# Newer: v6.10-77-g0f8faeb
|
||||||
|
# Older: v6.10-g0f8faeb
|
||||||
|
case $v in
|
||||||
|
*-*-*) : git describe is okay three part flavor ;;
|
||||||
|
*-*)
|
||||||
|
: git describe is older two part flavor
|
||||||
|
# Recreate the number of commits and rewrite such that the
|
||||||
|
# result is the same as if we were using the newer version
|
||||||
|
# of git describe.
|
||||||
|
vtag=`echo "$v" | sed 's/-.*//'`
|
||||||
|
numcommits=`git rev-list "$vtag"..HEAD | wc -l`
|
||||||
|
v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Change the first '-' to a '.', so version-comparing tools work properly.
|
||||||
|
# Remove the "g" in git describe's output string, to save a byte.
|
||||||
|
v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
|
||||||
|
else
|
||||||
|
v=UNKNOWN
|
||||||
|
fi
|
||||||
|
|
||||||
|
v=`echo "$v" |sed 's/^v//'`
|
||||||
|
|
||||||
|
# Don't declare a version "dirty" merely because a time stamp has changed.
|
||||||
|
git status > /dev/null 2>&1
|
||||||
|
|
||||||
|
dirty=`sh -c 'git diff-index --name-only HEAD' 2>/dev/null` || dirty=
|
||||||
|
case "$dirty" in
|
||||||
|
'') ;;
|
||||||
|
*) # Append the suffix only if there isn't one already.
|
||||||
|
case $v in
|
||||||
|
*-dirty) ;;
|
||||||
|
*) v="$v-dirty" ;;
|
||||||
|
esac ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Omit the trailing newline, so that m4_esyscmd can use the result directly.
|
||||||
|
echo "$v" | tr -d '\012'
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
|
@ -0,0 +1,3 @@
|
||||||
|
SUBDIRS = \
|
||||||
|
osmocom \
|
||||||
|
$(NULL)
|
|
@ -0,0 +1,3 @@
|
||||||
|
SUBDIRS = \
|
||||||
|
upf \
|
||||||
|
$(NULL)
|
|
@ -0,0 +1,3 @@
|
||||||
|
noinst_HEADERS = \
|
||||||
|
upf.h \
|
||||||
|
$(NULL)
|
|
@ -0,0 +1,12 @@
|
||||||
|
/* Global definitions for OsmoUPF */
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct ctrl_handle;
|
||||||
|
|
||||||
|
struct g_upf {
|
||||||
|
struct ctrl_handle *ctrl;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct g_upf *g_upf;
|
||||||
|
|
||||||
|
void g_upf_alloc(void *ctx);
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# (C) 2021-2022 by sysmocom - s.m.f.c. GmbH <info@sysmocom.de>
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
|
app_configs = {
|
||||||
|
"osmo-upf": ["doc/examples/osmo-upf/osmo-upf.cfg"]
|
||||||
|
}
|
||||||
|
|
||||||
|
apps = [(4275, "src/osmo-upf/osmo-upf", "OsmoUPF", "osmo-upf")
|
||||||
|
]
|
||||||
|
|
||||||
|
vty_command = ["./src/osmo-upf/osmo-upf", "-c",
|
||||||
|
"doc/examples/osmo-upf/osmo-upf.cfg"]
|
||||||
|
|
||||||
|
vty_app = apps[0]
|
|
@ -0,0 +1,3 @@
|
||||||
|
SUBDIRS = \
|
||||||
|
osmo-upf \
|
||||||
|
$(NULL)
|
|
@ -0,0 +1,33 @@
|
||||||
|
AM_CPPFLAGS = \
|
||||||
|
$(all_includes) \
|
||||||
|
-I$(top_srcdir)/include \
|
||||||
|
-I$(top_builddir) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
AM_CFLAGS = \
|
||||||
|
-Wall \
|
||||||
|
$(LIBOSMOCORE_CFLAGS) \
|
||||||
|
$(LIBOSMOVTY_CFLAGS) \
|
||||||
|
$(LIBOSMOCTRL_CFLAGS) \
|
||||||
|
$(COVERAGE_CFLAGS) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
AM_LDFLAGS = \
|
||||||
|
$(COVERAGE_LDFLAGS) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
bin_PROGRAMS = \
|
||||||
|
osmo-upf \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
osmo_upf_SOURCES = \
|
||||||
|
osmo_upf_main.c \
|
||||||
|
upf.c \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
osmo_upf_LDADD = \
|
||||||
|
$(LIBOSMOCORE_LIBS) \
|
||||||
|
$(LIBOSMOVTY_LIBS) \
|
||||||
|
$(LIBOSMOCTRL_LIBS) \
|
||||||
|
$(COVERAGE_LDFLAGS) \
|
||||||
|
$(NULL)
|
|
@ -0,0 +1,313 @@
|
||||||
|
/* (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* Author: Neels Hofmeyr <nhofmeyr@sysmocom.de>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/lienses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <osmocom/core/application.h>
|
||||||
|
#include <osmocom/core/signal.h>
|
||||||
|
#include <osmocom/core/talloc.h>
|
||||||
|
#include <osmocom/core/logging.h>
|
||||||
|
#include <osmocom/core/fsm.h>
|
||||||
|
#include <osmocom/core/stats.h>
|
||||||
|
#include <osmocom/core/msgb.h>
|
||||||
|
#include <osmocom/vty/logging.h>
|
||||||
|
#include <osmocom/vty/command.h>
|
||||||
|
#include <osmocom/vty/misc.h>
|
||||||
|
#include <osmocom/vty/cpu_sched_vty.h>
|
||||||
|
#include <osmocom/vty/telnet_interface.h>
|
||||||
|
#include <osmocom/vty/ports.h>
|
||||||
|
#include <osmocom/ctrl/control_if.h>
|
||||||
|
#include <osmocom/ctrl/control_vty.h>
|
||||||
|
#include <osmocom/ctrl/ports.h>
|
||||||
|
|
||||||
|
#include <osmocom/upf/upf.h>
|
||||||
|
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
|
/* build switches from the configure script */
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
extern void *tall_vty_ctx;
|
||||||
|
|
||||||
|
void *tall_upf_ctx = NULL;
|
||||||
|
static int quit = 0;
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
const char *config_file;
|
||||||
|
int daemonize;
|
||||||
|
enum vty_ref_gen_mode vty_ref_gen_mode;
|
||||||
|
} upf_cmdline_config = {
|
||||||
|
.config_file = "osmo-upf.cfg",
|
||||||
|
.vty_ref_gen_mode = VTY_REF_GEN_MODE_DEFAULT,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void print_usage()
|
||||||
|
{
|
||||||
|
printf("Usage: osmo-upf\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_help()
|
||||||
|
{
|
||||||
|
const struct value_string *vty_ref_gen_mode_name;
|
||||||
|
|
||||||
|
printf("Some useful options:\n");
|
||||||
|
printf(" -h --help This text.\n");
|
||||||
|
printf(" -D --daemonize Fork the process into a background daemon.\n");
|
||||||
|
printf(" -c --config-file filename The config file to use.\n");
|
||||||
|
printf(" -V --version Print the version of OsmoMSC.\n");
|
||||||
|
|
||||||
|
printf("\nVTY reference generation:\n");
|
||||||
|
printf(" --vty-ref-xml Generate the VTY reference XML output and exit.\n");
|
||||||
|
printf(" --vty-ref-mode MODE Mode for --vty-ref-xml:\n");
|
||||||
|
/* List all VTY ref gen modes */
|
||||||
|
for (vty_ref_gen_mode_name = vty_ref_gen_mode_names; vty_ref_gen_mode_name->str; vty_ref_gen_mode_name++)
|
||||||
|
printf(" %s: %s\n",
|
||||||
|
vty_ref_gen_mode_name->str,
|
||||||
|
get_value_string(vty_ref_gen_mode_desc, vty_ref_gen_mode_name->value));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void handle_long_options(const char *prog_name, const int long_option)
|
||||||
|
{
|
||||||
|
switch (long_option) {
|
||||||
|
case 1:
|
||||||
|
upf_cmdline_config.vty_ref_gen_mode = get_string_value(vty_ref_gen_mode_names, optarg);
|
||||||
|
if (upf_cmdline_config.vty_ref_gen_mode < 0) {
|
||||||
|
fprintf(stderr, "%s: Unknown VTY reference generation mode: '%s'\n", prog_name, optarg);
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
fprintf(stderr, "Generating the VTY reference in mode '%s' (%s)\n",
|
||||||
|
get_value_string(vty_ref_gen_mode_names, upf_cmdline_config.vty_ref_gen_mode),
|
||||||
|
get_value_string(vty_ref_gen_mode_desc, upf_cmdline_config.vty_ref_gen_mode));
|
||||||
|
vty_dump_xml_ref_mode(stdout, upf_cmdline_config.vty_ref_gen_mode);
|
||||||
|
exit(0);
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "%s: error parsing cmdline options\n", prog_name);
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void handle_options(int argc, char **argv)
|
||||||
|
{
|
||||||
|
while (1) {
|
||||||
|
int option_index = 0, c;
|
||||||
|
static int long_option = 0;
|
||||||
|
static struct option long_options[] = {
|
||||||
|
{"help", 0, 0, 'h'},
|
||||||
|
{"daemonize", 0, 0, 'D'},
|
||||||
|
{"config-file", 1, 0, 'c'},
|
||||||
|
{"version", 0, 0, 'V' },
|
||||||
|
{"vty-ref-mode", 1, &long_option, 1},
|
||||||
|
{"vty-ref-xml", 0, &long_option, 2},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
c = getopt_long(argc, argv, "hDc:V", long_options, &option_index);
|
||||||
|
if (c == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
case 'h':
|
||||||
|
print_usage();
|
||||||
|
print_help();
|
||||||
|
exit(0);
|
||||||
|
case 0:
|
||||||
|
handle_long_options(argv[0], long_option);
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
upf_cmdline_config.daemonize = 1;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
upf_cmdline_config.config_file = optarg;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
print_version(1);
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* catch unknown options *as well as* missing arguments. */
|
||||||
|
fprintf(stderr, "%s: Error in command line options. Exiting.\n", argv[0]);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc > optind) {
|
||||||
|
fprintf(stderr, "%s: Unsupported positional arguments on command line\n", argv[0]);
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void signal_handler(int signum)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "signal %u received\n", signum);
|
||||||
|
|
||||||
|
switch (signum) {
|
||||||
|
case SIGINT:
|
||||||
|
case SIGTERM:
|
||||||
|
LOGP(DLGLOBAL, LOGL_NOTICE, "Terminating due to signal %d\n", signum);
|
||||||
|
quit++;
|
||||||
|
break;
|
||||||
|
case SIGABRT:
|
||||||
|
osmo_generate_backtrace();
|
||||||
|
/* in case of abort, we want to obtain a talloc report and
|
||||||
|
* then run default SIGABRT handler, who will generate coredump
|
||||||
|
* and abort the process. abort() should do this for us after we
|
||||||
|
* return, but program wouldn't exit if an external SIGABRT is
|
||||||
|
* received.
|
||||||
|
*/
|
||||||
|
talloc_report(tall_vty_ctx, stderr);
|
||||||
|
talloc_report_full(tall_upf_ctx, stderr);
|
||||||
|
signal(SIGABRT, SIG_DFL);
|
||||||
|
raise(SIGABRT);
|
||||||
|
break;
|
||||||
|
case SIGUSR1:
|
||||||
|
talloc_report(tall_vty_ctx, stderr);
|
||||||
|
talloc_report_full(tall_upf_ctx, stderr);
|
||||||
|
break;
|
||||||
|
case SIGUSR2:
|
||||||
|
talloc_report_full(tall_vty_ctx, stderr);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct vty_app_info upf_vty_app_info = {
|
||||||
|
.name = "OsmoUPF",
|
||||||
|
.version = PACKAGE_VERSION,
|
||||||
|
.copyright =
|
||||||
|
"OsmoUPF - Osmocom User Plane Function implementation\r\n"
|
||||||
|
"Copyright (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>\r\n"
|
||||||
|
"License AGPLv3+: GNU AGPL version 3 or later <http://gnu.org/licenses/agpl-3.0.html>\r\n"
|
||||||
|
"This is free software: you are free to change and redistribute it.\r\n"
|
||||||
|
"There is NO WARRANTY, to the extent permitted by law.\r\n",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct log_info_cat upf_default_categories[] = {
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct log_info log_info = {
|
||||||
|
.cat = upf_default_categories,
|
||||||
|
.num_cat = ARRAY_SIZE(upf_default_categories),
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
/* Track the use of talloc NULL memory contexts */
|
||||||
|
talloc_enable_null_tracking();
|
||||||
|
|
||||||
|
osmo_fsm_set_dealloc_ctx(OTC_SELECT);
|
||||||
|
|
||||||
|
tall_upf_ctx = talloc_named_const(NULL, 1, "osmo-upf");
|
||||||
|
upf_vty_app_info.tall_ctx = tall_upf_ctx;
|
||||||
|
|
||||||
|
msgb_talloc_ctx_init(tall_upf_ctx, 0);
|
||||||
|
osmo_signal_talloc_ctx_init(tall_upf_ctx);
|
||||||
|
|
||||||
|
osmo_init_logging2(tall_upf_ctx, &log_info);
|
||||||
|
|
||||||
|
osmo_fsm_log_timeouts(true);
|
||||||
|
osmo_fsm_log_addr(true);
|
||||||
|
|
||||||
|
osmo_stats_init(tall_upf_ctx);
|
||||||
|
|
||||||
|
g_upf_alloc(tall_upf_ctx);
|
||||||
|
|
||||||
|
/* For --version, vty_init() must be called before handling options */
|
||||||
|
vty_init(&upf_vty_app_info);
|
||||||
|
|
||||||
|
ctrl_vty_init(tall_upf_ctx);
|
||||||
|
logging_vty_add_cmds();
|
||||||
|
osmo_talloc_vty_add_cmds();
|
||||||
|
osmo_cpu_sched_vty_init(tall_upf_ctx);
|
||||||
|
|
||||||
|
/* Parse options */
|
||||||
|
handle_options(argc, argv);
|
||||||
|
|
||||||
|
rc = vty_read_config_file(upf_cmdline_config.config_file, NULL);
|
||||||
|
if (rc < 0) {
|
||||||
|
LOGP(DLGLOBAL, LOGL_FATAL, "Failed to parse the config file: '%s'\n",
|
||||||
|
upf_cmdline_config.config_file);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* start telnet, after reading config for vty_get_bind_addr() */
|
||||||
|
rc = telnet_init_dynif(tall_upf_ctx, &g_upf, vty_get_bind_addr(), OSMO_VTY_PORT_UPF);
|
||||||
|
if (rc < 0)
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
/* start control interface, after reading config for ctrl_vty_get_bind_addr() */
|
||||||
|
g_upf->ctrl = ctrl_interface_setup_dynip(g_upf, ctrl_vty_get_bind_addr(), OSMO_CTRL_PORT_UPF, NULL);
|
||||||
|
if (!g_upf->ctrl) {
|
||||||
|
fprintf(stderr, "Failed to initialize control interface. Exiting.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
signal(SIGINT, &signal_handler);
|
||||||
|
signal(SIGTERM, &signal_handler);
|
||||||
|
signal(SIGABRT, &signal_handler);
|
||||||
|
signal(SIGUSR1, &signal_handler);
|
||||||
|
signal(SIGUSR2, &signal_handler);
|
||||||
|
osmo_init_ignore_signals();
|
||||||
|
|
||||||
|
if (upf_cmdline_config.daemonize) {
|
||||||
|
rc = osmo_daemonize();
|
||||||
|
if (rc < 0) {
|
||||||
|
perror("Error during daemonize");
|
||||||
|
return 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
log_reset_context();
|
||||||
|
osmo_select_main_ctx(0);
|
||||||
|
|
||||||
|
/* If the user hits Ctrl-C the third time, just terminate immediately. */
|
||||||
|
if (quit >= 3)
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Has SIGTERM been received (and not yet been handled)? */
|
||||||
|
if (quit && !osmo_select_shutdown_requested()) {
|
||||||
|
osmo_signal_dispatch(SS_L_GLOBAL, S_L_GLOBAL_SHUTDOWN, NULL);
|
||||||
|
|
||||||
|
/* Request write-only mode in osmo_select_main_ctx() */
|
||||||
|
osmo_select_shutdown_request();
|
||||||
|
/* continue the main select loop until all write queues are serviced. */
|
||||||
|
}
|
||||||
|
} while (!osmo_select_shutdown_done());
|
||||||
|
|
||||||
|
log_fini();
|
||||||
|
|
||||||
|
/* Report the heap state of talloc contexts, then free, so both ASAN and Valgrind are happy... */
|
||||||
|
talloc_report_full(tall_upf_ctx, stderr);
|
||||||
|
talloc_free(tall_upf_ctx);
|
||||||
|
|
||||||
|
talloc_report_full(tall_vty_ctx, stderr);
|
||||||
|
talloc_free(tall_vty_ctx);
|
||||||
|
|
||||||
|
talloc_report_full(NULL, stderr);
|
||||||
|
talloc_disable_null_tracking();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
/* (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <osmocom/core/utils.h>
|
||||||
|
#include <osmocom/core/talloc.h>
|
||||||
|
|
||||||
|
#include <osmocom/upf/upf.h>
|
||||||
|
|
||||||
|
struct g_upf *g_upf = NULL;
|
||||||
|
|
||||||
|
void g_upf_alloc(void *ctx)
|
||||||
|
{
|
||||||
|
OSMO_ASSERT(g_upf == NULL);
|
||||||
|
g_upf = talloc_zero(ctx, struct g_upf);
|
||||||
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
SUBDIRS = \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
# The `:;' works around a Bash 3.2 bug when the output is not writeable.
|
||||||
|
$(srcdir)/package.m4: $(top_srcdir)/configure.ac
|
||||||
|
:;{ \
|
||||||
|
echo '# Signature of the current package.' && \
|
||||||
|
echo 'm4_define([AT_PACKAGE_NAME],' && \
|
||||||
|
echo ' [$(PACKAGE_NAME)])' && \
|
||||||
|
echo 'm4_define([AT_PACKAGE_TARNAME],' && \
|
||||||
|
echo ' [$(PACKAGE_TARNAME)])' && \
|
||||||
|
echo 'm4_define([AT_PACKAGE_VERSION],' && \
|
||||||
|
echo ' [$(PACKAGE_VERSION)])' && \
|
||||||
|
echo 'm4_define([AT_PACKAGE_STRING],' && \
|
||||||
|
echo ' [$(PACKAGE_STRING)])' && \
|
||||||
|
echo 'm4_define([AT_PACKAGE_BUGREPORT],' && \
|
||||||
|
echo ' [$(PACKAGE_BUGREPORT)])'; \
|
||||||
|
echo 'm4_define([AT_PACKAGE_URL],' && \
|
||||||
|
echo ' [$(PACKAGE_URL)])'; \
|
||||||
|
} >'$(srcdir)/package.m4'
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
upf.vty \
|
||||||
|
testsuite.at \
|
||||||
|
$(srcdir)/package.m4 \
|
||||||
|
$(TESTSUITE) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
TESTSUITE = $(srcdir)/testsuite
|
||||||
|
|
||||||
|
DISTCLEANFILES = \
|
||||||
|
atconfig \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
if ENABLE_EXT_TESTS
|
||||||
|
python-tests: $(BUILT_SOURCES)
|
||||||
|
$(MAKE) vty-test
|
||||||
|
osmotestvty.py -p $(abs_top_srcdir) -w $(abs_top_builddir) -v
|
||||||
|
osmotestconfig.py -p $(abs_top_srcdir) -w $(abs_top_builddir) -v
|
||||||
|
else
|
||||||
|
python-tests: $(BUILT_SOURCES)
|
||||||
|
echo "Not running python-based tests (determined at configure-time)"
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Run a specific test with: 'make vty-test VTY_TEST=foo.vty'
|
||||||
|
VTY_TEST ?= *.vty
|
||||||
|
|
||||||
|
# To update the VTY script from current application behavior,
|
||||||
|
# pass -u to vty_script_runner.py by doing:
|
||||||
|
# make vty-test U=-u
|
||||||
|
vty-test:
|
||||||
|
osmo_verify_transcript_vty.py -v \
|
||||||
|
-n OsmoUPF -p 4275 \
|
||||||
|
-r "$(top_builddir)/src/osmo-upf/osmo-upf -c $(top_srcdir)/doc/examples/osmo-upf/osmo-upf.cfg" \
|
||||||
|
$(U) $(srcdir)/$(VTY_TEST)
|
||||||
|
|
||||||
|
check-local: atconfig $(TESTSUITE)
|
||||||
|
$(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) python-tests
|
||||||
|
|
||||||
|
installcheck-local: atconfig $(TESTSUITE)
|
||||||
|
$(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \
|
||||||
|
$(TESTSUITEFLAGS)
|
||||||
|
|
||||||
|
clean-local:
|
||||||
|
test ! -f '$(TESTSUITE)' || \
|
||||||
|
$(SHELL) '$(TESTSUITE)' --clean
|
||||||
|
|
||||||
|
AUTOM4TE = $(SHELL) $(top_srcdir)/missing --run autom4te
|
||||||
|
AUTOTEST = $(AUTOM4TE) --language=autotest
|
||||||
|
$(TESTSUITE): $(srcdir)/testsuite.at $(srcdir)/package.m4
|
||||||
|
$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
|
||||||
|
mv $@.tmp $@
|
|
@ -0,0 +1,2 @@
|
||||||
|
AT_INIT
|
||||||
|
AT_BANNER([Regression tests.])
|
|
@ -0,0 +1,4 @@
|
||||||
|
OsmoUPF> enable
|
||||||
|
OsmoUPF# configure terminal
|
||||||
|
OsmoUPF(config)# show running-config
|
||||||
|
...
|
Loading…
Reference in New Issue