laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/26961 )
Change subject: _match_applications: catch SwMatchError e.g. if permission denied
......................................................................
_match_applications: catch SwMatchError e.g. if permission denied
There are some SIM cards (e.g. those of sipgate), which return
an undefined error status word if one tries to select some of the
applications the card itself lists in EF.DIR. Let's handle this
situation gracefully rather than printing python exceptions.
Change-Id: Id03a44c84cc8939908bc15f9fe42a9955d58c643
Closes: OS#5409
---
M pySim/filesystem.py
1 file changed, 7 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/61/26961/1
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index dfe1677..785108c 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -1113,10 +1113,13 @@
# Some card applications may not be registered in EF.DIR, we will actively
# probe for those applications
for f in set(apps_profile) - set(apps_taken):
- data, sw = self.card.select_adf_by_aid(f.aid)
- if sw == "9000":
- print(" %s: %s" % (f.name, f.aid))
- apps_taken.append(f)
+ try:
+ data, sw = self.card.select_adf_by_aid(f.aid)
+ if sw == "9000":
+ print(" %s: %s" % (f.name, f.aid))
+ apps_taken.append(f)
+ except SwMatchError as e:
+ print(" ERROR: %s: %s: Unable to select: %s" % (f.name, f.aid, e))
return apps_taken
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/26961
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Id03a44c84cc8939908bc15f9fe42a9955d58c643
Gerrit-Change-Number: 26961
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sccp/+/26960 )
Change subject: xua_default_lm_fsm.c: Fix typo in comment
......................................................................
xua_default_lm_fsm.c: Fix typo in comment
Change-Id: I4095878fb05c3128be556ab36dfc7ab88d309c9a
---
M src/xua_default_lm_fsm.c
1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/60/26960/1
diff --git a/src/xua_default_lm_fsm.c b/src/xua_default_lm_fsm.c
index ca488a7..e5cceea 100644
--- a/src/xua_default_lm_fsm.c
+++ b/src/xua_default_lm_fsm.c
@@ -149,7 +149,7 @@
{
switch (event) {
case LM_E_ASP_UP_CONF:
- /* ASP is sup, wait for some time if any NOTIFY
+ /* ASP is up, wait for some time if any NOTIFY
* indications about AS in this ASP are received */
osmo_fsm_inst_state_chg(fi, S_WAIT_NOTIFY, 2, T_WAIT_NOTIFY);
break;
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sccp/+/26960
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-Change-Id: I4095878fb05c3128be556ab36dfc7ab88d309c9a
Gerrit-Change-Number: 26960
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange
Attention is currently required from: Bjoern Riemer.
fixeria has posted comments on this change. ( https://gerrit.osmocom.org/c/pysim/+/26956 )
Change subject: add missing bit definition for NG-RAN in xAcT
......................................................................
Patch Set 1:
(1 comment)
Patchset:
PS1:
Please update the unit test(s).
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/26956
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I910df28c4c59ec94cce9603377786325f6d8c1a3
Gerrit-Change-Number: 26956
Gerrit-PatchSet: 1
Gerrit-Owner: Bjoern Riemer <bjoern.c3(a)nixda.biz>
Gerrit-Reviewer: Jenkins Builder
Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: Bjoern Riemer <bjoern.c3(a)nixda.biz>
Gerrit-Comment-Date: Fri, 21 Jan 2022 08:45:49 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
Attention is currently required from: Bjoern Riemer.
fixeria has posted comments on this change. ( https://gerrit.osmocom.org/c/pysim/+/26959 )
Change subject: implement shell command to update PLMN in IMSI
......................................................................
Patch Set 1: Code-Review-1
(2 comments)
File pySim/ts_51_011.py:
https://gerrit.osmocom.org/c/pysim/+/26959/comment/6f929f4f_d99beccc
PS1, Line 485: string
There is no such type in Python, should be 'str' instead.
https://gerrit.osmocom.org/c/pysim/+/26959/comment/679e39f7_c3b50569
PS1, Line 488: if len(plmn) == 5:
If I am not mistaken, it can also be 6 in case of 3-digit MNC.
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/26959
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I9662ff074acf9dc974ae4c78edac44db286e98fc
Gerrit-Change-Number: 26959
Gerrit-PatchSet: 1
Gerrit-Owner: Bjoern Riemer <bjoern.c3(a)nixda.biz>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: Bjoern Riemer <bjoern.c3(a)nixda.biz>
Gerrit-Comment-Date: Fri, 21 Jan 2022 08:41:20 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
Attention is currently required from: laforge.
fixeria has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmocore/+/16355 )
Change subject: osmo_fsm: Ensure all state and event names are valid identifiers
......................................................................
Patch Set 7:
(1 comment)
Patchset:
PS7:
When it comes to identifiers exposed over the CTRL interface, I am always wondering why don't we just implement a simple escaping for the CTRL itself, rather than restricting the FSM/CTR identifiers? I faced this problem while working on https://gerrit.osmocom.org/c/osmo-bts/+/25270. On the one had I have readability of the rate counter groups, on the other - inability of the CTRL interface to escape special symbols. I personally vote for readability, rather than identifiers that are hard to read.
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/16355
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: If98587eff3c48a66ed2e5cc1f01a12accab5a3e7
Gerrit-Change-Number: 16355
Gerrit-PatchSet: 7
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: dexter <pmaier(a)sysmocom.de>
Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Comment-Date: Fri, 21 Jan 2022 08:34:23 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
neels has submitted this change. ( https://gerrit.osmocom.org/c/osmo-upf/+/26691 )
Change subject: initial osmocom boilerplate source tree
......................................................................
initial osmocom boilerplate source tree
Related: SYS#5599
Depends: I0a46b147ec6a76d909df28136cfd2b764b2c75ea (libosmocore)
Change-Id: I4352dd8738a1a9de6ba2fc250ee8eef69c65ff1e
---
A .gitignore
A .gitreview
A AUTHORS
A Makefile.am
A README.md
A TODO-RELEASE
A configure.ac
A contrib/Makefile.am
A contrib/jenkins.sh
A contrib/osmo-upf.spec.in
A contrib/systemd/Makefile.am
A contrib/systemd/osmo-upf.service
A debian/changelog
A debian/compat
A debian/control
A debian/copyright
A debian/osmo-upf.install
A debian/rules
A debian/source/format
A doc/Makefile.am
A doc/examples/Makefile.am
A doc/examples/osmo-upf/osmo-upf.cfg
A doc/manuals/Makefile.am
A doc/manuals/chapters/overview.adoc
A doc/manuals/osmoupf-usermanual-docinfo.xml
A doc/manuals/osmoupf-usermanual.adoc
A doc/manuals/osmoupf-vty-reference.xml
A doc/manuals/regen_doc.sh
A doc/manuals/vty/upf_vty_additions.xml
A git-version-gen
A include/Makefile.am
A include/osmocom/Makefile.am
A include/osmocom/upf/Makefile.am
A include/osmocom/upf/upf.h
A osmoappdesc.py
A src/Makefile.am
A src/osmo-upf/Makefile.am
A src/osmo-upf/osmo_upf_main.c
A src/osmo-upf/upf.c
A tests/Makefile.am
A tests/atlocal.in
A tests/testsuite.at
A tests/upf.vty
43 files changed, 1,567 insertions(+), 0 deletions(-)
Approvals:
Jenkins Builder: Verified
neels: Looks good to me, approved
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3027037
--- /dev/null
+++ b/.gitignore
@@ -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
diff --git a/.gitreview b/.gitreview
new file mode 100644
index 0000000..e982555
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,3 @@
+[gerrit]
+host=gerrit.osmocom.org
+project=osmo-upf
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..5ce3b38
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+Neels Hofmeyr <nhofmeyr(a)sysmocom.de>
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..4452f04
--- /dev/null
+++ b/Makefile.am
@@ -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
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8d00fe3
--- /dev/null
+++ b/README.md
@@ -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(a)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
diff --git a/TODO-RELEASE b/TODO-RELEASE
new file mode 100644
index 0000000..d0852fc
--- /dev/null
+++ b/TODO-RELEASE
@@ -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…
+# 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
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..4995146
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,210 @@
+AC_INIT([osmo-upf],
+ m4_esyscmd([./git-version-gen .tarball-version]),
+ [osmocom-net-gprs(a)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)
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
new file mode 100644
index 0000000..3439c97
--- /dev/null
+++ b/contrib/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = systemd
diff --git a/contrib/jenkins.sh b/contrib/jenkins.sh
new file mode 100755
index 0000000..05ff623
--- /dev/null
+++ b/contrib/jenkins.sh
@@ -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
diff --git a/contrib/osmo-upf.spec.in b/contrib/osmo-upf.spec.in
new file mode 100644
index 0000000..3ae6ac4
--- /dev/null
+++ b/contrib/osmo-upf.spec.in
@@ -0,0 +1,86 @@
+#
+# spec file for package osmo-upf
+#
+# Copyright (c) 2017, Martin Hauke <mardnh(a)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
diff --git a/contrib/systemd/Makefile.am b/contrib/systemd/Makefile.am
new file mode 100644
index 0000000..f5e5468
--- /dev/null
+++ b/contrib/systemd/Makefile.am
@@ -0,0 +1,6 @@
+EXTRA_DIST = osmo-upf.service
+
+if HAVE_SYSTEMD
+systemdsystemunit_DATA = \
+ osmo-upf.service
+endif
diff --git a/contrib/systemd/osmo-upf.service b/contrib/systemd/osmo-upf.service
new file mode 100644
index 0000000..c4bc22a
--- /dev/null
+++ b/contrib/systemd/osmo-upf.service
@@ -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
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/debian/changelog
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..04b8224
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,42 @@
+Source: osmo-upf
+Section: net
+Priority: extra
+Maintainer: Osmocom team <openbsc(a)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.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..84c249f
--- /dev/null
+++ b/debian/copyright
@@ -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(a)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/>.
diff --git a/debian/osmo-upf.install b/debian/osmo-upf.install
new file mode 100644
index 0000000..7e48c41
--- /dev/null
+++ b/debian/osmo-upf.install
@@ -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
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..bac82b9
--- /dev/null
+++ b/debian/rules
@@ -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-practic…
+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
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..15f36b7
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = \
+ examples \
+ manuals \
+ $(NULL)
diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am
new file mode 100644
index 0000000..49b19d9
--- /dev/null
+++ b/doc/examples/Makefile.am
@@ -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
diff --git a/doc/examples/osmo-upf/osmo-upf.cfg b/doc/examples/osmo-upf/osmo-upf.cfg
new file mode 100644
index 0000000..8a2a407
--- /dev/null
+++ b/doc/examples/osmo-upf/osmo-upf.cfg
@@ -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
diff --git a/doc/manuals/Makefile.am b/doc/manuals/Makefile.am
new file mode 100644
index 0000000..d89e1b3
--- /dev/null
+++ b/doc/manuals/Makefile.am
@@ -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
diff --git a/doc/manuals/chapters/overview.adoc b/doc/manuals/chapters/overview.adoc
new file mode 100644
index 0000000..2b9b547
--- /dev/null
+++ b/doc/manuals/chapters/overview.adoc
@@ -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.
diff --git a/doc/manuals/osmoupf-usermanual-docinfo.xml b/doc/manuals/osmoupf-usermanual-docinfo.xml
new file mode 100644
index 0000000..9f053fa
--- /dev/null
+++ b/doc/manuals/osmoupf-usermanual-docinfo.xml
@@ -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(a)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>
diff --git a/doc/manuals/osmoupf-usermanual.adoc b/doc/manuals/osmoupf-usermanual.adoc
new file mode 100644
index 0000000..eace4dd
--- /dev/null
+++ b/doc/manuals/osmoupf-usermanual.adoc
@@ -0,0 +1,28 @@
+:gfdl-enabled:
+:program-name: OsmoUPF
+
+OsmoUPF User Manual
+===================
+Neels Janosch Hofmeyr <nhofmeyr(a)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[]
diff --git a/doc/manuals/osmoupf-vty-reference.xml b/doc/manuals/osmoupf-vty-reference.xml
new file mode 100644
index 0000000..bd9ed16
--- /dev/null
+++ b/doc/manuals/osmoupf-vty-reference.xml
@@ -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>
diff --git a/doc/manuals/regen_doc.sh b/doc/manuals/regen_doc.sh
new file mode 100755
index 0000000..214f020
--- /dev/null
+++ b/doc/manuals/regen_doc.sh
@@ -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"
diff --git a/doc/manuals/vty/upf_vty_additions.xml b/doc/manuals/vty/upf_vty_additions.xml
new file mode 100644
index 0000000..a4c675e
--- /dev/null
+++ b/doc/manuals/vty/upf_vty_additions.xml
@@ -0,0 +1,2 @@
+<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'>
+</vtydoc>
diff --git a/git-version-gen b/git-version-gen
new file mode 100755
index 0000000..42cf3d2
--- /dev/null
+++ b/git-version-gen
@@ -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:
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..9d963a0
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = \
+ osmocom \
+ $(NULL)
diff --git a/include/osmocom/Makefile.am b/include/osmocom/Makefile.am
new file mode 100644
index 0000000..3f929f1
--- /dev/null
+++ b/include/osmocom/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = \
+ upf \
+ $(NULL)
diff --git a/include/osmocom/upf/Makefile.am b/include/osmocom/upf/Makefile.am
new file mode 100644
index 0000000..2608e8f
--- /dev/null
+++ b/include/osmocom/upf/Makefile.am
@@ -0,0 +1,3 @@
+noinst_HEADERS = \
+ upf.h \
+ $(NULL)
diff --git a/include/osmocom/upf/upf.h b/include/osmocom/upf/upf.h
new file mode 100644
index 0000000..503c5a4
--- /dev/null
+++ b/include/osmocom/upf/upf.h
@@ -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);
diff --git a/osmoappdesc.py b/osmoappdesc.py
new file mode 100644
index 0000000..0cdbd1d
--- /dev/null
+++ b/osmoappdesc.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python3
+
+# (C) 2021-2022 by sysmocom - s.m.f.c. GmbH <info(a)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]
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..a8ba763
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = \
+ osmo-upf \
+ $(NULL)
diff --git a/src/osmo-upf/Makefile.am b/src/osmo-upf/Makefile.am
new file mode 100644
index 0000000..ec04fc7
--- /dev/null
+++ b/src/osmo-upf/Makefile.am
@@ -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)
diff --git a/src/osmo-upf/osmo_upf_main.c b/src/osmo-upf/osmo_upf_main.c
new file mode 100644
index 0000000..ddd1b44
--- /dev/null
+++ b/src/osmo-upf/osmo_upf_main.c
@@ -0,0 +1,313 @@
+/* (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info(a)sysmocom.de>
+ * All Rights Reserved
+ *
+ * Author: Neels Hofmeyr <nhofmeyr(a)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(a)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;
+}
diff --git a/src/osmo-upf/upf.c b/src/osmo-upf/upf.c
new file mode 100644
index 0000000..8932d92
--- /dev/null
+++ b/src/osmo-upf/upf.c
@@ -0,0 +1,30 @@
+/* (C) 2021-2022 by sysmocom - s.f.m.c. GmbH <info(a)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);
+}
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..6d14cc0
--- /dev/null
+++ b/tests/Makefile.am
@@ -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 $@
diff --git a/tests/atlocal.in b/tests/atlocal.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/atlocal.in
diff --git a/tests/testsuite.at b/tests/testsuite.at
new file mode 100644
index 0000000..09a77c3
--- /dev/null
+++ b/tests/testsuite.at
@@ -0,0 +1,2 @@
+AT_INIT
+AT_BANNER([Regression tests.])
diff --git a/tests/upf.vty b/tests/upf.vty
new file mode 100644
index 0000000..02ea1af
--- /dev/null
+++ b/tests/upf.vty
@@ -0,0 +1,4 @@
+OsmoUPF> enable
+OsmoUPF# configure terminal
+OsmoUPF(config)# show running-config
+...
--
To view, visit https://gerrit.osmocom.org/c/osmo-upf/+/26691
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-upf
Gerrit-Branch: master
Gerrit-Change-Id: I4352dd8738a1a9de6ba2fc250ee8eef69c65ff1e
Gerrit-Change-Number: 26691
Gerrit-PatchSet: 9
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged
Attention is currently required from: neels.
Hello Jenkins Builder, laforge, pespin,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/osmo-upf/+/26691
to look at the new patch set (#9).
Change subject: initial osmocom boilerplate source tree
......................................................................
initial osmocom boilerplate source tree
Related: SYS#5599
Depends: I0a46b147ec6a76d909df28136cfd2b764b2c75ea (libosmocore)
Change-Id: I4352dd8738a1a9de6ba2fc250ee8eef69c65ff1e
---
A .gitignore
A .gitreview
A AUTHORS
A Makefile.am
A README.md
A TODO-RELEASE
A configure.ac
A contrib/Makefile.am
A contrib/jenkins.sh
A contrib/osmo-upf.spec.in
A contrib/systemd/Makefile.am
A contrib/systemd/osmo-upf.service
A debian/changelog
A debian/compat
A debian/control
A debian/copyright
A debian/osmo-upf.install
A debian/rules
A debian/source/format
A doc/Makefile.am
A doc/examples/Makefile.am
A doc/examples/osmo-upf/osmo-upf.cfg
A doc/manuals/Makefile.am
A doc/manuals/chapters/overview.adoc
A doc/manuals/osmoupf-usermanual-docinfo.xml
A doc/manuals/osmoupf-usermanual.adoc
A doc/manuals/osmoupf-vty-reference.xml
A doc/manuals/regen_doc.sh
A doc/manuals/vty/upf_vty_additions.xml
A git-version-gen
A include/Makefile.am
A include/osmocom/Makefile.am
A include/osmocom/upf/Makefile.am
A include/osmocom/upf/upf.h
A osmoappdesc.py
A src/Makefile.am
A src/osmo-upf/Makefile.am
A src/osmo-upf/osmo_upf_main.c
A src/osmo-upf/upf.c
A tests/Makefile.am
A tests/atlocal.in
A tests/testsuite.at
A tests/upf.vty
43 files changed, 1,567 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-upf refs/changes/91/26691/9
--
To view, visit https://gerrit.osmocom.org/c/osmo-upf/+/26691
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-upf
Gerrit-Branch: master
Gerrit-Change-Id: I4352dd8738a1a9de6ba2fc250ee8eef69c65ff1e
Gerrit-Change-Number: 26691
Gerrit-PatchSet: 9
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: neels <nhofmeyr(a)sysmocom.de>
Gerrit-MessageType: newpatchset