From 842142c16d03cb47f712bc396e28d56ee33e589e Mon Sep 17 00:00:00 2001
From: Avery Pennarun <apenwarr@gmail.com>
Date: Wed, 9 Apr 2014 01:38:08 -0400
Subject: [PATCH] sntpclock: add IPv6 support.

---
 sntpclock.c | 49 ++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 36 insertions(+), 13 deletions(-)

diff --git a/sntpclock.c b/sntpclock.c
index 5680e05..63c5644 100644
--- a/sntpclock.c
+++ b/sntpclock.c
@@ -1,3 +1,4 @@
+#include <arpa/inet.h>
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/param.h>
@@ -92,7 +93,11 @@ void die_usage()
 
 char *host;
 struct ip_address ipremote;
+struct in6_addr ip6remote;
 struct sockaddr_in sa;
+struct sockaddr_in6 sa6;
+struct sockaddr *sap;
+socklen_t sap_len;
 int s;
 
 unsigned char query[48];
@@ -143,18 +148,36 @@ char **argv;
   host = argv[1];
   if (!host) die_usage();
   if (!str_diff(host,"0")) host = "127.0.0.1";
-  if (host[ip_scan(host,&ipremote)]) die_usage();
-
-  s = socket(AF_INET,SOCK_DGRAM,0);
-  if (s == -1)
-    strerr_die2sys(111,FATAL,"unable to create socket: ");
-
-  byte_zero(&sa,sizeof(sa));
-  byte_copy(&sa.sin_addr,4,&ipremote);
-  x = (char *) &sa.sin_port;
-  x[0] = 0;
-  x[1] = 123; /* NTP */
-  sa.sin_family = AF_INET;
+  if (inet_pton(AF_INET6, host, &ip6remote)) {
+    s = socket(AF_INET6,SOCK_DGRAM,0);
+    if (s == -1)
+      strerr_die2sys(111,FATAL,"unable to create socket6: ");
+
+    byte_zero(&sa6,sizeof(sa6));
+    byte_copy(&sa6.sin6_addr,16,&ip6remote);
+    x = (char *) &sa6.sin6_port;
+    x[0] = 0;
+    x[1] = 123; /* NTP */
+    sa6.sin6_family = AF_INET6;
+    sap = (struct sockaddr *)&sa6;
+    sap_len = sizeof(sa6);
+  } else if (!host[ip_scan(host,&ipremote)]) {
+    s = socket(AF_INET,SOCK_DGRAM,0);
+    if (s == -1)
+      strerr_die2sys(111,FATAL,"unable to create socket: ");
+
+    byte_zero(&sa,sizeof(sa));
+    byte_copy(&sa.sin_addr,4,&ipremote);
+    x = (char *) &sa.sin_port;
+    x[0] = 0;
+    x[1] = 123; /* NTP */
+    sa.sin_family = AF_INET;
+    sap = (struct sockaddr *)&sa;
+    sap_len = sizeof(sa);
+  } else {
+    strerr_die2sys(111,FATAL, "foooo!");
+    die_usage();
+  }
 
   for (loop = 0;loop < 10;++loop) {
     byte_zero(query,sizeof query);
@@ -175,7 +198,7 @@ char **argv;
     query[46] = u;
   
     taia_now(&ta0);
-    if (sendto(s,query,sizeof query,0,(struct sockaddr *) &sa,sizeof sa) == -1)
+    if (sendto(s,query,sizeof query,0,sap,sap_len) == -1)
       strerr_die2sys(111,FATAL,"unable to send request: ");
     FD_ZERO(&rfds);
     FD_SET(s,&rfds);
-- 
1.9.1.423.g4596e3a

