[PATCH] wg-quick: Android: Use ip link to set MTU

Adam Irr adam.irr at outlook.com
Tue Jan 5 05:50:02 UTC 2021


Hello Harsh,


On 1/4/21 9:53 AM, Harsh Shandilya wrote:
> Hey Adam,
>
> On 2021-01-03 05:59, Adam Irr wrote:
>> The ndc command used didn't work on my Nvidia Shield (rooted with a
>> custom-built kernel). The ip link command does work. I have only
>> tested this on an Nvidia Shield (Android TV - Version 9.0 Pie).
>>
>> I couldn't find a lot of documentation on ndc so it's possible my
>> device/kernel is misconfigured. If you suspect this is the case, let
>> me know.
>
> You couldn't find documentation because there isn't any, it's 
> effectively "private API" and Google has broken it time and again. It 
> is rather curious that you're running into this issue though, since 
> we've had the NDC code in place since before Android 9 came out and 
> went through breaking changes in every cycle without these specific 
> invocations failing. The last ndc related problem we had was with the 
> Android 11 release, where a similar fix[1] was implemented.
>
> I've Cc'ed Jason for reviewing this change, but I'm decidedly curious 
> as to why just the Nvidia SHIELD seems to need it.
>
I get a permission denied error when running the ndc command, even with 
root. Given the lack of ndc documentation I didn't get any further than 
that. If you have any other ideas I can try them.

darcy:/ # ndc interface setmtu wg0 1418
400 0 Failed to set MTU (Permission denied)
darcy:/ # ifconfig wg0 | grep MTU
           UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
darcy:/ # ip link set dev wg0 mtu 1419
darcy:/ # ifconfig wg0 | grep MTU
           UP POINTOPOINT RUNNING NOARP  MTU:1419  Metric:1
darcy:/ # whoami
root


I'll await Jason's review


>>
>> Signed-off-by: Adam Irr <adam.irr at outlook.com>
>> ---
>>  src/wg-quick/android.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/wg-quick/android.c b/src/wg-quick/android.c
>> index 326efa9..941c7b8 100644
>> --- a/src/wg-quick/android.c
>> +++ b/src/wg-quick/android.c
>> @@ -995,7 +995,7 @@ static void set_mtu(const char *iface, unsigned 
>> int mtu)
>>         int endpoint_mtu, next_mtu;
>>
>>         if (mtu) {
>> -               cndc("interface setmtu %s %u", iface, mtu);
>> +               cmd("ip link set dev %s mtu %d", iface, mtu);
>>                 return;
>>         }
>>
>> @@ -1016,7 +1016,7 @@ static void set_mtu(const char *iface, unsigned 
>> int mtu)
>>                         endpoint_mtu = next_mtu;
>>         }
>>
>> -       cndc("interface setmtu %s %d", iface, endpoint_mtu - 80);
>> +       cmd("ip link set dev %s mtu %d", iface, endpoint_mtu - 80);
>>  }
>>
>>  static void add_route(const char *iface, unsigned int netid, const 
>> char *route)
>> -- 
>> 2.25.1
>
> Cheers,
> Harsh
>
> 1: 
> https://git.zx2c4.com/wireguard-tools/commit/?id=9a0d65e2afbd6e418c883e0de8555b4fac29f1d5


Thank you,

Adam



More information about the WireGuard mailing list