Internet DRAFT - draft-de-launois-dnsext-sloc-rr
draft-de-launois-dnsext-sloc-rr
Network Working Group C. de Launois
Internet-Draft UCL/INGI
Expires: January 8, 2006 July 7, 2005
Synthetic Location Information in the Domain Name System
draft-de-launois-dnsext-sloc-rr-00
Status of this Memo
By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on January 8, 2006.
Copyright Notice
Copyright (C) The Internet Society (2005).
Abstract
This memo defines a new Resource Record (RR) for the Domain Name
System (DNS), for experimental purposes. It describes a mechanism to
allow the DNS to carry synthetic coordinates about hosts, networks,
and subnets. The new resource record, called SLOC, can express
synthetic locations in different coordinate spaces.
This draft defines the format of the new SLOC RR for the DNS, and
reserves a corresponding DNS type mnemonic (SLOC) and numerical code
(TBD).
de Launois Expires January 8, 2006 [Page 1]
Internet-Draft Synthetic Locations in the DNS July 2005
This RFC assumes that the reader is familiar with the DNS [1] [2].
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. RDATA Format . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1 SLOC_ALG values . . . . . . . . . . . . . . . . . . . . . 5
2.2 SLOC_SPACE values . . . . . . . . . . . . . . . . . . . . 5
2.3 SLOC_DIM values . . . . . . . . . . . . . . . . . . . . . 6
2.4 SLOC RDATA Examples . . . . . . . . . . . . . . . . . . . 6
3. Master File Format . . . . . . . . . . . . . . . . . . . . . . 7
4. Examples of Master Files . . . . . . . . . . . . . . . . . . . 8
5. Application use of the SLOC RR . . . . . . . . . . . . . . . . 8
5.1 Suggested Uses . . . . . . . . . . . . . . . . . . . . . . 8
5.2 Search Algorithms . . . . . . . . . . . . . . . . . . . . 9
5.2.1 Searching by Name . . . . . . . . . . . . . . . . . . 9
5.2.2 Searching by Address . . . . . . . . . . . . . . . . . 10
5.2.3 Searching by Network or Subnet . . . . . . . . . . . . 10
5.3 Applicability to non-IN Classes and non-IP Addresses . . . 11
6. Implementation of the SLOC RR for the Bind Name Server . . . . 12
6.1 The sloc.h file . . . . . . . . . . . . . . . . . . . . . 12
6.2 The sloc.c file . . . . . . . . . . . . . . . . . . . . . 12
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21
8. Security Considerations . . . . . . . . . . . . . . . . . . . 21
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Author's Address . . . . . . . . . . . . . . . . . . . . . . . 22
Intellectual Property and Copyright Statements . . . . . . . . 23
de Launois Expires January 8, 2006 [Page 2]
Internet-Draft Synthetic Locations in the DNS July 2005
1. Introduction
Geographical location informations can be expressed using the LOC DNS
resource record defined in [3]. Geographical locations are useful to
generates maps of routers or to perform "visual" traceroutes. They
are however of little help for predicting round-trip times in the
Internet, since the round-trip times between two hosts are poorly
correlated with their geographical distances. Hence several
synthetic coordinates were developed so that the distance in the
synthetic coordinate space between hosts x and y actually reflects
the round-trip time between x and y. These synthetic coordinates are
usually not expressed in terms of latitude/longitude, and are
sometimes defined in other coordinate spaces than the traditional
two- or three-dimensional euclidean spaces.
This memo defines a new Resource Record (RR) for the Domain Name
System (DNS), for experimental purposes. It describes a mechanism to
allow the DNS to carry synthetic coordinates about hosts, networks,
and subnets. The new resource record, called SLOC, can express
synthetic locations for different coordinate spaces.
This draft defines the format of the new SLOC RR for the DNS, and
reserves a corresponding DNS type mnemonic (SLOC) and numerical code
(TBD).
2. RDATA Format
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SLOC_CLASS | SLOC_ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LOCATION |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: LOCATION :
: : :
SLOC_CLASS An 8-bit value that specifies if the coordinate is
standard (1), vendor-specific (2), or private (3)
Standard identifications are destined for coordinates
that are supposed to be used by hosts in the global
Internet. For instance, a standard identification can
be used to express geographical coordinates.
Vendor-Specific identifications aim to be used by
vendors wishing to define their own proprietary
coordinates. They can also be used to experiment new
coordinates. Typically, vendor-specific coordinates
de Launois Expires January 8, 2006 [Page 3]
Internet-Draft Synthetic Locations in the DNS July 2005
are useful to only a fraction of hosts in the Internet.
Finally, private identifications can be used by anyone
who wants to express coordinates that do not have any
meaning outside the network where they are used.
SLOC_ID The format of the SLOC_ID field depends on the
SLOC_CLASS value, i.e. the format of the field is
different for standard, vendor-specific, and private
coordinates. The value of the SLOC_ID field specifies
both the nature of the coordinates, and the algorithm
that can interpret and possibly compute these
coordinates.
If the coordinate is standard (SLOC_CLASS=1), then this
field is divided into a a 8-bit value SLOC_ALG, a 8-bit
value SLOC_SPACE, and a 8-bit value SLOC_DIM:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SLOC_ALG | SLOC_SPACE | SLOC_DIM |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The SLOC_ALG field specifies the algorithm that
interprets and computes the coordinates. The SLOC_SPACE
field uniquely identifies the nature of the space where
the coordinates are defined, for instance an Euclidean,
a spherical, or an hyperbolic space. Finally, the
SLOC_DIM defines the number of dimensions of the space.
When the identification is vendor-specific (SLOC_CLASS
= 2), the SLOC_ID field contains the vendor-specific ID
assigned by IANA (24-bit value encoded in network
standard byte order). If a vendor implements several
algorithms, or use several coordinate spaces, then the
SLOC_ID field may not suffice to uniquely identify a
couple (algorithm, coordinate space).
Therefore, it is suggested that the vendor uses the
first dimension(s) of its coordinates to identify the
type of coordinates. However, in any cases, this
implementation choice is left to the vendor.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| VENDOR_ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
If the coordinates are private (SLOC_CLASS = 3), then
the semantic and meaning of the SLOC_ID field depends
on the domain where it is found. Such coordinates
SHOULD NOT be transmitted to a hosts that is not inside
de Launois Expires January 8, 2006 [Page 4]
Internet-Draft Synthetic Locations in the DNS July 2005
the network where the coordinates are defined.
LOCATION A sequence of 1 or more 32-bit unsigned integers, most
significant octet first (network standard byte order).
These integers express the coordinates of a node.
The exact meaning of these integers depends on the
SLOC_CLASS and SLOC_ID fields.
The remaining of this document focus only on standard coordinates
(SLOC_CLASS=1)
2.1 SLOC_ALG values
For standard coordinates, the 8-bit SLOC_ALG value specifies the
algorithm that interprets and computes the coordinates. The
SLOC_SPACE field uniquely identifies the nature of the space where
the coordinates are defined, for instance an Euclidean, a spherical,
or an hyperbolic space. Finally, the SLOC_DIM defines the number of
dimensions of the space.
Some SLOC_ALG field values currently defined for some synthetic
coordinate algorithms are:
SLOC_ALG Description
--------------------------------------------------
0 Reserved
1 Geographical coordinates [3]
2 GNP synthetic coordinates [4]
3 Lighthouse synthetic coordinates [5]
4 Vivaldi synthetic coordinates [6]
5 SVivaldi synthetic coordinates [7]
6 BBS synthetic coordinates [8]
7 NPS synthetic coordinates [9]
8 PIC synthetic coordinates [10]
9 - 255 Unassigned
2.2 SLOC_SPACE values
Values currently defined for the SLOC_SPACE field are shown belown.
It assigns values to popular coordinate spaces. When the algorithm
does not make use of one these coordinate spaces, it may use the
"uninterpreted" coordinate space (SLOC_SPACE = 1), or use one of the
algorithm-specific values in the range [128..255].
de Launois Expires January 8, 2006 [Page 5]
Internet-Draft Synthetic Locations in the DNS July 2005
SLOC_SPACE Description
--------------------------------------------------
0 Reserved
1 Uninterpreted
2 Euclidean
3 Spherical
4 Cylindric
5 Hyperbolic
6 Height Vector
7-127 Unassigned
128-255 Algorithm-Specific
2.3 SLOC_DIM values
The table below shows the values for the SLOC_DIM field. Values in
the range [1..63] indicate the number of dimensions of the coordinate
space. Value 0 is reserved and MUST NOT be used.
SLOC_DIM Description Min Size of LOCATION field
-----------------------------------------------------------
0 Reserved Undefined
1 1 dimension 1
2 2 dimensions 2
3 3 dimensions 3
: : :
63 63 dimensions 63
64-254 Reserved
255 Variable 1
If SLOC_DIM equals 255, the LOCATION field contains a variable-length
sequence of one or more 32-bits numbers. This value is typically
used when SLOC_SPACE = 1, i.e. an uninterpreted coordinate space, or
when the size of the LOCATION field suffice to indicate the number of
dimensions used.
The third column defines the minimum number of 32-bit values required
in the LOCATION field for this type of dimensions. The LOCATION
field MAY contain more than this minimum number of 32-bit values. In
this case the meaning of the additional values is algorithm-specific.
The tuple (SLOC_ALG, SLOC_SPACE, SLOC_DIM), i.e. the whole SLOC_ID
field, uniquely defines a coordinate space and how to interpret it.
2.4 SLOC RDATA Examples
The table below shows some examples that illustrate the use of
standard coordinates (SLOC_CLASS = 1). It presents some meaningful
de Launois Expires January 8, 2006 [Page 6]
Internet-Draft Synthetic Locations in the DNS July 2005
combinations of SLOC_ALG, SLOC_SPACE and SLOC_DIM values. The
content of the LOCATION field is written here as a sequence of 32-bit
values separated by a colon ":".
SLOC_ALG SLOC_SPACE SLOC_DIM LOCATION Description
-----------------------------------------------------------
3 2 3 25:35:2 Lighthouse Euclidean 3-D
3 2 255 25:35:2 Same as above
4 6 3 5:3:1:100 Vivaldi 2D+H + error
4 2 3 5:3:1:100 Vivaldi 3D + error
5 6 3 5:3:1:100 SVivaldi 2D+H + error
1 3 3 0:0:0:1184274 Lat+Long+Alt+Extra field
In the table above, the examples that uses the Vivaldi network
coordinate system (3d and 4th lines) illustrate the need for the
SLOC_SPACE field. In these cases, the same algorithm (SLOC_ALG = 4)
and the same number of dimensions (SLOC_DIM = 3) are used, with an
identical number of 32-bit values in the LOCATION field. The meaning
of the coordinates is then given by the SLOC_SPACE field.
The 3rd and 5th examples illustrate the need for the SLOC_ALG field.
They both contain the same values in the SLOC_SPACE, SLOC_DIM and
LOCATION fields. However, the coordinates of the 3rd example are
computed by the Vivaldi algorithm, while the coordinates of the 5th
example are computed by the SVivaldi algorithm.
The 6th example illustrates the coding of geographical coordinates in
the SLOC RDATA. The extra field is used to encode the size and
precision values for the coordinates, as detailed in RFC 1876.
3. Master File Format
The SLOC record is expressed in a master file in the following
format:
<owner> <TTL> <class> SLOC
{1 sl_alg sl_space sl_dim | sl_class sl_id} coord
where:
sl_class: [1 .. 3] (unsigned 8-bit value)
sl_alg: [1 .. 255] (unsigned 8-bit value)
sl_space: [1 .. 255] (unsigned 8-bit value)
sl_dim: [1 .. 255] (unsigned 8-bit value)
sl_id: [0 .. 16777215] (unsigned 24-bit value)
coord = value [ ":" coord ]
value: [0 .. 4294967295] (unsigned 32-bit value)
de Launois Expires January 8, 2006 [Page 7]
Internet-Draft Synthetic Locations in the DNS July 2005
Numbers can be written in the decimal notation, or in the hexadecimal
notation, as illustrated by the examples in the next section.
4. Examples of Master Files
;; A SVivaldi 2D+H synthetic coordinate for domain example.net
example.net SLOC 1 5 6 3 5:3:1:100
;; Host A has a standard and a vendor-specific coordinates
A.example.net SLOC 1 3 2 3 0x11111111:0xABCDEF:9
A.example.net SLOC 2 0x00005E 10:20:30:40
;; Geographical coordinates can also be expressed with SLOC RR
A.south.pole.net SLOC ( 1 3 3
0:0:10:0x00121212 )
The first example illustrates SVivaldi coordinates assigned to the
domain "example.net". These coordinates use the standard SLOC
identification (SLOC_CLASS = 1), the SVivaldi algorithm (SLOC_ALG =
5), a Height Vector coordinate space (SLOC_SPACE = 6) with 2D+H = 3
dimensions (SLOC_DIM = 3). The coordinates for SVivaldi are (x = 5,
y = 3, h = 1). There is one extra value (e = 100), which stands for
an error estimation of the coordinates [4].
The second example illustrates the use of coordinates for an
individual host A inside the "example.net" network. This host has
two kinds of coordinates. The first one is a standard (SLOC_CLASS =
1) Lighthouse (SLOC_ALG = 3) Euclidean (SLOC_SPACE = 2) 3D (SLOC_DIM
= 3) coordinate. The second one is a vendor-specific (SLOC_CLASS =
2) coordinate with vendor ID = 0x5E.
The third and last example illustrates the coding of geographical
coordinates using the SLOC resource record format. The coordinate
values stand for the south pole. They respect RFC 1876 [3].
5. Application use of the SLOC RR
5.1 Suggested Uses
A suggested use is that an algorithm regularly computes the network
coordinates of a (sub)domain, and securely updates the SLOC resource
records in the DNS. Using synthetic network coordinates, it is
possible to evaluate the round-trip time that exists between two
distant domains by computing the distance in the coordinate space
between the coordinates of those domains.
de Launois Expires January 8, 2006 [Page 8]
Internet-Draft Synthetic Locations in the DNS July 2005
5.2 Search Algorithms
This section specifies how to use the DNS to translate domain names
and/or IP addresses into location information. This section is
similar to the section 5.2 of [3] describing the search algorithm for
the SLOC RR. The text is retranscribed here so that this memo is
self-contained.
As said earlier, the location information may refer to a host, or to
a network. When specifying the location of a network or subnet,
network administrators are not required to specify the SLOC RR data
for each individual host. For example, a computer lab with 24
workstations, all of which are on the same subnet and in basically
the same location, would only need a single SLOC RR for the subnet.
However, if the file server's location has been more precisely
measured, a separate SLOC RR for it can be placed in the DNS.
The default behaviour of an application is to query the DNS for the
location of an individual host. Sometimes, a host has no associated
SLOC RR data, while its network has one. In this case, the
application may have a {\it fallback} behaviour, and use the SLOC RR
data of the network to get a less precise or larger area. The
application MAY support the use of the algorithm in Section
Section 5.2.3, as noted in Section Section 5.2.1 and Section
Section 5.2.2. If fallback is desired, this behaviour is the
RECOMMENDED default, but in some cases it may need to be modified
based on the specific requirements of the application involved. This
search algorithm is designed to allow network administrators to
specify the location of a network or subnet without requiring SLOC RR
data for each individual hosst.
5.2.1 Searching by Name
If the application is beginning with a name, rather than an IP
address, it MUST check for a SLOC RR associated with that name.
(CNAME records should be followed as for any other RR type.)
If there is no SLOC RR for that name, all A records (if any)
associated with the name MAY be checked for network (or subnet) SLOC
RRs using the "Searching by Network or Subnet" algorithm
(Section 5.2.3). If multiple A records exist and have associated
network or subnet SLOC RRs, the application may choose to use any,
some, or all of the SLOC RRs found, possibly in combination. It is
suggested that multi-homed hosts have SLOC RRs for their name in the
DNS to avoid any ambiguity in these cases.
Note that domain names that do not have associated A records must
have a SLOC RR associated with their name in order for location
de Launois Expires January 8, 2006 [Page 9]
Internet-Draft Synthetic Locations in the DNS July 2005
information to be accessible.
5.2.2 Searching by Address
If the application is beginning with an IP address, it MUST first map
the address to a name using the IN-ADDR.ARPA namespace (see [1],
section 5.2.1), then check for a SLOC RR associated with that name.
If there is no SLOC RR for the name, the address MAY be checked for
network (or subnet) SLOC RRs using the "Searching by Network or
Subnet" algorithm (Section 5.2.3).
5.2.3 Searching by Network or Subnet
Even if the name of a host does not have any associated SLOC RRs, the
network(s) or subnet(s) it is on may. If the application wishes to
search for such less specific data, the following algorithm SHOULD be
followed to find a network or subnet SLOC RR associated with the IP
address. This algorithm is adapted slightly from that specified in
[5], sections 4.3 and 4.4.
Since subnet SLOC RRs are (if present) more specific than network
SLOC RRs, it is best to use them if available. In order to do so, we
build a stack of network and subnet names found while performing the
[5] search, then work our way down the stack until a SLOC RR is
found.
de Launois Expires January 8, 2006 [Page 10]
Internet-Draft Synthetic Locations in the DNS July 2005
1. create a host-zero address using the network portion of the IP
address (one, two, or three bytes for class A, B, or C networks,
respectively). For example, for the host 128.9.2.17, on the class
B network 128.9, this would result in the address "128.9.0.0".
2. Reverse the octets, suffix IN-ADDR.ARPA, and query for PTR and A
records. Retrieve:
0.0.9.128.IN-ADDR.ARPA. PTR isi-net.isi.edu.
A 255.255.255.0
Push the name "isi-net.isi.edu" onto the stack of names to be
searched for SLOC RRs later.
3. Since an A RR was found, repeat using mask from RR
(255.255.255.0), constructing a query for 0.2.9.128.IN-ADDR.ARPA.
Retrieve:
0.2.9.128.IN-ADDR.ARPA. PTR div2-subnet.isi.edu.
A 255.255.255.240
Push the name "div2-subnet.isi.edu" onto the stack of names to be
searched for SLOC RRs later.
4. Since another A RR was found, repeat using mask 255.255.255.240
(x'FFFFFFF0'), constructing a query for 16.2.9.128.IN-ADDR.ARPA.
Retrieve:
16.2.9.128.IN-ADDR.ARPA. PTR inc-subsubnet.isi.edu.
Push the name "inc-subsubnet.isi.edu" onto the stack of names to
be searched for SLOC RRs later.
5. Since no A RR is present at 16.2.9.128.IN-ADDR.ARPA., there are no
more subnet levels to search. We now pop the top name from the
stack and check for an associated SLOC RR. Repeat until a SLOC RR
is found.
In this case, assume that inc-subsubnet.isi.edu does not have an
associated SLOC RR, but that div2-subnet.isi.edu does. We will
then use div2-subnet.isi.edu's SLOC RR as an approximation of this
host's location. (Note that even if isi-net.isi.edu has a SLOC
RR, it will not be used if a subnet also has a SLOC RR.)
5.3 Applicability to non-IN Classes and non-IP Addresses
Like for the LOC record, the SLOC record is defined for all RR
de Launois Expires January 8, 2006 [Page 11]
Internet-Draft Synthetic Locations in the DNS July 2005
classes, and may be used with non-IN classes such as HS and CH. The
semantics of such use are not defined by this memo.
6. Implementation of the SLOC RR for the Bind Name Server
This section proposes an implementation of the SLOC resource record
for the popular Internet Systems Consortium's BIND (Berkeley Internet
Name Domain) DNS server [6]. The RR type number chosen for
illustrative purposes is 51. The new SLOC RR is implemented in the C
language, in two files~: sloc51.h and sloc51.c, located in the /lib/
dns/rdata/generic/ subdirectory of the BIND source tree.
6.1 The sloc.h file
#ifndef GENERIC_SLOC_51_H
#define GENERIC_SLOC_51_H 1
/* Experimental SLOC RR DATA */
#define RRTYPE_SLOC_MAXLOC 64
typedef struct dns_rdata_sloc {
dns_rdatacommon_t common;
isc_mem_t *mctx;
isc_uint8_t class;
isc_uint8_t alg;
isc_uint8_t space;
isc_uint8_t dim;
isc_uint16_t len;
isc_uint32_t location[RRTYPE_SLOC_MAXLOC];
} dns_rdata_sloc_t;
#endif /* GENERIC_SLOC_51_H */
6.2 The sloc.c file
/* Experimental SLOC RR DATA */
#ifndef RDATA_GENERIC_SLOC_51_C
#define RDATA_GENERIC_SLOC_51_C
#define RRTYPE_SLOC_ATTRIBUTES (0)
static inline isc_result_t
fromtext_sloc(ARGS_FROMTEXT) {
isc_token_t token;
de Launois Expires January 8, 2006 [Page 12]
Internet-Draft Synthetic Locations in the DNS July 2005
char *e;
char *str;
int i;
unsigned char sloc_class;
unsigned long sloc_dim = 0;
unsigned int location;
unsigned int sloc_counter = 1;
REQUIRE(type == 51);
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
UNUSED(options);
UNUSED(callbacks);
/*
* SLOC Class
*/
RETERR(isc_lex_getmastertoken(lexer, &token,
isc_tokentype_string,
ISC_FALSE));
str = DNS_AS_STR(token);
sloc_class = (unsigned char)strtol(str, &e, 0);
if (*e != 0)
RETTOK(ISC_R_UNEXPECTEDTOKEN);
if (sloc_class == 0 || sloc_class > 3)
RETTOK(ISC_R_RANGE);
RETERR(uint8_tobuffer(sloc_class, target));
/*
* SLOC ID.
*/
if (sloc_class == 1) {
/* Standard coordinates */
/* Read SLOC Alg, SLOC Space and */
/* SLOC Dim (8 bits each) */
for (i=0; i<3; i++) {
RETERR(isc_lex_getmastertoken(lexer, &token,
isc_tokentype_string, ISC_FALSE));
str = DNS_AS_STR(token);
sloc_dim = strtoul(str, &e, 0);
if (*e != 0)
RETTOK(ISC_R_UNEXPECTEDTOKEN);
if (sloc_dim == 0 || sloc_dim > 0xFFU)
RETTOK(ISC_R_RANGE);
RETERR(uint8_tobuffer(sloc_dim, target));
}
de Launois Expires January 8, 2006 [Page 13]
Internet-Draft Synthetic Locations in the DNS July 2005
} else {
/* Vendor-Specific or Private coordinates */
/* Read SLOC Id (24 bits) */
unsigned char sloc_vid_high;
unsigned short sloc_vid_low;
unsigned long sloc_tmp;
RETERR(isc_lex_getmastertoken(lexer, &token,
isc_tokentype_string,
ISC_FALSE));
str = DNS_AS_STR(token);
sloc_tmp = strtoul(str, &e, 0);
if (*e != 0)
RETTOK(ISC_R_UNEXPECTEDTOKEN);
if (sloc_tmp == 0 || sloc_tmp > 0xFFFFFFU)
RETTOK(ISC_R_RANGE);
sloc_vid_high = (unsigned char)(sloc_tmp >> 16);
RETERR(uint8_tobuffer(sloc_vid_high, target));
sloc_vid_low = (sloc_tmp & 0xFFFF);
RETERR(uint16_tobuffer(sloc_vid_low, target));
}
/*
* LOCATION.
*/
RETERR(isc_lex_getmastertoken(lexer, &token,
isc_tokentype_string,
ISC_FALSE));
str = DNS_AS_STR(token);
location = strtoul(str, &e, 0);
if (*e != 0 && *e != ':')
RETTOK(ISC_R_UNEXPECTEDTOKEN);
RETERR(uint32_tobuffer(location, target));
for (i=0; i<(RRTYPE_SLOC_MAXLOC-1) && *e == ':'; i++) {
str = e + 1;
location = strtoul(str, &e, 0);
RETERR(uint32_tobuffer(location, target));
sloc_counter++;
}
if (*e != 0)
RETTOK(ISC_R_UNEXPECTEDTOKEN);
if (sloc_class == 1 && sloc_counter < sloc_dim)
de Launois Expires January 8, 2006 [Page 14]
Internet-Draft Synthetic Locations in the DNS July 2005
RETTOK(ISC_R_UNEXPECTEDEND);
return (ISC_R_SUCCESS);
}
static inline isc_result_t
totext_sloc(ARGS_TOTEXT) {
isc_region_t sr;
unsigned char sl_class;
unsigned long n;
int i;
char buf[sizeof(":4294967295")];
UNUSED(tctx);
REQUIRE(rdata->type == 51);
REQUIRE(rdata->length != 0);
dns_rdata_toregion(rdata, &sr);
/* SLOC Class */
sl_class = sr.base[0];
sprintf(buf, "%i ", sl_class);
RETERR(str_totext(buf, target));
if (sl_class == 1) {
/* Convert SLOC Alg, SLOC Space and */
/* SLOC Dim (8 bits each) */
for (i = 1; i <= 3; i++) {
unsigned char sl_tmp = sr.base[i];
sprintf(buf, "%i ", sl_tmp);
RETERR(str_totext(buf, target));
}
} else {
/* Convert SLOC Id (24 bits) */
n = uint32_fromregion(&sr) & 0xFFFFFF;
sprintf(buf, "%lu ", n);
RETERR(str_totext(buf, target));
}
isc_region_consume(&sr, 4);
/* Convert LOCATION values */
n = uint32_fromregion(&sr);
isc_region_consume(&sr, 4);
sprintf(buf, "%lu", n);
de Launois Expires January 8, 2006 [Page 15]
Internet-Draft Synthetic Locations in the DNS July 2005
RETERR(str_totext(buf, target));
while (sr.length >= 4) {
n = uint32_fromregion(&sr);
isc_region_consume(&sr, 4);
sprintf(buf, ":%lu", n);
RETERR(str_totext(buf, target));
}
return (ISC_R_SUCCESS);
}
static inline isc_result_t
fromwire_sloc(ARGS_FROMWIRE) {
isc_region_t sr;
unsigned char sl_class;
unsigned char sl_alg;
unsigned char sl_space;
unsigned char sl_dim;
unsigned int sl_counter = 1;
REQUIRE(type == 51);
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
UNUSED(options);
isc_buffer_activeregion(source, &sr);
if (sr.length < 4)
return (ISC_R_UNEXPECTEDEND);
sl_class = sr.base[0];
sl_alg = sr.base[1];
sl_space = sr.base[2];
sl_dim = sr.base[3];
if (sl_class == 0 || sl_class > 3)
return (ISC_R_NOTIMPLEMENTED);
if (sl_class == 1) {
/* Check for Standard SLOC Class*/
if (sl_alg == 0 || sl_space == 0 || sl_dim == 0)
return (ISC_R_NOTIMPLEMENTED);
if (sl_dim > 63 && sl_dim < 255)
return (ISC_R_NOTIMPLEMENTED);
}
de Launois Expires January 8, 2006 [Page 16]
Internet-Draft Synthetic Locations in the DNS July 2005
RETERR(mem_tobuffer(target, sr.base, 4));
isc_region_consume(&sr, 4);
isc_buffer_forward(source, 4);
if (sr.length < 4) {
return (ISC_R_UNEXPECTEDEND);
}
RETERR(mem_tobuffer(target, sr.base, 4));
isc_region_consume(&sr, 4);
isc_buffer_forward(source, 4);
while (sr.length >= 4) {
RETERR(mem_tobuffer(target, sr.base, 4));
isc_region_consume(&sr, 4);
isc_buffer_forward(source, 4);
sl_counter++;
}
if (sl_class==1 && sl_dim!=255) {
/* Check number of coordinates */
if (sl_counter < sl_dim)
return (ISC_R_UNEXPECTEDEND);
}
return (ISC_R_SUCCESS);
}
static inline isc_result_t
towire_sloc(ARGS_TOWIRE) {
UNUSED(cctx);
REQUIRE(rdata->type == 51);
REQUIRE(rdata->length != 0);
return (mem_tobuffer(target, rdata->data, rdata->length));
}
static inline int
compare_sloc(ARGS_COMPARE) {
isc_region_t r1;
isc_region_t r2;
REQUIRE(rdata1->type == rdata2->type);
REQUIRE(rdata1->rdclass == rdata2->rdclass);
REQUIRE(rdata1->type == 51);
REQUIRE(rdata1->length != 0);
REQUIRE(rdata2->length != 0);
de Launois Expires January 8, 2006 [Page 17]
Internet-Draft Synthetic Locations in the DNS July 2005
dns_rdata_toregion(rdata1, &r1);
dns_rdata_toregion(rdata2, &r2);
return (isc_region_compare(&r1, &r2));
}
static inline isc_result_t
fromstruct_sloc(ARGS_FROMSTRUCT) {
dns_rdata_sloc_t *sloc = source;
int i;
REQUIRE(type == 51);
REQUIRE(source != NULL);
REQUIRE(sloc->common.rdtype == type);
REQUIRE(sloc->common.rdclass == rdclass);
UNUSED(type);
UNUSED(rdclass);
if (sloc->class == 0 || sloc->class > 3)
return (ISC_R_NOTIMPLEMENTED);
RETERR(uint8_tobuffer(sloc->class, target));
if (sloc->class == 1) {
/* Standard coordinates */
if (sloc->alg == 0
|| sloc->space == 0
|| sloc->dim == 0)
return (ISC_R_NOTIMPLEMENTED);
if (sloc->dim > 63 && sloc->space < 255)
return (ISC_R_NOTIMPLEMENTED);
if (sloc->len < sloc->dim)
return (ISC_R_UNEXPECTEDEND);
RETERR(uint8_tobuffer(sloc->dim, target));
} else {
/* Vendor-Specific or Private coordinates */
RETERR(uint8_tobuffer(sloc->alg, target));
RETERR(uint8_tobuffer(sloc->space, target));
RETERR(uint8_tobuffer(sloc->dim, target));
}
if (sloc->len < 1 || sloc->len > RRTYPE_SLOC_MAXLOC)
return (ISC_R_RANGE);
for (i = 0; i < sloc->len; i++) {
RETERR(uint32_tobuffer(sloc->location[i], target));
}
de Launois Expires January 8, 2006 [Page 18]
Internet-Draft Synthetic Locations in the DNS July 2005
return (ISC_R_SUCCESS);
}
static inline isc_result_t
tostruct_sloc(ARGS_TOSTRUCT) {
dns_rdata_sloc_t *sloc = target;
isc_region_t r;
REQUIRE(rdata->type == 51);
REQUIRE(target != NULL);
REQUIRE(rdata->length != 0);
UNUSED(mctx);
dns_rdata_toregion(rdata, &r);
sloc->common.rdclass = rdata->rdclass;
sloc->common.rdtype = rdata->type;
ISC_LINK_INIT(&sloc->common, link);
sloc->class = uint8_fromregion(&r);
isc_region_consume(&r, 1);
sloc->alg = uint8_fromregion(&r);
isc_region_consume(&r, 1);
sloc->space = uint8_fromregion(&r);
isc_region_consume(&r, 1);
sloc->dim = uint8_fromregion(&r);
isc_region_consume(&r, 1);
sloc->len = 1;
sloc->location[0] = uint32_fromregion(&r);
isc_region_consume(&r, 4);
while (r.length >= 4 && sloc->len < RRTYPE_SLOC_MAXLOC) {
sloc->location[sloc->len] = uint32_fromregion(&r);
sloc->len++;
}
return (ISC_R_SUCCESS);
}
static inline void
freestruct_sloc(ARGS_FREESTRUCT) {
dns_rdata_sloc_t *sloc = source;
REQUIRE(source != NULL);
REQUIRE(sloc->common.rdtype == 51);
UNUSED(source);
de Launois Expires January 8, 2006 [Page 19]
Internet-Draft Synthetic Locations in the DNS July 2005
UNUSED(sloc);
}
static inline isc_result_t
additionaldata_sloc(ARGS_ADDLDATA) {
REQUIRE(rdata->type == 51);
UNUSED(rdata);
UNUSED(add);
UNUSED(arg);
return (ISC_R_SUCCESS);
}
static inline isc_result_t
digest_sloc(ARGS_DIGEST) {
isc_region_t r;
REQUIRE(rdata->type == 51);
dns_rdata_toregion(rdata, &r);
return ((digest)(arg, &r));
}
static inline isc_boolean_t
checkowner_sloc(ARGS_CHECKOWNER) {
REQUIRE(type == 51);
UNUSED(name);
UNUSED(type);
UNUSED(rdclass);
UNUSED(wildcard);
return (ISC_TRUE);
}
static inline isc_boolean_t
checknames_sloc(ARGS_CHECKNAMES) {
REQUIRE(rdata->type == 51);
UNUSED(rdata);
UNUSED(owner);
UNUSED(bad);
return (ISC_TRUE);
de Launois Expires January 8, 2006 [Page 20]
Internet-Draft Synthetic Locations in the DNS July 2005
}
#endif /* RDATA_GENERIC_SLOC_51_C */
7. IANA Considerations
IANA is requested to allocate an RR type number for the SLOC record
type.
8. Security Considerations
This memo describes a new resource record for the Domain Name System.
As such, it does not introduce any new vulnerability. However, care
should be taken so that the algorithms used to compute the
coordinates are tolerant to abuses.
9. References
[1] Mockapetris, P., "Domain Names - Concepts and Facilities",
RFC 1034, November 1987.
[2] Mockapetris, P., "Domain Names - Implementation and
Specification", RFC 1035, November 1987.
[3] Davis, C., Vixie, P., Goodwin, T., and I. Dickinson, "A Means
for Expressing Location Information in the Domain Name System",
RFC 1876, January 1996.
[4] de Launois, C., Uhlig, S., and O. Bonaventure, "Scalable Route
Selection for IPv6 Multihomed Sites", Proc. Networking'05,
May 2005.
[5] Mockapetris, P., "DNS Encoding of Network Names and Other
Types", RFC 1101, April 1989.
[6] Internet Systems Consortium, Inc., "ISC BIND",
URL http://www.isc.org/sw/bind/, May 2005.
[7] Ng, T. and H. Zhang, "Predicting Internet Network Distance with
Coordinates-Based Approaches", Proc. IEEE INFOCOM'02,
June 2002.
[8] Pias, M., Crowcroft, J., Wilbur, S., Bhatti, S., and T. Harris,
"Lighthouses for scalable distributed location",
Proc. IPTPS'03, Feburary 2003.
[9] Dabek, F., Kaashoek, F., and R. Morris, "Vivaldi: A
de Launois Expires January 8, 2006 [Page 21]
Internet-Draft Synthetic Locations in the DNS July 2005
Decentralized Network Coordinate System", Proc. ACM SIGCOMM'04,
August 2004.
[10] Shavitt, Y. and T. Tankel, "Big-Bang Simulation for embedding
network distances in Euclidean space", Proc. IEEE INFOCOM'03,
April 2003.
[11] Ng, T. and H. Zhang, "A network positioning system for the
Internet", Proc. USENIX Conference, June 2004.
[12] Costa, M., Castro, M., Rowstron, A., and P. Key, "PIC:
Practical Internet Coordinates for Distance Estimation",
Proc. International Conference on Distributed Systems,
March 2004.
Author's Address
Cedric de Launois
UCL/INGI
Place Ste-Barbe 2
B-1348 Louvain-la-Neuve
Belgium
Email: delaunois@info.ucl.ac.be
URI: http://www.info.ucl.ac.be/people/delaunoi/
de Launois Expires January 8, 2006 [Page 22]
Internet-Draft Synthetic Locations in the DNS July 2005
Intellectual Property Statement
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Disclaimer of Validity
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Copyright Statement
Copyright (C) The Internet Society (2005). This document is subject
to the rights, licenses and restrictions contained in BCP 78, and
except as set forth therein, the authors retain all their rights.
Acknowledgment
Funding for the RFC Editor function is currently provided by the
Internet Society.
de Launois Expires January 8, 2006 [Page 23]