Browse Source

Plan 9 from Bell Labs 2007-07-25

David du Colombier 16 years ago
parent
commit
d4469d9bed

+ 11 - 7
dist/replica/_plan9.db

@@ -7803,7 +7803,7 @@ sys/man/8/mkpaqfs - 664 sys sys 1181261121 890
 sys/man/8/mksacfs - 664 sys sys 964886843 710
 sys/man/8/mouse - 664 sys sys 971455511 2476
 sys/man/8/na - 664 sys sys 958527089 859
-sys/man/8/ndb - 664 sys sys 1184303541 13255
+sys/man/8/ndb - 664 sys sys 1185315934 13539
 sys/man/8/newuser - 664 sys sys 1116954242 2418
 sys/man/8/nfsserver - 664 sys sys 1163208425 3587
 sys/man/8/pcmcia - 664 sys sys 944959679 408
@@ -7982,7 +7982,7 @@ sys/src/9/ip/nullmedium.c - 664 sys sys 1086406910 492
 sys/src/9/ip/pktmedium.c - 664 sys sys 1084331746 1314
 sys/src/9/ip/ptclbsum.c - 664 sys sys 1022588099 1243
 sys/src/9/ip/rudp.c - 664 sys sys 1184946959 21529
-sys/src/9/ip/tcp.c - 664 sys sys 1184471371 65911
+sys/src/9/ip/tcp.c - 664 sys sys 1185283974 65958
 sys/src/9/ip/tripmedium.c - 664 sys sys 1045063515 7136
 sys/src/9/ip/udp.c - 664 sys sys 1184946959 13316
 sys/src/9/mkfile - 664 sys sys 1063857477 205
@@ -12820,16 +12820,16 @@ sys/src/cmd/ndb/convDNS2M.c - 664 sys sys 1182554015 7035
 sys/src/cmd/ndb/convM2DNS.c - 664 sys sys 1183866367 11830
 sys/src/cmd/ndb/cs.c - 664 sys sys 1184303534 32981
 sys/src/cmd/ndb/csquery.c - 664 sys sys 1174626119 1073
-sys/src/cmd/ndb/dblookup.c - 664 sys sys 1184990885 22626
-sys/src/cmd/ndb/dn.c - 664 sys sys 1184990893 36087
+sys/src/cmd/ndb/dblookup.c - 664 sys sys 1185315186 24885
+sys/src/cmd/ndb/dn.c - 664 sys sys 1185315217 36335
 sys/src/cmd/ndb/dnarea.c - 664 sys sys 1175664421 2519
 sys/src/cmd/ndb/dnnotify.c - 664 sys sys 1183866408 3217
 sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1184990924 34536
 sys/src/cmd/ndb/dns.c - 664 sys sys 1183750507 16257
-sys/src/cmd/ndb/dns.h - 664 sys sys 1184990871 11692
-sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1184990937 8766
+sys/src/cmd/ndb/dns.h - 664 sys sys 1185315217 11703
+sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1185315248 8805
 sys/src/cmd/ndb/dnserver.c - 664 sys sys 1184990866 4627
-sys/src/cmd/ndb/dnsquery.c - 664 sys sys 1174626126 2435
+sys/src/cmd/ndb/dnsquery.c - 664 sys sys 1185315254 2507
 sys/src/cmd/ndb/dnstcp.c - 664 sys sys 1183184439 7440
 sys/src/cmd/ndb/dnudpserver.c - 664 sys sys 1183750487 5470
 sys/src/cmd/ndb/ipquery.c - 664 sys sys 1124711423 773
@@ -15841,3 +15841,7 @@ usr/glenda/lib/profile - 664 glenda glenda 1105128663 890
 usr/glenda/readme.acme - 664 glenda glenda 1019860628 4753
 usr/glenda/readme.rio - 664 glenda glenda 1019860628 6370
 usr/glenda/tmp - 20000000775 glenda glenda 1018802620 0
+386/bin/ndb/dns - 775 sys sys 1185334135 293921
+386/bin/ndb/dnsdebug - 775 sys sys 1185334136 269375
+386/bin/ndb/dnsquery - 775 sys sys 1185334136 64350
+386/bin/ndb/dnstcp - 775 sys sys 1185334137 267228

+ 11 - 11
dist/replica/plan9.db

@@ -342,10 +342,10 @@
 386/bin/ndb - 20000000775 sys sys 985743147 0
 386/bin/ndb/cs - 775 sys sys 1184529902 149014
 386/bin/ndb/csquery - 775 sys sys 1176488418 61652
-386/bin/ndb/dns - 775 sys sys 1185048646 291749
-386/bin/ndb/dnsdebug - 775 sys sys 1185048647 266617
-386/bin/ndb/dnsquery - 775 sys sys 1174704818 64417
-386/bin/ndb/dnstcp - 775 sys sys 1185048648 265056
+386/bin/ndb/dns - 775 sys sys 1185334135 293921
+386/bin/ndb/dnsdebug - 775 sys sys 1185334136 269375
+386/bin/ndb/dnsquery - 775 sys sys 1185334136 64350
+386/bin/ndb/dnstcp - 775 sys sys 1185334137 267228
 386/bin/ndb/ipquery - 775 sys sys 1178568296 95524
 386/bin/ndb/mkdb - 775 sys sys 1168402340 64211
 386/bin/ndb/mkhash - 775 sys sys 1178568296 83312
@@ -7803,7 +7803,7 @@ sys/man/8/mkpaqfs - 664 sys sys 1181261121 890
 sys/man/8/mksacfs - 664 sys sys 964886843 710
 sys/man/8/mouse - 664 sys sys 971455511 2476
 sys/man/8/na - 664 sys sys 958527089 859
-sys/man/8/ndb - 664 sys sys 1184303541 13255
+sys/man/8/ndb - 664 sys sys 1185315934 13539
 sys/man/8/newuser - 664 sys sys 1116954242 2418
 sys/man/8/nfsserver - 664 sys sys 1163208425 3587
 sys/man/8/pcmcia - 664 sys sys 944959679 408
@@ -7982,7 +7982,7 @@ sys/src/9/ip/nullmedium.c - 664 sys sys 1086406910 492
 sys/src/9/ip/pktmedium.c - 664 sys sys 1084331746 1314
 sys/src/9/ip/ptclbsum.c - 664 sys sys 1022588099 1243
 sys/src/9/ip/rudp.c - 664 sys sys 1184946959 21529
-sys/src/9/ip/tcp.c - 664 sys sys 1184471371 65911
+sys/src/9/ip/tcp.c - 664 sys sys 1185283974 65958
 sys/src/9/ip/tripmedium.c - 664 sys sys 1045063515 7136
 sys/src/9/ip/udp.c - 664 sys sys 1184946959 13316
 sys/src/9/mkfile - 664 sys sys 1063857477 205
@@ -12820,16 +12820,16 @@ sys/src/cmd/ndb/convDNS2M.c - 664 sys sys 1182554015 7035
 sys/src/cmd/ndb/convM2DNS.c - 664 sys sys 1183866367 11830
 sys/src/cmd/ndb/cs.c - 664 sys sys 1184303534 32981
 sys/src/cmd/ndb/csquery.c - 664 sys sys 1174626119 1073
-sys/src/cmd/ndb/dblookup.c - 664 sys sys 1184990885 22626
-sys/src/cmd/ndb/dn.c - 664 sys sys 1184990893 36087
+sys/src/cmd/ndb/dblookup.c - 664 sys sys 1185315186 24885
+sys/src/cmd/ndb/dn.c - 664 sys sys 1185315217 36335
 sys/src/cmd/ndb/dnarea.c - 664 sys sys 1175664421 2519
 sys/src/cmd/ndb/dnnotify.c - 664 sys sys 1183866408 3217
 sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1184990924 34536
 sys/src/cmd/ndb/dns.c - 664 sys sys 1183750507 16257
-sys/src/cmd/ndb/dns.h - 664 sys sys 1184990871 11692
-sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1184990937 8766
+sys/src/cmd/ndb/dns.h - 664 sys sys 1185315217 11703
+sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1185315248 8805
 sys/src/cmd/ndb/dnserver.c - 664 sys sys 1184990866 4627
-sys/src/cmd/ndb/dnsquery.c - 664 sys sys 1174626126 2435
+sys/src/cmd/ndb/dnsquery.c - 664 sys sys 1185315254 2507
 sys/src/cmd/ndb/dnstcp.c - 664 sys sys 1183184439 7440
 sys/src/cmd/ndb/dnudpserver.c - 664 sys sys 1183750487 5470
 sys/src/cmd/ndb/ipquery.c - 664 sys sys 1124711423 773

+ 11 - 0
dist/replica/plan9.log

@@ -49660,3 +49660,14 @@
 1185067804 2 c sys/src/cmd/rx.c - 664 sys sys 1185066370 4411
 1185213604 0 c sys/src/cmd/ip/ipconfig/ipv6.c - 664 sys sys 1185212228 19732
 1185220805 0 c 386/bin/ip/ipconfig - 775 sys sys 1185220569 157387
+1185285604 0 c sys/src/9/ip/tcp.c - 664 sys sys 1185283974 65958
+1185316204 0 c sys/man/8/ndb - 664 sys sys 1185315934 13539
+1185316204 1 c sys/src/cmd/ndb/dblookup.c - 664 sys sys 1185315186 24885
+1185316204 2 c sys/src/cmd/ndb/dn.c - 664 sys sys 1185315217 36335
+1185316204 3 c sys/src/cmd/ndb/dns.h - 664 sys sys 1185315217 11703
+1185316204 4 c sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1185315248 8805
+1185316204 5 c sys/src/cmd/ndb/dnsquery.c - 664 sys sys 1185315254 2507
+1185334203 0 c 386/bin/ndb/dns - 775 sys sys 1185334135 293921
+1185334203 1 c 386/bin/ndb/dnsdebug - 775 sys sys 1185334136 269375
+1185334203 2 c 386/bin/ndb/dnsquery - 775 sys sys 1185334136 64350
+1185334203 3 c 386/bin/ndb/dnstcp - 775 sys sys 1185334137 267228

+ 26 - 7
sys/man/8/ndb

@@ -394,28 +394,44 @@ when the domain changes.  The notification also requires
 the
 .B -n
 flag.
+.
 .SS "Reverse Domains"
 You can also serve reverse lookups (returning the name that
 goes with an IP address) by adding an
 .B soa=
 attribute to the entry defining the root of the reverse space.
+.PP
 For example, to provide reverse lookup for all addresses in
-starting with 135.104 you must have a record like:
+starting with
+.L 135.104
+or
+.LR fd00:: ,
+.I ndb
+must contain a record like:
 .IP
 .EX
 dom=104.135.in-addr.arpa soa=
+	dom=d.f.ip6.arpa soa=	# special case, rfc 4193
 	refresh=3600 ttl=3600
 	ns=plan9.bell-labs.com
 	ns=ns1.cs.bell-labs.com
 	ns=ns2.cs.bell-labs.com
 .EE
 .LP
-Notice the form of the reverse address, i.e., it's the bytes of the
-address range you are serving reversed and with
-.B .in-addr.arpa
-appended.  This is a standard form for a domain name in an IPv4 PTR record.
+Notice the form of the reverse address.
+For IPv4, it's the bytes of the address range you are serving reversed
+and expressed in decimal, and with
+.L .in-addr.arpa
+appended.
+For IPv6, it's the nibbles (4-bit fields) of the address range you are serving
+reversed and expressed in hexadecimal, and with
+.L .ip6.arpa
+appended.
+These are the standard forms for a domain name in a PTR record.
 .PP
-If such an entry exists in the database, reverse addresses will
+If such an
+.B soa
+entry exists in the database, reverse addresses will
 automatically be generated from any IP addresses in the database
 that are under this root.  For example
 .IP
@@ -427,6 +443,7 @@ will automatically create both forward and reverse entries for
 .B ns1.cs.bell-labs.com .
 Unlike other DNS servers, there's no way to generate
 inconsistent forward and reverse entries.
+.
 .SS "Delegating Name Service Authority"
 Delegation of a further subtree to another set of name servers
 is indicated by an
@@ -444,6 +461,7 @@ Nameservers within the delegated domain (as in this example)
 must have their IP addresses listed elsewhere in
 .I ndb
 files.
+.
 .SS "Wildcards, MX and CNAME records"
 Wild-carded domain names can also be used.
 For example, to specify a mail forwarder for all Bell Labs research systems:
@@ -536,6 +554,7 @@ where
 .I request-type
 can be
 .BR ip ,
+.BR ipv6 ,
 .BR mx ,
 .BR ns ,
 .BR cname ,
@@ -545,7 +564,7 @@ In the case of the inverse query type,
 .I dnsquery
 will reverse the ip address and tack on the
 .B .in-addr.arpa
-for you.
+if necessary.
 .PP
 .I Ndb/dnsdebug
 is like

+ 2 - 0
sys/src/9/ip/tcp.c

@@ -768,6 +768,8 @@ tcpmtu(Proto *tcp, uchar *addr, int version, int *scale)
 		break;
 	}
 	if(ifc != nil){
+		if(ifc->mbps > 1000)
+			*scale = HaveWS | 4;
 		if(ifc->mbps > 100)
 			*scale = HaveWS | 3;
 		else if(ifc->mbps > 10)

+ 106 - 11
sys/src/cmd/ndb/dblookup.c

@@ -494,6 +494,7 @@ srvrr(Ndbtuple *entry, Ndbtuple *pair)
 	rp->srv->target = dnlookup(pair->val, Cin, 1);
 	rp->srv->pri    = intval(entry, pair, "pri", 0);
 	rp->srv->weight = intval(entry, pair, "weight", 0);
+	/* TODO: translate service name to port # */
 	rp->srv->port   = intval(entry, pair, "port", 0);
 	return rp;
 }
@@ -738,13 +739,14 @@ extern uchar	ipaddr[IPaddrlen];	/* my ip address */
 
 /*
  *  get all my xxx
+ *  caller ndbfrees the result
  */
 Ndbtuple*
 lookupinfo(char *attr)
 {
 	char buf[64];
 	char *a[2];
-	static Ndbtuple *t;
+	Ndbtuple *t;
 
 	snprint(buf, sizeof buf, "%I", ipaddr);
 	a[0] = attr;
@@ -979,13 +981,13 @@ char *attribs[] = {
 };
 
 /*
- *  create ptrs that are in our areas
- *  TODO: generate v6 ptr rrs.  rfc3596
+ *  create ptrs that are in our v4 areas
  */
 static void
-createptrs(void)
+createv4ptrs(void)
 {
 	int len, dlen, n;
+	char *dom;
 	char buf[Domlen+1], ipa[48];
 	char *f[40];
 	uchar net[IPaddrlen], mask[IPaddrlen];
@@ -994,15 +996,16 @@ createptrs(void)
 
 	dlen = strlen(v4ptrdom);
 	for(s = owned; s; s = s->next){
-		len = strlen(s->soarr->owner->name);
-		if(len <= dlen)
-			continue;
-		if(cistrcmp(s->soarr->owner->name+len-dlen, v4ptrdom) != 0)
+		dom = s->soarr->owner->name;
+		len = strlen(dom);
+		if((len <= dlen || cistrcmp(dom+len-dlen, v4ptrdom) != 0) &&
+		    cistrcmp(dom, v4ptrdom+1) != 0)
 			continue;
 
 		/* get mask and net value */
-		strncpy(buf, s->soarr->owner->name, sizeof buf);
+		strncpy(buf, dom, sizeof buf);
 		buf[sizeof buf-1] = 0;
+		/* buf contains something like 178.204.in-addr.arpa (n==4) */
 		n = getfields(buf, f, nelem(f), 0, ".");
 		memset(mask, 0xff, IPaddrlen);
 		ipmove(net, v4prefix);
@@ -1049,10 +1052,102 @@ createptrs(void)
 
 		/*
 		 * go through all domain entries looking for RR's
-		 * in this network and create ptrs
+		 * in this network and create ptrs.
+		 * +2 for ".in-addr.arpa".
 		 */
-		dnptr(net, mask, s->soarr->owner->name, 6-n, 0);
+		dnptr(net, mask, dom, Ta, 4+2-n, 0);
+	}
+}
+
+enum {
+	Nibwidth = 4,
+	Nibmask = (1<<Nibwidth) - 1,
+	V6maxrevdomdepth = 128 / Nibwidth,	/* bits / bits-per-nibble */
+};
+
+/* convert bytes to nibbles, big-endian */
+void
+bytes2nibbles(uchar *nibbles, uchar *bytes, int nbytes)
+{
+	while (nbytes-- > 0) {
+		*nibbles++ = *bytes >> Nibwidth;
+		*nibbles++ = *bytes++ & Nibmask;
+	}
+}
+
+void
+nibbles2bytes(uchar *bytes, uchar *nibbles, int nnibs)
+{
+	for (; nnibs >= 2; nnibs -= 2) {
+		*bytes++ = nibbles[0] << Nibwidth | (nibbles[1]&Nibmask);
+		nibbles += 2;
 	}
+	if (nnibs > 0)
+		*bytes = nibbles[0] << Nibwidth;
+}
+
+/*
+ *  create ptrs that are in our v6 areas.  see rfc3596
+ */
+static void
+createv6ptrs(void)
+{
+	int len, dlen, i, n, pfxnibs;
+	char *dom;
+	char buf[Domlen+1];
+	char *f[40];
+	uchar net[IPaddrlen], mask[IPaddrlen];
+	uchar nibnet[IPaddrlen*2], nibmask[IPaddrlen*2];
+	Area *s;
+
+	dlen = strlen(v6ptrdom);
+	for(s = owned; s; s = s->next){
+		dom = s->soarr->owner->name;
+		len = strlen(dom);
+		if((len <= dlen || cistrcmp(dom+len-dlen, v6ptrdom) != 0) &&
+		    cistrcmp(dom, v6ptrdom+1) != 0)
+			continue;
+
+		/* get mask and net value */
+		strncpy(buf, dom, sizeof buf);
+		buf[sizeof buf-1] = 0;
+		/* buf contains something like 2.0.0.2.ip6.arpa (n==6) */
+		n = getfields(buf, f, nelem(f), 0, ".");
+		pfxnibs = n - 2;
+		if (pfxnibs < 0 || pfxnibs > V6maxrevdomdepth)
+			continue;
+
+		memset(net, 0, IPaddrlen);
+		memset(mask, 0xff, IPaddrlen);
+		bytes2nibbles(nibnet, net, IPaddrlen);
+		bytes2nibbles(nibmask, mask, IPaddrlen);
+
+		/* copy prefix of f, in reverse order, to start of net. */
+		for (i = 0; i < pfxnibs; i++)
+			nibnet[i] = strtol(f[pfxnibs - 1 - i], nil, 16);
+		/* zero nibbles of mask after prefix in net */
+		memset(nibmask + pfxnibs, 0, V6maxrevdomdepth - pfxnibs);
+
+		nibbles2bytes(net, nibnet, 2*IPaddrlen);
+		nibbles2bytes(mask, nibmask, 2*IPaddrlen);
+
+		/*
+		 * go through all domain entries looking for RR's
+		 * in this network and create ptrs.
+		 * +2 for .ip6.arpa.
+		 */
+		dnptr(net, mask, dom, Taaaa, V6maxrevdomdepth - pfxnibs, 0);
+	}
+}
+
+/*
+ *  create ptrs that are in our areas
+ */
+static void
+createptrs(void)
+{
+	createv4ptrs();
+	createv6ptrs();
 }
 
 /*

+ 20 - 6
sys/src/cmd/ndb/dn.c

@@ -1817,18 +1817,21 @@ mkptr(DN *dp, char *ptr, ulong ttl)
 	return rp;
 }
 
+void	bytes2nibbles(uchar *nibbles, uchar *bytes, int nbytes);
+
 /*
  *  look for all ip addresses in this network and make
  *  pointer records for them.
- *  TODO: v6 ptr algorithm (nibble.nibble.....ip6.arpa), rfc3596
  */
 void
-dnptr(uchar *net, uchar *mask, char *dom, int bytes, int ttl)
+dnptr(uchar *net, uchar *mask, char *dom, int forwtype, int subdoms, int ttl)
 {
-	int i, j;
+	int i, j, len;
 	char *p, *e;
 	char ptr[Domlen];
+	uchar *ipp;
 	uchar ip[IPaddrlen], nnet[IPaddrlen];
+	uchar nibip[IPaddrlen*2];
 	DN *dp;
 	RR *rp, *nrp, *first, **l;
 
@@ -1837,17 +1840,28 @@ dnptr(uchar *net, uchar *mask, char *dom, int bytes, int ttl)
 	for(i = 0; i < HTLEN; i++)
 		for(dp = ht[i]; dp; dp = dp->next)
 			for(rp = dp->rr; rp; rp = rp->next){
-				if(rp->type != Ta || rp->negative)
+				if(rp->type != forwtype || rp->negative)
 					continue;
 				parseip(ip, rp->ip->name);
 				maskip(ip, mask, nnet);
 				if(ipcmp(net, nnet) != 0)
 					continue;
+
+				ipp = ip;
+				len = IPaddrlen;
+				if (forwtype == Taaaa) {
+					bytes2nibbles(nibip, ip, IPaddrlen);
+					ipp = nibip;
+					len = 2*IPaddrlen;
+				}
+
 				p = ptr;
 				e = ptr+sizeof(ptr);
-				for(j = IPaddrlen-1; j >= IPaddrlen-bytes; j--)
-					p = seprint(p, e, "%d.", ip[j]);
+				for(j = len - 1; j >= len - subdoms; j--)
+					p = seprint(p, e, (forwtype == Ta?
+						"%d.": "%x."), ipp[j]);
 				seprint(p, e, "%s", dom);
+
 				nrp = mkptr(dp, ptr, ttl);
 				*l = nrp;
 				l = &nrp->next;

+ 2 - 2
sys/src/cmd/ndb/dns.h

@@ -270,7 +270,7 @@ struct RR
 		DN	*host;	/* hostname - soa, cname, mb, md, mf, mx, ns */
 		DN	*cpu;	/* cpu type - hinfo */
 		DN	*mb;	/* mailbox - mg, minfo */
-		DN	*ip;	/* ip address - a */
+		DN	*ip;	/* ip address - a, aaaa */
 		DN	*rp;	/* rp arg - rp */
 		uintptr	arg0;	/* arg[01] are compared to find dups in dn.c */
 	};
@@ -450,7 +450,7 @@ void	dndump(char*);
 void	dnget(void);
 void	dninit(void);
 DN*	dnlookup(char*, int, int);
-void	dnptr(uchar*, uchar*, char*, int, int);
+void	dnptr(uchar*, uchar*, char*, int, int, int);
 void	dnpurge(void);
 void	dnput(void);
 void	dnslog(char*, ...);

+ 3 - 4
sys/src/cmd/ndb/dnsdebug.c

@@ -390,9 +390,8 @@ doquery(char *name, char *tstr)
 
 	/* inverse queries may need to be permuted */
 	strncpy(buf, name, sizeof buf);
-	if(strcmp("ptr", tstr) == 0
-	&& strstr(name, "IN-ADDR") == 0
-	&& strstr(name, "in-addr") == 0){
+	if(strcmp("ptr", tstr) == 0 && cistrstr(name, ".arpa") == nil){
+		/* TODO: reversing v6 addrs is harder */
 		for(p = name; *p; p++)
 			;
 		*p = '.';
@@ -409,7 +408,7 @@ doquery(char *name, char *tstr)
 		}
 		memmove(np, p+1, len);
 		np += len;
-		strcpy(np, "in-addr.arpa");
+		strcpy(np, "in-addr.arpa");	/* TODO: ip6.arpa for v6 */
 	}
 
 	/* look it up */

+ 5 - 4
sys/src/cmd/ndb/dnsquery.c

@@ -65,8 +65,8 @@ static void
 query(int fd)
 {
 	int n, len;
-	char line[1024], *lp, *p, *np;
-	char buf[1024];
+	char *lp, *p, *np;
+	char buf[1024], line[1024];
 	Biobuf in;
 
 	Binit(&in, 0, OREAD);
@@ -95,7 +95,8 @@ query(int fd)
 
 		/* inverse queries may need to be permuted */
 		if(n > 4 && strcmp("ptr", &line[n-3]) == 0 &&
-		    cistrstr(line, "in-addr") == 0){
+		    cistrstr(line, ".arpa") == nil){
+			/* TODO: reversing v6 addrs is harder */
 			for(p = line; *p; p++)
 				if(*p == ' '){
 					*p = '.';
@@ -114,7 +115,7 @@ query(int fd)
 			}
 			memmove(np, p+1, len);
 			np += len;
-			strcpy(np, "in-addr.arpa ptr");
+			strcpy(np, "in-addr.arpa ptr");	/* TODO: ip6.arpa for v6 */
 			strcpy(line, buf);
 			n = strlen(line);
 		}