diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-09-27 22:25:05 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-09-27 22:25:05 +0000 |
commit | 64732cdb0d95320d9274b26fcac6e617d6473248 (patch) | |
tree | a21c273a37f4f210dd577a30e746d6269db75ccf /src/tun | |
parent | 94adb0e8c48d47e13e7319bb0fe228263b15abbf (diff) | |
download | gnunet-64732cdb0d95320d9274b26fcac6e617d6473248.tar.gz gnunet-64732cdb0d95320d9274b26fcac6e617d6473248.zip |
fixes relating to intercepting DNS queries over IPv6
Diffstat (limited to 'src/tun')
-rw-r--r-- | src/tun/tun.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/tun/tun.c b/src/tun/tun.c index f39b1898b..b55de1ea9 100644 --- a/src/tun/tun.c +++ b/src/tun/tun.c | |||
@@ -70,7 +70,7 @@ GNUNET_TUN_initialize_ipv4_header (struct GNUNET_TUN_IPv4Header *ip, | |||
70 | * | 70 | * |
71 | * @param ip header to initialize | 71 | * @param ip header to initialize |
72 | * @param protocol protocol to use (i.e. IPPROTO_UDP), technically "next_header" for IPv6 | 72 | * @param protocol protocol to use (i.e. IPPROTO_UDP), technically "next_header" for IPv6 |
73 | * @param payload_length number of bytes of payload that follow (excluding IPv4 header) | 73 | * @param payload_length number of bytes of payload that follow (excluding IPv6 header) |
74 | * @param src source IP address to use | 74 | * @param src source IP address to use |
75 | * @param dst destination IP address to use | 75 | * @param dst destination IP address to use |
76 | */ | 76 | */ |
@@ -268,4 +268,44 @@ GNUNET_TUN_calculate_icmp_checksum (struct GNUNET_TUN_IcmpHeader *icmp, | |||
268 | } | 268 | } |
269 | 269 | ||
270 | 270 | ||
271 | /** | ||
272 | * Check if two sockaddrs are equal. | ||
273 | * | ||
274 | * @param sa one address | ||
275 | * @param sb another address | ||
276 | * @param include_port also check ports | ||
277 | * @return #GNUNET_YES if they are equal | ||
278 | */ | ||
279 | int | ||
280 | GNUNET_TUN_sockaddr_cmp (const struct sockaddr *sa, | ||
281 | const struct sockaddr *sb, | ||
282 | int include_port) | ||
283 | { | ||
284 | if (sa->sa_family != sb->sa_family) | ||
285 | return GNUNET_NO; | ||
286 | |||
287 | switch (sa->sa_family) | ||
288 | { | ||
289 | case AF_INET: | ||
290 | { | ||
291 | const struct sockaddr_in *sa4 = (const struct sockaddr_in *) sa; | ||
292 | const struct sockaddr_in *sb4 = (const struct sockaddr_in *) sb; | ||
293 | return (sa4->sin_addr.s_addr == sb4->sin_addr.s_addr); | ||
294 | } | ||
295 | case AF_INET6: | ||
296 | { | ||
297 | const struct sockaddr_in6 *sa6 = (const struct sockaddr_in6 *) sa; | ||
298 | const struct sockaddr_in6 *sb6 = (const struct sockaddr_in6 *) sb; | ||
299 | |||
300 | return (0 == memcmp(&sa6->sin6_addr, | ||
301 | &sb6->sin6_addr, | ||
302 | sizeof (struct in6_addr))); | ||
303 | } | ||
304 | default: | ||
305 | GNUNET_break (0); | ||
306 | return GNUNET_SYSERR; | ||
307 | } | ||
308 | } | ||
309 | |||
310 | |||
271 | /* end of tun.c */ | 311 | /* end of tun.c */ |