aboutsummaryrefslogtreecommitdiff
path: root/src/tun
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-09-27 22:25:05 +0000
committerChristian Grothoff <christian@grothoff.org>2016-09-27 22:25:05 +0000
commit64732cdb0d95320d9274b26fcac6e617d6473248 (patch)
treea21c273a37f4f210dd577a30e746d6269db75ccf /src/tun
parent94adb0e8c48d47e13e7319bb0fe228263b15abbf (diff)
downloadgnunet-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.c42
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 */
279int
280GNUNET_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 */