VoLTE architecture
The current architecture VoLTE contains the following components:
-
ModemManager
-
81voltd
-
qcom-imsd
-
qcom-bpm (qcom-baseband-profile-manager)
-
gnome-calls
-
q6voiced
-
baseband (qcom modem running close-source firmware)
ModemManager
Controls generic parts of the baseband:
-
Enable/Disable Radio (airplane mode)
-
Simcard Pin unlock
-
Monitors signal levels
-
Handles SMS
-
Handles voicecalls (answer, dial, hangup)
-
Handles data sessions
81voltd
Runs as daemon in the linux user space.
Offers the QMI IMS DCM service. DCM will handle the data session for the baseband.
The baseband will request a data session for the VoLTE session (e.g. open a connection
to apn ims).
81voltd will talk to ModemManager to open a connection and report back the assigned IPs
to the baseband.
It doesn’t handle any voice data direct, this is done within the baseband similar to a
2G voice calls over CS.
qcom-imsd
Runs as daemon in the linux user space. Talks to multiple QMI services and configures the IMS services. It further reacts on certain events including sim change or profile changes. It is the main controller the IMS services and can disable it.
qcom-base-profile-manager (qcom-bpm)
The baseband has a lot of configuration options. Qualcomm introduced the concept of baseband profiles which is a collection of configuration settings for a specific operator. The baseband will use the IMSI to select a profile, if none is available a default profile will be used. For many phones the default profile doesn’t allow VoLTE to work. The qcom-baseband-profile-manager is a daemon in the linux user spaec which can be configured to use a different profile which supports IMS.
q6voiced
The q6voiced is a simple daemon which listen on voice call events from ModemManager over dbus. It is required to have sound on voice calls. On a voice call it opens a pseudo alsa device to create an internal audio channel between the voice system and speaker + microphone.
gnome-calls
gnome-calls is a UI. It communicates to ModemManager via dbus to react on incoming voice calls as well using it to initiate a voice call. gnome-calls is generating the ringback tone in the case the network doesn’t provide one (the default case for VoLTE).