< draft-ietf-malloc-api-06.txt   draft-ietf-malloc-api-07.txt >
Network Working Group Ross Finlayson Network Working Group Ross Finlayson
Internet-Draft LIVE.COM Internet-Draft LIVE.COM
Expire in six months 1999.06.25 Expire in six months 1999.08.22
An Abstract API for Multicast Address Allocation An Abstract API for Multicast Address Allocation
<draft-ietf-malloc-api-06.txt> <draft-ietf-malloc-api-07.txt>
1. Status of this Memo 1. Status of this Memo
This document is an Internet-Draft and is in full conformance This document is an Internet-Draft and is in full conformance
with all provisions of Section 10 of RFC2026. with all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as other groups may also distribute working documents as
Internet-Drafts. Internet-Drafts.
skipping to change at line 68 skipping to change at line 68
Server" network protocol (MADCAP) [1][7]. Alternatively, an Server" network protocol (MADCAP) [1][7]. Alternatively, an
"Address Allocation Server" implementation might be co-located (along "Address Allocation Server" implementation might be co-located (along
with one or more applications) on an end node, in which case some other, with one or more applications) on an end node, in which case some other,
internal, mechanism might be used to access the server. In either case, internal, mechanism might be used to access the server. In either case,
however, the abstract service interface (and, presumably, any specific however, the abstract service interface (and, presumably, any specific
APIs) would remain the same. APIs) would remain the same.
The remainder of this document describes the abstract interface. The remainder of this document describes the abstract interface.
Note that this interface is intended only for the allocation of dynamic Note that this interface is intended only for the allocation of dynamic
multicast addresses, as used by the normal multicast service model [2]. multicast addresses, as used by the traditional multicast service model [2].
Future multicast service models might allocate or assign multicast Future multicast service models might allocate or assign multicast
addresses in other ways, but this is outside the scope of this document. addresses in other ways, but this is outside the scope of this document.
4. Abstract Data Types 4. Abstract Data Types
The interface described below uses the following abstract data types: The interface described below uses the following abstract data types:
- AddressFamily: e.g., IPv4 or IPv6 - AddressFamily: e.g., IPv4 or IPv6
- MulticastAddress: An actual multicast address (i.e., that could - MulticastAddress: An actual multicast address (i.e., that could
subsequently subsequently
be used as the destination of a datagram) be used as the destination of a datagram)
- MulticastAddressSet: A set of "MulticastAddress"es - MulticastAddressSet: A set of "MulticastAddress"es
- LanguageTag: The code for a (human) language, as defined in [4] - LanguageTag: The code for a (human) language, as defined in [4]
- Scope: An "administrative scope" [3] from which a multicast address is - Scope: An "administrative scope" [3] from which multicast addresses
to be allocated. Each scope is a "MulticastAddressSet", are to be allocated. Each scope is a "MulticastAddressSet",
with an associated set of (character-string) names - indexed by with an associated set of (character-string) names - indexed by
"LanguageTag". (Each language tag has at most one corresponding "LanguageTag". (Each language tag has at most one corresponding
name, name,
per scope.) For each scope, a (language tag, name) pair may be per scope.) For each scope, a (language tag, name) pair may be
defined to be the 'default' name for this scope. (See the section defined to be the 'default' name for this scope. (See the section
"Querying the name of a scope" below.) "Querying the name of a scope" below.)
(An implementation of this abstract data type might also include (An implementation of this abstract data type might also include
other other
information, such as a default TTL for the scope.) information, such as a default TTL for the scope.)
- Time: An (absolute) event time. This is used for specifying the - Time: An (absolute) event time. This is used for specifying the
"lifetime" of a multicast address: the period of time during which "lifetime" of multicast addresses: the period of time during which
an allocated multicast addresses are guaranteed to be available.
allocated multicast address is guaranteed to be availabile. (It is (It is also used to specify the desired start time for an
also used to specify the desired start time for an
"advance allocation".) "advance allocation".)
Note that a concrete API might prefer to specify some of these Note that a concrete API might prefer to specify some of these
times as relative times (i.e., relative to the current time-of-day), times as relative times (i.e., relative to the current time-of-day),
rather than absolute time. (Relative times have the advantage of rather than absolute time. (Relative times have the advantage of
not requiring clock synchronization.) not requiring clock synchronization.)
- Lease: A compound data type that describes the result of a (successful) - Lease: A compound data type that describes the result of a (successful)
multicast address allocation. It consists of: multicast address allocation. It consists of:
- [MulticastAddressSet] The set of addresses that were allocated; - [MulticastAddressSet] The set of addresses that were allocated;
- [AddressFamily] The address family of these addresses - [AddressFamily] The address family of these addresses
- [Time] The lifetime of these addresses (the same for each address) - [Time] The lifetime of these addresses (the same for each address)
- [Time] The "start time" of the allocation. (See the discussion of - [Time] The "start time" of the allocation. (See the discussion of
"advance allocation" below.) "advance allocation" below.)
(A concrete API would likely also include a (A concrete API would likely also include a
MADCAP "Client Identifier" [1].) MADCAP "Lease Identifier" [1].)
- NestingRelationship: A binary data type that describes whether - NestingRelationship: A binary data type that describes whether
or not two scopes nest. Two scopes nest if traffic sent or not two scopes nest. Two scopes nest if traffic sent
sent to a multicast group within one scope could be seen sent to a multicast group within one scope could be seen
by all hosts present within the other scope were they to by all hosts present within the other scope were they to
join the multicast group within the first scope. This value join the multicast group within the first scope. This value
would be "False" for overlapping scopes where only some would be "False" for overlapping scopes where only some
(or none) of the hosts within the second scope could see (or none) of the hosts within the second scope could see
traffic sent to an address due to the presence of an traffic sent to an address due to the presence of an
administratively scoped boundary. In cases where the first administratively scoped boundary. In cases where the first
and second scopes are topologically identical this value and second scopes are topologically identical this value
would be "True." would be "True."
- Status: A result code. - Status: A result code.
5. The Abstract Interface 5. The Abstract Interface
Allocating a multicast address: 5.1 Allocating multicast addresses:
alloc_multicast_addr(in AddressFamily family, alloc_multicast_addr(in AddressFamily family,
in Scope scope, in Scope scope,
in Integer minDesiredAddresses, in Integer minDesiredAddresses,
in Integer maxDesiredAddresses, in Integer maxDesiredAddresses,
in Time minDesiredStartTime, in Time minDesiredStartTime,
in Time maxDesiredStartTime, in Time maxDesiredStartTime,
in Time minDesiredLifetime, in Time minDesiredLifetime,
in Time maxDesiredLifetime, in Time maxDesiredLifetime,
out Lease multicastAddressSetLease, out Lease multicastAddressSetLease,
out Status status) out Status status)
skipping to change at line 148 skipping to change at line 147
(the size of this set is in the range (the size of this set is in the range
[minDesiredAddresses, maxDesiredAddresses]) within the given address [minDesiredAddresses, maxDesiredAddresses]) within the given address
family and scope, and within a given range of desired family and scope, and within a given range of desired
lifetimes. ("minDesiredStartTime" and "maxDesiredStartTime" are lifetimes. ("minDesiredStartTime" and "maxDesiredStartTime" are
used to specify "advance allocation"; this is described in more used to specify "advance allocation"; this is described in more
detail below.) detail below.)
If the address allocation succeeds, the result is returned in If the address allocation succeeds, the result is returned in
"multicastAddressSetLease" (with "status" = OK). "multicastAddressSetLease" (with "status" = OK).
A "best-effort" attempt will be made to maintain multicast routing During the lifetime of this lease, the allocation service will
for the allocated multicast addresses during their lifetime, even if
there are topology changes (such as a change of upstream provider)
during this time. Also, during this time, the allocation service
will
make a "best-effort" attempt to not allocate any of these addresses make a "best-effort" attempt to not allocate any of these addresses
to others. (However, once an address's lifetime has expired, it can to others. (However, once the lease's lifetime has expired, any of
be allocated to others.) its addresses can be allocated to others.)
Note that multicast addresses are allocated for a limited lifetime. Multicast addresses are allocated for a limited lifetime.
An application may attempt to extend this lifetime, but this An application may attempt to extend this lifetime, but this
operation may fail. Therefore, an application must be prepared operation may fail. Therefore, an application must be prepared
for the possibility it will not be able to use the same addresses for the possibility it will not be able to use the same addresses
for as long as it desires. In particular, the application must for as long as it desires. In particular, the application must
be prepared to either quit early (because its original multicast be prepared to either quit early (because its original multicast
address assignments have expired), or, alternatively, to address assignments have expired), or, alternatively, to
occasionally occasionally
'renumber' its multicast addresses (in some application or 'renumber' its multicast addresses (in some application or
higher-level-protocol dependent way), by making a new allocation. higher-level-protocol dependent way), by making a new allocation.
However, because of the guarantee noted above, if an application However, if an application needs to consider 'renumbering', it will
needs always know this in advance, at the time it acquired its current
to 'renumber', it will always know this in advance, at the time it address(es) - by checking the lifetime in the returned lease.
acquired its current address(es). An application will never need An application will never need to be notified asynchronously of
to be notified asynchronously of the need to 'renumber'. the need to 'renumber'.
Possible errors: Possible errors:
- bad address family - bad address family
- bad scope - bad scope
- bad desired number of addresses (e.g., max < min) - bad desired number of addresses (e.g., max < min)
- bad desired lifetimes (e.g., max < min) - bad desired lifetimes (e.g., max < min)
- errors with the two "start time" parameters (see - errors with the two "start time" parameters (see
"Advance allocation" below) "Advance allocation" below)
- no addresses can be allocated (for the requested - no addresses can be allocated (for the requested
parameters) parameters)
skipping to change at line 202 skipping to change at line 197
multicast address allocation will probably include additional, multicast address allocation will probably include additional,
specialized variants of this general allocation operation. For specialized variants of this general allocation operation. For
instance, it may include separate operations for: instance, it may include separate operations for:
- allocating only a single address - allocating only a single address
(i.e., minDesiredAddresses = maxDesiredAddresses = 1); (i.e., minDesiredAddresses = maxDesiredAddresses = 1);
- (attempting to) allocate an address with a single, fixed - (attempting to) allocate an address with a single, fixed
lifetime (i.e., minDesiredLifetime = maxDesiredLifetime); lifetime (i.e., minDesiredLifetime = maxDesiredLifetime);
- (attempting to) allocate an address for immediate use - (attempting to) allocate an address for immediate use
(i.e., minDesiredStartTime = maxDesiredStartTime = 'now') (i.e., minDesiredStartTime = maxDesiredStartTime = 'now')
Changing multicast addresses' lifetime: 5.2 Changing multicast addresses' lifetime:
change_multicast_addr_lifetime(in Lease multicastAddressSetLease, change_multicast_addr_lifetime(in Lease multicastAddressSetLease,
in Time minDesiredLifetime, in Time minDesiredLifetime,
in Time maxDesiredLifetime, in Time maxDesiredLifetime,
out Time lifetime) out Time lifetime)
This operation attempts to change the lifetime of previously This operation attempts to change the lifetime of previously
allocated multicast addresses. Unless an error occurs, it returns allocated multicast addresses. Unless an error occurs, it returns
the new lifetime (which might remain unchanged). the new lifetime (which might remain unchanged).
Possible errors: Possible errors:
- bad address family - bad address family
- bad durations (e.g., max < min) - bad durations (e.g., max < min)
- the addresses' lifetime could not be changed - the addresses' lifetime could not be changed
(and the existing lifetime was not in the requested range (and the existing lifetime was not in the requested range
[minDesiredLifetime,maxDesiredLifetime]) [minDesiredLifetime,maxDesiredLifetime])
- the addresses were not ones that we[*] had allocated - the addresses were not ones that we had allocated
(or they have already expired) (see section 5.9) - or they have already expired
Deallocating multicast addresses: 5.3 Deallocating multicast addresses:
deallocate_multicast_addr(in Lease multicastAddressSetLease) deallocate_multicast_addr(in Lease multicastAddressSetLease)
This operation attempts to deallocate previously allocated This operation attempts to deallocate previously allocated
multicast addresses. multicast addresses.
Possible errors: Possible errors:
- bad address family - bad address family
- the addresses were not ones that we[*] had allocated - the addresses were not ones that we had allocated
(or they have already expired) (or they have already expired)
Querying the set of usable multicast address scopes: 5.4 Querying the set of usable multicast address scopes:
get_multicast_addr_scopes(in AddressFamily family, get_multicast_addr_scopes(in AddressFamily family,
out "set of" Scope) out "set of" Scope)
This operation returns the set of administrative multicast address This operation returns the set of administrative multicast address
scopes that are defined for this node. scopes that are defined for this node.
Possible errors: Possible errors:
- bad address family - bad address family
Querying the name of a scope: 5.5 Querying the name of a scope:
get_scope_name(in Scope scope, get_scope_name(in Scope scope,
in LanguageTag language, in LanguageTag language,
out String name, out String name,
out LanguageTag languageForName) out LanguageTag languageForName)
This operation returns a character-string name for a given scope. This operation returns a character-string name for a given scope.
If the scope has a name in the specified "language", then this name If the scope has a name in the specified "language", then this name
(and language) is returned. Otherwise, the scope's default (and language) is returned. Otherwise, the scope's default
(language, name) pair is returned. (language, name) pair is returned.
Possible errors: Possible errors:
- bad scope - bad scope
Querying the nesting state of known usable multicast address scopes: 5.6 Querying the nesting state of known usable multicast address scopes:
get_scope_nesting_state(in "set of" Scope, get_scope_nesting_state(in "set of" Scope,
out "array of" NestingRelationship) out "matrix of" NestingRelationship)
Possible errors: Possible errors:
- bad scope. - bad scope.
- nesting state undetermined at this time. - nesting state undetermined at this time.
This operation would return an array that shows the This operation would return a matrix that shows the
current nesting relationships between the supplied current nesting relationships between the supplied
set of scopes which would have previously been supplied set of scopes which would have previously been supplied
via the get_multicast_addr_scopes(...) function. via the get_multicast_addr_scopes(...) function.
Querying the set of scopes that a given scope is known to nest inside: 5.7 Querying the set of scopes that a given scope is known to nest inside:
get_larger_scopes(in Scope, get_larger_scopes(in Scope,
out "set of" Scope) out "set of" Scope)
This operation returns the set of administrative multicast This operation returns the set of administrative multicast
address scopes that are known to encompass the supplied address scopes that are known to encompass the supplied
Scope. Scope.
Possible errors: Possible errors:
- bad scope. - bad scope.
- nesting state undetermined at this time. - nesting state undetermined at this time.
Querying the set of scopes that are known to nest inside a given scope: 5.8 Querying the set of scopes that are known to nest inside a given scope:
get_smaller_scopes(in Scope, get_smaller_scopes(in Scope,
out "set of" Scope) out "set of" Scope)
This operation returns the set of administrative multicast This operation returns the set of administrative multicast
address scopes that are known to nest inside the supplied address scopes that are known to nest inside the supplied
Scope (NB this would include those scopes that are Scope (NB this would include those scopes that are
topologically identical to the supplied scope). topologically identical to the supplied scope).
Possible errors: Possible errors:
- bad scope. - bad scope.
- nesting state undetermined at this time. - nesting state undetermined at this time.
[*] The decision as to who is allowed to deallocate (or change the lifetime 5.9 Note:
The decision as to who is allowed to deallocate (or change the lifetime
of) a previously allocated multicast address set lease is of) a previously allocated multicast address set lease is
implementation-specific, and depends upon the security policy of the host implementation-specific, and depends upon the security policy of the host
system. Thus it is not specified in this abstract API. One possible system. Thus it is not specified in this abstract API. One possible
starting point, however, is the following: starting point, however, is the following:
A previously allocated multicast address can be deallocated (or have A previously allocated multicast address can be deallocated (or have
its lifetime queried or changed) by the same "principal", and on the its lifetime queried or changed) by the same "principal", and on the
same node, as that which originally allocated it. ("principal" same node, as that which originally allocated it. ("principal"
might, might,
for example, be a "user" in the host operating system.) for example, be a "user" in the host operating system.)
Advance allocation 5.10 Advance allocation
================== =======================
By specifying "minDesiredStartTime = maxDesiredStartTime = 'now'", By specifying "minDesiredStartTime = maxDesiredStartTime = 'now'",
the address allocation operation - "alloc_multicast_addr" - described above the address allocation operation - "alloc_multicast_addr" - described above
can be used to request a set of multicast addresses that can be used can be used to request a set of multicast addresses that can be used
*immediately* (and until their lifetime expires). During this whole time, *immediately* (and until their lifetime expires). During this whole time,
the addresses are not available for allocation to others. the addresses are not available for allocation to others.
It is also possible - using the "minDesiredStartTime" and It is also possible - using the "minDesiredStartTime" and
"maxDesiredStartTime" parameters - to allocate multicast addresses "maxDesiredStartTime" parameters - to allocate multicast addresses
*in advance* - i.e., so that they have a future "start time" as well as *in advance* - i.e., so that they have a future "start time" as well as
an expiration time. Before the start time, the multicast addresses may an expiration time. Before the start time, the multicast addresses may
be allocated to others. be allocated to others.
Advance allocation is convenient for allocating addresses for events that Advance allocation is convenient for allocating addresses for events that
begin far in the future - e.g., several weeks or months away. Without begin far in the future - e.g., several weeks or months away. Without
advance allocation, it would be necessary to reserve an address for a long advance allocation, it would be necessary to allocate addresses for a long
period of time - even when it will not be used. Such a request would not period of time - even when it will not be used. Such a request would not
only be a wasteful use of the multicast address space, but it may also be only be a wasteful use of the multicast address space, but it may also be
difficult to implement (especially since address allocations are expected difficult to implement (especially since address allocations are expected
to remain valid in spite of topology changes). to remain valid in spite of topology changes).
Advance allocation requests can produce the following errors (in addition to Advance allocation requests can produce the following errors (in addition to
those defined earlier): those defined earlier):
- bad start time durations (e.g., max < min) - bad start time durations (e.g., max < min)
- requested start times conflict with requested lifetimes - requested start times conflict with requested lifetimes
(i.e., min start time > max lifetime) (i.e., min start time > max lifetime)
skipping to change at line 343 skipping to change at line 339
in Time maxDesiredStartTime, in Time maxDesiredStartTime,
out Time startTime) out Time startTime)
This operation attempts to change the start time of previously This operation attempts to change the start time of previously
allocated multicast addresses. Unless an error occurs, it returns allocated multicast addresses. Unless an error occurs, it returns
the new start time (which might remain unchanged). the new start time (which might remain unchanged).
Possible errors: the same as "change_multicast_addr_lifetime" Possible errors: the same as "change_multicast_addr_lifetime"
6. Security Considerations 6. Security Considerations
As noted in point [*] above, each implementation of this abstract API should As noted in section 5.9 above, each implementation of this abstract API
define a security policy that specifies when (and by whom) a previously should define a security policy that specifies when (and by whom)
allocated multicast address can be deallocated (or queried, or have its previously allocated multicast addresses can be deallocated (or queried,
lifetime changed). or have their lifetime changed).
Because multicast addresses are a finite resource, there is a potential for Because multicast addresses are a finite resource, there is a potential for
a "denial of service" attack by allocating a large number of multicast a "denial of service" attack by allocating a large number of multicast
addresses without deallocating them. Preventing such an attack, however, addresses without deallocating them. Preventing such an attack, however,
is not the role of the API, but rather by the underlying MAAS ("Multicast is not the role of the API, but rather by the underlying MAAS ("Multicast
Address Allocation Server(s)" [6]). Address Allocation Server(s)" [6]).
7. Acknowledgements 7. Acknowledgements
Many thanks to other participants in the "MALLOC" working group Many thanks to other participants in the "MALLOC" working group
- in particular Steve Hanna, Dave Thaler , and Roger Kermode - for their - in particular Steve Hanna, Dave Thaler, Roger Kermode,
valuable comments. and Pavlin Radoslavov - for their valuable comments.
8. References 8. References
[1] Patel, B., Shah, M., Hanna, S., [1] Patel, B., Shah, M., Hanna, S.,
"Multicast Address Dynamic Client Allocation Protocol (MADCAP)", "Multicast Address Dynamic Client Allocation Protocol (MADCAP)",
Work-in-Progress, Internet-Draft "draft-ietf-malloc-madcap-05.txt", Work-in-Progress, Internet-Draft "draft-ietf-malloc-madcap-06.txt",
May, 1999. August, 1999.
[2] Deering, S., "Host Extensions for IP Multicasting", [2] Deering, S., "Host Extensions for IP Multicasting",
RFC 1112, August 1989. RFC 1112, August 1989.
[3] Meyer, D., "Administratively Scoped IP Multicast", [3] Meyer, D., "Administratively Scoped IP Multicast",
RFC 2365 (BCP 23), July, 1998. RFC 2365 (BCP 23), July, 1998.
[4] Alvestrand, H., "Tags for the Identification of Languages", [4] Alvestrand, H., "Tags for the Identification of Languages",
RFC 1766, March 1995. RFC 1766, March 1995.
[5] Handley, M., Jacobson, V., "SDP: Session Description Protocol", [5] Handley, M., Jacobson, V., "SDP: Session Description Protocol",
RFC 2327, April 1998. RFC 2327, April 1998.
[6] Estrin, D., Handley, M., Thaler, D., [6] Estrin, D., Handley, M., Thaler, D.,
"The Internet Multicast Address Allocation Architecture", "The Internet Multicast Address Allocation Architecture",
 End of changes. 28 change blocks. 
48 lines changed or deleted 44 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/