VoLTE & VoWiFi — Voice over LTE/WiFi Guide
In this tutorial, you'll learn about VoLTE & VoWiFi. We cover key concepts, practical examples, and best practices.
VoLTE (Voice over LTE) and VoWiFi (Voice over WiFi) are IMS-based voice solutions that deliver HD-quality phone calls over IP networks — VoLTE uses LTE data channels with dedicated QoS bearers, while VoWiFi tunnels voice calls over WiFi through an evolved Packet Data Gateway (ePDG) to the IMS core.
What You'll Learn
- How VoLTE works: IMS registration, dedicated bearer setup, AMR-WB codec
- VoWiFi architecture: ePDG, IPSec tunnel, seamless mobility
- SRVCC between VoLTE and 3G/2G
- QoS: QCI values, guaranteed bit rate, packet delay budget
Why VoLTE and VoWiFi Matter
VoLTE is the only way to make voice calls on 4G networks — 3G and 2G are being phased out globally. VoWiFi enables calls over any WiFi network, eliminating dead zones at home and in basements. Both deliver HD voice (AMR-WB, 50-7000 Hz audio) far superior to 2G/3G telephony. Over 80% of mobile voice traffic is now VoLTE or VoWiFi as of 2026.
Doda Browser applies VoLTE's QoS bearer prioritization for its real-time video calling feature, ensuring video packets are prioritized over background data.
Learning Path
flowchart LR A[IMS Architecture] --> B[VoLTE: Voice over LTE
You are here] B --> C[VoWiFi: Voice over WiFi] C --> D[SRVCC & Handover] D --> E[5G VoNR] style B fill:#f90,color:#fff
VoLTE Architecture
flowchart TD UE --> eNB[eNodeB] eNB --> MME eNB --> SGW SGW --> PGW PGW --> P_CSCF[P-CSCF] P_CSCF --> S_CSCF[S-CSCF] S_CSCF --> AS[MMTel AS] MME --> PCRF[PCRF] PCRF --> PGW
VoLTE Call Flow
- IMS Registration: UE registers with IMS via P-CSCF
- SIP INVITE: UE-A sends SIP INVITE to UE-B via IMS core
- Dedicated Bearer: PCRF triggers dedicated EPS bearer (QCI=1, GBR) for voice
- Media: RTP stream with AMR-WB codec at 23.85 kbps
- BYE: Either party hangs up, bearer released
QoS Bearers
| Traffic | QCI | Type | Priority | PDB (ms) | Data Rate |
|---|---|---|---|---|---|
| SIP Signaling | 5 | Non-GBR | 1 | 100 | ~1 kbps |
| Voice (AMR-WB) | 1 | GBR | 2 | 50 | 23.85 kbps |
| Video (VT) | 2 | GBR | 4 | 150 | 128 kbps |
class VolteBearerManager:
def __init__(self):
self.bearers = {}
def establish_dedicated_bearer(self, ue_id, qci, gbr_kbps, mbr_kbps):
bearer_id = f"B-{ue_id}-{qci}"
self.bearers[bearer_id] = {
"qci": qci, "gbr": gbr_kbps, "mbr": mbr_kbps, "active": True
}
print(f"[EPC] Dedicated bearer {bearer_id} established")
print(f"[EPC] QCI={qci}, GBR={gbr_kbps} kbps, MBR={mbr_kbps} kbps")
return bearer_id
def modify_bearer(self, bearer_id, new_qci=None, new_gbr=None):
b = self.bearers[bearer_id]
if new_qci: b["qci"] = new_qci
if new_gbr: b["gbr"] = new_qbr
print(f"[PCRF] Bearer {bearer_id} modified: QCI={b['qci']}, GBR={b['gbr']}")
def release_bearer(self, bearer_id):
self.bearers[bearer_id]["active"] = False
print(f"[EPC] Bearer {bearer_id} released (call ended)")
bearer_mgr = VolteBearerManager()
b1 = bearer_mgr.establish_dedicated_bearer("UE-101", 1, 23, 50)
bearer_mgr.release_bearer(b1)
Expected output:
[EPC] Dedicated bearer B-UE-101-1 established
[EPC] QCI=1, GBR=23 kbps, MBR=50 kbps
[EPC] Bearer B-UE-101-1 released (call ended)
VoWiFi Architecture
VoWiFi tunnels IMS signaling and media through an untrusted WiFi network:
flowchart LR UE[UE with WiFi] --> AP[WiFi AP] AP --> ePDG[ePDG
Evolved Packet Data Gateway] ePDG --> PGW PGW --> P_CSCF[IMS Core] UE -. IPSec ESP Tunnel .-> ePDG
VoWiFi Key Components
| Component | Role |
|---|---|
| ePDG | Evolved Packet Data Gateway — IPSec termination, authentication relay to AAA/HSS |
| IPSec SA | Security association between UE and ePDG — encrypts all IMS traffic over WiFi |
| SWu interface | UE to ePDG over IPSec (IKEv2 + ESP) |
| SWm interface | ePDG to AAA for authentication |
| S2b interface | ePDG to PGW (GTP-based) |
VoWiFi Authentication
class VoWiFi_IPSec_Setup:
def __init__(self):
self.sa = {}
def ikev2_auth(self, imsi, wtp_id):
print(f"[IKEv2] Initiate with {wtp_id} for {imsi}")
print(f"[IKEv2] EAP-AKA' authentication via AAA + HSS")
print(f"[IKEv2] IPSec SA established: ESP encryption AES-256")
sa_id = f"SA-{imsi[-4:]}"
self.sa[sa_id] = {"imsi": imsi, "state": "established"}
print(f"[ePDG] {sa_id} active, routing to PGW via S2b")
return sa_id
def ipsec_encrypt(self, data, sa_id):
print(f"[IPSec] ESP: encrypt {len(data)} bytes using SA {sa_id}")
vowifi = VoWiFi_IPSec_Setup()
sa = vowifi.ikev2_auth("310410123456789", "ePDG-01.dodatech.com")
vowifi.ipsec_encrypt("SIP INVITE sip:+15550142@ims...", sa)
Expected output:
[IKEv2] Initiate with ePDG-01.dodatech.com for 310410123456789
[IKEv2] EAP-AKA' authentication via AAA + HSS
[IKEv2] IPSec SA established: ESP encryption AES-256
[ePDG] SA-6789 active, routing to PGW via S2b
[IPSec] ESP: encrypt 50 bytes using SA SA-6789
SRVCC (Single Radio Voice Call Continuity)
When a VoLTE user moves out of LTE coverage, SRVCC hands the call to 3G or 2G without dropping:
sequenceDiagram
UE->>eNB: LTE signal degrading
eNB->>MME: Handover Required (SRVCC)
MME->>MSC: Sv: PS-to-CS Request
MSC->>RNC/BSC: Prepare CS resources
MSC->>MGW: Prepare circuit bearer
RNC->>UE: Handover to 3G/2G
MSC->>IMS: SIP INVITE (re-invite for CS leg)
Note over UE: Call continues on 3G/2G CS
Common Errors
1. VoLTE Call Fails After IMS Registration
If IMS registration succeeds but calls fail, check dedicated bearer establishment. Without a QCI=1 GBR bearer, voice packets compete with best-effort data and get dropped under load.
2. VoWiFi IPSec Timeouts
IKEv2 SA lifetimes must match between UE and ePDG. Mismatched lifetimes cause mid-call IPSec rekey failures, dropping the call.
3. Forgetting SRVCC MSC Upgrade
SRVCC requires MSC Server (MSS) with Sv interface to MME. Older MSCs without this capability cannot receive VoLTE handovers.
Practice Questions
What QCI does VoLTE voice use? QCI=1 — Guaranteed Bit Rate (GBR), priority 2, 50ms packet delay budget.
How does VoWiFi differ from VoLTE architecturally? VoWiFi adds an ePDG between the UE and PGW for IPSec encryption over untrusted WiFi, plus IKEv2/EAP-AKA' authentication.
What happens when a VoLTE user moves out of LTE coverage? SRVCC handover to 3G or 2G: MME signals MSC via Sv interface, MSC allocates CS circuit, call continues seamlessly.
Challenge: Trace the complete signaling flow for a VoWiFi call originating on a home WiFi network and terminating on a VoLTE phone on the operator's LTE network. Include IKEv2, IPSec, SIP, dedicated bearer setup, and RTP media path.
FAQ
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. Updated 2026-06-24.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro