<000e> l1sap.c:144 RTP clock out of sync with lower layer: 2240 vs 160
(1619189->1619249)
<000e> l1sap.c:144 RTP clock out of sync with lower layer: 82592960 vs
160 (1619505->1619436)
<000e> l1sap.c:144 RTP clock out of sync with lower layer: 2240 vs 160
(1619471->1619531)
<000e> l1sap.c:144 RTP clock out of sync with lower layer: 82591360 vs
160 (1619587->1619475)
<000e> l1sap.c:144 RTP clock out of sync with lower layer: 2080 vs 160
(1619557->1619613)
<000e> l1sap.c:144 RTP clock out of sync with lower layer: 82594400 vs
160 (1620892->1620862)
<000e> l1sap.c:144 RTP clock out of sync with lower layer: 1440 vs 160
(1620862->1620900)
Very large value, is this a typecast / intsize problem ??
Gullik
The values reported by the "show connections" command seem suspect to
me. I frequently have a uplink
value of around -60 dBm, but RXQ values showing 1-4 or so. While I move
about a lot, I anticipate fading,
but there seems to be a too big BER when compared with the "healthy"
signal level.
When testing ul / dl on the Mini, I found values that reasonably well
corresponded between spectrum
analyzer and "show connections".
The downlink is, I assume, reported by the MS. The question comes up how
to verify the relatively "new"
LimeSDR Mini / and the osmo-trx-lms with regards to this issue.
I have made some improvements to the TX, and now have a nice +10 - +17
dBm signal which is indicated
by the phones. I have more than 100 m range with regards to the phones (
crappy ? ) bargraph indicator,
at least 2 bars in the periphery, and always 5 bars inside the house /
lab. Antennas are inside, and the house
made of timber. However, reception seems to be the limiting factor right
now.
Q: I have deduced that RXQ is referenced in abis_rsl.c in the bsc, is it
just propagated from the sdr up
through Transceiver, where is the actual evaluation done?
Other thoughts on this....
Regards,
Gullik
Hi,
I cannot find a description of this command in the manual. This is very
useful to debug
ms, antennas and radio.
OsmoBSC> show conn
Active subscriber connections:
conn ID=232, MSC=0, hodec2_fail=0, mgw_ep=rtpbridge/1@mgw
BTS 1, TRX 0, Timeslot 1, Lchan 0: Type TCH_F
Connection: 1, State: ESTABLISHED
BS Power: 0 dBm, MS Power: 10 dBm
Channel Mode / Codec: SPEECH_V1
No Subscriber
Bound IP: 192.168.1.75 Port 16404 RTP_TYPE2=0 CONN_ID=0
Conn. IP: 192.168.1.70 Port 4084 RTP_TYPE=3 SPEECH_MODE=0x00
Measurement Report:
Flags:
MS Timing Offset: 0
L1 MS Power: 10 dBm, Timing Advance: 4
RXL-FULL-dl: -73 dBm, RXL-SUB-dl: -73 dBm RXQ-FULL-dl: 0,
RXQ-SUB-dl: 0
RXL-FULL-ul: -57 dBm, RXL-SUB-ul: -58 dBm RXQ-FULL-ul: 0,
RXQ-SUB-ul: 0
I guess "dl" means downlink, from BTS to MS, and "ul" means uplink, MS
to BTS.
But, what is the difference between FULL and SUB ? What does the two
rightmost items mean,
those which are 0 in the above? What does the "No Subscriber" mean,
should that be IMSI ?
Still on the subject of LimeSDR Mini, now debugging radio and antenna
arrangements.
Regards,
Gullik
Recently, fixeria brought up that it would be better to not align wrapped lines
with an opening brace, but rather have a constant indent for wrapped lines.
I'd like to ask for the general opinion / kernel style compliance.
What indenting is acceptable?
For a long time my opinion was that opening brace alignment is better for
readability, but my opinion has shifted. I now find it more desirable to keep a
constant indent.
Consider:
unsigned int my_function_signature(int a_very_long_parameter,
int wrapped_line,
int another_line);
If a patch modifies the return value or the name, the patch either touches
three lines or leaves inconsistent indenting behind:
int my_func(int a_very_long_parameter,
int wrapped_line,
int another_line);
Also, a very long function name wastes a lot of usable linewidth for indent for
all arguments.
I've submitted a lot of patches over the years that touch more lines than
necessary, and left quite a few inconsistent indents behind, because an
automatic find-replace doesn't fix subsequent indenting.
I'm currently editing a lot of the osmo-msc sources and changing my mind about
API, so this line indenting due to renames issue comes up. I thought I could
pick a constant indent now while I'm at it.
If we had a single tab as indent, the function signatures' indenting would be
independent from the length of the name, and a find-replace leaves behind
consistent indenting / no whitespace changes needed for renames:
unsigned int my_function_signature(int a_very_long_parameter,
int wrapped_line,
int another_line);
int my_func(int a_very_long_parameter,
int wrapped_line,
int another_line);
I finally understood the vim cindent options to achieve this:
:se cino=(1s,u1s
(Forgive me if this is a bit too vim specific for your taste; I definitely want
vim to automatically give me the desired indenting.)
My problem with that is that it also affects if- and for- statements: 'if' and
'for' will never change their name, so aligning with opening-brace is unlikely
to ever cause unnecessary whitespace change. What was:
// vim: cino=>1s,e0,f0,{0,}0,=1s,t0,c3,+1s,(0,u0,/0,:0
int my_func(int a_very_long_parameter,
int wrapped_line,
int another_line)
{
if (a_very_long_parameter == 3 || a_very_long_parameter < 0
|| wrapped_line == 7
|| (one_level_deeper
&& (one_level_deeper
|| foo)))
return 5;
}
Now becomes:
// vim: cino=>1s,e0,f0,{0,}0,=1s,t0,c3,+1s,(1s,u1s,/0,:0
int my_func(int a_very_long_parameter,
int wrapped_line,
int another_line)
{
if (a_very_long_parameter == 3 || a_very_long_parameter < 0
|| wrapped_line == 7
|| (one_level_deeper
&& (one_level_deeper
|| foo)))
return 5;
}
(The cino=k0 parameter does control 'if', 'for' and 'while' separately, but
there is no way to tell it to brace-align while the '(' option is set to
'(1s', stupid quirk in cinoptions.)
IMHO aligning with opening brace improves readability of the nested conditions
and uses more of the line width. But I could get used to that, I guess. I think
I've seen this used a lot in Osmocom, too.
Another thing to consider:
if (a_very_long_parameter == 3 || a_very_long_parameter < 0
|| wrapped_line == 7)
return has_same_indent_as_condition(" :/ ");
I could use two tabs for in-brace indenting, but I haven't seen that anywhere
before, and it makes wrapped conditions waste a lot of line width:
// vim: cino=>1s,e0,f0,{0,}0,=1s,t0,c3,+1s,(2s,u1s,/0,:0
int my_function_signature(int a_very_long_parameter,
int wrapped_line,
int another_line)
{
if (a_very_long_parameter == 3 || a_very_long_parameter < 0
|| wrapped_line == 7
|| (one_level_deeper
&& (one_level_deeper
|| foo)))
return 5;
if (a_very_long_parameter == 3 || a_very_long_parameter < 0
|| wrapped_line == 7)
return 5;
}
I think I'll adopt fixed single-tab indenting in my patches from now on:
:se cino=>1s,e0,f0,{0,}0,=1s,t0,c3,+1s,(1s,u1s,k0,/0,:0
Any (strong) opinions on / best practices for this?
Which one is more consistent with linux kernel style?
Thanks!
~N
Dear Osmocom community,
Does somebody have experience using multiple 3G femtocells connected to a single
HNBGW? Do cell reselection and handover work properly? How did you configure it?
Also, Osmocom (or Syscmocom?) used 3G networks at Congress 35c3. Were you using
multiple femtocells?
Were they connected to the same HNBGW? How did you configure them for cell
reselection and handover to work smoothly?
Thank you!
Kind regards, Mykola
Hi Oliver,
I've already spent some time on a first draft for the new messages we will need
to implement the E-interface via GSUP for inter-MSC handover. It would be
excellent if you could take over from what I have so far.
I placed the draft in osmo-msc/doc/interMSC_HO_GSUP_msgs.txt on my branch neels/ho:
http://git.osmocom.org/osmo-msc/tree/doc/interMSC_HO_GSUP_msgs.txt?h=neels/…
Anyone else is also more than welcome to take a look and remark on anything
that might seem a bad idea, etc.
This is the result of me reading a MAP trace of two MSCs negotiating inter-MSC
handovers, and of reading the 29.002, 29.010,... specs. I'm not permitted to
freely share the trace, let me know if you need details.
The most interesting bits in the draft are
- the new message types
- the newly added IEs (see "Of which are newly added...")
The tasks for you would be:
- Spell out the protocol messages in common/chapters/gsup.adoc
- Implement the definitions in gsup.h
- Implement encoding and decoding, and tests
It is not so trivial to understand what goes with which message; maybe you
don't even need to know in detail? But if any info is still missing for you to
grok what's going on, don't hesitate to ask, as always.
Also interesting to figure out: Implement the IPA routing for which I added the
source_name and destination_name IEs: N osmo-mscs connected to one osmo-hlr
forward messages to each other via GSUP.
- Connect two GSUP clients (test programs?) to a running osmo-hlr instance, and
to extend the gsup_server so that we can use the source_name/destination_name
IEs to forward GSUP messages between the two clients. (I added these because
I'm fairly certain there is no existing in-band IPA protocol bits that would
allow such routing; but I only briefly skimmed it, wouldn't hurt if you could
verify that again.) The aim is to have plain gsup_client API to allow me to
"just send messages back and fort".
- The session_id/session_state: we still need to figure out how to avoid
collisions in session_id numbers, as any peer may at any point re-use the
same session_id. Vadim suggested using a TI flag that gets flipped between
sender and receiver, but since there are more than two peers, I guess we
should treat each session_id as subordinate to a Request's source_name. IOW,
any peer owns the entire session_id number space itself for sending out
Request message types, and a Response or Error message type echos this
session_id back with the source_name then having become the destination_name;
it is perfectly legal for two peers to use the same session_id and collisions
are avoided by Request vs. Response/Error. Something like...
MSC-A MSC-B MSC-B'
-------> FOO_REQUEST(source=alice, destination=bob, id=3, state=BEGIN)
<------- FOO_RESPONSE(source=bob, destination=alice, id=3, state=CONTINUE)
-------> BAR_REQUEST(source=alice, destination=bob, id=3, state=CONTINUE)
<------- BAR_RESPONSE(source=alice, destination=bob, id=3, state=CONTINUE)
---------------> FOO_REQUEST(source=alice, destination=fred, id=4, state=BEGIN)
<--------------- FOO_ERROR(source=fred, destination=alice, id=4, state=CONTINUE)
---------------> END_REQUEST(source=alice, destination=fred, id=4, state=END)
-------> END_REQUEST(source=alice, destination=bob, id=3, state=END)
(We could possibly omit the source_name in Response/Error message types,
because the Requestor already knows the peer from sending out the Request;
but for sanity, maybe rather always keep both names.)
Does this make sense / am I missing something?
- And we need to make sure that we can freely re-use the session_id IE on the
E-interface without conflicting with the Supplementary Services session_id /
without confusing the gsup_client API.
Please create issues on osmocom.org for these tasks as you see fit.
There is no pressing need yet to get this done *right now*, I have yet to
complete the inter-BSC HO in osmo-msc before I can start using GSUP. But it
would be great to just build on working API once I need it.
I would be super grateful if you could relieve me of the burden of spelling out
these details. From the meetings I assume that sysmocom agrees; please manage
that, too, and let me know if any other tasks are more important...
Thanks!!
~N
--
- 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: Harald Welte
Hello, dear Osmocom community,
Has somebody been looking at the issue https://osmocom.org/issues/1977 recently?
Or, in other words: has anybody got the 3G Packet Switched network
working in Osmocom reliably?
I am looking for hints that might help me to fix the issue or for
possible hacks/fixes if somebody has implemented something like that
in their setups.
Thank you!
Kind regards, Mykola
I have now moved the Limesdr mini back and forth between the Orange Pi
Zero and a Supermicro
(i386). On the Pi Zero I get the following on the console:
Tue Jan 22 20:36:43 2019 DMAIN <0000> Transceiver.cpp:1039
[tid=3043130448] ClockInterface: sending IND CLOCK 321960
Tue Jan 22 20:36:44 2019 DMAIN <0000> Transceiver.cpp:1039
[tid=3043130448] ClockInterface: sending IND CLOCK 322176
Tue Jan 22 20:36:45 2019 DDEV <0002> LMSDevice.cpp:600 [tid=3043130448]
chan 0 recv buffer of len 2500 expect 894a7c got 895e68 (895e68) diff=13ec
Tue Jan 22 20:36:45 2019 DDEV <0002> LMSDevice.cpp:600 [tid=3043130448]
chan 0 recv buffer of len 2500 expect 895440 got 897024 (897024) diff=1be4
Tue Jan 22 20:36:45 2019 DDEV <0002> LMSDevice.cpp:600 [tid=3043130448]
chan 0 recv buffer of len 2500 expect 895e04 got 897de4 (897de4) diff=1fe0
The DDEV message can continue for a long time, and typically then ends
with the transceiver exiting. It can however sometimes recover, and the
first message of
recovery is a IND Clock message, after that the transceiver restarts,
and all is again well for some undefined time.
I have followed your suggestions, and rebuilt --with-neon-vfpv4 , and I
have enabled debugging. If I understand correctly, the function is
readSamples, and
is the actual input from the Lime rx. The length seems always correct,
since I do not get that log entry, but rather that the time has
"slipped", i.e.
the LMS api has not delivered anything for "diff" time, or the timestamp
received has "jumped" in the Lime.
This indicates to me that this specific arm cpu in combination with
limesdr mini and the software "drops data". I will gladly try to debug
or narrow this down,
but ask for some suggestions on how to proceed. One thought is to save a
timestamp each time through readSamples and compare to some constant
to determine that the problem is NOT that we are unable to read as fast
as required. reading 2500 samples would take 2.3 mS if I understand
this, so we need
to cal readsamples at about this rate....
Possible causes could be something *else* locking out the program.