Hi 3G folks,
I would like to make our osmocom jenkins build openbsc with --enable-iu, which still requires use of non-master branches in aper-prefix, libosmo-sccp and libosmo-netif.
I will at first make the jenkins build use these branches to build 3G, but since we'd like them to be merged to master anyway, let's try to push this forward.
Here are the remaining tasks again, as from the openbsc@ mail on Feb 19, 2016: http://lists.osmocom.org/pipermail/openbsc/2016-February/007906.html ( 20160219083519.GA4570@nataraja )
First the good news for libosmo-sccp:
On Fri, Feb 19, 2016 at 09:35:19AM +0100, Harald Welte wrote:
libosmo-sccp: * laforge/wip
My main problem with this patch set is naming. We are creating an 'SCCP User SAP' which should look the same no matter what the underlying transport protocol stacking is. [...]
This boils down to a mere rename of opaque structs osmo_sua_link and osmo_sua_user, which I've started to submit. https://gerrit.osmocom.org/477
asn1c: * aper-prefix
First of all, it looks like we imported from svn, but Lev Walkin later did another migration to git, which we fetched as well. So our master is on our old svn import, while the upstream master has different hashes in its history. Our aper-prefix branch is based on the upstream history, not our "stale" master, which made a rebase a bit easier.
Furthermore, on https://github.com/vlm/asn1c/commits/master there are scores of new commits we don't have in our asn1c. our last commit from Lev Walkin is from 2015-04-28, "?= was confusing some environments", 62913d8b8e1eb96d74315ff
I have thus: * fetched upstream master from github's vlm/asn1c, pushed as new branch vlm/master to our git.osmocom.org/asn1c * rebased our aper-prefix branch to that master (with minor conflicts), pushed as new branch aper-prefix-onto-upstream
We should probably: * reset --hard our master to vlm/master * reset --hard our aper-prefix to aper-prefix-onto-upstream (after testing)
Agreed?
Then follows:
On Fri, Feb 19, 2016 at 09:35:19AM +0100, Harald Welte wrote:
If you look at the aper code I took from OpenAirInterface and re-based,
For the record: https://gitlab.eurecom.fr/oai/openair-cn/tree/master/SRC/S1AP/MESSAGES/ASN1 https://gitlab.eurecom.fr/oai/openair-cn/blob/master/SRC/S1AP/MESSAGES/ASN1/... https://gitlab.eurecom.fr/oai/openair-cn/blob/master/SRC/S1AP/MESSAGES/ASN1/...
you will see that it does not look 100% complete and would probably not yet qualify for submitting it to the upstream asn1c project. The situation is not made better by my hackish way to implement the type prefixing on top of it by means of an environment variable.
Specifically, it
- contains commented-out code which might just have been a work-around of some buggy code, rather than fit for removal in general
- contains TODO comments like "/* TODO: act upon NOTE in #18.7 for canonical PER */" which hints that it is not properly implementing parts of the PER specification
- contrary to the rest of asn1c, it does not come with a comprehensive test suiet for the APER encoding and decoding routines of all types
Any help in cleaning this code up (it could be done for the type prefixing independent of the APER support) would be much appreciated. The goal is to get this merged in asn1c, after all.
It might also be worth to contact the OpenAirInterface guys about their thoughts on moving this code forward. I fear there might be none, as they are using an ancient version of asn1c to begin with. But they are a much larger project and might be convinced to put some resources on doing this properly?
I've written to the openair-cn-devel list. https://lists.eurecom.fr/sympa/arc/openaircn-devel/2016-07/msg00001.html
Unless we think something is ready for pushing to upstream asn1c, we should keep it out of our local master, too.
libosmo-netif: * sysmocom/sctp
commit
d484b0593112222cef3f106da654df07c3d40919 (hash changed after rebases)
basically just prints some messages to the log file in case there are association state changes like UP and LOST. This is clearly not the intended behavior.
The application should be notified accordintly in such events, particularly in 'connection lost' events that can be communicated in the same way as they can for e.g. TCP sockets.
Only after that is resolved, we can merge it to master.
This doesn't look like a lot of work, though I'm not familiar with how exactly this should be done.
ret = sctp_recvmsg(conn->ofd.fd, msgb_data(msg), msgb_tailroom(msg), NULL, NULL, &sinfo, &flags); if (flags & MSG_NOTIFICATION) { union sctp_notification *notif = (union sctp_notification *) msgb_data(msg); LOGP(DLINP, LOGL_DEBUG, "NOTIFICATION %u flags=0x%x\n", notif->sn_header.sn_type, switch (notif->sn_header.sn_type) { case SCTP_ASSOC_CHANGE: LOGP(DLINP, LOGL_DEBUG, "===> ASSOC CHANGE:"); switch (notif->sn_assoc_change.sac_state) { case SCTP_COMM_UP: LOGPC(DLINP, LOGL_DEBUG, " UP\n");
call accept_cb?
break; case SCTP_COMM_LOST: LOGPC(DLINP, LOGL_DEBUG, " LOST\n");
osmo_stream_srv_destroy() ?
break; case SCTP_RESTART: LOGPC(DLINP, LOGL_DEBUG, " RESTART\n"); break; case SCTP_SHUTDOWN_COMP: LOGPC(DLINP, LOGL_DEBUG, " SHUTDOWN COMP\n"); break; case SCTP_CANT_STR_ASSOC: LOGPC(DLINP, LOGL_DEBUG, " CANT STR ASSOC\n"); break; } break; case SCTP_PEER_ADDR_CHANGE: LOGP(DLINP, LOGL_DEBUG, "===> PEER ADDR CHANGE\n"); break; case SCTP_SHUTDOWN_EVENT: LOGP(DLINP, LOGL_DEBUG, "===> SHUTDOWN EVT\n"); /* Handle this like a regular disconnect */
osmo_stream_srv_destroy() ?
return 0; break; } return -EAGAIN;
Thanks for any thoughts or even help :)
~Neels
On Wed, Jul 06, 2016 at 06:58:40PM +0200, Neels Hofmeyr wrote:
We should probably:
- reset --hard our master to vlm/master
- reset --hard our aper-prefix to aper-prefix-onto-upstream (after testing)
Agreed?
ACK.
commit
d484b0593112222cef3f106da654df07c3d40919 (hash changed after rebases)
basically just prints some messages to the log file in case there are association state changes like UP and LOST. This is clearly not the intended behavior.
The application should be notified accordintly in such events, particularly in 'connection lost' events that can be communicated in the same way as they can for e.g. TCP sockets.
Only after that is resolved, we can merge it to master.
This doesn't look like a lot of work, though I'm not familiar with how exactly this should be done.
That's exactly the "hard" question and it probably needs a number of test cases and trial+error to find out.
A TCP socket is diffent in that once it is closed, it is closed, and the client can only re-connect, which means a new FD will be accept()ed on the server.
In SCTP, the association can go UP and DOWN any number of times during its lifetime, and the file descriptors stay the same.
I'd say the minimum level for getting it merged is that a SUA-using application on both server and client side continues to work correctly after any of the events (e.g. an DOWN notification followed by UP notification). Also, if the socket is SHUTDOWN, the application should deal with it in a meaningful way. Basically, whatever happens "legally" on the SCTP side should not make a client or server application stuck in some weird state.
One could also imagine that any more complete signalling gateway would actually be interested in all fine-grained event, so having a mechanism in which any SCTP notifications more or less transparently up to the user might be a good idea. But that could be an unrelated future improvement patch.