Hi,
I have finally an idea on how to go from varpoware "oh I need to merge that" to
actually merging stuff and started to work on that.
The one goal I have is to create a BSC/MSC split inside our codebase and to
make MSC functionality only communicate via a given BSC API. This move will
allow to do some things transparently to the MSC code, it includes automatic
RLL establishes for SAPI, very early/early assignment will become transparent
and in the future I can roll out my "subscriber task" scheduler to do stuff
like SMS submit during a voice call...
Here is my plan on how to get there...
1.) Create a new structure for the MS Connection. This would happen on a GSM
0808 Complete Layer3 Information message (e.g. CM Service Request, Paging
Response). The name I picked is total rubish but can easily changed later.
I have embedded this connection into the struct gsm_lchan and moved all MSC
attributes into this new structure. So right now we have a 1:1 mapping between
a GSM LCHAN and the Subscriber Connection.
2.) Moved transaction code to work on this new structure instead of the lchan,
I verified MT-SMS, MO-SMS, MT-Call, MO-Call. So the plan is to remove the
occurence of GSM LCHAN from the MSC code paths, this will also mean to remove
direct calls to RSL, RLL, paging.c.
3.) I picked gsm_04_11.c as the first file from the MSC (actually SMSC) code to
go without the lchan. I have removed the direct call to RSL and placed it
behind a new GSM0808 DTAP API. This would be the place where we figure out the
real LCHAN..
This is all working and I can build on top of that until I reach the goal at
which point I can forward port some of my code from the On Waves branch and
instead of playing MSC myself, put it into SCCP...
<- now comes the stuff that I want to complete by the end of next month ->
4.) Currently when compiling you see a "BROKEN" warning, this is more that it
is broken conceptually as the code handles paging and RLL establishment by
itself. So the idea will be to move my "bssap.c" code to master and handle the
RLL establishment and paging inside the new BSC API. This would involve
queuing of messages...
5.) Remove the callback for SMS from abis_rsl.c and create a bsc_api_init with
callbacks for various things (mostly Create Connection, Clear Request, Data).
At this point the gsm_04_11.c will be free of BSC code.
6.) Move it to gsm_04_08. This will involve adding new commands (resembling
the GSM 08.08) message names, sharing some callbacks between SAPI=0 and SAPI=3
and having a dispatch. E.g. later we should have a handler for new connection
which would run authentication and then dispatch the handling of the
connection to a task, on task completion close the channel or give it to the
next task. After this we should magically be able to switch between very
early/early assignment in the BSC code and the MSC will not recognize this,
also TCH/H handling with be mostly transparent.
7.) Remove the 1:1 mapping of of GSM LChan to the new struct. Actually the new
struct should include two lchan's (in case of handover or assignment), I will
have to figure out on how to marry the handover code with that...
8.) I could rebuild my bsc_msc_ip.c on top of the new BSC API and all I need
to do is to handle MSC. We could also create a msc_bsc_ip.c which takes these
SCCP messages and sticks it into the MSC code of ours and we have a MSC.
as usual... any help is more than welcome.
z.