[4.4.0.64][Xperia 10 III] VoLTE conflicts with mobile data

REPRODUCIBILITY: Always
OS VERSION: 4.4.0.64
HARDWARE: Xperia 10 III
UI LANGUAGE: German
REGRESSION:

DESCRIPTION:

Mobile data is not working correctly, when enabling VoLTE.

PRECONDITIONS:

XPeria 10 III, downgraed to Android 11 with EMMA, installed Sailfish OS as per instructions using Linux.

STEPS TO REPRODUCE:

  1. Enable mobile date
  2. Switch Wifi on and off
  3. No internet connection using mobile data

EXPECTED RESULT:

Mobile data should work as expected.

ACTUAL RESULT:

The phone has no access to the internet after making a call, switching Airplane mode on and off or turning of wifi.
Sometimes disabling and enabling VoLTE fixes this behaviour. Sometimes only disabling VoLTE soves the issue or
several tries of dis- and reenabling are needed to get mobile data working correctly.

MODIFICATIONS:

Resized root partition, changed username from defaultuser to nemo, no device encryption

ADDITIONAL INFORMATION:

Sometimes it also takes a long time until the mobile data icon shows up in the staus bar after enabling mobile data. VoLTE and mobile data where working fine with Android 12.

1 Like

Discussion of related problem here:

I can confirm the problem.
I did some tests and hope my results will help to fix the problem.

First some background information about my setup:
OS Version: 4.4.0.64
Hardware: Xperia 10 III
Android Support: Not Installed
Android Version before flashing Sailfish: 62.0.A.9.11
UI Language: German
Mobile Network Operator: Congstar (subsidiary of Telekom Deutschland)
My WLAN/LAN network and my DSL connection is IPv4 only (desired behavior).
My Mobile Data Network is IPv6 only (this is another bug I’m investigating).

After switching on mobile data, one of the rmnet_data network interfaces is assigned to it.
But the assignment is not always the same, sometimes it is assigned to rmnet_data1, sometimes to rmnet_data2 or rmnet_ data3, etc.
At the same time, a corresponding default route is entered in the routing table:

[root@Xperia10III defaultuser]# connmanctl services cellular_XXXXXXXXXXXXXXX_context1 | grep Ethernet
  Ethernet = [ Method=auto, Interface=rmnet_data1, Address=00:00:00:00:00:00, MTU=1500 ]

[root@Xperia10III defaultuser]# ip -6 route | grep default
default via fe80::6002:dc5c:cea5:83e0 dev rmnet_data1  proto ra  metric 1024  expires 65187sec

After switching on VOLTE, another interface of the rmnet_data network interfaces is assigned to it.
But here, the assignment is not always the same either, sometimes rmnet_data1 or rmnet_data2 or rmnet_data3.
Unfortunately, a further default route is entered in the routing table for this interface:

[root@Xperia10III defaultuser]# ip -6 route | grep default
default via fe80::6002:dc5c:cea5:83e0 dev rmnet_data1  proto ra  metric 1024  expires 65187sec
default via fe80::c4f5:5ae:ce9f:265b dev rmnet_data2  proto ra  metric 1024  expires 65533sec

This ends up with two default gateways, which is not desirable and usually causes connection problems.

If the following constellation occurs, the user will not notice any problems:

If the network interface with the lower number (e.g. rmnet_data1) is used for mobile data and for VOLTE, the network interface with the higher number is assigned (e.g. rmnet_data2), then the default gateway for mobile data is at the top of the routing table and is therefore used first and everything works as expected.

BUT, repeatedly turning mobile data and/or flight mode on and off may result in the following constellation:
VOLTE is assigned to a low-numbered network interface (e.g. rmnet_data1) and the network interface with a higher number (e.g. rmnet_data3) is assigned to mobile data.

[root@Xperia10III defaultuser]# connmanctl services cellular_XXXXXXXXXXXXXXX_context1 | grep Ethernet
  Ethernet = [ Method=auto, Interface=rmnet_data3, Address=00:00:00:00:00:00, MTU=1500 ]

[root@Xperia10III defaultuser]# ip -6 route | grep default
default via fe80::d906:e1d5:affa:6b11 dev rmnet_data1  proto ra  metric 1024  expires 65534sec
default via fe80::7960:6c01:83e2:f683 dev rmnet_data3  proto ra  metric 1024  expires 65532sec

The default gateway from VOLTE network interface is used, because it is now at the top of the routing table. As a result, network access via mobile data is no longer possible.

After deleting the entry of the default gateway for the VOLTE interface, the mobile data works perfectly again.

[root@Xperia10III defaultuser]# ip -6 route del default via fe80::d906:e1d5:affa:6b11
    
[root@Xperia10III defaultuser]# ip -6 route | grep default
default via fe80::7960:6c01:83e2:f683 dev rmnet_data3  proto ra  metric 1024  expires 65532sec

After this change, VOLTE still works perfectly! So the question is: Why is a default gateway for the VOLTE interface entered into the routing table?

Maybe, this findings could be as well interesting for the Bug reports:

and/or for the described problems in this thread:

2 Likes

You arrived at the same conclusion I did - two IPv6 default routes cause issues! Deleting the “wrong” default gateway seems like the correct solution to me, too, but I didn’t have the time to test it. Thanks for posting this, the fix for the issue is getting closer and closer!

There was a fix for this issue in OS release 4.4.0.68 (in package ‘connman’).
Did it bring any help?