Skip to content

VoLTE & VoWiFi — Voice over LTE/WiFi Guide

DodaTech Updated 2026-06-24 5 min read

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

  1. IMS Registration: UE registers with IMS via P-CSCF
  2. SIP INVITE: UE-A sends SIP INVITE to UE-B via IMS core
  3. Dedicated Bearer: PCRF triggers dedicated EPS bearer (QCI=1, GBR) for voice
  4. Media: RTP stream with AMR-WB codec at 23.85 kbps
  5. 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

  1. What QCI does VoLTE voice use? QCI=1 — Guaranteed Bit Rate (GBR), priority 2, 50ms packet delay budget.

  2. 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.

  3. 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

Why do some carriers charge extra for VoWiFi?

VoWiFi calls route through the operator's IMS core and may terminate on PSTN, costing interconnection fees. Some carriers include VoWiFi in unlimited plans; others charge per minute.

Does VoWiFi work on any WiFi?

Yes, but the WiFi must allow IPSec (UDP 4500, ESP) through the firewall. Corporate WiFi with strict egress filtering may block VoWiFi.

Can I use VoWiFi without a SIM card?

No. VoWiFi requires IMS registration authenticated by the SIM card (EAP-AKA').


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