summaryrefslogtreecommitdiff
path: root/sdk/recipes/patches/libcares/ppc-amigaos/ipv6-support.p
blob: f34fb4593aa307d4c395e9511acb0f6da5b8e1b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
--- src/lib/ares_ipv6.h.orig	2017-10-10 15:19:45.611896396 +0100
+++ src/lib/ares_ipv6.h	2017-10-17 15:42:25.304921197 +0100
@@ -32,6 +32,11 @@
 #endif
 
+#ifndef INET6_ADDRSTRLEN
+#define INET6_ADDRSTRLEN 46
+#endif
+
 #ifndef HAVE_STRUCT_SOCKADDR_IN6
+#define s6_addr _S6_un._S6_u8
 struct sockaddr_in6 {
   unsigned short       sin6_family;
   unsigned short       sin6_port;
--- src/lib/ares__sortaddrinfo.c.orig	2017-10-10 15:19:45.611896396 +0100
+++ src/lib/ares__sortaddrinfo.c	2017-10-17 15:42:25.304921197 +0100
@@ -73,6 +73,39 @@
 #define ARES_IN_LOOPBACK(a) \
   ((((long unsigned int)(a)) & 0xff000000) == 0x7f000000)
 
+#ifndef IN6_IS_ADDR_LINKLOCAL
+#define IN6_IS_ADDR_LINKLOCAL(a) \
+	((((__const uint32_t *) (a))[0] & htonl (0xffc00000))		      \
+	 == htonl (0xfe800000))
+#endif
+#ifndef IN6_IS_ADDR_LOOPBACK
+#define IN6_IS_ADDR_LOOPBACK(a) \
+	(((__const uint32_t *) (a))[0] == 0				      \
+	 && ((__const uint32_t *) (a))[1] == 0				      \
+	 && ((__const uint32_t *) (a))[2] == 0				      \
+	 && ((__const uint32_t *) (a))[3] == htonl (1))
+#endif
+#ifndef IN6_IS_ADDR_MULTICAST
+#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff)
+#endif
+#ifndef IN6_IS_ADDR_SITELOCAL
+#define IN6_IS_ADDR_SITELOCAL(a) \
+	((((__const uint32_t *) (a))[0] & htonl (0xffc00000))		      \
+	 == htonl (0xfec00000))
+#endif
+#ifndef IN6_IS_ADDR_V4COMPAT
+#define IN6_IS_ADDR_V4COMPAT(a) \
+	((((__const uint32_t *) (a))[0] == 0)				      \
+	 && (((__const uint32_t *) (a))[1] == 0)			      \
+	 && (((__const uint32_t *) (a))[2] == 0)			      \
+	 && (ntohl (((__const uint32_t *) (a))[3]) > 1))
+#endif
+#ifndef IN6_IS_ADDR_V4MAPPED
+#define IN6_IS_ADDR_V4MAPPED(a) \
+	((((__const uint32_t *) (a))[0] == 0)				      \
+	 && (((__const uint32_t *) (a))[1] == 0)			      \
+	 && (((__const uint32_t *) (a))[2] == htonl (0xffff)))
+#endif
 /* RFC 4193. */
 #define ARES_IN6_IS_ADDR_ULA(a) (((a)->s6_addr[0] & 0xfe) == 0xfc)
 
@@ -205,8 +238,13 @@
 /*
  * Find number of matching initial bits between the two addresses a1 and a2.
  */
+#ifndef HAVE_STRUCT_SOCKADDR_IN6
+static size_t common_prefix_len(const struct ares_in6_addr *a1,
+                                const struct ares_in6_addr *a2)
+#else
 static size_t common_prefix_len(const struct in6_addr *a1,
                                 const struct in6_addr *a2)
+#endif
 {
   const unsigned char *p1 = (const unsigned char *)a1;
   const unsigned char *p2 = (const unsigned char *)a2;