Dear Osmocom community,
during the past years, we've been applying for (and often receiving) grants
for the development of certain parts of the Osmocom project.
There are two organizations (NLnet foundation and the German prototype fund) where the
next call for proposals ends in 10 days from now.
So if any of you has some ideas about Osmocom related work that you would want
to see implemented and for which you can argue that it fits the scope of the
related funds, please feel free to bring them up here.
For NLnet, the scope should fit either
* https://nlnet.nl/entrust/
* https://nlnet.nl/useroperated/
For prototype fund, the scope should fit
https://prototypefund.de/jetzt-bewerben-fuer-runde-13/ - specifically I think
it is likely that we could fit a number of "our" topics in
https://prototypefund.de/softwareinfrastruktur/ which explicitly lists
implementation of communication protocols.
Given that I have plenty of experience with both funds, I'd be willing
to work on a concrete proposal and submit it before the deadline on Sept
30 / Oct 1.
In terms of "who would do the actual work": With NLnet projects we can
involve freelancers across Europe, with prototype fund probably only
in Germany. In the worst case, if you propose some idea but have no
time to work on such a project yourself, or you are not eligible due
to the restriction to EU/DE, sysmocom could carry out the
implementation.
Let me know if anyone of you has some ideas as to what kind of osmocom
related topics might be suitable candidates.
Thanks,
Harald
--
- Harald Welte <laforge(a)osmocom.org> http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
(ETSI EN 300 175-7 Ch. A6)
RFC about mscgen
mscgen is our tool of choice to generate ladder diagrams from the "msc" text
input format. We use it in user manuals and on our redmine wiki, and there are
also various .msc files in doc/ subdirs, as assistance for development.
I've written a lot of ladder diagrams, for documentation as well as figuring
out how to implement things. I've developed a love/hate relationship, and
recently I found a bug in mscgen.
Things have come up that I'd like your opinion on:
* ladder_to_msc.py
Writing .msc files by hand quickly started to annoy me:
- Having to write '[label="..."]' all the time.
- Multiline labels (e.g. '(note)' block) require "foo\nbar\nbaz"
- input symbols for arrows are weird / non-intuitive
- cannot use 'msc' as entity, weirdly conflicts with the outer 'msc { ... }',
which is annoying for GSM diagrams featuring an MSC.
So quite some while ago I wrote a python script that reads my personal favorite
format in which i enjoy writing ladder diagrams, and outputs plain .msc file
format. I put it in libosmocore/contrib/ on a branch, have been using it ever
since, but i never submitted it for merging, because it seemed like a personal
preference thing, not worth complicating the doc tool chain for.
So far I was, if at all, committing only the resulting .msc to git. But that
creates a situation where only I have the *original* source in .ladder format,
so (hypothetically) collaborating on ladder diagrams becomes convoluted.
Here is an example of my favorite ".ladder" format:
------
{hscale=1}
upf = User Plane function
cpf = Control Plane function
upf <- cpf PFCP Association Setup Request
CP function Node Id, features
upf -> cpf PFCP Association Setup Response
UP function Node Id, features
upf <> cpf associated
upf () cpf start Heartbeat checking
...
------
The equivalent .msc produced by ladder_to_msc.py:
------
msc {
hscale="1";
upf[label="User Plane function"],cpf[label="Control Plane function"];
upf <= cpf [label="PFCP Association Setup Request\nCP function Node Id, features"];
upf => cpf [label="PFCP Association Setup Response\nUP function Node Id, features"];
upf abox cpf [label="associated"];
upf rbox cpf [label="start Heartbeat checking"];
...;
------
I'd like to hear some opinions, if you have any, on whether anyone else likes
my new ladder format, and how to deal with .ladder source files.
Would it make sense to merge ladder_to_msc.py to libosmocore, install it via
'make install', and add the original .ladder files as well as Makefile rules to
convert .ladder to .msc to .png where ever i wrote .ladder diagrams?
* mscgen bitrot is likely
Recently I've found a segfault in mscgen. I found a fix and tried to submit it.
That's when I discovered that:
- the original project on code.google.com is dead and gone
- the mail addresses of the original author result in bounces
- random people put mscgen's trunk on github, exported from google code, no
activity is apparent
I did reach the Debian maintainer of mscgen by mail. He doesn't have any way to
contact the original author, either. It seems there could be a patch in the
Debian package, at best.
I wonder if it would make sense to officially create an mscgen "fork" on
Osmocom, in an effort to save the tool from bitrot and extinction, and offer
our mscgen as the new upstream for debian's mscgen packaging.
I do have a number of things i'd like mscgen to be able to do, like left-adjust
text in "note" blocks or improve the resolution of produced PNG images;
I might also implement support for my .ladder format directly in mscgen.
I am vague on what my opinion is between the advantages and disadvantages, and
it's all only semi important. I just know that I always end up writing .ladder
instead of .msc, and that we will always need ladder diagrams.
Do you have any opinions on these things?
Thanks!
pointers:
ladder_to_msc.py: libosmocore branch neels/ladder
https://cgit.osmocom.org/libosmocore/commit/?h=neels/ladder&id=073ad74435ec…
My most recent ladder chart:
https://cgit.osmocom.org/osmo-bsc/commit/?h=neels/codec&id=01f370c1b365305f…
--
- 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
Dear OpenBSC team,
I am Ahnaf Tahmid Chowdhury, currently building Osmocom graphical user
interface. I have created a subscriber page where one can add/remove/update
subscriber. The repo is available at:
https://github.com/ahnaf-tahmid-chowdhury/osmo-gui
Please let me know your thoughts about the application.
Thank you
I'm confused by what is happening in the pcap linked below:
According to wireshark, the SCCP message seems to come from *both* PC=4 and PC=185.
A column configured as sccp.calling.pc shows Point-Code 4.
A column configured as "Source Address" shows Point-Code 185.
Is it even possible that the in-band Calling Address differs from whatever
wireshark detects as the SCCP Source Addres? Can anyone explain where the 185
is coming from? apparently not from sccp.calling.pc.
The pcap and a screenshot showing the two point-codes and the column config are
here: http://people.osmocom.org/neels/Eew7we0I/
Context:
The original RESET message (not part of the pcap) was sent to called.pc=4, but
I have SCCP routing set up to forward PC=4 to the MSC that sees itself as
PC=185.
I am expecting to see a RESET-ACK sent from PC=185.
IIUC The 4 should have evaporated when the MSC parsed the RESET message. But
apparently when answering, it takes the "called.pc" and puts it in the response
as "calling.pc" (4 is nowhere in the MSC's confguration, it MUST have taken the
"4" from the received SCCP message).
So what I am seeing in wireshark is eerily correct: it is the MSC that has
"185" in its cfg as local address sending the ACK, and it is responding to a
request that was originally sent to "4", and which osmo-stp routed to "185".
The response shows calling.pc=4. But how can wireshark know that it was really
"185" sending, when no such information is in the SCCP layer of that message?
What am I missing?
if anyone knows, thanks in advance...
~N
Hi all,
as some of you may know, I am working on the MS side implementation of
GPRS protocol stack. The end goal is to have something similar to srsUE
(part of srsRAN, former srsLTE), but for GPRS.
In order to reduce code duplication it was decided to move some stuff
from both osmo-pcu.git and osmo-sgsn.git into shared libraries, so that
we could re-use existing code in the upcoming MS side implementation.
== What is already done
* Redmine: https://osmocom.org/projects/libosmo-gprs
* Gerrit: https://gerrit.osmocom.org/q/libosmo-gprs
* Gitea: https://gitea.osmocom.org/osmocom/libosmo-gprs
* osmo-ci.git: https://gerrit.osmocom.org/c/osmo-ci/+/29019
== What is missing
* GitHub: https://github.com/osmocom/libosmo-gprs
* cgit: https://cgit.osmocom.org/libosmo-gprs/
** Coverity pulls from this mirror
** Jenkins build verification uses this mirror
I will need some help with both GitHub and cgit, as I don't have admin
permissions. Please also let me know if I missed something.
Best regards,
Vadim.
--
- Vadim Yanitskiy <vyanitskiy at 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
* Geschaeftsfuehrer / Managing Director: Harald Welte
I tried to use shadysim (https://gitea.osmocom.org/sim-card/sim-tools)
to install a STK / CAT applet on the sysmoISIM. It was not working for
me, also it does not support UICC parameters and it seems that still
Python 2.7 is needed.
As an alternative I have added support for gpshell
(https://kaoh.github.io/globalplatform/) to use SCP02 and pass the
SIM/UICC parameters.
See the new parameters "uiccSystemSpecParam" and "simSpecParam" for the
"install" command
https://github.com/kaoh/globalplatform/blob/master/gpshell/src/gpshell.1.md
and inspect the
https://github.com/kaoh/globalplatform/blob/master/gpshell/helloInstallSTK.…
example file. If "brew" ins installed then "brew install
kaoh/globalplatform/globalplatform" is sufficient for the installation.
I also faced the issue that the sysmoISIM cards are only accepting SIM
parameters and no UICC parameters, which is strange or even a bug since
these cards are newer and are supporting the newer UICC ETSI specifications.
Dear Sir/Madam,
I'm a graduate student from a martime college , my major is not computer or communication , I'm trying to do a project about vessel's AIS tx . The equipment which I use is USRP b210 and the software is Gnuradio . After I cloned the code from http://github.com/osmocom/ais-tx/tree/master/gr-aistx and install into gnuradio , it occurs a few mistakes . I tryed to install it in Ubnutu system and dragonOS system ,both failed . Could take a look and help me to solve the problem , there is some pictures attached in this e-mail about the problem . Really thanks a lot , wish you have a nice day .
Yours Sincerelly
Xiangjun Zhang
Hey y'all,
This is somewhat related to another post of mine titled "MSC, SIP connector, and Asterisk". I've been working on a project to simulate cell phone usage through construction of a completely virtual GSM network. To that end, I've been planning to use the mobile application packaged with OsmocomBB to simulate the actual MSs. To make this easier, I've been using a single instance of mobile configured with several MSs in the configuration file (alongside separate instances of virtphy). This had been working for a while, where I was able to place calls between the MSs that were configured. However, I've recently run into an issue where the calls are rejecting each other.
After digging through the source of mobile a little, it's looking increasingly like multiple MSs are not meant to be used in parallel with each other on the same instance of mobile. The main file I've been looking at is mnccms.c (https://osmocom.org/projects/baseband/repository/osmocombb/revisions/master…). It seems that there's no differentiation made between MSs when checking for any calls with/without hold status, which means that only one active call can be used by a mobile instance at any one time. In fact, based on what I've been reading, I can't figure out how I had this working in the first place.
Therefore, I wanted to see if I could get a definitive answer before I invest time into redesigning certain aspects of my framework. Is it possible to use multiple MSs within a single instance of mobile, such that they can all be involved in separate calls simultaneously?
Thanks for any help, it's greatly appreciated!
- James
Hey all,
I've got a bit of an interesting use case. I've been working to setup the OpenBSC components in order to simulate stress testing a GSM network. I've been able to get communications across the GSM working properly, with MSs able to place calls. However, part of what I'm trying to do involves routing to a simulated PSTN. I turned to sip-connector and asterisk, but my network immediately stopped working once I told the MSC to use an external MNCC.
The setup involves two separate computers. The first is the BSS, which has a BSC, MGW, virtual BTS, and two MSs running on mobile and virtphy. The second is the NSS, with the MSC/VLR, HLR, MGW, and STP. The GSM is split between the two devices because of the eventual goal to increase the number of BSSs to better simulate a real-world GSM.
This was all working fine, until I modified osmo-msc.cfg to include "mncc external /tmp/msc_mncc". In parallel, I setup osmo-sip-connector and ran it on the NSS through the same "/tmp/msc_mncc" socket, pointing it at Asterisk (also on the NSS). This was all done according to the instructions listed here: https://osmocom.org/projects/osmo-sip-conector/wiki/Howto.
Now whenever I place my calls (which I do through mobile's "call" VTY command on the BSS), the call doesn't connect and simply gets released after 30 seconds. After doing some debugging, I've determined that Asterisk is not receiving anything from the sip-connector. Meanwhile, the sip-connector is being told to delete any connection basically as soon as it's created:
<0001> mncc.c:1005 MNCC rcvd message type: MNCC_SETUP_IND
<0001> mncc.c:566 Created call(5004) with MNCC leg(2147483652) IMSI(001010000000001)
<0001> mncc.c:68 Starting Timer for MNCC_RTP_CREATE
<0001> mncc.c:164 MNCC sent message type: MNCC_RTP_CREATE
<0001> mncc.c:1005 MNCC rcvd message type: MNCC_REL_IND
<0001> mncc.c:636 Rcvd MNCC_REL_IND, Cause: RESOURCE_UNAVAIL
<0001> mncc.c:648 leg(2147483652) was released.
<0002> call.c:90 call(5004) released.
The MSC has the following as part of its output when a call is placed:
...
<0020> osmo_ss7.c:1933 0: asp-OsmoMSC-asp: xua_cli_read_cb(): sctp_recvmsg() returned 48 (flags=0x80)
<0023> m3ua.c:714 0: asp-OsmoMSC-asp: Received M3UA Message (XFER:DATA)
<0023> m3ua.c:543 0: asp-OsmoMSC-asp: m3ua_rx_xfer
<0023> m3ua.c:566 0: asp-OsmoMSC-asp: m3ua_rx_xfer(): M3UA data header: opc=2233=1.23.1 dpc=185=0.23.1
<0020> osmo_ss7_hmrt.c:276 m3ua_hmdc_rx_from_l2(): found dpc=185=0.23.1 as local
<0020> sccp_scrc.c:472 scrc_rx_mtp_xfer_ind_xua: HDR=(CO:CODT,V=0,LEN=0), PART(T=Destination Reference,L=4,D=00000007), PART(T=Segmentation,L=4,D=00000000), PART(T=Data,L=6,D=000422040120)
<0021> sccp_scoc.c:1664 Received CO:CODT for local reference 7
<0021> sccp_scoc.c:1698 SCCP-SCOC(7)[0x555adb5ddf40]{ACTIVE}: Received Event RCOC-DT1.ind
<0021> sccp_user.c:175 Delivering N-DATA.indication to SCCP User 'OsmoMSC-A'
<0011> sccp_ran.c:108 (GERAN-A-7) sccp_ran_sap_up(N-DATA.indication)
<0003> ran_peer.c:591 ran_peer(GERAN-A:RI-SSN_PC:PC-1-23-1:SSN-BSSAP)[0x555adb5b1010]{READY}: Received Event RAN_PEER_EV_MSG_UP_CO
<0007> ran_peer.c:407 msc_i(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5d97e0]{READY}: Received Event MSC_EV_FROM_RAN_UP_L2
<0011> ran_msg_a.c:790 msc_i(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5d97e0]{READY}: RAN decode: BSSMAP: CLEAR REQUEST
<0007> msc_i.c:85 msc_a(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5daa50]{MSC_A_ST_COMMUNICATING}: Received Event MSC_A_EV_FROM_I_PROCESS_ACCESS_SIGNALLING_REQUEST
<000b> msc_a.c:196 msc_a(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5daa50]{MSC_A_ST_COMMUNICATING}: + msc_a_ran_dec: now used by 2 (cc,msc_a_ran_dec)
<0011> ran_msg_a.c:790 msc_a(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5daa50]{MSC_A_ST_COMMUNICATING}: RAN decode: BSSMAP: CLEAR REQUEST
<0011> msc_a.c:1612 msc_a(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5daa50]{MSC_A_ST_COMMUNICATING}: RAN decode: BSSMAP Clear Request
<0007> msc_a.c:1433 msc_a(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5daa50]{MSC_A_ST_COMMUNICATING}: Received Event MSC_A_EV_MO_CLOSE
<0007> msc_a.c:733 msc_a(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5daa50]{MSC_A_ST_COMMUNICATING}: State change to MSC_A_ST_RELEASING (X2, 30s)
<0011> msc_a.c:769 msc_a(IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ)[0x555adb5daa50]{MSC_A_ST_RELEASING}: Releasing: msc_a use is 2 (cc,msc_a_ran_dec)
<000b> msc_a.c:773 VLR subscr IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97 + msc_a_fsm_releasing_onenter: now used by 4 (attached,active-conn,CC,msc_a_fsm_releasing_onenter)
<000b> vlr.c:309 VLR subscr IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97 + vlr_subscr_cancel_attach_fsm: now used by 5 (attached,active-conn,CC,msc_a_fsm_releasing_onenter,vlr_subscr_cancel_attach_fsm)
<000b> vlr.c:314 VLR subscr IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97 - vlr_subscr_cancel_attach_fsm: now used by 4 (attached,active-conn,CC,msc_a_fsm_releasing_onenter)
<0001> transaction.c:230 trans(CC:INITIATED IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ callref-0x80000003 tid-8) Freeing transaction
<0005> gsm_04_08_cc.c:237 trans(CC:INITIATED IMSI-001010000000001:MSISDN-1234567891:TMSI-0x9B96EF97:GERAN-A-7:CM_SERVICE_REQ callref-0x80000003 tid-8) tx MNCC_REL_IND
...
Any thoughts as to why this one change to my GSM is suddenly stopping it from functioning properly? Thanks, any help is greatly appreciated!
- James
P.S. I didn't want to include my config files for fear of making this message absurdly long, but let me know if you want to see any and I'll gladly post them.
Hello Osmocom community,
I have previously alluded in other threads here that I am seeking to
interface my Osmocom-based GSM network to USA PSTN. In this post I
shall provide details as to exactly what I am doing and how I go about
it.
I am currently experimenting with using bulkvs.com as my USA PSTN
connectivity provider, chosen on the basis of cost economy: it is
incredibly, mind-boggling cheap - the monthly "keepalive" cost is only
6 cents (yes, *cents*) per rented phone number! With phone numbers
this cheap, I don't have to do any kind of "number economy" options:
no need for "phone number NAT" (a single external phone number where a
PBX answers, requiring callers to then dial an internal extension
number), and no need for a mixed scheme where only one or two test
SIMs get real outside numbers while all others get only fake internal
numbers - instead I can give a real valid NANP phone number to every
test SIM on my test/R&D GSM network. For context, my test GSM network
is envisioned as serving two purposes: one is for development and
testing of GSM handsets - real phone numbers are less important here -
and the other purpose is demonstration to gathered audiences (American
patriots and in-person freedom lovers who aren't afraid of some silly
virus) for "oooh and ahhh" - and for this second purpose, having real
phone numbers for every test phone will be a big boost.
The interface to USA PSTN provided by bulkvs.com and other similar
low-cost services is a SIP trunk, hence what I need to implement is a
form of GSM to SIP gateway. But here is the part where I deviate from
what appears to be the established canon in Osmocom-based community
cellular networks: I don't want to run a heavyweight PBX like Asterisk
or FreeSwitch, instead I want to run only a fairly thin, lightweight
layer of extra sw between my OsmoMSC instance (MNCC interface) and the
public-Internet SIP interface provided by bulkvs, with the needed thin
sw layer put together by me, combining newly written code specific to
my use case with bits of code borrowed from elsewhere.
Here is the code I have written / put together so far:
https://www.freecalypso.org/hg/themwi-system-sw/
The README file at the top level of the code repository explains what
is there and how it works, in basic terms.
One of the major pieces I will need to implement is an RTP bridge MGW
that will transcode between GSM codecs (FR1, EFR, AMR) on the GSM side
and G.711 (PCMU or PCMA) on the PSTN-via-SIP side. PSTN-via-SIP
connectivity providers such as bulkvs don't support any GSM codecs
(not one of them), instead they only support G.711 and G.729. I won't
be doing G.729 in ThemWi (transcoding from one lossy vocoder to another
seems like a terrible idea), hence I will run with G.711 on my
PSTN-over-Internet interface and I will need to implement a transcoder
between GSM codec family and G.711. I reason that what I need to
implement is probably quite similar to the transcoding function in
classic GSM E1 TRAUs, except that in the RTP bridge environment I also
have to deal with the added complexities of packet loss, reordering
and silence suppression, unpleasantries of the packet world that
didn't exist in the olden days of TDM luxury.
I don't know whether or not a transcoding RTP bridge MGW is already
implemented somewhere in the bowels of either Asterisk or FreeSwitch -
the size and complexity of both "major sw" choices is quite intimidating
and off-putting. If someone who happens to know the answer gives me a
pointer, it will certainly be very appreciated, but if not, then some
time later I will undertake the big effort to dig in both projects and
look for this transcoder. If the needed transcoder implementation
already exists somewhere, then I will need to lift it out of whichever
project and integrate it into themwi-system-sw - and if there is no
existing published-source implementation, then I will be the first to
produce one.
M~