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);