Dear List,
I am in the process of creating the Wiki page for Ettus B200/B210 with OpenBSC, GPRS and Asterisk.
I am quite close, both data and calls are working, but the voice calls are half sided. The downlink direction works, but the uplink does not.
I tried without Asterisk and LCR (between two phones) and still the calls are half sided.
In the mean time I got these messages in the Osmo-BTS log:
<0006> scheduler.c:276 PH-DATA.req: chan_nr=0x0a link_id=0x00 fn=1284768 ts=2 tr x=0
<0006> scheduler.c:1036 TCH/F has not been served !! No prim for trx=0 ts=1 at f n=1284764 to transmit.
<0006> scheduler.c:1036 TCH/F has not been served !! No prim for trx=0 ts=2 at f n=1284764 to transmit.
<0006> scheduler.c:379 TCH RTS.ind: chan=TCH/F chan_nr=0x09 fn=1284772 ts=1 trx= 0
<0006> scheduler.c:276 PH-DATA.req: chan_nr=0x09 link_id=0x00 fn=1284772 ts=1 tr x=0
<0006> scheduler.c:379 TCH RTS.ind: chan=TCH/F chan_nr=0x0a fn=1284772 ts=2 trx= 0
<0006> scheduler.c:276 PH-DATA.req: chan_nr=0x0a link_id=0x00 fn=1284772 ts=2 tr x=0
<0006> scheduler.c:1036 TCH/F has not been served !! No prim for trx=0 ts=1 at f n=1284768 to transmit.
<0006> scheduler.c:1036 TCH/F has not been served !! No prim for trx=0 ts=2 at f n=1284768 to transmit.
SMS and GPRS seems to be fine.
If someone have any idea, I would love to hear it. :-)
Thanks!
Csaba
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
Dear all,
IN-Berlin has confirmed the dates in April where we could book the
venue.
Can those eligible + interested in attending please quickly indicate
their preference at http://doodle.com/poll/if263cpxieavsqiq ?
Thanks!
Disclaimer: OsmoDevCon is an invitation-only event for developers with
proven history of contributing to any of the Osmocom projects. The fact
that there is a public poll about the scheduling of the event and/or
your participation in that poll does not mean a particular applicant is
invited.
Regards,
Harald
--
- Harald Welte <laforge(a)gnumonks.org> http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
Hi all,
new year, new approaches. In December I was tasked to think about a
real SMSC with SMPP input and SS7 output (or SMPP in the future) and
I wrote down my ideas[1] about data storage, approach, how to achieve
scaling. What is missing fail-over but there are some ideas for this
as well.
The implementation will be done using Pharo and at least the first
data storage will use mongodb >= 3.2. In the past my Pharo work has not
been hosted in git but for this project it will change and maybe it
creates some more visibility, historically documentation and debian
packages were not too visible but that will be different this time
as well.
If you are interested in specification, Smalltalk, testing, load testing,
SS7 or such please join me in the development.
happy hacking
holger
[1] https://github.com/zecke/osmo-smsc/blob/master/README.asciidoc it
will move to git.osmocom.org but I just wanted to have online asciidoc
rendering.
This commit adds this predicate function which can be used to
avoid the execution of code if a certain log level is not enabled.
The function will only return 0 (false), if it is sure that a logging
call for the same facility and level will not produce any output.
This safety criterion shall ensure, that no logging output is lost
due to the use of this predicate as a guard. On the other hand, even
if the predicate returns != 0 (true), no logging output might get
generated by a similar logging command.
Note that the current implementation is not focussed on performance,
which could be improved by using a lookup table instead of iterating
through every target.
Sponsored-by: On-Waves ehf
---
include/osmocom/core/logging.h | 1 +
src/logging.c | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+)
diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h
index 1c159d0..290b33d 100644
--- a/include/osmocom/core/logging.h
+++ b/include/osmocom/core/logging.h
@@ -198,6 +198,7 @@ void logp2(int subsys, unsigned int level, const char *file,
int line, int cont, const char *format, ...)
__attribute__ ((format (printf, 6, 7)));
int log_init(const struct log_info *inf, void *talloc_ctx);
+int log_check_level(int subsys, unsigned int level);
/* context management */
void log_reset_context(void);
diff --git a/src/logging.c b/src/logging.c
index 876964a..c7b1999 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -865,4 +865,43 @@ int log_init(const struct log_info *inf, void *ctx)
return 0;
}
+/*! \brief Check whether a log entry will be generated.
+ * \returns != 0 if a log entry might get generated by at least one target */
+int log_check_level(int subsys, unsigned int level)
+{
+ struct log_target *tar;
+
+ if (subsys < 0)
+ subsys = subsys_lib2index(subsys);
+
+ if (subsys > osmo_log_info->num_cat)
+ subsys = DLGLOBAL;
+
+ /* TODO: The following could/should be cached (update on config) */
+
+ llist_for_each_entry(tar, &osmo_log_target_list, entry) {
+ struct log_category *category;
+
+ category = &tar->categories[subsys];
+ /* subsystem is not supposed to be logged */
+ if (!category->enabled)
+ continue;
+
+ /* Check the global log level */
+ if (tar->loglevel != 0 && level < tar->loglevel)
+ continue;
+
+ /* Check the category log level */
+ if (tar->loglevel == 0 && category->loglevel != 0 &&
+ level < category->loglevel)
+ continue;
+
+ /* This might get logged (ignoring filters) */
+ return 1;
+ }
+
+ /* We are sure, that this will not be logged. */
+ return 0;
+}
+
/*! @} */
--
1.9.1
Is this a proper way to copyright OsmoCSCN? I'm trying to mention both the
facts that it's something new as well as that it is based on a copy-paste of
OsmoNITB:
/* (C) 2016 by sysmocom s.f.m.c. GmbH <info(a)sysmocom.de>
* All Rights Reserved
*
* Based on OsmoNITB:
* (C) 2008-2010 by Harald Welte <laforge(a)gnumonks.org>
* (C) 2009-2012 by Holger Hans Peter Freyther <zecke(a)selfish.org>
* All Rights Reserved
[...]
Thanks!
~Neels
--
- Neels Hofmeyr <nhofmeyr(a)sysmocom.de> http://www.sysmocom.de/
=======================================================================
* sysmocom - systems for mobile communications GmbH
* Alt-Moabit 93
* 10559 Berlin, Germany
* Sitz / Registered office: Berlin, HRB 134158 B
* Geschäftsführer / Managing Directors: Holger Freyther, Harald Welte
I'm using LCR as a GSM <-> SIP interface and I've been trying to figure out
why MO calls result in a segfault. I am running openbsc on cdc548cb and LCR
on c14326641a built and run on an ubuntu 14.04 64bit.
>From what I've investigated so far, the request_uri passed to sofia-sip is
malformed.
Has anyone seen this problem before? Would appreciate pointers.
Here are the full logs and stack trace:
** LCR Version 1.14
> 000000 DEBUG (in route.c/getrulesetbyname() line 1928): ruleset main found.
> 000000 DEBUG (in sip.cpp/sip_init() line 1997): SIP globals initialized
> 000000 DEBUG (in gsm.cpp/mncc_socket_retry_cb() line 1443): Connected to
> MNCC socket /tmp/bsc_mncc!
> su_port_create(0x6ad410): epoll_create() => 0: OK
> su_socket_port_init(0x6ad410, 0x7ffff7dcf880) called
> su_pthread_port_init(0x6ad410, 0x7ffff7dcf880) called
> nua: nua_create: entering
> [New Thread 0x7ffff6c52700 (LWP 11520)]
> su_port_create(0x7ffff00008c0): epoll_create() => 0: OK
> su_socket_port_init(0x7ffff00008c0, 0x7ffff7dcf880) called
> su_pthread_port_init(0x7ffff00008c0, 0x7ffff7dcf880) called
> nua: nua_stack_init: entering
> nua: nua_stack_set_params: entering
> soa_create("default", 0x7ffff0001130, 0x7ffff0001230) called
> soa_set_params(static::0x7ffff0001920, ...) called
> soa_set_params(static::0x7ffff0001920, ...) called
> nta_agent_create: initialized hash tables
> nta_agent_create: initialized transports
> nta_agent_create: initialized random identifiers
> nta_agent_create: initialized timer
> nta_agent_create: initialized resolver
> tport_create(): 0x7ffff0003df0
> nta: master transport created
> tport_bind_server(0x7ffff0003df0) to */127.0.0.1:5062/sip
> tport_bind_server(0x7ffff0003df0): calling tport_listen for udp
> tport_alloc_primary(0x7ffff0003df0): new primary tport 0x7ffff0004470
> tport_listen(0x7ffff0004470): listening at udp/127.0.0.1:5062/sip
> tport_bind_server(0x7ffff0003df0): calling tport_listen for tcp
> tport_alloc_primary(0x7ffff0003df0): new primary tport 0x7ffff0004910
> tport_listen(0x7ffff0004910): listening at tcp/127.0.0.1:5062/sip
> nta: bound to (127.0.0.1:5062;transport=*)
> nta: agent_init_via: SIP/2.0/udp 127.0.0.1:5062 (sip)
> nta: agent_init_via: SIP/2.0/tcp 127.0.0.1:5062 (sip)
> nta: Via fields initialized
> nta: Contact header created
> nua_register: Adding contact URL '127.0.0.1' to list.
> nua: nua_set_params: entering
> nua((nil)): sent signal r_set_params
> 000000 DEBUG (in sip.cpp/sip_init_inst() line 1942): SIP interface created
> (inst=0x6acce0)
> nua((nil)): recv signal r_set_params
> nua: nua_stack_set_params: entering
> soa_set_params(static::0x7ffff0001920, ...) called
> nua((nil)): event r_set_params 200 OK
> LCR 1.14 started, waiting for calls...
> 000000 TRACE 15.01.16 11:36:21.011 --: LCR 1.14 started, waiting for
> calls...
> nua: nua_application_event: entering
> 000000 DEBUG (in sip.cpp/sip_callback() line 1785): Event 23 from stack
> received (handle=(nil))
> 000000 DEBUG (in port.cpp/Port() line 210): new port (1) of type 0x3101,
> name 'gsm-0-in' interface 'gsm'
> 000000 DEBUG (in gsm.cpp/Pgsm() line 239): Created new GSMPort(gsm-0-in).
> 000000 DEBUG (in gsm_bs.cpp/Pgsm_bs() line 56): Created new
> GSMBSPort(gsm-0-in).
> 000000 TRACE 15.01.16 11:37:28.210 CH(1): New call ref LCR<->BSC callref
> new=0x8000000d
> 000000 TRACE 15.01.16 11:37:28.210 CH(1): Codec negotiation LCR<->BSC
> bearer capa='given by MS' speech version='Full Rate given'
> 000000 TRACE 15.01.16 11:37:28.210 CH(1): MNCC_SETUP_IND LCR<->BSC
> calling number=639360100037 imsi=901550000000824 dialing number=12345678
> 000000 DEBUG (in endpoint.cpp/Endpoint() line 48): EPOINT(1): Allocating
> enpoint 1 and connecting it with: ioport
> 000000 DEBUG (in endpoint.cpp/portlist_new() line 150): EPOINT(1)
> allocating port_list, attaching to port 1
> 000000 DEBUG (in appbridge.cpp/EndpointAppBridge() line 31): Bridge
> endpoint created
> 000000 DEBUG (in port.cpp/epointlist_new() line 131): PORT(1) allocating
> epoint_list.
> 000000 TRACE 15.01.16 11:37:28.211 CH(1): MNCC_CALL_PROC_REQ LCR<->BSC
> progress coding=3 location=1 descr=8
> 000000 DEBUG (in port.cpp/new_state() line 283): PORT(gsm-0-in) new state
> PORT_STATE_IDLE --> PORT_STATE_IN_PROCEEDING
> 000000 TRACE 15.01.16 11:37:28.211 CH(1): MNCC_FRAME_RECV LCR<->BSC
> 000000 DEBUG (in gsm_bs.cpp/setup_ind() line 631): Request RTP peer info,
> before forwarding setup
> 000000 DEBUG (in gsm.cpp/rtp_create_ind() line 869): Got RTP peer info
> (7f000001,52103) forwarding setup
> 000000 DEBUG (in message.c/_message_put() line 70): message MESSAGE_SETUP
> written from 140733193388033 to 140733193388033 (memory 6b1a50 at file
> gsm.cpp, line 872)
> 000000 DEBUG (in message.c/message_get() line 115): message MESSAGE_SETUP
> reading from 1 to 140733193388033 (memory 6b1a50)
> 000000 DEBUG (in appbridge.cpp/port_setup() line 94): EPOINT(1) epoint
> received setup from='639360100037' to='12345678'
> 000000 DEBUG (in port.cpp/Port() line 210): new port (2) of type 0x2002,
> name 'sip-0-out' interface 'sip'
> 000000 DEBUG (in sip.cpp/Psip() line 72): Created new Psip(sip-0-out).
> 000000 DEBUG (in endpoint.cpp/portlist_new() line 150): EPOINT(1)
> allocating port_list, attaching to port 2
> 000000 DEBUG (in message.c/_message_put() line 70): message MESSAGE_SETUP
> written from 1 to 2 (memory 6b1a50 at file message.c, line 94)
> 000000 DEBUG (in message.c/_message_put() line 70): message MESSAGE_BRIDGE
> written from 1 to 1 (memory 6b6c00 at file appbridge.cpp, line 222)
> 000000 DEBUG (in message.c/_message_put() line 70): message MESSAGE_BRIDGE
> written from 1 to 2 (memory 6ba6e0 at file appbridge.cpp, line 225)
> 000000 DEBUG (in message.c/message_get() line 115): message MESSAGE_SETUP
> reading from 140733193388033 to 2 (memory 6b1a50)
> 000000 DEBUG (in sip.cpp/message_setup() line 954): Doing Setup (inst
> 0x6acce0)
> 000000 DEBUG (in sip.cpp/message_setup() line 961): RTP info given by
> remote, forward that
> 000000 DEBUG (in sip.cpp/message_setup() line 968): local ip 7f000001 port
> 52103
> 000000 DEBUG (in sip.cpp/message_setup() line 969): remote ip 00000000
> port 0
> nua: nh_create_handle: entering
> 000000 TRACE 15.01.16 11:37:28.816 CH(2): NEW handle handle new=0x6b09c0
> 000000 DEBUG (in sip.cpp/message_setup() line 1038): Using SDP for invite:
> v=0
> o=LCR-Sofia-SIP 0 0 IN IP4 127.0.0.1
> s=SIP Call
> c=IN IP4 127.0.0.1
> t=0 0
> m=audio 52103 RTP/AVP 3
> a=rtpmap:3 GSM/8000
> 000000 TRACE 15.01.16 11:37:28.816 CH(2): INVITE from uri=
> sip:639360100037@127.0.0.1:5062 to uri=sip:12345678@192.168.40.100:5060
> rtp ip=127.0.0.1 port=52103,52104 payload=GSM:3
> nua: nua_invite: entering
> nua(0x6b09c0): sent signal r_invite
> 000000 DEBUG (in port.cpp/new_state() line 283): PORT(sip-0-out) new state
> PORT_STATE_IDLE --> PORT_STATE_OUT_SETUP
> 000000 DEBUG (in sip.cpp/message_setup() line 1069): do proceeding
> 000000 DEBUG (in port.cpp/new_state() line 283): PORT(sip-0-out) new state
> PORT_STATE_OUT_SETUP --> PORT_STATE_OUT_PROCEEDING
> 000000 DEBUG (in message.c/_message_put() line 70): message
> MESSAGE_PROCEEDING written from 2 to 1 (memory 6be1c0 at file sip.cpp, line
> 1072)
> 000000 DEBUG (in port.cpp/epointlist_new() line 131): PORT(2) allocating
> epoint_list.
> 000000 DEBUG (in message.c/message_get() line 115): message MESSAGE_BRIDGE
> reading from 1 to 1 (memory 6b6c00)
> 000000 DEBUG (in port.cpp/message_epoint() line 657): PORT(gsm-0-in)
> bridging to id 1
> nua(0x6b09c0): recv signal r_invite
> 000000 DEBUG (in port.cpp/bridge() line 1305): Port 1 creating not
> existing bridge 1.
> 000000 DEBUG (in message.c/message_get() line 115): message MESSAGE_BRIDGE
> reading from 1 to 2 (memory 6ba6e0)
> 000000 DEBUG (in port.cpp/message_epoint() line 657): PORT(sip-0-out)
> bridging to id 1
> nua: nua_stack_set_params: entering
> 000000 DEBUG (in port.cpp/bridge() line 1290): Port 2 found existing
> bridge 1.
> 000000 DEBUG (in message.c/message_get() line 115): message
> MESSAGE_PROCEEDING reading from 2 to 1 (memory 6be1c0)
> 000000 DEBUG (in appbridge.cpp/port_other() line 259): EPOINT(8) epoint
> received message 7070144 from port
> 000000 DEBUG (in message.c/_message_put() line 70): message
> MESSAGE_PROCEEDING written from 1 to 140733193388033 (memory 6be1c0 at file
> message.c, line 94)
> 000000 DEBUG (in message.c/message_get() line 115): message
> MESSAGE_PROCEEDING reading from 1 to 1 (memory 6be1c0)
> nua(0x6b09c0): adding session usage
> nta_leg_tcreate(0x7ffff0006b00)
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0x7ffff6c52700 (LWP 11520)]
> strlen () at ../sysdeps/x86_64/strlen.S:106
> 106 ../sysdeps/x86_64/strlen.S: No such file or directory.
> (gdb) bt
> #0 strlen () at ../sysdeps/x86_64/strlen.S:106
> #1 0x00007ffff7b70896 in url_xtra (url=url@entry=0x7ffff00075d0) at
> url.c:1048
> #2 0x00007ffff7b2deaf in sip_request_create (home=home@entry=0x7ffff0006fc0,
> method=method@entry=sip_method_invite, name=0x7ffff7b916e2
> <sip_method_name_invite> "INVITE",
> name@entry=0x7ffff7b8ed49 "INVITE", uri=uri@entry=0x7ffff00075d0,
> version=version@entry=0x0) at sip_basic.c:225
> #3 0x00007ffff7ae3512 in nta_msg_request_complete (msg=msg@entry=0x7ffff0006fc0,
> leg=leg@entry=0x7ffff0006b00, method=method@entry=sip_method_invite,
> method_name=method_name@entry=0x7ffff7b8ed49 "INVITE",
> request_uri=0x7ffff00075d0, request_uri@entry=0x0) at nta.c:3890
> #4 0x00007ffff7b07d92 in nua_client_request_sendmsg (cr=cr@entry=0x7ffff0005af0)
> at nua_client.c:803
> #5 0x00007ffff7b08de9 in nua_client_request_try (cr=0x7ffff0005af0) at
> nua_client.c:708
> #6 0x00007ffff7b06b93 in nua_client_init_request0 (cr=0x7ffff0005af0) at
> nua_client.c:605
> #7 nua_client_init_request (cr=0x7ffff0005af0) at nua_client.c:442
> #8 0x00007ffff7b07246 in nua_client_create (nh=nh@entry=0x6b09c0,
> event=event@entry=31, methods=methods@entry=0x7ffff7dc4d20
> <nua_invite_client_methods>, tags=tags@entry=0x6b0eb0)
> at nua_client.c:199
> #9 0x00007ffff7b1cc61 in nua_stack_invite (nua=nua@entry=0x6adc80,
> nh=nh@entry=0x6b09c0, e=e@entry=nua_r_invite, tags=tags@entry=0x6b0eb0)
> at nua_session.c:705
> #10 0x00007ffff7b03eb3 in nua_stack_signal (nua=0x6adc80, msg=<optimized
> out>, ee=0x6b0e88) at nua_stack.c:582
> #11 0x00007ffff7b522b2 in su_base_port_execute_msgs (queue=0x0) at
> su_base_port.c:280
> #12 0x00007ffff7b527bd in su_base_port_run (self=0x7ffff00008c0) at
> su_base_port.c:335
> #13 0x00007ffff7b52f10 in su_pthread_port_clone_main (varg=0x7fffffffe4c0)
> at su_pthread_port.c:324
> #14 0x00007ffff7840182 in start_thread (arg=0x7ffff6c52700) at
> pthread_create.c:312
> #15 0x00007ffff6d4d47d in clone () at
> ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
>
>