[4.4.0] [X10III] VoLTE breaks IPv6 connectivity, slowing IPv4 down, too

REPRODUCIBILITY: 50%
OS VERSION: 4.4.0.64
HARDWARE: Sony Xperia 10 III
UI LANGUAGE: Finnish
REGRESSION: No*

MOBILE OPERATOR: Elisa / Finland

DESCRIPTION:

Update: This bus occurs only when VoLTE is enabled on Sony Xperia 10 III. Enabling VoLTE breaks IPv6 Internet connectivity, delaying IPv4 routing to take place as well. I suspect this is because the default IPv6 route is determined to be the “voice” interface and not the “data” interface.

Network analysis

This doesn’t include the VoLTE interface.

  • IPv4-only mode is affected by VoLTE

    • IPv4 address is configured
    • IPv6 link scope address is configured
    • no IPv6 public address
    • ping www.google.com resolves to IPv6 host, doesn’t work
    • ping -4 www.jolla.com works
    • ip -4 route shows a route to Internet
    • ip -6 route has only local routes
    • Jolla homepage is accessible via Browser
  • IPv6-only mode doesn’t work at all

    • IPv4 address is not configured
    • IPv6 link scope address is configured
    • IPv6 public address is configured
    • ping www.google.com resolves to IPv6 host, doesn’t work
    • ping -4 www.google.com doesn’t work
    • ip -4 route has only local routes
    • ip -6 route has only local routes ???
    • Jolla homepage is not accessible via Browser, but it should
  • IPv4+IPv6 mode works over IPv4 only

    • IPv4 address is configured
    • IPv6 link scope address is configured
    • IPv6 public address is configured
    • ping www.google.com resolves to IPv6 host, doesn’t work
    • ping -4 www.google.com works
    • ip -4 route shows a route to Internet
    • ip -6 route shows a route to Internet (but no traffic gets through?)
    • Jolla homepage is eventually accessible via Browser

I think it boils down to IPv6 route misconfiguration or interface mix-up or just the order of the interfaces. When the IPv6 ping fails, the routes are as follows:

Broken IPv6 routing table with VoLTE
2001:999:xxxx:xxxx::/64 dev rmnet_data2  proto kernel  metric 256 
2001:999:zzzz:zzzz::/64 dev rmnet_data1  proto kernel  metric 256 
fe80::/64 dev rmnet_data0  proto kernel  metric 256 
fe80::/64 dev rmnet_ipa0  proto kernel  metric 256 
fe80::/64 dev rmnet_data1  proto kernel  metric 256 
fe80::/64 dev rndis0  proto kernel  metric 256 
fe80::/64 dev rmnet_data2  proto kernel  metric 256 
default via fe80::xxxx:xxxx:xxxx:xxxx dev rmnet_data1  proto ra  metric 1024  expires 65444sec mtu 1280 hoplimit 64
default via fe80::xxxx:xxxx:xxxx:xxxx dev rmnet_data2  proto ra  metric 1024  expires 65472sec mtu 1280 hoplimit 64

Then, after disabling VoLTE, there was only one IPv6 route and IPv4 + IPv6 traffic both worked.

I enabled VoLTE again, and this time the IPv6 connectivity was still there! This is the routing table now:

Functional IPv6 routing table with VoLTE
2001:999:xxxx:xxxx::/64 dev rmnet_data2  proto kernel  metric 256 
2001:999:yyyy:yyyy::/64 dev rmnet_data3  proto kernel  metric 256 
fe80::/64 dev rmnet_data0  proto kernel  metric 256 
fe80::/64 dev rmnet_ipa0  proto kernel  metric 256 
fe80::/64 dev rndis0  proto kernel  metric 256 
fe80::/64 dev rmnet_data2  proto kernel  metric 256 
fe80::/64 dev rmnet_data3  proto kernel  metric 256 
default via fe80::xxxx:xxxx:xxxx:xxxx dev rmnet_data2  proto ra  metric 1024  expires 64247sec mtu 1280 hoplimit 64
default via fe80::yyyy:yyyy:yyyy:yyyy dev rmnet_data3  proto ra  metric 1024  expires 64588sec mtu 1280 hoplimit 64

PRECONDITIONS:

  • Sony Xperia 10 III
  • VoLTE enabled and usable
  • FI / Elisa SIM card with VoLTE, IPv4 and IPv6 (others should work, too)

STEPS TO REPRODUCE:

  • Test Internet connectivity with IP, IPv6, and Both modes
  • Required disabling and enabling mobile data in order to be fully effective (another bug?)
  • Enabling and disabling VoLTE also affect the bug occurring

EXPECTED RESULT:

  • Applications using Internet connectivity work snappily as expected

ACTUAL RESULT:

  • Applications lag before beginning data transfer
  • Caused by IPv6 name resolution in IPv4-only situation, or
  • Caused by broken IPv6 support

MODIFICATIONS:

None

ADDITIONAL INFORMATION:

Enabling and disabling VoLTE breaks IPv6 Internet connectivity, but after setting it off and on again, connectivity restored. This doesn’t seem to happen every time though. Things could be different after a restart when VoLTE is enabled, or when it’s toggled on and off.

WORKAROUND

Update 2: Removing the wrong gateway seems to fix the issue, as @senders posted into one of the many reports of the same issue.

Update: To get IPv4+IPv6 connectivity with VoLTE, you can try do disable VoLTE, check connectivity, and try enabling VoLTE again.

The forceful method: Using the usual Linux spells, disabling IPv6 restores proper functionality in Email attachments and a few other applications, too:

  • Set the mobile broadband type to IP (IPv4 only)
  • In terminal, as root, execute the following commands (at your own risk):
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1

Restoring the IPv6 can be done by rebooting the phone, or by executing:

sysctl -w net.ipv6.conf.all.disable_ipv6=0
sysctl -w net.ipv6.conf.default.disable_ipv6=0

Doing this (weirdly) doesn’t seem to affect VoLTE calls - at least the indicator showed “4G” when I made a call yesterday with IPv6 disabled.

7 Likes

After finally completing data transfer from my X10II, I was able to compare the two devices. Here’s the comparison bullet points for Sony Xperia 10 II:

  • IPv4-only mode works (with link-local IPv6 present)

    • IPv4 address is configured
    • IPv6 link scope address is configured
    • no IPv6 public address
    • ping www.google.com resolves to IPv4 host, works
    • ping -6 www.google.com resolves to IPv6, doesn’t work
    • ip -4 route shows a route to Internet
    • ip -6 route has only local routes
    • Jolla homepage is accessible via Browser
  • IPv6-only works

    • no IPv4 address
    • IPv6 link scope address is configured
    • IPv6 public address is configured
    • ping www.google.com resolves to IPv6 host, works
    • ping -4 www.google.com doesn’t work
    • ip -4 route has only local routes
    • ip -6 route shows a route to Internet
    • Jolla homepage is accessible via Browser
  • IPv4+IPv6 mode works over both

    • IPv4 address is configured
    • IPv6 link scope address is configured
    • IPv6 public address is configured
    • ping www.google.com resolves to IPv6 host, works
    • ping -4 www.google.com works
    • ip -4 route shows a route to Internet
    • ip -6 route shows a route to Internet
    • Jolla homepage is accessible via Browser

I hope I got that right without copy-paste errors :upside_down_face: The point is, every test works or doesn’t work as expected. So this seems to be a bug in X10III network stack (I hope it’s not a bug in AOSP binaries…)

Right. After a ton of troubleshooting: here’s the TL;DR:

  • X10III has functioning IPv4+IPv6 over mobile broadband
  • Enabling VoLTE activates another network interface (I’m quite sure of this)
  • As that VoLTE network interface uses IPv6, its route gets added to the routing table
  • This route gets (sometimes) used as a default Internet gateway
  • This breaks Internet connectivity for IPv6
  • As the route exists in IPv4-only mode, too:
    • IPv6 route/hosts may be tried before IPv4 route/hosts
    • This causes timeouts, retries and unnecessary delays

Workaround:

  • Disable VoLTE (recommened)
  • Disable IPv6 stack on the device (not recommened)

Workaround (if you’re feeling lucky):

  • Turn VoLTE off and on again (using dbus)

I don’t know the details of the IPv6 voice packet routing, but I think disabling the default route for the VoLTE data intertface should do the trick.

@flypig I think this is something Jolla would like to have a look at. Thanks!

3 Likes

Thank you for this, @direc85 ! At the risk of sounding like a broken record (remember those! :wink: ) could this IPv4/6 routing error be a root cause of user reports of inconsistent data connectivity on the 10iii (here, here, and here)? There appear to be several consistencies: the problem occurs with VoLTE enabled; phone calls continue to work despite data drop; resetting connectivity is necessary to reconnect; pings resolve host but no packets received… Thoughts?

1 Like

I’m not 100% sure if the “use SIM in slot 2” is the same issue, but in can certainly be related. But I’m not 100% sure. (Get it? :wink:)

The other two issues sure sound like the same issue. Thanks for pointing them out!

Well if SIM slot 2 either doesn’t have VoLTE enabled or is incapable (see @remote 's note on this), that could explain why SIM2 appears to work better than SIM1?

Is there a way to make sim1 volte uncapable? While sim2 works great I really would like to use a memory card on the XIII

I think you can get VoLTE+Inet working by disanling and enabling VoLTE while you have ‘Both’ (ip4+ip6) selected. And you have IPv6-capable SIM card.

1 Like

Thanks for posting the report and for all of your very detailed and careful analysis @direc85, which is really appreciated.

I’ve created an internal bug report about this and marked it as tracked. I’ll try to post any updates back here.

2 Likes

This was fixed in a 4.4.0.x update earlier, so marking as solved!