On Thu, Mar 16, 2017 at 11:06:28PM +0100, Harald Welte wrote:
The [post-VLR] repository currently contains the following main programs (excluding various utilities like abisip-find, isdnsync, measurement stuff, ... :
- osmo-bsc
- osmo-bsc_nat
- osmo-msc (NITB without HLR and BSC)
To clarify for anyone else reading along: the VLR, i.e. libvlr, sits in the OsmoNITB, closely tied to libmsc, on the vlr_2G and vlr_3G branches. See also the block diagrams towards the end of https://osmocom.org/news/67
So in terms of clean-up, one of the questions is: what exactly do the circuit switched programs share with the packet-switched ones?
The answer to this *should* be: anything found in libcommon. For things shared among the circuit-switched parts, we have libcommon-cs, so the rest should be relevant for cs + ps ... However, that's not accurate.
Taking a look at libcommon:
Used everywhere but makes sense to separate instead: bsc_version.c -- just the copyright string common_vty.c -- vty_go_parent() combined for various VTY trees debug.c -- logging categories and filters, combined
Only related to gprs because above debug.c combines unrelated scopes: gsm_subscriber_base.c -- debug.c filter_fn uses msc/bsc subscr_get()/subscr_put()
Completely unrelated to gprs: gsm_data.c -- except tall_bsc_ctx, gprs should have its own. gsm_data_shared.c talloc_ctx.c socket.c -- actually only used by osmo-bsc_nat and ipaccess-proxy, should probably use libosmocore socket code instead?
Used across gprs and cs: gsup_client.c -- not yet, but used by CS on vlr_2G branch gsup_test_client.c oap_client.c
These are proven / illustrated by a playful branch that moves things to libcommon-cs: https://git.osmocom.org/openbsc/log/?h=neels/libcommon-cs
In fact it looks like rather than splitting off libcommon-cs, we should have created a libosmo-gsupclient and left libcommon to be used by cs programs only, separating the minor generic bits to gprs/.
Then there's also libiu, which is shared across OsmoSGSN and OsmoMSC on the 3G branch to provide IuPS and IuCS, respectively.
In summary: only gsup_client and libiu are shared across cs and ps, both of which are also just needed by libmsc/libvlr and OsmoSGSN. (not by osmo-bsc*, not by gb_proxy nor by any utils.)
If we wanted to completely separate cs from ps, we could technically move gsup_client to libosmocore and libiu to osmo-iuh. That would allow having separate osmo-bsc+msc and osmo-sgsn repositories. Actually, our plans for separating MSC and BSC also calls for separating gsm_subscriber_connection and gsm_network, and at that point it would also make sense to have separate osmo-bsc and osmo-msc repositories. The names would then come naturally. We could install libbsc from osmo-bsc and link it in from osmo-msc to build OsmoNITB while we still need to; and when the A-interface comes along stop linking libbsc from osmo-msc.
If we keep bsc, msc and gprs combined, we need to come up with a logical name. Maybe the fact that we still haven't found one is an indicator that we should rather separate openbsc.git up by the familiar names as above?
In redmine we have the 'cellular infrastructure' project as a parent to all the 2G/3G related projects. Maybe we should call it 'osmo-cell-infra', 'osmo-2g3g' or even more generic 'osmo-cellular'? that's actually again a bit too generic, as the BTS and PCU are prime example of other cellular infrastructure projects that are not part of that repo. Also, there's the HLR which lives in a separate repo - simply because it shares no code with the other projects. Still, it might actually be worth to consider merging it into the same repo as the MSC.
With steve, the name Osmocom-CN has kind of stuck, for osmocom core network. But again the HLR is separate and it's not really accurate. Osmocom-CN would make sense if we have a joint BSC, MSC, SGSN and HLR repository.
Maybe a non-descriptive name should be used? Or, in the great tradition of the telecom world, yet another acronym?
Nondescriptive... osmo-kitchensink? :P
Weird that they should have so many acronyms like SIGTRAN, NAS, GERAN/UTRAN, and none of them match our intended grouping :)
But what *is* our intended grouping? I (naively?) tend to like complete separation into separate BSC, separate MSC, separate SGSN, because it matches the separation that the code is moving towards, and our redmine project tree.
In general, when we do the "fork" to the new repo, I would like to use the opportunity to get rid of the extra 'openbsc' sub directory
+1
~N