Skip to content
lyatanskiPublic

About

IP Multimedia Subsystem

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Latest commit

 

History

130 Commits

Folders and files

Repository files navigation

IMS

IP Multimedia Subsystem

---
title: Architecture
---
architecture-beta

    service test(server)[test]
    service smf(server)[SMF]
    service upf(server)[UPF]
    service hss(server)[HSS]
    service pcrf(server)[PCRF]
    service pcscf(server)[PCSCF]
    service icscf(server)[ICSCF]
    service scscf(server)[SCSCF]
    service rtp(server)[rtpengine]
    service ocs(server)[OCS]
    junction Mw

    test:T -- L:smf
    test:R -- L:upf
    smf:B -- T:upf
    smf:R -- L:pcrf
    pcrf:B -- T:pcscf
    upf:R -- L:pcscf
    upf:B -- L:rtp
    icscf:R -- L:hss
    scscf:T -- B:hss
    scscf:R -- L:ocs
    pcscf:R -- L:Mw
    icscf:B -- T:Mw
    scscf:L -- R:Mw
    scscf:B -- R:rtp
Loading

Why the setup?

  • provide entirely software based playground for testing
  • delve a bit deeper into the open source components configuration and documenting the process
  • make simple and clean solution utilizing compose features like interpolation
  • create helm charts for Kubernetes installation

How to use

As the setup loads and uses kernel module, best to test in VM

docker compose --profile test up -d

For always up to date commands, check out CI configuration

To swap the HSS (and the mongo / subscriber-seed / DRA machinery behind it) for the pro2call Cx emulator — no provisioning, any IMSI, so load lands on the CSCF chain instead — point $CORE at stub.yml

CORE=stub.yml docker compose up -d --remove-orphans

To observe the packets

wireshark -i any --display-filter 'gtpv2 or sip or diameter.cmd.code != 280'

To capture instead, with the container and process behind every packet recorded in the file, and to browse the result without leaving the browser

docker compose --profile debug up -d pcap webshark
docker compose stop pcap

webshark carries a Lua plugin that relates SIP to Diameter by subscriber, so one display filter covers a registration and the Cx exchange behind it

ims.id == "001010000000001"

and, because the plugin learns each subscriber's IMPI/IMPU binding out of the registration, the same frames come back under any of that subscriber's names — ims.impi == "001010000000001" and ims.impu == "359000000001" alike

and its Flow button draws that filtered set as Wireshark's flow graph — the whole registration as one sequence diagram, UE to HSS. Rows are coloured by the reference point they are on, Gm and Mw through Cx, Rx, Gx and Ro, with a failure in red over the top of it. Gm is included even though IPsec protects it: the ESP keys of every registration are in the capture, so webshark takes them out of it and reads the protected traffic as the SIP it is.

See Tracing for what each of those gives you.

Specifications

Flows

Components

  • IMS (compose.yml)
    • CSCF
      • Proxy
      • Interrogating
      • Serving
    • DB
    • rtpengine
    • DNS
      • ENUM — a dialled number translated to a SIP URI, off-range numbers broken out to a trunk (session flow)
  • Core Network (core.yml)
  • Billing (billing.yml)
  • Monitoring (monitor.yml)
    • Fluent Bit
    • Loki
    • cAdvisor
    • Prometheus
    • Alertmanager
    • Grafana
  • Capture (monitor.yml, debug profile, doc)
    • tcpdump
    • webshark
    • ims.lua — SIP and Diameter under one filter
  • Testing (compose.yml, test profile)
    • pro2call — S5/S8 attach, IMS-AKA registration, calls, SMS

About

IP Multimedia Subsystem

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages