aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/utils/iputils/patches/010-ping6_uclibc_resolv.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/utils/iputils/patches/010-ping6_uclibc_resolv.patch')
-rw-r--r--package/network/utils/iputils/patches/010-ping6_uclibc_resolv.patch200
1 files changed, 200 insertions, 0 deletions
diff --git a/package/network/utils/iputils/patches/010-ping6_uclibc_resolv.patch b/package/network/utils/iputils/patches/010-ping6_uclibc_resolv.patch
new file mode 100644
index 0000000..6955803
--- /dev/null
+++ b/package/network/utils/iputils/patches/010-ping6_uclibc_resolv.patch
@@ -0,0 +1,200 @@
+diff --git a/ping6.c b/ping6.c
+index c5ff881..ef2243f 100644
+--- a/ping6.c
++++ b/ping6.c
+@@ -71,9 +71,11 @@ char copyright[] =
+ #include <linux/filter.h>
+ #include <netinet/ip6.h>
+ #include <netinet/icmp6.h>
++#ifndef __UCLIBC__
+ #include <resolv.h>
+
+ #include "ping6_niquery.h"
++#endif /* __UCLIBC__ */
+
+ #ifndef SOL_IPV6
+ #define SOL_IPV6 IPPROTO_IPV6
+@@ -154,6 +156,7 @@ int pmtudisc=-1;
+
+ static int icmp_sock;
+
++#ifndef __UCLIBC__
+ #include <openssl/md5.h>
+
+ /* Node Information query */
+@@ -165,6 +168,7 @@ int ni_subject_type = 0;
+ char *ni_group;
+
+ __u8 ni_nonce[8];
++#endif /* __UCLIBC__ */
+
+ static struct in6_addr in6_anyaddr;
+ static __inline__ int ipv6_addr_any(struct in6_addr *addr)
+@@ -223,6 +227,7 @@ unsigned int if_name2index(const char *ifname)
+ return i;
+ }
+
++#ifndef __UCLIBC__
+ struct niquery_option {
+ char *name;
+ int namelen;
+@@ -512,6 +517,7 @@ char *ni_groupaddr(const char *name)
+ strcat(nigroup_buf, q);
+ return nigroup_buf;
+ }
++#endif /* __UCLIBC__ */
+
+ int main(int argc, char *argv[])
+ {
+@@ -595,12 +601,14 @@ int main(int argc, char *argv[])
+ case 'V':
+ printf("ping6 utility, iputils-ss%s\n", SNAPSHOT);
+ exit(0);
++#ifndef __UCLIBC__
+ case 'N':
+ if (niquery_option_handler(optarg) < 0) {
+ usage();
+ break;
+ }
+ break;
++#endif /* __UCLIBC__ */
+ COMMON_OPTIONS
+ common_options(ch);
+ break;
+@@ -663,6 +671,7 @@ int main(int argc, char *argv[])
+ argc--;
+ }
+
++#ifndef __UCLIBC__
+ if (ni_query >= 0) {
+ int i;
+ for (i = 0; i < 8; i++)
+@@ -674,15 +683,20 @@ int main(int argc, char *argv[])
+ ni_subject_type = NI_SUBJ_IPV6;
+ }
+ }
++#endif /* __UCLIBC__ */
+
+ if (argc > 1)
+ usage();
+ else if (argc == 1) {
+ target = *argv;
+ } else {
++#ifndef __UCLIBC__
+ if (ni_query < 0 && ni_subject_type != NI_SUBJ_NAME)
++#endif /* __UCLIBC__ */
+ usage();
++#ifndef __UCLIBC__
+ target = ni_group;
++#endif /* __UCLIBC__ */
+ }
+
+ memset(&hints, 0, sizeof(hints));
+@@ -817,7 +831,11 @@ int main(int argc, char *argv[])
+ exit(2);
+ }
+
++#ifndef __UCLIBC__
+ if (datalen >= sizeof(struct timeval) && (ni_query < 0)) {
++#else
++ if (datalen >= sizeof(struct timeval)) {
++#endif /* __UCLIBC__ */
+ /* can we time transfer */
+ timing = 1;
+ }
+@@ -866,9 +884,11 @@ int main(int argc, char *argv[])
+ ICMP6_FILTER_SETPASS(ICMP6_PARAM_PROB, &filter);
+ }
+
++#ifndef __UCLIBC__
+ if (ni_query >= 0)
+ ICMP6_FILTER_SETPASS(ICMPV6_NI_REPLY, &filter);
+ else
++#endif /* __UCLIBC__ */
+ ICMP6_FILTER_SETPASS(ICMP6_ECHO_REPLY, &filter);
+
+ err = setsockopt(icmp_sock, IPPROTO_ICMPV6, ICMP6_FILTER, &filter,
+@@ -1100,6 +1120,7 @@ int build_echo(__u8 *_icmph)
+ return cc;
+ }
+
++#ifndef __UCLIBC__
+ int build_niquery(__u8 *_nih)
+ {
+ struct ni_hdr *nih;
+@@ -1125,6 +1146,7 @@ int build_niquery(__u8 *_nih)
+
+ return cc;
+ }
++#endif /* __UCLIBC__ */
+
+ int send_probe(void)
+ {
+@@ -1132,9 +1154,11 @@ int send_probe(void)
+
+ CLR((ntransmitted+1) % mx_dup_ck);
+
++#ifndef __UCLIBC__
+ if (ni_query >= 0)
+ len = build_niquery(outpack);
+ else
++#endif /* __UCLIBC__ */
+ len = build_echo(outpack);
+
+ if (cmsglen == 0) {
+@@ -1176,6 +1200,7 @@ static void putchar_safe(char c)
+ printf("\\%03o", c);
+ }
+
++#ifndef __UCLIBC__
+ void pr_niquery_reply_name(struct ni_hdr *nih, int len)
+ {
+ __u8 *h = (__u8 *)(nih + 1);
+@@ -1304,6 +1329,7 @@ void pr_niquery_reply(__u8 *_nih, int len)
+ }
+ putchar(';');
+ }
++#endif /* __UCLIBC__ */
+
+ /*
+ * parse_reply --
+@@ -1353,6 +1379,7 @@ parse_reply(struct msghdr *msg, int cc, void *addr, struct timeval *tv)
+ hops, 0, tv, pr_addr(&from->sin6_addr),
+ pr_echo_reply))
+ return 0;
++#ifndef __UCLIBC__
+ } else if (icmph->icmp6_type == ICMPV6_NI_REPLY) {
+ struct ni_hdr *nih = (struct ni_hdr *)icmph;
+ __u16 seq = ntohs(*(__u16 *)nih->ni_nonce);
+@@ -1363,6 +1390,7 @@ parse_reply(struct msghdr *msg, int cc, void *addr, struct timeval *tv)
+ hops, 0, tv, pr_addr(&from->sin6_addr),
+ pr_niquery_reply))
+ return 0;
++#endif /* __UCLIBC__ */
+ } else {
+ int nexthdr;
+ struct ip6_hdr *iph1 = (struct ip6_hdr*)(icmph+1);
+@@ -1557,7 +1585,9 @@ void usage(void)
+ "Usage: ping6 [-LUdfnqrvVaAD] [-c count] [-i interval] [-w deadline]\n"
+ " [-p pattern] [-s packetsize] [-t ttl] [-I interface]\n"
+ " [-M pmtudisc-hint] [-S sndbuf] [-F flowlabel] [-Q tclass]\n"
++#ifndef __UCLIBC__
+ " [[-N nodeinfo-option] ...]\n"
++#endif /* __UCLIBC__ */
+ " [hop1 ...] destination\n");
+ exit(2);
+ }
+diff --git a/ping6_niquery.h b/ping6_niquery.h
+index 61a5cfa..34c31f8 100644
+--- a/ping6_niquery.h
++++ b/ping6_niquery.h
+@@ -1,3 +1,4 @@
++#ifndef __UCLIBC__
+ #include <asm/byteorder.h>
+
+ /* Node Information Query */
+@@ -45,3 +46,4 @@ struct ni_hdr {
+ #define NI_IPV4ADDR_F_TRUNCATE NI_IPV6ADDR_F_TRUNCATE
+ #define NI_IPV4ADDR_F_ALL NI_IPV6ADDR_F_ALL
+
++#endif /* __UCLIBC__ */