diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2014-10-09 22:29:45 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2014-10-28 15:30:45 +0900 |
commit | 9808952bdf2fa6ce4cbd790d1967691bb95bf327 (patch) | |
tree | a8d6d5b896805560ac662eee1c5790d14b863c88 /clatd.c | |
parent | 74151e9d0cda83f77d9dbce62bf8a1340cb08386 (diff) | |
download | android_external_android-clat-9808952bdf2fa6ce4cbd790d1967691bb95bf327.tar.gz android_external_android-clat-9808952bdf2fa6ce4cbd790d1967691bb95bf327.tar.bz2 android_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.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -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)) { |