diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2013-04-10 12:24:56 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2013-04-12 13:42:58 +0900 |
commit | cd70b354eb985678175904a937085bed6094af77 (patch) | |
tree | 0a3664daec00a5a608f851a4f8e767cd5c072d3d /clatd.c | |
parent | ee80ca65907d214e2483e315a1ba7f610184de03 (diff) | |
download | android_external_android-clat-cd70b354eb985678175904a937085bed6094af77.tar.gz android_external_android-clat-cd70b354eb985678175904a937085bed6094af77.tar.bz2 android_external_android-clat-cd70b354eb985678175904a937085bed6094af77.zip |
Support translating ICMP errors.
When receiving ICMPv6 messages from IPv6-only nodes, use
255.0.0.<ttl> as a fake IPv4 source address. It's better than
nothing.
Bug: 8276725
Change-Id: Iae93f75764cb9cd875af9bb5f1862a0dce2c2fa7
Diffstat (limited to 'clatd.c')
-rw-r--r-- | clatd.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -317,12 +317,16 @@ void packet_handler(const struct tun_data *tunnel, struct tun_pi *tun_header, co struct tun_pi tun_targ; char iphdr[sizeof(struct ip6_hdr)]; char transporthdr[MAX_TCP_HDR]; + char icmp_iphdr[sizeof(struct ip6_hdr)]; + char icmp_transporthdr[MAX_TCP_HDR]; // iovec of the packets we'll send. This gets passed down to the translation functions. clat_packet out = { { &tun_targ, sizeof(tun_targ) }, // Tunnel header. { iphdr, 0 }, // IP header. { transporthdr, 0 }, // Transport layer header. + { icmp_iphdr, 0 }, // ICMP error inner IP header. + { icmp_transporthdr, 0 }, // ICMP error transport layer header. { NULL, 0 }, // Payload. No buffer, it's a pointer to the original payload. }; |