Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34d43616 authored by Maciej Żenczykowski's avatar Maciej Żenczykowski
Browse files

Reduce advertised ipv6 mtu by 16 to fit ethernet header



This is a temporary hack to workaround the inability of current
kernel's ebpf bpf_skb_change_mode() function to prefix a 14-byte
ethernet header on to a packet without going over the upstream
(source, rawip) interface's mtu *before* we bpf_redirect() to
the downstream (destination, ethernet) interface.

Test: build, atest, atest TetheringTests
Bug: 149816401
Signed-off-by: default avatarMaciej Żenczykowski <maze@google.com>
Change-Id: I646148ebfd978a2489c0cd065e4b671b01150add
parent 91bb789c
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -541,7 +541,12 @@ public class IpServer extends StateMachine {


        if (v6only != null) {
        if (v6only != null) {
            params = new RaParams();
            params = new RaParams();
            params.mtu = v6only.getMtu();
            // We advertise an mtu lower by 16, which is the closest multiple of 8 >= 14,
            // the ethernet header size.  This makes kernel ebpf tethering offload happy.
            // This hack should be reverted once we have the kernel fixed up.
            // Note: this will automatically clamp to at least 1280 (ipv6 minimum mtu)
            // see RouterAdvertisementDaemon.java putMtu()
            params.mtu = v6only.getMtu() - 16;
            params.hasDefaultRoute = v6only.hasIpv6DefaultRoute();
            params.hasDefaultRoute = v6only.hasIpv6DefaultRoute();


            if (params.hasDefaultRoute) params.hopLimit = getHopLimit(v6only.getInterfaceName());
            if (params.hasDefaultRoute) params.hopLimit = getHopLimit(v6only.getInterfaceName());