Derive mtu from ipv6 route to ipv4 /96 prefix instead of device

Test: builds, atest, still needs testing on real network
  x86 clatd_test
  --------------
  clatd_test (19 Tests)
  ...
  [6/19] ClatdTest#DetectMtu: PASSED (0ms)
  ...
Bug: 147935930
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I3d11ba082dabf70089867146acd84f6436953663
diff --git a/clatd_test.cpp b/clatd_test.cpp
index f01f49d..08b444c 100644
--- a/clatd_test.cpp
+++ b/clatd_test.cpp
@@ -772,12 +772,16 @@
   EXPECT_EQ(inet_addr("127.0.0.2"), config_select_ipv4_address(&addr, 29));
 }
 
+TEST_F(ClatdTest, DetectMtu) {
+  // ::1 with bottom 32 bits set to 1 is still ::1 which routes via lo with mtu of 64KiB
+  ASSERT_EQ(detect_mtu(&in6addr_loopback, htonl(1), 0 /*MARK_UNSET*/), 65536);
+}
+
 TEST_F(ClatdTest, ConfigureTunIp) {
   addr_free_func orig_config_is_ipv4_address_free = config_is_ipv4_address_free;
   config_is_ipv4_address_free                     = over6_free;
 
   Global_Clatd_Config.ipv4_local_prefixlen = 29;
-  Global_Clatd_Config.ipv4mtu              = 1472;
 
   // Create an interface for configure_tun_ip to configure and bring up.
   TunInterface v4Iface;
@@ -785,7 +789,7 @@
   struct tun_data tunnel = makeTunData();
   strlcpy(tunnel.device4, v4Iface.name().c_str(), sizeof(tunnel.device4));
 
-  configure_tun_ip(&tunnel, nullptr /* v4_addr */);
+  configure_tun_ip(&tunnel, nullptr /* v4_addr */, 1472);
   EXPECT_EQ(inet_addr("192.0.0.6"), Global_Clatd_Config.ipv4_local_subnet.s_addr);
 
   union anyip *ip = getinterface_ip(v4Iface.name().c_str(), AF_INET);
@@ -801,7 +805,6 @@
   config_is_ipv4_address_free                     = over6_free;
 
   Global_Clatd_Config.ipv4_local_prefixlen = 29;
-  Global_Clatd_Config.ipv4mtu              = 1472;
 
   // Create an interface for configure_tun_ip to configure and bring up.
   TunInterface v4Iface;
@@ -809,7 +812,7 @@
   struct tun_data tunnel = makeTunData();
   strlcpy(tunnel.device4, v4Iface.name().c_str(), sizeof(tunnel.device4));
 
-  configure_tun_ip(&tunnel, "192.0.2.1" /* v4_addr */);
+  configure_tun_ip(&tunnel, "192.0.2.1" /* v4_addr */, 1472);
   EXPECT_EQ(inet_addr("192.0.2.1"), Global_Clatd_Config.ipv4_local_subnet.s_addr);
 
   union anyip *ip = getinterface_ip(v4Iface.name().c_str(), AF_INET);