libosmo-abis/RSL queue and OS interaction

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Holger Hans Peter Freyther holger at freyther.de
Sat Apr 4 07:05:20 UTC 2015


Dear Pablo, Ciaby,

from what I see we have the following OpenBSC/OS integration.

* OpenBSC wants to send some RSL data and calls abis_rsl_sendmsg
** abis_rsl_sendmsg entails the msgb into a queue and informs
   the lower layer driver (ipa in our case)
** ipa sets the when to ~= BSC_FD_WRITE
* code returns
* OpenBSC runs select for all fds/timers..
* libosmocore dispatches fd's
** libosmo-abis/ipaccess.c will try to write a single message
** libosmo-abis/ipaccess.c will set the BSC_FD_WRITE again if
   the queue is not empty
* Linux/TCP will run nagle to combine these messages
* OpenBSC runs select for all fds/timers...
....

The integration does work but appears to be a bit painful for
busy and high latency links. E.g. OpenBSC starts timers when
abis_rsl_sendmsg is invoked which might just be a little bit
later.

I wonder if there is a better way? For reading we could read
until -EWOULDBLOCK but then this might not be too fair for
the other parts of the software. For writing we might end up
in the situation where a write only partially succeeds and we
need to remember how much of the msgb to write next...  So we
would need to do ioctl's to check how much space is left in
the send buffer

Do you have ideas? comments? is it a non issue? is it something
we can do better? Is there a TCP mode where a "write" either
fully succeeds or fails with -ENOSPC or such?

holger



More information about the OpenBSC mailing list