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: Maciej Żenczykowski <maze@google.com> Change-Id: I646148ebfd978a2489c0cd065e4b671b01150add
This commit is contained in:
@@ -541,7 +541,12 @@ public class IpServer extends StateMachine {
|
||||
|
||||
if (v6only != null) {
|
||||
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();
|
||||
|
||||
if (params.hasDefaultRoute) params.hopLimit = getHopLimit(v6only.getInterfaceName());
|
||||
|
||||
Reference in New Issue
Block a user