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