SLPv2 vendor extensions: Vendor Extensions for Service Location Protocol, Version 2
How vendors can add their own features to Service Location Protocol version 2 without clashing with anyone else.
Guttman, E., "Vendor Extensions for Service Location Protocol, Version 2", RFC 3224, DOI 10.17487/RFC3224, January 2002, <https://www.rfc-editor.org/info/rfc3224>.
@misc{rfc3224,
series = {Request for Comments},
number = 3224,
howpublished = {RFC 3224},
publisher = {RFC Editor},
doi = {10.17487/RFC3224},
url = {https://www.rfc-editor.org/info/rfc3224},
author = {E. Guttman},
title = {{Vendor Extensions for Service Location Protocol, Version 2}},
pagetotal = 10,
year = 2002,
month = jan,
} RFC text
Contents
Network Working Group E. Guttman
Request for Comments: 3224 Sun Microsystems
Updates: 2608 January 2002
Category: Standards Track
Vendor Extensions for Service Location Protocol, Version 2
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2002). All Rights Reserved.
Abstract
This document specifies how the features of the Service Location
Protocol, Version 2 allow for vendor extensibility safely, with no
possibility of collisions. The specification introduces a new SLPv2
extension: The Vendor Opaque Extension. While proprietary protocol
extensions are not encouraged by IETF standards, it is important that
they not hinder interoperability of compliant implementations when
they are undertaken. This document udpates RFC 2608, "The Service
Location Protocol."
Table of Contents
1.0 Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1 Terminology . . . . . . . . . . . . . . . . . . . . . . 2
2.0 Enterprise Numbers . . . . . . . . . . . . . . . . . . . . . 3
3.0 Naming Authorities . . . . . . . . . . . . . . . . . . . . . 3
4.0 Vendor Defined Attributes . . . . . . . . . . . . . . . . . 4
5.0 Vendor Opaque Extension . . . . . . . . . . . . . . . . . . 5
5.1 Vendor Opaque Extension Format . . . . . . . . . . . . . . 6
5.2 Example: Acme Extension for UA Authentication . . . . . . . 6
6.0 Extensions Requiring IETF Action . . . . . . . . . . . . . . 7
7.0 IANA Considerations . . . . . . . . . . . . . . . . . . . . 7
8.0 Security Considerations . . . . . . . . . . . . . . . . . . 8
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . 8
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 9
Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 10
1.0 Introduction
The Service Location Protocol, Version 2 [1] defines a number of
features which are extensible. This document clarifies exactly which
mechanisms can be used to that end (Sections 3-5) and which cannot
(Section 6). This document updates [1], specifying conventions that
ensure the protocol extension mechanisms in the SLPv2 specification
will not possibly have ambiguous interpretations.
This specification introduces only one new protocol element, the
Vendor Opaque Extension. This Extension makes it possible for a
vendor to extend SLP independently, once the vendor has registered
itself with IANA and obtained an Enterprise Number. This is useful
for vendor-specific applications.
Vendor extensions to standard protocols come at a cost.
- Vendor extensions occur without review from the community.
They may not make good engineering sense in the context of the
protocol they extend, and the engineers responsible may
discover this too late.
- Vendor extensions preclude interoperation with compliant but
non-extended implementations. There is a real danger of
incompatibility if different implementations support different
feature sets.
- By extending SLPv2 privately, ubiquitous automatic
configuration is impossible, which is the primary benefit of a
standard service discovery framework.
For these reasons, registration of service templates with IANA is
strongly encouraged! This process is easy and has proved to be rapid
(taking less than 2 weeks in most cases).
1.1 Terminology
In this document, the key words "MAY", "MUST", "MUST NOT",
"optional", "recommended", "SHOULD", and "SHOULD NOT", are to be
interpreted as described in [2].
Service Location Protocol terminology is defined in [1]. IANA
registration terminology is defined in [5].
2.0 Enterprise Number
Enterprise Numbers are used to distinguish different vendors in IETF
protocols. Vendor Extensions to SLPv2 SHOULD use these values to
avoid any possibility of a name space collision. Each vendor is
responsible for ensuring that vendor extensions under their own
authority are non-conflicting.
IANA maintains a repository of all 'SMI Network Management Private
Enterprise Codes,' whose prefix is
iso.org.dod.internet.private.enterprise (1.3.6.1.4.1). The number
which follows is unique and may be registered by an on-line form [3].
The complete up-to-date list of Enterprise Numbers is maintained by
IANA [3].
3.0 Naming Authorities
Naming Authorities are defined by SLPv2 [1] as an agency or group
which catalogues Service Types and attributes.
A Service Type is a string representing a service which can be
discovered by SLPv2. Attributes may be associated with a particular
Service Type which is advertised by SLPv2.
Service Type strings and service attributes may be registered with
IANA by creating a Service Template [4]. The template is included in
an internet draft and an email message is sent to srvloc-
list@iana.org requesting that the template be included in the Service
Template registry. In this case, the naming authority for the
service type is IANA.
It is also possible for a Vendor to create their own naming
authority. In this case, any service type or attribute may be used.
SLPv2 allows arbitrary naming authorities to coexist. To use an
explicit naming authority, a vendor simply employs their Enterprise
Number as a naming authority. For example, for the following
(fictitious) Enterprise Number
9999 Acme, Inc. Erik Guttman femur@example.com
the Naming Authority string to use would be "9999". A service: URL
which used this Naming Authority to advertise a Roadrunner Detector
service could look like
service:roadrunner-detector.9999://example.com:9341
Service types which are defined under a naming authority based on an
Enterprise Number are guaranteed not to conflict with other service
type strings which mean something entirely different. That is also
true of attributes defined for service types defined under a naming
authority.
To create a safe naming authority with no possibility of name
collisions, a vendor SHOULD use their Enterprise Number as a naming
authority.
4.0 Vendor Defined Attributes
SLPv2 [1] suggests that
Non-standard attribute names SHOULD begin with "x-", because no
standard attribute name will ever have those initial characters.
It is possible that two non-standard attributes will conflict that
both use the "x-" prefix notation. For that reason, vendors SHOULD
use "x-" followed by their Enterprise Number followed by a "-" to
guarantee that the non-standard attribute name's interpretation is
not ambiguous.
For example, Acme, Inc.'s Enterprise Number is 9999. Say the Service
Template for NetHive (a fictitious game) was:
------------------------------------------------------------
template-type=NetHive
template-version=1.0
template-description=
The popular NetHive game.
template-url-syntax=
url-path = ; There is no path for a NetHive service URL.
features= string M O
# The list of optional features the NetHive server supports.
secure session, fast mode
current-users= string M
# The list of users currently playing
------------------------------------------------------------
Acme's server advertises a feature which is not on the list of
standard features, "x-9999-cheat-mode". Only an Acme client would
request this attribute to discover servers, since it is not standard.
5.0 Vendor Opaque Extension
SLPv2 [1] defines a protocol extensibility mechanism. SLPv2
Extensions are added at the end of a message and have the following
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Extension ID | Next Extension Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Offset, contd.| Extension Data /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The format of the Extension Data depends on the Extension ID. Refer
to [4] for a full description of different mechanisms available for
registration of values with IANA.
SLPv2 may be extended in any of three ways.
(1) Anyone may request the designated expert for SLP to register a
new extension ID with IANA. Send requests to the
svrloc-list@iana.org.
It is recommended that an internet draft specifying this
extension be published, with the intention of publishing the
document as an Informational RFC. This way others can use the
extension as well. This is not a 'vendor extension' - rather
this is the preferred way of extending the protocol in a vendor
neutral manner.
If no specification is published and the extension is intended
for vendor specific use only - the 'Vendor Extension' option
below probably makes more sense than assigning an extension ID.
(2) An experimental extension may be done using the range 0x8000 to
0x8FFF. There is always the risk, however, that another vendor
will use the same ID, since these IDs are not registered.
(3) A Vendor Extension may be used. This extension allows a Vendor
to define their own extensions which are guaranteed to have a
unique interpretation. It is OPTIONAL to implement.
5.1. Vendor Opaque Extension 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Extension ID = 0x0003 | Next Extension Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Offset, contd.| Enterprise Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ent. #, contd.| Extension Data /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The Enterprise Number is included in the Extension as a 4 byte
unsigned integer value. The Extension Data following is guaranteed
to have an unambiguous interpretation determined by the vendor.
5.2 Example: Acme Extension for UA Authentication
The Acme Corporation, whose Enterprise Number is 9999, can define an
extension to SLP. In this example, Acme creates one such extension
to create an application level access control to service information.
This would allow replies to be sent only to clients who could
authenticate themselves.
The engineers at Acme give the Extension Data the following form:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|ACME Ext ID = 1| Client ID Length | Client ID ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authenticator ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ACME Ext ID: The ACME engineers decided to define the first byte of
their extension data as an extension ID field. In the future, ACME
may decide to define more than this extension. Since there is 8 bits
in the ID field, ACME can define up to 256 different extensions. If
ACME were to omit this field and begin directly with their 'Extension
for UA Authentication', they would only be able to define one ACME
specific SLP extension. For the 'Extension for UA Authentication,'
the ACME Extension ID is set to 1. This ID has to be managed within
ACME, to make sure that each new extension they invent has a unique
ID assigned to it.
Client ID Length: This declares how many bytes of Client ID data
follow.
Client ID: The Acme application user ID.
Timestamp: # of seconds since January 1, 2000, 0:00 GMT.
Authenticator: a 16 byte MD5 digest [6] calculated on the following
data fields, concatenated together
- UA request bytes, including the header, but not any extensions.
- UA SECRET PASS PHRASE
- Acme UA Authentication Extension - Client ID
- Acme UA Authentication Extension - Timestamp
The SA or DA which receives this extension and supports this
extension will check if it (1) recognizes the Client ID, (2) has an
associated SECRET PASS PHRASE for it, (3) whether upon calculating an
MD5 digest over the same data as listed above it arrives at the same
Authenticator value as included in the extension. If all 3 of these
steps succeed, the UA has been authenticated.
Note this example is for explanatory purposes only. It would not
work well in practice. It requires a shared secret be configured in
SAs and DAs, for every UA. Furthermore, the UA secret pass phrase
would be susceptible to a dictionary attack.
6.0 Extensions Requiring IETF Action
Modification or extension of any feature of SLPv2 whatsoever, aside
from those listed in Sections 3-5 of this document, requires a
standards action as defined in [1].
Terminology and procedures for IETF Actions related to registration
of IDs with IANA are defined in [5]. Existing SLPv2 extensions
assignments are registered with IANA [3].
7.0 IANA Considerations
This document clarifies procedures described in other documents [1]
[4]. The Vendor Opaque Extension ID has already been registered [3].
No additional IANA action is required for publication of this
document.
8.0 Security Considerations
Vendor extensions may introduce additional security considerations
into SLP.
This memo describes mechanisms which are standardized elsewhere [1]
[4]. The only protocol mechanism described in this document (see
Section 5 above) is no less secure than 'private use' extensions
defined in SLPv2 [1].
The example in Section 5.2 above shows how Vendor Opaque Extensions
can be used to include an access control mechanism to SLP so that SAs
can enforce an access control policy using an authentication
mechanism. This is merely an example and protocol details were
intentionally not provided. A vendor could, however, create a
mechanism similar to this one and provide additional security
services to SLPv2 in the manner indicated in the example.
Acknowledgements
I thank the IESG, for their usual persistence and attention to
detail.
References
[1] Guttman, E., Perkins, C., Veizades, J. and M. Day, "Service
Location Protocol, Version 2", RFC 2608, July 1999.
[2] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", BCP 14, RFC 2119, March 1997.
[3] http://www.iana.org/numbers.html
[4] Guttman, E., Perkins, C. and J. Kempf, "Service Templates and
URLs", RFC 2609, July 1999.
[5] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA
Considerations Section in RFCs", BCP 26, RFC 2434, October
1998.
[6] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April
1992.
Author's Address
Erik Guttman
Sun Microsystems
Eichhoelzelstr. 7
74915 Waibstadt
Germany
Phone: +49 7263 911 701
Messages: +49 6221 356 202
EMail: erik.guttman@sun.com
Full Copyright Statement
Copyright (C) The Internet Society (2002). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS 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.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.
AI ELI5
On this page
§1Why Vendor Extensions Need Rules
The Service Location Protocol, Version 2 (SLPv2, RFC 2608) has several features that can be extended. This document clarifies exactly which mechanisms may be used for that and which may not, and it updates RFC 2608 with conventions that stop extension mechanisms from having ambiguous meanings.
It adds only one new protocol element, the Vendor Opaque Extension. A vendor that has registered with IANA and obtained an Enterprise Number can use it to extend SLP on its own, which is useful for vendor-specific applications.
The RFC is frank about the cost. Vendor extensions are not reviewed by the community, they prevent interoperation with compliant but non-extended implementations, and private extensions make ubiquitous automatic configuration impossible. For these reasons it strongly encourages registering service templates with IANA, a process it says usually takes less than 2 weeks.
Companies sometimes want to add their own special tricks. That is allowed, but it can make their gadgets stop understanding other gadgets, so there are rules to keep things tidy.
§2Enterprise Numbers and Naming Authorities
Enterprise Numbers distinguish vendors in IETF protocols. Vendor extensions to SLPv2 SHOULD use them to avoid any name space collision, and each vendor is responsible for keeping its own extensions non-conflicting. IANA keeps the list of 'SMI Network Management Private Enterprise Codes' under 1.3.6.1.4.1, and a number can be registered through an on-line form.
A Naming Authority is an agency or group that catalogues service types and attributes. Service types and attributes can be registered with IANA by writing a Service Template, in which case IANA is the naming authority. A vendor can instead act as its own naming authority by using its Enterprise Number as the authority string. Service types and attributes defined that way are guaranteed not to conflict with others.
The RFC's fictitious example uses Enterprise Number 9999 for Acme, Inc., giving a URL such as service:roadrunner-detector.9999://example.com:9341.
Each company gets a unique number, like a locker number. If you put your number on your labels, nobody can mistake your label for someone else's.
§3Vendor Defined Attributes
SLPv2 suggests that non-standard attribute names SHOULD begin with x-, since no standard attribute name will ever start that way. Two vendors could still both pick the same x- name, so this RFC says vendors SHOULD write the x- prefix, then their Enterprise Number, then a hyphen, so the meaning is never ambiguous.
In the RFC's example, a Service Template for a fictitious game called NetHive lists standard features. Acme's server also advertises x-9999-cheat-mode. Only an Acme client would ask for that attribute, because it is not standard.
If you invent a secret nickname, put your locker number in front of it. Then your nickname cannot be confused with a friend's.
§4The Vendor Opaque Extension
SLPv2 extensions are added at the end of a message. Each starts with a 16-bit Extension ID and a Next Extension Offset, followed by Extension Data whose format depends on the ID. The RFC lists three ways to extend SLPv2.
- Ask the designated expert for SLP to register a new extension ID with IANA. An Internet Draft is recommended, ideally leading to an Informational RFC. This is the preferred vendor-neutral way.
- Use an experimental ID in the range
0x8000to0x8FFF. These IDs are not registered, so another vendor might pick the same one. - Use the Vendor Extension, which gives a vendor extensions with a guaranteed unique interpretation. Implementing it is OPTIONAL.
The Vendor Opaque Extension uses Extension ID 0x0003. After the offset comes the Enterprise Number as a 4-byte unsigned integer, then the Extension Data, which the vendor alone defines.
There is a special envelope with the company's locker number on the front. Whatever is inside is for that company only, and everyone else just ignores it.
| Field | Name | Size | Value | Description |
|---|---|---|---|---|
EXT-ID | Extension ID | 2 bytes | 0x0003 | Set to 0x0003 for the Vendor Opaque Extension. |
NEXT-OFFSET | Next Extension Offset | 3 bytes | Offset to the next extension, if any. | |
ENTERPRISE | Enterprise Number | 4 bytes | The vendor's IANA Enterprise Number, a 4-byte unsigned integer. | |
EXT-DATA | Extension Data | 1 byte | Vendor-defined data with an unambiguous meaning set by the vendor (variable length). |
§5Example: Acme Authentication Extension
The RFC sketches how Acme (Enterprise Number 9999) might use the extension for application-level access control, so replies go only to clients who can authenticate. Acme's extension data starts with a one-byte ACME Ext ID, set to 1 for this extension, which would let Acme define up to 256 different extensions. Next come a Client ID Length, the Client ID, a Timestamp (seconds since January 1, 2000, 0:00 GMT) and an Authenticator.
The Authenticator is a 16-byte MD5 digest over the request bytes (header but no extensions), a secret pass phrase, the Client ID and the Timestamp. An SA or DA receiving it checks that it recognizes the Client ID, has a pass phrase for it, and computes the same digest.
The RFC says this is for explanation only and would not work well in practice: it needs a shared secret configured for every UA, and the pass phrase would be open to a dictionary attack.
Acme invents a secret handshake: show your name, the time and a scrambled stamp made with a shared password. The RFC admits it is only a made-up example.
§6Limits, IANA and Security
Modifying or extending any other feature of SLPv2 aside from the mechanisms above requires a standards action. The Vendor Opaque Extension ID has already been registered, so no IANA action is needed for this document.
On security, the RFC notes that vendor extensions may introduce new security considerations. The only mechanism it describes is no less secure than the 'private use' extensions already defined in SLPv2. The Acme example shows how a vendor could add an access control mechanism, but protocol details were intentionally left out.
Anything beyond these tidy rules needs the grown-ups to agree first. Adding your own extras can bring new risks, so be careful.