cancel
Showing results for 
Search instead for 
Did you mean: 

Android feedback.

chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Android feedback.

Ok so PPPoE in its normal form is limited to a 1492 byte MTU.
For a while I had my router configured to allow 1500 byte MTU and none of my devices had issues.
About 7 weeks ago I replaced my hg612 modem with a billion 8800nl in bridge mode which I think was not working properly, I noticed this and reverted to 1492 bytes on my router about 2 weeks ago.
The problem with less than 1500 bytes on a router is that end devices such as windows pc's and android phones will still be defaulting to 1500bytes and relying on mtu discovery mechanisms or manual overide.
On my Windows PC this isnt a big deal mtu discovery works but slows things down a little, I get full performance back by manually configuring a 1492 byte mtu.  This MTU overide also works for ipv6.
On android things get messier.
1 - android has no integrated interface for adjusting MTU
2 - It requires root to adjust MTU - Luckily my phone is rooted.
I was noticing problems on ipv6, on wifi google play would either work fine or have long pauses before icons load or downloads start, likewise the youtube app was the same.  Youtube and google play both utillise ipv6 when available.  Then I started noticing same problems on cactiviewer accessing my own server (which I am aware has ipv6).  When I retested over 4G (over mobile network) all problems were gone, I started fiddling with my server and got nowhere then it clicked in my head ipv6.
I then found an app which could turn ipv6 off (albeit temporarily), and immediatly cactiviewer and google play were full speed.
Normally to adjust MTU is a pain as it requires opening terminal emulator and adjusting via ifconfig, in addition the setting will only last until the wifi is disconnected, so a reboot or turning wifi off resets it.  I found an app (it isnt on google play) that automates the process (obviously requires root) and anyway, with MTU set to a safe 1400 value and ipv6 turned back on everything still works fine.  I will retest with it on 1492, but I set to 1400 so I could test on speedguide.net it was working.
So android does have issues with ipv6 and MTU values below 1500 aka PPPoE.  As far as I can tell ipv4 is fine on android.  For informational purposes its android 4.4.4.
The only long term solution to this that is realistic is that google fixes it.  There is a long standing bug report here -> http://code.google.com/p/android/issues/detail?id=1008 that asks for MTU adjustments to be added in the android interface but they from 2008 and still ignored.  A better solution of course is working mtu discovery on android ipv6.
This is why I was previously utilising RFC 4638 on my router because it bypasses all the issues with devices using MTU discovery mechanisms.
The app to adjust MTU is here,  --> https://code.google.com/p/mtuchanger/ I virus scanned it and is clean.  it wont work on a non rooted phone. Adjust interface wlan0.
16 REPLIES 16
DougMa
Grafter
Posts: 115
Thanks: 3
Registered: ‎09-09-2011

Re: Android feedback.

I have the same problem with my Fritz!Box and the iPhone and iPad. 
The AVM Fritz!Box doesn't support baby-jumbograms, but it includes the 1492 MTU in the IPv6 router advertisement. Does the Billion support  including the MTU in the RA?
iOS uses the MTU until the wifi drops into power save, when it powers-up it goes back to the default 1500 and I see IPv6 connection failures.  Manually initiating a DHCP renew also triggers a router solicitation and it again implements the 1492 MTU. I'm planning to file an iOS bug report to have the IPv6 MTU persist until the RA expires.
Doug
chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Re: Android feedback.

The billion as its in bridge mode isnt responsible for the advertisements but thanks to your insight I have checked the radvd.conf on my asus router and there is no MTU setting listed, so my theory is that asuswrt has a bug in that when MTU is configured in the WAN settings it is not applied to ipv6.
I should be able to test by adjusting the config and restarting radvd.  Then letting android go back to its default configuration to see if it works.
chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Re: Android feedback.

Ok using a modified radvd.conf with  AdvLinkMTU 1450 inserted cactiviewer and googleplay both seem to work properly, but I cannot find a way to get the active ipv6 mtu reported back to my device, those tests suggest it works tho.
So I am going to report this to merlin to get fixed in the merlin asuswrt firmware.
AndyH
Grafter
Posts: 6,824
Thanks: 1
Registered: ‎27-10-2012

Re: Android feedback.

Which version of AsusWRT are you using?
The latest versions have dropped radvd and are using a customised version of dnsmasq for v6.
chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Re: Android feedback.

I am using the 374.43 fork as here.
http://forums.smallnetbuilder.com/showthread.php?t=18914
The fork was made because of 2 primary reasons.
Official ASUS releases were like BETA quality, very frequent changes which was annoying many asuswrt users as things kept breaking.  In addition releases newer than 374.43 have wifi issues due to changes made by asus to comply with the american FCC.  e.g. the wifi is set to EU restrictions not the UK and releases newer than 374.43 block adjusting the region configuration properly.
HairyMcbiker
All Star
Posts: 6,792
Thanks: 266
Fixes: 21
Registered: ‎16-02-2009

Re: Android feedback.

When I was on the trial, I had major issues with ipv6 & play store. It just would not work. I had to disable ipv6 on the devices to get it to work.
It may have been related to the 1500 mtu, I didn't go that deep. I am no longer on the trial so can't test any more.
I reported this last year.
chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Re: Android feedback.

It may well be related yes.
The 374.43 asuswrt fork will be fixed, dev is working on it.
chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Re: Android feedback.

Well I tested this on new asuswrt and tomatousb, both which now use dnsmasq for ipv6  and the situation is even worse.
dnsmasq does not allow a manual configuration of the link mtu value, it uses an automated method which if it gets the wrong value you screwed, in my case it gets the wrong value and sends 1500bytes to my devices.  So in short the newer asuswrt is even worse.  Asuswrt just copied tomatousb tho, it was tomatousb that moved to dnsmasq first.
AndyH
Grafter
Posts: 6,824
Thanks: 1
Registered: ‎27-10-2012

Re: Android feedback.

If Merlin added an option to allow you to set the local interface MTU for IPv6, then this would work fine as dnsmasq uses this for the the RA. It really should be added to the GUI and has been suggested quite a few times by people.
It was the same issue for previous AsusWRT releases using radvd. Although you can manually configure the AdvLinkMTU for IPv6, this was never really a solution because this value was never saved in the nvram. Every time you rebooted or reconnected, radvd was re-compiled based on the default conf written in the nvram which you could not edit.
chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Re: Android feedback.

Check the dnsmasq source code, it has no way to specifically set the ipv6 MTU, it relies on a automated method only.
Also the radvd overide in merlin is sticky because he has a facility to overide generated configs using the /jffs/configs folder.
AndyH
Grafter
Posts: 6,824
Thanks: 1
Registered: ‎27-10-2012

Re: Android feedback.

It's automated, but if you were given the option to set the local interface's MTU for v6 in the v6 GUI page, then it serves as the same function because it would advertise that value.
Merlin has the ability to do it, but he doesn't otherwise he would be putting out different fw versions with different values (some people want 1280 for example). The last emailed communication I had with him was that he was going to leave it as unspecified.
chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Re: Android feedback.

you dont understand, check the source code here.
http://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commitdiff;h=3b43646a08928e54ba16b1b7791de83b792600...
There is no way for merlin or whatever dev to send that MTU to dnsmasq, it simply does not have the functionality to do it.
Instead it grabs the MTU used on BR0 and sends that instead, and BR0 is always 1500bytes.
AndyH
Grafter
Posts: 6,824
Thanks: 1
Registered: ‎27-10-2012

Re: Android feedback.

Quote from: chrcoluk
There is no way for merlin or whatever dev to send that MTU to dnsmasq, it simply does not have the functionality to do it.

Actually, this is incorrect. You can force an MTU within the dnsmasq.conf file (dhcp-option=26,1492), however it will apply to both IPv4/6.
I'm more than aware as I've been discussing it with Asus' R&D Team for months now. There are issues with native v6 and VPN tunnels (particularly IPSec).
What they should do is allow users to specify the IPv6 MTU in /proc/sys/net/ipv6/*/mtu as this would resolve any issues with the RA (if my understanding is correct).
chrcoluk
Grafter
Posts: 1,990
Thanks: 5
Registered: ‎11-12-2013

Re: Android feedback.

I will test what you said, but if it works it isnt documented? or is it if so please apply a link, thanks.
you are right dnsmasq checks  /proc/sys/net/ipv6/*/mtu, but as I understand it checks the interface in the dnsmasq.conf which is br0 not ppp0.