< draft-ietf-tsvwg-ecn-tunnel-09.txt | draft-ietf-tsvwg-ecn-tunnel-10a.txt > | |||
---|---|---|---|---|
Transport Area Working Group B. Briscoe | Transport Area Working Group B. Briscoe | |||
Internet-Draft BT | Internet-Draft BT | |||
Updates: 3168, 4301, 4774 July 30, 2010 | Updates: 3168, 4301, 4774 August 26, 2010 | |||
(if approved) | (if approved) | |||
Intended status: Standards Track | Intended status: Standards Track | |||
Expires: January 31, 2011 | Expires: February 27, 2011 | |||
Tunnelling of Explicit Congestion Notification | Tunnelling of Explicit Congestion Notification | |||
draft-ietf-tsvwg-ecn-tunnel-09 | draft-ietf-tsvwg-ecn-tunnel-10 | |||
Abstract | Abstract | |||
This document redefines how the explicit congestion notification | This document redefines how the explicit congestion notification | |||
(ECN) field of the IP header should be constructed on entry to and | (ECN) field of the IP header should be constructed on entry to and | |||
exit from any IP in IP tunnel. On encapsulation it updates RFC3168 | exit from any IP in IP tunnel. On encapsulation it updates RFC3168 | |||
to bring all IP in IP tunnels (v4 or v6) into line with RFC4301 IPsec | to bring all IP in IP tunnels (v4 or v6) into line with RFC4301 IPsec | |||
ECN processing. On decapsulation it updates both RFC3168 and RFC4301 | ECN processing. On decapsulation it updates both RFC3168 and RFC4301 | |||
to add new behaviours for previously unused combinations of inner and | to add new behaviours for previously unused combinations of inner and | |||
outer header. The new rules ensure the ECN field is correctly | outer header. The new rules ensure the ECN field is correctly | |||
skipping to change at page 1, line 49 | skipping to change at page 1, line 49 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
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." | |||
This Internet-Draft will expire on January 31, 2011. | This Internet-Draft will expire on February 27, 2011. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2010 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
3. Summary of Pre-Existing RFCs . . . . . . . . . . . . . . . . . 14 | 3. Summary of Pre-Existing RFCs . . . . . . . . . . . . . . . . . 14 | |||
3.1. Encapsulation at Tunnel Ingress . . . . . . . . . . . . . 14 | 3.1. Encapsulation at Tunnel Ingress . . . . . . . . . . . . . 14 | |||
3.2. Decapsulation at Tunnel Egress . . . . . . . . . . . . . . 15 | 3.2. Decapsulation at Tunnel Egress . . . . . . . . . . . . . . 15 | |||
4. New ECN Tunnelling Rules . . . . . . . . . . . . . . . . . . . 16 | 4. New ECN Tunnelling Rules . . . . . . . . . . . . . . . . . . . 16 | |||
4.1. Default Tunnel Ingress Behaviour . . . . . . . . . . . . . 16 | 4.1. Default Tunnel Ingress Behaviour . . . . . . . . . . . . . 17 | |||
4.2. Default Tunnel Egress Behaviour . . . . . . . . . . . . . 17 | 4.2. Default Tunnel Egress Behaviour . . . . . . . . . . . . . 17 | |||
4.3. Encapsulation Modes . . . . . . . . . . . . . . . . . . . 19 | 4.3. Encapsulation Modes . . . . . . . . . . . . . . . . . . . 19 | |||
4.4. Single Mode of Decapsulation . . . . . . . . . . . . . . . 20 | 4.4. Single Mode of Decapsulation . . . . . . . . . . . . . . . 21 | |||
5. Updates to Earlier RFCs . . . . . . . . . . . . . . . . . . . 21 | 5. Updates to Earlier RFCs . . . . . . . . . . . . . . . . . . . 22 | |||
5.1. Changes to RFC4301 ECN processing . . . . . . . . . . . . 21 | 5.1. Changes to RFC4301 ECN processing . . . . . . . . . . . . 22 | |||
5.2. Changes to RFC3168 ECN processing . . . . . . . . . . . . 22 | 5.2. Changes to RFC3168 ECN processing . . . . . . . . . . . . 22 | |||
5.3. Motivation for Changes . . . . . . . . . . . . . . . . . . 23 | 5.3. Motivation for Changes . . . . . . . . . . . . . . . . . . 23 | |||
5.3.1. Motivation for Changing Encapsulation . . . . . . . . 23 | 5.3.1. Motivation for Changing Encapsulation . . . . . . . . 24 | |||
5.3.2. Motivation for Changing Decapsulation . . . . . . . . 24 | 5.3.2. Motivation for Changing Decapsulation . . . . . . . . 25 | |||
6. Backward Compatibility . . . . . . . . . . . . . . . . . . . . 27 | 6. Backward Compatibility . . . . . . . . . . . . . . . . . . . . 27 | |||
6.1. Non-Issues Updating Decapsulation . . . . . . . . . . . . 27 | 6.1. Non-Issues Updating Decapsulation . . . . . . . . . . . . 27 | |||
6.2. Non-Update of RFC4301 IPsec Encapsulation . . . . . . . . 27 | 6.2. Non-Update of RFC4301 IPsec Encapsulation . . . . . . . . 28 | |||
6.3. Update to RFC3168 Encapsulation . . . . . . . . . . . . . 28 | 6.3. Update to RFC3168 Encapsulation . . . . . . . . . . . . . 28 | |||
7. Design Principles for Alternate ECN Tunnelling Semantics . . . 28 | 7. Design Principles for Alternate ECN Tunnelling Semantics . . . 29 | |||
8. IANA Considerations (to be removed on publication): . . . . . 30 | 8. IANA Considerations (to be removed on publication): . . . . . 31 | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 30 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 31 | |||
10. Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 10. Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 32 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . . 33 | 12.1. Normative References . . . . . . . . . . . . . . . . . . . 34 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . . 33 | 12.2. Informative References . . . . . . . . . . . . . . . . . . 34 | |||
Appendix A. Early ECN Tunnelling RFCs . . . . . . . . . . . . . . 35 | Appendix A. Early ECN Tunnelling RFCs . . . . . . . . . . . . . . 35 | |||
Appendix B. Design Constraints . . . . . . . . . . . . . . . . . 35 | Appendix B. Design Constraints . . . . . . . . . . . . . . . . . 36 | |||
B.1. Security Constraints . . . . . . . . . . . . . . . . . . . 36 | B.1. Security Constraints . . . . . . . . . . . . . . . . . . . 36 | |||
B.2. Control Constraints . . . . . . . . . . . . . . . . . . . 38 | B.2. Control Constraints . . . . . . . . . . . . . . . . . . . 38 | |||
B.3. Management Constraints . . . . . . . . . . . . . . . . . . 39 | B.3. Management Constraints . . . . . . . . . . . . . . . . . . 39 | |||
Appendix C. Contribution to Congestion across a Tunnel . . . . . 39 | Appendix C. Contribution to Congestion across a Tunnel . . . . . 40 | |||
Appendix D. Compromise on Decap with ECT(1) Inner and ECT(0) | Appendix D. Compromise on Decap with ECT(1) Inner and ECT(0) | |||
Outer . . . . . . . . . . . . . . . . . . . . . . . . 40 | Outer . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
Appendix E. Open Issues . . . . . . . . . . . . . . . . . . . . . 41 | Appendix E. Open Issues . . . . . . . . . . . . . . . . . . . . . 42 | |||
Request to the RFC Editor (to be removed on publication): | Request to the RFC Editor (to be removed on publication): | |||
In the RFC index, RFC3168 should be identified as an update to | In the RFC index, RFC3168 should be identified as an update to | |||
RFC2003. RFC4301 should be identified as an update to RFC3168. | RFC2003. RFC4301 should be identified as an update to RFC3168. | |||
Changes from previous drafts (to be removed by the RFC Editor) | Changes from previous drafts (to be removed by the RFC Editor) | |||
Full text differences between IETF draft versions are available at | Full text differences between IETF draft versions are available at | |||
<http://tools.ietf.org/wg/tsvwg/draft-ietf-tsvwg-ecn-tunnel/>, and | <http://tools.ietf.org/wg/tsvwg/draft-ietf-tsvwg-ecn-tunnel/>, and | |||
between earlier individual draft versions at | between earlier individual draft versions at | |||
<http://www.briscoe.net/pubs.html#ecn-tunnel> | <http://www.briscoe.net/pubs.html#ecn-tunnel> | |||
From ietf-08 to ietf-09 (current): Added change log entry for -07 to | From ietf-09 to ietf-10 (current): | |||
-08 that was previously omitted. | ||||
* Editorial changes: | ||||
+ Clarified couple of sentences in Introduction and one in | ||||
section 6.3 to distinguish whether the terms 'RFC3168' & | ||||
'RFC4301' refer to implementations or documents. | ||||
+ Corrected garbled sentence in the introduction about | ||||
backward compatibility. | ||||
+ Made it clear that 'drop' in Fig 2, Fig 4 and the following | ||||
para is an action, not a codepoint. | ||||
+ In sections 5.1 & 5.2, specifically identified the updated | ||||
sections of RFC3168 & RFC4301. | ||||
+ Avoided describing compatibility mode as 'optional' at the | ||||
end of section 5.2 where it should have said 'not always | ||||
obligatory' instead, because in section 4 compatibility mode | ||||
is normatively defined as obligatory in some circumstances | ||||
(rather than always optional). | ||||
+ Added RFC5659 as informative reference on pseudowires and | ||||
clarified only some pseudowires might be relevant examples. | ||||
+ Deleted "The views expressed here are those of the author | ||||
only." in the acknowledgements. | ||||
+ Fixed a few nits. | ||||
From ietf-08 to ietf-09: Added change log entry for -07 to -08 that | ||||
was previously omitted. | ||||
* Changes to standards action text: | * Changes to standards action text: | |||
+ Added RFC4774 to 'Updates:' header (the draft always has | + Added RFC4774 to 'Updates:' header (the draft always has | |||
extended the advice in RFC4774 (BCP124) which said very | extended the advice in RFC4774 (BCP124) which said very | |||
little about tunnels. The GENART reviewer merely pointed | little about tunnels. The GENART reviewer merely pointed | |||
out that the header did not highlight this fact.) | out that the header did not highlight this fact.) | |||
* Editorial changes: | * Editorial changes: | |||
skipping to change at page 11, line 15 | skipping to change at page 11, line 46 | |||
The outer header of an IP packet can encapsulate one or more IP | The outer header of an IP packet can encapsulate one or more IP | |||
headers for tunnelling. A forwarding element using ECN to signify | headers for tunnelling. A forwarding element using ECN to signify | |||
congestion will only mark the immediately visible outer IP header. | congestion will only mark the immediately visible outer IP header. | |||
When a tunnel decapsulator later removes this outer header, it | When a tunnel decapsulator later removes this outer header, it | |||
follows rules to propagate congestion markings by combining the ECN | follows rules to propagate congestion markings by combining the ECN | |||
fields of the inner and outer IP header into one outgoing IP header. | fields of the inner and outer IP header into one outgoing IP header. | |||
This document updates those rules for IPsec [RFC4301] and non-IPsec | This document updates those rules for IPsec [RFC4301] and non-IPsec | |||
[RFC3168] tunnels to add new behaviours for previously unused | [RFC3168] tunnels to add new behaviours for previously unused | |||
combinations of inner and outer header. It also updates the tunnel | combinations of inner and outer header. It also updates the ingress | |||
ingress behaviour of RFC3168 to match that of RFC4301. The updated | behaviour of RFC3168 tunnels to match that of RFC4301 tunnels. | |||
rules are backward compatible with RFC4301 and RFC3168 when | Tunnel endpoints complying with the updated rules will be backward | |||
interworking with any other tunnel endpoint complying with any | compatible when interworking with tunnel endpoints complying with | |||
earlier specification. | RFC4301, RFC3168 or any earlier specification. | |||
When ECN and its tunnelling was defined in RFC3168, only the minimum | When ECN and its tunnelling was defined in RFC3168, only the minimum | |||
necessary changes to the ECN field were propagated through tunnel | necessary changes to the ECN field were propagated through tunnel | |||
endpoints--just enough for the basic ECN mechanism to work. This was | endpoints--just enough for the basic ECN mechanism to work. This was | |||
due to concerns that the ECN field might be toggled to communicate | due to concerns that the ECN field might be toggled to communicate | |||
between a secure site and someone on the public Internet--a covert | between a secure site and someone on the public Internet--a covert | |||
channel. This was because a mutable field like ECN cannot be | channel. This was because a mutable field like ECN cannot be | |||
protected by IPsec's integrity mechanisms--it has to be able to | protected by IPsec's integrity mechanisms--it has to be able to | |||
change as it traverses the Internet. | change as it traverses the Internet. | |||
Nonetheless, the latest IPsec architecture [RFC4301] considered a | Nonetheless, the latest IPsec architecture [RFC4301] considered a | |||
bandwidth limit of 2 bits per packet on a covert channel made it a | bandwidth limit of 2 bits per packet on a covert channel to be a | |||
manageable risk. Therefore, for simplicity, an RFC4301 ingress | manageable risk. Therefore, for simplicity, an RFC4301 ingress | |||
copied the whole ECN field to encapsulate a packet. It dispensed | copied the whole ECN field to encapsulate a packet. RFC4301 | |||
with the two modes of RFC3168, one which partially copied the ECN | dispensed with the two modes of RFC3168, one which partially copied | |||
field, and the other which blocked all propagation of ECN changes. | the ECN field, and the other which blocked all propagation of ECN | |||
changes. | ||||
Unfortunately, this entirely reasonable sequence of standards actions | Unfortunately, this entirely reasonable sequence of standards actions | |||
resulted in a perverse outcome; non-IPsec tunnels (RFC3168) blocked | resulted in a perverse outcome; non-IPsec tunnels (RFC3168) blocked | |||
the 2-bit covert channel, while IPsec tunnels (RFC4301) did not--at | the 2-bit covert channel, while IPsec tunnels (RFC4301) did not--at | |||
least not at the ingress. At the egress, both IPsec and non-IPsec | least not at the ingress. At the egress, both IPsec and non-IPsec | |||
tunnels still partially restricted propagation of the full ECN field. | tunnels still partially restricted propagation of the full ECN field. | |||
The trigger for the changes in this document was the introduction of | The trigger for the changes in this document was the introduction of | |||
pre-congestion notification (PCN [RFC5670]) to the IETF standards | pre-congestion notification (PCN [RFC5670]) to the IETF standards | |||
track. PCN needs the ECN field to be copied at a tunnel ingress and | track. PCN needs the ECN field to be copied at a tunnel ingress and | |||
skipping to change at page 15, line 26 | skipping to change at page 16, line 4 | |||
+-----------------+---------------+---------------+---------------+ | +-----------------+---------------+---------------+---------------+ | |||
Figure 1: IP in IP Encapsulation: Recap of Pre-existing Behaviours | Figure 1: IP in IP Encapsulation: Recap of Pre-existing Behaviours | |||
3.2. Decapsulation at Tunnel Egress | 3.2. Decapsulation at Tunnel Egress | |||
RFC3168 and RFC4301 specify the decapsulation behaviour summarised in | RFC3168 and RFC4301 specify the decapsulation behaviour summarised in | |||
Figure 2. The ECN field in the outgoing header is set to the | Figure 2. The ECN field in the outgoing header is set to the | |||
codepoint at the intersection of the appropriate incoming inner | codepoint at the intersection of the appropriate incoming inner | |||
header (row) and incoming outer header (column). | header (row) and incoming outer header (column). | |||
+---------+------------------------------------------------+ | +---------+------------------------------------------------+ | |||
|Incoming | Incoming Outer Header | | |Incoming | Incoming Outer Header | | |||
| Inner +---------+------------+------------+------------+ | | Inner +---------+------------+------------+------------+ | |||
| Header | Not-ECT | ECT(0) | ECT(1) | CE | | | Header | Not-ECT | ECT(0) | ECT(1) | CE | | |||
+---------+---------+------------+------------+------------+ | +---------+---------+------------+------------+------------+ | |||
RFC3168->| Not-ECT | Not-ECT |Not-ECT |Not-ECT | drop | | RFC3168->| Not-ECT | Not-ECT |Not-ECT |Not-ECT | <drop> | | |||
RFC4301->| Not-ECT | Not-ECT |Not-ECT |Not-ECT |Not-ECT | | RFC4301->| Not-ECT | Not-ECT |Not-ECT |Not-ECT |Not-ECT | | |||
| ECT(0) | ECT(0) | ECT(0) | ECT(0) | CE | | | ECT(0) | ECT(0) | ECT(0) | ECT(0) | CE | | |||
| ECT(1) | ECT(1) | ECT(1) | ECT(1) | CE | | | ECT(1) | ECT(1) | ECT(1) | ECT(1) | CE | | |||
| CE | CE | CE | CE | CE | | | CE | CE | CE | CE | CE | | |||
+---------+---------+------------+------------+------------+ | +---------+---------+------------+------------+------------+ | |||
In pre-existing RFCs, the ECN field in the outgoing header was set to | In pre-existing RFCs, the ECN field in the outgoing header was set to | |||
the codepoint at the intersection of the appropriate incoming inner | the codepoint at the intersection of the appropriate incoming inner | |||
header (row) and incoming outer header (column). | header (row) and incoming outer header (column) , or the packet was | |||
dropped where indicated. | ||||
Figure 2: IP in IP Decapsulation; Recap of Pre-existing Behaviour | Figure 2: IP in IP Decapsulation; Recap of Pre-existing Behaviour | |||
The behaviour in the table derives from the logic given in RFC3168 | The behaviour in the table derives from the logic given in RFC3168 | |||
and RFC4301, briefly recapped as follows: | and RFC4301, briefly recapped as follows: | |||
o On decapsulation, if the inner ECN field is Not-ECT the outer is | o On decapsulation, if the inner ECN field is Not-ECT the outer is | |||
ignored. RFC3168 (but not RFC4301) also specified that the | ignored. RFC3168 (but not RFC4301) also specified that the | |||
decapsulator must drop a packet with a Not-ECT inner and CE in the | decapsulator must drop a packet with a Not-ECT inner and CE in the | |||
outer. | outer. | |||
skipping to change at page 16, line 24 | skipping to change at page 16, line 51 | |||
4. New ECN Tunnelling Rules | 4. New ECN Tunnelling Rules | |||
The standards actions below in Section 4.1 (ingress encapsulation) | The standards actions below in Section 4.1 (ingress encapsulation) | |||
and Section 4.2 (egress decapsulation) define new default ECN tunnel | and Section 4.2 (egress decapsulation) define new default ECN tunnel | |||
processing rules for any IP packet (v4 or v6) with any Diffserv | processing rules for any IP packet (v4 or v6) with any Diffserv | |||
codepoint. | codepoint. | |||
If these defaults do not meet a particular requirement, an alternate | If these defaults do not meet a particular requirement, an alternate | |||
ECN tunnelling scheme can be introduced as part of the definition of | ECN tunnelling scheme can be introduced as part of the definition of | |||
an alternate congestion marking scheme used by a specific Diffserv | an alternate congestion marking scheme used by a specific Diffserv | |||
PHB (see S.5 of [RFC3168] and [RFC4774]). When designing such | PHB (see section 5 of [RFC3168] and [RFC4774]). When designing such | |||
alternate ECN tunnelling schemes, the principles in Section 7 should | alternate ECN tunnelling schemes, the principles in Section 7 should | |||
be followed. However, alternate ECN tunnelling schemes SHOULD be | be followed. However, alternate ECN tunnelling schemes SHOULD be | |||
avoided whenever possible as the deployment burden of handling | avoided whenever possible as the deployment burden of handling | |||
exceptional PHBs in implementations of all affected tunnels should | exceptional PHBs in implementations of all affected tunnels should | |||
not be underestimated. There is no requirement for a PHB definition | not be underestimated. There is no requirement for a PHB definition | |||
to state anything about ECN tunnelling behaviour if the default | to state anything about ECN tunnelling behaviour if the default | |||
behaviour in the present specification is sufficient. | behaviour in the present specification is sufficient. | |||
4.1. Default Tunnel Ingress Behaviour | 4.1. Default Tunnel Ingress Behaviour | |||
skipping to change at page 17, line 33 | skipping to change at page 18, line 11 | |||
intersection of the appropriate incoming inner header (row) and outer | intersection of the appropriate incoming inner header (row) and outer | |||
header (column) in Figure 4 (the IPv4 header checksum also changes | header (column) in Figure 4 (the IPv4 header checksum also changes | |||
whenever the ECN field is changed). There is no need for more than | whenever the ECN field is changed). There is no need for more than | |||
one mode of decapsulation, as these rules cater for all known | one mode of decapsulation, as these rules cater for all known | |||
requirements. | requirements. | |||
+---------+------------------------------------------------+ | +---------+------------------------------------------------+ | |||
|Incoming | Incoming Outer Header | | |Incoming | Incoming Outer Header | | |||
| Inner +---------+------------+------------+------------+ | | Inner +---------+------------+------------+------------+ | |||
| Header | Not-ECT | ECT(0) | ECT(1) | CE | | | Header | Not-ECT | ECT(0) | ECT(1) | CE | | |||
+---------+---------+------------+------------+------------+ | +---------+---------+------------+------------+------------+ | |||
| Not-ECT | Not-ECT |Not-ECT(!!!)|Not-ECT(!!!)| drop(!!!)| | | Not-ECT | Not-ECT |Not-ECT(!!!)|Not-ECT(!!!)| <drop>(!!!)| | |||
| ECT(0) | ECT(0) | ECT(0) | ECT(1) | CE | | | ECT(0) | ECT(0) | ECT(0) | ECT(1) | CE | | |||
| ECT(1) | ECT(1) | ECT(1) (!) | ECT(1) | CE | | | ECT(1) | ECT(1) | ECT(1) (!) | ECT(1) | CE | | |||
| CE | CE | CE | CE(!!!)| CE | | | CE | CE | CE | CE(!!!)| CE | | |||
+---------+---------+------------+------------+------------+ | +---------+---------+------------+------------+------------+ | |||
The ECN field in the outgoing header is set to the codepoint at the | The ECN field in the outgoing header is set to the codepoint at the | |||
intersection of the appropriate incoming inner header (row) and | intersection of the appropriate incoming inner header (row) and | |||
incoming outer header (column). Currently unused combinations are | incoming outer header (column) , or the packet is dropped where | |||
indicated by '(!!!)' or '(!)' | indicated. Currently unused combinations are indicated by '(!!!)' or | |||
'(!)' | ||||
Figure 4: New IP in IP Decapsulation Behaviour | Figure 4: New IP in IP Decapsulation Behaviour | |||
This table for decapsulation behaviour is derived from the following | This table for decapsulation behaviour is derived from the following | |||
logic: | logic: | |||
o If the inner ECN field is Not-ECT the decapsulator MUST NOT | o If the inner ECN field is Not-ECT the decapsulator MUST NOT | |||
propagate any other ECN codepoint onwards. This is because the | propagate any other ECN codepoint onwards. This is because the | |||
inner Not-ECT marking is set by transports that use drop as an | inner Not-ECT marking is set by transports that rely on dropped | |||
indication of congestion and would not understand or respond to | packets as an indication of congestion and would not understand or | |||
any other ECN codepoint [RFC4774]. Specifically: | respond to any other ECN codepoint [RFC4774]. Specifically: | |||
* If the inner ECN field is Not-ECT and the outer ECN field is CE | * If the inner ECN field is Not-ECT and the outer ECN field is CE | |||
the decapsulator MUST drop the packet. | the decapsulator MUST drop the packet. | |||
* If the inner ECN field is Not-ECT and the outer ECN field is | * If the inner ECN field is Not-ECT and the outer ECN field is | |||
Not-ECT, ECT(0) or ECT(1) the decapsulator MUST forward the | Not-ECT, ECT(0) or ECT(1) the decapsulator MUST forward the | |||
outgoing packet with the ECN field cleared to Not-ECT. | outgoing packet with the ECN field cleared to Not-ECT. | |||
o In all other cases where the inner supports ECN, the decapsulator | o In all other cases where the inner supports ECN, the decapsulator | |||
MUST set the outgoing ECN field to the more severe marking of the | MUST set the outgoing ECN field to the more severe marking of the | |||
skipping to change at page 21, line 43 | skipping to change at page 22, line 26 | |||
specification, which defines packet encapsulation identically to | specification, which defines packet encapsulation identically to | |||
RFC4301. | RFC4301. | |||
Egress: An RFC4301 egress will need to be updated to the new | Egress: An RFC4301 egress will need to be updated to the new | |||
decapsulation behaviour in Figure 4, in order to comply with the | decapsulation behaviour in Figure 4, in order to comply with the | |||
present specification. However, the changes are backward | present specification. However, the changes are backward | |||
compatible; combinations of inner and outer that result from any | compatible; combinations of inner and outer that result from any | |||
protocol defined in the RFC series so far are unaffected. Only | protocol defined in the RFC series so far are unaffected. Only | |||
combinations that have never been used have been changed, | combinations that have never been used have been changed, | |||
effectively adding new behaviours to RFC4301 decapsulation without | effectively adding new behaviours to RFC4301 decapsulation without | |||
altering existing behaviours. The following specific updates have | altering existing behaviours. The following specific updates to | |||
been made: | section 5.1.2 of RFC4301 have been made: | |||
* The outer, not the inner, is propagated when the outer is | * The outer, not the inner, is propagated when the outer is | |||
ECT(1) and the inner is ECT(0); | ECT(1) and the inner is ECT(0); | |||
* A packet with Not-ECT in the inner and an outer of CE is | * A packet with Not-ECT in the inner and an outer of CE is | |||
dropped rather than forwarded as Not-ECT; | dropped rather than forwarded as Not-ECT; | |||
* Certain combinations of inner and outer ECN field have been | * Certain combinations of inner and outer ECN field have been | |||
identified as currently unused. These can trigger logging | identified as currently unused. These can trigger logging | |||
and/or raise alarms. | and/or raise alarms. | |||
skipping to change at page 22, line 20 | skipping to change at page 22, line 50 | |||
updated by the modes in the present specification. Effectively an | updated by the modes in the present specification. Effectively an | |||
RFC4301 IPsec ingress solely uses the REQUIRED normal mode of | RFC4301 IPsec ingress solely uses the REQUIRED normal mode of | |||
encapsulation, which is unchanged from RFC4301 encapsulation. It | encapsulation, which is unchanged from RFC4301 encapsulation. It | |||
will never need the OPTIONAL compatibility mode as explained in | will never need the OPTIONAL compatibility mode as explained in | |||
Section 4.3. | Section 4.3. | |||
5.2. Changes to RFC3168 ECN processing | 5.2. Changes to RFC3168 ECN processing | |||
Ingress: On encapsulation, the new rule in Figure 3 that a normal | Ingress: On encapsulation, the new rule in Figure 3 that a normal | |||
mode tunnel ingress copies any ECN field into the outer header | mode tunnel ingress copies any ECN field into the outer header | |||
updates the full functionality behaviour of an RFC3168 ingress. | updates the full functionality behaviour of an RFC3168 ingress | |||
Nonetheless, the new compatibility mode encapsulates packets | [RFC3168; section 9.1.1]. Nonetheless, the new compatibility mode | |||
identically to the limited functionality mode of an RFC3168 | encapsulates packets identically to the limited functionality mode | |||
ingress. | of an RFC3168 ingress. | |||
Egress: An RFC3168 egress will need to be updated to the new | Egress: An RFC3168 egress will need to be updated to the new | |||
decapsulation behaviour in Figure 4, in order to comply with the | decapsulation behaviour in Figure 4, in order to comply with the | |||
present specification. However, the changes are backward | present specification. However, the changes are backward | |||
compatible; combinations of inner and outer that result from any | compatible; combinations of inner and outer that result from any | |||
protocol defined in the RFC series so far are unaffected. Only | protocol defined in the RFC series so far are unaffected. Only | |||
combinations that have never been used have been changed, | combinations that have never been used have been changed, | |||
effectively adding new behaviours to RFC3168 decapsulation without | effectively adding new behaviours to RFC3168 decapsulation without | |||
altering existing behaviours. The following specific updates have | altering existing behaviours. The following specific updates to | |||
been made: | section 9.1.1 of RFC3168 have been made: | |||
* The outer, not the inner, is propagated when the outer is | * The outer, not the inner, is propagated when the outer is | |||
ECT(1) and the inner is ECT(0); | ECT(1) and the inner is ECT(0); | |||
* Certain combinations of inner and outer ECN field have been | * Certain combinations of inner and outer ECN field have been | |||
identified as currently unused. These can trigger logging | identified as currently unused. These can trigger logging | |||
and/or raise alarms. | and/or raise alarms. | |||
Modes: An RFC3168 ingress will need to be updated if it is to comply | Modes: An RFC3168 ingress will need to be updated if it is to comply | |||
with the present specification, whether or not it implemented the | with the present specification, whether or not it implemented the | |||
optional full functionality mode of RFC3168. | optional full functionality mode of section 9.1.1 of RFC3168. | |||
RFC3168 defined a (required) limited functionality mode and an | Section 9.1 of RFC3168 defined a (required) limited functionality | |||
(optional) full functionality mode for a tunnel. In RFC3168, | mode and an (optional) full functionality mode for a tunnel. In | |||
modes applied to both ends of the tunnel, while in the present | RFC3168, modes applied to both ends of the tunnel, while in the | |||
specification, modes are only used at the ingress--a single egress | present specification, modes are only used at the ingress--a | |||
behaviour covers all cases. | single egress behaviour covers all cases. | |||
The normal mode of encapsulation is an update to the encapsulation | The normal mode of encapsulation is an update to the encapsulation | |||
behaviour of the full functionality mode of an RFC3168 ingress. | behaviour of the full functionality mode of an RFC3168 ingress. | |||
The compatibility mode of encapsulation is identical to the | The compatibility mode of encapsulation is identical to the | |||
encapsulation behaviour of the limited functionality mode of an | encapsulation behaviour of the limited functionality mode of an | |||
RFC3168 ingress, except it is optional. | RFC3168 ingress, except it is not always obligatory. | |||
The constraints on how tunnel discovery protocols set modes in | The constraints on how tunnel discovery protocols set modes in | |||
Section 4.3 and Section 4.4 are an update to RFC3168, but they are | Section 4.3 and Section 4.4 are an update to RFC3168, but they are | |||
unlikely to require code changes as they document existing safe | unlikely to require code changes as they document existing safe | |||
practice. | practice. | |||
5.3. Motivation for Changes | 5.3. Motivation for Changes | |||
An overriding goal is to ensure the same ECN signals can mean the | An overriding goal is to ensure the same ECN signals can mean the | |||
same thing whatever tunnels happen to encapsulate an IP packet flow. | same thing whatever tunnels happen to encapsulate an IP packet flow. | |||
skipping to change at page 28, line 10 | skipping to change at page 28, line 39 | |||
An RFC4301 IPsec ingress can comply with this new specification | An RFC4301 IPsec ingress can comply with this new specification | |||
without any update and it has no need for any new modes, options or | without any update and it has no need for any new modes, options or | |||
configuration. So, all other things being equal, it will continue to | configuration. So, all other things being equal, it will continue to | |||
interwork identically with any egress it worked with before (fully | interwork identically with any egress it worked with before (fully | |||
backward compatible). | backward compatible). | |||
6.3. Update to RFC3168 Encapsulation | 6.3. Update to RFC3168 Encapsulation | |||
The encapsulation behaviour of the new normal mode copies the ECN | The encapsulation behaviour of the new normal mode copies the ECN | |||
field whereas RFC3168 full functionality mode reset it. However, all | field whereas an RFC3168 ingress in full functionality mode reset it. | |||
other things being equal, if RFC3168 ingress is updated to the | However, all other things being equal, if an RFC3168 ingress is | |||
present specification, the outgoing packets from any tunnel egress | updated to the present specification, the outgoing packets from any | |||
will still be unchanged. This is because all variants of tunnelling | tunnel egress will still be unchanged. This is because all variants | |||
at either end (RFC4301, both modes of RFC3168, both modes of RFC2481, | of tunnelling at either end (RFC4301, both modes of RFC3168, both | |||
RFC2401, RFC2003 and the present specification) have always | modes of RFC2481, RFC2401, RFC2003 and the present specification) | |||
propagated an incoming CE marking through the inner header and onward | have always propagated an incoming CE marking through the inner | |||
into the outgoing header, whether the outer header is reset or | header and onward into the outgoing header, whether the outer header | |||
copied. Therefore, If the tunnel is considered as a black box, the | is reset or copied. Therefore, If the tunnel is considered as a | |||
packets output from any egress will be identical with or without an | black box, the packets output from any egress will be identical with | |||
update to the ingress. Nonetheless, if packets are observed within | or without an update to the ingress. Nonetheless, if packets are | |||
the black box (between the tunnel endpoints), CE markings copied by | observed within the black box (between the tunnel endpoints), CE | |||
the updated ingress will be visible within the black box, whereas | markings copied by the updated ingress will be visible within the | |||
they would not have been before. Therefore, the update to | black box, whereas they would not have been before. Therefore, the | |||
encapsulation can be termed 'black-box backwards compatible' (i.e. | update to encapsulation can be termed 'black-box backwards | |||
identical unless you look inside the tunnel). | compatible' (i.e. identical unless you look inside the tunnel). | |||
This specification introduces no new backward compatibility issues | This specification introduces no new backward compatibility issues | |||
when a compliant ingress talks with a legacy egress, but it has to | when a compliant ingress talks with a legacy egress, but it has to | |||
provide similar safeguards to those already defined in RFC3168. | provide similar safeguards to those already defined in RFC3168. | |||
RFC3168 laid down rules to ensure that an RFC3168 ingress turns off | RFC3168 laid down rules to ensure that an RFC3168 ingress turns off | |||
ECN (limited functionality mode) if it is paired with a legacy egress | ECN (limited functionality mode) if it is paired with a legacy egress | |||
(RFC 2481, RFC2401 or RFC2003), which would not propagate ECN | (RFC 2481, RFC2401 or RFC2003), which would not propagate ECN | |||
correctly. The present specification carries forward those rules | correctly. The present specification carries forward those rules | |||
(Section 4.3). It uses compatibility mode whenever RFC3168 would | (Section 4.3). It uses compatibility mode whenever RFC3168 would | |||
have used limited functionality mode, and their per-packet behaviours | have used limited functionality mode, and their per-packet behaviours | |||
are identical. Therefore, all other things being equal, an ingress | are identical. Therefore, all other things being equal, an ingress | |||
using the new rules will interwork with any legacy tunnel egress in | using the new rules will interwork with any legacy tunnel egress in | |||
exactly the same way as an RFC3168 ingress (still black-box backward | exactly the same way as an RFC3168 ingress (still black-box backward | |||
compatible). | compatible). | |||
7. Design Principles for Alternate ECN Tunnelling Semantics | 7. Design Principles for Alternate ECN Tunnelling Semantics | |||
This section is informative not normative. | This section is informative not normative. | |||
S.5 of RFC3168 permits the Diffserv codepoint (DSCP)[RFC2474] to | Section 5 of RFC3168 permits the Diffserv codepoint (DSCP)[RFC2474] | |||
'switch in' alternative behaviours for marking the ECN field, just as | to 'switch in' alternative behaviours for marking the ECN field, just | |||
it switches in different per-hop behaviours (PHBs) for scheduling. | as it switches in different per-hop behaviours (PHBs) for scheduling. | |||
[RFC4774] gives best current practice for designing such alternative | [RFC4774] gives best current practice for designing such alternative | |||
ECN semantics and very briefly mentions in section 5.4 that | ECN semantics and very briefly mentions in section 5.4 that | |||
tunnelling needs to be considered. The guidance below complements | tunnelling needs to be considered. The guidance below complements | |||
and extends RFC4774, giving additional guidance on designing any | and extends RFC4774, giving additional guidance on designing any | |||
alternate ECN semantics that would also require alternate tunnelling | alternate ECN semantics that would also require alternate tunnelling | |||
semantics. | semantics. | |||
The overriding guidance is: "Avoid designing alternate ECN tunnelling | The overriding guidance is: "Avoid designing alternate ECN tunnelling | |||
semantics, if at all possible." If a scheme requires tunnels to | semantics, if at all possible." If a scheme requires tunnels to | |||
implement special processing of the ECN field for certain DSCPs, it | implement special processing of the ECN field for certain DSCPs, it | |||
skipping to change at page 29, line 38 | skipping to change at page 30, line 20 | |||
introduced across the tunnel in the outer header. | introduced across the tunnel in the outer header. | |||
2. If it has established that ECN will be correctly propagated, | 2. If it has established that ECN will be correctly propagated, | |||
an encapsulator ought to also copy incoming congestion | an encapsulator ought to also copy incoming congestion | |||
notification into the outer header. The general principle | notification into the outer header. The general principle | |||
here is that the outer header should reflect congestion | here is that the outer header should reflect congestion | |||
accumulated along the whole upstream path, not just since the | accumulated along the whole upstream path, not just since the | |||
tunnel ingress (Appendix B.3 on management and monitoring | tunnel ingress (Appendix B.3 on management and monitoring | |||
explains). | explains). | |||
In some circumstances (e.g. pseudowires, PCN), the whole path | In some circumstances (e.g. PCN [RFC5559] and perhaps some | |||
is divided into segments, each with its own congestion | pseudowires [RFC5659]), the whole path is divided into | |||
notification and feedback loop. In these cases, the function | segments, each with its own congestion notification and | |||
that regulates load at the start of each segment will need to | feedback loop. In these cases, the function that regulates | |||
reset congestion notification for its segment. Often the | load at the start of each segment will need to reset | |||
point where congestion notification is reset will also be | congestion notification for its segment. Often the point | |||
located at the start of a tunnel. However, the resetting | where congestion notification is reset will also be located at | |||
function can be thought of as being applied to packets after | the start of a tunnel. However, the resetting function can be | |||
the encapsulation function--two logically separate functions | thought of as being applied to packets after the encapsulation | |||
even though they might run on the same physical box. Then the | function--two logically separate functions even though they | |||
code module doing encapsulation can keep to the copying rule | might run on the same physical box. Then the code module | |||
and the load regulator module can reset congestion, without | doing encapsulation can keep to the copying rule and the load | |||
any code in either module being conditional on whether the | regulator module can reset congestion, without any code in | |||
other is there. | either module being conditional on whether the other is there. | |||
On decapsulation in any new scheme: | On decapsulation in any new scheme: | |||
1. If the arriving inner header is Not-ECT it implies the | 1. If the arriving inner header is Not-ECT it implies the | |||
transport will not understand other ECN codepoints. If the | transport will not understand other ECN codepoints. If the | |||
outer header carries an explicit congestion marking, the | outer header carries an explicit congestion marking, the | |||
alternate scheme would be expected to drop the packet--the | alternate scheme would be expected to drop the packet--the | |||
only indication of congestion the transport will understand. | only indication of congestion the transport will understand. | |||
If the alternate scheme recommends forwarding rather than | If the alternate scheme recommends forwarding rather than | |||
dropping such a packet, it will need to clearly justify this | dropping such a packet, it will need to clearly justify this | |||
skipping to change at page 33, line 7 | skipping to change at page 33, line 36 | |||
that would otherwise be confounded by ambiguity. | that would otherwise be confounded by ambiguity. | |||
11. Acknowledgements | 11. Acknowledgements | |||
Thanks to David Black for his insightful reviews and patient | Thanks to David Black for his insightful reviews and patient | |||
explanations of better ways to think about function placement and | explanations of better ways to think about function placement and | |||
alarms. Thanks to David and to Anil Agarwal for pointing out cases | alarms. Thanks to David and to Anil Agarwal for pointing out cases | |||
where it is safe to forward CU combinations of headers. Also thanks | where it is safe to forward CU combinations of headers. Also thanks | |||
to Arnaud Jacquet for the idea for Appendix C. Thanks to Gorry | to Arnaud Jacquet for the idea for Appendix C. Thanks to Gorry | |||
Fairhurst, Teco Boot, Michael Menth, Bruce Davie, Toby Moncaster, | Fairhurst, Teco Boot, Michael Menth, Bruce Davie, Toby Moncaster, | |||
Sally Floyd, Alfred Hoenes, Gabriele Corliano, Ingemar Johansson and | Sally Floyd, Alfred Hoenes, Gabriele Corliano, Ingemar Johansson, | |||
Philip Eardley for their thoughts and careful review comments, and to | Philip Eardley and David Harrington for their thoughts and careful | |||
Stephen Hanna and Ben Campbell respectively for conducting the | review comments, and to Stephen Hanna, Ben Campbell and members of | |||
Security Directorate and General Area reviews. | the IESG for respectively conducting the Security Directorate, | |||
General Area and IESG reviews. | ||||
Bob Briscoe is partly funded by Trilogy, a research project (ICT- | Bob Briscoe is partly funded by Trilogy, a research project (ICT- | |||
216372) supported by the European Community under its Seventh | 216372) supported by the European Community under its Seventh | |||
Framework Programme. The views expressed here are those of the | Framework Programme. | |||
author only. | ||||
Comments Solicited (to be removed by the RFC Editor): | Comments Solicited (to be removed by the RFC Editor): | |||
Comments and questions are encouraged and very welcome. They can be | Comments and questions are encouraged and very welcome. They can be | |||
addressed to the IETF Transport Area working group mailing list | addressed to the IETF Transport Area working group mailing list | |||
<tsvwg@ietf.org>, and/or to the authors. | <tsvwg@ietf.org>, and/or to the authors. | |||
12. References | 12. References | |||
12.1. Normative References | 12.1. Normative References | |||
skipping to change at page 34, line 43 | skipping to change at page 35, line 24 | |||
RFC 4774, November 2006. | RFC 4774, November 2006. | |||
[RFC5129] Davie, B., Briscoe, B., and J. Tay, | [RFC5129] Davie, B., Briscoe, B., and J. Tay, | |||
"Explicit Congestion Marking in | "Explicit Congestion Marking in | |||
MPLS", RFC 5129, January 2008. | MPLS", RFC 5129, January 2008. | |||
[RFC5559] Eardley, P., "Pre-Congestion | [RFC5559] Eardley, P., "Pre-Congestion | |||
Notification (PCN) Architecture", | Notification (PCN) Architecture", | |||
RFC 5559, June 2009. | RFC 5559, June 2009. | |||
[RFC5659] Bocci, M. and S. Bryant, "An | ||||
Architecture for Multi-Segment | ||||
Pseudowire Emulation Edge-to-Edge", | ||||
RFC 5659, October 2009. | ||||
[RFC5670] Eardley, P., "Metering and Marking | [RFC5670] Eardley, P., "Metering and Marking | |||
Behaviour of PCN-Nodes", RFC 5670, | Behaviour of PCN-Nodes", RFC 5670, | |||
November 2009. | November 2009. | |||
[RFC5696] Moncaster, T., Briscoe, B., and M. | [RFC5696] Moncaster, T., Briscoe, B., and M. | |||
Menth, "Baseline Encoding and | Menth, "Baseline Encoding and | |||
Transport of Pre-Congestion | Transport of Pre-Congestion | |||
Information", RFC 5696, | Information", RFC 5696, | |||
November 2009. | November 2009. | |||
skipping to change at page 37, line 6 | skipping to change at page 37, line 42 | |||
into the outer header that is exposed across the tunnel it will have | into the outer header that is exposed across the tunnel it will have | |||
allowed a covert channel from 'A' to M that bypasses its encryption | allowed a covert channel from 'A' to M that bypasses its encryption | |||
of the inner header. And if 'E' copies these fields from the outer | of the inner header. And if 'E' copies these fields from the outer | |||
header to the inner, even if it validates authentication from 'I', it | header to the inner, even if it validates authentication from 'I', it | |||
will have allowed a covert channel from 'M' to 'B'. | will have allowed a covert channel from 'M' to 'B'. | |||
ECN at the IP layer is designed to carry information about congestion | ECN at the IP layer is designed to carry information about congestion | |||
from a congested resource towards downstream nodes. Typically a | from a congested resource towards downstream nodes. Typically a | |||
downstream transport might feed the information back somehow to the | downstream transport might feed the information back somehow to the | |||
point upstream of the congestion that can regulate the load on the | point upstream of the congestion that can regulate the load on the | |||
congested resource, but other actions are possible (see [RFC3168] | congested resource, but other actions are possible [RFC3168; section | |||
S.6). In terms of the above unicast scenario, ECN effectively | 6]. In terms of the above unicast scenario, ECN effectively intends | |||
intends to create an information channel (for congestion signalling) | to create an information channel (for congestion signalling) from 'M' | |||
from 'M' to 'B' (for 'B' to feed back to 'A'). Therefore the goals | to 'B' (for 'B' to feed back to 'A'). Therefore the goals of IPsec | |||
of IPsec and ECN are mutually incompatible, requiring some | and ECN are mutually incompatible, requiring some compromise. | |||
compromise. | ||||
With respect to using the DS or ECN fields as covert channels, | With respect to using the DS or ECN fields as covert channels, | |||
S.5.1.2 of RFC4301 says, "controls are provided to manage the | section 5.1.2 of RFC4301 says, "controls are provided to manage the | |||
bandwidth of this channel". Using the ECN processing rules of | bandwidth of this channel". Using the ECN processing rules of | |||
RFC4301, the channel bandwidth is two bits per datagram from 'A' to | RFC4301, the channel bandwidth is two bits per datagram from 'A' to | |||
'M' and one bit per datagram from 'M' to 'A' (because 'E' limits the | 'M' and one bit per datagram from 'M' to 'A' (because 'E' limits the | |||
combinations of the 2-bit ECN field that it will copy). In both | combinations of the 2-bit ECN field that it will copy). In both | |||
cases the covert channel bandwidth is further reduced by noise from | cases the covert channel bandwidth is further reduced by noise from | |||
any real congestion marking. RFC4301 implies that these covert | any real congestion marking. RFC4301 implies that these covert | |||
channels are sufficiently limited to be considered a manageable | channels are sufficiently limited to be considered a manageable | |||
threat. However, with respect to the larger (6b) DS field, the same | threat. However, with respect to the larger (6b) DS field, the same | |||
section of RFC4301 says not copying is the default, but a | section of RFC4301 says not copying is the default, but a | |||
configuration option can allow copying "to allow a local | configuration option can allow copying "to allow a local | |||
End of changes. 39 change blocks. | ||||
106 lines changed or deleted | 145 lines changed or added | |||
This html diff was produced by rfcdiff 1.38. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |