Open Source Mobile Communications: Issueshttps://osmocom.org/https://osmocom.org/favicon.ico?16647414092024-03-22T17:44:25ZOpen Source Mobile Communications
Redmine E1/T1 Hardware Interface (including icE1usb) - Bug #6415 (New): osmo_panic after truncated packethttps://osmocom.org/issues/64152024-03-22T17:44:25Zpfassberg
<p>I'm running icE1usb connected to a Raspberry CM3 module.</p>
<p>A few times a day osmo-e1d crashes with the following output:<br /><pre>
Fri Mar 22 17:16:59 2024 DLINP octoi_clnt_fsm.c:242 OCTOI_CLIENT(N11MD)[0x55a37878e0]{ACCEPTED}: Rx OCTOI ECHO_RESP (seq=690, rtt=777)
Fri Mar 22 17:17:02 2024 DE1D usb.c:150 (I0:L0) IN EP 82 ISO packet truncated: len-4 = 173
Assert failed size % 32 == 0 mux_demux.c:450
backtrace() returned 19 addresses
/usr/local/lib/libosmocore.so.21(osmo_generate_backtrace+0x18) [0x7f83880f60]
/usr/local/lib/libosmocore.so.21(+0x30aa0) [0x7f838a0aa0]
/usr/local/lib/libosmocore.so.21(osmo_panic+0xd4) [0x7f838a0b78]
osmo-e1d(+0x6e8c) [0x557f4a6e8c]
osmo-e1d(+0x787c) [0x557f4a787c]
/lib/aarch64-linux-gnu/libusb-1.0.so.0(+0xb1b4) [0x7f8381b1b4]
/lib/aarch64-linux-gnu/libusb-1.0.so.0(+0x116ec) [0x7f838216ec]
/lib/aarch64-linux-gnu/libusb-1.0.so.0(+0x1271c) [0x7f8382271c]
/lib/aarch64-linux-gnu/libusb-1.0.so.0(+0xabc8) [0x7f8381abc8]
/lib/aarch64-linux-gnu/libusb-1.0.so.0(libusb_handle_events_timeout_completed+0x218) [0x7f8381c09c]
/usr/local/lib/libosmousb.so.0(+0x1908) [0x7f83901908]
/usr/local/lib/libosmocore.so.21(+0x34398) [0x7f838a4398]
/usr/local/lib/libosmocore.so.21(+0x3450c) [0x7f838a450c]
/usr/local/lib/libosmocore.so.21(osmo_select_main+0x14) [0x7f838a4528]
osmo-e1d(+0x39a4) [0x557f4a39a4]
/lib/aarch64-linux-gnu/libc.so.6(+0x27780) [0x7f83627780]
/lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0x98) [0x7f83627858]
osmo-e1d(+0x3bf0) [0x557f4a3bf0]
signal 6 received
</pre></p>
<p>As the packet is truncated something has gone wrong in the USB communication or maybe in the firmware, but I think that the process should not do abort but try to continue.</p>
<p>// Peter</p> Core testing infrastructure - Bug #6381 (Feedback): libosmocore changes take too long until they ...https://osmocom.org/issues/63812024-03-01T07:19:47Zlaforge
<p>(05:23:15 PM) hwelte: I don't understand why <a class="external" href="https://gerrit.osmocom.org/c/libosmo-netif/+/35069">https://gerrit.osmocom.org/c/libosmo-netif/+/35069</a> keeps failing even hours after the libosmocore patch has been merged. I even checked that the OBS package for libosmocore had been rebuilt meanwhile<br />(05:29:17 PM) hwelte: the debian10/debian12 builds fail despite the libosmocore on which the changes depend has long been built on obs.<br />(05:54:43 PM) osmith: hwelte, it says here: build jobs exist (gear icon): <a class="external" href="https://obs.osmocom.org/package/show/osmocom:master/libosmocore">https://obs.osmocom.org/package/show/osmocom:master/libosmocore</a><br />(05:55:04 PM) hwelte: osmith: yes, but that's for much more recent libosmocore commits<br />(05:55:04 PM) osmith: the builders just seem to be busy building everything, I guess because of multiple libosmocore merges in a row, each triggering a rebuild of everything<br />(05:55:12 PM) osmith: <a class="external" href="https://obs.osmocom.org/monitor">https://obs.osmocom.org/monitor</a> <- builders being busy<br />(05:55:34 PM) osmith: it might be that OBS doesn't publish a repository before all packages for a distribution are built<br />(05:58:26 PM) osmith: hwelte, so in summary: libosmocore changes cause a lot of packages to be built, and the repo (probably) only gets published once all packages are built. unfortunately it seems that the builders were not able to build everything within the last hours since the merge, or that it started building additional packages because of more merges.</p>
<p>So it somehow seems that if a longer series of patches is committed to libosmocore, each of them gets built as OBS packge for each arch/distibution, and that's what takes so long? Can we somehow get it to only build the most recent commit at a time, and first build that all the way to the end and make sure those packages are published/available for further downstream builds?</p>
It's not exactly a rare situation that we add something to one library, and then there are also patches that use those additions elsewhere. So either
<ul>
<li>we can achieve the above, or </li>
<li>we can make sure that repos/feeds are updated after building [only] the debian10/debian12 on amd64 which we use for gerrit build verification [and even prioritize those]?</li>
<li>we can make find some other way to make sure the (in this case) libosmocore package is somehow available for gerrit build verification after it has been built, and not only after the entire universe has been re-built?</li>
</ul> Core testing infrastructure - Feature #6023 (Stalled): test rack/lab power management software wi...https://osmocom.org/issues/60232023-05-04T06:38:46Zlaforge
<a name="Problem-Statement"></a>
<h2 >Problem Statement<a href="#Problem-Statement" class="wiki-anchor">¶</a></h2>
<p>In our test/lab setups, we do have a number of systems that run 24/7 but which are really used only very few hours per day. This has become very visible after we started (a few months ago) to deploy tasmota/influxdb/grafana for plotting many different power rails.</p>
<p>Direct on/off switching from within a given test job only works if that test job is the only user of the given resource (such as e.g. a BTS in osmo-gsm-tester).</p>
<p>For jenkins builders, OBS workers and similar machines, there could be any number of concurrent users. So there's no single job that can power on the resourec before using it, and power it off after it terminates.</p>
<p>What we need is a system that maintains a usage count, similar to how we do usage/reference counting in data structures in software development.</p>
<p>I've started to prototype a modular python daemon which offers a REST API over which users can obtain <em>usage tokens</em> for named resources. The daemon then keeps track of the current use count and switches resources on/off as needed.</p>
<p>Jenkins jobs would then (e.g. in a pipeline) first obtain a usage token (which would implicitly power up the resource if it is not aleady powwered), and release the usage token after they're gone. This way we can power up build machines only when needed, saving significant electrical power, reducing noise and minimizing heat dissipation.</p>
<a name="Architecture-Class-model"></a>
<h2 >Architecture / Class model<a href="#Architecture-Class-model" class="wiki-anchor">¶</a></h2>
<a name="Resource"></a>
<h3 >Resource<a href="#Resource" class="wiki-anchor">¶</a></h3>
<p>A <em>Resource</em> is typically some kind of physical equipment (server, build host, network equipment, ...) which one or multiple users may be using concurrently.</p>
<p>The Resource has a state, such as</p>
<table>
<tr>
<th>State</th>
<th>Description</th>
</tr>
<tr>
<td>off</td>
<td>Powered down</td>
</tr>
<tr>
<td>powered</td>
<td>Powered up, but not reachable yet</td>
</tr>
<tr>
<td>available</td>
<td>Powered up and reachable (typically via network)</td>
</tr>
</table>
<p>A Resource refers to a <em>Switcher</em> and an <em>AvailabilityChecker</em></p>
<p>A Resource keeps a list of <em>UsageToken</em>; one for each concurrent user.</p>
<a name="Switcher"></a>
<h3 >Switcher<a href="#Switcher" class="wiki-anchor">¶</a></h3>
A <em>Switcher</em> is something that can switch power. Possible implementations include
<ul>
<li>sispm compatible USB-switchable power sockets</li>
<li>Intellinet rackmount PDUs with IP/HTTP interface</li>
<li>Tasmota switchable power sockets</li>
<li>ethernet wake-on-lan (on) + ssh-based shutdown (off)</li>
</ul>
A <em>Switcher</em> implementation (inheriting from the abstract Switcher base class) provides methods for
<ul>
<li>changing the power state (on/off)</li>
<li>determining the current actual power state (if supported by hardware). This is important to get the state right at start-up time.</li>
</ul>
<a name="SwitcherGroup"></a>
<h3 >SwitcherGroup<a href="#SwitcherGroup" class="wiki-anchor">¶</a></h3>
<p>A <em>SwitcherGroup</em> is a logical group of multiple <em>Switcher</em>, for example the set of four switchable sispm sockets in one power strip, or the set of 8 switchable power ports in an Intellinet PDU.</p>
<a name="AvailabilityChecker"></a>
<h3 >AvailabilityChecker<a href="#AvailabilityChecker" class="wiki-anchor">¶</a></h3>
<p>An <em>AvailabilityChecker</em> is something that can check the logical availability of a (powered-up) resource. One common example for an IP-attached resources is an ICMP echo request/response based check.</p>
<a name="UsageToken"></a>
<h3 >UsageToken<a href="#UsageToken" class="wiki-anchor">¶</a></h3>
<p>An <em>UsageToken</em> for a <em>Resource</em> must be obtained by any user intending to use the Resource. The UsageToken has a validity time (in seconds), after which it automatically expires.</p>
<p>Release of the UsageToken can hence be either explicit (via REST API after the user is done) or implicit (timeout of the validity period).</p> Cellular Network Infrastructure - Feature #5929 (In Progress): document current (milestones of) n...https://osmocom.org/issues/59292023-02-28T19:37:26Zlaforge
We have been doing a number of NLnet funded projects, and should
<ol>
<li>publish some news item / blog post / release announcement (whatever applicable) on each of them</li>
<li>give credit to NLnet funding received for the respective project.</li>
</ol> libosmo-abis - Bug #5896 (Feedback): libosmo-abis built withtout --enable-e1d in deb and rpm pack...https://osmocom.org/issues/58962023-02-07T11:06:06Zpespin
<p>I see there's a "--enable-e1d" which then makes libosmo-abis depend on osmo-e1d.git, but I see that not being enabled for deb nor rpm builds, the dependencies are missing there. (debian/* and contrib/*.spec.in)</p>
<p>First we need to find out whether we want to have that enabled in package repositories. Then pass --enable-e1d and update the dependencies.</p> Cellular Network Infrastructure - Feature #5771 (New): series of presentations about the invididu...https://osmocom.org/issues/57712022-11-14T19:25:57Zlaforge
<p>Most of the talks we ever gave on setting up and running the Osmocom CNI are ages old and hence relatively outdated.</p>
<p>Given the number of network elements and the relate complexity, I think we should consider doing a talk on each of them. The talk doesn't have to be of a particular length, so some network elements might have shorter or longer presentations.</p>
<p>Looking at the checklist below, we already have 14 items. Covering this in OsmoDevCall is not an option, it would take too long (14 months if no other topic would be covered in between). So it is going to be on a separate schedule.</p>
<p>I would consider each presentation should then be prominently linked from the redmine project page of each network element, next to the user manual.</p>
<p>We may of course still be publishing those via the OsmoDevCall "event" on media.ccc.de, so all videos are in one location.</p>
<p>I think every presentation should start with a quick picture at the overal diagram of netwokr elements, describe the surrounding elements and their interfaces to then look in detail at the specific element that ist he subject of the talk.</p>
It should cover
<ul>
<li>basic configuration to get it started / connected</li>
<li>VTY for state introspection ("ar alle connections up?", ...)</li>
<li>looking at logs / protocol traces</li>
<li>practical demo; looking at what happens in pcaps + logs for some basic transaction like LU, SMS, voice call.</li>
</ul> libosmo-abis - Feature #5691 (Stalled): Expose DAHDI statistics to prometheushttps://osmocom.org/issues/56912022-09-27T15:32:46Zlaforge
<p>The DAHDI_SPANSTAT ioctl can be used to obtain a number of statistics for a given span (E1/T1 line).</p>
<p>It would be a good idea to implement some library code which would start a timer to periodically poll the DAHDI_SPANSTAT on each of the relevant spans. This could be used by osmo-bsc, osmo-gbproxy or even a stand-alone application to pull all those counters into osmocom rate_ctr infrastructure.</p>
<p>That in turn would allow the counters to be exported alongside all our other counters/stats via the statsd exporter.</p> E1/T1 Hardware Interface (including icE1usb) - Bug #5381 (New): icE1usb DAHDI driver: generate YE...https://osmocom.org/issues/53812022-01-02T12:16:29Zlaforge
<p>Right now we are displaying YELLOW alarms received from the peer, but we don't yet report a RED alarm using RAI bits to the peer.</p> erlang/osmo_ss7 - Bug #5378 (New): ipa: add support for client applicationhttps://osmocom.org/issues/53782021-12-30T19:23:19Zlynxis
<p>The osmo_dia2gsup is using the ipa module.<br />The ipa module is sending an "Identity Request" after the connection is established. The osmo-hlr will treat this early identity request as invalid and will never answer to it.</p>
<pre>
diff --git a/src/ipa_proto.erl b/src/ipa_proto.erl
index ceb024a..1a6ca4f 100644
--- a/src/ipa_proto.erl
+++ b/src/ipa_proto.erl
@@ -120,10 +120,6 @@ request({ipa_set_ccm_options, Socket, CcmOptions}, _) ->
{ccm_options, CcmOptions};
% server-side handler for unblock()
request({ipa_unblock, Socket}, CcmOptions) ->
- if
- CcmOptions#ipa_ccm_options.initiate_ack -> send_ccm_id_ack(Socket);
- true -> send_ccm_id_get(Socket)
- end,
io:format("Unblocking socket ~p~n", [Socket]),
%[IpaSock] = ets:lookup(ipa_sockets, Socket),
Ret = inet:setopts(Socket, [{active, once}]),
</pre> Cellular Network Infrastructure - Feature #5124 (Feedback): network:osmocom:nightly feed with "-O...https://osmocom.org/issues/51242021-04-20T21:00:00Zlaforge
<p>when debugging issues, it's always annoying to run into "... optimized out" in gdb.</p>
<p>It might make sense to have an OBS feed that basically is a copy of 'nightly' but has all binaries built with -O0</p>
<p>Hopefully that's not all that much effort? Can we somehow inject the compiler flag without having to maintain a package-specific patch against debian/rules?</p> libosmocore - Feature #4727 (Feedback): Add more distro/platform/archs to jenkins CIhttps://osmocom.org/issues/47272020-08-25T14:18:29Zpespin
<p>Currently we rely on OBS to run unit test software on several architectures/distributions/versions. However, OBS hosts lack some features which means we need to disable them when we run there (such as socket_sctp_test), and hence only get tested mostly only in x86_64 on one debian version.</p>
<p>That means we don't test such features in ARM, or in Ubuntu or CentOS, or debian unstable.</p> Core testing infrastructure - Feature #4692 (Stalled): finally implement testing of the actual vo...https://osmocom.org/issues/46922020-08-05T08:27:45Zlaforge
<p>For many years we've set up tons of testing, but it's all on the control plane, and the user plane for PS services. We don't yet have any testing of the acutal voice path, so we wouldn't detect codec problems drop-outs or whatever other voice quality issues in any of our testing.</p> libosmo-sccp + libosmo-sigtran - Feature #4608 (New): "action" commands to interactively shutdown...https://osmocom.org/issues/46082020-06-10T13:12:24Zlaforge
<p>would be great to do that, especially for testing/debugging.</p> Cellular Network Infrastructure - Bug #4578 (New): Updated slides / presentations / videos on set...https://osmocom.org/issues/45782020-06-03T14:56:52Zlaforge
<p>I just realized that since OsmoCon was discontinued after 2018 didn't result in sufficient turn-out, and only the 2017 incarnation contained some entry-level talks, we actually only have introductory level presentations / videos about a setup that still covers OsmoNITB. (<a class="external" href="https://media.ccc.de/v/osmocon17-4002-running_a_basic_circuit_switched_osmocom_gsm_network">https://media.ccc.de/v/osmocon17-4002-running_a_basic_circuit_switched_osmocom_gsm_network</a>)</p>
<p>This may or may not be a reason why some people still want to set up OsmoNITB in 2020. While our wiki and user manuals all have deprecated OsmoNITB years ago, people who only look for videos might be mislead.</p>
<p>Also, I'm sure that several other presentation (like the one about 3G / osmo-iuh before the CNI split) would similarly benefit from an update.</p>
<p>So I think we should try to create/update some slide decks and record related lectures / tutorials at some point this year. I wouldn't bother setting up a virtual conference or some kind of remote interaction at this point. Recording some talks and/or screencasts allows us to create and release them one-by-one.</p>
<p>Let's use this issue to first collect a list of topics that we think either need an update, or topics that never have been covered so far.</p> libosmo-abis - Bug #4464 (In Progress): "osmo_rtp_socket_poll(): ERROR!" messages during normal o...https://osmocom.org/issues/44642020-03-20T21:11:03Zlaforge
<p>When using osmo-bts-trx and establishing voice calls, I get lots of those osmo_rtp_socket_poll() ERROR messages when a TCH/F is established but voice is not yet conncted (i.e. while dialing, until the call is fully established):</p>
<pre>
NOTICE <0000> rsl.c:813 (bts=0,trx=0,ts=1,pchan=TCH/F) (ss=0) TCH_F Tx CHAN ACT ACK
INFO <000e> rsl.c:2122 (bts=0,trx=0,ts=1,ss=0) IPAC set RTP socket parameters: 1
INFO <0015> trau/osmo_ortp.c:0 RtpSession bound to [127.0.0.1] ports [16396] [16397]
INFO <0015> trau/osmo_ortp.c:449 osmo_rtp_socket_connect() refused to set remote 127.0.0.1:0
INFO <0015> trau/osmo_ortp.c:0 RtpSession [0x5607c73cc9d0] sending to rtp 192.168.103.248:4116 rtcp 192.168.103.248:4117
INFO <0015> trau/osmo_ortp.c:0 First estimation
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(0): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(160): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(320): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(480): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(640): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(800): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(960): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(1120): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(1280): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(1440): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(1600): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(1760): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(1920): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(2080): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(2240): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(2400): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(2560): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(2720): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(2880): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(3040): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(3200): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(3360): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(3520): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(3680): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(3840): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(4000): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(4160): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(4320): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(4480): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(4640): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(4800): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(4960): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(5120): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(5280): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(5440): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(5600): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(5760): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(5920): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(6080): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(6240): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(6400): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(6560): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(6720): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(6880): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(7040): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(7200): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(7360): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(7520): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(7680): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(7840): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(8000): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(8160): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(8320): ERROR!
INFO <0015> trau/osmo_ortp.c:206 osmo_rtp_socket_poll(8480): ERROR!
</pre>
<p>Looking at the code, this is actually not an error as such (it's also LOGL_INFO). It merely tells us that we tried to poll for an incoming RTP packet, and there was none received since our last call.</p>
<p>We should probably either remove it completely, or turn it to 'DEBUG' and remove the 'ERROR' from the messate. Or we simply replace it with a counter?</p> BBS-Revival - Feature #4341 (New): setup for telnet access to legacy BBS software which doesn't h...https://osmocom.org/issues/43412020-01-01T14:06:50Zlaforge
There are plenty of legacy BBS software packages out there, made for DOS. They either directly interface the serial ports (COM1..COM4) or they use a FOSSIL driver to do so. Attaching those to<br />real serial ports with modems is possible, but not particularly attractive:
<ul>
<li>it requires one physical modem per node (and likely one USB/serial adapter)</li>
<li>it cannot provide direct IP (telnet/ssh) access</li>
<li>it cannot be combined with using a RAS server like our <a class="wiki-page" href="https://osmocom.org/projects/retro-bbs/wiki/Livingston_Portmaster_3">Livingston_Portmaster_3</a></li>
</ul>
<p>For some other OSs (Windows, OS/2) there are solutions like NetFoss to work around this. I've also found references to a DOS based telnet FOSS driver baesed on Ethernet cards with packet driver. No proper solution for a Linux based setup with qemu-kvm seems to be out there.</p>
Using the built-in serial port telnet server of qemu is one idea, but
<ul>
<li>it would mean each line (COM port) has a different telnet port</li>
<li>there doesn't seem to be any escaping for binary (0xFF, ...)</li>
</ul>
<p>One could build something based on <a class="external" href="https://github.com/freemed/tty0tty">https://github.com/freemed/tty0tty</a> (a virtual nullmodem device), so one side could be passed though qemu, and the other end could be served by some kind of custom telnet daemon. tty0tty has the advantage of at least handling the modem status/control lines properly - very uch opposed to any pty based approach.</p>
<p>The cleanest solution would probably be to implement something based on <a href="https://www.ietf.org/rfc/rfc2217.txt" class="external">RFC2217</a> (Telnet Com Port Control Option). This has the advantage that it fully supports modem control lines, and that it can also be used to interface any actual serial/terminal server hardware, if ever needed.</p>
<p>So either qemu would have to run a RFC2217 telnet server which would then accept e.g. up to 4 or 8 connections, and dispatching any of those to a virtual 8250 serial UART, or it would have to run one RFC2217 telnet client for each virtual 8250 UART.</p>
<p>In case of a <em>telnet server</em>, that server then would also have to implement something like AT command emulation, so the DOS applications think they're talking to a modem with RING/ATA/CONNECT/...</p>
In case of a qemu built-in <em>telnet client</em>, we would provide some kind of external program that provides two telnet servers:
<ol>
<li>one for the qemu side to connect to, and where we emulate a basic AT command interface</li>
<li>one for the actual users to connect to, either directly via IP or indirectly from dialup via the Portmaster</li>
</ol>
<p>I think the approach with qemu built-in telnet client with the external server makes most sense, as it offers greatest flexibility in terms of supported configurations. It also keeps things like AT command emulation out of qemu.</p>
<p><code>tnt</code> has implemented the qemu side in <a class="external" href="https://patchwork.kernel.org/patch/11149529/">https://patchwork.kernel.org/patch/11149529/</a> - but that patch unfortunately is still not yet merged, presumably due to a lack of tests and some other feedback raised by qemu developers. But with a custom qemu build, we could already use it here...</p> libosmocore - Bug #4149 (New): osmo_fsm allows event names to have spaces in themhttps://osmocom.org/issues/41492019-08-13T10:58:36Zlaforge
<p>See <a class="external" href="https://gerrit.osmocom.org/#/c/libosmocore/+/15154/">https://gerrit.osmocom.org/#/c/libosmocore/+/15154/</a></p>
<p>event names, like state names, should be one word <strong>only</strong>.</p> Cellular Network Infrastructure - Bug #4141 (New): No osmux specific code in place during codec n...https://osmocom.org/issues/41412019-08-05T15:57:19Zpespin
<p>Current code in OsmoBSC and OsmoMSC doesn't take into account that Osmux is to be used when codec negotiation goes one. That means that supported codec list needs to be correctly configured manually in VTY in order to avoid selecting incorrect codecs (like non-AMR). Moreover if an MS doesn't support AMR, since we don't have transcoding yet, the call cannot take place.</p>
<p>Different scenarios need to be listed here and think about what we want to do in each case.</p> libosmocore - Feature #4105 (New): Support for LTE key derivation functionshttps://osmocom.org/issues/41052019-07-13T02:07:47Zlaforge
<p>As well as adding KASME generation, it also makes sense to add the key derivation functions for Knas_int, Knas_enc, Kenb. They all are based on HMAC-SHA256, too.</p> libosmocore - Bug #4104 (New): support for KASME generationhttps://osmocom.org/issues/41042019-07-12T10:14:52Zlaforge
<p>In an LTE HSS, the normal UMTS AKA is executed up to the point where the vectors/quintuples are generated. However, not the CK+IK is passed back to over Diameter to the MME, but KASME, which is computed from CK+IK, the MCC+MNC of the VPLMN and some other bits.</p>
<p>Let's add support for this to libosmocore</p> libosmo-sccp + libosmo-sigtran - Bug #3871 (Feedback): osmo_scu_prim conn_id should be scoped per...https://osmocom.org/issues/38712019-03-28T19:58:51Zneelsnhofmeyr@sysmocom.de
In summary:
<ul>
<li>separate osmo_scu_prim.*.conn_id from osmo_sccp_inst->next_id</li>
<li>separate each osmo_sccp_user's conn_ids number spaces</li>
<li>separate incoming from outgoing osmo_scu_prim.*.conn_id number spaces</li>
</ul>
<p>Details:</p>
<p>The osmo_sccp_instance.next_id is responsible for local-reference IDs on the SCCP wire.<br />Currently, this same next_id number space is also used towards the SCU user, i.e. as osmo_scu_prim.*.conn_id.<br />Not only should this conn_id be scoped separately from the osmo_sccp_instance.next_id, but also be a distinct number space per SCU user.</p>
<p>struct sccp_connection in sccp_scoc.c is the place where an SCCP local-reference is correlated to an osmo_sccp_user.conn_id, it must store these IDs separately.<br />The number space for the osmo_scu_prim.*.conn_id should be guarded by some "next_id" counter in osmo_sccp_user.<br />Incoming and outgoing conn_ids must be made sure to not collide, best divide the number space in two for incoming and outgoing conn_ids.</p>
<p>For example, in osmo-msc, there may be two SCCP users connected to the same osmo_sccp_instance: one for OSMO_SCCP_SSN_BSSAP (= GERAN-A = 2G) and one for OSMO_SCCP_SSN_RANAP (= UTRAN-Iu = 3G).<br />Implementations using the SCU API might be completely separate, and it would be a "scoping violation" if these distinct users have to negotiate with each other about unused osmo_scu_prim conn_ids.</p>
<p>Another aspect is that there may be incoming SCCP connections and outgoing SCCP connections.<br />As an example:</p>
<p>From the perspective of osmo-msc, usually the BSC connects to the MSC:</p>
<pre>
BSC MSC AS SCCP-User
| ---N_CONNECT--> | ---osmo_scu_prim.connect.conn_id--> | BSSAP implementation stores new conn_id.
| | |
| <--N_DATA-----> | <---osmo_scu_prim.data.conn_id----> |
</pre>
<p>But in case of an inter-BSC HO, the MSC initiates a connection to the BSC instead:</p>
<pre>
BSC MSC AS SCCP-User
| <--N_CONNECT--- | <--osmo_scu_prim.connect.conn_id--- | BSSAP implementation *invents* new conn_id.
| | |
| <--N_DATA-----> | <---osmo_scu_prim.data.conn_id----> |
</pre>
<p>(Note, this is only relevant for Connection-Oriented Initial messages, i.e. Layer 3 Complete (incoming to MSC) and Handover Request (outgoing from MSC).<br />For example, Paging is done by a connection-less message that has no conn_id at all, after which the BSC establishes a connection when the MS has responded.)</p>
<p>To keep sane layer separation, it is important to maintain the osmo_scu_prim struct as the <strong>only</strong> communication interface between the SCCP-User and the SCCP instance.<br />Hence we cannot iterate all existing conn_ids and pick an unused one: an incoming SCCP connection might asynchronously pick the exact same conn_id.<br />In practice, this cannot happen right now, but the scoping should be such that it would be possible to place the SCCP User in a separate process.</p>
<p>So, a proposal is that for incoming connections, the libosmo-sccp creates new osmo_scu_prim.*.conn_id in the number space 0..0x7fffffff for incoming N-CONNECT,<br />while for outgoing N-CONNECT, the SCCP-User implementation creates new osmo_scu_prim.*.conn_id in the number space 0x80000000..0xffffffff. (Or rather, use the lowest bit to separate for shorter logging)<br />There should be osmo_sccp_user_* API to fetch an unused outgoing SCCP-User conn_id, so SCCP-Users don't need to implement their own.</p> Cellular Network Infrastructure - Feature #3229 (New): build-system: jenkins.sh: Improve debian ...https://osmocom.org/issues/32292018-05-03T12:40:28Zpespin
<p>The idea is to add extra tests/checks to avoid breaking debian package building during nightly builds in OBS. Instead, let's catch it during gerrit patch submission time and don't allow merging it until it's fixed.</p>
<p>We should investigate several tools, like pbuilder, dpkg-build, etc. I recall lynxis also told me something about some kind of lint tool available for this purposes.</p> Cellular Network Infrastructure - Bug #3192 (New): meas_vis: use the lchan identity as primary ke...https://osmocom.org/issues/31922018-04-21T19:21:40Zneelsnhofmeyr@sysmocom.de
<p>While re-adding meas_feed to osmo-bsc.git, I noticed that the meas_vis and meas_web tools appear to use the lchan's IMSI as primary key to visualizing active lchans. They should use the bts,trx,ts,ss number instead.</p>
<p>See also: <a class="issue tracker-2 status-3 priority-2 priority-default closed" title="Feature: resurrect meas_feed (Resolved)" href="https://osmocom.org/issues/2968">#2968</a> <a class="issue tracker-2 status-3 priority-1 priority-lowest closed" title="Feature: obtain and store subscriber identity (Resolved)" href="https://osmocom.org/issues/2969">#2969</a></p>
<p>meas_vis is currently still in openbsc.git, it should probably move over to osmo-bsc <a class="issue tracker-2 status-6 priority-2 priority-default closed" title="Feature: move meas_vis and meas_json over to osmo-bsc.git (Rejected)" href="https://osmocom.org/issues/3191">#3191</a>.<br />meas_web is external, but it could make sense to send a pull request.</p> Cellular Network Infrastructure - Feature #3142 (New): Further simplification of "NITB like" setupshttps://osmocom.org/issues/31422018-04-05T20:09:38Zlaforge
<p>Running the post-NITB network is quite a lot more complex than the old code.</p>
<p>There are some ideas on how to make it simpler to run small, self-contained networks while removing some complexity</p>
<ul>
<li>I was also wondering if we should spend time on "MGW-less operation". In theory, you only need OsmoMGW if you have no IP-level routing between your Abis / A / core network [like any decent network operator for security reasons]. But then, if you run everything on one machine, and don't need/want transcoding, and have transparent routing between all components, we could do without the MGW.</li>
</ul>
<ul>
<li>stp-less operation should also be possible (but make configuration actually more complicated), as both the "ASP" (client) and "SG" (server) role are inside libosmo-sigtran, and hence the server could run inside the MSC without the need of an external stp (osmo-stp is just a thin wrapper with vty around libosmo-sigtran)</li>
</ul>
<p>Let's keep this as a reminder and create sub-tasks as ideas materialize more</p> Cellular Network Infrastructure - Feature #2604 (Stalled): GSUP-to-DIAMETER converter / IWFhttps://osmocom.org/issues/26042017-10-29T23:01:06Zlaforge
<p>In order to support a single subscriber database for 2G/3G and LTE, operators normally use a single HSS. HSS is the EPC successor of the LTE.</p>
<p>Instead of MAP over SS7, HSS's speak DIAMETER over SCTP or TCP (with optional TLS). The types of procedures / transactions are pretty much the same as before, but the encoding and the protocol changed completely.</p>
<p>There are a couple of (at least minimal) HSS implementations out there, from freeDiameter to nextepc, to name some examples.</p>
<p>If we were to implement a converter between GSUP and DIAMETER, then the OsmoMSC and OsmoSGSN could access an external HSS - and that same HSS could be accessed from nextepc or even openair-cn for LTE access.</p>
<p>3GPP TS 29.305 specifies the MAP-to-DIAMETeR InterWorkingFunction (IWF), which is pretty much the same device, with the exception that we'd use GSUP instead of MAP.</p> libosmo-sccp + libosmo-sigtran - Feature #2601 (New): osmo-msc still needs libosmo-sccp-dev for S...https://osmocom.org/issues/26012017-10-28T21:49:31Zlaforge
<p>It would be nice if applications had no dependencies on the old libsccp.</p>
<p>This would mean that libosmo-sigtran would have to include all headers that carry any definitions that are relevant for users of the SCCP-User-SAP or the MTP-User-SAP.</p> libosmo-sccp + libosmo-sigtran - Bug #2259 (New): problem with local referencehttps://osmocom.org/issues/22592017-05-16T13:05:55Zdexter
<p>When a connection attemt (local reference = 2) is made, libosmo-sccp complains with "<000d> sccp_scoc.c:1528 Cannot find connection for local reference 2". Current master is at 872c6b2a8e309ca6739ef295f1fc468c189e4ec9. The problem seems to be introduced with commit 5527df78adc08b76df07c4b682263b5bdd6181d4 (libosmo-sccp.git). When the commit is reverted, the correct functionality of libosmo-sccp seems to be restored.</p>
<p>The problem can be demonstrated by using the client/server example that is shipped with libosmo-sccp. The following VTY-Commands were used to trigger the problem:</p>
<pre>
enable
sccp-user
called-addr-ssn 202
connect-req 2 hello
</pre>
<p>Note: In the good case I can see the normal CR with payload attached and the CC that with the payload that is echoed by the the echo subsystem. The bad case results in an CREF message, which contains an refusal cause code 0x0F (unqalified)</p> Cellular Network Infrastructure - Feature #1975 (New): Redesigned configuration management / MIBhttps://osmocom.org/issues/19752017-03-09T01:05:50Zlaforge
<p>Using zebra/quagga VTY code was a great idea back then and has served us nicely in all those years. I like the general style of the command-line based interface with its various nodes, the strict syntax checking, the tab completion and the interactive context-sensivive help.</p>
<p>However, it feels a bit 20ieth-century-ish to have to manually write code to parse and to save the respective values. This is not a productive way to spend our development resources, and it is error prone. The "save" can be forgotten, resulting in non-saveable config parameters. The save can store values that the "parse" function will not be able to read again, etc.</p>
<p>Furthermore, the VTY is inherently a human user interface, not intended for programmatic consumption. For programmatic access, we have developed the control interface. In reality though, only 1% of the parameters available in the VTY are exported via the control interface. And rather than adding all the missing bits and pieces with hand-crafted code to the control interface, we should have a generic way to define a new configuration value, and that value should then be automatically parse- and storable via VTY as well as a programmatic interface.</p>
<p>The next "problem' is that the current telnet connections live within the process of the application. This means that a user can effectively "stall" the main application by performing I/O intensive operation on the VTY, or even on as many VTY/telnet sessions as he wants. There shouldn't be any need for this, at least not for something as mundane as performing configuration changes. Of course the VTY has different use cases such as runtime introspection of system state as well as logging. But still.</p>
<p>Yet another concern is "VTY and telnet port proliferation". Particularly with the conversion from NITB to BSC+MSC+HLR, we are yet again getting more network elements with their own telnet ports. Remembering the port numbers is clumsy. It would be more convenient if a single command line interface could provide access to the configuration and the state of multiple different processes / network elements.</p>
<p>Last, but not least, the current implementation is fixed to telnet, without any form of authentication, and without a path to migrate e.g. to something like SSL or SSH. I don't think it is a major concern (you can always SSH to the system and then telnet locally).</p>
<p>So what I had in mind for quite some time (actually since netconf 1.2 about one year ago), is to have some kind of an external "VTY/MIB daemon" (or even separate daemons for each) which maintains a hierarchical database of configuration values. The MIB deamon simply offers an API (via client library) to GET or SET the individual values, or to NOTIFY an application about a changed value. This API is both used by the actual Osmocom programs to obtain their configuration (and obtain updates to it during runtime), as well as by the "VTY daemon" providing interactive shell access to it. Finally, other external applications could use the same interface/client library to do the same. A proxy to SNMP or REST interfaces can be imagined, for even more interfacing with the outside world.</p>
<p>What I don't like about many existing MIBs I've used (as a sysadmin/user, not a developer) is their simple type system. You can often specify any random value to such a MIB, even one that is completely useless. A simple INT or STRING type is not sufficient, we really want the ability to have ENUM types, to have integers with ranges, etc. - just like we have in the VTY.</p>
<p>Also, the MIBs I've used typically are nothing more than a hierarchical key-value store. They do not contain the information required for interactive, context-sensitive help needed for the "VTY" feel :( This is btw also the problem I have with OpenWRT's uci: It just has keys and values, with no way to constrain those values to something that's reasonable to the given program/context that is being configured, and there's no help or other information associated with those keys and values.</p>
<p>So what I would like to see in this context, is some way to have a machine-parseable description of a "MIB/config item", together with syntax, ranges, enum values, help texts, etc (ideally in the C source code, possibly in comments?) which is used by some kind of MIB compiler to build up the hierarchical structure of the MIB and all of its keys as well as their permitted values and syntax reference. This information is then available to the VTY/telnet connections, irrespective of whether a given application [using those values] is running at all.</p>
<p>Once an application starts, it can query for the configuration values it is interested in and populate its internal data structures from it. Ideally, one would even be able to generate a 'struct' from the MIB compiler, so that there is no need to explicitly call a "get" function on each single configuration value, but one simply gets a C-language 'struct' with all the values filled in by the client library.</p>
<p>As stated above, there should be some way how he MIB can notify applications about changes to certain nodes in the MIB tree, so the application[s] can react to that. I don't have a clear picture yet how transaction logic (like changing multiple values and then committing them at once) would work, or whether applications should even be able to reject/revert a modification?</p>
<p>In either case, I just wanted to share my thoughts on this. I know it sounds rather complex, but I think the investment in some kind of unified configuration database system would save us of a lot of boilerplate code and subtle bugs and inconsistencies.</p> libosmocore - Bug #1762 (New): Review LAPD code for race conditions regarding state, particularly...https://osmocom.org/issues/17622016-07-03T20:20:39Zlaforge
<p>See <a class="issue tracker-1 status-5 priority-2 priority-default closed" title="Bug: LAPD: segfault in T200 call-back (Closed)" href="https://osmocom.org/issues/1760">#1760</a> and <a class="issue tracker-1 status-3 priority-2 priority-default closed" title="Bug: LAPD: segfault when bootstrapping Nokia InSite (Resolved)" href="https://osmocom.org/issues/1761">#1761</a>, there are quite some problems that apparently need a more thorough review and/or testing.</p>
<p>Maybe implementing (part of?) the Q.921bis LAPD conformance tests might be an option to catch all of those kind of bugs?</p>
<p>See <a class="external" href="https://www.itu.int/rec/T-REC-Q.921bis-199303-I/en">https://www.itu.int/rec/T-REC-Q.921bis-199303-I/en</a></p> Cellular Network Infrastructure - Bug #1612 (New): more configuration consistency checkinghttps://osmocom.org/issues/16122016-02-23T16:22:14Zlaforge
<p>Right now it is possible to configure various things that wouldn't work, like an ARFCN that is outside the band of the BTS, or even the TRX.</p>
<p>More consistency checks would make sense, together with reasonable error messages.</p>