[RFCLAT#4] Move clat ipv6 address setup from clatd to netd
This is a preparation for reducing the clatd required capability.
Function change:
- configure_clat_ipv6_address(), configure_interface(),
configure_packet_socket() are moved to netd/ClatdController
- move the follows to main() because previous functions are removed.
setup Global_Clatd_Config.native_ipv6_interface
setup Global_Clatd_Config.plat_subnet
setup Global_Clatd_Config.ipv6_local_subnet
Bug: 212345928
Test: manual test
1. Connect to ipv6-only wifi.
2. Try IPv4 traffic.
$ ping 8.8.8.8
Change-Id: I8457b7752a799756549a72296aae572ad73ff653
diff --git a/main.c b/main.c
index fe88dfd..ef5e3ab 100644
--- a/main.c
+++ b/main.c
@@ -145,18 +145,27 @@
exit(1);
}
+ Global_Clatd_Config.native_ipv6_interface = uplink_interface;
+ if (!plat_prefix || inet_pton(AF_INET6, plat_prefix, &Global_Clatd_Config.plat_subnet) <= 0) {
+ logmsg(ANDROID_LOG_FATAL, "invalid IPv6 address specified for plat prefix: %s", plat_prefix);
+ exit(1);
+ }
+
if (!v4_addr || !inet_pton(AF_INET, v4_addr, &Global_Clatd_Config.ipv4_local_subnet.s_addr)) {
logmsg(ANDROID_LOG_FATAL, "Invalid IPv4 address %s", v4_addr);
exit(1);
}
+ if (!v6_addr || !inet_pton(AF_INET6, v6_addr, &Global_Clatd_Config.ipv6_local_subnet)) {
+ logmsg(ANDROID_LOG_FATAL, "Invalid source address %s", v6_addr);
+ exit(1);
+ }
+
logmsg(ANDROID_LOG_INFO, "Starting clat version %s on %s mark=%s plat=%s v4=%s v6=%s",
CLATD_VERSION, uplink_interface, mark_str ? mark_str : "(none)",
plat_prefix ? plat_prefix : "(none)", v4_addr ? v4_addr : "(none)",
v6_addr ? v6_addr : "(none)");
- configure_interface(uplink_interface, plat_prefix, v6_addr, &tunnel);
-
// run under a regular user with no capabilities
drop_root_and_caps();