draft-ietf-dhc-loadb-00.txt   draft-ietf-dhc-loadb-01.txt 
Network Working group DHC load balancing algorithm Oct 1999 Network Working group DHC load balancing algorithm March 2000
Internet Draft Bernie Volz Internet Draft Bernie Volz
Steve Gonczi Steve Gonczi
Process Software Process Software
Ted Lemon Ted Lemon
Internet Engines, Inc. Internet Engines, Inc.
Rob Stevens Rob Stevens
Join Systems, Inc. Join Systems, Inc.
October 1999 Expires Apr 2000 March 2000 Expires Sept 2000
DHC load balancing algorithm DHC load balancing algorithm
<draft-ietf-dhc-loadb-00.txt> <draft-ietf-dhc-loadb-01.txt>
Status of this Memo Status of this Memo
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. 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 Internet- other groups may also distribute working documents as Internet-
Drafts. Drafts.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
Copyright Notice Copyright Notice
Copyright (C) The Internet Society (1999). All Rights Reserved. Copyright (C) The Internet Society (1999). All Rights Reserved.
Abstract Abstract
This draft proposes a method of algorithmic load balancing This draft proposes a method of algorithmic load balancing.
that enables multiple, cooperating servers to decide which one It enables multiple, cooperating servers to decide which one
should service a client, without requiring participating servers should service a client, without exchanging any information beyond
to exchange information. initial configuration.
It proposes a computable server selection mechanism for the
DHCP or DHC Failover Protocol.
In addition, it provides for the use of the same mechanism The draft proposes a computable server selection mechanism when multiple
to govern the target server selection of a forwarding agent DHCP servers are available to service DHCP clients. In addition, it
such as a BOOTP relay. offers the same mechanism select the target server of a forwarding agent
such as a BOOTP relay. The possible benefits overlap with those enumerated
in [SSO-03], but this draft does not require any DHCP client modifications.
1. Introduction 1. Introduction
This protocol was originally devised to support a specific load This protocol was originally devised to support a specific load
balancing optimization of the DHC Failover Protocol [FAILOVR]. balancing optimization of the DHC Failover Protocol [FAILOVR].
The authors later realized that it could be used to optimize the The authors later realized that it could be used to optimize the
behavior of cooperating DHCP servers and the BOOTP relay agents that behavior of cooperating DHCP servers and the BOOTP relay agents that
forward packets to them. forward packets to them. The proposal makes it possible to set up
each participating server to accept a pre-configured (approximate)
This proposal makes it possible to set up each participating server to percentage of the client load. This is done using a deterministic
accept a preconfigured (approximate) percentage of the client load. hashing algorithm, The algorithm could easily be applied to other
This is done using a deterministic hashing algorithm, and protocols, having similar characteristics.
assumes that the hash will produce an even distribution of values
based on client load. Whether the distribution is in fact even for
any given set of clients is dependent on the clients, but the hash is
expected to produce reasonably evenly distributed output in all cases.
This algorithm could easily be applied to other protocols that have
similar characteristics and for which load balancing would be helpful.
2. Terminology 2. Terminology
This section discusses both the generic requirements terminology This section discusses both the generic requirements terminology
common to many IETF protocol specifications, and also terminology common to many IETF protocol specifications, and also terminology
introduced by this document. introduced by this document.
2.1. Requirements terminology 2.1. Requirements terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC 2119]. document are to be interpreted as described in RFC 2119 [RFC 2119].
2.2. Load balancing terminology 2.2. Load balancing terminology
This document introduces the following terms: This document introduces the following terms:
Service Delay, SD
A load balancing parameter, allowing delayed service of a client
by a server participating in the load balancing scheme, instead of
ignoring the client.
Hash Bucket Assignments, HBA Hash Bucket Assignments, HBA
A configuration directive that assigns a set of hash bucket values to A configuration directive that assigns a set of hash bucket values to
a server participating in the load balancing scheme. a server participating in the load balancing scheme.
Server ID, SID Server ID, SID
An identifier that can be used to designate one of the participating An identifier that can be used to designate one of the participating
servers in the context of another protocol implementing this Servers. In the context of DHCP, the SID is the IP address or
proposal. In the context of DHCP, this SHOULD be the IP address or
DNS name of the server. DNS name of the server.
Service Transaction, ST Service Transaction, ST
A set of client-server exchanges that lead to a server providing or A set of client-server exchanges that lead to a server providing or
denying some service to a client. Example: the DISCOVER/OFFER/ denying some service to a client. Example: the DISCOVER/OFFER/
REQUEST/ACK message exchange between a DHCP server and client is a REQUEST/ACK message exchange between a DHCP server and client is a
service transaction. A service transaction may contain one or more service transaction.
messages.
Service Transaction ID, STID Service Transaction ID, STID
An attribute of the individual client requests used for load An attribute of the individual client requests used for load
balancing. Deciding which attribute to use is entirely up to the balancing.
specific implementation.
3. Background and External Requirements 3. Background and External Requirements
Because DHCP clients use UDP broadcast to contact DHCP servers, a client Because DHCP clients use UDP broadcast to contact DHCP servers, a client
DHCPDISCOVER message may be received by more than one server. All DHCPDISCOVER message may be received by more than one server. All
servers receiving such a broadcast may respond to the client, letting servers receiving such a broadcast may respond to the client, letting
the client choose which server it will use. the client chooses which server it will use.
When a BOOTP relay agent is used, it typically forwards or rebroadcasts When a BOOTP relay agent is used, it typically forwards or rebroadcasts
client broadcasts to all configured servers, so a similar inefficiency client broadcasts to all configured servers, so a similar inefficiency
is present. is present.
The optimization described allows a server to be chosen for each The optimization described allows a server to be chosen for each
such transaction by performing a "serve" / "do not serve" computation. such transaction by performing a "serve" / "do not serve" computation.
A forwarding agent can perform the same computation to choose a A forwarding agent can perform the same computation to choose a
forwarding destination. forwarding destination.
In either case, the choice of server can be computed, without the In either case, the choice of server can be computed, without the
participants having to negotiate who is to respond. participants having to negotiate who is to respond.
Each client request MUST have some hashable property that varies from
ST to ST, though it is not required that the attribute values should be
unique for each ST. The selected attribute MUST have the same value for
each message making up a multi-message ST.
The approach is probabilistic in nature, because it is nearly impossible The approach is probabilistic in nature, because it is nearly impossible
to foresee which client will request service next. For short periods to foresee which client will request service next. For short periods
of time, the actual percentage of clients served by a given server of time, the actual percentage of clients served by a given server
will likely deviate from the desired percentage. As the number of will likely deviate from the desired percentage. As the number of
requests grows, the actual percentage of the load being handled by requests grows, the actual percentage of the load being handled by
each server will approximate the configured percentage. each server will approximate the configured percentage.
4. Overview 4. Overview
The specific implementation MUST choose an ST attribute that will
be used as the ST "key" for load balancing.
DHCP servers MUST use the Client Identifier option as the STID if it DHCP servers MUST use the Client Identifier option as the STID if it
is present. If no Client Identifier option is present, the hlen is present. If no Client Identifier option is present, the hlen field
field of the DHCP packet should be used as the length of the data to of the DHCP packet MUST be used as the length of the data to
be hashed, and the contents of the chaddr should be the data to be be hashed, and the contents of the chaddr MUST be the data to be
hashed, except that in no event should more than sixteen bytes be hashed. The number of bytes hashed MUST NOT exceed sixteen.
used.
Other implementations MAY choose other attribute(s) as their STID. The proposal maps the STID into a hash value using the function in
section 6. The resulting hash value can then be used to decide who
should respond to the request, or who the forwarding target should be.
The proposal maps the chosen STID into a hash value using the The provided hash function generates hash values 0 to 255, and yields
function in section 6. The resulting hash value can then be used a fairly even hash bucket distribution for random STID-s, and also for
to decide who should respond to the request, or who the forwarding STID sequences that have some pattern. Resource allocation is
target should be. accomplished by assigning a set of specific hash values to each
participating server.
The provided hash function generates hash values 0 to 255, A server will only service a requests if the STID hash of the request
and yields a fairly even hash bucket distribution for random STIDs, and does match one its assigned hash values.
also for STID sequences that have some pattern.
Resource allocation is accomplished by assigning specific hash Any hash buckets not assigned to servers will result in some client
values to each participating server. ST-s being entirely ignored. (In some scenarios, this may be a
desirable outcome). STID-s need not be unique, but should
have sufficient variety to distribute load to each server.
Each server is assigned ownership of one or more hash values, HBA-s MAY be transmitted as messages, encapsulated in messages
and will only service requests where the STID hash matches one of another protocol, e.g.: e-mail, or DHC Failover Protocol option.
of these values.
Any hash buckets not assigned to servers will result DHCP server implementations may optionally be configurable to handle
in some client ST-s being entirely ignored. (In some scenarios, a case where load balancing is being done but the server that is supposed
this may be the desired outcome.) STID-s need not be unique, but to respond is not available, or is out of suitable addresses.
should have sufficient variety to exercise each hash value
assigned to any server. DHCP server implementations that provide this capability SHOULD set the
DS (Delayed Service) configuration parameter to the number of seconds
to wait after the client's first request has been sent before responding
to a client, whose hash would not normally permit the client to be served.
A DHCP server providing this capability SHOULD use the value in
the secs field of the client request if its value is not zero.
Because some clients may not correctly implement the secs field, a
DHCP server MAY keep track of the first instance of a client
transaction to which it would not normally respond. If the server
receives a request from a client that has the same transaction ID as
a previously recorded request, and if the secs field in the second
packet is zero, the DHCP server MAY use the time in seconds between
receipt of the first client request and the receipt of the
subsequent client request in place of the secs field in order to
determine whether or not to respond.
5. Operation 5. Operation
5.1 Configuration 5.1 Configuration
The configuration step consists of assigning hash values The configuration step consists of assigning hash values
to available servers. This is accomplished by providing one to available servers. This is accomplished by providing one
or more Hash Bucket Assignments (HBAs). (These may come from or more Hash Bucket Assignments (HBA-s). (These may come from
a configuration file, the Windows NT registry, EEPROM, etc.) a configuration file, the Windows NT registry, EEPROM, etc.)
Alternatively, HBAs can be transmitted as messages, 5.2 HBA intended for a server
encapsulated in messages of another protocol, for example using
e-mail, a DHC Failover Protocol option, or some other mechanism.
5.2 HBA intended for a participant server
When configuring one specific server, an HBA in the form of a When configuring one specific server, an HBA in the form of a
simple bit map of 32 octet values MAY be used. If the HBA is simple bit map of 32 octet values SHOULD be used.
represented in this form, the first octet in the HBA bitmap will
represent HBA values 0-7, the next byte values 8-15, and so on, The first octet in the HBA bitmap represents HBA values 0-7,
with the thirty-second octet representing values 248-255. the next byte values 8-15, and so on, with the thirty-second octet
In each octet, the most significant bit in that octet represents representing values 248-255. In each octet, the least significant
the largest HBA value represented in that octet. bit in that octet represents the largest HBA value in that octet.
So for example bit 7 of the first octet represents HBA value 7, and
bit 0 of the first octet represents HBA value 0.
Each bit of the HBA is associated with one possible hash Each bit of the HBA is associated with one possible hash
value. If a bit is set in the map, it means the recipient server value. If a bit is set in the map, it means the recipient server
MUST service each client request, where the STID yields the MUST service each client request, where the STID yields the
corresponding hash value. corresponding hash value.
For example, if a server receives a HBA For example, if a server receives a HBA
with the following 32 octets: with the following 32 octets:
buckets buckets
FF FF FF FF FF FF FF FF ( 0 - 63 ) FF FF FF FF FF FF 00 00 ( 0 - 63 )
FF FF FF FF FF FF FF FF ( 64 - 127 ) FF FF FF FF FF FF FF FF ( 64 - 127 )
00 00 00 00 00 00 00 00 ( 128 - 191 ) 00 00 00 00 00 00 00 00 ( 128 - 191 )
00 00 00 00 00 00 00 00 ( 192 - 255 ) 00 00 00 00 00 00 00 00 ( 192 - 255 )
then it MUST service any client requests where the STID then it MUST service any client requests where the STID
hashes into the bucket values of 0 through 127. hashes into the bucket values of 0 through 47 and
64 through 127.
The above example is merely for illustration The format of the option SHOULD be as follows:
purposes. An application implementing this algorithm is free
to choose a different format, as long as the server is informed
in some way of hash bucket values it owns.
5.3 HBA intended for a forwarder Code Len Hash Buckets
+-----+-----+-----+-----+----+-----+-----+-----+
| 0 | 10 | 0 | 32 | b1 | b2 | ... | b32 |
+-----+-----+-----+-----+----+-----+-----+-----+
The option code and length are 2 byte NBO values.
The option number is assigned in the option number space
of [FAILOVR].
5.3 Delayed Service parameter
The Delayed Service parameter is optional. If it is not sent,
the HBA sets up a strict Server/ Do not serve policy.
If the parameter is used, it MUST be sent immediately before
the HBA. The server, who is not supposed to serve a specific
request ( based on the HBA, and the ST hash), is allowed to
respond, after S seconds have elapsed since the client first
attempted to get service.
A server MAY use the secs field in the BOOTP header for
determining the time since the client has been trying to get
service, or it MAY track repeated requests some other way.
Format:
Code Len Seconds
+-----+-----+-----+-----+----+
| 0 | 30 | 0 | 1 | S |
+-----+-----+-----+-----+----+
The option code and length are 2 byte NBO values.
The option number is assigned in the option number
space of [FAILOVR].
S is a one byte value, 1..255. It represents the number of
seconds to delay service. The server MAY serve a client after
S seconds elapsed from the client's first request.
5.4 HBA intended for a forwarder
When configuring a forwarding agent, (e.g.: BOOTP relay) When configuring a forwarding agent, (e.g.: BOOTP relay)
HBAs consisting of pairs of Server-ID / Hash Bucket values HBA-s consisting of pairs of Server-ID / Hash Bucket values
MAY be used. MAY be used.
Here, the Server ID (SID) designates the server responsible for Here, the Server ID (SID) designates the server responsible for
the specified Hash Bucket. The forwarding agent the specified Hash Bucket. The forwarding agent
forwards each client request, where the STID yields the forwards each client request, where the STID yields the
specified hash value, to the server designated by the SID. specified hash value, to the server designated by the SID.
The Server ID may be any unique server attribute, The Server ID may be any unique server attribute,
(E.g.: IP address, DNS name, etc) that is meaningful in the context of (E.g.: IP address, DNS name, etc) that is meaningful in the context of
the relay agent operation. the relay agent operation.
skipping to change at page 5, line 48 skipping to change at page 6, line 47
set up to split the load between 2 primary-backup server pairs, set up to split the load between 2 primary-backup server pairs,
running the DHC Failover Protocol [FAILOVR]. running the DHC Failover Protocol [FAILOVR].
A possible configuration file for a forwarding agent A possible configuration file for a forwarding agent
(e.g.: BOOTP relay) may look like this: (e.g.: BOOTP relay) may look like this:
192.33.43.11 0 .. 24; 192.33.43.11 0 .. 24;
192.33.43.12 25 .. 55; 192.33.43.12 25 .. 55;
192.33.43.13 56 ..128; 192.33.43.13 56 ..128;
192.33.43.14 129..255; 192.33.43.14 129..255;
192.33.43.15 129..255;
The above configuration consists of 5 HBAs. The first HBA states: The above configuration consists of 4 HBA-s. The first HBA states:
"Any Client request, where the STID yields a hash value "Any Client request, where the STID yields a hash value
0 to 24, will be forwarded to server 192.33.43.11". 0 to 24, will be forwarded to server 192.33.43.11".
Note that that HBA #4 and #5 instruct to forward the same requests
to both 192.33.43.142 and 192.33.43.14.
The above example is merely for illustration purposes. An implementing
application is free to choose a different format, as long as the
forwarding agent is given a list of SIDs, with the set of hash bucket
values each server owns.
6. Hash function for load balancing 6. Hash function for load balancing
The following hash function is a c language implementation of the The following hash function is a C language implementation of the
algorithm known as "Pearson's hash". The Pearson's hash algorithm algorithm known as "Pearson's hash". The Pearson's hash algorithm
was originally published in [PEARSON] To make this proposal work, all was originally published in [PEARSON]. To make this proposal work,
interoperable implementations MUST use the same hash function. all interoperable implementations MUST use the same hash function.
/* A "mixing table" of 256 distinct values, in pseudo-random order. */ /* A "mixing table" of 256 distinct values, in pseudo-random order. */
unsigned char loadb_mx_tbl[256] = unsigned char loadb_mx_tbl[256] =
{ {
251, 175, 119, 215, 81, 14, 79, 191, 103, 49, 251, 175, 119, 215, 81, 14, 79, 191, 103, 49,
181, 143, 186, 157, 0, 232, 31, 32, 55, 60, 181, 143, 186, 157, 0, 232, 31, 32, 55, 60,
152, 58, 17, 237, 174, 70, 160, 144, 220, 90, 152, 58, 17, 237, 174, 70, 160, 144, 220, 90,
57, 223, 59, 3, 18, 140, 111, 166, 203, 196, 57, 223, 59, 3, 18, 140, 111, 166, 203, 196,
134, 243, 124, 95, 222, 179, 197, 65, 180, 48, 134, 243, 124, 95, 222, 179, 197, 65, 180, 48,
36, 15, 107, 46, 233, 130, 165, 30, 123, 161, 36, 15, 107, 46, 233, 130, 165, 30, 123, 161,
skipping to change at page 6, line 45 skipping to change at page 7, line 40
205, 242, 217, 11, 187, 146, 159, 64, 86, 239, 205, 242, 217, 11, 187, 146, 159, 64, 86, 239,
195, 42, 106, 198, 118, 112, 184, 172, 87, 2, 195, 42, 106, 198, 118, 112, 184, 172, 87, 2,
173, 117, 176, 229, 247, 253, 137, 185, 99, 164, 173, 117, 176, 229, 247, 253, 137, 185, 99, 164,
102, 147, 45, 66, 231, 52, 141, 211, 194, 206, 102, 147, 45, 66, 231, 52, 141, 211, 194, 206,
246, 238, 56, 110, 78, 248, 63, 240, 189, 93, 246, 238, 56, 110, 78, 248, 63, 240, 189, 93,
92, 51, 53, 183, 19, 171, 72, 50, 33, 104, 92, 51, 53, 183, 19, 171, 72, 50, 33, 104,
101, 69, 8, 252, 83, 120, 76, 135, 85, 54, 101, 69, 8, 252, 83, 120, 76, 135, 85, 54,
202, 125, 188, 213, 96, 235, 136, 208, 162, 129, 202, 125, 188, 213, 96, 235, 136, 208, 162, 129,
190, 132, 156, 38, 47, 1, 7, 254, 24, 4, 190, 132, 156, 38, 47, 1, 7, 254, 24, 4,
216, 131, 89, 21, 28, 133, 37, 153, 149, 80, 216, 131, 89, 21, 28, 133, 37, 153, 149, 80,
170, 68, 6, 169, 234, 151 170, 68, 6, 169, 234, 151 };
};
unsigned char loadb_p_hash(unsigned char *key,/* The key to be hashed */ unsigned char loadb_p_hash(unsigned char *key,/* The key to be hashed */
int len) /* Key length in bytes */ int len) /* Key length in bytes */
{ {
unsigned char hash = len; unsigned char hash = len;
int i; int i;
for( i=len ; i > 0 ; ) for( i=len ; i > 0 ; )
hash = loadb_mx_tbl [ hash ^ key[ --i ] ]; hash = loadb_mx_tbl [ hash ^ key[ --i ] ];
return( hash ); return( hash );
} }
7. Security 7. Security
This proposal in and by itself provides no security, nor does This proposal in and by itself provides no security, nor does
it impact existing security. it impact existing security. Servers using this algorithm are
responsible for ensuring that if the contents of the HBA are
Servers using this algorithm are responsible for ensuring that if transmitted over the network as part of the process of
the contents of the HBA are transmitted over the network as part of configuring any server, that message be secured against
the process of configuring any server, that message be secured tampering, since tampering with the HBA could result in
against tampering, since tampering with the HBA could result in
denial of service for some or all clients. denial of service for some or all clients.
8. References 8. References
[FAILOVR] Droms, R., Rabil, G., Dooley, M., Kapur, A., Gonczi, S., [FAILOVR] Kinnear, K,, Droms, R., Rabil, G., Dooley, M., Kapur, A.,
Volz, B., "DHCP Failover Protocol", Internet Draft Gonczi, S., Volz, B., "DHCP Failover Protocol", Internet
<draft-ietf-dhc-failover-05.txt>, June 1999. Draft <draft-ietf-dhc-failover-06.txt>, March 2000.
[PEARSON] The Communications of the ACM Vol.33, No. 6 (June 1990), [PEARSON] The Communications of the ACM Vol.33, No. 6 (June 1990),
pp. 677-680. pp. 677-680.
[RFC2131] R. Droms, "Dynamic Host Configuration Protocol", RFC2131, [RFC2131] R. Droms, "Dynamic Host Configuration Protocol", RFC2131,
March 1997. March 1997.
[RFC2219] Bradner, S., "Key words for use in RFCs to Indicate [RFC2219] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels," RFC-2219, March 1997. Requirement Levels," RFC-2219, March 1997.
[SSO-03] Stump, G., Gupta, P., Droms, R. Sommerfeld, R.
"The Server Selection Option for DHCP"
<draft-ietf-dhc-sso-03.txt>
9. Acknowledgements 9. Acknowledgements
Special thanks to Peter K. Pearson, the author of Pearson's hash Special thanks to Peter K. Pearson, the author of Pearson's hash
who has kindly granted his permission to use this algorithm, who has kindly granted his permission to use this algorithm,
free of any encumbrances. free of any encumbrances.
This proposal stems from the original idea of hashing MAC addresses This proposal stems from the original idea of hashing MAC addresses
to a single bit by Ted Lemon, during a Failover Protocol discussion to a single bit by Ted Lemon, during a Failover Protocol discussion
held at CISCO Systems in February, 1999. held at CISCO Systems in February, 1999. Rob Stevens suggested the
potential use of this algorithm for purposes beyond those of the
Rob Stevens suggested the potential use of this algorithm for Failover Protocol.
purposes beyond the Failover Protocol.
Many thanks to Ralph Droms, Kim Kinnear, Mark Stapp, Glenn Waters, Many thanks to Ralph Droms, Kim Kinnear, Mark Stapp, Glenn Waters,
Greg Rabil and Jack Wong for their comments during the ongoing discussions. Greg Rabil and Jack Wong for their comments during the ongoing discussions.
10. Full Copyright Statement 10. Full Copyright Statement
Copyright (C) The Internet Society (1999). All Rights Reserved. Copyright (C) The Internet Society (1999). All Rights Reserved.
This document and translations of it may be copied and furnished to This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it or others, and derivative works that comment on or otherwise explain it or
assist in its implementation may be prepared, copied, published and assist in its implementation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind, distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are included provided that the above copyright notice and this paragraph are included
on all such copies and derivative works. However, this document itself 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 may not be modified in any way, such as by removing the copyright notice
or references to the Internet Society or other Internet organizations, or references to the Internet Society or other Internet organizations,
except as needed for the purpose of developing Internet standards in except as needed for the purpose of developing Internet standards in
which case the procedures for copyrights defined in the Internet which case the procedures for copyrights defined in the Internet
Standards process must be followed, or as required to translate it Standards process must be followed, or as required to translate it
into languages other than English. into languages other than English.
The limited permissions granted above are perpetual and will not be The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns. revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an "AS This document and the information contained herein is provided on an "AS
IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK
FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
skipping to change at page 8, line 24 skipping to change at page 9, line 34
FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT
INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR
FITNESS FOR A PARTICULAR PURPOSE. FITNESS FOR A PARTICULAR PURPOSE.
11. Author's information 11. Author's information
Bernie Volz Bernie Volz
Steve Gonczi Steve Gonczi
Process Software Corporation Process Software Corporation
959 Concord St. 959 Concord St. Framingham, MA 01701
Framingham, MA 01701
Phone: (508) 879-6994 Phone: (508) 879-6994
EMail: volz@process.com EMail: volz@process.com
gonczi@process.com gonczi@process.com
Ted Lemon Ted Lemon
Internet Engines, Inc. Internet Engines, Inc.
950 Charter Street 950 Charter Street Redwood City, CA 94063
Redwood City, CA 94063
Phone: (650) 779 6031 Phone: (650) 779 6031
EMail: mellon@isc.org EMail: mellon@isc.org
Rob Stevens Rob Stevens
Join Systems, Inc. Join Systems, Inc.
1032 Elwell Ct Ste 243 1032 Elwell Ct Ste 243 Palo Alto CA 94203
Palo Alto CA 94203
Phone: (650)-968-4470 Phone: (650)-968-4470
EMail: robs@join.com EMail: robs@join.com
 End of changes. 

This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/