RFC 6197
Location-to-Service Translation (LoST) Service List Boundary Extension
Location-to-Service Translation (LoST) Service List Boundary Extension ๐
bestie, this is RFC 6197 ๐ฆ It's from the Internet Engineering Task Force (IETF), and here's the title-block tea โ
- Author: K. Wolf, from nic.at
- Category: Experimental
- Date: April 2011
- ISSN: 2070-1721
- Obsoletes / Updates: the title block doesn't list any RFCs that it obsoletes or updates
Abstract ๐
okay so LoST (Location-to-Service Translation) maps service identifiers and location info to service contact URIs ๐บ๏ธ If a LoST client wants to find out which services are available at a certain location, it sends a <listServicesByLocation> query to the LoST server. The problem? The server's response doesn't tell the client anything about the geographic region where that list is valid ๐ So this document defines a Service List Boundary, which sends back a local context along with the list of services. That way the client doesn't miss a change in available services when it moves around ๐
Status of This Memo ๐
This document is not an Internet Standards Track specification. It's published for examination, experimental implementation, and evaluation ๐งช
This document defines an Experimental Protocol for the Internet community. It's a product of the IETF and it represents the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). Not every document the IESG approves is a candidate for any level of Internet Standard, so see Section 2 of RFC 5741 for more on that ๐
For the current status of this document, any errata, and how to send feedback, check http://www.rfc-editor.org/info/rfc6197 โจ
Copyright Notice โ๏ธ
Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents, as in effect on the date this document was published (http://trustee.ietf.org/license-info). Please read these carefully, because they spell out your rights and restrictions for this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they're provided without warranty as described in the Simplified BSD License.
This document may contain material from IETF Documents or IETF Contributions that were published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of that material may not have granted the IETF Trust the right to allow modifications of it outside the IETF Standards Process. Unless you get an adequate license from the person(s) controlling the copyright in those materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process. The one exceptions are formatting it for publication as an RFC, or translating it into languages other than English ๐
Table of Contents ๐๏ธ
1. Introduction ....................................................3
2. Terminology .....................................................4
3. LoST Extensions .................................................4
3.1. Extensions to <listServicesByLocation> .....................4
3.2. Retrieving the <serviceListBoundary> via
<getServiceListBoundary> ...................................7
3.3. <serviceListBoundary> ......................................8
3.4. Implementation Considerations ..............................9
3.4.1. Server Side .........................................9
3.4.2. Client Side .........................................9
4. Security and Privacy Considerations ............................10
5. IANA Considerations ............................................10
5.1. Relax NG Schema Registration ..............................10
5.2. Namespace Registration ....................................13
6. Acknowledgements ...............................................14
7. References .....................................................14
7.1. Normative References ......................................14
7.2. Informative References ....................................15
1. Introduction ๐ธ
okay so the LoST protocol [RFC5222] already uses the Service Boundary idea so clients don't keep re-checking the mapping for one specific service. A Service List Boundary gives Service Lists the same perks โจ
Location-based service providers, and also Public Safety Answering Points (PSAPs), only serve a specific geographic region ๐ That's why LoST defines the Service Boundary, which tells you the service region for a specific service URL. The catch is that not every service is available everywhere ๐ฌ Clients can find out which services are available for a particular location with the <listServicesByLocation> query in LoST. The server sends back a list of services available at that spot, but it doesn't say anything about the geographic region where that Service List is valid. So a client might grab every available service with <listServicesByLocation>, then move somewhere else (while refreshing the service mappings) and never notice that new services showed up ๐ Here's an imaginary emergency-calling example to show the problem:
The client powers up, does location determination (getting location A), and makes an initial <listServicesByLocation> query for location A, asking for urn:services:sos.
The LoST server sends back this list of services:
urn:service:sos.police
urn:service:sos.ambulance
urn:service:sos.fire
The client does the initial LoST mapping and gets the dialstrings for each service. Then it moves around, refreshing the individual service mappings when needed as the Service Boundary says to. But when it arrives at location B (close to a mountain), the service sos.mountainrescue, which wasn't available at location A, becomes available ๐๏ธ The client only has to refresh the mappings for the services it found at the start, so it never detects the new one. That means the client doesn't know the dialstring for mountain rescue. So when the user dials the mountain-rescue dialstring, the client can't recognize it as an emergency call, and the emergency call may fail altogether ๐ญ
A quick note: the Service Boundary (the service region for one individual service) can't be treated as the region where a specific Service List is valid. The Service List can change even inside another service's Service Boundary. For example, the ambulance mapping is valid for a whole state, but in one part of that state there's an extra mountain-rescue service ๐
So there are two ways to deal with this:
- Clients keep polling for the Service List, even though it may not have changed.
- The server sends a message containing boundary information that tells the client the Service List doesn't change inside this area.
2. Terminology ๐
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. Those are the official rules-words, so read them carefully ๐
3. LoST Extensions ๐ง
This section describes the extensions to the LoST protocol that are needed to support the Service List Boundary in a similar way to the Service Boundary ๐ฆ Extensions defined in this document are declared in the new XML namespace urn:ietf:params:xml:ns:lost1:slb.
3.1. Extensions to <listServicesByLocation> โจ
okay so the <listServicesByLocation> query can carry an extra <serviceListBoundaryRequest> element ๐. that's how you ask for the boundary of the Service List for whatever location you sent, and you can get it back either by value or by reference ๐
. in this example the type attribute of <serviceListBoundaryRequest> is set to "value" ๐ฆ:
<?xml version="1.0" encoding="UTF-8"?>
<listServicesByLocation
xmlns="urn:ietf:params:xml:ns:lost1"
xmlns:gml="http://www.opengis.net/gml"
xmlns:slb="urn:ietf:params:xml:ns:lost1:slb"
recursive="true">
<location id="5415203asdf548" profile="civic">
<civicAddress xml:lang="en"
xmlns="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr">
<country>AT</country>
<A1>Lower Austria</A1>
<A2>Bruck an der Leitha</A2>
<A3>Wolfsthal</A3>
<RD>Hauptplatz</RD>
<HNO>1</HNO>
<PC>2412</PC>
</civicAddress>
</location>
<service>urn:service:sos</service>
<slb:serviceListBoundaryRequest type="value"/>
</listServicesByLocation>
the response then has one extra <serviceListBoundary> element tucked in ๐ธ. look at this glow-up:
<?xml version="1.0" encoding="UTF-8"?>
<listServicesByLocationResponse
xmlns="urn:ietf:params:xml:ns:lost1"
xmlns:slb="urn:ietf:params:xml:ns:lost1:slb">
<serviceList>
urn:service:sos.ambulance
urn:service:sos.fire
urn:service:sos.gas
urn:service:sos.mountain
urn:service:sos.poison
urn:service:sos.police
</serviceList>
<path>
<via source="resolver.example"/>
<via source="authoritative.example"/>
</path>
<locationUsed id="5415203asdf548"/>
<slb:serviceListBoundary profile="civic"
expires="2012-01-01T00:00:00Z">
<civicAddress xml:lang="en"
xmlns="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr">
<country>AT</country>
<A1>Lower Austria</A1>
</civicAddress>
</slb:serviceListBoundary>
</listServicesByLocationResponse>
so this response is saying the Service List is valid for Lower Austria ๐๏ธ. the client only needs to send that <listServicesByLocation> request again when it leaves Lower Austria ๐๐จ. the actual services can still have their own service boundaries though, so don't get too comfy ๐. and the expires attribute tells you the exact absolute time when this Service List stops being valid โฐ.
the response MAY contain multiple <serviceListBoundary> elements for alternative representation ๐, each one describing the boundary in a specific location profile. just know that multiple locations inside a single <serviceListBoundary> element are considered to be additive โ.
you can also ask for the boundary by reference, by setting the type attribute of <serviceListBoundaryRequest> to "reference" ๐. that's the default if you leave the attribute out, btw ๐. the response then carries a <serviceListBoundaryReference> element with a serviceListKey attribute (more on that in Section 3.2), like this:
<?xml version="1.0" encoding="UTF-8"?>
<listServicesByLocationResponse
xmlns="urn:ietf:params:xml:ns:lost1"
xmlns:slb="urn:ietf:params:xml:ns:lost1:slb">
<serviceList>
urn:service:sos.ambulance
urn:service:sos.fire
urn:service:sos.gas
urn:service:sos.mountain
urn:service:sos.poison
urn:service:sos.police
</serviceList>
<path>
<via source="resolver.example"/>
<via source="authoritative.example"/>
</path>
<locationUsed id="5415203asdf548"/>
<slb:serviceListBoundaryReference
source="authoritative.example"
serviceListKey="123567890123567890123567890" />
</listServicesByLocationResponse>
3.2. Retrieving the <serviceListBoundary> via <getServiceListBoundary> ๐ง
to get the boundary that goes with a specific serviceListKey, the client sends a <getServiceListBoundary> request to the server named in the source attribute of the <serviceListBoundaryReference> element ๐ฎ. it works a lot like the <getServiceBoundary> request, so if you know that one you're already halfway there ๐.
here's what it looks like:
<?xml version="1.0" encoding="UTF-8"?>
<getServiceListBoundary
xmlns="urn:ietf:params:xml:ns:lost1:slb"
serviceListKey="123567890123567890123567890"/>
and this is the LoST server's answer ๐:
<?xml version="1.0" encoding="UTF-8"?>
<getServiceListBoundaryResponse
xmlns="urn:ietf:params:xml:ns:lost1:slb">
<serviceListBoundary profile="civic" expires="2012-01-01T00:00:00Z">
<civicAddress xml:lang="en"
xmlns="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr">
<country>AT</country>
<A1>Lower Austria</A1>
</civicAddress>
</serviceListBoundary>
<path xmlns="urn:ietf:params:xml:ns:lost1">
<via source="resolver.example"/>
<via source="authoritative.example"/>
</path>
</getServiceListBoundaryResponse>
so the serviceListKey uniquely identifies a Service List Boundary, the same way the key does for a Service Boundary (see Section 5.6 of RFC 5222) ๐. the serviceListKey is a random token with at least 128 bits of entropy [RFC4086], and it can be assumed to be globally unique ๐. but here's the important bit: whenever the boundary changes, a new serviceListKey MUST be assigned ๐จ.
Note: Since LoST does not define an attribute to indicate which location profile the client understands in a<getServiceBoundary>request, this document also does not define one for the<getServiceListBoundary>request. ๐
3.3. <serviceListBoundary> ๐บ๏ธ
for a particular <listServicesByLocation> query, the Service List Boundary info that comes back tells you that every service identifier in the <serviceList> element is the same inside this geographic region ๐. a Service List Boundary can be made of geometric shapes (in civic and geodetic location format both), and it can be non-contiguous, just like the Service Boundary ๐งฉ.
the mapping of the specific services inside the Service List Boundary may still be different at different locations ๐.
the server MAY return the boundary information in multiple location profiles, but it MUST use at least one profile that the client used in the request ๐ซถ. that's how the client can be sure it can actually process the boundary info.
there's no need to put boundary information in a <listServicesResponse> ๐
โโ๏ธ. the <listServices> request is purely for diagnostic purposes and doesn't contain any location information at all, so there's no boundary to calculate.
also, the Service List Boundary is OPTIONAL ๐คทโโ๏ธ, and the LoST server may or may not return it, based on its local policy, the same as with the Service Boundary. but honestly, especially for emergency services, the Service List Boundary might be crucial so that moving clients don't miss changes in the available services ๐๐.
3.4. Implementation Considerations ๐ ๏ธ
the subsections below talk about implementation issues for the LoST server and client when it comes to Service List Boundary support ๐.
3.4.1. Server Side ๐ฅ๏ธ
the mapping architecture and framework [RFC5582] says that each tree announces its coverage region (for one type of service, e.g., sos.police) to one or more forest guides ๐ณ. forest guides peer with each other and sync their data. so a forest guide knows everything (all the services and their coverage regions), which means it has enough info to answer a <listServicesByLocation> query and to add the <serviceListBoundary> or <serviceListBoundaryReference> too ๐
.
working out the largest possible area where the Service List stays the same might be a seriously complex task ๐ตโ๐ซ. an alternative is to return smaller areas that are easier to compute. the downside is that some unnecessary queries to the LoST server will happen, but the main purpose of the Service List Boundary is still achieved: never missing a change of available services โ . so the server operator can pick a reasonable trade-off between the effort to generate the boundary info and the queries saved on the LoST server โ๏ธ.
for example, in some countries the offered services may differ in adjacent counties (or districts, cantons, states, etc.) ๐๏ธ. their borders may be suitable as a Service List Boundary too, even though some adjacent counties offer the same services.
other countries might have different structures, and the Service List Boundary can be generated by other rules too, as long as the client can notice any change in the Service List when it moves ๐งญ.
3.4.2. Client Side ๐ฑ
a mobile client that already implements LoST and evaluates the <serviceBoundary> has almost everything it needs to use the Service List Boundary ๐ฅน. because the integration into LoST follows the concept of the <serviceBoundary> (and uses the same location profiles too), only the extra <serviceListBoundary> needs to be evaluated. whenever the client moves outside a Service List Boundary, it does a new <listServicesByLocation> query with the new location information to figure out whether the available services changed ๐.
4. Security and Privacy Considerations ๐
security considerations for LoST are covered in [RFC5222] ๐ก๏ธ. this document extends LoST to also carry Service List Boundaries (and requests for them). these boundaries are calculated by the server from the individual Service Boundaries and sent to clients when local policy allows it ๐. so they're generally treated as having the same level of sensitivity as Service Boundaries, and therefore the same access control and confidentiality requirements as the base LoST protocol ๐. as a result, the security measures built into the base LoST specification [RFC5222] are considered to provide sufficient protection for LoST messages that use the Service List Boundary extension ๐โจ.
5. IANA Considerations ๐
IANA has taken two actions: an XML schema registration and a namespace registration, according to the description in the following sections ๐ฆ.
5.1. Relax NG Schema Registration ๐โจ
IANA registered this Relax NG Schema in the IETF XML Registry [RFC3688], and the registrant is the IETF ECRIT Working Group plus Karl Heinz Wolf (karlheinz.wolf@nic.at). It's giving "schema drop" ๐
The URI for it is urn:ietf:params:xml:schema:lost1:slb.
BEGIN
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
xmlns:slb="urn:ietf:params:xml:ns:lost1:slb"
ns="urn:ietf:params:xml:ns:lost1"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="lost.rng">
<!-- redefinition of LoST elements -->
<start>
<choice>
<ref name="findService"/>
<ref name="listServices"/>
<ref name="listServicesByLocation"/>
<ref name="getServiceBoundary"/>
<ref name="findServiceResponse"/>
<ref name="listServicesResponse"/>
<ref name="listServicesByLocationResponse"/>
<ref name="getServiceBoundaryResponse"/>
<ref name="errors"/>
<ref name="redirect"/>
<!-- New in RFC 6197 -->
<ref name="getServiceListBoundary"/>
<ref name="getServiceListBoundaryResponse"/>
</choice>
</start>
<define name="listServicesByLocation">
<element name="listServicesByLocation">
<ref name="requestLocation"/>
<ref name="commonRequestPattern"/>
<optional>
<attribute name="recursive">
<data type="boolean"/>
<a:defaultValue>true</a:defaultValue>
</attribute>
</optional>
<!-- New in RFC 6197 -->
<optional>
<ref name="serviceListBoundaryRequest"/>
</optional>
</element>
</define>
<define name="listServicesByLocationResponse">
<element name="listServicesByLocationResponse">
<ref name="serviceList"/>
<ref name="commonResponsePattern"/>
<ref name="locationUsed"/>
<!-- New in RFC 6197 -->
<optional>
<choice>
<ref name="serviceListBoundary"/>
<ref name="serviceListBoundaryReference"/>
</choice>
</optional>
</element>
</define>
</include>
<define name="serviceListBoundaryRequest">
<element name="slb:serviceListBoundaryRequest">
<optional>
<attribute name="type">
<choice>
<value>value</value>
<value>reference</value>
</choice>
<a:defaultValue>reference</a:defaultValue>
</attribute>
</optional>
</element>
</define>
<define name="serviceListBoundary">
<oneOrMore>
<element name="slb:serviceListBoundary">
<optional>
<ref name="expires"/>
</optional>
<ref name="locationInformation"/>
<ref name="extensionPoint"/>
</element>
</oneOrMore>
</define>
<define name="serviceListBoundaryReference">
<element name="slb:serviceListBoundaryReference">
<ref name="source"/>
<attribute name="serviceListKey">
<data type="token"/>
</attribute>
<ref name="extensionPoint"/>
</element>
</define>
<define name="getServiceListBoundary">
<element name="slb:getServiceListBoundary">
<attribute name="serviceListKey">
<data type="token"/>
</attribute>
<ref name="extensionPoint"/>
</element>
</define>
<define name="getServiceListBoundaryResponse">
<element name="slb:getServiceListBoundaryResponse">
<ref name="serviceListBoundary"/>
<ref name="path"/>
<ref name="extensionPoint"/>
</element>
</define>
</grammar>
END
5.2. Namespace Registration ๐
IANA also registered a namespace under the LoST namespace defined in [RFC5222], again in the IETF XML Registry [RFC3688]. The URI is urn:ietf:params:xml:ns:lost1:slb, and the registrant is, you guessed it, the IETF ECRIT Working Group plus Karl Heinz Wolf (karlheinz.wolf@nic.at). ๐ฆ
Here's the XML for it:
BEGIN
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type"
content="text/html;charset=iso-8859-1"/>
<title>LoST Service List Boundary Namespace</title>
</head>
<body>
<h1>Namespace for the LoST Service List Boundary</h1>
<h2>urn:ietf:params:xml:ns:lost1:slb</h2>
<p>See <a href="http://www.rfc-editor.org/rfc/rfc6197.txt">
RFC 6197</a>.</p>
</body>
</html>
END
6. Acknowledgements ๐ซถ
The author gives a big shoutout to Henning Schulzrinne for talking the document through with them ๐. Martin Thomson, Richard Barnes, and Roger Marshall also get major credit ๐ for their super valuable input and text suggestions during the working group Last Call. And Joshua Bell from the Applications Area Review Team deserves a standing ovation ๐ for helping out with Relax NG. ๐ธ
7. References ๐
7.1. Normative References
[RFC5222] Hardie, T., Newton, A., Schulzrinne, H., and H.
Tschofenig, "LoST: A Location-to-Service Translation
Protocol", RFC 5222, August 2008.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
January 2004.
[RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker,
"Randomness Requirements for Security", BCP 106, RFC 4086,
June 2005.
7.2. Informative References
[RFC5582] Schulzrinne, H., "Location-to-URL Mapping Architecture and
Framework", RFC 5582, September 2009.
Author's Address ๐
Karl Heinz Wolf
nic.at GmbH
Karlsplatz 1/2/9
Wien A-1010
Austria
Phone: +43 1 5056416 37
EMail: karlheinz.wolf@nic.at
URI: http://www.nic.at/
๐ฆ where this page comes from
- ietf: rfc6197 2011-04
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms