5. Samsung VoLTE/VoWiFi settings






Enable VoLTE & VoWiFi in rooted Samsung smartphones.

Usually a VoLTE device, after the power ON, creates the Internet connection using the Internet APN. Afterwards, if VoLTE is enabled, it creates the ims connection using the ims APN and this one will be furher used for SIP communication with the VoLTE servers, for registration and handling the calls.

VoLTE&VoWiFi can be enabled for any operator. We managed to do it on all Samsung devices newer than Galaxy S4. For this you need to carefully edit the files in your device with the details of your operator - you can take them from a rooted Samsung officially supported by the operator or you can just guess them :) . For VoWiFi there are some more tricks.

Edit the following files:

1. the ims APN is defined in CSC (Customer Service Code) file customer.xml
2. the SIP/VoLTE/VoWiFi parameters are defined in CSC file customer.xml  and /system/priv-app/imsservice/imsservice.apk . You can decompile this apk or use WinRAR to opent it and edit the .json files mentioned below. Do not copy the imsservice.apk from another phone model or from another android version, it will never work!
3. further VoWiFi parameters can be found in /etc/epdg_apns_conf.xml
4. The well known Android file "/system/etc/apns-conf.xml" that contains a list of all operators and their APNs is used with a lower priority than CSC file customer.xml. You can ignore  apns-conf.xml

  ( User defined APN Location, besides the xml file :
/data/user_de/0/com.android.providers.telephony/databases/telephony.db Samsung S8 and Xiaomi Mi6
/data/data/com.android.providers.telephony/databases/telephony.db - Xiaomi Redmi Note 3 pro)

The CSC files are used as an input for imsservice.apk, the apk takes the basic information and generates the xml files in /data/user_de/0/com.sec.imsservice/shared_prefs/, the most important being imsprofile.xml. These files, containing tens of parameters, will be used further for enabling the service.

Use QuickShortcutMaker (or adb, or Phone Info/Secret Codes) to launch IMSSettings apk. You can check now if the phone is registered in VoLTE system (IMS), you can change different parameters like SIP preconditions, codecs,..., you can export all the call messajes in .pcap format and view them with Wireshark. Drop me a line if you need help with wireshark.
For more information just drop me an email: volte22222 [at] gmail.com

1. CSC


 <Setting>
        <NetworkName>Digi.Mobil</NetworkName>
        <EnableIMS>true</EnableIMS>                         IMS: ON
        <VoLTE>
          <EnableVoLTE>true</EnableVoLTE>                   VoLTE: ON
          <EnableVoiceoverWIFI>false</EnableVoiceoverWIFI>  VoWiFi: OFF
          <EnableVideocall>false</EnableVideocall>        VideoCall: OFF
          <EnableVoLTEindicator>true</EnableVoLTEindicator>   Iconita VoLTE: ON
          <Voice_Domain_Preference_EUTRAN>imspsvoicepreferred</...>    VoLTE preffered
          <Emregencycall_Domain>cs</Emregencycall_Domain>         Emergency call: CSFB, the call is done by falling back to 2G/3G, not using VoLTE
          <SS_Domain_Preference>cs_always</SS_Domain_Preference>  The configuration of Supplimentary Services as call forwarding is done in 3G, not over IP in 4G
          <SS_CSFBwithIMSerror>false</SS_CSFBwithIMSerror>    NA
          <USSD_Domain_Preference>cs</USSD_Domain_Preference>     USSD codes ovver 3G, not IP/4G
          <EnableSMSoverIP>false</EnableSMSoverIP>                       SMS over IP: OFF; the SMS is sent over LTE signalisation not over IMS/IP
        </VoLTE>
      </Setting>
    
    
    
  Definition of ims APN: 

   
      <Profile>
        <NetworkName>Digi.Mobil</NetworkName>
        <IpVersion>ipv4</IpVersion>
        <Editable>no</Editable>
        <ProfileName>IMS</ProfileName>
        <Auth>none</Auth>
        <Protocol>http</Protocol>
        <MTUSize>1500</MTUSize>
        <PSparam>
          <APN>ims</APN>
        </PSparam>
      </Profile>



2. /etc/epdg_apns_conf.xml   - S8 Nougat&Oreo

  <!-- Romania : RDS : ROM -->
        <apn mnoname="RDS_RO"
            connname="imsApn"
            apnname="ims"
            authtype="EAP"
            subnettype="IPV4"
            userauthtype="false"
            pfs="false"
            ownuritype="USER_FQDN"
            ownidentity="023430123456701@nai.epc.mnc005.mcc226.3gppnetwork.org"
            remoteuritype="KEY_ID"
            remoteidentity="ims"
            tunneltype="IPSEC_RAC"
            ipsecencryption="IPSEC_ENCRYPTION_AES_CBC_128"
            ipsecintegrity="IPSEC_INTEGRITY_HMAC_SHA1_96"
            ipsecgroup="IPSEC_GROUP_MODP_1024"
            ipseclifetime="IPSEC_LIFE_TYPE_SECONDS"
            ipseclifevalue="86400"
            ikeversion="IKE_VERSION_2"
            ikeintegrity="IKE_INTEGRITY_HMAC_SHA1_96"
            ikeencryption="IKE_ENCRYPTION_AES_CBC_128"
            ikegroup="IKE_GROUP_MODP_1024"
            ikeeaptype="EAP_METHOD_AKA"
            ikelife="86400"
            ikewindowsize="1"
            ikedpdtimeout="60"
            ikeconnectiontimeout="10"
            ikenatvalue="30"
            ikevirtualadaptername="tap0"
            vendorattribute="P-CSCF-IPV4"
            periodicdpdtimer="120"
            mobike="false"
            imei="NONE"
            fastreauth="false"
        />

 <!-- Romania : RDS : ROM -->
        <settings mnoname="RDS_RO"
            smartwifirssia="-74"
            smartwifirssib="-85"
            smartwifirssiroveinwifionly="-84"
            smartwifirssiroveoutwifionly="-90"
            smartwifirsrp1="-118"
            smartwifirsrp2="0"
            smartwifirsrp3="-110"
            smartwificdmarssi="0"
            smartpktlosspercent="100"
            threshold4grovein="110"
            threshold4groveout="118"
            threshold3grovein="100"
            threshold3groveout="110"
            threshold2grovein="95"
            threshold2groveout="105"
            smartwifigsmecio="-15"
            sysseltimer="30"
            tepdgltetimer="30"
            tepdg1xtimer="0"
            tepdg1xscantimer="0"
            hodelaytimer="0"
            wifiipconfigtimer="10"
            idimac="0"
            idiimsi="1"
            retry_enabled_for_always_on_apn="1"
            smartwifitimer="0"
            internet_pdn_keep_alive_timer="5400000"
            epdgserverip="epdg.epc.mnc005.mcc226.pub.3gppnetwork.org"
            dynamic_fqdn="0"
            dynamic_userfqdn="1"
            smart_wifi_ans_integration="1"
            smart_wifi_rtcp_integration="1"
            broadcast_ho_result="1"
            attach_pdn="default"
            alwayson_apntype="ims"
            vowifi_pref="1"
            ondemand_pdn_handoff="0"
            is_throttle_enabled="1"
            pcscfv4vendorattr="16389"
            pcscfv6vendorattr="16390"
            imeivendorattr="16391"
            netinterfacenum="0"
            epdgenable="on"
            emergency_apntype="none"
            is_dpd_allowed_in_connected_mode="1"
            is_ipv6_enabled="0"
            is_ipv6_preferred="0"
            certi_path="none"
            is_using_certi="0"
            handover_support="1"
            rtprtcplossratepercent="10"
            thresholddpdlatency = "300"
        />
       
<iwlanapns version="632">
    <vowifisettings>
        <!-- wifi_call_enable 0 = off, 1 = on -->
        <!-- wifi_call_preferred 1 = wifi pref, 2 = cs pref, 3 = wifi only, 4 = cs only -->
        <!-- wifi_call_when_roaming -1 = not used, 0 = cs pref, 1 = wifi pref -->
        <!-- GCF Test : GCF Test : GCF -->
       
       
        <!-- RDS Romania ROM -->
        <vowifi mnoname="RDS_RO"
            wifi_call_enable="0"
            wifi_call_preferred="1"
            wifi_call_when_roaming="-1"
        />

3. /system/priv-app/imsservice/imsservice.apk -  S8 Nougat

  • globalsettings.json
 {
      "mnoname": "RDS_ro",
      "note": "ims",
      "srvcc_version": 10,
      "note": "misc",
      "show_volte_regi_icon": true,
      "remove_icon_nosvc": 1
    }

 "note": "nohitsetting means, there is no matching MNO case",
  "nohitsetting": {
    "mnoname": "DEFAULT",
    "note": "sip",
    "enable_ciq": 0,
    "enable_hasati": 0,
    "note": "rcs",
    "rcs_local_config_server": 0,
    "rcs_custom_config_server_url": "",
    "rcs_auto_config_pdn": 0,
    "closed_group_chat": 0,
    "rcs_ft_chunk_size": 10240,
    "rcs_ish_chunk_size": 10240,
    "msrp_cema": 0,
    "pager_mode_size_limit": 1300,
    "conf_subscribe_enabled": true,
    "ft_cancel_memory_full": false,
    "ft_hide_download_file": false,
    "fthttp_trust_all_certs": false,
    "max_adhoc_group_size": 10,
    "rcs_disable_under_upsm": 0,
    "support_chat_on_default_mms_app": 0,
    "support_rcs_interworking_function": false,
    "note": "xdm - xcap_root_uri_pref: 0 Manual (From xcap_root_uri), 1 tel + MSISDN, 2 sip:imsi@domain, 3 : sip:MSISDN@domain",
    "agg_proxy_ip": "10.40.140.134",
    "auth_proxy_ip": "10.40.140.134",
    "auth_proxy_port": 8090,
    "bsf_ip": "10.40.140.134",
    "bsf_port": 8090,
    "http_username": "",
    "http_password": "test",
    "xcap_root_uri": "",
    "xcap_root_uri_pref": 0,
    "xdm_user_id_domain": "",
    "xdm_user_agent": "SAMSUNG IMS 6.0",
    "apn_selection": "xcap",
    "enable_gba": 0,
    "note": "ims ims_enabled is checked from RIL, not IMS Frw",
    "ims_enabled": false,
    "iwlan_pani_format": "[PREFIX][NODE_ID]",
    "dm_app_id": "ap2001",
    "dm_user_disp_name": "APCPS",
    "enable_group_chat_list_retrieve": 0,
    "voice_domain_pref_eutran": 1,
    "voice_domain_pref_utran": 1,
    "ss_domain_setting": "CS",
    "sms_write_uicc": "0",
    "t_lte_911_fail": 20,
    "ussd_domain_setting": "CS",
    "emergency_domain_setting": "CS",
    "volte_domestic_default_enabled": true,
    "volte_international_default_enabled": false,
    "vt_default_enabled": true,
    "support_vowifi": false,
    "vowifi_need_location_menu": false,
    "srvcc_version": 0,
    "pip": 0,
    "note": "ss",
    "ss_support_tls": false,
    "ss_select_mode": true,
    "ss_cb_select_mode": false,
    "ss_support_media_type": 255,
    "ss_select_ip_version": 0,
    "ss_support_multi_dns": false,
    "ss_support_retry": false,
    "ss_csfb_with_imserror": true,
    "ss_support_cp_element": false,
    "ss_support_ss_element": false,
    "ss_support_simservs_retry": true,
    "ss_disconnect_xcap_pdn": false,
    "ss_cf_busy_ruleid": "call-diversion-busy",
    "ss_cf_not_reachable_ruleid": "call-diversion-not-reachable",
    "ss_cf_no_answer_ruleId": "call-diversion-no-reply",
    "ss_cf_no_replytimer_ruleid": "NoReplyTimer",
    "ss_cf_not_logged_in_ruleid": "call-diversion-not-logged-in",
    "ss_cf_unconditional_ruleid": "call-diversion-unconditional",
    "ss_ocb_unconditional_ruleid": "",
    "ss_ocb_international_ruleid": "",
    "ss_ocb_international_ex_home_ruleid": "",
    "ss_icb_unconditional_ruleid": "",
    "ss_icb_roaming_ruleid": "",
    "ss_icb_anonymous_ruleid": "",
    "note": "misc",
    "show_regi_info_in_sec_settings": false,
    "show_volte_regi_icon": false,
    "volte_regi_icon_id": "stat_notify_volte_service_avaliable",
    "show_vowifi_regi_icon": false,
    "vowifi_regi_icon_id": "stat_notify_wfc",
    "vowifi_operator_label": "",
    "vowifi_operator_label_ongoing": 0,
    "vowifi_subtext_on_lockscreen": "",
    "remove_icon_nosvc": 0,
    "all_csfb_error_code_list": [],
    "voice_csfb_error_code_list": [],
    "video_csfb_error_code_list": [],
    "e911_csfb_error_code_list": [],
    "user_agent": "",
    "rcs_groupchat_auto_rejoin": true,
    "support_configserver":""
  },



  • imsprofile.json
 {
      "name": "RDS Romania for IMS PDN",
      "mnoname": "RDS_ro",

      "operator": [
        "22605"
      ],
      "sales_code": "ROM",
      "pcscf_pref": 0,
      "conference_uri": "sip:mmtel@conf-factory.ims.mnc005.mcc226.3gppnetwork.org",
      "conference_dialog_type": "1",
      "ringing_timer": 120,
      "ringback_timer": 120,
      "use_precondition": true,
      "ipver": "ipv4",
      "pdn": "ims",
      "port": 5060,
      "reg_enabled": true,
      "timer": "1:2000,2:16000,4:17000,A:2000,B:32000,C:180000,D:32000,E:2000,F:32000,G:2000,H:128000,I:17000,J:128000,K:17000",
      "enable_gruu": false,
      "ignore_rtcp_timeout_on_hold_call": true,
      "network": [
        {
          "type": "lte,wifi",
          "services": [
            "mmtel"
          ],
          "enabled": true
        }
      ]
    }
  • mnomap.json
    {"mccmnc": "22605", "subset": "", "gid1": "", "gid2": "", "mnoname": "RDS_ro"},

 

Initial solution for VoLTE only, quick and dirty: edit the imsprofile.xml file. You can start with this one.

/data/user_de/0/com.sec.imsservice/shared_prefs/imsprofile.xml 

<string name="241">{"name":"RDS Romania for IMS PDN","mnoname":"DEFAULT","operator":["22605"],"enabled":2,"pdn":"ims","transport":"udp-preferred","support_ipsec":false,"regi_algo":"AKAv1-MD5","auth_algo":"both","enc_algo":"all","subscribe_for_reg":true,"subscriber_timer":600000,"useragent":"[PRODUCT_MODEL]-[BUILD_VERSION] Samsung IMS 6.0","reg_expires":600000,"sip_uri_only":false,"enable_gruu":false,"sip_mobility":0,"session_refresh_method":1,"min_se":90,"session_refresher":"none","sip_compact_header":false,"remote_uri_type":"sip","need_naptr_dns":false,"support_roaming":false,"secure_client_port":5000,"secure_server_port":6000,"reregi_on_ratchange":"on_service_change","mss_size":1500,"reg_enabled":true,"timer":"1:2000,2:16000,4:17000,A:2000,B:32000,C:180000,D:32000,E:2000,F:32000,G:2000,H:128000,I:17000,J:128000,K:17000","emergency_support":false,"supported_geolocation_phase":0,"need_autoconfig":false,"use_msrp_bearer":false,"wifi_precondition_enabled":false,"use_precondition":true,"precondtion_initial_sendrecv":true,"use_provisional_response_100rel":false,"use_183_on_progress_incoming":false,"support_183_for_ir92v9_precondition":true,"is_rcs_telephony_feature_tag_required":false,"is_full_codec_offer_required":false,"session_expires":1800,"ringing_timer":120,"ringback_timer":120,"invite_timeout":180,"enable_mwi":false,"mwi_subscribe_expiry":7200,"conference_uri":"sip:mmtel@conf-factory.ims.mnc005.mcc226.3gppnetwork.org","conference_subscribe":"both_subscribe_unsubscribe","conference_dialog_type":"1","conference_referuri_type":"siptel","conference_referuri_asserted":"0","conference_use_anonymous_update":"0","support_merge_video_conference":false,"support_upgrade_video_conference":false,"pulling_server_uri":"","reg_retry_base_time":30,"reg_retry_max_time":1800,"smsc_set":"4444","audio_capabilities":"0","audio_codec_mode":"2","dtmf_mode":0,"video_capabilities":true,"enable_g711":true,"display_format":"vga-port","display_format_hevc":"vga-port","framerate":15,"rtp_timeout":20,"rtcp_timeout":20,"enable_rtcp_on_active_call":false,"ignore_rtcp_timeout_on_hold_call":true,"enable_av_sync":false,"audio_port_start":1234,"audio_port_end":0,"video_port_start":1574,"video_port_end":0,"text_port":49158,"amrnb_mode":"","amrwb_mode":"","audio_video_tx":1,"emm":1,"external_gtty":0,"audio_avpf":0,"audio_srtp":0,"video_avpf":0,"video_srtp":0,"video_as":700,"video_rs":4800,"video_rr":14400,"audio_as":38,"audio_rs":375,"audio_rr":1125,"amrnbbe_payload":118,"amrnboa_payload":96,"amrwbbe_payload":116,"amrwboa_payload":107,"amropen_payload":0,"h264_720p_payload":122,"h264_720pl_payload":123,"h264_vga_payload":116,"h264_vgal_payload":121,"h264_qvga_payload":118,"h264_qvgal_payload":103,"h264_cif_payload":124,"h264_cifl_payload":125,"h263_qcif_payload":34,"dtmf_nb_payload":110,"dtmf_wb_payload":111,"video_codec":"H264,H263","audio_codec":"AMRBE-WB,AMR-WB,AMRBE,AMR,DTMFWB,DTMF","packetization_mode":"1","dtmf_codec_mode":"0","mdmn_type":"NotSupport","enable_scr":true,"tty_type":1,"ptime":20,"maxptime":240,"audio_rtcpxr":0,"video_rtcpxr":0,"enable_evs_codec":false,"evs_discontinuous_transmission":"1","evs_dtx_recv":"1","evs_header_full":"0","evs_mode_switch":"0","evs_channel_send":"0","evs_channel_recv":"0","evs_channel_aware_receive":"-1","evs_codec_mode_request":"0","evs_bit_rate_send":"9.6-24.4","evs_bit_rate_receive":"9.6-24.4","evs_bandwidth_send":"nb-swb","evs_bandwidth_receive":"nb-swb","evs_payload":112,"evs_default_bandwidth":"nb-swb","evs_default_bitrate":"24.4","support_3gpp_ussi":false,"use_autoconfig":true,"closed_group_chat":false,"subscribe_max_entry":0,"publish_timer":0,"publish_expiry":3600,"extended_publish_timer":86400,"enable_gzip":false,"expire_header":true,"anonymous_fetch":false,"bad_event_expiry":0,"cap_cache_exp":0,"cap_poll_interval":0,"src_throttle_publish":60,"avail_cache_exp":0,"publish_err_retry_timer":21600,"poll_list_sub_exp":3,"cap_discovery":true,"self_port":5060,"support_incoming_history_info":false,"non_omc":false,"scm_version":0,"rcs_profile":"","network":[{"services":["mmtel"],"enabled":true,"type":"lte"},{"type":"wifi","services":["mmtel"],"enabled":true}],"sales_code":"ROM","pcscf_pref":0,"ipver":"ipv4","port":5060,"id":241}</string>

1 comment:

  1. I followed your instructions but I still get the "Your current system doesn't support VoLTE with the inserted SIM".
    I tried to add my new PLMN to the rooted samsung j7pro for IMS testing purpose.
    Any advice :) ?

    ReplyDelete

Romanian Operators Sites and core vendors

 Orange  Bucharest  Cluj Vodafone Bucharest Cluj Digi Mobil  Bucharest Iasi Timisoara