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

<div style="display:none"> Gerrit-Project: osmo-upf </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4352dd8738a1a9de6ba2fc250ee8eef69c65ff1e </div>
<div style="display:none"> Gerrit-Change-Number: 26691 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>