mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-ggsn.git
synced 2025-11-03 05:33:23 +00:00
Compare commits
14 Commits
osmith/wip
...
1.12.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
561a9bc77c | ||
|
|
7ae1177e04 | ||
|
|
57585767dc | ||
|
|
488972b442 | ||
|
|
08239ccac3 | ||
|
|
fbc56063c5 | ||
|
|
c1598e0eb4 | ||
|
|
519a2e401d | ||
|
|
fbef527222 | ||
|
|
68f5b086ad | ||
|
|
3cb3423a59 | ||
|
|
bad5eeba0f | ||
|
|
1dd16fa12f | ||
|
|
3372625ad9 |
@@ -1,5 +1,6 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
SUBDIRS = \
|
||||
include \
|
||||
lib \
|
||||
gtp \
|
||||
ggsn \
|
||||
@@ -24,7 +25,6 @@ EXTRA_DIST = \
|
||||
README.FreeBSD \
|
||||
README.MacOSX \
|
||||
README.md \
|
||||
contrib/osmo-ggsn.spec.in \
|
||||
debian \
|
||||
git-version-gen \
|
||||
$(NULL)
|
||||
|
||||
@@ -63,7 +63,7 @@ Contributing
|
||||
Our coding standards are described at
|
||||
<https://osmocom.org/projects/cellular-infrastructure/wiki/Coding_standards>
|
||||
|
||||
We us a gerrit based patch submission/review process for managing
|
||||
We use a Gerrit based patch submission/review process for managing
|
||||
contributions. Please see
|
||||
<https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit> for
|
||||
more details
|
||||
|
||||
10
TODO-RELEASE
10
TODO-RELEASE
@@ -1,11 +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:
|
||||
# according to https://osmocom.org/projects/cellular-infrastructure/wiki/Make_a_new_release
|
||||
# In short: https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
|
||||
# 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, removed, or changed since the last update: c + 1:0:a.
|
||||
# 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
|
||||
libgtp REMOVE remove GTP cause defines of reserved values
|
||||
libgtpnl > 1.2.5 gtp_tunnel_set_family()
|
||||
#library what description / commit summary line
|
||||
|
||||
12
configure.ac
12
configure.ac
@@ -71,7 +71,7 @@ AC_ARG_ENABLE([gtp-linux],
|
||||
[enable_gtp_linux="$enableval"], [enable_gtp_linux="no"])
|
||||
|
||||
AS_IF([test "x$enable_gtp_linux" = "xyes"], [
|
||||
PKG_CHECK_MODULES([LIBGTPNL], [libgtpnl >= 1.2.0])
|
||||
PKG_CHECK_MODULES([LIBGTPNL], [libgtpnl >= 1.3.0])
|
||||
])
|
||||
|
||||
AM_CONDITIONAL([ENABLE_GTP_KERNEL], [test "$enable_gtp_linux" = "yes"])
|
||||
@@ -154,9 +154,9 @@ adl_FUNC_GETOPT_LONG
|
||||
|
||||
AM_INIT_AUTOMAKE([foreign])
|
||||
|
||||
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.9.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.9.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.9.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.10.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.10.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.10.0)
|
||||
|
||||
AC_ARG_ENABLE(sanitize,
|
||||
[AS_HELP_STRING(
|
||||
@@ -262,10 +262,12 @@ AC_CONFIG_FILES([Makefile
|
||||
doc/manuals/Makefile
|
||||
contrib/Makefile
|
||||
contrib/systemd/Makefile
|
||||
contrib/osmo-ggsn.spec
|
||||
tests/Makefile
|
||||
tests/lib/Makefile
|
||||
tests/gtp/Makefile
|
||||
include/Makefile
|
||||
include/osmocom/Makefile
|
||||
include/osmocom/gtp/Makefile
|
||||
libgtp.pc])
|
||||
AC_OUTPUT
|
||||
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# osmo-ggsn This shell script takes care of starting and stopping
|
||||
# osmo-ggsn.
|
||||
#
|
||||
# chkconfig: - 65 35
|
||||
# description: osmo-ggsn is a Gateway GPRS Support Node.
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
# Source networking configuration.
|
||||
. /etc/sysconfig/network
|
||||
|
||||
if [ -f /etc/sysconfig/osmo-ggsn ]; then
|
||||
. /etc/sysconfig/osmo-ggsn
|
||||
fi
|
||||
|
||||
# Check that networking is up.
|
||||
[ ${NETWORKING} = "no" ] && exit 0
|
||||
|
||||
[ -f /usr/bin/osmo-ggsn ] || exit 0
|
||||
[ -f /etc/osmo-ggsn.cfg ] || exit 0
|
||||
|
||||
RETVAL=0
|
||||
prog="osmo-ggsn"
|
||||
|
||||
start() {
|
||||
# Start daemons.
|
||||
echo -n $"Starting $prog: "
|
||||
|
||||
# Load tun module
|
||||
/sbin/modprobe tun >/dev/null 2>&1
|
||||
|
||||
# Enable routing of packets: WARNING!!!
|
||||
# Users should enable this explicitly
|
||||
# echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
|
||||
# Check for runtime directory of nonvolatile data
|
||||
if [ ! -d /var/lib/osmo-ggsn ]; then
|
||||
mkdir /var/lib/osmo-ggsn
|
||||
fi
|
||||
|
||||
# Check for GTP restart counter
|
||||
if [ ! -d /var/lib/osmo-ggsn/gsn_restart ]; then
|
||||
echo 0 > /var/lib/osmo-ggsn/gsn_restart
|
||||
fi
|
||||
|
||||
|
||||
daemon /usr/bin/osmo-ggsn
|
||||
RETVAL=$?
|
||||
echo
|
||||
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/osmo-ggsn
|
||||
return $RETVAL
|
||||
}
|
||||
|
||||
stop() {
|
||||
# Stop daemons.
|
||||
echo -n $"Shutting down $prog: "
|
||||
killproc osmo-ggsn
|
||||
RETVAL=$?
|
||||
echo
|
||||
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/osmo-ggsn /var/run/osmo-ggsn.pid
|
||||
return $RETVAL
|
||||
}
|
||||
|
||||
# See how we were called.
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
restart|reload)
|
||||
stop
|
||||
start
|
||||
RETVAL=$?
|
||||
;;
|
||||
condrestart)
|
||||
if [ -f /var/lock/subsys/osmo-ggsn ] ; then
|
||||
stop
|
||||
start
|
||||
RETVAL=$?
|
||||
fi
|
||||
;;
|
||||
status)
|
||||
status osmo-ggsn
|
||||
RETVAL=$?
|
||||
;;
|
||||
*)
|
||||
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit $RETVAL
|
||||
|
||||
@@ -1,137 +0,0 @@
|
||||
#
|
||||
# spec file for package osmo-ggsn
|
||||
#
|
||||
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# 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/4114
|
||||
%define _lto_cflags %{nil}
|
||||
|
||||
Name: osmo-ggsn
|
||||
Version: @VERSION@
|
||||
Release: 0
|
||||
Summary: GPRS Support Node
|
||||
License: GPL-2.0-only AND LGPL-2.1-or-later
|
||||
Group: Productivity/Telephony/Servers
|
||||
URL: https://osmocom.org/projects/openggsn
|
||||
Source: %{name}-%{version}.tar.xz
|
||||
BuildRequires: libtool >= 2
|
||||
BuildRequires: pkgconfig >= 0.20
|
||||
%if 0%{?suse_version}
|
||||
BuildRequires: systemd-rpm-macros
|
||||
%endif
|
||||
BuildRequires: pkgconfig(libgtpnl) >= 1.2.0
|
||||
BuildRequires: pkgconfig(libosmocore) >= 1.9.0
|
||||
BuildRequires: pkgconfig(libosmoctrl) >= 1.9.0
|
||||
BuildRequires: pkgconfig(libosmovty) >= 1.9.0
|
||||
Obsoletes: openggsn
|
||||
%{?systemd_requires}
|
||||
|
||||
%description
|
||||
Osmo-GGSN is a C-language implementation of a GGSN (Gateway GPRS
|
||||
Support Node), a core network element of ETSI/3GPP cellular networks
|
||||
such as GPRS, EDGE, UMTS or HSPA.
|
||||
|
||||
%package -n libgtp6
|
||||
Summary: Library implementing GTP between SGSN and GGSN
|
||||
License: GPL-2.0-only
|
||||
Group: System/Libraries
|
||||
|
||||
%description -n libgtp6
|
||||
libgtp implements the GPRS Tunneling Protocol between SGSN and GGSN.
|
||||
|
||||
%package -n libgtp-devel
|
||||
Summary: Development files for the GTP library
|
||||
License: GPL-2.0-only
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: libgtp6 = %{version}
|
||||
|
||||
%description -n libgtp-devel
|
||||
libgtp implements the GPRS Tunneling Protocol between SGSN and GGSN.
|
||||
|
||||
This subpackage contains libraries and header files for developing
|
||||
applications that want to make use of libgtp.
|
||||
|
||||
%package -n gtp-echo-responder
|
||||
Summary: Small program answering GTP ECHO Request with GTP ECHO Response
|
||||
License: MIT
|
||||
Group: System/Libraries
|
||||
|
||||
%description -n gtp-echo-responder
|
||||
Small program answering GTP ECHO Request with GTP ECHO Response for both GTPCv1
|
||||
and GTPCv2.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
echo "%{version}" >.tarball-version
|
||||
autoreconf -fi
|
||||
%configure \
|
||||
--enable-gtp-linux \
|
||||
--disable-static \
|
||||
--docdir="%{_docdir}/%{name}" \
|
||||
--with-systemdsystemunitdir=%{_unitdir} \
|
||||
--includedir="%{_includedir}/%{name}"
|
||||
make %{?_smp_mflags} V=1
|
||||
|
||||
%install
|
||||
%make_install
|
||||
find %{buildroot} -type f -name "*.la" -delete -print
|
||||
|
||||
%check
|
||||
make %{?_smp_mflags} check || (find . -name testsuite.log -exec cat {} +)
|
||||
|
||||
%if 0%{?suse_version}
|
||||
%pre
|
||||
%service_add_pre %{name}.service
|
||||
|
||||
%post
|
||||
%service_add_post %{name}.service
|
||||
|
||||
%preun
|
||||
%service_del_preun %{name}.service
|
||||
|
||||
%postun
|
||||
%service_del_postun %{name}.service
|
||||
%endif
|
||||
|
||||
%post -n libgtp6 -p /sbin/ldconfig
|
||||
%postun -n libgtp6 -p /sbin/ldconfig
|
||||
|
||||
%files
|
||||
%license COPYING
|
||||
%doc AUTHORS README.md
|
||||
%{_bindir}/osmo-ggsn
|
||||
%{_bindir}/sgsnemu
|
||||
%{_mandir}/man8/osmo-ggsn.8%{?ext_man}
|
||||
%{_mandir}/man8/sgsnemu.8%{?ext_man}
|
||||
%{_unitdir}/%{name}.service
|
||||
%dir %{_docdir}/%{name}/examples
|
||||
%{_docdir}/%{name}/examples/osmo-ggsn-kernel-gtp.cfg
|
||||
%{_docdir}/%{name}/examples/osmo-ggsn.cfg
|
||||
%{_docdir}/%{name}/examples/sgsnemu.conf
|
||||
%dir %{_sysconfdir}/osmocom
|
||||
%config(noreplace) %{_sysconfdir}/osmocom/osmo-ggsn.cfg
|
||||
|
||||
%files -n libgtp6
|
||||
%{_libdir}/libgtp.so.6*
|
||||
|
||||
%files -n libgtp-devel
|
||||
%{_includedir}/%{name}/
|
||||
%{_libdir}/libgtp.so
|
||||
%{_libdir}/pkgconfig/libgtp.pc
|
||||
|
||||
%files -n gtp-echo-responder
|
||||
%{_bindir}/gtp-echo-responder
|
||||
|
||||
%changelog
|
||||
@@ -11,6 +11,10 @@ WorkingDirectory=%S/osmocom
|
||||
ExecStart=/usr/bin/osmo-ggsn -c /etc/osmocom/osmo-ggsn.cfg
|
||||
RestartSec=2
|
||||
RestartPreventExitStatus=1
|
||||
User=osmocom
|
||||
Group=osmocom
|
||||
# For setting up the gtp0/tun0 devices
|
||||
AmbientCapabilities=CAP_NET_ADMIN
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
45
debian/changelog
vendored
45
debian/changelog
vendored
@@ -1,3 +1,48 @@
|
||||
osmo-ggsn (1.12.0) unstable; urgency=medium
|
||||
|
||||
[ Daniel Willmann ]
|
||||
* libgtp: Remove defines for reserved causes in gtp.h
|
||||
|
||||
[ Pau Espin Pedrol ]
|
||||
* pco: Improve IPCP spec reference documentation
|
||||
|
||||
[ Oliver Smith ]
|
||||
* Fix a typo
|
||||
* gtp_new: deduplicate create_and_bind_socket code
|
||||
* kernel-gtp: support IPv6 on outer layer
|
||||
* kernel-gtp: support IPv6 on inner layer
|
||||
* Revert "kernel-gtp: support IPv6 on outer layer"
|
||||
* Cosmetic: Makefile.am: make SUBDIRS diff friendly
|
||||
* Cosmetic: AM_CFLAGS: make diff friendly
|
||||
* Cosmetic: {lib,gtp}/Makefile.am: diff friendly
|
||||
* lib/gtp-kernel.c: initialize ret with 0
|
||||
* lib/gtp-kernel.c: check rc of in46a_from_eua
|
||||
* doc: fix typo ndoe -> node
|
||||
* Add clear error for kernel not supporting IPv6
|
||||
* contrib: remove rpm spec file
|
||||
* libgtp: move includes to osmocom/include/gtp
|
||||
* gtp/gsn_internal.h: new file
|
||||
* gtp/gtp.c: move gtp_create_context_resp down
|
||||
* gtp: remove unused conversion functions
|
||||
* gtp: move conversion functions up
|
||||
* gtp/gtp_internal.h: new file
|
||||
* ggsn/ggsn_vty: create state-dir
|
||||
* doc: set state-dir to /var/lib/osmocom/osmo-ggsn
|
||||
* contrib/systemd: run as osmocom user
|
||||
* Use uniform log format for default config files
|
||||
* {contrib,debian}/osmo-ggsn.init: remove
|
||||
|
||||
[ Harald Welte ]
|
||||
* Add funding link to github mirror
|
||||
* README.md: Improve markdown formatting
|
||||
* README.md: Add Forum + Issue Tracker sections
|
||||
* README.md: Major overhaul
|
||||
|
||||
[ Vadim Yanitskiy ]
|
||||
* README.md: cosmetic: fix a typo
|
||||
|
||||
-- Oliver Smith <osmith@sysmocom.de> Wed, 24 Jul 2024 15:13:31 +0200
|
||||
|
||||
osmo-ggsn (1.11.0) unstable; urgency=medium
|
||||
|
||||
[ Daniel Willmann ]
|
||||
|
||||
14
debian/control
vendored
14
debian/control
vendored
@@ -7,9 +7,9 @@ Build-Depends: debhelper (>= 10),
|
||||
pkg-config,
|
||||
libdpkg-perl, git,
|
||||
dh-autoreconf,
|
||||
libosmocore-dev (>= 1.9.0),
|
||||
osmo-gsm-manuals-dev,
|
||||
libgtpnl-dev (>= 1.2.0)
|
||||
libosmocore-dev (>= 1.10.0),
|
||||
osmo-gsm-manuals-dev (>= 1.6.0),
|
||||
libgtpnl-dev (>= 1.3.0)
|
||||
Standards-Version: 3.9.6
|
||||
Vcs-Browser: https://gitea.osmocom.org/cellular-infrastructure/osmo-ggsn
|
||||
Vcs-Git: https://gitea.osmocom.org/cellular-infrastructure/osmo-ggsn
|
||||
@@ -24,7 +24,7 @@ Description: Osmocom Gateway GPRS Support Node (GGSN)
|
||||
operators as the interface between the Internet and the rest of the
|
||||
mobile network infrastructure.
|
||||
|
||||
Package: libgtp6
|
||||
Package: libgtp10
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Section: libs
|
||||
@@ -49,7 +49,7 @@ Architecture: any
|
||||
Multi-Arch: same
|
||||
Section: libdevel
|
||||
Depends: ${misc:Depends},
|
||||
libgtp6 (= ${binary:Version})
|
||||
libgtp10 (= ${binary:Version})
|
||||
Description: Development files for libgtp
|
||||
OsmoGGSN is a Gateway GPRS Support Node (GGSN). It is used by mobile
|
||||
operators as the interface between the Internet and the rest of the
|
||||
@@ -62,7 +62,7 @@ Package: osmo-ggsn-dbg
|
||||
Section: debug
|
||||
Architecture: any
|
||||
Priority: extra
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libgtp6 (= ${binary:Version}), osmo-ggsn (= ${binary:Version})
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libgtp10 (= ${binary:Version}), osmo-ggsn (= ${binary:Version})
|
||||
Multi-Arch: same
|
||||
Description: Debug symbols for OsmoGGSN
|
||||
OsmoGGSN is a Gateway GPRS Support Node (GGSN). It is used by mobile
|
||||
@@ -82,7 +82,7 @@ Package: libgtp-dbg
|
||||
Section: debug
|
||||
Architecture: any
|
||||
Priority: extra
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libgtp6 (= ${binary:Version})
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libgtp10 (= ${binary:Version})
|
||||
Multi-Arch: same
|
||||
Description: Debug symbols for OsmoGGSN
|
||||
OsmoGGSN is a Gateway GPRS Support Node (GGSN). It is used by mobile
|
||||
|
||||
163
debian/osmo-ggsn.init
vendored
163
debian/osmo-ggsn.init
vendored
@@ -1,163 +0,0 @@
|
||||
#!/bin/sh
|
||||
### BEGIN INIT INFO
|
||||
# Provides: osmo-ggsn
|
||||
# Required-Start: $network $local_fs $remote_fs
|
||||
# Required-Stop: $network $remote_fs
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Gateway GPRS Support Node
|
||||
# Description: Gateway GPRS Support Node
|
||||
### END INIT INFO
|
||||
|
||||
# Author: Harald Welte <laforge@gnumonks.org>
|
||||
|
||||
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
||||
DESC="OsmoGGSN Gateway GPRS Support Node"
|
||||
NAME=ggsn
|
||||
DAEMON=/usr/bin/osmo-ggsn
|
||||
DAEMON_ARGS="" # Arguments to run the daemon with
|
||||
PIDFILE=/var/run/$NAME.pid
|
||||
SCRIPTNAME=/etc/init.d/osmo-ggsn
|
||||
|
||||
# Exit if the package is not installed
|
||||
[ -x $DAEMON ] || exit 0
|
||||
|
||||
# Read configuration variable file if it is present
|
||||
[ -r /etc/default/osmo-ggsn ] && . /etc/default/osmo-ggsn
|
||||
|
||||
# Load the VERBOSE setting and other rcS variables
|
||||
. /lib/init/vars.sh
|
||||
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
DAEMON_ARGS="$DAEMON_ARGS"
|
||||
|
||||
#
|
||||
# Function that starts the daemon/service
|
||||
#
|
||||
do_start()
|
||||
{
|
||||
# Return
|
||||
# 0 if daemon has been started
|
||||
# 1 if daemon was already running
|
||||
# 2 if daemon could not be started
|
||||
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|
||||
|| return 1
|
||||
|
||||
# Check for runtime directory of nonvolatile data
|
||||
if [ ! -d /var/lib/osmo-ggsn ]; then
|
||||
mkdir /var/lib/osmo-ggsn
|
||||
fi
|
||||
|
||||
# Check for GTP restart counter
|
||||
if [ ! -f /var/lib/osmo-ggsn/gsn_restart ]; then
|
||||
echo 0 > /var/lib/osmo-ggsn/gsn_restart
|
||||
fi
|
||||
|
||||
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
|
||||
$DAEMON_ARGS \
|
||||
|| return 2
|
||||
# Add code here, if necessary, that waits for the process to be ready
|
||||
# to handle requests from services started subsequently which depend
|
||||
# on this one. As a last resort, sleep for some time.
|
||||
}
|
||||
|
||||
#
|
||||
# Function that stops the daemon/service
|
||||
#
|
||||
do_stop()
|
||||
{
|
||||
# Return
|
||||
# 0 if daemon has been stopped
|
||||
# 1 if daemon was already stopped
|
||||
# 2 if daemon could not be stopped
|
||||
# other if a failure occurred
|
||||
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
|
||||
RETVAL="$?"
|
||||
[ "$RETVAL" = 2 ] && return 2
|
||||
# Wait for children to finish too if this is a daemon that forks
|
||||
# and if the daemon is only ever run from this initscript.
|
||||
# If the above conditions are not satisfied then add some other code
|
||||
# that waits for the process to drop all resources that could be
|
||||
# needed by services started subsequently. A last resort is to
|
||||
# sleep for some time.
|
||||
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
|
||||
[ "$?" = 2 ] && return 2
|
||||
# Many daemons don't delete their pidfiles when they exit.
|
||||
rm -f $PIDFILE
|
||||
return "$RETVAL"
|
||||
}
|
||||
|
||||
#
|
||||
# Function that sends a SIGHUP to the daemon/service
|
||||
#
|
||||
do_reload() {
|
||||
#
|
||||
# If the daemon can reload its configuration without
|
||||
# restarting (for example, when it is sent a SIGHUP),
|
||||
# then implement that here.
|
||||
#
|
||||
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
|
||||
return 0
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
|
||||
do_start
|
||||
case "$?" in
|
||||
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
stop)
|
||||
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
status)
|
||||
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
||||
;;
|
||||
#reload|force-reload)
|
||||
#
|
||||
# If do_reload() is not implemented then leave this commented out
|
||||
# and leave 'force-reload' as an alias for 'restart'.
|
||||
#
|
||||
#log_daemon_msg "Reloading $DESC" "$NAME"
|
||||
#do_reload
|
||||
#log_end_msg $?
|
||||
#;;
|
||||
restart|force-reload)
|
||||
#
|
||||
# If the "reload" option is implemented then remove the
|
||||
# 'force-reload' alias
|
||||
#
|
||||
log_daemon_msg "Restarting $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1)
|
||||
do_start
|
||||
case "$?" in
|
||||
0) log_end_msg 0 ;;
|
||||
1) log_end_msg 1 ;; # Old process is still running
|
||||
*) log_end_msg 1 ;; # Failed to start
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
# Failed to stop
|
||||
log_end_msg 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
|
||||
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
:
|
||||
39
debian/postinst
vendored
Executable file
39
debian/postinst
vendored
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh -e
|
||||
case "$1" in
|
||||
configure)
|
||||
# Create the osmocom group and user (if it doesn't exist yet)
|
||||
if ! getent group osmocom >/dev/null; then
|
||||
groupadd --system osmocom
|
||||
fi
|
||||
if ! getent passwd osmocom >/dev/null; then
|
||||
useradd \
|
||||
--system \
|
||||
--gid osmocom \
|
||||
--home-dir /var/lib/osmocom \
|
||||
--shell /sbin/nologin \
|
||||
--comment "Open Source Mobile Communications" \
|
||||
osmocom
|
||||
fi
|
||||
|
||||
# Fix permissions of previous (root-owned) install (OS#4107)
|
||||
if dpkg --compare-versions "$2" le "1.13.0"; then
|
||||
if [ -e /etc/osmocom/osmo-ggsn.cfg ]; then
|
||||
chown -v osmocom:osmocom /etc/osmocom/osmo-ggsn.cfg
|
||||
chmod -v 0660 /etc/osmocom/osmo-ggsn.cfg
|
||||
fi
|
||||
|
||||
if [ -d /etc/osmocom ]; then
|
||||
chown -v root:osmocom /etc/osmocom
|
||||
chmod -v 2775 /etc/osmocom
|
||||
fi
|
||||
|
||||
mkdir -p /var/lib/osmocom
|
||||
chown -R -v osmocom:osmocom /var/lib/osmocom
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# dh_installdeb(1) will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
#DEBHELPER#
|
||||
|
||||
2
debian/rules
vendored
2
debian/rules
vendored
@@ -16,7 +16,7 @@ export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||
|
||||
override_dh_strip:
|
||||
dh_strip -posmo-ggsn --dbg-package=osmo-ggsn-dbg
|
||||
dh_strip -plibgtp6 --dbg-package=libgtp-dbg
|
||||
dh_strip -plibgtp10 --dbg-package=libgtp-dbg
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -- \
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
!!
|
||||
!
|
||||
log stderr
|
||||
logging filter all 1
|
||||
logging color 1
|
||||
logging print category 0
|
||||
logging print category-hex 0
|
||||
logging print category 1
|
||||
logging timestamp 0
|
||||
logging print file basename last
|
||||
logging print level 1
|
||||
logging level ip info
|
||||
logging level tun info
|
||||
logging level ggsn info
|
||||
@@ -36,7 +38,7 @@ line vty
|
||||
no login
|
||||
!
|
||||
ggsn ggsn0
|
||||
gtp state-dir /tmp
|
||||
gtp state-dir /var/lib/osmocom/osmo-ggsn
|
||||
gtp bind-ip 127.0.0.2
|
||||
apn internet
|
||||
gtpu-mode kernel-gtp
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
!!
|
||||
!
|
||||
log stderr
|
||||
logging filter all 1
|
||||
logging color 1
|
||||
logging print category 0
|
||||
logging print category-hex 0
|
||||
logging print category 1
|
||||
logging timestamp 0
|
||||
logging print file basename last
|
||||
logging print level 1
|
||||
logging level ip info
|
||||
logging level tun info
|
||||
logging level ggsn info
|
||||
@@ -36,7 +38,7 @@ line vty
|
||||
no login
|
||||
!
|
||||
ggsn ggsn0
|
||||
gtp state-dir /tmp
|
||||
gtp state-dir /var/lib/osmocom/osmo-ggsn
|
||||
gtp bind-ip 127.0.0.2
|
||||
apn internet
|
||||
gtpu-mode tun
|
||||
|
||||
@@ -16,7 +16,7 @@ your configuration file, like in below example:
|
||||
.Example: Single GGSN configuration section
|
||||
----
|
||||
ggsn ggsn0
|
||||
gtp state-dir /tmp
|
||||
gtp state-dir /var/lib/osmocom/osmo-ggsn
|
||||
gtp bind-ip 127.0.0.6
|
||||
apn internet
|
||||
gtpu-mode tun
|
||||
@@ -58,7 +58,7 @@ The following two mandatory configuration statements have to be given
|
||||
for every GGSN instance:
|
||||
|
||||
----
|
||||
OsmoGGSN(config-ggsn)# gtp state-dir /var/lib/ggsn/ggsn0 <1>
|
||||
OsmoGGSN(config-ggsn)# gtp state-dir /var/lib/osmocom/osmo-ggsn <1>
|
||||
OsmoGGSN(config-ggsn)# gtp bind-ip 127.0.0.6 <2>
|
||||
----
|
||||
<1> Store the GSN restart state in the specified directory
|
||||
|
||||
@@ -7,6 +7,7 @@ AM_CFLAGS = \
|
||||
-fno-builtin \
|
||||
-Wall \
|
||||
-DSBINDIR='"$(sbindir)"' \
|
||||
-I$(top_srcdir)/include \
|
||||
$(LIBOSMOCORE_CFLAGS) \
|
||||
$(LIBOSMOCTRL_CFLAGS) \
|
||||
$(LIBOSMOVTY_CFLAGS) \
|
||||
|
||||
@@ -46,17 +46,19 @@
|
||||
#include <osmocom/ctrl/control_if.h>
|
||||
#include <osmocom/gsm/apn.h>
|
||||
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
|
||||
#include "../lib/tun.h"
|
||||
#include "../lib/ippool.h"
|
||||
#include "../lib/syserr.h"
|
||||
#include "../lib/in46_addr.h"
|
||||
#include "../lib/gtp-kernel.h"
|
||||
#include "../lib/util.h"
|
||||
#include "../gtp/pdp.h"
|
||||
#include "../gtp/gtp.h"
|
||||
#include "../lib/icmpv6.h"
|
||||
#include "pco.h"
|
||||
#include "ggsn.h"
|
||||
#include "../gtp/gtp_internal.h"
|
||||
|
||||
static int ggsn_tun_fd_cb(struct osmo_fd *fd, unsigned int what);
|
||||
static int cb_tun_ind(struct tun_t *tun, void *pack, unsigned len);
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
#include <osmocom/core/timer.h>
|
||||
#include <osmocom/core/tdef.h>
|
||||
#include <osmocom/ctrl/control_if.h>
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
|
||||
#include "../lib/tun.h"
|
||||
#include "../lib/ippool.h"
|
||||
#include "../lib/syserr.h"
|
||||
#include "../lib/in46_addr.h"
|
||||
#include "../gtp/gtp.h"
|
||||
|
||||
#include "sgsn.h"
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#include <inttypes.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <osmocom/core/talloc.h>
|
||||
#include <osmocom/core/utils.h>
|
||||
@@ -35,13 +37,14 @@
|
||||
#include <osmocom/vty/misc.h>
|
||||
#include <osmocom/vty/tdef_vty.h>
|
||||
|
||||
#include "../gtp/gtp.h"
|
||||
#include "../gtp/pdp.h"
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
|
||||
#include "../lib/util.h"
|
||||
|
||||
#include "ggsn.h"
|
||||
#include "sgsn.h"
|
||||
#include "../gtp/gtp_internal.h"
|
||||
|
||||
#define PREFIX_STR "Prefix (Network/Netmask)\n"
|
||||
#define IFCONFIG_STR "GGSN-based interface configuration\n"
|
||||
@@ -223,6 +226,11 @@ DEFUN(cfg_ggsn_state_dir, cfg_ggsn_state_dir_cmd,
|
||||
{
|
||||
struct ggsn_ctx *ggsn = (struct ggsn_ctx *) vty->index;
|
||||
|
||||
if (mkdir(argv[0], 0755) == -1 && errno != EEXIST) {
|
||||
vty_out(vty, "%% Failed to create state-dir: %s%s", argv[0], VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
osmo_talloc_replace_string(ggsn, &ggsn->cfg.state_dir, argv[0]);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "../gtp/pdp.h"
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
|
||||
/* 3GPP TS 24.008 10.5.6.3 */
|
||||
enum pco_protocols {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "sgsn.h"
|
||||
#include "ggsn.h"
|
||||
|
||||
#include "../gtp/gtp_internal.h"
|
||||
|
||||
static bool sgsn_peer_attempt_free(struct sgsn_peer *sgsn)
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <osmocom/core/linuxlist.h>
|
||||
#include <osmocom/core/timer.h>
|
||||
|
||||
#include "../gtp/pdp.h"
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
|
||||
struct ggsn_ctx;
|
||||
struct pdp_priv_t;
|
||||
|
||||
@@ -2,30 +2,27 @@
|
||||
# Please read chapter "Library interface versions" of the libtool documentation
|
||||
# before making any modifications: https://www.gnu.org/software/libtool/manual/html_node/Versioning.html
|
||||
# If major=current-age is increased, remember to update the dh_strip line in debian/rules!
|
||||
LIBVERSION=9:1:3
|
||||
LIBVERSION=10:0:0
|
||||
|
||||
lib_LTLIBRARIES = libgtp.la
|
||||
|
||||
include_HEADERS = gtp.h gsn.h pdp.h gtpie.h
|
||||
|
||||
AM_CFLAGS = \
|
||||
-fno-builtin \
|
||||
-Wall \
|
||||
-DSBINDIR='"$(sbindir)"' \
|
||||
-I$(top_srcdir)/include \
|
||||
$(LIBOSMOCORE_CFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
libgtp_la_SOURCES = \
|
||||
gsn.c \
|
||||
gsn.h \
|
||||
gsn_internal.h \
|
||||
gtp.c \
|
||||
gtp.h \
|
||||
gtp_internal.h \
|
||||
gtpie.c \
|
||||
gtpie.h \
|
||||
lookupa.c \
|
||||
lookupa.h \
|
||||
pdp.c \
|
||||
pdp.h \
|
||||
queue.c \
|
||||
queue.h \
|
||||
$(NULL)
|
||||
|
||||
@@ -57,10 +57,12 @@
|
||||
|
||||
/* #include <stdint.h> ISO C99 types */
|
||||
|
||||
#include "pdp.h"
|
||||
#include "gtp.h"
|
||||
#include "gtpie.h"
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
#include <osmocom/gtp/gtpie.h>
|
||||
|
||||
#include "queue.h"
|
||||
#include "gsn_internal.h"
|
||||
|
||||
/* Error reporting functions */
|
||||
|
||||
|
||||
3
gtp/gsn_internal.h
Normal file
3
gtp/gsn_internal.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
void gtp_queue_timer_start(struct gsn_t *gsn);
|
||||
178
gtp/gtp.c
178
gtp/gtp.c
@@ -55,10 +55,13 @@
|
||||
|
||||
/* #include <stdint.h> ISO C99 types */
|
||||
|
||||
#include "pdp.h"
|
||||
#include "gtp.h"
|
||||
#include "gtpie.h"
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
#include <osmocom/gtp/gtpie.h>
|
||||
|
||||
#include "queue.h"
|
||||
#include "gsn_internal.h"
|
||||
#include "gtp_internal.h"
|
||||
|
||||
/* Error reporting functions */
|
||||
|
||||
@@ -638,8 +641,8 @@ int gtp_echo_req(struct gsn_t *gsn, int version, void *cbp,
|
||||
}
|
||||
|
||||
/* Send off an echo reply */
|
||||
int gtp_echo_resp(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd, void *pack, unsigned len)
|
||||
static int gtp_echo_resp(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd, void *pack, unsigned len)
|
||||
{
|
||||
union gtp_packet packet;
|
||||
unsigned int length = get_default_gtp(version, GTP_ECHO_RSP, &packet);
|
||||
@@ -650,8 +653,8 @@ int gtp_echo_resp(struct gsn_t *gsn, int version,
|
||||
}
|
||||
|
||||
/* Handle a received echo request */
|
||||
int gtp_echo_ind(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
int fd, void *pack, unsigned len)
|
||||
static int gtp_echo_ind(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
int fd, void *pack, unsigned len)
|
||||
{
|
||||
|
||||
/* Check if it was a duplicate request */
|
||||
@@ -663,8 +666,8 @@ int gtp_echo_ind(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
}
|
||||
|
||||
/* Handle a received echo reply */
|
||||
int gtp_echo_conf(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
void *pack, unsigned len)
|
||||
static int gtp_echo_conf(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
void *pack, unsigned len)
|
||||
{
|
||||
union gtpie_member *ie[GTPIE_SIZE];
|
||||
unsigned char recovery;
|
||||
@@ -716,8 +719,8 @@ int gtp_echo_conf(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
* only listen to the GTP0 port, and therefore will never receive
|
||||
* anything else than GTP0 */
|
||||
|
||||
int gtp_unsup_req(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
int fd, void *pack, unsigned len)
|
||||
static int gtp_unsup_req(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
int fd, void *pack, unsigned len)
|
||||
{
|
||||
union gtp_packet packet;
|
||||
|
||||
@@ -727,8 +730,8 @@ int gtp_unsup_req(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
|
||||
}
|
||||
|
||||
/* Handle a Version Not Supported message */
|
||||
int gtp_unsup_ind(struct gsn_t *gsn, struct sockaddr_in *peer,
|
||||
void *pack, unsigned len)
|
||||
static int gtp_unsup_ind(struct gsn_t *gsn, struct sockaddr_in *peer,
|
||||
void *pack, unsigned len)
|
||||
{
|
||||
|
||||
if (gsn->cb_unsup_ind)
|
||||
@@ -820,6 +823,40 @@ int gtp_ran_info_relay_req(struct gsn_t *gsn, const struct sockaddr_in *peer,
|
||||
return gtp_notification(gsn, 1, &packet, length, peer, gsn->fd1c, 0);
|
||||
}
|
||||
|
||||
/* ***********************************************************
|
||||
* Conversion functions
|
||||
*************************************************************/
|
||||
|
||||
/* ***********************************************************
|
||||
* IP address conversion functions
|
||||
* There exist several types of address representations:
|
||||
* - eua: End User Address. (29.060, 7.7.27, message type 128)
|
||||
* Used for signalling address to mobile station. Supports IPv4
|
||||
* IPv6 x.25 etc. etc.
|
||||
* - gsna: GSN Address. (29.060, 7.7.32, message type 133): IP address
|
||||
* of GSN. If length is 4 it is IPv4. If length is 16 it is IPv6.
|
||||
* - in_addr: IPv4 address struct.
|
||||
* - sockaddr_in: Socket API representation of IP address and
|
||||
* port number.
|
||||
*************************************************************/
|
||||
|
||||
int gsna2in_addr(struct in_addr *dst, struct ul16_t *gsna)
|
||||
{
|
||||
memset(dst, 0, sizeof(struct in_addr));
|
||||
if (gsna->l != 4)
|
||||
return EOF; /* Return if not IPv4 */
|
||||
memcpy(dst, gsna->v, gsna->l);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int in_addr2gsna(struct ul16_t *gsna, struct in_addr *src)
|
||||
{
|
||||
memset(gsna, 0, sizeof(struct ul16_t));
|
||||
gsna->l = 4;
|
||||
memcpy(gsna->v, src, gsna->l);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ***********************************************************
|
||||
* Session management messages
|
||||
* Messages: create, update and delete PDP context
|
||||
@@ -988,22 +1025,9 @@ int gtp_create_context_req(struct gsn_t *gsn, struct pdp_t *pdp,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* API: Application response to context indication */
|
||||
int gtp_create_context_resp(struct gsn_t *gsn, struct pdp_t *pdp, int cause)
|
||||
{
|
||||
|
||||
/* Now send off a reply to the peer */
|
||||
gtp_create_pdp_resp(gsn, pdp->version, pdp, cause);
|
||||
|
||||
if (!gtp_cause_successful(cause))
|
||||
gtp_freepdp(gsn, pdp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Send Create PDP Context Response */
|
||||
int gtp_create_pdp_resp(struct gsn_t *gsn, int version, struct pdp_t *pdp,
|
||||
uint8_t cause)
|
||||
static int gtp_create_pdp_resp(struct gsn_t *gsn, int version, struct pdp_t *pdp,
|
||||
uint8_t cause)
|
||||
{
|
||||
union gtp_packet packet;
|
||||
unsigned int length =
|
||||
@@ -1064,10 +1088,23 @@ int gtp_create_pdp_resp(struct gsn_t *gsn, int version, struct pdp_t *pdp,
|
||||
pdp->fd, pdp->seq, pdp->tid);
|
||||
}
|
||||
|
||||
/* API: Application response to context indication */
|
||||
int gtp_create_context_resp(struct gsn_t *gsn, struct pdp_t *pdp, int cause)
|
||||
{
|
||||
|
||||
/* Now send off a reply to the peer */
|
||||
gtp_create_pdp_resp(gsn, pdp->version, pdp, cause);
|
||||
|
||||
if (!gtp_cause_successful(cause))
|
||||
gtp_freepdp(gsn, pdp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Handle Create PDP Context Request */
|
||||
int gtp_create_pdp_ind(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len)
|
||||
static int gtp_create_pdp_ind(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len)
|
||||
{
|
||||
struct pdp_t *pdp, *pdp_old;
|
||||
struct pdp_t pdp_buf;
|
||||
@@ -1390,8 +1427,8 @@ recover_ret:
|
||||
}
|
||||
|
||||
/* Handle Create PDP Context Response */
|
||||
int gtp_create_pdp_conf(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, void *pack, unsigned len)
|
||||
static int gtp_create_pdp_conf(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, void *pack, unsigned len)
|
||||
{
|
||||
struct pdp_t *pdp;
|
||||
union gtpie_member *ie[GTPIE_SIZE];
|
||||
@@ -2157,11 +2194,11 @@ int gtp_delete_context_req2(struct gsn_t *gsn, struct pdp_t *pdp, void *cbp,
|
||||
}
|
||||
|
||||
/* Send Delete PDP Context Response */
|
||||
int gtp_delete_pdp_resp(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len,
|
||||
struct pdp_t *pdp, struct pdp_t *linked_pdp,
|
||||
uint8_t cause, int teardown)
|
||||
static int gtp_delete_pdp_resp(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len,
|
||||
struct pdp_t *pdp, struct pdp_t *linked_pdp,
|
||||
uint8_t cause, int teardown)
|
||||
{
|
||||
union gtp_packet packet;
|
||||
unsigned int length =
|
||||
@@ -2202,9 +2239,9 @@ int gtp_delete_pdp_resp(struct gsn_t *gsn, int version,
|
||||
}
|
||||
|
||||
/* Handle Delete PDP Context Request */
|
||||
int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len)
|
||||
static int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len)
|
||||
{
|
||||
struct pdp_t *pdp = NULL;
|
||||
struct pdp_t *linked_pdp = NULL;
|
||||
@@ -2301,8 +2338,8 @@ int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
|
||||
}
|
||||
|
||||
/* Handle Delete PDP Context Response */
|
||||
int gtp_delete_pdp_conf(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, void *pack, unsigned len)
|
||||
static int gtp_delete_pdp_conf(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, void *pack, unsigned len)
|
||||
{
|
||||
union gtpie_member *ie[GTPIE_SIZE];
|
||||
uint8_t cause;
|
||||
@@ -3050,61 +3087,6 @@ int gtp_data_req(struct gsn_t *gsn, struct pdp_t *pdp, void *pack, unsigned len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ***********************************************************
|
||||
* Conversion functions
|
||||
*************************************************************/
|
||||
|
||||
/* ***********************************************************
|
||||
* IP address conversion functions
|
||||
* There exist several types of address representations:
|
||||
* - eua: End User Address. (29.060, 7.7.27, message type 128)
|
||||
* Used for signalling address to mobile station. Supports IPv4
|
||||
* IPv6 x.25 etc. etc.
|
||||
* - gsna: GSN Address. (29.060, 7.7.32, message type 133): IP address
|
||||
* of GSN. If length is 4 it is IPv4. If length is 16 it is IPv6.
|
||||
* - in_addr: IPv4 address struct.
|
||||
* - sockaddr_in: Socket API representation of IP address and
|
||||
* port number.
|
||||
*************************************************************/
|
||||
|
||||
int ipv42eua(struct ul66_t *eua, struct in_addr *src)
|
||||
{
|
||||
eua->v[0] = PDP_EUA_ORG_IETF;
|
||||
eua->v[1] = PDP_EUA_TYPE_v4;
|
||||
if (src) {
|
||||
eua->l = 6;
|
||||
memcpy(&eua->v[2], src, 4);
|
||||
} else {
|
||||
eua->l = 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int eua2ipv4(struct in_addr *dst, struct ul66_t *eua)
|
||||
{
|
||||
if ((eua->l != 6) || (eua->v[0] != PDP_EUA_ORG_IETF) || (eua->v[1] != PDP_EUA_TYPE_v4))
|
||||
return -1; /* Not IPv4 address */
|
||||
memcpy(dst, &eua->v[2], 4);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int gsna2in_addr(struct in_addr *dst, struct ul16_t *gsna)
|
||||
{
|
||||
memset(dst, 0, sizeof(struct in_addr));
|
||||
if (gsna->l != 4)
|
||||
return EOF; /* Return if not IPv4 */
|
||||
memcpy(dst, gsna->v, gsna->l);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int in_addr2gsna(struct ul16_t *gsna, struct in_addr *src)
|
||||
{
|
||||
memset(gsna, 0, sizeof(struct ul16_t));
|
||||
gsna->l = 4;
|
||||
memcpy(gsna->v, src, gsna->l);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* TS 29.060 has yet again a different encoding for IMSIs than
|
||||
* what we have in other places, so we cannot use the gsm48
|
||||
* decoding functions. Also, libgtp uses an uint64_t in
|
||||
|
||||
3
gtp/gtp_internal.h
Normal file
3
gtp/gtp_internal.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
uint64_t gtp_imsi_str2gtp(const char *str);
|
||||
@@ -37,7 +37,7 @@
|
||||
#include <netinet/in.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "gtpie.h"
|
||||
#include <osmocom/gtp/gtpie.h>
|
||||
|
||||
/*! Encode a TLV type Information Element.
|
||||
* \param[inout] p Pointer to output packet to which IE is appended
|
||||
|
||||
@@ -28,8 +28,10 @@
|
||||
#include <netinet/in.h>
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
#include "pdp.h"
|
||||
#include "gtp.h"
|
||||
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
|
||||
#include "lookupa.h"
|
||||
#include "queue.h"
|
||||
|
||||
|
||||
@@ -27,8 +27,10 @@
|
||||
#include <sys/time.h>
|
||||
#include <netinet/in.h>
|
||||
#include <string.h>
|
||||
#include "pdp.h"
|
||||
#include "gtp.h"
|
||||
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
|
||||
#include "queue.h"
|
||||
|
||||
/*! \brief dump a queue_t to stdout */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#include <osmocom/core/linuxlist.h>
|
||||
|
||||
#include "gtp.h"
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
|
||||
#define QUEUE_DEBUG 0 /* Print debug information */
|
||||
|
||||
|
||||
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 = \
|
||||
gtp \
|
||||
$(NULL)
|
||||
8
include/osmocom/gtp/Makefile.am
Normal file
8
include/osmocom/gtp/Makefile.am
Normal file
@@ -0,0 +1,8 @@
|
||||
libgtp_HEADERS = \
|
||||
gsn.h \
|
||||
gtp.h \
|
||||
gtpie.h \
|
||||
pdp.h \
|
||||
$(NULL)
|
||||
|
||||
libgtpdir = $(includedir)/osmocom/gtp
|
||||
@@ -175,7 +175,4 @@ extern int gtp_fd(struct gsn_t *gsn);
|
||||
extern int gtp_retrans(struct gsn_t *gsn) OSMO_DEPRECATED("This API is a no-op, libgtp already does the job internally");
|
||||
extern int gtp_retranstimeout(struct gsn_t *gsn, struct timeval *timeout) OSMO_DEPRECATED("This API is a no-op and will return a 1 day timeout");
|
||||
|
||||
/* Internal APIs: */
|
||||
void gtp_queue_timer_start(struct gsn_t *gsn);
|
||||
|
||||
#endif /* !_GSN_H */
|
||||
@@ -265,61 +265,12 @@ extern int gtp_ran_info_relay_req(struct gsn_t *gsn, const struct sockaddr_in *p
|
||||
extern int gtp_decaps0(struct gsn_t *gsn);
|
||||
extern int gtp_decaps1c(struct gsn_t *gsn);
|
||||
extern int gtp_decaps1u(struct gsn_t *gsn);
|
||||
/* Internal functions (not part of the API) */
|
||||
|
||||
extern int gtp_echo_req(struct gsn_t *gsn, int version, void *cbp,
|
||||
struct in_addr *inetaddrs);
|
||||
extern int gtp_echo_resp(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len);
|
||||
extern int gtp_echo_ind(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len);
|
||||
extern int gtp_echo_conf(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, void *pack, unsigned len);
|
||||
|
||||
extern int gtp_unsup_req(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer,
|
||||
int fd, void *pack, unsigned len);
|
||||
extern int gtp_unsup_ind(struct gsn_t *gsn, struct sockaddr_in *peer,
|
||||
void *pack, unsigned len);
|
||||
|
||||
extern int gtp_create_pdp_resp(struct gsn_t *gsn, int version,
|
||||
struct pdp_t *pdp, uint8_t cause);
|
||||
|
||||
extern int gtp_create_pdp_ind(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len);
|
||||
|
||||
extern int gtp_create_pdp_conf(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer,
|
||||
void *pack, unsigned len);
|
||||
|
||||
extern int gtp_update_pdp_req(struct gsn_t *gsn, int version, void *cbp,
|
||||
struct in_addr *inetaddr, struct pdp_t *pdp);
|
||||
|
||||
extern int gtp_delete_pdp_req(struct gsn_t *gsn, int version, void *cbp,
|
||||
struct pdp_t *pdp);
|
||||
|
||||
extern int gtp_delete_pdp_resp(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len,
|
||||
struct pdp_t *pdp, struct pdp_t *linked_pdp,
|
||||
uint8_t cause, int teardown);
|
||||
|
||||
extern int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer, int fd,
|
||||
void *pack, unsigned len);
|
||||
|
||||
extern int gtp_delete_pdp_conf(struct gsn_t *gsn, int version,
|
||||
struct sockaddr_in *peer,
|
||||
void *pack, unsigned len);
|
||||
|
||||
extern int ipv42eua(struct ul66_t *eua, struct in_addr *src);
|
||||
extern int eua2ipv4(struct in_addr *dst, struct ul66_t *eua);
|
||||
extern int gsna2in_addr(struct in_addr *dst, struct ul16_t *gsna);
|
||||
extern int in_addr2gsna(struct ul16_t *gsna, struct in_addr *src);
|
||||
|
||||
extern const char *imsi_gtp2str(const uint64_t *imsi);
|
||||
extern uint64_t gtp_imsi_str2gtp(const char *str);
|
||||
|
||||
#endif /* !_GTP_H */
|
||||
@@ -19,6 +19,7 @@ AM_CFLAGS = \
|
||||
-fno-builtin \
|
||||
-Wall \
|
||||
-DSBINDIR='"$(sbindir)"' \
|
||||
-I$(top_srcdir)/include \
|
||||
$(LIBOSMOCORE_CFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
|
||||
@@ -23,12 +23,13 @@
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
|
||||
#include "../lib/tun.h"
|
||||
#include "../lib/syserr.h"
|
||||
#include "../lib/util.h"
|
||||
#include "../lib/ippool.h"
|
||||
#include "../gtp/pdp.h"
|
||||
#include "../gtp/gtp.h"
|
||||
|
||||
#include "gtp-kernel.h"
|
||||
|
||||
|
||||
@@ -21,10 +21,11 @@
|
||||
|
||||
#include <osmocom/core/msgb.h>
|
||||
#include <osmocom/core/utils.h>
|
||||
#include "checksum.h"
|
||||
|
||||
#include "../gtp/gtp.h"
|
||||
#include "../gtp/pdp.h"
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
|
||||
#include "checksum.h"
|
||||
#include "ippool.h"
|
||||
#include "syserr.h"
|
||||
#include "icmpv6.h"
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
#include <osmocom/core/msgb.h>
|
||||
#include <osmocom/core/endian.h>
|
||||
|
||||
#include "../gtp/gtp.h"
|
||||
#include "../gtp/pdp.h"
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
|
||||
#define ICMPv6_OPT_TYPE_PREFIX_INFO 0x03
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
*/
|
||||
|
||||
#include "../lib/in46_addr.h"
|
||||
#include "../gtp/pdp.h"
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
|
||||
#include <osmocom/core/utils.h>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include <stdint.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include "../gtp/pdp.h"
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
|
||||
/* a simple wrapper around an in6_addr to also contain the length of the address,
|
||||
* thereby implicitly indicating the address family of the address */
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#define _IPPOOL_H
|
||||
|
||||
#include "../lib/in46_addr.h"
|
||||
#include "../gtp/gtp.h"
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
|
||||
/* Assuming that the address space is fragmented we need a hash table
|
||||
in order to return the addresses.
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../gtp/pdp.h"
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
|
||||
#include "ippool.h"
|
||||
#include "in46_addr.h"
|
||||
|
||||
@@ -7,5 +7,8 @@ Name: OsmoGGSN GTP Library
|
||||
Description: C Utility Library
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -lgtp
|
||||
Cflags: -I${includedir}/
|
||||
|
||||
# Add two include paths to support:
|
||||
# * #include <osmocom/gtp/gtp.h> (like other Osmocom headers)
|
||||
# * #include <gtp.h> (legacy compat)
|
||||
Cflags: -I${includedir}/osmocom/gtp/ -I${includedir}/
|
||||
|
||||
@@ -7,6 +7,7 @@ AM_CFLAGS = \
|
||||
-fno-builtin \
|
||||
-Wall \
|
||||
-DSBINDIR='"$(sbindir)"' \
|
||||
-I$(top_srcdir)/include \
|
||||
$(LIBOSMOCORE_CFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
|
||||
@@ -54,13 +54,15 @@
|
||||
#endif // HAVE_IN6_ADDR_GEN_MODE_NONE
|
||||
#endif
|
||||
|
||||
#include <osmocom/gtp/pdp.h>
|
||||
#include <osmocom/gtp/gtp.h>
|
||||
|
||||
#include "../lib/tun.h"
|
||||
#include "../lib/ippool.h"
|
||||
#include "../lib/syserr.h"
|
||||
#include "../lib/netns.h"
|
||||
#include "../lib/icmpv6.h"
|
||||
#include "../gtp/pdp.h"
|
||||
#include "../gtp/gtp.h"
|
||||
#include "../gtp/gtp_internal.h"
|
||||
#include "cmdline.h"
|
||||
|
||||
#define IPADDRLEN 256 /* Character length of addresses */
|
||||
|
||||
@@ -10,8 +10,9 @@
|
||||
#include <osmocom/core/msgb.h>
|
||||
#include <osmocom/core/bits.h>
|
||||
|
||||
#include <osmocom/gtp/gtpie.h>
|
||||
|
||||
#include "../../lib/syserr.h"
|
||||
#include "../../gtp/gtpie.h"
|
||||
|
||||
static const uint8_t in[] = { 1,2,3,4,5,6 };
|
||||
static uint8_t buf[256];
|
||||
|
||||
Reference in New Issue
Block a user