Hi all,
This patch set adds to libosmocore an optimized Viterbi decodeer for
architecture specific (Intel SSE) and non-specific cases. The
implementation covers codes with constraint lengths of K=5 and K=7 and
rates 1/4 to 3/4, which make up the majority of GSM use cases. Speedup
from the current implementation is in the range of 5 to 20 depending on
the processor and code type. API is unchanged.
Tested on Haswell (i7-4770K) and Atom (D2550). Additional test codes
from osmo-bts are included. Further tests for AWGN bit-error-rate
and benchmarks can be found in the following repository.
https://github.com/ttsou/osmo-conv-test
Here are some examples.
Bit error test for GPRS CS2 with SNR of 5 dB and 100000 bursts.
$ ./conv_test -c 2 -e -r 5 -i 100000
=================================================
[+] Testing: GPRS CS2
[.] Specs: (N=2, K=5, non-recursive, flushed, not punctured)
[.] Input length : ret = 290 exp = 290 -> OK
[.] Output length : ret = 588 exp = 588 -> OK
[.] BER tests:
[..] Testing base:
[..] Input BER.......................... 0.042443
[..] Output BER......................... 0.000006
[..] Output FER......................... 0.001350 (135)
[..] Testing SIMD:
[..] Input BER.......................... 0.042460
[..] Output BER......................... 0.000005
[..] Output FER......................... 0.001240 (124)
Timed AFS benchmark with 8 threads and 100000 bursts per thread.
$ ./conv_test -b -c 10 -j 8 -i 100000
=================================================
[+] Testing: GSM TCH/AFS 6.7
[.] Specs: (N=4, K=5, recursive, flushed, punctured)
[.] Input length : ret = 140 exp = 140 -> OK
[.] Output length : ret = 448 exp = 448 -> OK
[.] Performance benchmark:
[..] Encoding / Decoding 800000 bursts on 8 thread(s):
[..] Testing base:
[..] Elapsed time....................... 4.320001 secs
[..] Rate............................... 25.925920 Mbps
[..] Testing SIMD:
[..] Elapsed time....................... 0.458272 secs
[..] Rate............................... 244.396341 Mbps
[..] Speedup............................ 9.426718
-TT
From: Pablo Neira Ayuso <pablo(a)netfilter.org>
The following patchset, although it looks a bit large, it is composed of many
small incremental changes to improve the existing osmux infrastructure and to
add dummy padding support.
The dummy padding consists of a osmux header and payload that looks like this:
OSMUX seq=000 ccid=002 ft=2 ctr=3 amr_f=0 amr_q=0 amr_ft=03 amr_cmr=00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ]
The frame type is OSMUX_FT_DUMMY (=2) in the batch that whose payload is
padded with 0xff. Note that the message above is padding the circuit ID 2.
This is used for early bandwidth preallocation in links that involve relatively
slow dynamic bandwidth allocation such as Iridium/OpenPort.
The osmux test infrastructure has been improved (to resolve some memleaks) and
enhanced to cover this new dummy support.
The OpenBSC changeset is composed of one very small patch that will come after
this batch.
If no major concerns, I'll push this initial batch soon into the repository.
Thanks.
Pablo Neira Ayuso (18):
osmux: discard non voice osmux message
osmux: add osmux_input_state structure
osmux: add circuit helper functions
osmux: rename struct batch_list_node to osmux_circuit
osmux: rename circuit->list to circuit->rtp_list
osmux: pass up struct osmux_batch
osmux: count pending messages to be transformed in the batch
osmux: introduce osmux_xfrm_input_close_circuit()
osmux: introduce osmux_xfrm_input_open_circuit()
tests: osmux: adapt it to use the new circuit API
tests: osmux: factor out main test loop
tests: osmux: test online deactivation of dummy padding
tests: osmux: validate dummy padding with no voice data interaction
tests: osmux: test circuit reopening after closure
osmux: kill osmux_get_hdr()
tests: osmux: fix msgb leaks
tests: compile tests with debugging symbols, ie. -g
tests: osmux: iterate 64 times in osmo_test_loop()
include/osmocom/netif/osmux.h | 8 +-
src/osmux.c | 374 ++++++++++++++++++++++++++---------------
tests/Makefile.am | 2 +-
tests/osmux/osmux_test.c | 80 ++++++---
4 files changed, 304 insertions(+), 160 deletions(-)
--
1.7.10.4
Hi list,
I've installed omsocom for the first time on a USRP B200 and I'm interested
in trying out the GPRS stack. I've followed a few pages on the wiki, namely
http://openbsc.osmocom.org/trac/wiki/network_from_scratch and
http://openbsc.osmocom.org/trac/wiki/OpenBSC_GPRS to get set up and I am
not sure how up to date these tutorials are. I have calls working via the
LCR, but I cannot get GPRS functioning. I see no activity on the BSC log
when attempting GPRS attach using APN openbsc. I also see no traffic
between the SGSN and the BSC (listening with tshark on 127.0.0.1:23000).
Any help is appreciated.
I am currently using osmo-trx/master, osmo-bsc/jolly/testing,
libosmo-abis/jolly/multi-trx, omso-bts/jolly/trx, openggsn/master, and
osmo-pcu/master.
Best,
Omar
Hi all.
One of the options for call routing for OpenBSC is LCR. They talk to each other over
MNCC which is nice versioned protocol.
What puzzles me most is the version difference:
OpenBSC: openbsc/include/openbsc/mncc.h:166:#define MNCC_SOCK_VERSION 4
LCR: mncc.h:333:#define MNCC_SOCK_VERSION 5
The OpenBSC is latest from git://git.osmocom.org/openbsc master branch, the LCR is
latest from git://git.misdn.eu/lcr.git, master branch as well.
So, what am I missing? Where does this version difference comes from?
On a related note - the MNCC code in OpenBSC is part of libbsc but there's no such
package or library when I'm building .deb for example. If we could split off MNCC
implementation into separate library (libmncc? libosmocore?) and use it from both
LCR, OpenBSC (and whatever else we might want to use in future) than it would solve
such versioning and compatibility issues once and for all.
What do you think?
--
best regards,
Max, http://fairwaves.co
From: Holger Hans Peter Freyther <holger(a)moiji-mobile.com>
When we can't find the TMSI then the subscriber is not in our
VLR. We have not consulted with the HLR and it is better to not
use such a severe error code.
---
openbsc/src/libmsc/gsm_04_08.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c
index 29ab2ba..e380d94 100644
--- a/openbsc/src/libmsc/gsm_04_08.c
+++ b/openbsc/src/libmsc/gsm_04_08.c
@@ -968,7 +968,7 @@ static int gsm48_rx_mm_serv_req(struct gsm_subscriber_connection *conn, struct m
/* FIXME: if we don't know the TMSI, inquire abit IMSI and allocate new TMSI */
if (!subscr)
return gsm48_tx_mm_serv_rej(conn,
- GSM48_REJECT_IMSI_UNKNOWN_IN_HLR);
+ GSM48_REJECT_IMSI_UNKNOWN_IN_VLR);
if (!conn->subscr)
conn->subscr = subscr;
--
2.3.5
Hi all.
I'm working on probation on mobile operator as a student.
Currently, I'm trying to create site for testing, using Huawei BTS 3900B
and OpenBSC software.
But I can't set up it.
I have a several questions:
1) Huawei BTS uses Abis over IP, how can I connect this BTS to OpenBSC.
2) Are there any examples of configuration in this case?
Thanks.
Dear Experts,
Hello, I am running a gsm system with followings:
OpenBSC version: 0.13.0.319-30e0e
LCR version 1.14
astersik version 1.8.10.1
The system is sited is a busy area. The system works fine for few days but
hangs once the hlr.sqlite3 file size reaches near 12 MB and that causes the
osmo-nitb to take 99% of the cpu usage. I used "./osmo-nitb -m -P -C" to
run the system. The hlr.sqlite3 file increases @2MB/Day. The 'Subscriber'
table of the hlr.sqlite3 file adds a large number of IMSI with
authorized=0. Tables like Counters, Eqipment and EquipmentWatch are filling
up with lots of data. Now the only solution to this problem is to manually
delete the data from the tables.
May I get some light to solve the issue form the experts like you all?
With regards.
[ Content from the openbsc.cfg file is as following:
!
! OpenBSC configuration saved from vty
! !
password foo
!
line vty
no login
!
e1_input
e1_line 0 driver ipa
network
network country code XXX
mobile network code XX
short name Test
long name Test
auth policy closed
location updating reject cause 13
encryption a5 0
neci 1
rrlp mode none
mm info 0
handover 0
handover window rxlev averaging 10
handover window rxqual averaging 1
handover window rxlev neighbor averaging 10
handover power budget interval 6
handover power budget hysteresis 3
handover maximum distance 9999
timer t3101 10
timer t3103 0
timer t3105 0
timer t3107 0
timer t3109 4
timer t3111 1
timer t3113 60
timer t3115 0
timer t3117 0
timer t3119 0
timer t3141 0
bts 0
type sysmobts
band GSMXXX
cell_identity X
location_area_code X
training_sequence_code 7
base_station_id_code 63
ms max power 30
cell reselection hysteresis 4
rxlev access min 0
periodic location update 100
channel allocator ascending
rach tx integer 9
rach max transmission 7
ip.access unit_id XXXX 0
oml ip.access stream_id 255 line 0
gprs mode none
trx 0
rf_locked 0
arfcn XXX
nominal power 23
max_power_red XX
rsl e1 tei 0
timeslot 0
phys_chan_config CCCH+SDCCH4
timeslot 1
phys_chan_config SDCCH8
timeslot 2
phys_chan_config TCH/F
timeslot 3
phys_chan_config TCH/F
timeslot 4
phys_chan_config TCH/F
timeslot 5
phys_chan_config TCH/F
timeslot 6
phys_chan_config TCH/F
timeslot 7
phys_chan_config TCH/F
Signed-off-by: Max <max.suraev(a)fairwaves.co>
---
openbsc/src/libmsc/db.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c
index 428f99b..035202d 100644
--- a/openbsc/src/libmsc/db.c
+++ b/openbsc/src/libmsc/db.c
@@ -301,7 +301,7 @@ static int update_db_revision_3(void)
dbi_result_free(result);
/* Cycle through old messages and convert them to the new format */
- result = dbi_conn_queryf(conn, "SELECT * FROM SMS_3");
+ result = dbi_conn_query(conn, "SELECT * FROM SMS_3");
if (!result) {
LOGP(DDB, LOGL_ERROR,
"Failed fetch messages from the old SMS table (upgrade from rev 3).\n");
@@ -1095,8 +1095,8 @@ int db_subscriber_list_active(void (*cb)(struct gsm_subscriber*,void*), void *cl
{
dbi_result result;
- result = dbi_conn_queryf(conn,
- "SELECT * from Subscriber WHERE LAC != 0 AND authorized = 1");
+ result = dbi_conn_query(conn,
+ "SELECT * from Subscriber WHERE LAC != 0 AND authorized = 1");
if (!result) {
LOGP(DDB, LOGL_ERROR, "Failed to list active subscribers\n");
return -1;
--
2.1.4