summaryrefslogtreecommitdiffstats
path: root/clatd.c
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2014-10-09 22:29:45 +0900
committerLorenzo Colitti <lorenzo@google.com>2014-10-28 15:30:45 +0900
commit9808952bdf2fa6ce4cbd790d1967691bb95bf327 (patch)
treea8d6d5b896805560ac662eee1c5790d14b863c88 /clatd.c
parent74151e9d0cda83f77d9dbce62bf8a1340cb08386 (diff)
downloadplatform_external_android-clat-9808952bdf2fa6ce4cbd790d1967691bb95bf327.tar.gz
platform_external_android-clat-9808952bdf2fa6ce4cbd790d1967691bb95bf327.tar.bz2
platform_external_android-clat-9808952bdf2fa6ce4cbd790d1967691bb95bf327.zip
Generate a random IID if one is not specified.
- Add code to generate a random IPv6 address that's checksum-neutral with the NAT64 prefix and clat IPv4 address. - Only calculate the IP address after the NAT64 prefix is known. - Because the clat IPv6 address is no longer determinisitic, modify interface_poll so it checks whether the prefix has changed instead of checking whether the IPv6 address has changed. - Add/update unit tests. Change-Id: Ia53716ca5315ebdd0eaa3ad3a07552bf18e9dd5c
Diffstat (limited to 'clatd.c')
-rw-r--r--clatd.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/clatd.c b/clatd.c
index dbf725b..4b6b8cc 100644
--- a/clatd.c
+++ b/clatd.c
@@ -164,16 +164,16 @@ void interface_poll(const struct tun_data *tunnel) {
return;
}
- config_generate_local_ipv6_subnet(&interface_ip->ip6);
+ if(!ipv6_prefix_equal(&interface_ip->ip6, &Global_Clatd_Config.ipv6_local_subnet)) {
+ config_generate_local_ipv6_subnet(&interface_ip->ip6);
- if(!IN6_ARE_ADDR_EQUAL(&interface_ip->ip6, &Global_Clatd_Config.ipv6_local_subnet)) {
char from_addr[INET6_ADDRSTRLEN], to_addr[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &Global_Clatd_Config.ipv6_local_subnet, from_addr, sizeof(from_addr));
inet_ntop(AF_INET6, &interface_ip->ip6, to_addr, sizeof(to_addr));
- logmsg(ANDROID_LOG_WARN, "clat subnet changed from %s to %s", from_addr, to_addr);
+ logmsg(ANDROID_LOG_WARN, "clat IPv6 address changed from %s to %s", from_addr, to_addr);
// Start translating packets to the new prefix.
- memcpy(&Global_Clatd_Config.ipv6_local_subnet, &interface_ip->ip6, sizeof(struct in6_addr));
+ Global_Clatd_Config.ipv6_local_subnet = interface_ip->ip6;
// Update our packet socket filter to reflect the new 464xlat IP address.
if (!configure_packet_socket(tunnel->read_fd6)) {