mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-10-30 19:43:52 +00:00
Compare commits
276 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d761d355f9 | ||
|
|
8d064dfd24 | ||
|
|
7181cc1f02 | ||
|
|
60f8e31a2f | ||
|
|
086c3f3c67 | ||
|
|
d0b470d1a9 | ||
|
|
77f76d0be5 | ||
|
|
892dec0be9 | ||
|
|
c430d19112 | ||
|
|
7b8e419d92 | ||
|
|
4f7613eeb1 | ||
|
|
01f039538e | ||
|
|
d2e3a52230 | ||
|
|
2924825bc6 | ||
|
|
bd86f94a09 | ||
|
|
1083533db4 | ||
|
|
0793d2f5d5 | ||
|
|
a8c6a9c37a | ||
|
|
2da99a2946 | ||
|
|
c3eed40f00 | ||
|
|
515e341ff6 | ||
|
|
8bda7a7766 | ||
|
|
df5d219f39 | ||
|
|
5656fbf49d | ||
|
|
19d640e806 | ||
|
|
207ab51270 | ||
|
|
c3cc654add | ||
|
|
b911b879d8 | ||
|
|
af07f66ca3 | ||
|
|
dd0c522cd4 | ||
|
|
37d11c80da | ||
|
|
1355d7e4f7 | ||
|
|
fdd603c4c8 | ||
|
|
1fc6999a77 | ||
|
|
220f487238 | ||
|
|
edc00f4ea7 | ||
|
|
a49e32a1ab | ||
|
|
dd4ede34ad | ||
|
|
3aa815755d | ||
|
|
3261dc7540 | ||
|
|
771b26a043 | ||
|
|
36a81129ec | ||
|
|
a390d0ba52 | ||
|
|
b759473d10 | ||
|
|
c3cfae2cf8 | ||
|
|
3cbfb8a53c | ||
|
|
275ac97036 | ||
|
|
abe8c897fd | ||
|
|
e9d645b3b3 | ||
|
|
7f0966c13d | ||
|
|
55295f7b07 | ||
|
|
9d25d7a2e6 | ||
|
|
490cbaa89e | ||
|
|
eb0bde09bb | ||
|
|
3b12e1b011 | ||
|
|
2138779559 | ||
|
|
12943ea0c1 | ||
|
|
6efb43a210 | ||
|
|
03cc48474c | ||
|
|
5672563f7e | ||
|
|
106743c66b | ||
|
|
8890dfa634 | ||
|
|
10f32dbfbf | ||
|
|
e35eeae8e0 | ||
|
|
abbb6b9088 | ||
|
|
3f35a3708a | ||
|
|
33eafe050b | ||
|
|
1d1b98f4a4 | ||
|
|
a0ac30faa5 | ||
|
|
49e3d5a9c9 | ||
|
|
3338135ead | ||
|
|
5dbfc78aff | ||
|
|
7bc5552512 | ||
|
|
a330b864e5 | ||
|
|
7df419b434 | ||
|
|
7cedfd753b | ||
|
|
23b8e29835 | ||
|
|
1c3287f1db | ||
|
|
922ae9a5bf | ||
|
|
189d6bf4d4 | ||
|
|
c8f37cb4d6 | ||
|
|
c0dcc3c60c | ||
|
|
230e4fc270 | ||
|
|
ead2f60f73 | ||
|
|
f8bfbe8b14 | ||
|
|
ffd75e420c | ||
|
|
01d24a3281 | ||
|
|
0be3ce66c0 | ||
|
|
fcd0655176 | ||
|
|
48454983c4 | ||
|
|
9a3543a8d4 | ||
|
|
465446b4b4 | ||
|
|
b597b4fc9d | ||
|
|
d20910c655 | ||
|
|
677f4ad968 | ||
|
|
7c20c9de5a | ||
|
|
839fc954d0 | ||
|
|
d164b05655 | ||
|
|
a896f9cdeb | ||
|
|
1b0cf6fa1c | ||
|
|
9bf7c53779 | ||
|
|
6be0fdb5e4 | ||
|
|
641c4d47b9 | ||
|
|
c1b9fa158e | ||
|
|
6a421f1b6f | ||
|
|
f1889d8640 | ||
|
|
2982e42d93 | ||
|
|
ddf1f9d7d5 | ||
|
|
653c4ff354 | ||
|
|
4efce88a62 | ||
|
|
e7d27aeae1 | ||
|
|
e6f172dd57 | ||
|
|
b969455941 | ||
|
|
54dd4b3f72 | ||
|
|
dbd88e5167 | ||
|
|
87203f2a37 | ||
|
|
1cb1e38dbc | ||
|
|
e726d4fad2 | ||
|
|
c341388b30 | ||
|
|
7bf4ce3aed | ||
|
|
f4c0e37352 | ||
|
|
06da85ed3a | ||
|
|
1dc6be6a82 | ||
|
|
8348abb372 | ||
|
|
d8d7b4b188 | ||
|
|
31c4305225 | ||
|
|
c7a228aceb | ||
|
|
e472b4e39a | ||
|
|
8970c497bc | ||
|
|
1e0b9f872c | ||
|
|
8863f7ae64 | ||
|
|
1ae2d5ebf4 | ||
|
|
5852a78d2e | ||
|
|
59e2d518fd | ||
|
|
062b0f0eee | ||
|
|
71c619ee05 | ||
|
|
e3b5de2285 | ||
|
|
f96e46fcce | ||
|
|
88d4dae645 | ||
|
|
8042539444 | ||
|
|
6ba4406c47 | ||
|
|
1e940d615a | ||
|
|
fde78ad412 | ||
|
|
3d9b656a1c | ||
|
|
2152f8523e | ||
|
|
c5ecebb711 | ||
|
|
020e89bce9 | ||
|
|
6779354245 | ||
|
|
87bd9be0b0 | ||
|
|
f83ec56212 | ||
|
|
1c8d67d7f5 | ||
|
|
9d4f1d57f3 | ||
|
|
d95ab1e9ad | ||
|
|
a1fa2f4bc3 | ||
|
|
c221b7ad01 | ||
|
|
f19acc9a35 | ||
|
|
53f2bd0443 | ||
|
|
0c5a16c253 | ||
|
|
32330aa9be | ||
|
|
beabe15526 | ||
|
|
8ec0365ae9 | ||
|
|
725f924316 | ||
|
|
3a8e723a0d | ||
|
|
97df691307 | ||
|
|
d049a66b79 | ||
|
|
48dd6c3e73 | ||
|
|
7eaeb5a416 | ||
|
|
2fb853fb35 | ||
|
|
bf0ab74b23 | ||
|
|
e9920f24b1 | ||
|
|
b6f6c23fa1 | ||
|
|
73a93bd4ef | ||
|
|
28295b939c | ||
|
|
6542f52dc1 | ||
|
|
dd9f6cd377 | ||
|
|
4b60d0782c | ||
|
|
58cfd25c2f | ||
|
|
3d24d2947e | ||
|
|
4d254dd490 | ||
|
|
c7a58cb239 | ||
|
|
8f282f23c2 | ||
|
|
52c43258e5 | ||
|
|
0c99bb469f | ||
|
|
ad0161db6c | ||
|
|
3671968824 | ||
|
|
4a1e442daa | ||
|
|
9c10f4a9dc | ||
|
|
3d80064c59 | ||
|
|
52bdd62eb3 | ||
|
|
d0d62499c3 | ||
|
|
4a6c56bbfb | ||
|
|
dea26c68e4 | ||
|
|
4a6d8d95a4 | ||
|
|
c5f60fb64e | ||
|
|
02da674ed4 | ||
|
|
569dc7b6d8 | ||
|
|
ff4cb11e17 | ||
|
|
03a3cc7ba5 | ||
|
|
e802f1a54f | ||
|
|
1f9a576cdc | ||
|
|
bc822624e4 | ||
|
|
b31d2c62a6 | ||
|
|
3c8d627a08 | ||
|
|
868e442bd0 | ||
|
|
b343807cf8 | ||
|
|
be89bc7278 | ||
|
|
14af83239a | ||
|
|
ff6900943a | ||
|
|
f49519ef46 | ||
|
|
4d62a999f9 | ||
|
|
92d6dcbbaf | ||
|
|
d11e8f358f | ||
|
|
f694033bc6 | ||
|
|
06e14c6b72 | ||
|
|
d7d926620c | ||
|
|
ac64f87708 | ||
|
|
a5d7e61308 | ||
|
|
4bb662b473 | ||
|
|
d0e4764ecd | ||
|
|
20515896b3 | ||
|
|
f226bd5236 | ||
|
|
b65195fa16 | ||
|
|
0854d6b156 | ||
|
|
fad3309556 | ||
|
|
d5429bb79b | ||
|
|
3fb8a7ba87 | ||
|
|
bbb17f0148 | ||
|
|
ca52991d6e | ||
|
|
8008ac0175 | ||
|
|
4755091a8a | ||
|
|
9282db8be8 | ||
|
|
d36641a832 | ||
|
|
4331f25e42 | ||
|
|
b68ad96406 | ||
|
|
6571561192 | ||
|
|
1016fb5c16 | ||
|
|
48c23b6416 | ||
|
|
9a9d0560b2 | ||
|
|
c3bd466259 | ||
|
|
e44dbcf30a | ||
|
|
d4ee5923c9 | ||
|
|
dc6a7cd406 | ||
|
|
8fd871143f | ||
|
|
1a232bd900 | ||
|
|
2e7e4b93a0 | ||
|
|
30f532b9bd | ||
|
|
6424b5633c | ||
|
|
075fc11fce | ||
|
|
717c7b9692 | ||
|
|
10d64d5d66 | ||
|
|
815124952b | ||
|
|
a1756f320a | ||
|
|
069e53fbb5 | ||
|
|
0e5a7c409c | ||
|
|
2d503d03f4 | ||
|
|
29dfc91b93 | ||
|
|
21b48e96c3 | ||
|
|
3728471963 | ||
|
|
e7542288bb | ||
|
|
48a0c6a940 | ||
|
|
b6cd7934de | ||
|
|
9f52b06975 | ||
|
|
f817814c68 | ||
|
|
7b423edb56 | ||
|
|
a183a6ed20 | ||
|
|
0bc77b1283 | ||
|
|
ffebe6e938 | ||
|
|
39a7c75814 | ||
|
|
4c30529a84 | ||
|
|
3eb991ead2 | ||
|
|
079d4e0fe9 | ||
|
|
9e95604394 | ||
|
|
0c0d70582c | ||
|
|
85929a7be7 | ||
|
|
68bd8e434a | ||
|
|
220dc0c7f6 |
82
.gitignore
vendored
82
.gitignore
vendored
@@ -1 +1,83 @@
|
|||||||
debian/*.log
|
debian/*.log
|
||||||
|
*.o
|
||||||
|
*.lo
|
||||||
|
*.a
|
||||||
|
.deps
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
bscconfig.h
|
||||||
|
bscconfig.h.in
|
||||||
|
openbsc.pc
|
||||||
|
src/osmo-nitb/osmo-nitb
|
||||||
|
src/osmo-bsc_mgcp/osmo-bsc_mgcp
|
||||||
|
src/osmo-bsc/osmo-bsc
|
||||||
|
src/utils/meas_vis
|
||||||
|
src/utils/meas_json
|
||||||
|
src/utils/osmo-meas-pcap2db
|
||||||
|
src/utils/osmo-meas-udp2db
|
||||||
|
src/utils/smpp_mirror
|
||||||
|
*.*~
|
||||||
|
*.sw?
|
||||||
|
.libs
|
||||||
|
*.pyc
|
||||||
|
*.gcda
|
||||||
|
*.gcno
|
||||||
|
|
||||||
|
#configure
|
||||||
|
aclocal.m4
|
||||||
|
autom4te.cache/
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
config.guess
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
compile
|
||||||
|
depcomp
|
||||||
|
install-sh
|
||||||
|
missing
|
||||||
|
stamp-h1
|
||||||
|
libtool
|
||||||
|
ltmain.sh
|
||||||
|
|
||||||
|
# git-version-gen magic
|
||||||
|
.tarball-version
|
||||||
|
.version
|
||||||
|
|
||||||
|
|
||||||
|
# apps and app data
|
||||||
|
hlr.sqlite3
|
||||||
|
src/utils/bs11_config
|
||||||
|
src/ipaccess/ipaccess-config
|
||||||
|
src/ipaccess/abisip-find
|
||||||
|
src/ipaccess/ipaccess-firmware
|
||||||
|
src/ipaccess/ipaccess-proxy
|
||||||
|
src/utils/isdnsync
|
||||||
|
src/nat/bsc_nat
|
||||||
|
src/gprs/osmo-sgsn
|
||||||
|
src/gprs/osmo-gbproxy
|
||||||
|
src/gprs/osmo-gtphub
|
||||||
|
src/osmo-bsc_nat/osmo-bsc_nat
|
||||||
|
src/libcommon/gsup_test_client
|
||||||
|
src/osmo-msc/osmo-msc
|
||||||
|
|
||||||
|
#tests
|
||||||
|
tests/testsuite.dir
|
||||||
|
tests/*/*_test
|
||||||
|
# ignore compiled binaries like msc_vlr_test_foo; do not ignore
|
||||||
|
# msc_vlr_test_foo.{c,ok,err}, but do still ignore the corresponding .o object
|
||||||
|
# files:
|
||||||
|
tests/msc_vlr/msc_vlr_test_*
|
||||||
|
!tests/msc_vlr/msc_vlr_test_*.*
|
||||||
|
tests/msc_vlr/msc_vlr_test_*.o
|
||||||
|
|
||||||
|
|
||||||
|
tests/atconfig
|
||||||
|
tests/atlocal
|
||||||
|
tests/package.m4
|
||||||
|
tests/testsuite
|
||||||
|
tests/testsuite.log
|
||||||
|
|
||||||
|
gsn_restart
|
||||||
|
src/openbsc.cfg*
|
||||||
|
writtenconfig/
|
||||||
|
gtphub_restart_count
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
[gerrit]
|
[gerrit]
|
||||||
host=gerrit.osmocom.org
|
host=gerrit.osmocom.org
|
||||||
project=openbsc
|
project=osmo-mgw
|
||||||
|
|||||||
@@ -13,13 +13,20 @@ SUBDIRS = \
|
|||||||
include \
|
include \
|
||||||
src \
|
src \
|
||||||
tests \
|
tests \
|
||||||
|
contrib \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
pkgconfigdir = $(libdir)/pkgconfig
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
pkgconfig_DATA = openbsc.pc
|
pkgconfig_DATA = \
|
||||||
|
libosmo-legacy-mgcp.pc \
|
||||||
|
libosmo-mgcp-client.pc \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
BUILT_SOURCES = $(top_srcdir)/.version
|
BUILT_SOURCES = $(top_srcdir)/.version
|
||||||
EXTRA_DIST = git-version-gen osmoappdesc.py .version
|
EXTRA_DIST = git-version-gen osmoappdesc.py .version
|
||||||
|
|
||||||
|
@RELMAKE@
|
||||||
|
|
||||||
$(top_srcdir)/.version:
|
$(top_srcdir)/.version:
|
||||||
echo $(VERSION) > $@-t && mv $@-t $@
|
echo $(VERSION) > $@-t && mv $@-t $@
|
||||||
dist-hook:
|
dist-hook:
|
||||||
28
README
Normal file
28
README
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
About OsmoMGW
|
||||||
|
=============
|
||||||
|
|
||||||
|
OsmoMGW originated from the OpenBSC project, which started as a minimalistic
|
||||||
|
all-in-one implementation of the GSM Network. In 2017, OpenBSC had reached
|
||||||
|
maturity and diversity (including M3UA SIGTRAN and 3G support in the form of
|
||||||
|
IuCS and IuPS interfaces) that naturally lead to a separation of the all-in-one
|
||||||
|
approach to fully independent separate programs as in typical GSM networks.
|
||||||
|
|
||||||
|
OsmoMGW was one of the parts split off from the old openbsc.git. It originated
|
||||||
|
as a solution to merely navigate RTP streams through a NAT, but has since
|
||||||
|
matured to a Media Gateway implementation that is capable of streaming RTP for
|
||||||
|
2G (AoIP) and 3G (IuCS) GSM networks as well as (still not implemented at time
|
||||||
|
of writing) transcoding between TRAU, various RTP payloads and IuUP.
|
||||||
|
|
||||||
|
The OsmoMGW program exposes an MGCP interface towards clients like OsmoMSC and
|
||||||
|
OsmoBSC, and receives and sends RTP streams as configured via MGCP.
|
||||||
|
|
||||||
|
The libosmo-mgcp-client library exposes utilities used by e.g. OsmoMSC (found
|
||||||
|
in osmo-msc.git) to instruct OsmoMGW via its MGCP service.
|
||||||
|
|
||||||
|
The libosmo-mgcp library exposes MGCP server utilities used by e.g. OsmoBSC-NAT
|
||||||
|
(found in osmo-bsc.git) to navigate RTP streams through a NAT.
|
||||||
|
(At time of writing, this is still called libosmo-legacy-mgcp.)
|
||||||
|
|
||||||
|
Find OsmoMGW issue tracker and wiki online at
|
||||||
|
https://osmocom.org/projects/osmo-mgw
|
||||||
|
https://osmocom.org/projects/osmo-mgw/wiki
|
||||||
26
TODO-RELEASE
Normal file
26
TODO-RELEASE
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# When cleaning up this file upon a release:
|
||||||
|
#
|
||||||
|
# - Note that the release version number is entirely unrelated to the API
|
||||||
|
# versions. A release version 5.2.3 may happily have an API version of 42:7:5.
|
||||||
|
#
|
||||||
|
# - Bump API version in src/lib*/Makefile.am files according to chapter
|
||||||
|
# "Library interface versions" of the libtool documentation.
|
||||||
|
# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||||||
|
#
|
||||||
|
# - Iff the 'current' API version has changed, rename debian/lib*.install
|
||||||
|
#
|
||||||
|
# API version bumping for the impatient:
|
||||||
|
# LIBVERSION=c:r:a (current:revision_of_current:backwards_compat_age)
|
||||||
|
# 5:2:4 means that
|
||||||
|
# - this implements version 5 of the API;
|
||||||
|
# - this is the 2nd (compatible) revision of API version 5;
|
||||||
|
# - this is backwards compatible to all APIs since 4 versions ago,
|
||||||
|
# i.e. callers that need API versions from 1 to 5 can use this.
|
||||||
|
#
|
||||||
|
# Bumping API versions recipe:
|
||||||
|
# If the library source code has changed at all since the last update, r++;
|
||||||
|
# If any interfaces have been added, removed, or changed since the last update, c++, r=0;
|
||||||
|
# If any interfaces have been added since the last public release, a++;
|
||||||
|
# If any interfaces have been removed or changed since the last public release, a=0.
|
||||||
|
#
|
||||||
|
#library what description / commit summary line
|
||||||
175
configure.ac
Normal file
175
configure.ac
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
dnl Process this file with autoconf to produce a configure script
|
||||||
|
AC_INIT([osmo-mgw],
|
||||||
|
m4_esyscmd([./git-version-gen .tarball-version]),
|
||||||
|
[openbsc@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)
|
||||||
|
|
||||||
|
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 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 check for AX_CHECK_COMPILE_FLAG
|
||||||
|
m4_ifdef([AX_CHECK_COMPILE_FLAG], [], [
|
||||||
|
AC_MSG_ERROR([Please install autoconf-archive; re-run 'autoreconf -fi' for it to take effect.])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl checks for libraries
|
||||||
|
AC_SEARCH_LIBS([dlopen], [dl dld], [LIBRARY_DL="$LIBS";LIBS=""])
|
||||||
|
AC_SUBST(LIBRARY_DL)
|
||||||
|
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 0.11.0)
|
||||||
|
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 0.11.0)
|
||||||
|
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 0.11.0)
|
||||||
|
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.2.0)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# Enable/disable transcoding within osmo-bsc_mgcp?
|
||||||
|
AC_ARG_ENABLE([mgcp-transcoding], [AS_HELP_STRING([--enable-mgcp-transcoding], [Build the MGCP gateway with internal transcoding enabled.])],
|
||||||
|
[osmo_ac_mgcp_transcoding="$enableval"],[osmo_ac_mgcp_transcoding="no"])
|
||||||
|
AC_ARG_WITH([g729], [AS_HELP_STRING([--with-g729], [Enable G.729 encoding/decoding.])], [osmo_ac_with_g729="$withval"],[osmo_ac_with_g729="no"])
|
||||||
|
|
||||||
|
if test "$osmo_ac_mgcp_transcoding" = "yes" ; then
|
||||||
|
AC_SEARCH_LIBS([gsm_create], [gsm], [LIBRARY_GSM="$LIBS";LIBS=""], [AC_MSG_ERROR([--enable-mgcp-transcoding: cannot find usable libgsm])])
|
||||||
|
AC_SUBST(LIBRARY_GSM)
|
||||||
|
if test "$osmo_ac_with_g729" = "yes" ; then
|
||||||
|
PKG_CHECK_MODULES(LIBBCG729, libbcg729 >= 0.1, [AC_DEFINE([HAVE_BCG729], [1], [Use bgc729 decoder/encoder])])
|
||||||
|
fi
|
||||||
|
AC_DEFINE(BUILD_MGCP_TRANSCODING, 1, [Define if we want to build the MGCP gateway with transcoding support])
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(BUILD_MGCP_TRANSCODING, test "x$osmo_ac_mgcp_transcoding" = "xyes")
|
||||||
|
AC_SUBST(osmo_ac_mgcp_transcoding)
|
||||||
|
|
||||||
|
dnl Checks for typedefs, structures and compiler characteristics
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
AX_CHECK_COMPILE_FLAG([-Werror=implicit], [CFLAGS="$CFLAGS -Werror=implicit"])
|
||||||
|
AX_CHECK_COMPILE_FLAG([-Werror=maybe-uninitialized], [CFLAGS="$CFLAGS -Werror=maybe-uninitialized"])
|
||||||
|
AX_CHECK_COMPILE_FLAG([-Werror=memset-transposed-args], [CFLAGS="$CFLAGS -Werror=memset-transposed-args"])
|
||||||
|
AX_CHECK_COMPILE_FLAG([-Werror=null-dereference], [CFLAGS="$CFLAGS -Werror=null-dereference"])
|
||||||
|
AX_CHECK_COMPILE_FLAG([-Werror=sizeof-array-argument], [CFLAGS="$CFLAGS -Werror=sizeof-array-argument"])
|
||||||
|
AX_CHECK_COMPILE_FLAG([-Werror=sizeof-pointer-memaccess], [CFLAGS="$CFLAGS -Werror=sizeof-pointer-memaccess"])
|
||||||
|
|
||||||
|
# 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([vty_tests],
|
||||||
|
AC_HELP_STRING([--enable-vty-tests],
|
||||||
|
[Include the VTY/CTRL tests in make check (deprecated)
|
||||||
|
[default=no]]),
|
||||||
|
[enable_ext_tests="$enableval"],[enable_ext_tests="no"])
|
||||||
|
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
|
||||||
|
AM_PATH_PYTHON
|
||||||
|
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")
|
||||||
|
|
||||||
|
AC_MSG_RESULT([CFLAGS="$CFLAGS"])
|
||||||
|
AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
|
||||||
|
|
||||||
|
dnl Generate the output
|
||||||
|
AM_CONFIG_HEADER(bscconfig.h)
|
||||||
|
|
||||||
|
AC_OUTPUT(
|
||||||
|
libosmo-legacy-mgcp.pc
|
||||||
|
libosmo-mgcp-client.pc
|
||||||
|
include/Makefile
|
||||||
|
include/osmocom/Makefile
|
||||||
|
include/osmocom/legacy_mgcp/Makefile
|
||||||
|
include/osmocom/mgcp_client/Makefile
|
||||||
|
include/osmocom/mgcp/Makefile
|
||||||
|
src/Makefile
|
||||||
|
src/libosmo-legacy-mgcp/Makefile
|
||||||
|
src/libosmo-mgcp-client/Makefile
|
||||||
|
src/libosmo-mgcp/Makefile
|
||||||
|
src/osmo-bsc_mgcp/Makefile
|
||||||
|
src/osmo-mgw/Makefile
|
||||||
|
tests/Makefile
|
||||||
|
tests/atlocal
|
||||||
|
tests/legacy_mgcp/Makefile
|
||||||
|
tests/mgcp_client/Makefile
|
||||||
|
tests/mgcp/Makefile
|
||||||
|
doc/Makefile
|
||||||
|
doc/examples/Makefile
|
||||||
|
contrib/Makefile
|
||||||
|
Makefile)
|
||||||
1
contrib/Makefile.am
Normal file
1
contrib/Makefile.am
Normal file
@@ -0,0 +1 @@
|
|||||||
|
EXTRA_DIST = ipa.py
|
||||||
@@ -1,4 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# jenkins build helper script for openbsc. This is how we build on jenkins.osmocom.org
|
||||||
|
|
||||||
|
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
|
set -ex
|
||||||
|
|
||||||
@@ -7,46 +14,36 @@ deps="$base/deps"
|
|||||||
inst="$deps/install"
|
inst="$deps/install"
|
||||||
export deps inst
|
export deps inst
|
||||||
|
|
||||||
mkdir "$deps" || true
|
osmo-clean-workspace.sh
|
||||||
rm -rf "$inst"
|
|
||||||
|
|
||||||
|
mkdir "$deps" || true
|
||||||
osmo-build-dep.sh libosmocore "" ac_cv_path_DOXYGEN=false
|
osmo-build-dep.sh libosmocore "" ac_cv_path_DOXYGEN=false
|
||||||
|
|
||||||
"$deps"/libosmocore/contrib/verify_value_string_arrays_are_terminated.py $(find . -name "*.[hc]")
|
verify_value_string_arrays_are_terminated.py $(find . -name "*.[hc]")
|
||||||
|
|
||||||
export PKG_CONFIG_PATH="$inst/lib/pkgconfig:$PKG_CONFIG_PATH"
|
export PKG_CONFIG_PATH="$inst/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||||
export LD_LIBRARY_PATH="$inst/lib"
|
export LD_LIBRARY_PATH="$inst/lib"
|
||||||
|
|
||||||
if [ "x$IU" = "x--enable-iu" ]; then
|
|
||||||
sccp_branch="old_sua"
|
|
||||||
fi
|
|
||||||
|
|
||||||
osmo-build-dep.sh libosmo-abis
|
osmo-build-dep.sh libosmo-abis
|
||||||
osmo-build-dep.sh libosmo-netif
|
osmo-build-dep.sh libosmo-netif
|
||||||
osmo-build-dep.sh libosmo-sccp $sccp_branch
|
|
||||||
PARALLEL_MAKE="" osmo-build-dep.sh libsmpp34
|
|
||||||
osmo-build-dep.sh openggsn
|
|
||||||
|
|
||||||
if [ "x$IU" = "x--enable-iu" ]; then
|
|
||||||
osmo-build-dep.sh libasn1c
|
|
||||||
#osmo-build-dep.sh asn1c aper-prefix # only needed for make regen in osmo-iuh
|
|
||||||
osmo-build-dep.sh osmo-iuh
|
|
||||||
fi
|
|
||||||
|
|
||||||
set +x
|
set +x
|
||||||
echo
|
echo
|
||||||
echo
|
echo
|
||||||
echo
|
echo
|
||||||
echo " =============================== openbsc ==============================="
|
echo " =============================== osmo-mgw ==============================="
|
||||||
echo
|
echo
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
cd "$base"
|
cd "$base"
|
||||||
cd openbsc
|
|
||||||
autoreconf --install --force
|
autoreconf --install --force
|
||||||
./configure --enable-osmo-bsc --enable-nat $SMPP $MGCP $IU --enable-vty-tests --enable-external-tests
|
./configure $MGCP --enable-vty-tests --enable-external-tests --enable-werror
|
||||||
$MAKE $PARALLEL_MAKE
|
$MAKE $PARALLEL_MAKE
|
||||||
LD_LIBRARY_PATH="$inst/lib" $MAKE check \
|
LD_LIBRARY_PATH="$inst/lib" $MAKE check \
|
||||||
|| cat-testlogs.sh
|
|| cat-testlogs.sh
|
||||||
LD_LIBRARY_PATH="$inst/lib" $MAKE distcheck \
|
LD_LIBRARY_PATH="$inst/lib" \
|
||||||
|
DISTCHECK_CONFIGURE_FLAGS="$MGCP --enable-vty-tests --enable-external-tests" \
|
||||||
|
$MAKE distcheck \
|
||||||
|| cat-testlogs.sh
|
|| cat-testlogs.sh
|
||||||
|
|
||||||
|
osmo-clean-workspace.sh
|
||||||
|
|||||||
11
contrib/systemd/osmo-mgw.service
Normal file
11
contrib/systemd/osmo-mgw.service
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Osmocom Media Gateway (MGW)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Restart=always
|
||||||
|
ExecStart=/usr/bin/osmo-mgw -s -c /etc/osmocom/osmo-mgw.cfg
|
||||||
|
RestartSec=2
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
1
debian/autoreconf
vendored
1
debian/autoreconf
vendored
@@ -1 +0,0 @@
|
|||||||
openbsc
|
|
||||||
210
debian/changelog
vendored
210
debian/changelog
vendored
@@ -1,75 +1,173 @@
|
|||||||
openbsc (0.15.1) UNRELEASED; urgency=medium
|
osmo-mgw (1.3.0) unstable; urgency=medium
|
||||||
|
|
||||||
* Move forward toward a new release.
|
[ Pau Espin Pedrol ]
|
||||||
* Prevent SGSN starting with 'auth-policy remote' when no 'gsup remote-*' are configured.
|
* contrib: Add osmo-mgw systemd service
|
||||||
Note: such configs are broken without extra workarounds anyway.
|
* legacy: mgcp_protocol: Don't print osmux stats if it is off
|
||||||
|
* mgcp_stat: Don't print osmux stats if it is off
|
||||||
|
|
||||||
-- Holger Hans Peter Freyther <holger@moiji-mobile.com> Tue, 24 May 2016 23:14:31 +0200
|
[ Neels Hofmeyr ]
|
||||||
|
* fix segfault: DLCX for unknown endpoint: dont try to log NULL endpoint
|
||||||
|
* MGCP endpoints: parse as decimal, not hex
|
||||||
|
* add --enable-sanitize config option
|
||||||
|
* legacy_mgcp: mgcp_test: sanitize: free msgb_ctx
|
||||||
|
* mgcp_test: test_packet_error_detection: sanitize: free all conns
|
||||||
|
* mgcp_test: test_no_cycle: sanitize: free endp
|
||||||
|
* mgcp_test: sanitize: free msgb_ctx
|
||||||
|
* mgcp_client: don't configure "bts base"
|
||||||
|
* Revert "mgcp_client: don't configure "bts base"" until osmo-msc is ready
|
||||||
|
* mgcp_client: add transaction cleanup
|
||||||
|
* mgcp_client_test makefile: add update_exp target
|
||||||
|
* cosmetic: mgcp_network: typo in log
|
||||||
|
* osmo-mgw: Add talloc context introspection via VTY
|
||||||
|
* mgcp_client: show failure by MGCP SDP section parsing test
|
||||||
|
* mgcp_client: cosmetic: clean up SDP params parsing
|
||||||
|
* mgcp_client: detect SDP section-start parsing errors
|
||||||
|
* compiler warning: ignore deprecated in mgcp_client_test.c
|
||||||
|
* configure: add --enable-werror
|
||||||
|
* jenkins.sh: add --enable-werror to configure flags
|
||||||
|
* cosmetic: mgcp, legacy_mgcp: drop unused vty.h definitions
|
||||||
|
* use osmo_init_logging2() with proper talloc ctx
|
||||||
|
|
||||||
openbsc (0.14.0) unstable; urgency=low
|
[ Philipp Maier ]
|
||||||
|
* osmux: fix nullpointer dereference
|
||||||
|
* cosmetic: guard dead osmux vty code with ifdef
|
||||||
|
* cosmetic: remove prefix "net" from rtp related vty commands
|
||||||
|
* doc: update sample config file
|
||||||
|
* cosmetic: use correct VTY port number constant
|
||||||
|
* vty: simplify endpoint allocation
|
||||||
|
* vty: do not change number_endpoints at runtime
|
||||||
|
* MGCP: Connection Identifiers are hex strings
|
||||||
|
* libosmo-mgcp: Connection Identifiers are allocated by MGW, not CA
|
||||||
|
* client: use osmo_strlcpy instead of strncpy
|
||||||
|
* cosmetic: fix sourcecode formatting
|
||||||
|
* cosmetic: clearly mark endpoint numbers as hex
|
||||||
|
* client: use string as connection identifier
|
||||||
|
* conn: remove assertions
|
||||||
|
* mgcp_test: fix wrong strcmp() parameters
|
||||||
|
* mgcp_test: fix nullpointer dereference
|
||||||
|
* mgcp_test: add returncode check
|
||||||
|
* mgcp_test: fix possible double free
|
||||||
|
* mcgp_client: mgcp_msg_gen(): add checks to verify params
|
||||||
|
* network: use originating RTP packet address for loopback
|
||||||
|
* client: mgcp_response_parse_params: check rtp port
|
||||||
|
* mgcp: allow endpoints beginning from zero
|
||||||
|
* client/common: move constant MGCP_ENDPOINT_MAXLEN
|
||||||
|
* mgcp: make domain name configurable
|
||||||
|
* cosmetic: protocol: remove unnecessary nul termination
|
||||||
|
* client: do not insist on \n\n when parsing MGCP messages
|
||||||
|
* main: display mgcp ip/port
|
||||||
|
* client: make callid in MDCX mandatory
|
||||||
|
* client: add missing mandatory SDP fields
|
||||||
|
* mgcp: permit wildcarded endpoint assignment (CRCX)
|
||||||
|
* mgcp: add prefix to virtual trunk
|
||||||
|
* client: eliminate destructive parameter parsing
|
||||||
|
* client: eliminate destructive head parsing
|
||||||
|
* cosmetic: client: add doxygen comments
|
||||||
|
* protocol: fix problem with line break and OSMUX
|
||||||
|
* protocol: fix missing carriage return
|
||||||
|
* client: fix sdp parameter ordering
|
||||||
|
* protocol: check the packetization in local cx options
|
||||||
|
* cosmetic: remove spaces from pointer symbol
|
||||||
|
* client: Do not accept endpoint ids with wildcards in responses
|
||||||
|
* client: do not accept endpoint ids without @ character in responses
|
||||||
|
* client: prohibit endpoint ids without @ character
|
||||||
|
* protocol: on wildcarded CRCX return endpoint number as hex
|
||||||
|
* msg: fix response code on exhausted endp resources
|
||||||
|
* cosmetic: move mgcp_release_endp() to mgcp_ep.c
|
||||||
|
* client: use heap to store mgcp_response
|
||||||
|
* ep: move endpoint struct and define to mgcp_ep.h
|
||||||
|
* cosmetic: rename mgcp_release_endp to mgcp_endp_release
|
||||||
|
* cosmetic: rename mgcp_ep.c/h to mgcp_endp.c/h
|
||||||
|
* protocol: reject DLCX/CRCX/MDCX on unsupported parameters
|
||||||
|
* protocol: exit cleanly when local cx options check fails
|
||||||
|
* cosmetic: Add missing \n on log line
|
||||||
|
* protocol: check requested connection mode
|
||||||
|
* protocol: fix tagging of wildcarded requests
|
||||||
|
* protocol: prohibit wildcarded requests for MDCX and DLCX
|
||||||
|
* mgcp: fix use-after-free and add callback for endpoint cleanup
|
||||||
|
* client: add an optional FSM interface
|
||||||
|
* mgcp_client_fsm: Add FSM event names
|
||||||
|
* cosmetic: mgcp_client_fsm: rename enums
|
||||||
|
* cosmetic: rename function .._conn_reset() to .._conn_init()
|
||||||
|
* mgcp_conn: do not touch u.rtp in mgcp_conn_alloc()
|
||||||
|
* cosmetic: rename .._codec_reset() to .._codec_init()
|
||||||
|
* mgcp_conn: add function mgcp_rtp_conn_cleanup()
|
||||||
|
* stats: use libosmocore rate counter for in/out_stream.err_ts_counter
|
||||||
|
|
||||||
* New upstream tag and additional patches.
|
[ Alexander Couzens ]
|
||||||
|
* debian/control: correct library dependency of osmo-mgw against libosmo-mgcp1
|
||||||
|
* debian: include systemd service osmo-mgw.service
|
||||||
|
* Revert "stats: use libosmocore rate counter for in/out_stream.err_ts_counter"
|
||||||
|
|
||||||
-- Holger Hans Peter Freyther <holger@freyther.de> Sat, 14 Mar 2015 20:33:25 +0100
|
[ Harald Welte ]
|
||||||
|
* cosmetic: fix whitespaces; we use tabs for indentation
|
||||||
|
* Fix possible buffer overflow in mgcp_conn_dump()
|
||||||
|
* osmo-mgw: Update copyright statement
|
||||||
|
* osmo-mgw: Config file is osmo-mgw.cfg, and not mgcp.cfg
|
||||||
|
* osmo-mgw: Fix copyright notice
|
||||||
|
* strct mgcp_rtp_state: Group + document struct members related to patching
|
||||||
|
* mgcp_rtp_state: grup 'stats' members into sub-structure
|
||||||
|
* mgcp_rtp_end: Group statistics members into 'stats' sub-struct
|
||||||
|
* libosmo-mgcp: Cosmetic spelling fixes in comments
|
||||||
|
* mgcp_msg: We must parse endpoint numbers as hex, not decimal!
|
||||||
|
* mgcp_internal.h: document more struct members with comments
|
||||||
|
* centralize handling of common errors like "endpoint not found"
|
||||||
|
* Return proper MGCP Error codes, as per spec
|
||||||
|
* osmo-mgw: Use libosmocore socket abstraction
|
||||||
|
* osmo-bsc_mgcp: Add LIBOSMONETIF_{CFLAGS,LIBS}
|
||||||
|
* libosmo-mgcp-client is GPLv2+, not AGPLv3+
|
||||||
|
* Turn libosmo-mgcp into local, non-installed library
|
||||||
|
|
||||||
openbsc (0.12.0+git26-7) unstable; urgency=low
|
[ Stefan Sperling ]
|
||||||
|
* enable osmo_fsm vty commands in libosmo-mgcp-client vty
|
||||||
|
|
||||||
* 64bit fix for the MGCP rewriting
|
-- Pau Espin Pedrol <pespin@sysmocom.de> Thu, 03 May 2018 17:40:35 +0200
|
||||||
|
|
||||||
-- Holger Hans Peter Freyther <holger@freyther.de> Wed, 07 Nov 2012 11:39:34 +0100
|
osmo-mgw (1.2.0) unstable; urgency=medium
|
||||||
|
|
||||||
openbsc (0.12.0+git26-6) precise; urgency=low
|
[ Neels Hofmeyr ]
|
||||||
|
* jenkins: use osmo-clean-workspace.sh before and after build
|
||||||
|
* vty: skip installing cmds now always installed by default
|
||||||
|
* mgcp-client vty: use name 'mgw' instead of 'mgcpgw'
|
||||||
|
* mgcp client: vty: tweak doc strings
|
||||||
|
|
||||||
* Added init script for osmocom-sgsn.
|
[ Philipp Maier ]
|
||||||
|
* sdp: refactoring sdp parser/generator
|
||||||
|
* cosmetic: rename bts_codec to codec_str
|
||||||
|
* cosmetic: fix coding style for mgcp_parse_sdp_data()
|
||||||
|
* cosmetic: fix commenting style
|
||||||
|
* cosmetic: correct whitespaces
|
||||||
|
* client: fix stderror logging in unit-test
|
||||||
|
* client: add unified function to generate MGCP messages
|
||||||
|
* client: add ip address parsing to the client
|
||||||
|
* protocol: allow wildcarded DLCX
|
||||||
|
* mgcp: remove port/timeslot calculator functions from mgcp.h
|
||||||
|
* network: add separate log category
|
||||||
|
* cosmetic: make dummy packet handling more explicit
|
||||||
|
* network: autdetect rtp bind ip-address
|
||||||
|
* network: fix rtp packet length
|
||||||
|
* network: remove unused return code
|
||||||
|
|
||||||
-- Eric Butler <eric@codebutler.com> Fri, 24 Aug 2012 21:04:32 -0700
|
[ Pau Espin Pedrol ]
|
||||||
|
* mgcp_client_vty.c: Fix VTY compatibility with 'mgcpgw bts-base'
|
||||||
|
|
||||||
openbsc (0.12.0+git26-5) precise; urgency=low
|
-- Harald Welte <laforge@gnumonks.org> Fri, 10 Nov 2017 11:10:23 +0900
|
||||||
|
|
||||||
* Don't enable MNCC sock by default.
|
osmo-mgw (1.1.0) unstable; urgency=medium
|
||||||
* Automatically create important directories.
|
|
||||||
* Fix init script 'stop' command.
|
|
||||||
|
|
||||||
-- Eric Butler <eric@codebutler.com> Fri, 24 Aug 2012 20:56:33 -0700
|
|
||||||
|
|
||||||
openbsc (0.12.0+git26-4) precise; urgency=low
|
|
||||||
|
|
||||||
* Specify HLR path and enable RTP proxy.
|
|
||||||
|
|
||||||
-- Eric Butler <eric@codebutler.com> Mon, 20 Aug 2012 00:21:07 -0700
|
|
||||||
|
|
||||||
openbsc (0.12.0+git26-3) precise; urgency=low
|
|
||||||
|
|
||||||
* Fix init script.
|
|
||||||
|
|
||||||
-- Eric Butler <eric@codebutler.com> Sun, 19 Aug 2012 16:05:44 -0700
|
|
||||||
|
|
||||||
openbsc (0.12.0+git26-2) precise; urgency=low
|
|
||||||
|
|
||||||
* Fix libdbi package dependency.
|
|
||||||
|
|
||||||
-- Eric Butler <eric@codebutler.com> Wed, 15 Aug 2012 00:35:37 -0700
|
|
||||||
|
|
||||||
openbsc (0.12.0+git26-1) precise; urgency=low
|
|
||||||
|
|
||||||
* Fix version issue.
|
|
||||||
|
|
||||||
-- Eric Butler <eric@codebutler.com> Tue, 14 Aug 2012 21:00:51 -0700
|
|
||||||
|
|
||||||
openbsc (0.12.0+git26) precise; urgency=low
|
|
||||||
|
|
||||||
* Updated ubuntu package.
|
|
||||||
|
|
||||||
-- Eric Butler <eric@codebutler.com> Tue, 14 Aug 2012 17:36:51 -0700
|
|
||||||
|
|
||||||
openbsc (0.9.13.115.eb113-1) natty; urgency=low
|
|
||||||
|
|
||||||
* New upstream release
|
* New upstream release
|
||||||
|
|
||||||
-- Harald Welte <laforge@gnumonks.org> Wed, 11 May 2011 18:41:24 +0000
|
-- Harald Welte <lafore@gnumonks.org> Sat, 28 Oct 2017 12:48:41 +0200
|
||||||
|
|
||||||
openbsc (0.9.4-1) unstable; urgency=low
|
osmo-mgw (1.0.2) unstable; urgency=low
|
||||||
|
|
||||||
* Initial release
|
* First release after major rename.
|
||||||
|
|
||||||
-- Harald Welte <laforge@gnumonks.org> Tue, 24 Aug 2010 13:34:24 +0200
|
-- Max Suraev <msuraev@sysmocom.de> Thu, 14 Sep 2017 18:41:05 +0200
|
||||||
|
|
||||||
|
|
||||||
|
osmo-mgw (0.1.0) unstable; urgency=low
|
||||||
|
|
||||||
|
* Initial release.
|
||||||
|
|
||||||
|
-- Alexander Couzens <lynxis@fe80.eu> Tue, 08 Aug 2017 01:12:53 +0000
|
||||||
|
|||||||
207
debian/control
vendored
207
debian/control
vendored
@@ -1,181 +1,56 @@
|
|||||||
Source: openbsc
|
Source: osmo-mgw
|
||||||
Maintainer: Harald Welte <laforge@gnumonks.org>
|
|
||||||
Section: net
|
Section: net
|
||||||
Priority: optional
|
Priority: extra
|
||||||
Build-Depends: debhelper (>= 9),
|
Maintainer: Alexander Couzens <lynxis@fe80.eu>
|
||||||
autotools-dev,
|
Build-Depends: debhelper (>=9),
|
||||||
autoconf-archive,
|
|
||||||
pkg-config,
|
|
||||||
libgtp-dev,
|
|
||||||
libosmocore-dev,
|
|
||||||
libosmo-sccp-dev,
|
|
||||||
libdbi0-dev,
|
|
||||||
dh-autoreconf,
|
dh-autoreconf,
|
||||||
libosmo-abis-dev,
|
pkg-config,
|
||||||
libosmo-netif-dev,
|
autotools-dev,
|
||||||
libdbd-sqlite3,
|
libosmocore-dev,
|
||||||
libpcap-dev,
|
libosmo-netif-dev
|
||||||
libssl-dev,
|
|
||||||
libc-ares-dev,
|
|
||||||
libsmpp34-dev
|
|
||||||
Standards-Version: 3.9.8
|
Standards-Version: 3.9.8
|
||||||
Vcs-Git: git://bs11-abis.gnumonks.org/openbsc.git
|
Vcs-Git: git://git.osmocom.org/osmo-mgw.git
|
||||||
Vcs-Browser: http://openbsc.osmocom.org/trac/browser
|
Vcs-Browser: https://git.osmocom.org/osmo-mgw/
|
||||||
Homepage: https://projects.osmocom.org/projects/openbsc
|
Homepage: https://osmocom.org/projects/osmo-mgw
|
||||||
|
|
||||||
Package: osmocom-bsc
|
Package: osmo-mgw
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends},
|
Multi-Arch: foreign
|
||||||
${misc:Depends}
|
Depends: ${misc:Depends}, ${shlibs:Depends}
|
||||||
Description: GSM Base Station Controller
|
Description: OsmoMGW: Osmocom's Media Gateway for 2G and 3G circuit-switched mobile networks
|
||||||
This is the BSC-only version of OpenBSC. It requires a Mobile Switching Center
|
|
||||||
(MSC) to operate.
|
|
||||||
.
|
|
||||||
You might rather prefer to use osmocom-nitb which is considered a
|
|
||||||
"GSM Network-in-a-Box" and does not depend on a MSC.
|
|
||||||
|
|
||||||
Package: osmocom-nitb
|
Package: libosmo-mgcp-client3
|
||||||
|
Section: libs
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends},
|
Multi-Arch: same
|
||||||
${misc:Depends},
|
Pre-Depends: ${misc:Pre-Depends}
|
||||||
libdbd-sqlite3
|
Depends: ${misc:Depends}, ${shlibs:Depends}
|
||||||
Description: GSM Network-in-a-Box, implements BSC, MSC, SMSC, HLR, VLR
|
Description: libosmo-mgcp-client: Osmocom's Media Gateway Control Protocol client utilities
|
||||||
This is the Network-in-a-Box version of OpenBSC. It has all the GSM network
|
|
||||||
components bundled together. When using osmocom-nitb, there is no need for a
|
|
||||||
Mobile Switching Center (MSC) which is needed when using osmocom-bsc.
|
|
||||||
|
|
||||||
Package: osmocom-ipaccess-utils
|
Package: libosmo-mgcp-client-dev
|
||||||
|
Section: libdevel
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends},
|
Multi-Arch: same
|
||||||
${misc:Depends}
|
Depends: libosmo-mgcp-client3 (= ${binary:Version}), ${misc:Depends}
|
||||||
Description: Command line utilities for ip.access nanoBTS
|
Description: libosmo-mgcp-client: Osmocom's Media Gateway Control Protocol client utilities
|
||||||
This package contains utilities that are specific for nanoBTS when being used
|
|
||||||
together with OpenBSC. It contains mainly three tools: ipaccess-find,
|
|
||||||
ipaccess-config and ipaccess-proxy.
|
|
||||||
|
|
||||||
Package: osmocom-bs11-utils
|
Package: osmo-bsc-mgcp
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends},
|
Multi-Arch: foreign
|
||||||
${misc:Depends}
|
Depends: libosmo-legacy-mgcp0, ${misc:Depends}, ${shlibs:Depends}
|
||||||
Description: Command line utilities for Siemens BS-11 BTS
|
Description: OsmoBSC-MGCP: Osmocom's Legacy Media Gateway; use osmo-mgw instead.
|
||||||
There is a tool in this package for configuring the Siemens BS-11 BTS.
|
|
||||||
Additionally, it contains one tool for making use of an ISDN-card and the
|
|
||||||
public telephone network as frequency standard for the E1 line.
|
|
||||||
|
|
||||||
Package: osmocom-sgsn
|
Package: libosmo-legacy-mgcp0
|
||||||
|
Section: libs
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends},
|
Multi-Arch: same
|
||||||
${misc:Depends}
|
Pre-Depends: ${misc:Pre-Depends}
|
||||||
Suggests: osmocom-bsc
|
Depends: ${misc:Depends}, ${shlibs:Depends}
|
||||||
Description: Osmocom Serving GPRS Support Node
|
Description: libosmo-legacy-mgcp: Osmocom's Legacy Media Gateway server library; use libosmo-mgcp instead.
|
||||||
This is an implementation of the GPRS Serving GPRS Support Node (SGSN). As
|
|
||||||
such it implements the GPRS Mobility Management (GMM) and SM (Session
|
|
||||||
Management).
|
|
||||||
.
|
|
||||||
The SGSN connects via the Gb-interface to the BSS (like the osmo-pcu or an
|
|
||||||
ip.access nanoBTS), and it connects via the GTP protocol to a Gateway GPRS
|
|
||||||
Support Node (GGSN) like openggsn.
|
|
||||||
|
|
||||||
Package: osmocom-gbproxy
|
Package: libosmo-legacy-mgcp-dev
|
||||||
|
Section: libdevel
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends},
|
Multi-Arch: same
|
||||||
${misc:Depends}
|
Depends: libosmo-legacy-mgcp0 (= ${binary:Version}), ${misc:Depends}
|
||||||
Recommends: osmocom-sgsn
|
Description: libosmo-legacy-mgcp: Osmocom's Legacy Media Gateway server library; use libosmo-mgcp instead.
|
||||||
Description: Osmocom GPRS Gb Interface Proxy
|
|
||||||
The purpose of the Gb proxy is to aggregate the Gb links of multiple
|
|
||||||
BSS's and present them in one Gb link to the SGSN.
|
|
||||||
.
|
|
||||||
This package is part of OpenBSC and closely related to osmocom-sgsn.
|
|
||||||
|
|
||||||
Package: osmocom-bsc-nat
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends},
|
|
||||||
${misc:Depends}
|
|
||||||
Recommends: osmocom-bsc
|
|
||||||
Description: Osmocom Base Station Controller Network Address Translation
|
|
||||||
This NAT is useful for masquerading multiple BSCs behind one. It listens
|
|
||||||
for incoming BSCs on port 5000 and connects to a specified Mobile Switching
|
|
||||||
Center (MSC).
|
|
||||||
.
|
|
||||||
This package is part of OpenBSC and closely related to osmocom-bsc.
|
|
||||||
|
|
||||||
Package: openbsc-dev
|
|
||||||
Architecture: all
|
|
||||||
Depends: ${misc:Depends}
|
|
||||||
Description: Header file needed by tools tightly integrated
|
|
||||||
Some other programs depend on gsm_data_shared.h and gsm_data_shared.c
|
|
||||||
from OpenBSC. This package installs these files to your file system so
|
|
||||||
that the other packages can build-depend on this package.
|
|
||||||
.
|
|
||||||
The directory structure is copied after the structure in the repository
|
|
||||||
and the header and .c file are installed into /usr/src/osmocom/openbsc/.
|
|
||||||
|
|
||||||
Package: osmo-gtphub
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
|
||||||
Description: Osmocom GTP Hub
|
|
||||||
Proxy for comms between multiple SGSNs and GGSNs.
|
|
||||||
|
|
||||||
Package: osmocom-bsc-dbg
|
|
||||||
Architecture: any
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Depends: osmocom-bsc (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Debug symbols for the OpenBSC BSC
|
|
||||||
Make debugging possible
|
|
||||||
|
|
||||||
Package: osmocom-nitb-dbg
|
|
||||||
Architecture: any
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Depends: osmocom-nitb (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Debug symbols for the OpenBSC NITB
|
|
||||||
Make debugging possible
|
|
||||||
|
|
||||||
Package: osmocom-ipaccess-utils-dbg
|
|
||||||
Architecture: any
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Depends: osmocom-ipaccess-utils (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Debug symbols for the OpenBSC ip.access utils
|
|
||||||
Make debugging possible
|
|
||||||
|
|
||||||
Package: osmocom-bs11-utils-dbg
|
|
||||||
Architecture: any
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Depends: osmocom-bs11-utils (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Debug symbols for the OpenBSC BS11 utils
|
|
||||||
Make debugging possible
|
|
||||||
|
|
||||||
Package: osmocom-sgsn-dbg
|
|
||||||
Architecture: any
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Depends: osmocom-sgsn (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Debug symbols for the OpenBSC Serving GPRS Support Node
|
|
||||||
Make debugging possible
|
|
||||||
|
|
||||||
Package: osmocom-gbproxy-dbg
|
|
||||||
Architecture: any
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Depends: osmocom-gbproxy (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Debug symbols for the OpenBSC GPRS GBProxy
|
|
||||||
Make debugging possible
|
|
||||||
|
|
||||||
Package: osmocom-bsc-nat-dbg
|
|
||||||
Architecture: any
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Depends: osmocom-bsc-nat (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Debug symbols for the OpenBSC Network Address Translation
|
|
||||||
Make debugging possible
|
|
||||||
|
|
||||||
Package: osmo-gtphub-dbg
|
|
||||||
Architecture: any
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Depends: osmo-gtphub (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Debug symbols for Osmocom GTP Hub
|
|
||||||
Make debugging possible
|
|
||||||
|
|||||||
204
debian/copyright
vendored
204
debian/copyright
vendored
@@ -1,74 +1,14 @@
|
|||||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
Upstream-Name: OpenBSC
|
Upstream-Name: osmo-mgw
|
||||||
Source: http://openbsc.osmocom.org/
|
Source: git://git.osmocom.org/osmo-mgw
|
||||||
|
|
||||||
Files: *
|
Files: *
|
||||||
Copyright: 2008-2015 Harald Welte <laforge@gnumonks.org>
|
Copyright: 2009-2014 On-Waves
|
||||||
2008-2015 Holger Hans Peter Freyther <zecke@selfish.org>
|
2009-2015 Holger Hans Peter Freyther <zecke@selfish.org>
|
||||||
2009-2015 On-Waves
|
2013 Jacob Erlbeck <jerlbeck@sysmocom.de>
|
||||||
2008 Jan Luebbe <jluebbe@debian.org>
|
2016-2017 sysmocom s.m.f.c. GmbH <info@sysmocom.de>
|
||||||
2008,2010-2011 Daniel Willmann <daniel@totalueberwachung.de>
|
License: AGPL-3.0+
|
||||||
2009,2011,2013 Andreas Eversberg <Andreas.Eversberg@versatel.de>
|
This program is free software; you can redistribute it and/or modify
|
||||||
2009,2011 Dieter Spaar <spaar@mirider.augusta.de>
|
|
||||||
2009 Mike Haben <michael.haben@btinternet.com>
|
|
||||||
2010 Sylvain Munaut <246tnt@gmail.com>
|
|
||||||
2012-2013 Pablo Neira Ayuso <pablo@gnumonks.org>
|
|
||||||
2013-2015 Sysmocom s.f.m.c. GmbH (Jacob Erlbeck)
|
|
||||||
2014 Alexander Chemeris <Alexander.Chemeris@fairwaves.co>
|
|
||||||
License: AGPL-3+
|
|
||||||
Comment: Contributions by Stefan Schmidt <stefan@datenfreihafen.org> as well
|
|
||||||
|
|
||||||
Files: wireshark/0001-abis_oml.patch
|
|
||||||
wireshark/0002-ericsson_rbs2409.patch
|
|
||||||
wireshark/0003-lucent-hnb.patch
|
|
||||||
wireshark/0005-rsl-hsl.patch
|
|
||||||
Copyright: 1998 Gerald Combs <gerald@wireshark.org>
|
|
||||||
2007,2011 Anders Broman <anders.broman@ericsson.com>
|
|
||||||
2009 Holger Hans Peter Freyther <zecke@selfish.org>
|
|
||||||
2009-2011 Harald Welte <laforge@gnumonks.org>
|
|
||||||
License: GPL-2+
|
|
||||||
|
|
||||||
Files: openbsc/include/mISDNif.h
|
|
||||||
Copyright: 2008 Karsten Keil <kkeil@novell.com>
|
|
||||||
License: LGPL-2.1
|
|
||||||
|
|
||||||
Files: openbsc/src/libmgcp/g711common.h
|
|
||||||
Copyright: 2009 Abramo Bagnara <abramo@alsa-project.org>
|
|
||||||
License: GPL-2+
|
|
||||||
|
|
||||||
Files: openbsc/git-version-gen
|
|
||||||
Copyright: 2007-2010 Free Software Foundation
|
|
||||||
License: GPL-3+
|
|
||||||
|
|
||||||
Files: openbsc/osmoappdesc.py
|
|
||||||
openbsc/tests/smpp_test_runner.py
|
|
||||||
openbsc/tests/ctrl_test_runner.py
|
|
||||||
openbsc/tests/vty_test_runner.py
|
|
||||||
Copyright: 2013 Katerina Barone-Adesi <kat.obsc@gmail.com>
|
|
||||||
2013 Jacob Erlbeck <jerlbeck@sysmocom.de>
|
|
||||||
2013-2014 Holger Hans Peter Freyther <zecke@selfish.org>
|
|
||||||
License: GPL-3+
|
|
||||||
|
|
||||||
Files: openbsc/src/libbsc/bsc_ctrl_lookup.c
|
|
||||||
Copyright: 2010-2011 Daniel Willmann <daniel@totalueberwachung.de>
|
|
||||||
2010-2011 On-Waves
|
|
||||||
License: GPL-2+
|
|
||||||
|
|
||||||
Files: openbsc/src/libmsc/mncc_sock.c
|
|
||||||
openbsc/src/libmsc/mncc_builtin.c
|
|
||||||
Copyright: 2008-2010 Harald Welte <laforge@gnumonks.org>
|
|
||||||
2009 Andreas Eversberg <Andreas.Eversberg@versatel.de>
|
|
||||||
2012 Holger Hans Peter Freyther <zecke@selfish.org>
|
|
||||||
License: GPL-2+
|
|
||||||
|
|
||||||
Files: debian/*
|
|
||||||
Copyright: 2012-2015 Holger Hans Peter Freyther <zecke@selfish.org>
|
|
||||||
2016 Ruben Undheim <ruben.undheim@gmail.com>
|
|
||||||
License: GPL-2+
|
|
||||||
|
|
||||||
|
|
||||||
License: AGPL-3+
|
|
||||||
This package is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
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
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
@@ -76,62 +16,86 @@ License: AGPL-3+
|
|||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU Affero General Public License for more details.
|
||||||
.
|
.
|
||||||
You should have received a copy of the GNU Affero General Public License
|
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/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Files: src/libosmo-mgcp-client/* include/osmocom/mgcp_client/*
|
||||||
License: GPL-2+
|
Copyright: 2016 by sysmocom s.m.f.c. GmbH <info@sysmocom.de>
|
||||||
This package is free software: you can redistribute it and/or modify it
|
Based on OpenBSC interface to quagga VTY (libmsc/vty_interface_layer3.c)
|
||||||
under the terms of the GNU General Public License as published by
|
2009 by Harald Welte <laforge@gnumonks.org>
|
||||||
the Free Software Foundation, either version 2 of the License, or (at
|
2009-2011 by Holger Hans Peter Freyther
|
||||||
your option) any later version.
|
License: GPL-2.0+
|
||||||
|
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 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
.
|
.
|
||||||
This program is distributed in the hope that it will be useful, but
|
This program is distributed in the hope that it will be useful,
|
||||||
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/>.
|
|
||||||
.
|
|
||||||
On Debian systems, the complete text of the GNU General Public
|
|
||||||
License version 2 can be found in "/usr/share/common-licenses/GPL-2".
|
|
||||||
|
|
||||||
|
|
||||||
License: GPL-3+
|
|
||||||
This package 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/>.
|
|
||||||
.
|
|
||||||
On Debian systems, the complete text of the GNU General Public
|
|
||||||
License version 3 can be found in "/usr/share/common-licenses/GPL-3".
|
|
||||||
|
|
||||||
|
|
||||||
License: LGPL-2.1
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; version
|
|
||||||
2.1 of the License.
|
|
||||||
.
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
Lesser General Public License for more details.
|
GNU General Public License for more details.
|
||||||
.
|
.
|
||||||
You should have received a copy of the GNU Lesser General Public
|
You should have received a copy of the GNU General Public License
|
||||||
License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Files: src/libosmo-legacy-mgcp/g711common.h
|
||||||
|
Copyright: 2000 Abramo Bagnara <abramo@alsa-project.org>
|
||||||
|
License: GPL-2.0+
|
||||||
|
Wrapper for linphone Codec class by Simon Morlat <simon.morlat@linphone.org>
|
||||||
.
|
.
|
||||||
On Debian systems, the complete text of the GNU Lesser General
|
This program is free software; you can redistribute it and/or modify
|
||||||
Public License version 2.1 can be found in
|
it under the terms of the GNU General Public License as published by
|
||||||
"/usr/share/common-licenses/LGPL-2.1".
|
the Free Software Foundation; either version 2 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, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
.
|
||||||
|
The FSF address in the above text is the old one.
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General Public License
|
||||||
|
Version 2 can be found in `/usr/share/common-licenses/GPL-2'.
|
||||||
|
|
||||||
|
Files: tests/vty_test_runner.py
|
||||||
|
Copyright: 2013 Holger Hans Peter Freyther
|
||||||
|
2013 Katerina Barone-Adesi <kat.obsc@gmail.com>
|
||||||
|
License: GPL-3.0+
|
||||||
|
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/>.
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General Public License
|
||||||
|
Version 3 can be found in `/usr/share/common-licenses/GPL-3'.
|
||||||
|
|
||||||
|
Files: osmoappdesc.py
|
||||||
|
Copyright: 2013 Katerina Barone-Adesi <kat.obsc@gmail.com>
|
||||||
|
License: GPL-3.0+
|
||||||
|
|
||||||
|
Files: src/libosmo-legacy-mgcp/mgcp_osmux.c
|
||||||
|
Copyright: 2012-2013 On Waves ehf <http://www.on-waves.com>
|
||||||
|
2012-2013 Pablo Neira Ayuso <pablo@gnumonks.org>
|
||||||
|
License: AGPL-3.0+
|
||||||
|
All rights not specifically granted under this license are 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.
|
||||||
|
|
||||||
|
|||||||
1
debian/docs
vendored
1
debian/docs
vendored
@@ -1 +0,0 @@
|
|||||||
openbsc/README
|
|
||||||
4
debian/libosmo-legacy-mgcp-dev.install
vendored
Normal file
4
debian/libosmo-legacy-mgcp-dev.install
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
usr/include/osmocom/legacy_mgcp
|
||||||
|
usr/lib/*/libosmo-legacy-mgcp.so
|
||||||
|
usr/lib/*/libosmo-legacy-mgcp.a
|
||||||
|
usr/lib/*/pkgconfig/libosmo-legacy-mgcp.pc
|
||||||
1
debian/libosmo-legacy-mgcp0.install
vendored
Normal file
1
debian/libosmo-legacy-mgcp0.install
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
usr/lib/*/libosmo-legacy-mgcp.so.*
|
||||||
4
debian/libosmo-mgcp-client-dev.install
vendored
Normal file
4
debian/libosmo-mgcp-client-dev.install
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
usr/include/osmocom/mgcp_client
|
||||||
|
usr/lib/*/libosmo-mgcp-client.so
|
||||||
|
usr/lib/*/libosmo-mgcp-client.a
|
||||||
|
usr/lib/*/pkgconfig/libosmo-mgcp-client.pc
|
||||||
1
debian/libosmo-mgcp-client3.install
vendored
Normal file
1
debian/libosmo-mgcp-client3.install
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
usr/lib/*/libosmo-mgcp-client.so.*
|
||||||
4
debian/openbsc-dev.install
vendored
4
debian/openbsc-dev.install
vendored
@@ -1,4 +0,0 @@
|
|||||||
openbsc/include/openbsc/gsm_data_shared.h usr/src/osmocom/openbsc/openbsc/include/openbsc/
|
|
||||||
openbsc/include/openbsc/common_cs.h usr/src/osmocom/openbsc/openbsc/include/openbsc/
|
|
||||||
openbsc/src/libcommon/gsm_data_shared.c usr/src/osmocom/openbsc/openbsc/src/libcommon/
|
|
||||||
usr/lib/*/pkgconfig/openbsc.pc
|
|
||||||
1
debian/osmo-bsc-mgcp.install
vendored
Normal file
1
debian/osmo-bsc-mgcp.install
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
usr/bin/osmo-bsc_mgcp
|
||||||
1
debian/osmo-bsc-mgcp.service
vendored
Symbolic link
1
debian/osmo-bsc-mgcp.service
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../contrib/systemd/osmo-bsc-mgcp.service
|
||||||
2
debian/osmo-gtphub.default
vendored
2
debian/osmo-gtphub.default
vendored
@@ -1,2 +0,0 @@
|
|||||||
CONFIG_FILE="/etc/osmocom/osmo-gtphub.cfg"
|
|
||||||
|
|
||||||
1
debian/osmo-gtphub.examples
vendored
1
debian/osmo-gtphub.examples
vendored
@@ -1 +0,0 @@
|
|||||||
openbsc/doc/examples/osmo-gtphub
|
|
||||||
150
debian/osmo-gtphub.init
vendored
150
debian/osmo-gtphub.init
vendored
@@ -1,150 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: osmo-gtphub
|
|
||||||
# Required-Start: $network $local_fs
|
|
||||||
# Required-Stop:
|
|
||||||
# Default-Start: 2 3 4 5
|
|
||||||
# Default-Stop: 0 1 6
|
|
||||||
# Short-Description: Osmocom GTP hub
|
|
||||||
# Description: Osmocom GTP hub
|
|
||||||
### END INIT INFO
|
|
||||||
|
|
||||||
# Author: Neels Hofmeyr <nhofmeyr@sysmocom.de>
|
|
||||||
|
|
||||||
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
|
||||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
|
||||||
NAME=osmo-gtphub # Introduce the short server's name here
|
|
||||||
DESC="Osmocom GTP hub" # Introduce a short description here
|
|
||||||
DAEMON=/usr/bin/osmo-gtphub # Introduce the server's location here
|
|
||||||
SCRIPTNAME=/etc/init.d/osmo-gtphub
|
|
||||||
|
|
||||||
# Exit if the package is not installed
|
|
||||||
[ -x $DAEMON ] || exit 0
|
|
||||||
|
|
||||||
# Read configuration variable file if it is present
|
|
||||||
[ -r /etc/default/osmo-gtphub ] && . /etc/default/osmo-gtphub
|
|
||||||
|
|
||||||
# Load the VERBOSE setting and other rcS variables
|
|
||||||
. /lib/init/vars.sh
|
|
||||||
|
|
||||||
# Define LSB log_* functions.
|
|
||||||
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
|
|
||||||
DAEMON_ARGS="$DAEMON_ARGS -D -c $CONFIG_FILE"
|
|
||||||
|
|
||||||
#
|
|
||||||
# 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 --exec $DAEMON --test > /dev/null \
|
|
||||||
|| return 1
|
|
||||||
start-stop-daemon --start --quiet --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 --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
|
|
||||||
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 --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
|
|
||||||
|
|
||||||
:
|
|
||||||
1
debian/osmo-gtphub.install
vendored
1
debian/osmo-gtphub.install
vendored
@@ -1 +0,0 @@
|
|||||||
/usr/bin/osmo-gtphub
|
|
||||||
1
debian/osmo-mgw.install
vendored
Normal file
1
debian/osmo-mgw.install
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
usr/bin/osmo-mgw
|
||||||
1
debian/osmo-mgw.service
vendored
Symbolic link
1
debian/osmo-mgw.service
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../contrib/systemd/osmo-mgw.service
|
||||||
2
debian/osmocom-bs11-utils.install
vendored
2
debian/osmocom-bs11-utils.install
vendored
@@ -1,2 +0,0 @@
|
|||||||
/usr/bin/bs11_config
|
|
||||||
/usr/bin/isdnsync
|
|
||||||
153
debian/osmocom-bsc-nat.init
vendored
153
debian/osmocom-bsc-nat.init
vendored
@@ -1,153 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: osmocom-bsc-nat
|
|
||||||
# Required-Start: $network $local_fs
|
|
||||||
# Required-Stop:
|
|
||||||
# Default-Start: 2 3 4 5
|
|
||||||
# Default-Stop: 0 1 6
|
|
||||||
# Short-Description: Osmocom GSM network-in-a-box
|
|
||||||
# Description: A minimal implementation of the GSM Base Station Controller,
|
|
||||||
# Mobile Switching Center, Home Location regster and all other
|
|
||||||
# components to run a self-contained GSM network.
|
|
||||||
### 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
|
|
||||||
NAME=osmo-bsc_nat # Introduce the short server's name here
|
|
||||||
DESC="Osmocom GSM BSC Multiplexer (NAT)" # Introduce a short description here
|
|
||||||
DAEMON=/usr/bin/osmo-bsc_nat # Introduce the server's location here
|
|
||||||
SCRIPTNAME=/etc/init.d/osmocom-bsc-nat
|
|
||||||
CONFIG_FILE=/etc/osmocom/osmocom-bsc-nat.cfg
|
|
||||||
|
|
||||||
# Exit if the package is not installed
|
|
||||||
[ -x $DAEMON ] || exit 0
|
|
||||||
|
|
||||||
# Read configuration variable file if it is present
|
|
||||||
[ -r /etc/default/osmocom-bsc-nat ] && . /etc/default/osmocom-bsc-nat
|
|
||||||
|
|
||||||
# Load the VERBOSE setting and other rcS variables
|
|
||||||
. /lib/init/vars.sh
|
|
||||||
|
|
||||||
# Define LSB log_* functions.
|
|
||||||
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
|
|
||||||
DAEMON_ARGS="-D -c $CONFIG_FILE"
|
|
||||||
|
|
||||||
#
|
|
||||||
# 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 --exec $DAEMON --test > /dev/null \
|
|
||||||
|| return 1
|
|
||||||
start-stop-daemon --start --quiet --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 --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
|
|
||||||
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 --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
|
|
||||||
|
|
||||||
:
|
|
||||||
1
debian/osmocom-bsc-nat.install
vendored
1
debian/osmocom-bsc-nat.install
vendored
@@ -1 +0,0 @@
|
|||||||
/usr/bin/osmo-bsc_nat
|
|
||||||
1
debian/osmocom-bsc.examples
vendored
1
debian/osmocom-bsc.examples
vendored
@@ -1 +0,0 @@
|
|||||||
openbsc/doc/examples/osmo-bsc_mgcp
|
|
||||||
2
debian/osmocom-bsc.install
vendored
2
debian/osmocom-bsc.install
vendored
@@ -1,2 +0,0 @@
|
|||||||
/usr/bin/osmo-bsc_mgcp
|
|
||||||
/usr/bin/osmo-bsc
|
|
||||||
151
debian/osmocom-gbproxy.init
vendored
151
debian/osmocom-gbproxy.init
vendored
@@ -1,151 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: osmo-gbproxy
|
|
||||||
# Required-Start: $network $local_fs
|
|
||||||
# Required-Stop:
|
|
||||||
# Default-Start: 2 3 4 5
|
|
||||||
# Default-Stop: 0 1 6
|
|
||||||
# Short-Description: Osmocom GBproxy
|
|
||||||
# Description: A tool to proxy the GPRS Gb interface.
|
|
||||||
### 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
|
|
||||||
NAME=osmo-gbproxy # Introduce the short server's name here
|
|
||||||
DESC="Osmocom GBProxy" # Introduce a short description here
|
|
||||||
DAEMON=/usr/bin/osmo-gbproxy # Introduce the server's location here
|
|
||||||
SCRIPTNAME=/etc/init.d/osmocom-gbproxy
|
|
||||||
CONFIG_FILE=/etc/osmocom/osmocom-gbproxy.cfg
|
|
||||||
|
|
||||||
# Exit if the package is not installed
|
|
||||||
[ -x $DAEMON ] || exit 0
|
|
||||||
|
|
||||||
# Read configuration variable file if it is present
|
|
||||||
[ -r /etc/default/osmocom-gbproxy ] && . /etc/default/osmocom-gbproxy
|
|
||||||
|
|
||||||
# Load the VERBOSE setting and other rcS variables
|
|
||||||
. /lib/init/vars.sh
|
|
||||||
|
|
||||||
# Define LSB log_* functions.
|
|
||||||
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
|
|
||||||
DAEMON_ARGS="-D -c $CONFIG_FILE"
|
|
||||||
|
|
||||||
#
|
|
||||||
# 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 --exec $DAEMON --test > /dev/null \
|
|
||||||
|| return 1
|
|
||||||
start-stop-daemon --start --quiet --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 --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
|
|
||||||
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 --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
|
|
||||||
|
|
||||||
:
|
|
||||||
1
debian/osmocom-gbproxy.install
vendored
1
debian/osmocom-gbproxy.install
vendored
@@ -1 +0,0 @@
|
|||||||
/usr/bin/osmo-gbproxy
|
|
||||||
3
debian/osmocom-ipaccess-utils.install
vendored
3
debian/osmocom-ipaccess-utils.install
vendored
@@ -1,3 +0,0 @@
|
|||||||
/usr/bin/ipaccess-config
|
|
||||||
/usr/bin/abisip-find
|
|
||||||
/usr/bin/ipaccess-proxy
|
|
||||||
8
debian/osmocom-nitb.default
vendored
8
debian/osmocom-nitb.default
vendored
@@ -1,8 +0,0 @@
|
|||||||
CONFIG_FILE="/etc/osmocom/osmo-nitb.cfg"
|
|
||||||
HLR_FILE="/var/lib/osmocom/hlr.sqlite3"
|
|
||||||
|
|
||||||
DAEMON_ARGS="-P"
|
|
||||||
|
|
||||||
# Uncomment if using LCR+Asterisk
|
|
||||||
# DAEMON_ARGS="-m -P"
|
|
||||||
|
|
||||||
3
debian/osmocom-nitb.dirs
vendored
3
debian/osmocom-nitb.dirs
vendored
@@ -1,3 +0,0 @@
|
|||||||
/etc/osmocom
|
|
||||||
/var/log/osmocom
|
|
||||||
/var/lib/osmocom
|
|
||||||
1
debian/osmocom-nitb.examples
vendored
1
debian/osmocom-nitb.examples
vendored
@@ -1 +0,0 @@
|
|||||||
openbsc/doc/examples/osmo-nitb
|
|
||||||
152
debian/osmocom-nitb.init
vendored
152
debian/osmocom-nitb.init
vendored
@@ -1,152 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: osmo-nitb
|
|
||||||
# Required-Start: $network $local_fs
|
|
||||||
# Required-Stop:
|
|
||||||
# Default-Start: 2 3 4 5
|
|
||||||
# Default-Stop: 0 1 6
|
|
||||||
# Short-Description: Osmocom GSM network-in-a-box
|
|
||||||
# Description: A minimal implementation of the GSM Base Station Controller,
|
|
||||||
# Mobile Switching Center, Home Location regster and all other
|
|
||||||
# components to run a self-contained GSM network.
|
|
||||||
### 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
|
|
||||||
NAME=osmo-nitb # Introduce the short server's name here
|
|
||||||
DESC="Osmocom GSM Network-in-a-Box" # Introduce a short description here
|
|
||||||
DAEMON=/usr/bin/osmo-nitb # Introduce the server's location here
|
|
||||||
SCRIPTNAME=/etc/init.d/osmocom-nitb
|
|
||||||
|
|
||||||
# Exit if the package is not installed
|
|
||||||
[ -x $DAEMON ] || exit 0
|
|
||||||
|
|
||||||
# Read configuration variable file if it is present
|
|
||||||
[ -r /etc/default/osmocom-nitb ] && . /etc/default/osmocom-nitb
|
|
||||||
|
|
||||||
# Load the VERBOSE setting and other rcS variables
|
|
||||||
. /lib/init/vars.sh
|
|
||||||
|
|
||||||
# Define LSB log_* functions.
|
|
||||||
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
|
|
||||||
DAEMON_ARGS="$DAEMON_ARGS -D -c $CONFIG_FILE -l $HLR_FILE"
|
|
||||||
|
|
||||||
#
|
|
||||||
# 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 --exec $DAEMON --test > /dev/null \
|
|
||||||
|| return 1
|
|
||||||
start-stop-daemon --start --quiet --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 --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
|
|
||||||
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 --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
|
|
||||||
|
|
||||||
:
|
|
||||||
2
debian/osmocom-nitb.install
vendored
2
debian/osmocom-nitb.install
vendored
@@ -1,2 +0,0 @@
|
|||||||
/usr/bin/osmo-nitb
|
|
||||||
openbsc/contrib/*.py usr/bin/
|
|
||||||
2
debian/osmocom-sgsn.default
vendored
2
debian/osmocom-sgsn.default
vendored
@@ -1,2 +0,0 @@
|
|||||||
CONFIG_FILE="/etc/osmocom/osmo-sgsn.cfg"
|
|
||||||
|
|
||||||
1
debian/osmocom-sgsn.examples
vendored
1
debian/osmocom-sgsn.examples
vendored
@@ -1 +0,0 @@
|
|||||||
openbsc/doc/examples/osmo-sgsn
|
|
||||||
150
debian/osmocom-sgsn.init
vendored
150
debian/osmocom-sgsn.init
vendored
@@ -1,150 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: osmo-sgsn
|
|
||||||
# Required-Start: $network $local_fs
|
|
||||||
# Required-Stop:
|
|
||||||
# Default-Start: 2 3 4 5
|
|
||||||
# Default-Stop: 0 1 6
|
|
||||||
# Short-Description: Osmocom Serving GPRS Support Node
|
|
||||||
# Description: Osmocom Serving 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
|
|
||||||
NAME=osmo-sgsn # Introduce the short server's name here
|
|
||||||
DESC="Osmocom Serving GPRS Support Node" # Introduce a short description here
|
|
||||||
DAEMON=/usr/bin/osmo-sgsn # Introduce the server's location here
|
|
||||||
SCRIPTNAME=/etc/init.d/osmocom-sgsn
|
|
||||||
|
|
||||||
# Exit if the package is not installed
|
|
||||||
[ -x $DAEMON ] || exit 0
|
|
||||||
|
|
||||||
# Read configuration variable file if it is present
|
|
||||||
[ -r /etc/default/osmocom-sgsn ] && . /etc/default/osmocom-sgsn
|
|
||||||
|
|
||||||
# Load the VERBOSE setting and other rcS variables
|
|
||||||
. /lib/init/vars.sh
|
|
||||||
|
|
||||||
# Define LSB log_* functions.
|
|
||||||
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
|
|
||||||
DAEMON_ARGS="$DAEMON_ARGS -D -c $CONFIG_FILE"
|
|
||||||
|
|
||||||
#
|
|
||||||
# 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 --exec $DAEMON --test > /dev/null \
|
|
||||||
|| return 1
|
|
||||||
start-stop-daemon --start --quiet --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 --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
|
|
||||||
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 --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
|
|
||||||
|
|
||||||
:
|
|
||||||
1
debian/osmocom-sgsn.install
vendored
1
debian/osmocom-sgsn.install
vendored
@@ -1 +0,0 @@
|
|||||||
/usr/bin/osmo-sgsn
|
|
||||||
48
debian/rules
vendored
48
debian/rules
vendored
@@ -1,32 +1,36 @@
|
|||||||
#!/usr/bin/make -f
|
#!/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
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
DEBIAN := $(shell dpkg-parsechangelog | grep '^Version:' | cut -d' ' -f2)
|
||||||
#export DH_VERBOSE=1
|
|
||||||
|
|
||||||
DEBIAN := $(shell dpkg-parsechangelog | grep ^Version: | cut -d' ' -f2)
|
|
||||||
DEBVERS := $(shell echo '$(DEBIAN)' | cut -d- -f1)
|
DEBVERS := $(shell echo '$(DEBIAN)' | cut -d- -f1)
|
||||||
VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/[+-].*//' -e 's/~//g')
|
VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/[+-].*//' -e 's/~//g')
|
||||||
|
|
||||||
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
CFLAGS += -g
|
||||||
|
|
||||||
|
# main packaging script based on dh7 syntax
|
||||||
%:
|
%:
|
||||||
dh $@ --sourcedirectory=openbsc --with autoreconf
|
dh $@ --with autoreconf
|
||||||
|
|
||||||
|
# debmake generated override targets
|
||||||
|
# Set options for ./configure
|
||||||
|
#CONFIGURE_FLAGS = <options for ./configure>
|
||||||
|
#overrride_dh_configure:
|
||||||
|
# dh_configure -- $(CONFIGURE_FLAGS)
|
||||||
|
#
|
||||||
|
# Do not install libtool archive, python .pyc .pyo
|
||||||
|
#override_dh_install:
|
||||||
|
# dh_install --list-missing -X.la -X.pyc -X.pyo
|
||||||
|
|
||||||
|
override_dh_auto_test:
|
||||||
|
dh_auto_test || (find . -name testsuite.log -exec cat {} \; ; false)
|
||||||
|
|
||||||
# This is needed for debian stable (squeeze)
|
|
||||||
override_dh_autoreconf:
|
override_dh_autoreconf:
|
||||||
cd openbsc && autoreconf --install --force
|
echo $(VERSION) > .tarball-version
|
||||||
|
dh_autoreconf
|
||||||
override_dh_strip:
|
|
||||||
dh_strip -posmocom-bsc --dbg-package=osmocom-bsc-dbg
|
|
||||||
dh_strip -posmocom-nitb --dbg-package=osmocom-nitb-dbg
|
|
||||||
dh_strip -posmocom-ipaccess-utils --dbg-package=osmocom-ipaccess-utils-dbg
|
|
||||||
dh_strip -posmocom-bs11-utils --dbg-package=osmocom-bs11-utils-dbg
|
|
||||||
dh_strip -posmocom-sgsn --dbg-package=osmocom-sgsn-dbg
|
|
||||||
dh_strip -posmocom-gbproxy --dbg-package=osmocom-gbproxy-dbg
|
|
||||||
dh_strip -posmocom-bsc-nat --dbg-package=osmocom-bsc-nat-dbg
|
|
||||||
dh_strip -posmo-gtphub --dbg-package=osmo-gtphub-dbg
|
|
||||||
|
|
||||||
override_dh_auto_configure:
|
|
||||||
echo $(VERSION) > openbsc/.tarball-version
|
|
||||||
dh_auto_configure --sourcedirectory=openbsc -- --enable-nat --enable-osmo-bsc --enable-smpp
|
|
||||||
|
|
||||||
|
# See https://www.debian.org/doc/manuals/developers-reference/best-pkging-practices.html#bpp-dbg
|
||||||
|
|||||||
14
doc/examples/osmo-bsc_mgcp/mgcp.cfg
Normal file
14
doc/examples/osmo-bsc_mgcp/mgcp.cfg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
!
|
||||||
|
! MGCP configuration example
|
||||||
|
!
|
||||||
|
mgcp
|
||||||
|
!local ip 10.23.24.2
|
||||||
|
!bts ip 10.24.24.1
|
||||||
|
!bind ip 10.23.24.1
|
||||||
|
bind port 2427
|
||||||
|
rtp base 4000
|
||||||
|
rtp force-ptime 20
|
||||||
|
sdp audio payload number 98
|
||||||
|
sdp audio payload name AMR/8000
|
||||||
|
number endpoints 31
|
||||||
|
no rtcp-omit
|
||||||
18
doc/examples/osmo-mgw/osmo-mgw.cfg
Normal file
18
doc/examples/osmo-mgw/osmo-mgw.cfg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
!
|
||||||
|
! MGCP configuration example
|
||||||
|
!
|
||||||
|
mgcp
|
||||||
|
bind ip 127.0.0.1
|
||||||
|
rtp port-range 4002 16000
|
||||||
|
rtp bind-ip 10.9.1.122
|
||||||
|
rtp ip-probing
|
||||||
|
rtp ip-tos 184
|
||||||
|
bind port 2427
|
||||||
|
sdp audio payload number 98
|
||||||
|
sdp audio payload name GSM
|
||||||
|
number endpoints 31
|
||||||
|
loop 0
|
||||||
|
force-realloc 1
|
||||||
|
rtcp-omit
|
||||||
|
rtp-patch ssrc
|
||||||
|
rtp-patch timestamp
|
||||||
@@ -92,7 +92,7 @@ fi
|
|||||||
if test -n "$v"
|
if test -n "$v"
|
||||||
then
|
then
|
||||||
: # use $v
|
: # use $v
|
||||||
elif test -d ./../.git \
|
elif test -d ./.git \
|
||||||
&& v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \
|
&& v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \
|
||||||
|| git describe --abbrev=4 HEAD 2>/dev/null` \
|
|| git describe --abbrev=4 HEAD 2>/dev/null` \
|
||||||
&& case $v in
|
&& case $v in
|
||||||
16
include/Makefile.am
Normal file
16
include/Makefile.am
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
SUBDIRS = \
|
||||||
|
osmocom \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
nobase_include_HEADERS = \
|
||||||
|
osmocom/legacy_mgcp/mgcp.h \
|
||||||
|
osmocom/legacy_mgcp/mgcp_internal.h \
|
||||||
|
osmocom/legacy_mgcp/osmux.h \
|
||||||
|
osmocom/mgcp_client/mgcp_client.h \
|
||||||
|
osmocom/mgcp_client/mgcp_client_fsm.h \
|
||||||
|
osmocom/mgcp_client/mgcp_common.h \
|
||||||
|
osmocom/mgcp/mgcp.h \
|
||||||
|
osmocom/mgcp/mgcp_common.h \
|
||||||
|
osmocom/mgcp/mgcp_internal.h \
|
||||||
|
osmocom/mgcp/osmux.h \
|
||||||
|
$(NULL)
|
||||||
5
include/osmocom/Makefile.am
Normal file
5
include/osmocom/Makefile.am
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
SUBDIRS = \
|
||||||
|
legacy_mgcp \
|
||||||
|
mgcp_client \
|
||||||
|
mgcp \
|
||||||
|
$(NULL)
|
||||||
4
include/osmocom/legacy_mgcp/Makefile.am
Normal file
4
include/osmocom/legacy_mgcp/Makefile.am
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
noinst_HEADERS = \
|
||||||
|
mgcp_transcode.h \
|
||||||
|
vty.h \
|
||||||
|
$(NULL)
|
||||||
@@ -26,8 +26,7 @@
|
|||||||
#include <osmocom/core/msgb.h>
|
#include <osmocom/core/msgb.h>
|
||||||
#include <osmocom/core/write_queue.h>
|
#include <osmocom/core/write_queue.h>
|
||||||
#include <osmocom/core/timer.h>
|
#include <osmocom/core/timer.h>
|
||||||
|
#include <osmocom/core/logging.h>
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -170,6 +169,14 @@ enum mgcp_role {
|
|||||||
MGCP_BSC_NAT,
|
MGCP_BSC_NAT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum mgcp_connection_mode {
|
||||||
|
MGCP_CONN_NONE = 0,
|
||||||
|
MGCP_CONN_RECV_ONLY = 1,
|
||||||
|
MGCP_CONN_SEND_ONLY = 2,
|
||||||
|
MGCP_CONN_RECV_SEND = MGCP_CONN_RECV_ONLY | MGCP_CONN_SEND_ONLY,
|
||||||
|
MGCP_CONN_LOOPBACK = 4 | MGCP_CONN_RECV_SEND,
|
||||||
|
};
|
||||||
|
|
||||||
struct mgcp_config {
|
struct mgcp_config {
|
||||||
int source_port;
|
int source_port;
|
||||||
char *local_ip;
|
char *local_ip;
|
||||||
@@ -261,7 +268,7 @@ struct msgb *mgcp_handle_message(struct mgcp_config *cfg, struct msgb *msg);
|
|||||||
static inline int mgcp_timeslot_to_endpoint(int multiplex, int timeslot)
|
static inline int mgcp_timeslot_to_endpoint(int multiplex, int timeslot)
|
||||||
{
|
{
|
||||||
if (timeslot == 0) {
|
if (timeslot == 0) {
|
||||||
LOGP(DMGCP, LOGL_ERROR, "Timeslot should not be 0\n");
|
LOGP(DLMGCP, LOGL_ERROR, "Timeslot should not be 0\n");
|
||||||
timeslot = 255;
|
timeslot = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,14 +28,6 @@
|
|||||||
|
|
||||||
#define CI_UNUSED 0
|
#define CI_UNUSED 0
|
||||||
|
|
||||||
enum mgcp_connection_mode {
|
|
||||||
MGCP_CONN_NONE = 0,
|
|
||||||
MGCP_CONN_RECV_ONLY = 1,
|
|
||||||
MGCP_CONN_SEND_ONLY = 2,
|
|
||||||
MGCP_CONN_RECV_SEND = MGCP_CONN_RECV_ONLY | MGCP_CONN_SEND_ONLY,
|
|
||||||
MGCP_CONN_LOOPBACK = 4 | MGCP_CONN_RECV_SEND,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum mgcp_trunk_type {
|
enum mgcp_trunk_type {
|
||||||
MGCP_TRUNK_VIRTUAL,
|
MGCP_TRUNK_VIRTUAL,
|
||||||
MGCP_TRUNK_E1,
|
MGCP_TRUNK_E1,
|
||||||
@@ -72,6 +64,7 @@ struct mgcp_rtp_state {
|
|||||||
uint32_t stats_jitter;
|
uint32_t stats_jitter;
|
||||||
int32_t stats_transit;
|
int32_t stats_transit;
|
||||||
int stats_cycles;
|
int stats_cycles;
|
||||||
|
bool patched_first_rtp_payload; /* FIXME: drop this, see OS#2459 */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mgcp_rtp_codec {
|
struct mgcp_rtp_codec {
|
||||||
@@ -150,7 +143,7 @@ enum mgcp_type {
|
|||||||
MGCP_OSMUX_BSC_NAT,
|
MGCP_OSMUX_BSC_NAT,
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <openbsc/osmux.h>
|
#include <osmocom/legacy_mgcp/osmux.h>
|
||||||
|
|
||||||
struct mgcp_endpoint {
|
struct mgcp_endpoint {
|
||||||
int allocated;
|
int allocated;
|
||||||
@@ -340,3 +333,5 @@ static inline const char *mgcp_bts_src_addr(struct mgcp_endpoint *endp)
|
|||||||
return endp->cfg->bts_ports.bind_addr;
|
return endp->cfg->bts_ports.bind_addr;
|
||||||
return endp->cfg->source_addr;
|
return endp->cfg->source_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mgcp_msg_terminate_nul(struct msgb *msg);
|
||||||
@@ -11,8 +11,7 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int osmux_init(int role, struct mgcp_config *cfg);
|
int osmux_init(int role, struct mgcp_config *cfg);
|
||||||
int osmux_enable_endpoint(struct mgcp_endpoint *endp, int role,
|
int osmux_enable_endpoint(struct mgcp_endpoint *endp, struct in_addr *addr, uint16_t port);
|
||||||
struct in_addr *addr, uint16_t port);
|
|
||||||
void osmux_disable_endpoint(struct mgcp_endpoint *endp);
|
void osmux_disable_endpoint(struct mgcp_endpoint *endp);
|
||||||
void osmux_allocate_cid(struct mgcp_endpoint *endp);
|
void osmux_allocate_cid(struct mgcp_endpoint *endp);
|
||||||
void osmux_release_cid(struct mgcp_endpoint *endp);
|
void osmux_release_cid(struct mgcp_endpoint *endp);
|
||||||
8
include/osmocom/legacy_mgcp/vty.h
Normal file
8
include/osmocom/legacy_mgcp/vty.h
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <osmocom/vty/command.h>
|
||||||
|
|
||||||
|
enum mgcp_vty_node {
|
||||||
|
MGCP_NODE = _LAST_OSMOVTY_NODE + 1,
|
||||||
|
TRUNK_NODE,
|
||||||
|
};
|
||||||
9
include/osmocom/mgcp/Makefile.am
Normal file
9
include/osmocom/mgcp/Makefile.am
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
noinst_HEADERS = \
|
||||||
|
vty.h \
|
||||||
|
mgcp_msg.h \
|
||||||
|
mgcp_conn.h \
|
||||||
|
mgcp_stat.h \
|
||||||
|
mgcp_endp.h \
|
||||||
|
mgcp_sdp.h \
|
||||||
|
debug.h \
|
||||||
|
$(NULL)
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
/* (C) 2008 by Harald Welte <laforge@gnumonks.org>
|
/* (C) 2017 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*
|
*
|
||||||
|
* Author: Philipp Maier
|
||||||
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
@@ -16,12 +18,18 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MISDN_H
|
#pragma once
|
||||||
#define MISDN_H
|
|
||||||
|
|
||||||
#include <osmocom/abis/e1_input.h>
|
#include <stdio.h>
|
||||||
|
#include <osmocom/core/linuxlist.h>
|
||||||
|
|
||||||
int mi_setup(int cardnr, struct e1inp_line *line, int release_l2);
|
#define DEBUG
|
||||||
int mi_e1_line_update(struct e1inp_line *line);
|
#include <osmocom/core/logging.h>
|
||||||
|
|
||||||
#endif
|
/* Debug Areas of the code */
|
||||||
|
enum {
|
||||||
|
DRTP,
|
||||||
|
Debug_LastEntry,
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const struct log_info log_info;
|
||||||
238
include/osmocom/mgcp/mgcp.h
Normal file
238
include/osmocom/mgcp/mgcp.h
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
/* A Media Gateway Control Protocol Media Gateway: RFC 3435 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (C) 2009-2012 by Holger Hans Peter Freyther <zecke@selfish.org>
|
||||||
|
* (C) 2009-2012 by On-Waves
|
||||||
|
* 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/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <osmocom/core/msgb.h>
|
||||||
|
#include <osmocom/core/write_queue.h>
|
||||||
|
#include <osmocom/core/timer.h>
|
||||||
|
#include <osmocom/core/logging.h>
|
||||||
|
|
||||||
|
#include <osmocom/mgcp/mgcp_common.h>
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
#define RTP_PORT_DEFAULT_RANGE_START 16002
|
||||||
|
#define RTP_PORT_DEFAULT_RANGE_END RTP_PORT_DEFAULT_RANGE_START + 64
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handling of MGCP Endpoints and the MGCP Config
|
||||||
|
*/
|
||||||
|
struct mgcp_endpoint;
|
||||||
|
struct mgcp_config;
|
||||||
|
struct mgcp_trunk_config;
|
||||||
|
struct mgcp_rtp_end;
|
||||||
|
|
||||||
|
#define MGCP_ENDP_CRCX 1
|
||||||
|
#define MGCP_ENDP_DLCX 2
|
||||||
|
#define MGCP_ENDP_MDCX 3
|
||||||
|
|
||||||
|
/*
|
||||||
|
* what to do with the msg?
|
||||||
|
* - continue as usual?
|
||||||
|
* - reject and send a failure code?
|
||||||
|
* - defer? do not send anything
|
||||||
|
*/
|
||||||
|
#define MGCP_POLICY_CONT 4
|
||||||
|
#define MGCP_POLICY_REJECT 5
|
||||||
|
#define MGCP_POLICY_DEFER 6
|
||||||
|
|
||||||
|
typedef int (*mgcp_realloc)(struct mgcp_trunk_config *cfg, int endpoint);
|
||||||
|
typedef int (*mgcp_change)(struct mgcp_trunk_config *cfg, int endpoint, int state);
|
||||||
|
typedef int (*mgcp_policy)(struct mgcp_trunk_config *cfg, int endpoint, int state, const char *transactio_id);
|
||||||
|
typedef int (*mgcp_reset)(struct mgcp_trunk_config *cfg);
|
||||||
|
typedef int (*mgcp_rqnt)(struct mgcp_endpoint *endp, char tone);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return:
|
||||||
|
* < 0 in case no audio was processed
|
||||||
|
* >= 0 in case audio was processed. The remaining payload
|
||||||
|
* length will be returned.
|
||||||
|
*/
|
||||||
|
typedef int (*mgcp_processing)(struct mgcp_endpoint *endp,
|
||||||
|
struct mgcp_rtp_end *dst_end,
|
||||||
|
char *data, int *len, int buf_size);
|
||||||
|
typedef int (*mgcp_processing_setup)(struct mgcp_endpoint *endp,
|
||||||
|
struct mgcp_rtp_end *dst_end,
|
||||||
|
struct mgcp_rtp_end *src_end);
|
||||||
|
|
||||||
|
struct mgcp_conn_rtp;
|
||||||
|
typedef void (*mgcp_get_format)(struct mgcp_endpoint *endp,
|
||||||
|
int *payload_type,
|
||||||
|
const char**subtype_name,
|
||||||
|
const char**fmtp_extra,
|
||||||
|
struct mgcp_conn_rtp *conn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This holds information on how to allocate ports
|
||||||
|
*/
|
||||||
|
struct mgcp_port_range {
|
||||||
|
/* addr or NULL to fall-back to default */
|
||||||
|
char *bind_addr;
|
||||||
|
|
||||||
|
/* dynamically allocated */
|
||||||
|
int range_start;
|
||||||
|
int range_end;
|
||||||
|
int last_port;
|
||||||
|
|
||||||
|
/* set to true to enable automatic probing
|
||||||
|
* of the local bind IP-Address, bind_addr
|
||||||
|
* (or its fall back) is used when automatic
|
||||||
|
* probing fails */
|
||||||
|
bool bind_addr_probe;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* There are up to three modes in which the keep-alive dummy packet can be
|
||||||
|
* sent. The behaviour is controlled via the keepalive_interval member of the
|
||||||
|
* trunk config. If that member is set to 0 (MGCP_KEEPALIVE_NEVER) no dummy-
|
||||||
|
* packet is sent at all and the timer that sends regular dummy packets
|
||||||
|
* is no longer scheduled. If the keepalive_interval is set to -1, only
|
||||||
|
* one dummy packet is sent when an CRCX or an MDCX is performed. No timer
|
||||||
|
* is scheduled. For all vales greater 0, the timer is scheduled and the
|
||||||
|
* value is used as interval. See also mgcp_keepalive_timer_cb(),
|
||||||
|
* handle_modify_con(), and handle_create_con() */
|
||||||
|
#define MGCP_KEEPALIVE_ONCE (-1)
|
||||||
|
#define MGCP_KEEPALIVE_NEVER 0
|
||||||
|
|
||||||
|
struct mgcp_trunk_config {
|
||||||
|
struct llist_head entry;
|
||||||
|
|
||||||
|
struct mgcp_config *cfg;
|
||||||
|
|
||||||
|
int trunk_nr;
|
||||||
|
int trunk_type;
|
||||||
|
|
||||||
|
char *audio_fmtp_extra;
|
||||||
|
char *audio_name;
|
||||||
|
int audio_payload;
|
||||||
|
int audio_send_ptime;
|
||||||
|
int audio_send_name;
|
||||||
|
int audio_loop;
|
||||||
|
|
||||||
|
int no_audio_transcoding;
|
||||||
|
|
||||||
|
int omit_rtcp;
|
||||||
|
int keepalive_interval;
|
||||||
|
|
||||||
|
/* RTP patching */
|
||||||
|
int force_constant_ssrc; /* 0: don't, 1: once */
|
||||||
|
int force_aligned_timing;
|
||||||
|
|
||||||
|
/* spec handling */
|
||||||
|
int force_realloc;
|
||||||
|
|
||||||
|
/* timer */
|
||||||
|
struct osmo_timer_list keepalive_timer;
|
||||||
|
|
||||||
|
/* When set, incoming RTP packets are not filtered
|
||||||
|
* when ports and ip-address do not match (debug) */
|
||||||
|
int rtp_accept_all;
|
||||||
|
|
||||||
|
unsigned int number_endpoints;
|
||||||
|
int vty_number_endpoints;
|
||||||
|
struct mgcp_endpoint *endpoints;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum mgcp_role {
|
||||||
|
MGCP_BSC = 0,
|
||||||
|
MGCP_BSC_NAT,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_config {
|
||||||
|
int source_port;
|
||||||
|
char *local_ip;
|
||||||
|
char *source_addr;
|
||||||
|
char *call_agent_addr;
|
||||||
|
|
||||||
|
/* RTP processing */
|
||||||
|
mgcp_processing rtp_processing_cb;
|
||||||
|
mgcp_processing_setup setup_rtp_processing_cb;
|
||||||
|
|
||||||
|
mgcp_get_format get_net_downlink_format_cb;
|
||||||
|
|
||||||
|
struct osmo_wqueue gw_fd;
|
||||||
|
|
||||||
|
struct mgcp_port_range net_ports;
|
||||||
|
int endp_dscp;
|
||||||
|
|
||||||
|
int force_ptime;
|
||||||
|
|
||||||
|
mgcp_change change_cb;
|
||||||
|
mgcp_policy policy_cb;
|
||||||
|
mgcp_reset reset_cb;
|
||||||
|
mgcp_realloc realloc_cb;
|
||||||
|
mgcp_rqnt rqnt_cb;
|
||||||
|
void *data;
|
||||||
|
|
||||||
|
uint32_t last_call_id;
|
||||||
|
|
||||||
|
/* trunk handling */
|
||||||
|
struct mgcp_trunk_config trunk;
|
||||||
|
struct llist_head trunks;
|
||||||
|
|
||||||
|
enum mgcp_role role;
|
||||||
|
|
||||||
|
/* osmux translator: 0 means disabled, 1 means enabled */
|
||||||
|
int osmux;
|
||||||
|
/* addr to bind the server to */
|
||||||
|
char *osmux_addr;
|
||||||
|
/* The BSC-NAT may ask for enabling osmux on demand. This tells us if
|
||||||
|
* the osmux socket is already initialized.
|
||||||
|
*/
|
||||||
|
int osmux_init;
|
||||||
|
/* osmux batch factor: from 1 to 4 maximum */
|
||||||
|
int osmux_batch;
|
||||||
|
/* osmux batch size (in bytes) */
|
||||||
|
int osmux_batch_size;
|
||||||
|
/* osmux port */
|
||||||
|
uint16_t osmux_port;
|
||||||
|
/* Pad circuit with dummy messages until we see the first voice
|
||||||
|
* message.
|
||||||
|
*/
|
||||||
|
uint16_t osmux_dummy;
|
||||||
|
/* domain name of the media gateway */
|
||||||
|
char domain[255+1];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* config management */
|
||||||
|
struct mgcp_config *mgcp_config_alloc(void);
|
||||||
|
int mgcp_parse_config(const char *config_file, struct mgcp_config *cfg,
|
||||||
|
enum mgcp_role role);
|
||||||
|
int mgcp_vty_init(void);
|
||||||
|
int mgcp_endpoints_allocate(struct mgcp_trunk_config *cfg);
|
||||||
|
void mgcp_trunk_set_keepalive(struct mgcp_trunk_config *tcfg, int interval);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* format helper functions
|
||||||
|
*/
|
||||||
|
struct msgb *mgcp_handle_message(struct mgcp_config *cfg, struct msgb *msg);
|
||||||
|
|
||||||
|
|
||||||
|
int mgcp_send_reset_ep(struct mgcp_endpoint *endp, int endpoint);
|
||||||
|
int mgcp_send_reset_all(struct mgcp_config *cfg);
|
||||||
|
|
||||||
|
|
||||||
|
int mgcp_create_bind(const char *source_addr, struct osmo_fd *fd, int port);
|
||||||
|
int mgcp_udp_send(int fd, struct in_addr *addr, int port, char *buf, int len);
|
||||||
85
include/osmocom/mgcp/mgcp_common.h
Normal file
85
include/osmocom/mgcp/mgcp_common.h
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/* MGCP common implementations.
|
||||||
|
* These are used in libosmo-mgcp as well as libosmo-mgcp-client.
|
||||||
|
* To avoid interdependency, these are implemented in .h file only. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (C) 2017 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
|
* (C) 2009-2012 by Holger Hans Peter Freyther <zecke@selfish.org>
|
||||||
|
* (C) 2009-2012 by On-Waves
|
||||||
|
* 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/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Two copies of this file are kept in osmocom/mgcp/ and osmocom/mgcp_client/.
|
||||||
|
* Since both are by definition identical, use the old header exclusion ifdefs
|
||||||
|
* instead of '#pragma once' to avoid including both of these files.
|
||||||
|
* Though at the time of writing there are no such users, this allows including
|
||||||
|
* both libosmo-mgcp and libosmo-mgcp-client headers in the same file. */
|
||||||
|
#ifndef OSMO_MGCP_COMMON_H
|
||||||
|
#define OSMO_MGCP_COMMON_H
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <osmocom/core/msgb.h>
|
||||||
|
#include <osmocom/core/logging.h>
|
||||||
|
|
||||||
|
#define for_each_non_empty_line(line, save) \
|
||||||
|
for (line = strtok_r(NULL, "\r\n", &save); line; \
|
||||||
|
line = strtok_r(NULL, "\r\n", &save))
|
||||||
|
|
||||||
|
enum mgcp_connection_mode {
|
||||||
|
MGCP_CONN_NONE = 0,
|
||||||
|
MGCP_CONN_RECV_ONLY = 1,
|
||||||
|
MGCP_CONN_SEND_ONLY = 2,
|
||||||
|
MGCP_CONN_RECV_SEND = MGCP_CONN_RECV_ONLY | MGCP_CONN_SEND_ONLY,
|
||||||
|
MGCP_CONN_LOOPBACK = 4 | MGCP_CONN_RECV_SEND,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Ensure that the msg->l2h is NUL terminated. */
|
||||||
|
static inline int mgcp_msg_terminate_nul(struct msgb *msg)
|
||||||
|
{
|
||||||
|
unsigned char *tail = msg->l2h + msgb_l2len(msg); /* char after l2 data */
|
||||||
|
if (tail[-1] == '\0')
|
||||||
|
/* nothing to do */;
|
||||||
|
else if (msgb_tailroom(msg) > 0)
|
||||||
|
tail[0] = '\0';
|
||||||
|
else if (tail[-1] == '\r' || tail[-1] == '\n')
|
||||||
|
tail[-1] = '\0';
|
||||||
|
else {
|
||||||
|
LOGP(DLMGCP, LOGL_ERROR, "Cannot NUL terminate MGCP message: "
|
||||||
|
"Length: %d, Buffer size: %d\n",
|
||||||
|
msgb_l2len(msg), msg->data_len);
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Maximum length of the comment field */
|
||||||
|
#define MGCP_COMMENT_MAXLEN 256
|
||||||
|
|
||||||
|
/* String length of Connection Identifiers
|
||||||
|
* (see also RFC3435 2.1.3.2 Names of Connections) */
|
||||||
|
#define MGCP_CONN_ID_LENGTH 32+1
|
||||||
|
|
||||||
|
/* String length of Endpoint Identifiers.
|
||||||
|
/ (see also RFC3435 section 3.2.1.3) */
|
||||||
|
#define MGCP_ENDPOINT_MAXLEN (255*2+1+1)
|
||||||
|
|
||||||
|
/* A prefix to denote the virtual trunk (RTP on both ends) */
|
||||||
|
#define MGCP_ENDPOINT_PREFIX_VIRTUAL_TRUNK "rtpbridge/"
|
||||||
|
|
||||||
|
#endif
|
||||||
39
include/osmocom/mgcp/mgcp_conn.h
Normal file
39
include/osmocom/mgcp/mgcp_conn.h
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/* Message connection list handling */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (C) 2017 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* Author: Philipp Maier
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <osmocom/mgcp/mgcp_internal.h>
|
||||||
|
#include <osmocom/core/linuxlist.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp,
|
||||||
|
enum mgcp_conn_type type, char *name);
|
||||||
|
struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, const char *id);
|
||||||
|
struct mgcp_conn_rtp *mgcp_conn_get_rtp(struct mgcp_endpoint *endp,
|
||||||
|
const char *id);
|
||||||
|
void mgcp_conn_free(struct mgcp_endpoint *endp, const char *id);
|
||||||
|
void mgcp_conn_free_oldest(struct mgcp_endpoint *endp);
|
||||||
|
void mgcp_conn_free_all(struct mgcp_endpoint *endp);
|
||||||
|
char *mgcp_conn_dump(struct mgcp_conn *conn);
|
||||||
|
struct mgcp_conn *mgcp_find_dst_conn(struct mgcp_conn *conn);
|
||||||
99
include/osmocom/mgcp/mgcp_endp.h
Normal file
99
include/osmocom/mgcp/mgcp_endp.h
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/* Endpoint types */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (C) 2017 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* Author: Philipp Maier
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct sockaddr_in;
|
||||||
|
struct mgcp_conn;
|
||||||
|
struct mgcp_endpoint;
|
||||||
|
|
||||||
|
/* Callback type for RTP dispatcher functions
|
||||||
|
(e.g mgcp_dispatch_rtp_bridge_cb, see below) */
|
||||||
|
typedef int (*mgcp_dispatch_rtp_cb) (int proto, struct sockaddr_in *addr,
|
||||||
|
char *buf, unsigned int buf_size,
|
||||||
|
struct mgcp_conn *conn);
|
||||||
|
|
||||||
|
/* Callback type for endpoint specific cleanup actions. This function
|
||||||
|
* is automatically executed when a connection is freed (see mgcp_conn_free()
|
||||||
|
* in mgcp_conn.c). Depending on the type of the endpoint there may be endpoint
|
||||||
|
* specific things to take care of once a connection has been removed. */
|
||||||
|
typedef void (*mgcp_cleanup_cp) (struct mgcp_endpoint *endp,
|
||||||
|
struct mgcp_conn *conn);
|
||||||
|
|
||||||
|
/*! MGCP endpoint properties */
|
||||||
|
struct mgcp_endpoint_type {
|
||||||
|
/*!< maximum number of connections */
|
||||||
|
int max_conns;
|
||||||
|
|
||||||
|
/*!< callback that defines how to dispatch incoming RTP data */
|
||||||
|
mgcp_dispatch_rtp_cb dispatch_rtp_cb;
|
||||||
|
|
||||||
|
/*!< callback that implements endpoint specific cleanup actions */
|
||||||
|
mgcp_cleanup_cp cleanup_cb;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! MGCP endpoint typeset */
|
||||||
|
struct mgcp_endpoint_typeset {
|
||||||
|
struct mgcp_endpoint_type rtp;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! static MGCP endpoint typeset (pre-initalized, read-only) */
|
||||||
|
extern const struct mgcp_endpoint_typeset ep_typeset;
|
||||||
|
|
||||||
|
/*! MGCP endpoint model */
|
||||||
|
struct mgcp_endpoint {
|
||||||
|
|
||||||
|
/*!< Call identifier string (as supplied by the call agant) */
|
||||||
|
char *callid;
|
||||||
|
|
||||||
|
/*!< Local connection options (see mgcp_intermal.h) */
|
||||||
|
struct mgcp_lco local_options;
|
||||||
|
|
||||||
|
/*!< List with connections active on this endpoint */
|
||||||
|
struct llist_head conns;
|
||||||
|
|
||||||
|
/*!< Backpointer to the MGW configuration */
|
||||||
|
struct mgcp_config *cfg;
|
||||||
|
|
||||||
|
/*!< Backpointer to the Trunk specific configuration */
|
||||||
|
struct mgcp_trunk_config *tcfg;
|
||||||
|
|
||||||
|
/*!< Endpoint properties (see above) */
|
||||||
|
const struct mgcp_endpoint_type *type;
|
||||||
|
|
||||||
|
/*!< Last MGCP transmission (in case re-transmission is required) */
|
||||||
|
char *last_trans;
|
||||||
|
|
||||||
|
/*!< Last MGCP response (in case re-transmission is required) */
|
||||||
|
char *last_response;
|
||||||
|
|
||||||
|
/*!< Memorize if this endpoint was choosen by the MGW (wildcarded, true)
|
||||||
|
* or if the user has choosen the particular endpoint explicitly. */
|
||||||
|
bool wildcarded_req;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! Extract endpoint number for a given endpoint */
|
||||||
|
#define ENDPOINT_NUMBER(endp) abs((int)(endp - endp->tcfg->endpoints))
|
||||||
|
|
||||||
|
void mgcp_endp_release(struct mgcp_endpoint *endp);
|
||||||
|
|
||||||
330
include/osmocom/mgcp/mgcp_internal.h
Normal file
330
include/osmocom/mgcp/mgcp_internal.h
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
/* MGCP Private Data */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (C) 2009-2012 by Holger Hans Peter Freyther <zecke@selfish.org>
|
||||||
|
* (C) 2009-2012 by On-Waves
|
||||||
|
* 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/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <osmocom/core/select.h>
|
||||||
|
#include <osmocom/mgcp/mgcp.h>
|
||||||
|
#include <osmocom/core/linuxlist.h>
|
||||||
|
#include <osmocom/core/counter.h>
|
||||||
|
|
||||||
|
#define CI_UNUSED 0
|
||||||
|
|
||||||
|
/* FIXME: This this is only needed to compile the currently
|
||||||
|
* broken OSMUX support. Remove when fixed */
|
||||||
|
#define CONN_ID_BTS "0"
|
||||||
|
#define CONN_ID_NET "1"
|
||||||
|
|
||||||
|
enum mgcp_trunk_type {
|
||||||
|
MGCP_TRUNK_VIRTUAL,
|
||||||
|
MGCP_TRUNK_E1,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_rtp_stream_state {
|
||||||
|
uint32_t ssrc;
|
||||||
|
uint16_t last_seq;
|
||||||
|
uint32_t last_timestamp;
|
||||||
|
uint32_t err_ts_counter;
|
||||||
|
int32_t last_tsdelta;
|
||||||
|
uint32_t last_arrival_time;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_rtp_state {
|
||||||
|
/* has this state structure been initialized? */
|
||||||
|
int initialized;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
/* are we patching the SSRC value? */
|
||||||
|
int patch_ssrc;
|
||||||
|
/* original SSRC (to which we shall patch any different SSRC) */
|
||||||
|
uint32_t orig_ssrc;
|
||||||
|
/* offset to apply on the sequence number */
|
||||||
|
int seq_offset;
|
||||||
|
/* offset to apply on the timestamp number */
|
||||||
|
int32_t timestamp_offset;
|
||||||
|
} patch;
|
||||||
|
|
||||||
|
/* duration of a packet (FIXME: in which unit?) */
|
||||||
|
uint32_t packet_duration;
|
||||||
|
|
||||||
|
struct mgcp_rtp_stream_state in_stream;
|
||||||
|
struct mgcp_rtp_stream_state out_stream;
|
||||||
|
|
||||||
|
/* jitter and packet loss calculation */
|
||||||
|
struct {
|
||||||
|
int initialized;
|
||||||
|
uint16_t base_seq;
|
||||||
|
uint16_t max_seq;
|
||||||
|
uint32_t ssrc;
|
||||||
|
uint32_t jitter;
|
||||||
|
int32_t transit;
|
||||||
|
int cycles;
|
||||||
|
} stats;
|
||||||
|
|
||||||
|
bool patched_first_rtp_payload; /* FIXME: drop this, see OS#2459 */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_rtp_codec {
|
||||||
|
uint32_t rate;
|
||||||
|
int channels;
|
||||||
|
uint32_t frame_duration_num;
|
||||||
|
uint32_t frame_duration_den;
|
||||||
|
|
||||||
|
int payload_type;
|
||||||
|
char *audio_name;
|
||||||
|
char *subtype_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 'mgcp_rtp_end': basically a wrapper around the RTP+RTCP ports */
|
||||||
|
struct mgcp_rtp_end {
|
||||||
|
/* statistics */
|
||||||
|
struct {
|
||||||
|
unsigned int packets_rx;
|
||||||
|
unsigned int octets_rx;
|
||||||
|
unsigned int packets_tx;
|
||||||
|
unsigned int octets_tx;
|
||||||
|
unsigned int dropped_packets;
|
||||||
|
} stats;
|
||||||
|
|
||||||
|
/* local IP address of the RTP socket */
|
||||||
|
struct in_addr addr;
|
||||||
|
|
||||||
|
/* in network byte order */
|
||||||
|
int rtp_port, rtcp_port;
|
||||||
|
|
||||||
|
/* audio codec information */
|
||||||
|
struct mgcp_rtp_codec codec;
|
||||||
|
struct mgcp_rtp_codec alt_codec; /* TODO/XXX: make it generic */
|
||||||
|
|
||||||
|
/* per endpoint data */
|
||||||
|
int frames_per_packet;
|
||||||
|
uint32_t packet_duration_ms;
|
||||||
|
char *fmtp_extra;
|
||||||
|
/* are we transmitting packets (1) or dropping (0) outbound packets */
|
||||||
|
int output_enabled;
|
||||||
|
/* FIXME: This parameter can be set + printed, but is nowhere used! */
|
||||||
|
int force_output_ptime;
|
||||||
|
|
||||||
|
/* RTP patching */
|
||||||
|
int force_constant_ssrc; /* -1: always, 0: don't, 1: once */
|
||||||
|
/* should we perform align_rtp_timestamp_offset() (1) or not (0) */
|
||||||
|
int force_aligned_timing;
|
||||||
|
/* FIXME: not used anymore, used to be [external] transcoding related */
|
||||||
|
void *rtp_process_data;
|
||||||
|
|
||||||
|
/* Each end has a separate socket for RTP and RTCP */
|
||||||
|
struct osmo_fd rtp;
|
||||||
|
struct osmo_fd rtcp;
|
||||||
|
|
||||||
|
/* local UDP port number of the RTP socket; RTCP is +1 */
|
||||||
|
int local_port;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_rtp_tap {
|
||||||
|
/* is this tap active (1) or not (0) */
|
||||||
|
int enabled;
|
||||||
|
/* IP/port to which we're forwarding the tapped data */
|
||||||
|
struct sockaddr_in forward;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_lco {
|
||||||
|
char *string;
|
||||||
|
char *codec;
|
||||||
|
int pkt_period_min; /* time in ms */
|
||||||
|
int pkt_period_max; /* time in ms */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Specific rtp connection type (see struct mgcp_conn_rtp) */
|
||||||
|
enum mgcp_conn_rtp_type {
|
||||||
|
MGCP_RTP_DEFAULT = 0,
|
||||||
|
MGCP_OSMUX_BSC,
|
||||||
|
MGCP_OSMUX_BSC_NAT,
|
||||||
|
};
|
||||||
|
|
||||||
|
#include <osmocom/mgcp/osmux.h>
|
||||||
|
struct mgcp_conn;
|
||||||
|
|
||||||
|
/* MGCP connection (RTP) */
|
||||||
|
struct mgcp_conn_rtp {
|
||||||
|
|
||||||
|
/* Backpointer to conn struct */
|
||||||
|
struct mgcp_conn *conn;
|
||||||
|
|
||||||
|
/* Specific connection type */
|
||||||
|
enum mgcp_conn_rtp_type type;
|
||||||
|
|
||||||
|
/* Port status */
|
||||||
|
struct mgcp_rtp_end end;
|
||||||
|
|
||||||
|
/* Sequence bits */
|
||||||
|
struct mgcp_rtp_state state;
|
||||||
|
|
||||||
|
/* taps for the rtp connection; one per direction */
|
||||||
|
struct mgcp_rtp_tap tap_in;
|
||||||
|
struct mgcp_rtp_tap tap_out;
|
||||||
|
|
||||||
|
/* Osmux states (optional) */
|
||||||
|
struct {
|
||||||
|
/* Osmux state: disabled, activating, active */
|
||||||
|
enum osmux_state state;
|
||||||
|
/* Allocated Osmux circuit ID for this endpoint */
|
||||||
|
int allocated_cid;
|
||||||
|
/* Used Osmux circuit ID for this endpoint */
|
||||||
|
uint8_t cid;
|
||||||
|
/* handle to batch messages */
|
||||||
|
struct osmux_in_handle *in;
|
||||||
|
/* handle to unbatch messages */
|
||||||
|
struct osmux_out_handle out;
|
||||||
|
/* statistics */
|
||||||
|
struct {
|
||||||
|
uint32_t chunks;
|
||||||
|
uint32_t octets;
|
||||||
|
} stats;
|
||||||
|
} osmux;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! Connection type, specifies which member of the union "u" in mgcp_conn
|
||||||
|
* contains a useful connection description (currently only RTP) */
|
||||||
|
enum mgcp_conn_type {
|
||||||
|
MGCP_CONN_TYPE_RTP,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*! MGCP connection (untyped) */
|
||||||
|
struct mgcp_conn {
|
||||||
|
/*!< list head */
|
||||||
|
struct llist_head entry;
|
||||||
|
|
||||||
|
/*!< Backpointer to the endpoint where the conn belongs to */
|
||||||
|
struct mgcp_endpoint *endp;
|
||||||
|
|
||||||
|
/*!< type of the connection (union) */
|
||||||
|
enum mgcp_conn_type type;
|
||||||
|
|
||||||
|
/*!< mode of the connection */
|
||||||
|
enum mgcp_connection_mode mode;
|
||||||
|
|
||||||
|
/*!< copy of the mode to restore the original setting (VTY) */
|
||||||
|
enum mgcp_connection_mode mode_orig;
|
||||||
|
|
||||||
|
/*!< connection id to identify the connection */
|
||||||
|
char id[MGCP_CONN_ID_LENGTH];
|
||||||
|
|
||||||
|
/*!< human readable name (vty, logging) */
|
||||||
|
char name[256];
|
||||||
|
|
||||||
|
/*!< union with connection description */
|
||||||
|
union {
|
||||||
|
struct mgcp_conn_rtp rtp;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
/*!< pointer to optional private data */
|
||||||
|
void *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
#include <osmocom/mgcp/mgcp_conn.h>
|
||||||
|
|
||||||
|
struct mgcp_endpoint_type;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal structure while parsing a request
|
||||||
|
*/
|
||||||
|
struct mgcp_parse_data {
|
||||||
|
struct mgcp_config *cfg;
|
||||||
|
struct mgcp_endpoint *endp;
|
||||||
|
char *trans;
|
||||||
|
char *save;
|
||||||
|
};
|
||||||
|
|
||||||
|
int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct sockaddr_in *addr,
|
||||||
|
char *buf, int rc, struct mgcp_conn_rtp *conn_src,
|
||||||
|
struct mgcp_conn_rtp *conn_dst);
|
||||||
|
int mgcp_send_dummy(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn);
|
||||||
|
int mgcp_dispatch_rtp_bridge_cb(int proto, struct sockaddr_in *addr, char *buf,
|
||||||
|
unsigned int buf_size, struct mgcp_conn *conn);
|
||||||
|
void mgcp_cleanup_rtp_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn);
|
||||||
|
int mgcp_bind_net_rtp_port(struct mgcp_endpoint *endp, int rtp_port,
|
||||||
|
struct mgcp_conn_rtp *conn);
|
||||||
|
void mgcp_free_rtp_port(struct mgcp_rtp_end *end);
|
||||||
|
|
||||||
|
/* For transcoding we need to manage an in and an output that are connected */
|
||||||
|
static inline int endp_back_channel(int endpoint)
|
||||||
|
{
|
||||||
|
return endpoint + 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mgcp_trunk_config *mgcp_trunk_alloc(struct mgcp_config *cfg, int index);
|
||||||
|
struct mgcp_trunk_config *mgcp_trunk_num(struct mgcp_config *cfg, int index);
|
||||||
|
|
||||||
|
void mgcp_rtp_end_config(struct mgcp_endpoint *endp, int expect_ssrc_change,
|
||||||
|
struct mgcp_rtp_end *rtp);
|
||||||
|
uint32_t mgcp_rtp_packet_duration(struct mgcp_endpoint *endp,
|
||||||
|
struct mgcp_rtp_end *rtp);
|
||||||
|
|
||||||
|
/* payload processing default functions */
|
||||||
|
int mgcp_rtp_processing_default(struct mgcp_endpoint *endp, struct mgcp_rtp_end *dst_end,
|
||||||
|
char *data, int *len, int buf_size);
|
||||||
|
|
||||||
|
int mgcp_setup_rtp_processing_default(struct mgcp_endpoint *endp,
|
||||||
|
struct mgcp_rtp_end *dst_end,
|
||||||
|
struct mgcp_rtp_end *src_end);
|
||||||
|
|
||||||
|
void mgcp_get_net_downlink_format_default(struct mgcp_endpoint *endp,
|
||||||
|
int *payload_type,
|
||||||
|
const char**audio_name,
|
||||||
|
const char**fmtp_extra,
|
||||||
|
struct mgcp_conn_rtp *conn);
|
||||||
|
|
||||||
|
/* internal RTP Annex A counting */
|
||||||
|
void mgcp_rtp_annex_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *state,
|
||||||
|
const uint16_t seq, const int32_t transit,
|
||||||
|
const uint32_t ssrc);
|
||||||
|
|
||||||
|
int mgcp_set_ip_tos(int fd, int tos);
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MGCP_DEST_NET = 0,
|
||||||
|
MGCP_DEST_BTS,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define MGCP_DUMMY_LOAD 0x23
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SDP related information
|
||||||
|
*/
|
||||||
|
/* Assume audio frame length of 20ms */
|
||||||
|
#define DEFAULT_RTP_AUDIO_FRAME_DUR_NUM 20
|
||||||
|
#define DEFAULT_RTP_AUDIO_FRAME_DUR_DEN 1000
|
||||||
|
#define DEFAULT_RTP_AUDIO_PACKET_DURATION_MS 20
|
||||||
|
#define DEFAULT_RTP_AUDIO_DEFAULT_RATE 8000
|
||||||
|
#define DEFAULT_RTP_AUDIO_DEFAULT_CHANNELS 1
|
||||||
|
|
||||||
|
#define PTYPE_UNDEFINED (-1)
|
||||||
|
|
||||||
|
void mgcp_get_local_addr(char *addr, struct mgcp_conn_rtp *conn);
|
||||||
56
include/osmocom/mgcp/mgcp_msg.h
Normal file
56
include/osmocom/mgcp/mgcp_msg.h
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/* A Media Gateway Control Protocol Media Gateway: RFC 3435 */
|
||||||
|
/* Message parser/generator utilities */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (C) 2009-2012 by Holger Hans Peter Freyther <zecke@selfish.org>
|
||||||
|
* (C) 2009-2012 by On-Waves
|
||||||
|
* (C) 2017 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/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
struct mgcp_conn;
|
||||||
|
struct mgcp_parse_data;
|
||||||
|
struct mgcp_endpoint;
|
||||||
|
|
||||||
|
void mgcp_disp_msg(unsigned char *message, unsigned int len, char *preamble);
|
||||||
|
|
||||||
|
int mgcp_parse_conn_mode(const char *msg, struct mgcp_endpoint *endp,
|
||||||
|
struct mgcp_conn *conn);
|
||||||
|
|
||||||
|
int mgcp_parse_header(struct mgcp_parse_data *pdata, char *data);
|
||||||
|
|
||||||
|
int mgcp_parse_osmux_cid(const char *line);
|
||||||
|
|
||||||
|
int mgcp_check_param(const struct mgcp_endpoint *endp, const char *line);
|
||||||
|
|
||||||
|
int mgcp_verify_call_id(struct mgcp_endpoint *endp, const char *callid);
|
||||||
|
|
||||||
|
int mgcp_verify_ci(struct mgcp_endpoint *endp, const char *conn_id);
|
||||||
|
|
||||||
|
char *mgcp_strline(char *str, char **saveptr);
|
||||||
|
|
||||||
|
#define for_each_line(line, save)\
|
||||||
|
for (line = mgcp_strline(NULL, &save); line;\
|
||||||
|
line = mgcp_strline(NULL, &save))
|
||||||
|
|
||||||
|
#define for_each_non_empty_line(line, save)\
|
||||||
|
for (line = strtok_r(NULL, "\r\n", &save); line;\
|
||||||
|
line = strtok_r(NULL, "\r\n", &save))
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
/* OML attribute table generator for ipaccess nanobts */
|
/*
|
||||||
|
* SDP generation and parsing
|
||||||
/* (C) 2016 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
|
|
||||||
* All Rights Reserved
|
|
||||||
*
|
*
|
||||||
* Author: Philipp Maier
|
* (C) 2009-2015 by Holger Hans Peter Freyther <zecke@selfish.org>
|
||||||
|
* (C) 2009-2014 by On-Waves
|
||||||
|
* All Rights Reserved
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -17,16 +17,19 @@
|
|||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* 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/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <osmocom/mgcp/mgcp_sdp.h>
|
||||||
|
|
||||||
#include <stdint.h>
|
int mgcp_parse_sdp_data(const struct mgcp_endpoint *endp,
|
||||||
#include <osmocom/core/msgb.h>
|
struct mgcp_conn_rtp *conn,
|
||||||
|
struct mgcp_parse_data *p);
|
||||||
|
|
||||||
struct msgb *nanobts_attr_bts_get(struct gsm_bts *bts);
|
int mgcp_set_audio_info(void *ctx, struct mgcp_rtp_codec *codec,
|
||||||
struct msgb *nanobts_attr_nse_get(struct gsm_bts *bts);
|
int payload_type, const char *audio_name);
|
||||||
struct msgb *nanobts_attr_cell_get(struct gsm_bts *bts);
|
|
||||||
struct msgb *nanobts_attr_nscv_get(struct gsm_bts *bts);
|
int mgcp_write_response_sdp(const struct mgcp_endpoint *endp,
|
||||||
struct msgb *nanobts_attr_radio_get(struct gsm_bts *bts,
|
const struct mgcp_conn_rtp *conn, struct msgb *sdp,
|
||||||
struct gsm_bts_trx *trx);
|
const char *addr);
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
|
/* A Media Gateway Control Protocol Media Gateway: RFC 3435 */
|
||||||
|
/* The statistics generator */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (C) 2010-2013 by Holger Hans Peter Freyther <zecke@selfish.org>
|
* (C) 2009-2012 by Holger Hans Peter Freyther <zecke@selfish.org>
|
||||||
* (C) 2010-2013 by On-Waves
|
* (C) 2009-2012 by On-Waves
|
||||||
|
* (C) 2017 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@@ -18,18 +22,16 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef OSMO_BSC_GRACE_H
|
#pragma once
|
||||||
#define OSMO_BSC_GRACE_H
|
|
||||||
|
|
||||||
#include <openbsc/gsm_data.h>
|
#include <osmocom/mgcp/mgcp_internal.h>
|
||||||
#include <openbsc/signal.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
struct bsc_msc_data;
|
void mgcp_format_stats(char *str, size_t str_len, struct mgcp_conn *conn);
|
||||||
|
|
||||||
int bsc_grace_allow_new_connection(struct gsm_network *net, struct gsm_bts *bts);
|
/* Exposed for test purposes only, do not use actively */
|
||||||
int bsc_grace_paging_request(enum signal_rf rf_policy,
|
void calc_loss(struct mgcp_rtp_state *s, struct mgcp_rtp_end *,
|
||||||
struct bsc_subscr *subscr,
|
uint32_t *expected, int *loss);
|
||||||
int chan_needed,
|
|
||||||
struct bsc_msc_data *msc);
|
|
||||||
|
|
||||||
#endif
|
/* Exposed for test purposes only, do not use actively */
|
||||||
|
uint32_t calc_jitter(struct mgcp_rtp_state *);
|
||||||
38
include/osmocom/mgcp/osmux.h
Normal file
38
include/osmocom/mgcp/osmux.h
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include <osmocom/netif/osmux.h>
|
||||||
|
struct mgcp_conn_rtp;
|
||||||
|
|
||||||
|
#define OSMUX_PORT 1984
|
||||||
|
|
||||||
|
enum {
|
||||||
|
OSMUX_ROLE_BSC = 0,
|
||||||
|
OSMUX_ROLE_BSC_NAT,
|
||||||
|
};
|
||||||
|
|
||||||
|
int osmux_init(int role, struct mgcp_config *cfg);
|
||||||
|
int osmux_enable_conn(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn,
|
||||||
|
struct in_addr *addr, uint16_t port);
|
||||||
|
void osmux_disable_conn(struct mgcp_conn_rtp *conn);
|
||||||
|
void osmux_allocate_cid(struct mgcp_conn_rtp *conn);
|
||||||
|
void osmux_release_cid(struct mgcp_conn_rtp *conn);
|
||||||
|
int osmux_xfrm_to_osmux(char *buf, int buf_len, struct mgcp_conn_rtp *conn);
|
||||||
|
int osmux_send_dummy(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn);
|
||||||
|
int osmux_get_cid(void);
|
||||||
|
void osmux_put_cid(uint8_t osmux_cid);
|
||||||
|
int osmux_used_cid(void);
|
||||||
|
|
||||||
|
enum osmux_state {
|
||||||
|
OSMUX_STATE_DISABLED = 0,
|
||||||
|
OSMUX_STATE_NEGOTIATING,
|
||||||
|
OSMUX_STATE_ACTIVATING,
|
||||||
|
OSMUX_STATE_ENABLED,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum osmux_usage {
|
||||||
|
OSMUX_USAGE_OFF = 0,
|
||||||
|
OSMUX_USAGE_ON = 1,
|
||||||
|
OSMUX_USAGE_ONLY = 2,
|
||||||
|
};
|
||||||
|
|
||||||
8
include/osmocom/mgcp/vty.h
Normal file
8
include/osmocom/mgcp/vty.h
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <osmocom/vty/command.h>
|
||||||
|
|
||||||
|
enum mgcp_vty_node {
|
||||||
|
MGCP_NODE = _LAST_OSMOVTY_NODE + 1,
|
||||||
|
TRUNK_NODE,
|
||||||
|
};
|
||||||
13
include/osmocom/mgcp_client/Makefile.am
Normal file
13
include/osmocom/mgcp_client/Makefile.am
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
BUILT_SOURCES = \
|
||||||
|
mgcp_common.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
noinst_HEADERS = \
|
||||||
|
mgcp_client_internal.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
mgcp_common.h: $(top_srcdir)/include/osmocom/mgcp/mgcp_common.h
|
||||||
|
echo -e "/*\n\n DO NOT EDIT THIS FILE!\n THIS IS OVERWRITTEN DURING BUILD\n This is an automatic copy of <osmocom/mgcp/mgcp_common.h>\n\n */" > mgcp_common.h
|
||||||
|
cat $(top_srcdir)/include/osmocom/mgcp/mgcp_common.h >> mgcp_common.h
|
||||||
|
|
||||||
|
CLEANFILES = mgcp_common.h
|
||||||
119
include/osmocom/mgcp_client/mgcp_client.h
Normal file
119
include/osmocom/mgcp_client/mgcp_client.h
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <osmocom/mgcp_client/mgcp_common.h>
|
||||||
|
|
||||||
|
#define MGCP_CLIENT_LOCAL_ADDR_DEFAULT "0.0.0.0"
|
||||||
|
#define MGCP_CLIENT_LOCAL_PORT_DEFAULT 0
|
||||||
|
#define MGCP_CLIENT_REMOTE_ADDR_DEFAULT "127.0.0.1"
|
||||||
|
#define MGCP_CLIENT_REMOTE_PORT_DEFAULT 2427
|
||||||
|
|
||||||
|
struct msgb;
|
||||||
|
struct vty;
|
||||||
|
struct mgcp_client;
|
||||||
|
|
||||||
|
struct mgcp_client_conf {
|
||||||
|
const char *local_addr;
|
||||||
|
int local_port;
|
||||||
|
const char *remote_addr;
|
||||||
|
int remote_port;
|
||||||
|
uint16_t first_endpoint;
|
||||||
|
uint16_t last_endpoint;
|
||||||
|
uint16_t bts_base;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef unsigned int mgcp_trans_id_t;
|
||||||
|
|
||||||
|
struct mgcp_response_head {
|
||||||
|
int response_code;
|
||||||
|
mgcp_trans_id_t trans_id;
|
||||||
|
char comment[MGCP_COMMENT_MAXLEN];
|
||||||
|
char conn_id[MGCP_CONN_ID_LENGTH];
|
||||||
|
char endpoint[MGCP_ENDPOINT_MAXLEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_response {
|
||||||
|
char *body;
|
||||||
|
struct mgcp_response_head head;
|
||||||
|
uint16_t audio_port;
|
||||||
|
char audio_ip[INET_ADDRSTRLEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
enum mgcp_verb {
|
||||||
|
MGCP_VERB_CRCX,
|
||||||
|
MGCP_VERB_MDCX,
|
||||||
|
MGCP_VERB_DLCX,
|
||||||
|
MGCP_VERB_AUEP,
|
||||||
|
MGCP_VERB_RSIP,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MGCP_MSG_PRESENCE_ENDPOINT 0x0001
|
||||||
|
#define MGCP_MSG_PRESENCE_CALL_ID 0x0002
|
||||||
|
#define MGCP_MSG_PRESENCE_CONN_ID 0x0004
|
||||||
|
#define MGCP_MSG_PRESENCE_AUDIO_IP 0x0008
|
||||||
|
#define MGCP_MSG_PRESENCE_AUDIO_PORT 0x0010
|
||||||
|
#define MGCP_MSG_PRESENCE_CONN_MODE 0x0020
|
||||||
|
|
||||||
|
struct mgcp_msg {
|
||||||
|
enum mgcp_verb verb;
|
||||||
|
/* See MGCP_MSG_PRESENCE_* constants */
|
||||||
|
uint32_t presence;
|
||||||
|
char endpoint[MGCP_ENDPOINT_MAXLEN];
|
||||||
|
unsigned int call_id;
|
||||||
|
char *conn_id;
|
||||||
|
uint16_t audio_port;
|
||||||
|
char *audio_ip;
|
||||||
|
enum mgcp_connection_mode conn_mode;
|
||||||
|
};
|
||||||
|
|
||||||
|
void mgcp_client_conf_init(struct mgcp_client_conf *conf);
|
||||||
|
void mgcp_client_vty_init(void *talloc_ctx, int node, struct mgcp_client_conf *conf);
|
||||||
|
int mgcp_client_config_write(struct vty *vty, const char *indent);
|
||||||
|
struct mgcp_client_conf *mgcp_client_conf_actual(struct mgcp_client *mgcp);
|
||||||
|
|
||||||
|
struct mgcp_client *mgcp_client_init(void *ctx,
|
||||||
|
struct mgcp_client_conf *conf);
|
||||||
|
int mgcp_client_connect(struct mgcp_client *mgcp);
|
||||||
|
|
||||||
|
const char *mgcp_client_remote_addr_str(struct mgcp_client *mgcp);
|
||||||
|
uint16_t mgcp_client_remote_port(struct mgcp_client *mgcp);
|
||||||
|
uint32_t mgcp_client_remote_addr_n(struct mgcp_client *mgcp);
|
||||||
|
|
||||||
|
int mgcp_client_next_endpoint(struct mgcp_client *client);
|
||||||
|
void mgcp_client_release_endpoint(uint16_t id, struct mgcp_client *client);
|
||||||
|
|
||||||
|
/* Invoked when an MGCP response is received or sending failed. When the
|
||||||
|
* response is passed as NULL, this indicates failure during transmission. */
|
||||||
|
typedef void (* mgcp_response_cb_t )(struct mgcp_response *response, void *priv);
|
||||||
|
int mgcp_response_parse_params(struct mgcp_response *r);
|
||||||
|
|
||||||
|
int mgcp_client_tx(struct mgcp_client *mgcp, struct msgb *msg,
|
||||||
|
mgcp_response_cb_t response_cb, void *priv);
|
||||||
|
int mgcp_client_cancel(struct mgcp_client *mgcp, mgcp_trans_id_t trans_id);
|
||||||
|
|
||||||
|
enum mgcp_connection_mode;
|
||||||
|
|
||||||
|
struct msgb *mgcp_msg_crcx(struct mgcp_client *mgcp,
|
||||||
|
uint16_t rtp_endpoint, unsigned int call_id,
|
||||||
|
enum mgcp_connection_mode mode)
|
||||||
|
OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
|
||||||
|
|
||||||
|
struct msgb *mgcp_msg_mdcx(struct mgcp_client *mgcp,
|
||||||
|
uint16_t rtp_endpoint, const char *rtp_conn_addr,
|
||||||
|
uint16_t rtp_port, enum mgcp_connection_mode mode)
|
||||||
|
OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
|
||||||
|
|
||||||
|
struct msgb *mgcp_msg_dlcx(struct mgcp_client *mgcp, uint16_t rtp_endpoint,
|
||||||
|
unsigned int call_id)
|
||||||
|
OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
|
||||||
|
|
||||||
|
struct msgb *mgcp_msg_gen(struct mgcp_client *mgcp, struct mgcp_msg *mgcp_msg);
|
||||||
|
mgcp_trans_id_t mgcp_msg_trans_id(struct msgb *msg);
|
||||||
|
|
||||||
|
extern const struct value_string mgcp_client_connection_mode_strs[];
|
||||||
|
static inline const char *mgcp_client_cmode_name(enum mgcp_connection_mode mode)
|
||||||
|
{
|
||||||
|
return get_value_string(mgcp_client_connection_mode_strs, mode);
|
||||||
|
}
|
||||||
33
include/osmocom/mgcp_client/mgcp_client_fsm.h
Normal file
33
include/osmocom/mgcp_client/mgcp_client_fsm.h
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <osmocom/mgcp_client/mgcp_common.h>
|
||||||
|
#include <osmocom/mgcp_client/mgcp_client.h>
|
||||||
|
#include <osmocom/gsm/protocol/gsm_04_08.h>
|
||||||
|
|
||||||
|
/*! This struct organizes the connection infromation one connection side
|
||||||
|
* (either remote or local). It is used to pass parameters (local) to the FSM
|
||||||
|
* and get responses (remote) from the FSM as pointer attached to the FSM
|
||||||
|
* event.
|
||||||
|
*
|
||||||
|
* When modifiying a connection, the endpoint and call_id members may be left
|
||||||
|
* unpopulated. The call_id field is ignored in this case. If an endpoint
|
||||||
|
* identifier is supplied it is checked against the internal state to make
|
||||||
|
* sure it is correct. */
|
||||||
|
struct mgcp_conn_peer {
|
||||||
|
/*!< RTP connection IP-Address (optional, string e.g. "127.0.0.1") */
|
||||||
|
char addr[INET_ADDRSTRLEN];
|
||||||
|
|
||||||
|
/*!< RTP connection IP-Port (optional) */
|
||||||
|
uint16_t port;
|
||||||
|
|
||||||
|
/*!< RTP endpoint */
|
||||||
|
char endpoint[MGCP_ENDPOINT_MAXLEN];
|
||||||
|
|
||||||
|
/*!< CALL ID (unique per connection) */
|
||||||
|
unsigned int call_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct osmo_fsm_inst *mgcp_conn_create(struct mgcp_client *mgcp, struct osmo_fsm_inst *parent_fi, uint32_t parent_term_evt,
|
||||||
|
uint32_t parent_evt, struct mgcp_conn_peer *conn_peer);
|
||||||
|
int mgcp_conn_modify(struct osmo_fsm_inst *fi, uint32_t parent_evt, struct mgcp_conn_peer *conn_peer);
|
||||||
|
void mgcp_conn_delete(struct osmo_fsm_inst *fi);
|
||||||
35
include/osmocom/mgcp_client/mgcp_client_internal.h
Normal file
35
include/osmocom/mgcp_client/mgcp_client_internal.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <osmocom/core/write_queue.h>
|
||||||
|
|
||||||
|
#define MSGB_CB_MGCP_TRANS_ID 0
|
||||||
|
|
||||||
|
struct mgcp_client {
|
||||||
|
struct mgcp_client_conf actual;
|
||||||
|
uint32_t remote_addr;
|
||||||
|
struct osmo_wqueue wq;
|
||||||
|
mgcp_trans_id_t next_trans_id;
|
||||||
|
struct llist_head responses_pending;
|
||||||
|
struct llist_head inuse_endpoints;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_inuse_endpoint {
|
||||||
|
struct llist_head entry;
|
||||||
|
uint16_t id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mgcp_response_pending {
|
||||||
|
struct llist_head entry;
|
||||||
|
|
||||||
|
mgcp_trans_id_t trans_id;
|
||||||
|
mgcp_response_cb_t response_cb;
|
||||||
|
void *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
int mgcp_client_rx(struct mgcp_client *mgcp, struct msgb *msg);
|
||||||
|
|
||||||
|
struct mgcp_response_pending * mgcp_client_pending_add(
|
||||||
|
struct mgcp_client *mgcp,
|
||||||
|
mgcp_trans_id_t trans_id,
|
||||||
|
mgcp_response_cb_t response_cb,
|
||||||
|
void *priv);
|
||||||
10
libosmo-legacy-mgcp.pc.in
Normal file
10
libosmo-legacy-mgcp.pc.in
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libdir=@libdir@
|
||||||
|
includedir=@includedir@
|
||||||
|
|
||||||
|
Name: Osmocom legacy Media Gateway Control Protocol library
|
||||||
|
Description: C Utility Library
|
||||||
|
Version: @VERSION@
|
||||||
|
Libs: -L${libdir} -losmo-legacy-mgcp
|
||||||
|
Cflags: -I${includedir}/
|
||||||
10
libosmo-mgcp-client.pc.in
Normal file
10
libosmo-mgcp-client.pc.in
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libdir=@libdir@
|
||||||
|
includedir=@includedir@
|
||||||
|
|
||||||
|
Name: Osmocom Media Gateway Control Protocol Client library
|
||||||
|
Description: C Utility Library
|
||||||
|
Version: @VERSION@
|
||||||
|
Libs: -L${libdir} -losmo-mgcp-client
|
||||||
|
Cflags: -I${includedir}/
|
||||||
103
openbsc/.gitignore
vendored
103
openbsc/.gitignore
vendored
@@ -1,103 +0,0 @@
|
|||||||
*.o
|
|
||||||
*.lo
|
|
||||||
*.a
|
|
||||||
.deps
|
|
||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
bscconfig.h
|
|
||||||
bscconfig.h.in
|
|
||||||
openbsc.pc
|
|
||||||
src/osmo-nitb/osmo-nitb
|
|
||||||
src/osmo-bsc_mgcp/osmo-bsc_mgcp
|
|
||||||
src/osmo-bsc/osmo-bsc
|
|
||||||
src/utils/meas_vis
|
|
||||||
src/utils/meas_json
|
|
||||||
src/utils/osmo-meas-pcap2db
|
|
||||||
src/utils/osmo-meas-udp2db
|
|
||||||
src/utils/smpp_mirror
|
|
||||||
*.*~
|
|
||||||
*.sw?
|
|
||||||
.libs
|
|
||||||
*.pyc
|
|
||||||
*.gcda
|
|
||||||
*.gcno
|
|
||||||
|
|
||||||
#configure
|
|
||||||
aclocal.m4
|
|
||||||
autom4te.cache/
|
|
||||||
config.log
|
|
||||||
config.status
|
|
||||||
config.guess
|
|
||||||
config.sub
|
|
||||||
configure
|
|
||||||
compile
|
|
||||||
depcomp
|
|
||||||
install-sh
|
|
||||||
missing
|
|
||||||
stamp-h1
|
|
||||||
libtool
|
|
||||||
ltmain.sh
|
|
||||||
|
|
||||||
# git-version-gen magic
|
|
||||||
.tarball-version
|
|
||||||
.version
|
|
||||||
|
|
||||||
|
|
||||||
# apps and app data
|
|
||||||
hlr.sqlite3
|
|
||||||
src/utils/bs11_config
|
|
||||||
src/ipaccess/ipaccess-config
|
|
||||||
src/ipaccess/abisip-find
|
|
||||||
src/ipaccess/ipaccess-firmware
|
|
||||||
src/ipaccess/ipaccess-proxy
|
|
||||||
src/utils/isdnsync
|
|
||||||
src/nat/bsc_nat
|
|
||||||
src/gprs/osmo-sgsn
|
|
||||||
src/gprs/osmo-gbproxy
|
|
||||||
src/gprs/osmo-gtphub
|
|
||||||
src/osmo-bsc_nat/osmo-bsc_nat
|
|
||||||
src/libcommon/gsup_test_client
|
|
||||||
|
|
||||||
#tests
|
|
||||||
tests/testsuite.dir
|
|
||||||
tests/bsc-nat/bsc_nat_test
|
|
||||||
tests/bsc-nat-trie/bsc_nat_trie_test
|
|
||||||
tests/channel/channel_test
|
|
||||||
tests/db/db_test
|
|
||||||
tests/debug/debug_test
|
|
||||||
tests/gsm0408/gsm0408_test
|
|
||||||
tests/mgcp/mgcp_test
|
|
||||||
tests/sccp/sccp_test
|
|
||||||
tests/sms/sms_test
|
|
||||||
tests/timer/timer_test
|
|
||||||
tests/gprs/gprs_test
|
|
||||||
tests/gbproxy/gbproxy_test
|
|
||||||
tests/abis/abis_test
|
|
||||||
tests/si/si_test
|
|
||||||
tests/smpp/smpp_test
|
|
||||||
tests/bsc/bsc_test
|
|
||||||
tests/trau/trau_test
|
|
||||||
tests/mgcp/mgcp_transcoding_test
|
|
||||||
tests/sgsn/sgsn_test
|
|
||||||
tests/subscr/subscr_test
|
|
||||||
tests/subscr/bsc_subscr_test
|
|
||||||
tests/oap/oap_test
|
|
||||||
tests/gtphub/gtphub_test
|
|
||||||
tests/mm_auth/mm_auth_test
|
|
||||||
tests/xid/xid_test
|
|
||||||
tests/sndcp_xid/sndcp_xid_test
|
|
||||||
tests/slhc/slhc_test
|
|
||||||
tests/v42bis/v42bis_test
|
|
||||||
tests/nanobts_omlattr/nanobts_omlattr_test
|
|
||||||
tests/oap/oap_client_test
|
|
||||||
|
|
||||||
tests/atconfig
|
|
||||||
tests/atlocal
|
|
||||||
tests/package.m4
|
|
||||||
tests/testsuite
|
|
||||||
tests/testsuite.log
|
|
||||||
|
|
||||||
gsn_restart
|
|
||||||
src/openbsc.cfg*
|
|
||||||
writtenconfig/
|
|
||||||
gtphub_restart_count
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
About OpenBSC
|
|
||||||
=============
|
|
||||||
|
|
||||||
OpenBSC started as a minimalistic all-in-one implementation of the GSM Network,
|
|
||||||
with particular emphasis on the functionality typically provided by the BSC,
|
|
||||||
MSC, HLR, VLR and SMSC. Today it is a growing suite of libraries and programs,
|
|
||||||
implementing protocol stacks and functional elements, including
|
|
||||||
|
|
||||||
* OsmoBSC - a pure GSM BSC, speaking Abis/IP to the BTS and A/IP to the MSC
|
|
||||||
* OsmoBSC-MGCP - MGCP helper to the OsmoBSC software
|
|
||||||
* OsmoNITB - a BSC+MSC+VLR+HLR+SMSC "Network in the box".
|
|
||||||
* OsmoMSC - a voice CN with A/IP and IuCS/IP towards the BSC and/or HNB-GW
|
|
||||||
* OsmoSGSN - a GPRS SGSN with Gb/IP and IuPS/IP towards the PCU and/or HNB-GW
|
|
||||||
* Osmo-GbProxy - a Proxy to aggregate many Gb links as one Gb link to the SGSN
|
|
||||||
* OsmoBSCNAT - a gateway aggregating many A links as one A link to the MSC
|
|
||||||
* OsmoGTPHUB - a hub aggregating many GTP links (between SGSN and GGSN)
|
|
||||||
* ipaccess-utils - some tools to discover + configure ip.access nanoBTS
|
|
||||||
* bs11_config - a tool to configure the Siemens BS-11 microBTS
|
|
||||||
|
|
||||||
Various interfaces towards the BTS are supported, among which are:
|
|
||||||
|
|
||||||
* Classic A-bis over E1 using a mISDN based E1 interface. In other
|
|
||||||
words, you can connect existing GSM Base Transceiver Station (BTS)
|
|
||||||
through E1 to OpenBSC. So far, we have made it work with the Siemens BS-11,
|
|
||||||
various Ericsson RBS2xxx BTS models and the Nokia MetroSite.
|
|
||||||
|
|
||||||
* A-bis over IP as used by the ip.access nanoBTS product family as well as
|
|
||||||
the Open Source OsmoBTS software (by the same authors as OpenBSC). OsmoBTS
|
|
||||||
in turn supports various transceiver hardware, including the sysmoBTS
|
|
||||||
product family, as well as SDR transceivers supported by OsmoTRX, such as
|
|
||||||
the UmTRX or USRP boardss.
|
|
||||||
|
|
||||||
* IuCS and IuPS over IP towards an HNB-GW (see osmo-iuh) for UMTS (3G)
|
|
||||||
voice and data links.
|
|
||||||
|
|
||||||
Find OpenBSC online at
|
|
||||||
http://openbsc.osmocom.org/
|
|
||||||
|
|
||||||
Harald Welte <laforge@gnumonks.org>
|
|
||||||
@@ -1,266 +0,0 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script
|
|
||||||
AC_INIT([openbsc],
|
|
||||||
m4_esyscmd([./git-version-gen .tarball-version]),
|
|
||||||
[openbsc@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)
|
|
||||||
|
|
||||||
dnl kernel style compile messages
|
|
||||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
|
||||||
|
|
||||||
dnl checks for programs
|
|
||||||
AC_PROG_MAKE_SET
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
LT_INIT
|
|
||||||
|
|
||||||
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 check for AX_CHECK_COMPILE_FLAG
|
|
||||||
m4_ifdef([AX_CHECK_COMPILE_FLAG], [], [
|
|
||||||
AC_MSG_ERROR([Please install autoconf-archive; re-run 'autoreconf -fi' for it to take effect.])
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl checks for libraries
|
|
||||||
AC_SEARCH_LIBS([dlopen], [dl dld], [LIBRARY_DL="$LIBS";LIBS=""])
|
|
||||||
AC_SUBST(LIBRARY_DL)
|
|
||||||
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 0.9.5)
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 0.3.0)
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl)
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 0.9.5)
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 0.2.0)
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOGB, libosmogb >= 0.6.4)
|
|
||||||
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.0.1)
|
|
||||||
PKG_CHECK_MODULES(LIBCRYPTO, libcrypto >= 0.9.5)
|
|
||||||
|
|
||||||
# Enabke/disable the NAT?
|
|
||||||
AC_ARG_ENABLE([nat], [AS_HELP_STRING([--enable-nat], [Build the BSC NAT. Requires SCCP])],
|
|
||||||
[osmo_ac_build_nat="$enableval"],[osmo_ac_build_nat="no"])
|
|
||||||
if test "$osmo_ac_build_nat" = "yes" ; then
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOSCCP, libosmo-sccp >= 0.0.2)
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(BUILD_NAT, test "x$osmo_ac_build_nat" = "xyes")
|
|
||||||
AC_SUBST(osmo_ac_build_nat)
|
|
||||||
|
|
||||||
# Enable/disable the BSC?
|
|
||||||
AC_ARG_ENABLE([osmo-bsc], [AS_HELP_STRING([--enable-osmo-bsc], [Build the Osmo BSC])],
|
|
||||||
[osmo_ac_build_bsc="$enableval"],[osmo_ac_build_bsc="no"])
|
|
||||||
if test "$osmo_ac_build_bsc" = "yes" ; then
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOSCCP, libosmo-sccp >= 0.0.6)
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(BUILD_BSC, test "x$osmo_ac_build_bsc" = "xyes")
|
|
||||||
AC_SUBST(osmo_ac_build_bsc)
|
|
||||||
|
|
||||||
# Enable/disable smpp support in the nitb?
|
|
||||||
AC_ARG_ENABLE([smpp], [AS_HELP_STRING([--enable-smpp], [Build the SMPP interface])],
|
|
||||||
[osmo_ac_build_smpp="$enableval"],[osmo_ac_build_smpp="no"])
|
|
||||||
if test "$osmo_ac_build_smpp" = "yes" ; then
|
|
||||||
PKG_CHECK_MODULES(LIBSMPP34, libsmpp34 >= 1.10)
|
|
||||||
AC_DEFINE(BUILD_SMPP, 1, [Define if we want to build SMPP])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(BUILD_SMPP, test "x$osmo_ac_build_smpp" = "xyes")
|
|
||||||
AC_SUBST(osmo_ac_build_smpp)
|
|
||||||
|
|
||||||
# Enable/disable transcoding within osmo-bsc_mgcp?
|
|
||||||
AC_ARG_ENABLE([mgcp-transcoding], [AS_HELP_STRING([--enable-mgcp-transcoding], [Build the MGCP gateway with internal transcoding enabled.])],
|
|
||||||
[osmo_ac_mgcp_transcoding="$enableval"],[osmo_ac_mgcp_transcoding="no"])
|
|
||||||
AC_ARG_WITH([g729], [AS_HELP_STRING([--with-g729], [Enable G.729 encoding/decoding.])], [osmo_ac_with_g729="$withval"],[osmo_ac_with_g729="no"])
|
|
||||||
|
|
||||||
if test "$osmo_ac_mgcp_transcoding" = "yes" ; then
|
|
||||||
AC_SEARCH_LIBS([gsm_create], [gsm], [LIBRARY_GSM="$LIBS";LIBS=""], [AC_MSG_ERROR([--enable-mgcp-transcoding: cannot find usable libgsm])])
|
|
||||||
AC_SUBST(LIBRARY_GSM)
|
|
||||||
if test "$osmo_ac_with_g729" = "yes" ; then
|
|
||||||
PKG_CHECK_MODULES(LIBBCG729, libbcg729 >= 0.1, [AC_DEFINE([HAVE_BCG729], [1], [Use bgc729 decoder/encoder])])
|
|
||||||
fi
|
|
||||||
AC_DEFINE(BUILD_MGCP_TRANSCODING, 1, [Define if we want to build the MGCP gateway with transcoding support])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(BUILD_MGCP_TRANSCODING, test "x$osmo_ac_mgcp_transcoding" = "xyes")
|
|
||||||
AC_SUBST(osmo_ac_mgcp_transcoding)
|
|
||||||
|
|
||||||
# Enable/disable 3G aka IuPS + IuCS support?
|
|
||||||
AC_ARG_ENABLE([iu], [AS_HELP_STRING([--enable-iu], [Build 3G support, aka IuPS and IuCS interfaces])],
|
|
||||||
[osmo_ac_iu="$enableval"],[osmo_ac_iu="no"])
|
|
||||||
if test "x$osmo_ac_iu" = "xyes" ; then
|
|
||||||
PKG_CHECK_MODULES(LIBASN1C, libasn1c) # TODO version?
|
|
||||||
PKG_CHECK_MODULES(LIBOSMORANAP, libosmo-ranap) # TODO version?
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOSIGTRAN, libosmo-sigtran) # TODO version?
|
|
||||||
AC_DEFINE(BUILD_IU, 1, [Define if we want to build IuPS and IuCS interfaces support])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(BUILD_IU, test "x$osmo_ac_iu" = "xyes")
|
|
||||||
AC_SUBST(osmo_ac_iu)
|
|
||||||
|
|
||||||
|
|
||||||
found_libgtp=yes
|
|
||||||
PKG_CHECK_MODULES(LIBGTP, libgtp >= 0.92, , found_libgtp=no)
|
|
||||||
AM_CONDITIONAL(HAVE_LIBGTP, test "$found_libgtp" = yes)
|
|
||||||
AC_SUBST(found_libgtp)
|
|
||||||
|
|
||||||
found_libcares=yes
|
|
||||||
PKG_CHECK_MODULES([LIBCARES], [libcares], [], [found_libcares=no])
|
|
||||||
AM_CONDITIONAL(HAVE_LIBCARES, test "$found_libcares" = yes)
|
|
||||||
AC_SUBST(found_libcares)
|
|
||||||
|
|
||||||
found_libgtp_and_libcares=no
|
|
||||||
if test "$found_libgtp" = "yes" -a "$found_libcares" = "yes"; then
|
|
||||||
found_libgtp_and_libcares=yes
|
|
||||||
fi
|
|
||||||
AC_SUBST(found_libgtp_and_libcares)
|
|
||||||
|
|
||||||
dnl checks for header files
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_CHECK_HEADERS(dbi/dbd.h,,AC_MSG_ERROR(DBI library is not installed))
|
|
||||||
|
|
||||||
found_pcap=yes
|
|
||||||
AC_CHECK_HEADERS(pcap/pcap.h,,found_pcap=no)
|
|
||||||
AM_CONDITIONAL(HAVE_PCAP, test "$found_pcap" = yes)
|
|
||||||
|
|
||||||
found_cdk=yes
|
|
||||||
AC_CHECK_HEADERS(cdk/cdk.h,,found_cdk=no)
|
|
||||||
AM_CONDITIONAL(HAVE_LIBCDK, test "$found_cdk" = yes)
|
|
||||||
|
|
||||||
found_sqlite3=yes
|
|
||||||
PKG_CHECK_MODULES(SQLITE3, sqlite3, ,found_sqlite3=no)
|
|
||||||
AM_CONDITIONAL(HAVE_SQLITE3, test "$found_sqlite3" = yes)
|
|
||||||
AC_SUBST(found_sqlite3)
|
|
||||||
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures and compiler characteristics
|
|
||||||
|
|
||||||
# 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)
|
|
||||||
|
|
||||||
AX_CHECK_COMPILE_FLAG([-Werror=implicit], [CFLAGS="$CFLAGS -Werror=implicit"])
|
|
||||||
AX_CHECK_COMPILE_FLAG([-Werror=maybe-uninitialized], [CFLAGS="$CFLAGS -Werror=maybe-uninitialized"])
|
|
||||||
AX_CHECK_COMPILE_FLAG([-Werror=memset-transposed-args], [CFLAGS="$CFLAGS -Werror=memset-transposed-args"])
|
|
||||||
AX_CHECK_COMPILE_FLAG([-Werror=null-dereference], [CFLAGS="$CFLAGS -Werror=null-dereference"])
|
|
||||||
AX_CHECK_COMPILE_FLAG([-Werror=sizeof-array-argument], [CFLAGS="$CFLAGS -Werror=sizeof-array-argument"])
|
|
||||||
AX_CHECK_COMPILE_FLAG([-Werror=sizeof-pointer-memaccess], [CFLAGS="$CFLAGS -Werror=sizeof-pointer-memaccess"])
|
|
||||||
|
|
||||||
# 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_DEFUN([CHECK_TM_INCLUDES_TM_GMTOFF], [
|
|
||||||
AC_CACHE_CHECK(
|
|
||||||
[whether struct tm has tm_gmtoff member],
|
|
||||||
osmo_cv_tm_includes_tm_gmtoff,
|
|
||||||
[AC_LINK_IFELSE([
|
|
||||||
AC_LANG_PROGRAM([
|
|
||||||
#include <time.h>
|
|
||||||
], [
|
|
||||||
time_t t = time(NULL);
|
|
||||||
struct tm* lt = localtime(&t);
|
|
||||||
int off = lt->tm_gmtoff;
|
|
||||||
])
|
|
||||||
],
|
|
||||||
osmo_cv_tm_includes_tm_gmtoff=yes,
|
|
||||||
osmo_cv_tm_includes_tm_gmtoff=no
|
|
||||||
)]
|
|
||||||
)
|
|
||||||
if test "x$osmo_cv_tm_includes_tm_gmtoff" = xyes; then
|
|
||||||
AC_DEFINE(HAVE_TM_GMTOFF_IN_TM, 1,
|
|
||||||
[Define if struct tm has tm_gmtoff member.])
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
CHECK_TM_INCLUDES_TM_GMTOFF
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([vty_tests],
|
|
||||||
AC_HELP_STRING([--enable-vty-tests],
|
|
||||||
[Include the VTY/CTRL tests in make check (deprecated)
|
|
||||||
[default=no]]),
|
|
||||||
[enable_ext_tests="$enableval"],[enable_ext_tests="no"])
|
|
||||||
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
|
|
||||||
AM_PATH_PYTHON
|
|
||||||
AC_CHECK_PROG(OSMOTESTEXT_CHECK,osmotestvty.py,yes)
|
|
||||||
if test "x$OSMOTESTEXT_CHECK" != "xyes" ; then
|
|
||||||
AC_MSG_ERROR([Please install osmocom-python 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")
|
|
||||||
|
|
||||||
dnl Generate the output
|
|
||||||
AM_CONFIG_HEADER(bscconfig.h)
|
|
||||||
|
|
||||||
AC_OUTPUT(
|
|
||||||
openbsc.pc
|
|
||||||
include/openbsc/Makefile
|
|
||||||
include/Makefile
|
|
||||||
src/Makefile
|
|
||||||
src/libtrau/Makefile
|
|
||||||
src/libbsc/Makefile
|
|
||||||
src/libmsc/Makefile
|
|
||||||
src/libmgcp/Makefile
|
|
||||||
src/libcommon/Makefile
|
|
||||||
src/libfilter/Makefile
|
|
||||||
src/libiu/Makefile
|
|
||||||
src/libcommon-cs/Makefile
|
|
||||||
src/osmo-nitb/Makefile
|
|
||||||
src/osmo-bsc/Makefile
|
|
||||||
src/osmo-bsc_nat/Makefile
|
|
||||||
src/osmo-bsc_mgcp/Makefile
|
|
||||||
src/ipaccess/Makefile
|
|
||||||
src/utils/Makefile
|
|
||||||
src/gprs/Makefile
|
|
||||||
tests/Makefile
|
|
||||||
tests/atlocal
|
|
||||||
tests/gsm0408/Makefile
|
|
||||||
tests/db/Makefile
|
|
||||||
tests/channel/Makefile
|
|
||||||
tests/bsc/Makefile
|
|
||||||
tests/bsc-nat/Makefile
|
|
||||||
tests/bsc-nat-trie/Makefile
|
|
||||||
tests/mgcp/Makefile
|
|
||||||
tests/gprs/Makefile
|
|
||||||
tests/gbproxy/Makefile
|
|
||||||
tests/abis/Makefile
|
|
||||||
tests/smpp/Makefile
|
|
||||||
tests/trau/Makefile
|
|
||||||
tests/sgsn/Makefile
|
|
||||||
tests/subscr/Makefile
|
|
||||||
tests/oap/Makefile
|
|
||||||
tests/gtphub/Makefile
|
|
||||||
tests/mm_auth/Makefile
|
|
||||||
tests/xid/Makefile
|
|
||||||
tests/sndcp_xid/Makefile
|
|
||||||
tests/slhc/Makefile
|
|
||||||
tests/v42bis/Makefile
|
|
||||||
tests/nanobts_omlattr/Makefile
|
|
||||||
doc/Makefile
|
|
||||||
doc/examples/Makefile
|
|
||||||
Makefile)
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
-- Split trace based on SCCP Source
|
|
||||||
-- There are still bugs to find... bugs bugs bugs... hmm
|
|
||||||
do
|
|
||||||
local function init_listener()
|
|
||||||
print("CREATED LISTENER")
|
|
||||||
local tap = Listener.new("ip", "sccp && (ip.src == 172.16.1.81 || ip.dst == 172.16.1.81)")
|
|
||||||
local sccp_type_field = Field.new("sccp.message_type")
|
|
||||||
local sccp_src_field = Field.new("sccp.slr")
|
|
||||||
local sccp_dst_field = Field.new("sccp.dlr")
|
|
||||||
local msg_type_field = Field.new("gsm_a.dtap_msg_mm_type")
|
|
||||||
local lu_rej_field = Field.new("gsm_a.dtap.rej_cause")
|
|
||||||
local ip_src_field = Field.new("ip.src")
|
|
||||||
local ip_dst_field = Field.new("ip.dst")
|
|
||||||
|
|
||||||
--
|
|
||||||
local bssmap_msgtype_field = Field.new("gsm_a.bssmap_msgtype")
|
|
||||||
-- assignment failure 0x03
|
|
||||||
--
|
|
||||||
|
|
||||||
--
|
|
||||||
local dtap_cause_field = Field.new("gsm_a_dtap.cause")
|
|
||||||
local dtap_cc_field = Field.new("gsm_a.dtap_msg_cc_type")
|
|
||||||
|
|
||||||
local connections = {}
|
|
||||||
|
|
||||||
function check_failure(con)
|
|
||||||
check_lu_reject(con)
|
|
||||||
check_disconnect(con)
|
|
||||||
check_failures(con)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- cipher mode reject
|
|
||||||
function check_failures(con)
|
|
||||||
local msgtype = bssmap_msgtype_field()
|
|
||||||
if not msgtype then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
msgtype = tonumber(msgtype)
|
|
||||||
if msgtype == 89 then
|
|
||||||
print("Cipher mode reject")
|
|
||||||
con[4] = true
|
|
||||||
elseif msgtype == 0x03 then
|
|
||||||
print("Assignment failure")
|
|
||||||
con[4] = true
|
|
||||||
elseif msgtype == 0x22 then
|
|
||||||
print("Clear Request... RF failure?")
|
|
||||||
con[4] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- check if a DISCONNECT is normal
|
|
||||||
function check_disconnect(con)
|
|
||||||
local msg_type = dtap_cc_field()
|
|
||||||
if not msg_type then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if tonumber(msg_type) ~= 0x25 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local cause = dtap_cause_field()
|
|
||||||
if not cause then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
cause = tonumber(cause)
|
|
||||||
if cause ~= 0x10 then
|
|
||||||
print("DISCONNECT != Normal")
|
|
||||||
con[4] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- check if we have a LU Reject
|
|
||||||
function check_lu_reject(con)
|
|
||||||
local msg_type = msg_type_field()
|
|
||||||
if not msg_type then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
msg_type = tonumber(tostring(msg_type))
|
|
||||||
if msg_type == 0x04 then
|
|
||||||
print("LU REJECT with " .. tostring(lu_rej_field()))
|
|
||||||
con[4] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function tap.packet(pinfo,tvb,ip)
|
|
||||||
local ip_src = tostring(ip_src_field())
|
|
||||||
local ip_dst = tostring(ip_dst_field())
|
|
||||||
local sccp_type = tonumber(tostring(sccp_type_field()))
|
|
||||||
local sccp_src = sccp_src_field()
|
|
||||||
local sccp_dst = sccp_dst_field()
|
|
||||||
|
|
||||||
local con
|
|
||||||
|
|
||||||
if sccp_type == 0x01 then
|
|
||||||
elseif sccp_type == 0x2 then
|
|
||||||
local src = string.format("%s-%s", ip_src, tostring(sccp_src))
|
|
||||||
local dst = string.format("%s-%s", ip_dst, tostring(sccp_dst))
|
|
||||||
local datestring = os.date("%Y%m%d%H%M%S")
|
|
||||||
local pcap_name = string.format("alink_trace_%s-%s_%s.pcap", src, dst, datestring)
|
|
||||||
local dumper = Dumper.new_for_current(pcap_name)
|
|
||||||
|
|
||||||
local con = { ip_src, tostring(sccp_src), tostring(sccp_dst), false, dumper, pcap_name }
|
|
||||||
|
|
||||||
dumper:dump_current()
|
|
||||||
connections[src] = con
|
|
||||||
connections[dst] = con
|
|
||||||
elseif sccp_type == 0x4 then
|
|
||||||
-- close a connection... remove it from the list
|
|
||||||
local src = string.format("%s-%s", ip_src, tostring(sccp_src))
|
|
||||||
local dst = string.format("%s-%s", ip_dst, tostring(sccp_dst))
|
|
||||||
|
|
||||||
local con = connections[src]
|
|
||||||
if not con then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
con[5]:dump_current()
|
|
||||||
con[5]:flush()
|
|
||||||
|
|
||||||
-- this causes a crash on unpacted wireshark
|
|
||||||
con[5]:close()
|
|
||||||
|
|
||||||
-- the connection had a failure
|
|
||||||
if con[4] == true then
|
|
||||||
local datestring = os.date("%Y%m%d%H%M%S")
|
|
||||||
local new_name = string.format("alink_failure_%s_%s-%s.pcap", datestring, con[2], con[3])
|
|
||||||
os.rename(con[6], new_name)
|
|
||||||
else
|
|
||||||
os.remove(con[6])
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- clear the old connection
|
|
||||||
connections[src] = nil
|
|
||||||
connections[dst] = nil
|
|
||||||
|
|
||||||
elseif sccp_type == 0x5 then
|
|
||||||
-- not handled yet... we should verify stuff here...
|
|
||||||
local dst = string.format("%s-%s", ip_dst, tostring(sccp_dst))
|
|
||||||
local con = connections[dst]
|
|
||||||
if not con then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
con[5]:dump_current()
|
|
||||||
elseif sccp_type == 0x6 then
|
|
||||||
local dst = string.format("%s-%s", ip_dst, tostring(sccp_dst))
|
|
||||||
local con = connections[dst]
|
|
||||||
if not con then
|
|
||||||
print("DON'T KNOW THIS CONNECTION for " .. ip_dst)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
con[5]:dump_current()
|
|
||||||
check_failure(con)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
function tap.draw()
|
|
||||||
print("DRAW")
|
|
||||||
end
|
|
||||||
function tap.reset()
|
|
||||||
print("RESET")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
init_listener()
|
|
||||||
end
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Some crazy scripts call testing... and MSC link failure simulation
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
ABORT BUSY
|
|
||||||
ABORT 'NO CARRIER'
|
|
||||||
ABORT 'OK'
|
|
||||||
|
|
||||||
'' AT
|
|
||||||
SAY "Dialing a number\n"
|
|
||||||
'OK' ATD05660066;
|
|
||||||
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Evil dial script..
|
|
||||||
|
|
||||||
while true;
|
|
||||||
do
|
|
||||||
chat -v -f all_dial < /dev/ttyACM0 > /dev/ttyACM0
|
|
||||||
sleep 5s
|
|
||||||
chat -v -f hangup < /dev/ttyACM0 > /dev/ttyACM0
|
|
||||||
sleep 2s
|
|
||||||
done
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
sleep 3
|
|
||||||
echo "enable"
|
|
||||||
sleep 1
|
|
||||||
echo "drop bts connection 0 oml"
|
|
||||||
sleep 1
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
while true;
|
|
||||||
do
|
|
||||||
echo "Going to drop the OML connection"
|
|
||||||
./drop-oml.sh | telnet 127.0.0.1 4242
|
|
||||||
sleep 58m
|
|
||||||
done
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
TIMEOUT 10
|
|
||||||
'' ^Z
|
|
||||||
SAY "Waiting for hangup confirm\n"
|
|
||||||
'' ATH;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
while true;
|
|
||||||
do
|
|
||||||
echo "Kill the osmo-bsc"
|
|
||||||
/usr/bin/kill -s SIGUSR2 `pidof osmo-bsc`
|
|
||||||
sleep 58s
|
|
||||||
done
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
# -*- mode: python-mode; py-indent-tabs-mode: nil -*-
|
|
||||||
"""
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2016 sysmocom s.f.m.c. GmbH
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*
|
|
||||||
* 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, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*/
|
|
||||||
"""
|
|
||||||
|
|
||||||
from optparse import OptionParser
|
|
||||||
from ipa import Ctrl
|
|
||||||
import socket
|
|
||||||
|
|
||||||
verbose = False
|
|
||||||
|
|
||||||
def connect(host, port):
|
|
||||||
if verbose:
|
|
||||||
print "Connecting to host %s:%i" % (host, port)
|
|
||||||
|
|
||||||
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
||||||
sck.setblocking(1)
|
|
||||||
sck.connect((host, port))
|
|
||||||
return sck
|
|
||||||
|
|
||||||
def do_set_get(sck, var, value = None):
|
|
||||||
(r, c) = Ctrl().cmd(var, value)
|
|
||||||
sck.send(c)
|
|
||||||
answer = Ctrl().rem_header(sck.recv(4096))
|
|
||||||
return (answer,) + Ctrl().verify(answer, r, var, value)
|
|
||||||
|
|
||||||
def set_var(sck, var, val):
|
|
||||||
(a, _, _) = do_set_get(sck, var, val)
|
|
||||||
return a
|
|
||||||
|
|
||||||
def get_var(sck, var):
|
|
||||||
(_, _, v) = do_set_get(sck, var)
|
|
||||||
return v
|
|
||||||
|
|
||||||
def _leftovers(sck, fl):
|
|
||||||
"""
|
|
||||||
Read outstanding data if any according to flags
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
data = sck.recv(1024, fl)
|
|
||||||
except socket.error as (s_errno, strerror):
|
|
||||||
return False
|
|
||||||
if len(data) != 0:
|
|
||||||
tail = data
|
|
||||||
while True:
|
|
||||||
(head, tail) = Ctrl().split_combined(tail)
|
|
||||||
print "Got message:", Ctrl().rem_header(head)
|
|
||||||
if len(tail) == 0:
|
|
||||||
break
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
parser = OptionParser("Usage: %prog [options] var [value]")
|
|
||||||
parser.add_option("-d", "--host", dest="host",
|
|
||||||
help="connect to HOST", metavar="HOST")
|
|
||||||
parser.add_option("-p", "--port", dest="port", type="int",
|
|
||||||
help="use PORT", metavar="PORT", default=4249)
|
|
||||||
parser.add_option("-g", "--get", action="store_true",
|
|
||||||
dest="cmd_get", help="perform GET operation")
|
|
||||||
parser.add_option("-s", "--set", action="store_true",
|
|
||||||
dest="cmd_set", help="perform SET operation")
|
|
||||||
parser.add_option("-v", "--verbose", action="store_true",
|
|
||||||
dest="verbose", help="be verbose", default=False)
|
|
||||||
parser.add_option("-m", "--monitor", action="store_true",
|
|
||||||
dest="monitor", help="monitor the connection for traps", default=False)
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
|
||||||
|
|
||||||
verbose = options.verbose
|
|
||||||
|
|
||||||
if options.cmd_set and options.cmd_get:
|
|
||||||
parser.error("Get and set options are mutually exclusive!")
|
|
||||||
|
|
||||||
if not (options.cmd_get or options.cmd_set or options.monitor):
|
|
||||||
parser.error("One of -m, -g, or -s must be set")
|
|
||||||
|
|
||||||
if not (options.host):
|
|
||||||
parser.error("Destination host and port required!")
|
|
||||||
|
|
||||||
sock = connect(options.host, options.port)
|
|
||||||
|
|
||||||
if options.cmd_set:
|
|
||||||
if len(args) < 2:
|
|
||||||
parser.error("Set requires var and value arguments")
|
|
||||||
_leftovers(sock, socket.MSG_DONTWAIT)
|
|
||||||
print "Got message:", set_var(sock, args[0], ' '.join(args[1:]))
|
|
||||||
|
|
||||||
if options.cmd_get:
|
|
||||||
if len(args) != 1:
|
|
||||||
parser.error("Get requires the var argument")
|
|
||||||
_leftovers(sock, socket.MSG_DONTWAIT)
|
|
||||||
(a, _, _) = do_set_get(sock, args[0])
|
|
||||||
print "Got message:", a
|
|
||||||
|
|
||||||
if options.monitor:
|
|
||||||
while True:
|
|
||||||
if not _leftovers(sock, 0):
|
|
||||||
print "Connection is gone."
|
|
||||||
break
|
|
||||||
sock.close()
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
f = open("unbalanced")
|
|
||||||
lines = []
|
|
||||||
for line in f:
|
|
||||||
lines.append(line)
|
|
||||||
|
|
||||||
filenames = {}
|
|
||||||
|
|
||||||
output = []
|
|
||||||
for line in lines:
|
|
||||||
if "[0x" in line:
|
|
||||||
start = line.find("[")
|
|
||||||
end = line.find("]")
|
|
||||||
addr = line[start+1:end]
|
|
||||||
try:
|
|
||||||
file = filenames[addr]
|
|
||||||
except KeyError:
|
|
||||||
r = os.popen("addr2line -fs -e ./bsc_hack %s" % addr)
|
|
||||||
all = r.read().replace("\n", ",")
|
|
||||||
file = all
|
|
||||||
filenames[addr] = file
|
|
||||||
|
|
||||||
line = line.replace(addr, file)
|
|
||||||
output.append(line)
|
|
||||||
|
|
||||||
g = open("unbalanced.2", "w")
|
|
||||||
g.write("".join(output))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
#
|
|
||||||
# Convert ETSI documents to an enum
|
|
||||||
#
|
|
||||||
|
|
||||||
import re, sys
|
|
||||||
|
|
||||||
def convert(string):
|
|
||||||
string = string.strip().replace(" ", "").rjust(8, "0")
|
|
||||||
var = 0
|
|
||||||
offset = 7
|
|
||||||
for char in string:
|
|
||||||
assert offset >= 0
|
|
||||||
var = var | (int(char) << offset)
|
|
||||||
offset = offset - 1
|
|
||||||
|
|
||||||
return var
|
|
||||||
|
|
||||||
def string(name):
|
|
||||||
name = name.replace(" ", "_")
|
|
||||||
name = name.replace('"', "")
|
|
||||||
name = name.replace('/', '_')
|
|
||||||
name = name.replace('(', '_')
|
|
||||||
name = name.replace(')', '_')
|
|
||||||
return "%s_%s" % (sys.argv[2], name.upper())
|
|
||||||
|
|
||||||
file = open(sys.argv[1])
|
|
||||||
|
|
||||||
|
|
||||||
for line in file:
|
|
||||||
m = re.match(r"[ \t]*(?P<value>[01 ]+)[ ]+(?P<name>[a-zA-Z /0-9()]+)", line[:-1])
|
|
||||||
|
|
||||||
if m:
|
|
||||||
print "\t%s\t\t= %d," % (string(m.groupdict()["name"]), convert(m.groupdict()["value"]))
|
|
||||||
else:
|
|
||||||
print line[:-1]
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
#!/usr/bin/python2
|
|
||||||
|
|
||||||
mod_license = '''
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2016 sysmocom s.f.m.c. GmbH
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*
|
|
||||||
* 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, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*/
|
|
||||||
'''
|
|
||||||
|
|
||||||
import sys, argparse, random, logging, tornado.ioloop, tornado.web, tornado.tcpclient, tornado.httpclient, eventsource, bsc_control
|
|
||||||
from eventsource import listener, request
|
|
||||||
|
|
||||||
'''
|
|
||||||
N. B: this is not an example of building proper REST API or building secure web application.
|
|
||||||
It's only purpose is to illustrate conversion of Osmocom's Control Interface to web-friendly API.
|
|
||||||
Exposing this to Internet while connected to production network might lead to all sorts of mischief and mayhem
|
|
||||||
from NSA' TAO breaking into your network to zombie apocalypse. Do NOT do that.
|
|
||||||
'''
|
|
||||||
|
|
||||||
token = None
|
|
||||||
stream = None
|
|
||||||
url = None
|
|
||||||
|
|
||||||
'''
|
|
||||||
Returns json according to following schema - see http://json-schema.org/documentation.html for details:
|
|
||||||
{
|
|
||||||
"title": "Ctrl Schema",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"variable": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"varlue": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["interface", "variable", "value"]
|
|
||||||
}
|
|
||||||
Example validation from command-line:
|
|
||||||
json validate --schema-file=schema.json --document-file=data.json
|
|
||||||
The interface is represented as string because it might look different for IPv4 vs v6.
|
|
||||||
'''
|
|
||||||
|
|
||||||
def read_header(data):
|
|
||||||
t_length = bsc_control.ipa_ctrl_header(data)
|
|
||||||
if (t_length):
|
|
||||||
stream.read_bytes(t_length - 1, callback = read_trap)
|
|
||||||
else:
|
|
||||||
print >> sys.stderr, "protocol error: length missing in %s!" % data
|
|
||||||
|
|
||||||
@tornado.gen.coroutine
|
|
||||||
def read_trap(data):
|
|
||||||
(t, z, v, p) = data.split()
|
|
||||||
if (t != 'TRAP' or int(z) != 0):
|
|
||||||
print >> sys.stderr, "protocol error: TRAP != %s or 0! = %d" % (t, int(z))
|
|
||||||
else:
|
|
||||||
yield tornado.httpclient.AsyncHTTPClient().fetch(tornado.httpclient.HTTPRequest(url = "%s/%s/%s" % (url, "ping", token),
|
|
||||||
method = 'POST',
|
|
||||||
headers = {'Content-Type': 'application/json'},
|
|
||||||
body = tornado.escape.json_encode({ 'variable' : v, 'value' : p })))
|
|
||||||
stream.read_bytes(4, callback = read_header)
|
|
||||||
|
|
||||||
@tornado.gen.coroutine
|
|
||||||
def trap_setup(host, port, target_host, target_port, tk):
|
|
||||||
global stream
|
|
||||||
global url
|
|
||||||
global token
|
|
||||||
token = tk
|
|
||||||
url = "http://%s:%s/sse" % (host, port)
|
|
||||||
stream = yield tornado.tcpclient.TCPClient().connect(target_host, target_port)
|
|
||||||
stream.read_bytes(4, callback = read_header)
|
|
||||||
|
|
||||||
def get_v(s, v):
|
|
||||||
return { 'variable' : v, 'value' : bsc_control.get_var(s, tornado.escape.native_str(v)) }
|
|
||||||
|
|
||||||
class CtrlHandler(tornado.web.RequestHandler):
|
|
||||||
def initialize(self):
|
|
||||||
self.skt = bsc_control.connect(self.settings['ctrl_host'], self.settings['ctrl_port'])
|
|
||||||
|
|
||||||
def get(self, v):
|
|
||||||
self.write(get_v(self.skt, v))
|
|
||||||
|
|
||||||
def post(self):
|
|
||||||
self.write(get_v(self.skt, self.get_argument("variable")))
|
|
||||||
|
|
||||||
class SetCtrl(CtrlHandler):
|
|
||||||
def get(self, var, val):
|
|
||||||
bsc_control.set_var(self.skt, tornado.escape.native_str(var), tornado.escape.native_str(val))
|
|
||||||
super(SetCtrl, self).get(tornado.escape.native_str(var))
|
|
||||||
|
|
||||||
def post(self):
|
|
||||||
bsc_control.set_var(self.skt, tornado.escape.native_str(self.get_argument("variable")), tornado.escape.native_str(self.get_argument("value")))
|
|
||||||
super(SetCtrl, self).post()
|
|
||||||
|
|
||||||
class Slash(tornado.web.RequestHandler):
|
|
||||||
def get(self):
|
|
||||||
self.write('<html><head><title>%s</title></head><body>Using Tornado framework v%s'
|
|
||||||
'<form action="/get" method="POST">'
|
|
||||||
'<input type="text" name="variable">'
|
|
||||||
'<input type="submit" value="GET">'
|
|
||||||
'</form>'
|
|
||||||
'<form action="/set" method="POST">'
|
|
||||||
'<input type="text" name="variable">'
|
|
||||||
'<input type="text" name="value">'
|
|
||||||
'<input type="submit" value="SET">'
|
|
||||||
'</form>'
|
|
||||||
'</body></html>' % ("Osmocom Control Interface Proxy", tornado.version))
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
p = argparse.ArgumentParser(description='Osmocom Control Interface proxy.')
|
|
||||||
p.add_argument('-c', '--control-port', type = int, default = 4252, help = "Target Control Interface port")
|
|
||||||
p.add_argument('-a', '--control-host', default = 'localhost', help = "Target Control Interface adress")
|
|
||||||
p.add_argument('-b', '--host', default = 'localhost', help = "Adress to bind proxy's web interface")
|
|
||||||
p.add_argument('-p', '--port', type = int, default = 6969, help = "Port to bind proxy's web interface")
|
|
||||||
p.add_argument('-d', '--debug', action='store_true', help = "Activate debugging (default off)")
|
|
||||||
p.add_argument('-t', '--token', default = 'osmocom', help = "Token to be used by SSE client in URL e. g. http://127.0.0.1:8888/poll/osmocom where 'osmocom' is default token value")
|
|
||||||
p.add_argument('-k', '--keepalive', type = int, default = 5000, help = "Timeout betwwen keepalive messages, in milliseconds, defaults to 5000")
|
|
||||||
args = p.parse_args()
|
|
||||||
random.seed()
|
|
||||||
tornado.netutil.Resolver.configure('tornado.netutil.ThreadedResolver') # Use non-blocking resolver
|
|
||||||
logging.basicConfig()
|
|
||||||
application = tornado.web.Application([
|
|
||||||
(r"/", Slash),
|
|
||||||
(r"/get", CtrlHandler),
|
|
||||||
(r"/get/(.*)", CtrlHandler),
|
|
||||||
(r"/set", SetCtrl),
|
|
||||||
(r"/set/(.*)/(.*)", SetCtrl),
|
|
||||||
(r"/sse/(.*)/(.*)", listener.EventSourceHandler, dict(event_class = listener.JSONIdEvent, keepalive = args.keepalive)),
|
|
||||||
], debug = args.debug, ctrl_host = args.control_host, ctrl_port = args.control_port)
|
|
||||||
application.listen(address = args.host, port = args.port)
|
|
||||||
trap_setup(args.host, args.port, application.settings['ctrl_host'], application.settings['ctrl_port'], args.token)
|
|
||||||
tornado.ioloop.IOLoop.instance().start()
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
demonstrate a unblock bug on the GB Proxy..
|
|
||||||
"""
|
|
||||||
|
|
||||||
bts_ns_reset = "\x02\x00\x81\x01\x01\x82\x1f\xe7\x04\x82\x1f\xe7"
|
|
||||||
ns_reset_ack = "\x03\x01\x82\x1f\xe7\x04\x82\x1f\xe7"
|
|
||||||
|
|
||||||
bts_ns_unblock = "\x06"
|
|
||||||
ns_unblock_ack = "\x07"
|
|
||||||
|
|
||||||
bts_bvc_reset_0 = "\x00\x00\x00\x00\x22\x04\x82\x00\x00\x07\x81\x03\x3b\x81\x02"
|
|
||||||
ns_bvc_reset_0_ack = "\x00\x00\x00\x00\x23\x04\x82\x00\x00"
|
|
||||||
|
|
||||||
bts_bvc_reset_8167 = "\x00\x00\x00\x00\x22\x04\x82\x1f\xe7\x07\x81\x08\x08\x88\x72\xf4\x80\x10\x1c\x00\x9c\x40"
|
|
||||||
|
|
||||||
|
|
||||||
import socket
|
|
||||||
socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
||||||
socket.bind(("0.0.0.0", 0))
|
|
||||||
socket.setblocking(1)
|
|
||||||
|
|
||||||
|
|
||||||
import sys
|
|
||||||
port = int(sys.argv[1])
|
|
||||||
print "Sending data to port: %d" % port
|
|
||||||
|
|
||||||
def send_and_receive(packet):
|
|
||||||
socket.sendto(packet, ("127.0.0.1", port))
|
|
||||||
|
|
||||||
try:
|
|
||||||
data, addr = socket.recvfrom(4096)
|
|
||||||
except socket.error, e:
|
|
||||||
print "ERROR", e
|
|
||||||
import sys
|
|
||||||
sys.exit(0)
|
|
||||||
return data
|
|
||||||
|
|
||||||
#send stuff once
|
|
||||||
|
|
||||||
to_send = [
|
|
||||||
(bts_ns_reset, ns_reset_ack, "reset ack"),
|
|
||||||
(bts_ns_unblock, ns_unblock_ack, "unblock ack"),
|
|
||||||
(bts_bvc_reset_0, ns_bvc_reset_0_ack, "BVCI=0 reset ack"),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
for (out, inp, type) in to_send:
|
|
||||||
res = send_and_receive(out)
|
|
||||||
if res != inp:
|
|
||||||
print "Failed to get the %s" % type
|
|
||||||
sys.exit(-1)
|
|
||||||
|
|
||||||
import time
|
|
||||||
time.sleep(3)
|
|
||||||
res = send_and_receive(bts_bvc_reset_8167)
|
|
||||||
print "Sent all messages... check wireshark for the last response"
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user