Skip to content

This is the open-source VoWiFi UE Testing Framework to evaluate the VoWiFi UE

Notifications You must be signed in to change notification settings

hw5773/vowifi-ue-testing-framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Open-source VoWiFi UE Testing Framework

  • Includes a separate control architecture
  • Includes a JSON-based testing format for describing any testcase
  • Tested with 24 UEs
  • Includes capability to generate adversarial and out-of-order messages in testcases

Directories

  • control: includes the source files of the controllers
  • epdg: includes the source files of the ePDG (StrongSwan)
  • hss: includes the source files of the HSS
  • ims: includes the source files of the IMS (Kamailio)
  • scripts: includes useful Python scripts
  • settings: includes configuration files in running modules in the VoWiFi testbed
  • simcard: includes setting/configuration files to make SIM cards
  • testcaess: includes example testcases
  • vagrant: includes VM configuration files

How to setup the VoWiFi testbed

Overview

  • Operating System: Ubuntu 20.04 (bento) (I think Ubuntu 18.04 will work as well.)
  • Registration Procedure
    • UE attaches to WiFi AP and is assigned the IPv4 address from the DHCP server on the WiFi AP
    • UE sends the DNS query to the DNS server to acquire the ePDG's address
    • UE executes the IKEv2 protocol with the ePDG
    • UE runs EAP-AKA protocol over IKEv2
    • The IKE channel is established between UE and ePDG once the UE is authenticated
    • ePDG provides the IPv6 address of P-CSCF to UE in the last IKE handshake message
    • UE executes the SIP registration protocol with P-CSCF (in detail, UE exchanges the messages with P-CSCF, but communicates with S-CSCF. P-CSCF simply forwards the messages.)
    • P-CSCF forwards the registration message to I-CSCF.
    • Again, I-CSCF forwards the message to S-CSCF. (In our scenario, there is no special task for I-CSCF. I-CSCF is responsible for managing roaming.)
    • S-CSCF refers to HSS to authenticate the UE
    • Finally, UE establishes the IPsec channel with P-CSCF and is registered to the IMS server (that is, S-CSCF for the UE is alive and provides the service)

Machines

  • I recommend having a laptop with two network interfaces: one is to communicate with the VoWiFi phones and the other is used to access the Internet. Note that some VoWiFi phones do not initiate the VoWiFi protocol if there is no Internet connection.
  • I will say the wlan interface for the interface used to communicate with the phones and the other interface for the interface accessed to the Internet. Note that the other interface can be any type (e.g., WiFi, LTE, ethernet, and so on) of an interface.

Kernel settings

  • forwarding ipv6 packets should be enabled
  • sudo sysctl -w net.ipv6.conf.all.forwarding=1

VoWiFi settings and source codes of the ePDG/IMS server

  • git clone https://github.com/hw5773/vowifi-core-network.git
  • Let's say the absolute path of the vowifi-core-network directory VOWIFI_ROOT

VoWiFi network topology

  •  UE -------- [WiFi AP/DNS] ------ [ePDG] -- [IMS]
    
  • (Smartphone) ---(laptop/desktop) ---(laptop/desktop) - (VM)

VoWiFi SIM card setting

  • H/W: sysmoISIM-SJA2 (ISIM card), SIM card reader/writer

  • S/W: pysim

  • Clone the pysim tool to set up the VoWiFi sim card

    • git clone https://github.com/osmocom/pysim.git
  • SIM writing and setting

    • sudo python3 pySim-prog.py -p 0 -a <ADM value> -n "T-Mobile" -x 310 -y 210 --imsi=<IMSI> --msisdn=<Telephone Number> --ims-hdomain=msg.pc.t-mobile.com --impi=<IMSI>@msg.pc.t-mobile.com --impu=sip:<IMSI>@ims.mnc210.mcc310.3gppnetwork.org --iccid=8901260245784161215 --smsp 542d4d6f62696c65fffffffffffffffff1ffffffffffffffffffffffff07912160130300f4ffffffff0000ff --smsc 12063130004 --opmode 80 --acc 0010 -k <key> -o <OPc>
    • sudo python3 pySim-shell.py -p 0 -a <ADM value> --script VOWIFI_ROOT/simcard/scripts/vowifi-setting.script
  • USIM/ISIM service change

    • sudo python3 pySim-shell.py -p 0 -a <ADM value>
    • (pySim-shell) select ADF.ISIM
    • (pySim-shell) select EF.IST
    • (pySim-shell) edit_binary_decoded (enable Service 2 - Generic Boostrapping Architecture (GBA))
    • (pySim-shell) select ADF.USIM
    • (pySim-shell) select EF.UST
    • (pySim-shell) edit_binary_decoded (enable Service 68 - Generic Boostrapping Architecture (GBA))
    • (pySim-shell) select EF.ISIM_SQN (disable sqn_check)
    • (pySim-shell) select ADF.USIM
    • (pySim-shell) select EF.USIM_SQN (disable sqn_check)
    • (pySim-shell) select ADF.USIM (change the length of MNC in IMSI to 3)
    • (pySim-shell) select EF.AD
    • (pySim-shell) update_binary_decoded '{"ms_operation_mode": "type_approval", "additional_info": {"ciphering_indicator": false, "csg_display_control": false, "prose_services": false, "extended_drx": false}, "rfu": 0, "mnc_len": 3, "extensions": ""}'
    • (pySim-shell) select DF.GSM (change the length of MNC in IMSI to 3)
    • (pySim-shell) select EF.AD
    • (pySim-shell) update_binary_decoded '{"ms_operation_mode": "type_approval", "rfu1": 0, "rfu2": 0, "ofm": false, "extensions": {"rfu3": 0, "mnc_len": 3, "extensions": ""}}'

Commands with an example value (you can just copy & paste the following command for the two SIM cards and only revise the ADM values)

- SIM 1
  - `sudo python3 pySim-prog.py -p 0 -a <ADM value> -n "T-Mobile" -x 310 -y 210 --imsi=310210123456781 --msisdn=17657751234 --ims-hdomain=msg.pc.t-mobile.com [email protected] --impu=sip:[email protected] --iccid=8901260245784161215 --smsp 542d4d6f62696c65fffffffffffffffff1ffffffffffffffffffffffff07912160130300f4ffffffff0000ff --smsc 12063130004 --opmode 80 --acc 0010 -k 11111111111111111111111111111111 -o 99999999999999999999999999999999`
  - `sudo python3 pySim-shell.py -p 0 -a <ADM value> --script VOWIFI_ROOT/simcard/scripts/vowifi-setting.script`

- SIM 2
  - `sudo python3 pySim-prog.py -p 0 -a <ADM value> -n "T-Mobile" -x 310 -y 210 --imsi=310210123456782 --msisdn=17657751235 --ims-hdomain=msg.pc.t-mobile.com [email protected] --impu=sip:[email protected] --iccid=8901260245784161215 --smsp 542d4d6f62696c65fffffffffffffffff1ffffffffffffffffffffffff07912160130300f4ffffffff0000ff --smsc 12063130004 --opmode 80 --acc 0010 -k 22222222222222222222222222222222 -o 99999999999999999999999999999999`
  - `sudo python3 pySim-shell.py -p 0 -a <ADM value> --script VOWIFI_ROOT/scripts/vowifi-setting.script`

List of SIM card settings preset in the repository (within the sql file for the HSS)

No. IMSI Ki OP OPc
0 310260123456780 00000000000000001111111111111111 0123456789abcdef0123456789abcdef 39e98f41b6d0ed76f89f1be1db95d6ca
1 310260123456781 11111111111111110000000000000000 0123456789abcdef0123456789abcdef cae66d4110513d5f71e7ae0986d9c3d9
2 310260123456782 22222222222222223333333333333333 0123456789abcdef0123456789abcdef 05ac79b5bb02b825a5cda8dfcc09439e
3 310260123456783 33333333333333332222222222222222 0123456789abcdef0123456789abcdef 3b907342af465290c3250e2e750e91fe
4 310260123456784 44444444444444445555555555555555 0123456789abcdef0123456789abcdef d8206cd5ed008a739fafe3d5d4d9e5c7
5 310260123456785 55555555555555554444444444444444 0123456789abcdef0123456789abcdef a7eb0198858cc008985ae4fce81abff5
6 310260123456786 66666666666666667777777777777777 0123456789abcdef0123456789abcdef af1ecb112aa057c15765ad96de61d9cc
7 310260123456787 77777777777777776666666666666666 0123456789abcdef0123456789abcdef 26321ae82e97a5b51128fa6ccedc932d
8 310260123456788 88888888888888889999999999999999 0123456789abcdef0123456789abcdef b292d947b09e60301f601b4faf22697f
9 310260123456789 99999999999999998888888888888888 0123456789abcdef0123456789abcdef 987b215969f494bb8c8380e38fb6c107

WiFi AP

  • I will assume that the laptop (or the desktop) has two network interfaces: the wlan interface and the other interface
  • sudo apt-get update && sudo apt-get install git dnsmasq hostapd net-tools
  • sudo ifconfig <the name of the wlan interface (e.g., wlan0)> 172.24.1.1 netmask 255.255.255.0
  • (Please make sure that 172.24.1.1 does not collide with other IP networks around the laptop)
  • sudo vi /etc/hostapd/hostapd.conf
  • Type (or copy) the following in (or to) the hostapd.conf file
interface=<the name of the wlan interface>
driver=nl80211
ssid=vowifi
hw_mode=g
channel=11
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CKK-40]
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=vowifipassword
rsn_pairwise=CCMP
  • sudo rm /etc/dnsmasq.conf
  • sudo vi /etc/dnsmasq.conf
  • Type (or copy) the following in (or to)
interface=<the name of the wlan interface>
listen-address=172.24.1.1
bind-interfaces
server=1.1.1.1
domain-needed
bogus-priv
dhcp-range=172.24.1.2,172.24.1.254,12h
  • sudo dnsmasq -C /etc/dnsmasq.conf
  • sudo hostapd -B /etc/hostapd/hostapd.conf
  • sudo sysctl -w net.ipv4.ip_forward=1
  • sudo iptables -t nat -A POSTROUTING -o <the name of the other interface> -j MASQUERADE
  • sudo iptables -A FORWARD -i <the name of the other interface> -o <the name of the wlan interface> -m state --state RELATED,ESTABLISHED -j ACCEPT
  • sudo iptables -A FORWARD -i <the name of the wlan interface> -o <the name of the other interface> -j ACCEPT

ePDG address setting

  • sudo vi /etc/hosts (on the WiFi AP machine)
  • add the following record
    <ePDG's IP address> epdg.epc.mnc210.mcc310.pub.3gppnetwork.org
    <ePDG's IP address> epdg.epc.mnc260.mcc310.pub.3gppnetwork.org
    

With one laptop

Add the record 172.24.1.1 epdg.epc.mnc210.mcc310.pub.3gppnetwork.org and 172.24.1.1 epdg.epc.mnc260.mcc310.pub.3gppnetwork.org to /etc/hosts

ePDG installation and configuration

  • Installation

    • S/W: Strongswan
    • cd VOWIFI_ROOT/epdg
    • autoreconf -f -i (or autoreconf --install)
    • ./configure --prefix=/usr/local --enable-eap-aka --enable-eap-aka-3gpp --enable-eap-aka-3gpp2
    • (Please check if eap-aka, eap-aka-3gpp, and eap-aka-3gpp2 modules are all enabled.)
    • make && sudo make install
  • Copy and paste all the configuration files

    • cd VOWIFI_ROOT/settings/epdg
    • sudo cp -r * /usr/local/etc
  • Configuration - ipsec.conf

    • The important attributes in this configuration file are as follows:
    • "leftsubnet": the network address of the VoWiFi network (fdad:dabb:ed::/64). The network bits should be 64 bits (it is required by UEs).
    • "rightsubnet": the network address of the IPv6 addresses to be assigned to UEs (2607:fc20:ba53:1538::/64). The network bits should be 64 bits (it is required by UEs).
    • "rightsourceip": the IPv6 pool for UEs (2607:fc20:ba53:1538:0:9:8a73:cc01-2607:fc20:ba53:1538:0:9:8a73:cc10)
  • Configuration - strongswan.conf

    • The values in "attr" are provided to UE for the networking information. T-mobile uses 16386 to indicate the IPv6 address of the IMS server (in detail, it is the address of P-CSCF).

Settings with an example value (you can revise the addresses)

- attr {
    16386 = fdad:dabb:ed::2
  }
  • Configuration - ipsec.secrets
    • The format (syntax) of the configuration file for the EAP secrets
    • <ID> : EAP <K> <OPc> (The key value and the OPc value are concatenated without any space in-between them)

Settings with an example value

- `[email protected] : EAP 0x1111111111111111111111111111111199999999999999999999999999999999`
- `[email protected] : EAP 0x2222222222222222222222222222222299999999999999999999999999999999`

Running Strongswan to do our experiment

- `cd VOWIFI_ROOT/epdg`
- `./310260.sh` or `./310210.sh` (depending on the MCC/MNC that you want to run)

IMS server installation and configuration

  • We are going to make two different core networks, one with MCC 310 and MNC 260, and the other with MCC 310 and MNC 210

  • The following example is for 310260. You should do the same things for 310210 as well.

  • The reason why we set up two different IMS network is because there are some VoWiFi phones that work in only one of them (there are some mutual exclusions, unfortunately).

  • [Host] Install VirtualBox and Vagrant

    • sudo apt-get install virtualbox
    • sudo apt-get install vagrant
  • [Host] Create the bridge

    • cd VOWIFI_ROOT/scripts
    • ./host.sh
    • The above script generates two bridge interfaces, called vowifi-310210 and vowifi-310260, each of which connects its corresponding IMS network.
  • [Host] Initiate the VM

    • cd VOWIFI_ROOT/vagrant/310260
    • vagrant up or (First run this --> vagrant init <box-name> e.g:, in our case it is <bento/ubuntu-20.04> so command will be --> vagrant init bento/ubuntu-20.04)
    • select vowifi-310260 for the bridge
    • vagrant ssh (to get the shell of VM)
  • [Guest] Download the Setting files for the IMS server and setting the network interface in the VM

    • git clone https://github.com/hw5773/vowifi-core-network.git
    • sudo apt-get install net-tools
    • cd VOWIFI_ROOT/scripts
    • ./guest-310260.sh
  • [Guest] mysql Installation

    • sudo apt-get install mysql-client mysql-server
    • sudo mysql
    • alter user 'root'@'localhost' identified with mysql_native_password by '<password>';
    • quit;
  • [Guest] IMS Server Installation and Configuration

    • S/W: Kamailio
    • cd VOWIFI_ROOT/ims
    • sudo apt-get install automake autoconf build-essential bison flex libxml2-dev libcurl4-gnutls-dev libssl-dev libmysqlclient-dev libpcre3-dev g++ pkg-config libsctp-dev libmnl-dev
    • make include_modules="ims_usrloc_pcscf ims_registrar_pcscf xmlrpc db_mysql cdp cdp_avp ims_icscf presence ims_usrloc_scscf ims_registrar_scscf ims_auth ims_isc ims_charging ims_dialog ims_ipsec_pcscf" cfg
    • make && sudo make install
  • [Guest] Kamailio mysql Configuration

    • sudo vi /usr/local/etc/kamailio/kamctlrc
    • uncomment DBENGINE=MYSQL
    • uncomment and revise the SIP_DOMAIN to SIP_DOMAIN=ims.mnc260.mcc310.3gppnetwork.org
    • kamdbctl create (Enter 'ascii' for the charater set name if you are asked)
  • [Guest] Database for P-CSCF, I-CSCF, and S-CSCF

    • mysql -u root -p

    • create database 'pcscf';

    • create database 'icscf';

    • create database 'scscf';

    • quit;

    • cd VOWIFI_ROOT/ims/utils/kamctl/mysql

    • mysql -u root -p pcscf < standard-create.sql

    • mysql -u root -p pcscf < presence-create.sql

    • mysql -u root -p pcscf < ims_usrloc_pcscf-create.sql

    • mysql -u root -p pcscf < ims_dialog-create.sql

    • mysql -u root -p scscf < standard-create.sql

    • mysql -u root -p scscf < presence-create.sql

    • mysql -u root -p scscf < ims_usrloc_scscf-create.sql

    • mysql -u root -p scscf < ims_dialog-create.sql

    • mysql -u root -p scscf < ims_charging-create.sql

    • cd VOWIFI_ROOT/ims/misc/examples/ims/icscf

    • mysql -u root -p icscf < icscf.sql

    • mysql -u root -p

    • create user pcscf@localhost identified by 'heslo';

    • grant delete,insert,select,update on pcscf.* to pcscf@localhost;

    • create user scscf@localhost identified by 'heslo';

    • grant delete,insert,select,update on scscf.* to scscf@localhost;

    • create user icscf@localhost identified by 'heslo';

    • grant delete,insert,select,update on icscf.* to icscf@localhost;

    • create user provisioning@localhost identified by 'provi';

    • grant delete,insert,select,update on icscf.* to provisioning@localhost;

    • flush privileges;

    • use icscf;

    • insert into 'nds_trusted_domains' values (1, 'ims.mnc210.mcc310.3gppnetwork.org');

    • insert into 's_cscf' values (1, 'First and only S-CSCF', 'sip:scscf.ims.mnc210.mcc310.3gppnetwork.org:6060');

    • insert into 's_cscf_capabilities' values (1,1,0),(2,1,1);

DNS Setting

  • [Guest] Bind9 Installation

    • sudo apt-get install bind9
  • [Guest] Bind9 Configuration and Restart

    • sudo cp VOWIFI_ROOT/settings/dns/* /etc/bind
    • sudo systemctl restart bind9.service
  • [Guest] Add the nameserver

    • sudo vi /etc/resolv.conf
    • add nameserver 127.0.0.1 to the first line of the file.

HSS Installation and Configuration

  • [Host] Download Oracle Java 7 JDK by using any browser (https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html)

    • Download jdk-7u80-linux-x64.tar.gz
    • cp ~/Downloads/jdk-7u80-linux-x64.tar.gz VOWIFI_ROOT/vagrant
    • cd VOWIFI_ROOT/vagrant
    • vagrant ssh
  • [Guest] Java 7 Installation

    • cp /vagrant/jdk-7u80-linux-x64.tar.gz ~
    • tar xvzf jdk-7u80-linux-x64.tar.gz
    • sudo update-alternatives --install /usr/bin/java java /home/vagrant/jdk1.7.0_80/bin/java 100
    • sudo update-alternatives --install /usr/bin/javac javac /home/vagrant/jdk1.7.0_80/bin/javac 100
    • sudo update-alternatives --config java
    • sudo update-alternatives --config javac
  • [Guest] Ant Installation

    • wget http://archive.apache.org/dist/ant/binaries/apache-ant-1.9.14-bin.tar.gz
    • tar xvzf apache-ant-1.9.14-bin.tar.gz
    • export ANT_HOME=/home/vagrant/apache-ant-1.9.14
    • sudo ln -s /home/vagrant/apache-ant-1.9.14/bin/ant /usr/bin/ant
  • [Guest] FHoSS Installation

    • cd ~
    • git clone https://github.com/herlesupreeth/FHoSS.git
    • cd FHoSS
    • export JAVA_HOME=/home/vagrant/jdk1.7.0_80
    • export CLASSPATH=/home/vagrant/jdk1.7.0_80/jre/lib
    • ant compile deploy
    • cd deploy
    • vi configurator.sh
    • Copy and paste the following code
    #!/bin/bash
    # Initialization & global vars
    # if you execute this script for the second time
    # you should change these variables to the latest
    # domain name and ip address
    DDOMAIN="open-ims\.test"
    DSDOMAIN="open-ims\\\.test"
    DEFAULTIP="127\.0\.0\.1"
    CONFFILES=`ls *.cfg *.xml *.sql *.properties 2>/dev/null`
    
    # Interaction
    printf "Domain Name:"
    read domainname 
    printf "IP Adress:"
    read ip_address
    
    # input domain is to be slashed for cfg regexes 
    slasheddomain=`echo $domainname | sed 's/\./\\\\\\\\\./g'`
    
    if [ $# != 0 ] 
    then 
    printf "changing: "
      for j in $* 
      do
        sed -i -e "s/$DDOMAIN/$domainname/g" $j
        sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $j
        sed -i -e "s/$DEFAULTIP/$ip_address/g" $j
        printf "$j " 
      done
      echo 
    else 
    printf "File to change [\"all\" for everything, \"exit\" to quit]:"
    # loop
      while read filename ;
      do
        if [ "$filename" = "exit" ] 
        then 
        printf "exitting...\n"
        break ;
    
      elif [ "$filename" = "all" ]
      then    
        printf "changing: "
          for i in $CONFFILES 
          do
            sed -i -e "s/$DDOMAIN/$domainname/g" $i
            sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $i
            sed -i -e "s/$DEFAULTIP/$ip_address/g" $i
        
            printf "$i " 
          done 
        echo 
        break;
    
      elif [ -w $filename ] 
      then
        printf "changing $filename \n"
        sed -i -e "s/$DDOMAIN/$domainname/g" $filename
        sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $filename
        sed -i -e "s/$DEFAULTIP/$ip_address/g" $filename
    
      else 
        printf "cannot access file $filename. skipping... \n" 
      fi
        printf "File to Change:"
      done 
    fi
    
  • [Guest] Copy the configuration file of the Diameter protocol

    • cp VOWIFI_ROOT/settings/hss/310260/DiameterPeerHSS.xml ~/FHoSS/deploy
  • [Guest] Change the domain names

    • chmod +x configurator.sh

    • vi webapps/hss.web.console/WEB-INF/web.xml

    • Change all the "open-ims" to "ims.mnc260.mcc310.3gppnetwork.org" (check them by grep -r -n "open-ims")

    • cp configurator.sh VOWIFI_ROOT/settings/hss

    • cd VOWIFI_ROOT/settings/hss

    • ./configurator.sh

    • Domain Name: ims.mnc210.mcc310.3gppnetwork.org

    • IP Address: 127.0.0.1

    • Change all the "open-ims" to "ims.mnc260.mcc310.3gppnetwork.org" (check them by grep -r -n "open-ims")

    • cp configurator.sh ~/FHoSS/config/

    • cd ~/FHoSS/config

    • ./configurator.sh

    • Domain Name: ims.mnc260.mcc310.3gppnetwork.org

    • IP Address: 127.0.0.1

    • Change all the "open-ims" to "ims.mnc210.mcc310.3gppnetwork.org" (check them by grep -r -n "open-ims")

    • cd ../src-web

    • vi WEB-INF/web.xml

    • Change "open-ims.test" to "ims.mnc210.mcc310.3gppnetwork.org"

  • [Guest] Prepare the database for HSS

    • mysql -u root -p

    • drop database hss_db;

    • create database hss_db;

    • quit;

    • cd VOWIFI_ROOT/settings/hss/310260

    • mysql -u root -p < 310260.sql

Running P-CSCF, I-CSCF, S-CSCF, and HSS

  • Open four terminals

Terminal 1 - P-CSCF

- [Host] `cd VOWIFI_ROOT/vagrant/310260`
- [Host] `vagrant ssh`
- [Guest] `cd VOWIFI_ROOT/settings/ims/310260/pcscf`
- [Guest] `./run.sh`

Terminal 2 - I-CSCF

- [Host] `cd VOWIFI_ROOT/vagrant/310260`
- [Host] `vagrant ssh`
- [Guest] `cd VOWIFI_ROOT/settings/ims/310260/icscf`
- [Guest] `./run.sh`

Terminal 3 - S-CSCF

- [Host] `cd VOWIFI_ROOT/vagrant/310260`
- [Host] `vagrant ssh`
- [Guest] `cd VOWIFI_ROOT/settings/ims/310260/scscf`
- [Guest] `./run.sh`

Terminal 4 - HSS

- [Host] `cd VOWIFI_ROOT/vagrant`
- [Host] `vagrant ssh`
- [Guest] `cd FHoSS/deploy`
- [Guest] vi hss.properties
- [Guest] Change `host=127.0.0.1` to `host=0.0.0.0`
- [Guest] `sudo ./startup.sh`

Add IMS Subscription

  • [Host] Open the browser
  • http://localhost:8888/hss.web.console/ (the HSS setting page is running on the 8080 port of the guest VM. The port forwarding is set in the Vagrant setting file (from guest 8080 to host 8888))
  • Login with ID: hssAdmin / Password: hss

Subscription with an example value

  • UE1: IMSI 310260123456781 (with the phone number 17657751111)

    • Click [Create] under [IMS Subscription]

    • Name: 310260123456781

    • Capabilities Set: cap_set1

    • Preferred S-CSCF: scscf1

    • Click [Save]

    • Click [Create & Bind new IMPI]

    • Identity: [email protected]

    • Secret Key: 11111111111111111111111111111111

    • Check Digest-AKAv1

    • Default: Digest-AKAv1-MD5

    • OPc: 99999999999999999999999999999999

    • Click [Save]

    • Click [Create & Bind new IMPU]

    • Identity: sip:[email protected]

    • Service Profile: default_sp

    • Charging-Info Set: default_charging_set

    • Check "Can Register"

    • Click [Save]

    • Click [Search] under [IMS Subscription]

    • Name: 310260123456781

    • Click [Create & Bind new IMPI]

    • Identity: [email protected]

    • Secret Key: 11111111111111111111111111111111

    • Check Digest-AKAv1

    • Default: Digest-AKAv1-MD5

    • OPc: 99999999999999999999999999999999

    • Associate IMPU: sip:[email protected]

    • Click [Add]

    • Click [Save]

    • Select "ims.mnc260.mcc310.3gppnetwork.org" from the dropdown menu under [Add Visitied-Networks] and Click [Add]

    • Check if the followings are correct

    • Bind the IMPIs with sip:[email protected], sip:[email protected], sip:[email protected], and sip:[email protected]

  • UE2: IMSI 310260123456782 (with the phone number 17657752222)

    • Click [Create] under [IMS Subscription]

    • Name: 310260123456782

    • Capabilities Set: cap_set1

    • Preferred S-CSCF: scscf1

    • Click [Save]

    • Click [Create & Bind new IMPI]

    • Identity: [email protected]

    • Secret Key: 22222222222222222222222222222222

    • Check Digest-AKAv1

    • Default: Digest-AKAv1-MD5

    • OPc: 99999999999999999999999999999999

    • Click [Save]

    • Click [Create & Bind new IMPU]

    • Identity: sip:[email protected]

    • Service Profile: default_sp

    • Charging-Info Set: default_charging_set

    • Check "Can Register"

    • Click [Save]

    • Click [Search] under [IMS Subscription]

    • Name: 310260123456782

    • Click [Create & Bind new IMPI]

    • Identity: [email protected]

    • Secret Key: 11111111111111111111111111111111

    • Check Digest-AKAv1

    • Default: Digest-AKAv1-MD5

    • OPc: 99999999999999999999999999999999

    • Associate IMPU: sip:[email protected]

    • Click [Add]

    • Click [Save]

    • Select "ims.mnc260.mcc310.3gppnetwork.org" from the dropdown menu under [Add Visitied-Networks] and Click [Add]

    • Check if the followings are correct

    • Bind the IMPIs with sip:[email protected], sip:[email protected], sip:[email protected], and sip:[email protected]

Turn on WiFi on UEs

Control Architecture

  • To conduct a UE testing, we implement the control architecture for VoWiFi to controll all the modules in the VoWiFi network including a UE, an ePDG, an IMS, and an HSS. The control architecture of the VoWiFi-UE-testing framework

Testcase Samples

  • The following JSON object is a testcase to test a UE on adversarial messages sent by ePDG and IMS according to the testcase. The testcase includes a scenario, where the encryption algorithm is set to null in the ealg attribute of the 401 unauthorized message.
  • {
      "testcases": [
        {
          "testcase": [
            {
              "receiver": "ue",
              "name": "enable_vowifi",
              "reporter": "epdg",
              "id": "update-401_unauthorized-security_server-ealg-null"
            },
            {
              "receiver": "epdg",
              "name": "ike_sa_init_response",
              "reporter": "epdg"
            },
            {
              "receiver": "epdg",
              "name": "ike_auth_1_response",
              "reporter": "epdg"
            },
            {
              "receiver": "epdg",
              "name": "ike_auth_2_response",
              "reporter": "epdg"
            },
            {
              "receiver": "epdg",
              "name": "ike_auth_3_response",
              "reporter": "ims"
            },
            {
              "receiver": "ims",
              "name": "401_unauthorized",
              "reporter": "ims",
              "sub": [
                {
                  "name": "security_server",
                  "sub": [
                    {
                      "name": "ealg",
                      "op": "update",
                      "type": "string",
                      "value": "null"
                    }
                  ]
                }
              ]
            },
          ]
        }
      ]
    }

Tested UEs

  • Our framework supports the following 26 UEs:

    No. Device Vendor Device Model Android Version Baseband Vendor Baseband Model
    1 Blackcyber I14 Pro Max 13 Qualcomm Snapdragon 888
    2 Blackcyber I15 Pro Max 13 Qualcomm Snapdragon 8 Gen2
    3 Blackview A55 11 MediaTek Helio A22 (MT6761)
    4 Google Pixel 4a 13 Qualcomm Snapdragon 765G
    5 Google Pixel 6a 12 Google Tensor
    6 HTC U11 life 8 Qualcomm Snapdragon 630 (SDM630)
    7 Huawei Nexus 6P 8 Qualcomm Snapdragon 810 (MSM8994)
    8 LG Stylo 6 10 MediaTek Helio P35 (MT6765)
    9 LG Velvet 5G 10 Qualcomm Snapdragon 765G
    10 Motorola Moto e5 Plus 8 Qualcomm Snapdragon 430 (MSM8937)
    11 Motorola G Power 2021 10 Qualcomm Snapdragon 662 (SM6115)
    12 Nokia G100 12 Qualcomm Snapdragon 665
    13 NUU B15 (S6701L) 11 MediaTek Helio G80 (MT6768)
    14 OnePlus Nord N20 (CPH2459) 12 Qualcomm Snapdragon 695 (SM6375)
    15 OnePlus 7T 11 Qualcomm Snapdragon 855 (SM8150)
    16 Samsung Galaxy S6 (G920T) 7 Samsung Exynos 7 Octa 7420
    17 Samsung Galaxy A21 10 MediaTek Helio P35 (MT6765)
    18 Samsung Galaxy A21s 12 Samsung Exynos 850
    19 Samsung Galaxy A23 12 Qualcomm Snapdragon 665 (SM6225)
    20 Samsung Galaxy A33 13 Samsung Exynos 1280
    21 Samsung Galaxy A34 5G 14 Samsung Exynos 1280
    22 TCL 40XL (T608M) 13 MediaTek Helio P35 (MT6765V/CA)
    23 T-Mobile Revvl4+ 10 MediaTek Helio A22 (MT6761)
    24 Ulefone Note 14 12 MediaTek Helio A22 (MT6761)
    25 UMIDIGI A13 Pro 11 Unisoc T610
    26 ZTE Stage 5G (A2020N3) 9 Qualcomm Snapdragon 855 (SM8150)

How to run the testbed

  • UE controller
    • Attach the target UE to a laptop (or a desktop) through a USB cable (UE must be in a USB debugging mode)
    • Run the script ue_controller.py under the control/ue_controller directory by python3 ue_controller.py
  • ePDG controller
    • Run the script 310210.sh or 310260.sh according to the IMSI of the target UE
  • IMS controller
    • Run the ims components in the order of P-CSCF, I-CSCF, and S-CSCF
  • Main controller
    • Run the main controller by `java -cp build/libs -jar build/libs/main_controller.jar --config ../config/310210.properties --file ../../testcases/epdg.json

Note

We have been working on the development of an open-source VoWiFi testbed and testing framework for the last 3 years. Recently and concurrently Osmocom (https://osmocom.org/projects/osmo-epdg) open-sourced their Osmo-epdg for creating open-source VoWiFi networks. We are really happy that the community is finally aiming to fill the gap in VoWiFi testbeds and testing.

About

This is the open-source VoWiFi UE Testing Framework to evaluate the VoWiFi UE

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •