- 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
- 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
- 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)
- 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.
- forwarding ipv6 packets should be enabled
sudo sysctl -w net.ipv6.conf.all.forwarding=1
git clone https://github.com/hw5773/vowifi-core-network.git
- Let's say the absolute path of the vowifi-core-network directory VOWIFI_ROOT
-
UE -------- [WiFi AP/DNS] ------ [ePDG] -- [IMS]
- (Smartphone) ---(laptop/desktop) ---(laptop/desktop) - (VM)
-
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`
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 |
- 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
- 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
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
-
Installation
- S/W: Strongswan
cd VOWIFI_ROOT/epdg
autoreconf -f -i
(orautoreconf --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).
- 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)
- `[email protected] : EAP 0x1111111111111111111111111111111199999999999999999999999999999999`
- `[email protected] : EAP 0x2222222222222222222222222222222299999999999999999999999999999999`
- `cd VOWIFI_ROOT/epdg`
- `./310260.sh` or `./310210.sh` (depending on the MCC/MNC that you want to run)
-
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
toSIP_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);
-
-
[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.
-
[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
-
- Open four terminals
- [Host] `cd VOWIFI_ROOT/vagrant/310260`
- [Host] `vagrant ssh`
- [Guest] `cd VOWIFI_ROOT/settings/ims/310260/pcscf`
- [Guest] `./run.sh`
- [Host] `cd VOWIFI_ROOT/vagrant/310260`
- [Host] `vagrant ssh`
- [Guest] `cd VOWIFI_ROOT/settings/ims/310260/icscf`
- [Guest] `./run.sh`
- [Host] `cd VOWIFI_ROOT/vagrant/310260`
- [Host] `vagrant ssh`
- [Guest] `cd VOWIFI_ROOT/settings/ims/310260/scscf`
- [Guest] `./run.sh`
- [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`
- [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
-
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
- List of Visitied Networks: ims.mnc260.mcc310.3gppnetwork.org
- List IMPUs from Implicit-Set: sip:[email protected]
- List of associated IMPIs: [email protected] / [email protected]
-
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
- List of Visitied Networks: ims.mnc260.mcc310.3gppnetwork.org
- List IMPUs from Implicit-Set: sip:[email protected]
- List of associated IMPIs: [email protected] / [email protected]
-
Bind the IMPIs with sip:[email protected], sip:[email protected], sip:[email protected], and sip:[email protected]
-
- 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 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" } ] } ] }, ] } ] }
-
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)
- 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
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.