I have been running around trying to figure out why my Samsung Galaxy S4 (Android 4.3) seems to lose its IPv6 prefix when it has been sleeping for a while. At first I blamed my edge CPE device, as I had rebuilt a OpenWRT recently and switched from WIDE-DHCPv6+RADVD to 6relayd. And I had never noticed if the previous implementation had this issue or not.
Symptoms: If I leave the device idle for a certain amount of time (which apparently would be longer than the preferred life of the prefix), when I open the browser I note that v6-sites are not reachable until my router sends an unsolicited RA. I installed some free apps such as MyIPv6 and Network Info ii and although all seemed normal during phone use, after a certain time the prefixes would be non-functional, and would even not appear in these apps as existing, until the next RA sent by the router and all would resume correctly.
As well, if for whatever reason the prefix received by prefix delegation changes, an idle device (read: screen off….) will only learn of the new prefix once the route sends an RA containing that new prefix.
Out of desperation I started googling and apparently I am not alone:
I especially liked the comment from the Samsung developers:
OK, well I tested this, as did the reporter of this issue. Simply locking the phone (turning off the screen), with an ICMP ping to the IPv4 and IPv6 addresses respectively. The IPv6 address of my phone ceases to reply to ICMP echo requests when I turn off the screen (as expected) – YET IPv4 REQUESTS ARE NOT IGNORED and replies are sent by the GS4! So what gives, Samsung devops? This is with or without the power saving features enabled. I don’t believe this cockamamie notion about running down batteries – its either laziness, incompetence or an outright dismissal of a bug.
And frankly, I wouldn’t really care if ICMP echo/echo-reply data was discarded, however ND, RA and other critical v6 traffic shouldn’t be. Or, at the very least, send a solicited RA or reset the IPv6 stack entirely, because when the phone wakes from sleep or is unlocked, the IPv6 stack is broken up until a router sends an RA. And in my case, 6relayd seems to send one every 7 minutes or so, with a randomized +/- interval of a few seconds. And some networks I have connected to send RAs every hour, not every few seconds, since IPv6 protocols allow for address assignment to occur without RAs….So it could be a long wait! And even if a network sends an unsolicited-RA every 30 seconds, that is 30 seconds where your connectivity is v4-only when you benefit from a dual-stacked environment. Not very modern-ish behaviour by a so-called industry leader!
I hate to admit it, but I tested iPhone4, 4S, 5 and iPad mini as well as Windows XP/7, and they all behave correctly when woken from whatever state they were in post-prefix-expiry. I will be borrowing some other Android devices as I can get my hands on them to compare results. But as of now I don’t have a very high regard for Samsung’s IPv6 implementation!
Samsung coders need to get a clue! “End users can connect to networks continually by IPv4” is not an acceptable answer. As IPv6 grows in popularity and necessity, that is a pretty bone-headed opinion. Need I point out that at the time of this writing, that forum post is less than 6 months old!