draft-ietf-6lo-6lobac-08.txt | rfc8163.txt | |||
---|---|---|---|---|
6Lo Working Group K. Lynn, Ed. | Internet Engineering Task Force (IETF) K. Lynn, Ed. | |||
Internet-Draft Verizon Labs | Request for Comments: 8163 Verizon Labs | |||
Intended status: Standards Track J. Martocci | Category: Standards Track J. Martocci | |||
Expires: September 11, 2017 Johnson Controls | ISSN: 2070-1721 Johnson Controls | |||
C. Neilson | C. Neilson | |||
Delta Controls | Delta Controls | |||
S. Donaldson | S. Donaldson | |||
Honeywell | Honeywell | |||
March 10, 2017 | May 2017 | |||
Transmission of IPv6 over MS/TP Networks | Transmission of IPv6 over Master-Slave/Token-Passing (MS/TP) Networks | |||
draft-ietf-6lo-6lobac-08 | ||||
Abstract | Abstract | |||
Master-Slave/Token-Passing (MS/TP) is a medium access control method | Master-Slave/Token-Passing (MS/TP) is a medium access control method | |||
for the RS-485 physical layer and is used primarily in building | for the RS-485 physical layer and is used primarily in building | |||
automation networks. This specification defines the frame format for | automation networks. This specification defines the frame format for | |||
transmission of IPv6 packets and the method of forming link-local and | transmission of IPv6 packets and the method of forming link-local and | |||
statelessly autoconfigured IPv6 addresses on MS/TP networks. | statelessly autoconfigured IPv6 addresses on MS/TP networks. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on September 11, 2017. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
http://www.rfc-editor.org/info/rfc8163. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Profile for IPv6 over MS/TP . . . . . . . . . . . . . . . . . 5 | 2. Profile for IPv6 over MS/TP . . . . . . . . . . . . . . . . . 6 | |||
3. Addressing Modes . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Addressing Modes . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4. Maximum Transmission Unit (MTU) . . . . . . . . . . . . . . . 7 | 4. Maximum Transmission Unit (MTU) . . . . . . . . . . . . . . . 8 | |||
5. LoBAC Adaptation Layer . . . . . . . . . . . . . . . . . . . 7 | 5. LoBAC Adaptation Layer . . . . . . . . . . . . . . . . . . . 8 | |||
6. Stateless Address Autoconfiguration . . . . . . . . . . . . . 8 | 6. Stateless Address Autoconfiguration . . . . . . . . . . . . . 9 | |||
7. IPv6 Link Local Address . . . . . . . . . . . . . . . . . . . 9 | 7. IPv6 Link-Local Address . . . . . . . . . . . . . . . . . . . 10 | |||
8. Unicast Address Mapping . . . . . . . . . . . . . . . . . . . 9 | 8. Unicast Address Mapping . . . . . . . . . . . . . . . . . . . 10 | |||
9. Multicast Address Mapping . . . . . . . . . . . . . . . . . . 10 | 9. Multicast Address Mapping . . . . . . . . . . . . . . . . . . 11 | |||
10. Header Compression . . . . . . . . . . . . . . . . . . . . . 10 | 10. Header Compression . . . . . . . . . . . . . . . . . . . . . 11 | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
12. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | |||
13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 11 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | Appendix A. Abstract MAC Interface . . . . . . . . . . . . . . . 15 | |||
Appendix A. Abstract MAC Interface . . . . . . . . . . . . . . . 14 | Appendix B. Consistent Overhead Byte Stuffing (COBS) . . . . . . 17 | |||
Appendix B. Consistent Overhead Byte Stuffing [COBS] . . . . . . 17 | Appendix C. Encoded CRC-32K (CRC32K) . . . . . . . . . . . . . . 20 | |||
Appendix C. Encoded CRC-32K [CRC32K] . . . . . . . . . . . . . . 20 | ||||
Appendix D. Example 6LoBAC Frame Decode . . . . . . . . . . . . 22 | Appendix D. Example 6LoBAC Frame Decode . . . . . . . . . . . . 22 | |||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 27 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
1. Introduction | 1. Introduction | |||
Master-Slave/Token-Passing (MS/TP) is a medium access control (MAC) | Master-Slave/Token-Passing (MS/TP) is a Medium Access Control (MAC) | |||
protocol for the RS-485 [TIA-485-A] physical layer and is used | protocol for the RS-485 [TIA-485-A] physical layer and is used | |||
primarily in building automation networks. This specification | primarily in building automation networks. This specification | |||
defines the frame format for transmission of IPv6 [RFC2460] packets | defines the frame format for transmission of IPv6 [RFC2460] packets | |||
and the method of forming link-local and statelessly autoconfigured | and the method of forming link-local and statelessly autoconfigured | |||
IPv6 addresses on MS/TP networks. The general approach is to adapt | IPv6 addresses on MS/TP networks. The general approach is to adapt | |||
elements of the 6LoWPAN specifications [RFC4944], [RFC6282], and | elements of the 6LoWPAN specifications ([RFC4944], [RFC6282], and | |||
[RFC6775] to constrained wired networks, as noted below. | [RFC6775]) to constrained wired networks, as noted below. | |||
An MS/TP device is typically based on a low-cost microcontroller with | An MS/TP device is typically based on a low-cost microcontroller with | |||
limited processing power and memory. These constraints, together | limited processing power and memory. These constraints, together | |||
with low data rates and a small MAC address space, are similar to | with low data rates and a small MAC address space, are similar to | |||
those faced in 6LoWPAN networks. MS/TP differs significantly from | those faced in 6LoWPAN networks. MS/TP differs significantly from | |||
6LoWPAN in at least three respects: a) MS/TP devices are typically | 6LoWPAN in at least three respects: a) MS/TP devices are typically | |||
mains powered, b) all MS/TP devices on a segment can communicate | mains powered, b) all MS/TP devices on a segment can communicate | |||
directly so there are no hidden node or mesh routing issues, and c) | directly so there are no hidden node or mesh routing issues, and c) | |||
the latest MS/TP specification provides support for large payloads, | the latest MS/TP specification provides support for large payloads, | |||
eliminating the need for fragmentation and reassembly below IPv6. | eliminating the need for fragmentation and reassembly below IPv6. | |||
The following sections provide a brief overview of MS/TP, then | The following sections provide a brief overview of MS/TP and then | |||
describe how to form IPv6 addresses and encapsulate IPv6 packets in | describe how to form IPv6 addresses and encapsulate IPv6 packets in | |||
MS/TP frames. This specifcation (subsequently referred to as | MS/TP frames. This specification (subsequently referred to as | |||
"6LoBAC") includes a REQUIRED header compression mechanism that is | "6LoBAC") includes a REQUIRED header compression mechanism that is | |||
based on LOWPAN_IPHC [RFC6282] and improves MS/TP link utilization. | based on LOWPAN_IPHC [RFC6282] and improves MS/TP link utilization. | |||
1.1. Requirements Language | 1.1. Requirements Language | |||
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 [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
1.2. Abbreviations Used | 1.2. Abbreviations Used | |||
ASHRAE: American Society of Heating, Refrigerating, and Air- | ASHRAE: American Society of Heating, Refrigerating, and Air- | |||
Conditioning Engineers (http://www.ashrae.org) | Conditioning Engineers <http://www.ashrae.org> | |||
BACnet: An ISO/ANSI/ASHRAE Standard Data Communication Protocol | ||||
for Building Automation and Control Networks | ||||
CRC: Cyclic Redundancy Code | BACnet: An ISO/ANSI/ASHRAE Standard Data Communication Protocol for | |||
Building Automation and Control Networks | ||||
MAC: Medium Access Control | CRC: Cyclic Redundancy Code | |||
MSDU: MAC Service Data Unit (MAC client data) | MAC: Medium Access Control | |||
MTU: Maximum Transmission Unit; the size of the largest network | MSDU: MAC Service Data Unit (MAC client data) | |||
layer protocol data unit that can be communicated in a single | MTU: Maximum Transmission Unit; the size of the largest data unit | |||
network transaction | at the network-layer protocol that can be communicated in a | |||
single network transaction | ||||
UART: Universal Asynchronous Transmitter/Receiver | UART: Universal Asynchronous Transmitter/Receiver | |||
1.3. MS/TP Overview | 1.3. MS/TP Overview | |||
This section provides a brief overview of MS/TP, as specified in | This section provides a brief overview of MS/TP, as specified in | |||
ANSI/ASHRAE Standard 135-2016 [BACnet] Clause 9. The latest version | Clause 9 of the ANSI/ASHRAE Standard 135-2016 [BACnet]. The latest | |||
of [BACnet] integrates changes to legacy MS/TP (approved as | version of [BACnet] integrates changes to legacy MS/TP (approved as | |||
[Addendum_an]) that provide support for larger frame sizes and | [Addendum_an]) that provide support for larger frame sizes and | |||
improved error handling. [BACnet] Clause 9 also covers physical | improved error handling. [BACnet], Clause 9 also covers physical- | |||
layer deployment options. | layer deployment options. | |||
MS/TP is designed to enable multidrop networks over shielded twisted | MS/TP is designed to enable multidrop networks over shielded twisted | |||
pair wiring. It can support network segments up to 1000 meters in | pair wiring. It can support network segments up to 1000 meters in | |||
length at a data rate of 115.2 kbit/s, or segments up to 1200 meters | length at a data rate of 115.2 kbit/s or segments up to 1200 meters | |||
in length at lower bit rates. An MS/TP interface requires only a | in length at lower bit rates. An MS/TP interface requires only a | |||
UART, an RS-485 [TIA-485-A] transceiver with a driver that can be | UART, an RS-485 [TIA-485-A] transceiver with a driver that can be | |||
disabled, and a 5 ms resolution timer. The MS/TP MAC is typically | disabled, and a 5 ms resolution timer. The MS/TP MAC is typically | |||
implemented in software. | implemented in software. | |||
The differential signaling used by [TIA-485-A] requires a contention- | The differential signaling used by [TIA-485-A] requires a contention- | |||
free MAC. MS/TP uses a token to control access to a multidrop bus. | free MAC. MS/TP uses a token to control access to a multidrop bus. | |||
Only an MS/TP master node can initiate the unsolicited transfer of | Only an MS/TP master node can initiate the unsolicited transfer of | |||
data, and only when it holds the token. After sending at most a | data, and only when it holds the token. After sending at most a | |||
configured maximum number of data frames, a master node passes the | configured maximum number of data frames, a master node passes the | |||
token to the next master node (as determined by MAC address). If | token to the next master node (as determined by the MAC address). If | |||
present on the link, legacy MS/TP implementations (including any | present on the link, legacy MS/TP implementations (including any | |||
slave nodes) ignore the frame format defined in this specification. | slave nodes) ignore the frame format defined in this specification. | |||
[BACnet] Clause 9 defines a range of Frame Type values used to | [BACnet], Clause 9 defines a range of Frame Type values used to | |||
designate frames that contain data and data CRC fields encoded using | designate frames that contain Data and Data CRC fields encoded using | |||
Consistent Overhead Byte Stuffing [COBS] (see Appendix B). The | Consistent Overhead Byte Stuffing [COBS] (see Appendix B). The | |||
purpose of COBS encoding is to eliminate preamble sequences from the | purpose of COBS encoding is to eliminate preamble sequences from the | |||
Encoded Data and Encoded CRC-32K fields. The Encoded Data is covered | Encoded Data and Encoded CRC-32K fields. The Encoded Data field is | |||
by a 32-bit CRC [CRC32K] (see Appendix C) that is also COBS encoded. | covered by a 32-bit CRC [CRC32K] (see Appendix C) that is also COBS | |||
encoded. | ||||
MS/TP COBS-encoded frames have the following format: | MS/TP COBS-encoded frames have the following format: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0x55 | 0xFF | Frame Type | DA | | | 0x55 | 0xFF | Frame Type | DA | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| SA | Length (MS octet first) | Header CRC | | | SA | Length (MS octet first) | Header CRC | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 5, line 27 ¶ | skipping to change at page 6, line 11 ¶ | |||
ASHRAE. Frame Types 32 - 127 designate COBS-encoded frames that | ASHRAE. Frame Types 32 - 127 designate COBS-encoded frames that | |||
convey Encoded Data and Encoded CRC-32K fields. See Section 2 for | convey Encoded Data and Encoded CRC-32K fields. See Section 2 for | |||
additional details. | additional details. | |||
The Destination and Source Addresses are each one octet in length. | The Destination and Source Addresses are each one octet in length. | |||
See Section 3 for additional details. | See Section 3 for additional details. | |||
For COBS-encoded frames, the Length field indicates the size of the | For COBS-encoded frames, the Length field indicates the size of the | |||
[COBS] Encoded Data field in octets, plus three. (This adjustment is | [COBS] Encoded Data field in octets, plus three. (This adjustment is | |||
required in order for legacy MS/TP devices to ignore COBS-encoded | required in order for legacy MS/TP devices to ignore COBS-encoded | |||
frames.) See Section 4 and Appendices for additional details. | frames.) See Section 4 and the Appendices for additional details. | |||
The Header CRC field covers the Frame Type, Destination Address, | The Header CRC field covers the Frame Type, Destination Address, | |||
Source Address, and Length fields. The Header CRC generation and | Source Address, and Length fields. The Header CRC generation and | |||
check procedures are specified in [BACnet] Annex G.1. | check procedures are specified in [BACnet], Annex G.1. | |||
Use of the optional 0xFF trailer octet is discussed in [BACnet] | Use of the optional 0xFF trailer octet is discussed in [BACnet], | |||
Clause 9. | Clause 9. | |||
1.4. Goals and Constraints | 1.4. Goals and Constraints | |||
The main goals of this specification are a) to enable IPv6 directly | The main goals of this specification are a) to enable IPv6 directly | |||
on wired end devices in building automation and control networks by | on wired end devices in building automation and control networks by | |||
leveraging existing standards to the greatest extent possible, and b) | leveraging existing standards to the greatest extent possible, and b) | |||
to co-exist with legacy MS/TP implementations. Co-existence allows | to co-exist with legacy MS/TP implementations. Co-existence allows | |||
MS/TP networks to be incrementally upgraded to support IPv6. | MS/TP networks to be incrementally upgraded to support IPv6. | |||
In order to co-exist with legacy devices, no changes are permitted to | In order to co-exist with legacy devices, no changes are permitted to | |||
the MS/TP addressing modes, frame header format, control frames, or | the MS/TP addressing modes, frame header format, control frames, or | |||
Master Node state machine as specified in [BACnet] Clause 9. | Master Node state machine as specified in [BACnet], Clause 9. | |||
2. Profile for IPv6 over MS/TP | 2. Profile for IPv6 over MS/TP | |||
ASHRAE has assigned an MS/TP Frame Type value of 34 to indicate IPv6 | ASHRAE has assigned an MS/TP Frame Type value of 34 to indicate IPv6 | |||
over MS/TP (LoBAC) Encapsulation. This falls within the range of | over MS/TP (LoBAC) Encapsulation. This falls within the range of | |||
values that designate COBS-encoded data frames. | values that designate COBS-encoded data frames. | |||
2.1. Mandatory Features | 2.1. Mandatory Features | |||
[BACnet] Clause 9 specifies mandatory to implement features of MS/TP | [BACnet], Clause 9 specifies mandatory-to-implement features of MS/TP | |||
devices. E.g., it is mandatory that all MS/TP nodes respond to a | devices. For example, it is mandatory that all MS/TP nodes respond | |||
Test_Request with a Test_Response frame. All MS/TP master nodes must | to a Test_Request with a Test_Response frame. All MS/TP master nodes | |||
implement the Master Node state machine and handle Token, Poll For | must implement the Master Node state machine and handle Token, Poll | |||
Master, and Reply to Poll For Master control frames. 6LoBAC nodes | For Master, and Reply To Poll For Master control frames. 6LoBAC | |||
are MS/TP master nodes that implement a Receive Frame state machine | nodes are MS/TP master nodes that implement a Receive Frame state | |||
capable of handling COBS-encoded frames. | machine capable of handling COBS-encoded frames. | |||
6LoBAC nodes must support a data rate of 115.2 kbit/s and may support | 6LoBAC nodes must support a data rate of 115.2 kbit/s and may support | |||
lower data rates as specified in [BACnet] Clause 9. The method of | lower data rates as specified in [BACnet], Clause 9. The method of | |||
selecting the data rate is outside the scope of this specification. | selecting the data rate is outside the scope of this specification. | |||
2.2. Configuration Constants | 2.2. Configuration Constants | |||
The following constants are used by the Receive Frame state machine. | The following constants are used by the Receive Frame state machine. | |||
Nmin_COBS_length The minimum valid Length value of any LoBAC | Nmin_COBS_length The minimum valid Length value of any LoBAC- | |||
encapsulated frame: 5 | encapsulated frame: 5 | |||
Nmax_COBS_length The maximum valid Length value of any LoBAC | Nmax_COBS_length The maximum valid Length value of any LoBAC- | |||
encapsulated frame: 1509 | encapsulated frame: 1509 | |||
2.3. Configuration Parameters | 2.3. Configuration Parameters | |||
The following parameters are used by the Master Node state machine. | The following parameters are used by the Master Node state machine. | |||
Nmax_info_frames The default maximum number of information frames | Nmax_info_frames The default maximum number of information frames | |||
the node may send before it must pass the token: 1 | the node may send before it must pass the token: 1 | |||
Nmax_master The default highest allowable address for master | Nmax_master The default highest allowable address for master | |||
nodes: 127 | nodes: 127 | |||
The mechanisms for setting parameters or monitoring MS/TP performance | The mechanisms for setting parameters or monitoring MS/TP performance | |||
are outside the scope of this specification. | are outside the scope of this specification. | |||
3. Addressing Modes | 3. Addressing Modes | |||
MS/TP node (MAC) addresses are one octet in length and assigned | MS/TP node (MAC) addresses are one octet in length and are assigned | |||
dynamically. The method of assigning MAC addresses is outside the | dynamically. The method of assigning MAC addresses is outside the | |||
scope of this specification. However, each MS/TP node on the link | scope of this specification. However, each MS/TP node on the link | |||
MUST have a unique address in order to ensure correct MAC operation. | MUST have a unique address in order to ensure correct MAC operation. | |||
[BACnet] Clause 9 specifies that addresses 0 through 127 are valid | [BACnet], Clause 9 specifies that addresses 0 through 127 are valid | |||
for master nodes. The method specified in Section 6 for creating a | for master nodes. The method specified in Section 6 for creating a | |||
MAC-address-derived Interface Identifier (IID) ensures that an IID of | MAC-address-derived Interface Identifier (IID) ensures that an IID of | |||
all zeros can never be generated. | all zeros can never be generated. | |||
A Destination Address of 255 (all nodes) indicates a MAC-layer | A Destination Address of 255 (all nodes) indicates a MAC-layer | |||
broadcast. MS/TP does not support multicast, therefore all IPv6 | broadcast. MS/TP does not support multicast; therefore, all IPv6 | |||
multicast packets MUST be broadcast at the MAC layer and filtered at | multicast packets MUST be broadcast at the MAC layer and filtered at | |||
the IPv6 layer. A Source Address of 255 MUST NOT be used. | the IPv6 layer. A Source Address of 255 MUST NOT be used. | |||
Hosts learn IPv6 prefixes via router advertisements according to | Hosts learn IPv6 prefixes via router advertisements according to | |||
[RFC4861]. | [RFC4861]. | |||
4. Maximum Transmission Unit (MTU) | 4. Maximum Transmission Unit (MTU) | |||
Upon transmission, the network layer MTU is formatted according to | Upon transmission, the network-layer MTU is formatted according to | |||
Section 5 and becomes the MAC service data unit (MSDU). The MSDU is | Section 5 and becomes the MAC service data unit (MSDU). The MSDU is | |||
then COBS encoded by MS/TP. Upon reception, the steps are reversed. | then COBS encoded by MS/TP. Upon reception, the steps are reversed. | |||
[BACnet] Clause 9 supports MSDUs up to 2032 octets in length. | [BACnet], Clause 9 supports MSDUs up to 2032 octets in length. | |||
IPv6 [RFC2460] requires that every link in the internet have an MTU | IPv6 [RFC2460] requires that every link in an internet have an MTU of | |||
of 1280 octets or greater. Additionally, a node must be able to | 1280 octets or greater. Additionally, a node must be able to accept | |||
accept a fragmented packet that, after reassembly, is as large as | a fragmented packet that, after reassembly, is as large as 1500 | |||
1500 octets. This specification defines an MTU length of at least | octets. This specification defines an MTU length of at least 1280 | |||
1280 octets and at most 1500 octets. Support for an MTU length of | octets and at most 1500 octets. Support for an MTU length of 1500 | |||
1500 octets is RECOMMENDED. | octets is RECOMMENDED. | |||
5. LoBAC Adaptation Layer | 5. LoBAC Adaptation Layer | |||
This section specifies an adaptation layer to support compressed IPv6 | This section specifies an adaptation layer to support compressed IPv6 | |||
headers as specified in Section 10. IPv6 header compression MUST be | headers as specified in Section 10. IPv6 header compression MUST be | |||
implemented on all nodes. Implementations MAY also support Generic | implemented on all 6LoBAC nodes. Implementations MAY also support | |||
Header Compression [RFC7400] for transport layer headers. | Generic Header Compression [RFC7400] for transport layer headers. | |||
The LoBAC encapsulation format defined in this section describes the | The LoBAC encapsulation format defined in this section describes the | |||
MSDU of an IPv6 over MS/TP frame. The LoBAC payload (i.e., an IPv6 | MSDU of an IPv6 over MS/TP frame. The LoBAC payload (i.e., an IPv6 | |||
packet) follows an encapsulation header stack. LoBAC is a subset of | packet) follows an encapsulation header stack. LoBAC is a subset of | |||
the LoWPAN encapsulation defined in [RFC4944] as updated by [RFC6282] | the LoWPAN encapsulation defined in [RFC4944], as updated by | |||
so the use of "LOWPAN" in literals below is intentional. The primary | [RFC6282], so the use of "LOWPAN" in literals below is intentional. | |||
difference between LoWPAN and LoBAC encapsulation is omission of the | The primary difference between LoWPAN and LoBAC encapsulation is | |||
Mesh, Broadcast, Fragmentation, and LOWPAN_HC1 headers in the latter. | omission of the Mesh, Broadcast, Fragmentation, and LOWPAN_HC1 | |||
headers in the latter. | ||||
All LoBAC encapsulated datagrams transmitted over MS/TP are prefixed | All LoBAC-encapsulated datagrams transmitted over MS/TP are prefixed | |||
by an encapsulation header stack consisting of a Dispatch value | by an encapsulation header stack consisting of a Dispatch value | |||
followed by zero or more header fields. The only sequence currently | followed by zero or more header fields. The only sequence currently | |||
defined for LoBAC is the LOWPAN_IPHC header followed by payload, as | defined for LoBAC is the LOWPAN_IPHC header followed by payload, as | |||
shown below: | shown below: | |||
+---------------+---------------+------...-----+ | +---------------+---------------+------...-----+ | |||
| IPHC Dispatch | IPHC Header | Payload | | | IPHC Dispatch | IPHC Header | Payload | | |||
+---------------+---------------+------...-----+ | +---------------+---------------+------...-----+ | |||
Figure 2: A LoBAC Encapsulated LOWPAN_IPHC Compressed IPv6 Datagram | Figure 2: A LoBAC-Encapsulated LOWPAN_IPHC Compressed IPv6 Datagram | |||
The Dispatch value is treated as an unstructured namespace. Only a | The Dispatch value is treated as an unstructured namespace. Only a | |||
single pattern is used to represent current LoBAC functionality. | single pattern is used to represent current LoBAC functionality. | |||
Pattern Header Type | Pattern Header Type | |||
+------------+-----------------------------------------------------+ | +------------+-----------------------------------------------------+ | |||
| 01 1xxxxx | LOWPAN_IPHC - LOWPAN_IPHC compressed IPv6 [RFC6282] | | | 01 1xxxxx | LOWPAN_IPHC - LOWPAN_IPHC compressed IPv6 [RFC6282] | | |||
+------------+-----------------------------------------------------+ | +------------+-----------------------------------------------------+ | |||
Figure 3: LoBAC Dispatch Value Bit Pattern | Figure 3: LoBAC Dispatch Value Bit Pattern | |||
Other IANA-assigned 6LoWPAN Dispatch values do not apply to 6LoBAC | Other IANA-assigned 6LoWPAN Dispatch values do not apply to 6LoBAC | |||
unless otherwise specified. | unless otherwise specified. | |||
6. Stateless Address Autoconfiguration | 6. Stateless Address Autoconfiguration | |||
This section defines how to obtain an IPv6 Interface Identifier. | This section defines how to obtain an IPv6 Interface Identifier. | |||
This specification distinguishes between two types of IID, MAC- | This specification distinguishes between two types of IIDs, MAC- | |||
address-derived and semantically opaque. | address-derived and semantically opaque. | |||
A MAC-address-derived IID is the RECOMMENDED type for use in forming | A MAC-address-derived IID is the RECOMMENDED type for use in forming | |||
a link-local address, as it affords the most efficient header | a link-local address, as it affords the most efficient header | |||
compression provided by the LOWPAN_IPHC [RFC6282] format specified in | compression provided by the LOWPAN_IPHC [RFC6282] format specified in | |||
Section 10. The general procedure for creating a MAC-address-derived | Section 10. The general procedure for creating a MAC-address-derived | |||
IID is described in [RFC4291] Appendix A, "Creating Modified EUI-64 | IID is described in Appendix A of [RFC4291], "Creating Modified | |||
Format Interface Identifiers", as updated by [RFC7136]. | EUI-64 Format Interface Identifiers", as updated by [RFC7136]. | |||
The Interface Identifier for link-local addresses SHOULD be formed by | The Interface Identifier for link-local addresses SHOULD be formed by | |||
concatenating the node's 8-bit MS/TP MAC address to the seven octets | concatenating the node's 8-bit MS/TP MAC address to the seven octets | |||
0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00. For example, an MS/TP MAC | 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, and 0x00. For example, an MS/TP | |||
address of hexadecimal value 0x4F results in the following IID: | MAC address of hexadecimal value 0x4F results in the following IID: | |||
|0 1|1 3|3 4|4 6| | |0 1|1 3|3 4|4 6| | |||
|0 5|6 1|2 7|8 3| | |0 5|6 1|2 7|8 3| | |||
+----------------+----------------+----------------+----------------+ | +----------------+----------------+----------------+----------------+ | |||
|0000000000000000|0000000011111111|1111111000000000|0000000001001111| | |0000000000000000|0000000011111111|1111111000000000|0000000001001111| | |||
+----------------+----------------+----------------+----------------+ | +----------------+----------------+----------------+----------------+ | |||
A semantically opaque IID having 64 bits of entropy is RECOMMENDED | A semantically opaque IID having 64 bits of entropy is RECOMMENDED | |||
for each globally scoped address and MAY be locally generated | for each globally scoped address and MAY be locally generated | |||
according to one of the methods cited in Section 12. A node that | according to one of the methods cited in Section 12. A node that | |||
generates a 64-bit semantically opaque IID MUST register the IID with | generates a 64-bit semantically opaque IID MUST register the IID with | |||
its local router(s) by sending a Neighbor Solicitation (NS) message | its local router(s) by sending a Neighbor Solicitation (NS) message | |||
with the Address Registration Option (ARO) and process Neighbor | with the Address Registration Option (ARO) and process Neighbor | |||
Advertisements (NA) according to [RFC6775]. | Advertisements (NAs) according to [RFC6775]. | |||
An IPv6 address prefix used for stateless autoconfiguration [RFC4862] | An IPv6 address prefix used for stateless autoconfiguration [RFC4862] | |||
of an MS/TP interface MUST have a length of 64 bits. | of an MS/TP interface MUST have a length of 64 bits. | |||
7. IPv6 Link Local Address | 7. IPv6 Link-Local Address | |||
The IPv6 link-local address [RFC4291] for an MS/TP interface is | The IPv6 link-local address [RFC4291] for an MS/TP interface is | |||
formed by appending the Interface Identifier, as defined above, to | formed by appending the Interface Identifier, as defined above, to | |||
the prefix FE80::/64. | the prefix FE80::/64. | |||
10 bits 54 bits 64 bits | 10 bits 54 bits 64 bits | |||
+----------+-----------------------+----------------------------+ | +----------+-----------------------+----------------------------+ | |||
|1111111010| (zeros) | Interface Identifier | | |1111111010| (zeros) | Interface Identifier | | |||
+----------+-----------------------+----------------------------+ | +----------+-----------------------+----------------------------+ | |||
8. Unicast Address Mapping | 8. Unicast Address Mapping | |||
The address resolution procedure for mapping IPv6 non-multicast | The address resolution procedure for mapping IPv6 non-multicast | |||
addresses into MS/TP MAC-layer addresses follows the general | addresses into MS/TP MAC-layer addresses follows the general | |||
description in Section 7.2 of [RFC4861], unless otherwise specified. | description in Section 7.2 of [RFC4861], unless otherwise specified. | |||
The Source/Target Link-layer Address option has the following form | The Source/Target Link-Layer Address option has the following form | |||
when the addresses are 8-bit MS/TP MAC-layer (node) addresses. | when the addresses are 8-bit MS/TP MAC-layer (node) addresses. | |||
0 1 | 0 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | Length=1 | | | Type | Length=1 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0x00 | MS/TP Address | | | 0x00 | MS/TP Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
+ Padding (all zeros) + | + Padding (all zeros) + | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Option fields: | Option fields: | |||
Type: | Type: | |||
1: for Source Link-layer address. | 1: for Source Link-Layer address. | |||
2: for Target Link-layer address. | 2: for Target Link-Layer address. | |||
Length: This is the length of this option (including the type and | Length: This is the length of this option (including the Type and | |||
length fields) in units of 8 octets. The value of this field is 1 | Length fields) in units of 8 octets. The value of this field | |||
for 8-bit MS/TP MAC addresses. | is 1 for 8-bit MS/TP MAC addresses. | |||
MS/TP Address: The 8-bit address in canonical bit order [RFC2469]. | MS/TP Address: The 8-bit address in canonical bit order [RFC2469]. | |||
This is the unicast address the interface currently responds to. | This is the unicast address the interface currently responds | |||
to. | ||||
9. Multicast Address Mapping | 9. Multicast Address Mapping | |||
All IPv6 multicast packets MUST be sent to MS/TP Destination Address | All IPv6 multicast packets MUST be sent to MS/TP Destination Address | |||
255 (broadcast) and filtered at the IPv6 layer. When represented as | 255 (broadcast) and filtered at the IPv6 layer. When represented as | |||
a 16-bit address in a compressed header (see Section 10), it MUST be | a 16-bit address in a compressed header (see Section 10), it MUST be | |||
formed by padding on the left with a zero octet: | formed by padding on the left with a zero octet: | |||
0 1 | 0 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
skipping to change at page 10, line 25 ¶ | skipping to change at page 11, line 25 ¶ | |||
| 0x00 | 0xFF | | | 0x00 | 0xFF | | |||
+-+-+-+-+-+-+-+-+---------------+ | +-+-+-+-+-+-+-+-+---------------+ | |||
10. Header Compression | 10. Header Compression | |||
6LoBAC REQUIRES LOWPAN_IPHC IPv6 compression, which is specified in | 6LoBAC REQUIRES LOWPAN_IPHC IPv6 compression, which is specified in | |||
[RFC6282] and included herein by reference. This section will simply | [RFC6282] and included herein by reference. This section will simply | |||
identify substitutions that should be made when interpreting the text | identify substitutions that should be made when interpreting the text | |||
of [RFC6282]. | of [RFC6282]. | |||
In general the following substitutions should be made: | In general, the following substitutions should be made: | |||
- Replace instances of "6LoWPAN" with "MS/TP network" | - Replace instances of "6LoWPAN" with "MS/TP network" | |||
- Replace instances of "IEEE 802.15.4 address" with "MS/TP address" | - Replace instances of "IEEE 802.15.4 address" with "MS/TP address" | |||
When a 16-bit address is called for (i.e., an IEEE 802.15.4 "short | When a 16-bit address is called for (i.e., an IEEE 802.15.4 "short | |||
address") it MUST be formed by padding the MS/TP address to the left | address"), it MUST be formed by padding the MS/TP address to the left | |||
with a zero octet: | with a zero octet: | |||
0 1 | 0 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0x00 | MS/TP address | | | 0x00 | MS/TP address | | |||
+-+-+-+-+-+-+-+-+---------------+ | +-+-+-+-+-+-+-+-+---------------+ | |||
If LOWPAN_IPHC compression [RFC6282] is used with context, the | If LOWPAN_IPHC compression [RFC6282] is used with context, the | |||
router(s) directly attached to the MS/TP segment MUST disseminate the | router(s) directly attached to the MS/TP segment MUST disseminate the | |||
6LoWPAN Context Option (6CO) according to [RFC6775], Section 7.2. | 6LoWPAN Context Option (6CO) according to Section 7.2 of [RFC6775]. | |||
11. IANA Considerations | 11. IANA Considerations | |||
This document uses values previously reserved by [RFC4944] and | This document uses values previously reserved by [RFC4944] and | |||
[RFC6282] and makes no further requests of IANA. | [RFC6282]; it does not require any IANA actions. | |||
Note to RFC Editor: this section may be removed upon publication. | ||||
12. Security Considerations | 12. Security Considerations | |||
See [RFC8065] for a general discussion of privacy threats faced by | See [RFC8065] for a general discussion of privacy threats faced by | |||
constrained nodes. | constrained nodes. | |||
[RFC8065] makes a distinction between "stable" and "temporary" | [RFC8065] makes a distinction between "stable" and "temporary" | |||
addresses. The former are long-lived and typically advertised by | addresses. The former are long-lived and typically advertised by | |||
servers. The latter are typically used by clients and SHOULD be | servers. The latter are typically used by clients and SHOULD be | |||
changed frequently to mitigate correlation of activities over time. | changed frequently to mitigate correlation of activities over time. | |||
Nodes that engage in both activities SHOULD support simultaneous use | Nodes that engage in both activities SHOULD support simultaneous use | |||
of multiple addresses per device. | of multiple addresses per device. | |||
Globally scoped addresses that contain MAC-address-derived IIDs may | Globally scoped addresses that contain MAC-address-derived IIDs may | |||
expose a network to address scanning attacks. For this reason, it is | expose a network to address-scanning attacks. For this reason, it is | |||
RECOMMENDED that a 64-bit semantically opaque IID be generated for | RECOMMENDED that a 64-bit semantically opaque IID be generated for | |||
each globally scoped address in use according to, for example, | each globally scoped address in use according to, for example, | |||
[RFC3315], [RFC3972], [RFC4941], [RFC5535], or [RFC7217]. | [RFC3315], [RFC3972], [RFC4941], [RFC5535], or [RFC7217]. | |||
13. Acknowledgments | 13. References | |||
We are grateful to the authors of [RFC4944] and members of the IETF | ||||
6LoWPAN working group; this document borrows liberally from their | ||||
work. Ralph Droms and Brian Haberman provided indispensable guidance | ||||
and support from the outset. Peter van der Stok, James Woodyatt, | ||||
Carsten Bormann, and Dale Worley provided detailed reviews. Stuart | ||||
Cheshire invented the very clever COBS encoding. Michael Osborne | ||||
made the critical observation that encoding the data and CRC32K | ||||
fields separately would allow the CRC to be calculated on-the-fly. | ||||
Alexandru Petrescu, Brian Frank, Geoff Mulligan, and Don Sturek | ||||
offered valuable comments. | ||||
14. References | ||||
14.1. Normative References | 13.1. Normative References | |||
[BACnet] American Society of Heating, Refrigerating, and Air- | [BACnet] ASHRAE, "BACnet-A Data Communication Protocol for Building | |||
Conditioning Engineers, "BACnet - A Data Communication | Automation and Control Networks", ANSI/ASHRAE Standard | |||
Protocol for Building Automation and Control Networks", | 135-2016, January 2016, | |||
ANSI/ASHRAE Standard 135-2016, January 2016, | ||||
<http://www.techstreet.com/ashrae/standards/ | <http://www.techstreet.com/ashrae/standards/ | |||
ashrae-135-2016?product_id=1918140#jumps>. | ashrae-135-2016?product_id=1918140#jumps>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
(IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
skipping to change at page 13, line 26 ¶ | skipping to change at page 14, line 10 ¶ | |||
Interface Identifiers with IPv6 Stateless Address | Interface Identifiers with IPv6 Stateless Address | |||
Autoconfiguration (SLAAC)", RFC 7217, | Autoconfiguration (SLAAC)", RFC 7217, | |||
DOI 10.17487/RFC7217, April 2014, | DOI 10.17487/RFC7217, April 2014, | |||
<http://www.rfc-editor.org/info/rfc7217>. | <http://www.rfc-editor.org/info/rfc7217>. | |||
[RFC7400] Bormann, C., "6LoWPAN-GHC: Generic Header Compression for | [RFC7400] Bormann, C., "6LoWPAN-GHC: Generic Header Compression for | |||
IPv6 over Low-Power Wireless Personal Area Networks | IPv6 over Low-Power Wireless Personal Area Networks | |||
(6LoWPANs)", RFC 7400, DOI 10.17487/RFC7400, November | (6LoWPANs)", RFC 7400, DOI 10.17487/RFC7400, November | |||
2014, <http://www.rfc-editor.org/info/rfc7400>. | 2014, <http://www.rfc-editor.org/info/rfc7400>. | |||
14.2. Informative References | 13.2. Informative References | |||
[Addendum_an] | [Addendum_an] | |||
American Society of Heating, Refrigerating, and Air- | ANSI/ASHRAE, "Addenda: BACnet -- A Data Communication | |||
Conditioning Engineers, "ANSI/ASHRAE Addenda an, at, au, | Protocol for Building Automation and Control Networks", | |||
av, aw, ax, and az to ANSI/ASHRAE Standard 135-2012, | ANSI/ASHRAE Addenda an, at, au, av, aw, ax, and az | |||
BACnet - A Data Communication Protocol for Building | to ANSI/ASHRAE Standard 135-2012, July 2014, | |||
Automation and Control Networks", July 2014, | ||||
<https://www.ashrae.org/File%20Library/docLib/StdsAddenda/ | <https://www.ashrae.org/File%20Library/docLib/StdsAddenda/ | |||
07-31-2014_135_2012_an_at_au_av_aw_ax_az_Final.pdf>. | 07-31-2014_135_2012_an_at_au_av_aw_ax_az_Final.pdf>. | |||
[COBS] Cheshire, S. and M. Baker, "Consistent Overhead Byte | [COBS] Cheshire, S. and M. Baker, "Consistent Overhead Byte | |||
Stuffing", IEEE/ACM TRANSACTIONS ON NETWORKING, VOL.7, | Stuffing", IEEE/ACM Transactions on Networking, Volume 7, | |||
NO.2 , April 1999, | Issue 2, DOI 10.1109/90.769765, April 1999, | |||
<http://www.stuartcheshire.org/papers/COBSforToN.pdf>. | <http://www.stuartcheshire.org/papers/COBSforToN.pdf>. | |||
[CRC32K] Koopman, P., "32-Bit Cyclic Redundancy Codes for Internet | [CRC32K] Koopman, P., "32-Bit Cyclic Redundancy Codes for Internet | |||
Applications", IEEE/IFIP International Conference on | Applications", Proceedings of the International Conference | |||
Dependable Systems and Networks (DSN 2002) , June 2002, | on Dependable Systems and Networks (DSN 2002), June 2002, | |||
<https://users.ece.cmu.edu/~koopman/networks/dsn02/ | <https://users.ece.cmu.edu/~koopman/networks/dsn02/ | |||
dsn02_koopman.pdf>. | dsn02_koopman.pdf>. | |||
[IEEE.802.3_2012] | [IEEE.802.3] | |||
IEEE, "802.3-2012", IEEE 802.3-2012, | IEEE, "IEEE Standard for Ethernet", IEEE 802.3-2015, DOI | |||
DOI 10.1109/ieeestd.2012.6419735, January 2013, | 10.1109/IEEESTD.2016.7428776, | |||
<http://ieeexplore.ieee.org/servlet/ | <http://standards.ieee.org/getieee802/ | |||
opac?punumber=6419733>. | download/802.3-2015.zip>. | |||
[RFC2469] Narten, T. and C. Burton, "A Caution On The Canonical | [RFC2469] Narten, T. and C. Burton, "A Caution On The Canonical | |||
Ordering Of Link-Layer Addresses", RFC 2469, | Ordering Of Link-Layer Addresses", RFC 2469, | |||
DOI 10.17487/RFC2469, December 1998, | DOI 10.17487/RFC2469, December 1998, | |||
<http://www.rfc-editor.org/info/rfc2469>. | <http://www.rfc-editor.org/info/rfc2469>. | |||
[RFC8065] Thaler, D., "Privacy Considerations for IPv6 Adaptation- | [RFC8065] Thaler, D., "Privacy Considerations for IPv6 Adaptation- | |||
Layer Mechanisms", RFC 8065, DOI 10.17487/RFC8065, | Layer Mechanisms", RFC 8065, DOI 10.17487/RFC8065, | |||
February 2017, <http://www.rfc-editor.org/info/rfc8065>. | February 2017, <http://www.rfc-editor.org/info/rfc8065>. | |||
[TIA-485-A] | [TIA-485-A] | |||
Telecommunications Industry Association, "TIA-485-A, | TIA, "Electrical Characteristics of Generators and | |||
Electrical Characteristics of Generators and Receivers for | Receivers for Use in Balanced Digital Multipoint Systems", | |||
Use in Balanced Digital Multipoint Systems (ANSI/TIA/EIA- | TIA-485-A (Revision of TIA-485), March 2003, | |||
485-A-98) (R2003)", March 2003, <https://global.ihs.com/ | <https://global.ihs.com/ | |||
doc_detail.cfm?item_s_key=00032964>. | doc_detail.cfm?item_s_key=00032964>. | |||
Appendix A. Abstract MAC Interface | Appendix A. Abstract MAC Interface | |||
This Appendix is informative and not part of the standard. | This Appendix is informative and not part of the standard. | |||
[BACnet] Clause 9 provides support for MAC-layer clients through its | [BACnet], Clause 9 provides support for MAC-layer clients through its | |||
SendFrame and ReceivedDataNoReply procedures. However, it does not | SendFrame and ReceivedDataNoReply procedures. However, it does not | |||
define a network-protocol independent abstract interface for the MAC. | define a network-protocol independent abstract interface for the MAC. | |||
This is provided below as an aid to implementation. | This is provided below as an aid to implementation. | |||
A.1. MA-DATA.request | A.1. MA-DATA.request | |||
A.1.1. Function | A.1.1. Function | |||
This primitive defines the transfer of data from a MAC client entity | This primitive defines the transfer of data from a MAC client entity | |||
to a single peer entity or multiple peer entities in the case of a | to a single peer entity or multiple peer entities in the case of a | |||
skipping to change at page 15, line 26 ¶ | skipping to change at page 16, line 14 ¶ | |||
A.1.3. When Generated | A.1.3. When Generated | |||
This primitive is generated by the MAC client entity whenever data | This primitive is generated by the MAC client entity whenever data | |||
shall be transferred to a peer entity or entities. This can be in | shall be transferred to a peer entity or entities. This can be in | |||
response to a request from higher protocol layers or from data | response to a request from higher protocol layers or from data | |||
generated internally to the MAC client, such as a Token frame. | generated internally to the MAC client, such as a Token frame. | |||
A.1.4. Effect on Receipt | A.1.4. Effect on Receipt | |||
Receipt of this primitive will cause the MAC entity to insert all MAC | Receipt of this primitive will cause the MAC entity to insert all | |||
specific fields, including Destination Address, Source Address, Frame | MAC-specific fields, including Destination Address, Source Address, | |||
Type, and any fields that are unique to the particular media access | Frame Type, and any fields that are unique to the particular media | |||
method, and pass the properly formed frame to the lower protocol | access method, and pass the properly formed frame to the lower | |||
layers for transfer to the peer MAC sublayer entity or entities. | protocol layers for transfer to the peer MAC sublayer entity or | |||
entities. | ||||
A.2. MA-DATA.indication | A.2. MA-DATA.indication | |||
A.2.1. Function | A.2.1. Function | |||
This primitive defines the transfer of data from the MAC sublayer | This primitive defines the transfer of data from the MAC sublayer | |||
entity to the MAC client entity or entities in the case of a | entity to the MAC client entity or entities in the case of a | |||
broadcast address. | broadcast address. | |||
A.2.2. Semantics of the Service Primitive | A.2.2. Semantics of the Service Primitive | |||
skipping to change at page 16, line 22 ¶ | skipping to change at page 17, line 10 ¶ | |||
length of the data unit. | length of the data unit. | |||
The 'type' parameter is the value of the MS/TP Frame Type field of | The 'type' parameter is the value of the MS/TP Frame Type field of | |||
the incoming frame. | the incoming frame. | |||
A.2.3. When Generated | A.2.3. When Generated | |||
The MA_DATA.indication is passed from the MAC sublayer entity to the | The MA_DATA.indication is passed from the MAC sublayer entity to the | |||
MAC client entity or entities to indicate the arrival of a frame to | MAC client entity or entities to indicate the arrival of a frame to | |||
the local MAC sublayer entity that is destined for the MAC client. | the local MAC sublayer entity that is destined for the MAC client. | |||
Such frames are reported only if they are validly formed, received | Such frames are reported only if they are validly formed and received | |||
without error, and their destination address designates the local MAC | without error, and their Destination Address designates the local MAC | |||
entity. Frames destined for the MAC Control sublayer are not passed | entity. Frames destined for the MAC Control sublayer are not passed | |||
to the MAC client. | to the MAC client. | |||
A.2.4. Effect on Receipt | A.2.4. Effect on Receipt | |||
The effect of receipt of this primitive by the MAC client is | The effect of receipt of this primitive by the MAC client is | |||
unspecified. | unspecified. | |||
Appendix B. Consistent Overhead Byte Stuffing [COBS] | Appendix B. Consistent Overhead Byte Stuffing (COBS) | |||
This Appendix is informative and not part of the standard. | This Appendix is informative and not part of the standard. | |||
[BACnet] Clause 9 corrects a long-standing issue with the MS/TP | [BACnet], Clause 9 corrects a long-standing issue with the MS/TP | |||
specification; namely that preamble sequences were not escaped | specification, namely that preamble sequences were not escaped | |||
whenever they appeared in the Data or Data CRC fields. In rare | whenever they appeared in the Data or Data CRC fields. In rare | |||
cases, this resulted in dropped frames due to loss of frame | cases, this resulted in dropped frames due to loss-of-frame | |||
synchronization. The solution is to encode the Data and 32-bit Data | synchronization. The solution is to encode the Data and 32-bit Data | |||
CRC fields before transmission using Consistent Overhead Byte | CRC fields before transmission using Consistent Overhead Byte | |||
Stuffing [COBS] and decode these fields upon reception. | Stuffing [COBS] and decode these fields upon reception. | |||
COBS is a run-length encoding method that nominally removes '0x00' | COBS is a run-length encoding method that nominally removes '0x00' | |||
octets from its input. Any selected octet value may be removed by | octets from its input. Any selected octet value may be removed by | |||
XOR'ing that value with each octet of the COBS output. [BACnet] | XOR'ing that value with each octet of the COBS output. [BACnet], | |||
Clause 9 specifies the preamble octet '0x55' for removal. | Clause 9 specifies the preamble octet '0x55' for removal. | |||
The minimum overhead of COBS is one octet per encoded field. The | The minimum overhead of COBS is one octet per encoded field. The | |||
worst-case overhead in long fields is bounded to one octet per 254 as | worst-case overhead in long fields is bounded to one octet per 254 as | |||
described in [COBS]. | described in [COBS]. | |||
Frame encoding proceeds logically in two passes. The Encoded Data | Frame encoding proceeds logically in two passes. The Encoded Data | |||
field is prepared by passing the MSDU through the COBS encoder and | field is prepared by passing the MSDU through the COBS encoder and | |||
XOR'ing the preamble octet '0x55' with each octet of the output. The | XOR'ing the preamble octet '0x55' with each octet of the output. The | |||
Encoded CRC-32K field is then prepared by calculating a CRC-32K over | Encoded CRC-32K field is then prepared by calculating a CRC-32K over | |||
the Encoded Data field and formatting it for transmission as | the Encoded Data field and formatting it for transmission as | |||
described in Appendix C. The combined length of these fields, minus | described in Appendix C. The combined length of these fields, minus | |||
two octets for compatibility with legacy MS/TP devices, is placed in | two octets for compatibility with legacy MS/TP devices, is placed in | |||
the MS/TP header Length field before transmission. | the MS/TP header Length field before transmission. | |||
Example COBS encoder and decoder functions are shown below for | Example COBS encoder and decoder functions are shown below for | |||
illustration. Complete examples of use and test vectors are provided | illustration. Complete examples of use and test vectors are provided | |||
in [BACnet] Annex T. | in [BACnet], Annex T. | |||
<CODE BEGINS> | <CODE BEGINS> | |||
#include <stddef.h> | #include <stddef.h> | |||
#include <stdint.h> | #include <stdint.h> | |||
/* | /* | |||
* Encodes 'length' octets of data located at 'from' and | * Encodes 'length' octets of data located at 'from' and | |||
* writes one or more COBS code blocks at 'to', removing any | * writes one or more COBS code blocks at 'to', removing any | |||
* 'mask' octets that may present be in the encoded data. | * 'mask' octets that may be present in the encoded data. | |||
* Returns the length of the encoded data. | * Returns the length of the encoded data. | |||
*/ | */ | |||
size_t | size_t | |||
cobs_encode (uint8_t *to, const uint8_t *from, size_t length, | cobs_encode (uint8_t *to, const uint8_t *from, size_t length, | |||
uint8_t mask) | uint8_t mask) | |||
{ | { | |||
size_t code_index = 0; | size_t code_index = 0; | |||
size_t read_index = 0; | size_t read_index = 0; | |||
size_t write_index = 1; | size_t write_index = 1; | |||
skipping to change at page 18, line 36 ¶ | skipping to change at page 18, line 51 ¶ | |||
* copied the maximum number (254) of non-zero octets, store | * copied the maximum number (254) of non-zero octets, store | |||
* the code octet and reset the encoder state variables. | * the code octet and reset the encoder state variables. | |||
*/ | */ | |||
last_code = code; | last_code = code; | |||
to[code_index] = code ^ mask; | to[code_index] = code ^ mask; | |||
code_index = write_index++; | code_index = write_index++; | |||
code = 1; | code = 1; | |||
} | } | |||
/* | /* | |||
* If the last chunk contains exactly 254 non-zero octets, then | * If the last chunk contains exactly 254 non-zero octets, then | |||
* this exception is handled above (and returned length must be | * this exception is handled above (and the returned length must | |||
* adjusted). Otherwise, encode the last chunk normally, as if | * be adjusted). Otherwise, encode the last chunk normally, as if | |||
* a "phantom zero" is appended to the data. | * a "phantom zero" is appended to the data. | |||
*/ | */ | |||
if ((last_code == 255) && (code == 1)) | if ((last_code == 255) && (code == 1)) | |||
write_index--; | write_index--; | |||
else | else | |||
to[code_index] = code ^ mask; | to[code_index] = code ^ mask; | |||
return write_index; | return write_index; | |||
} | } | |||
#include <stddef.h> | #include <stddef.h> | |||
#include <stdint.h> | #include <stdint.h> | |||
/* | /* | |||
* Decodes 'length' octets of data located at 'from' and | * Decodes 'length' octets of data located at 'from' and | |||
* writes the original client data at 'to', restoring any | * writes the original client data at 'to', restoring any | |||
* 'mask' octets that may present in the encoded data. | * 'mask' octets that may present in the encoded data. | |||
* Returns the length of the encoded data or zero if error. | * Returns the length of the encoded data or zero if error. | |||
*/ | */ | |||
size_t | size_t | |||
skipping to change at page 19, line 41 ¶ | skipping to change at page 20, line 4 ¶ | |||
read_index++; | read_index++; | |||
while (--code > 0) | while (--code > 0) | |||
to[write_index++] = from[read_index++] ^ mask; | to[write_index++] = from[read_index++] ^ mask; | |||
/* | /* | |||
* Restore the implicit zero at the end of each decoded block | * Restore the implicit zero at the end of each decoded block | |||
* except when it contains exactly 254 non-zero octets or the | * except when it contains exactly 254 non-zero octets or the | |||
* end of data has been reached. | * end of data has been reached. | |||
*/ | */ | |||
if ((last_code != 255) && (read_index < length)) | if ((last_code != 255) && (read_index < length)) | |||
to[write_index++] = 0; | to[write_index++] = 0; | |||
} | } | |||
return write_index; | return write_index; | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
Appendix C. Encoded CRC-32K [CRC32K] | Appendix C. Encoded CRC-32K (CRC32K) | |||
This Appendix is informative and not part of the standard. | This Appendix is informative and not part of the standard. | |||
Extending the payload of MS/TP to 1500 octets required upgrading the | Extending the payload of MS/TP to 1500 octets requires upgrading the | |||
Data CRC from 16 bits to 32 bits. P.Koopman has authored several | Data CRC from 16 bits to 32 bits. P. Koopman has authored several | |||
papers on evaluating CRC polynomials for network applications. In | papers on evaluating CRC polynomials for network applications. In | |||
[CRC32K], he surveyed the entire 32-bit polynomial space and noted | [CRC32K], he surveyed the entire 32-bit polynomial space and noted | |||
some that exceed the [IEEE.802.3_2012] polynomial in performance. | some that exceed the [IEEE.802.3] polynomial in performance. | |||
[BACnet] Clause 9 specifies one of these, the CRC-32K (Koopman) | [BACnet], Clause 9 specifies one of these, the CRC-32K (Koopman) | |||
polynomial. | polynomial. | |||
The specified use of the calc_crc32K() function is as follows. | The specified use of the calc_crc32K() function is as follows. | |||
Before a frame is transmitted, 'crc_value' is initialized to all | Before a frame is transmitted, 'crc_value' is initialized to all | |||
ones. After passing each octet of the [COBS] Encoded Data through | ones. After passing each octet of the [COBS] Encoded Data field | |||
the function, the ones complement of the resulting 'crc_value' is | through the function, the ones complement of the resulting | |||
arranged in LSB-first order and is itself [COBS] encoded. The length | 'crc_value' is arranged in LSB-first order and is itself [COBS] | |||
of the resulting Encoded CRC-32K field is always five octets. | encoded. The length of the resulting Encoded CRC-32K field is always | |||
five octets. | ||||
Upon reception of a frame, 'crc_value' is initialized to all ones. | Upon reception of a frame, 'crc_value' is initialized to all ones. | |||
The octets of the Encoded Data field are accumulated by the | The octets of the Encoded Data field are accumulated by the | |||
calc_crc32K() function before decoding. The Encoded CRC-32K field is | calc_crc32K() function before decoding. The Encoded CRC-32K field is | |||
then decoded and the resulting four octets are accumulated by the | then decoded and the resulting four octets are accumulated by the | |||
calc_crc32K() function. If the result is the expected residue value | calc_crc32K() function. If the result is the expected residue value | |||
'CRC32K_RESIDUE', then the frame was received correctly. | 'CRC32K_RESIDUE', then the frame was received correctly. | |||
An example CRC-32K function in shown below for illustration. | An example CRC-32K function is shown below for illustration. | |||
Complete examples of use and test vectors are provided in [BACnet] | Complete examples of use and test vectors are provided in [BACnet], | |||
Annex G.3. | Annex G.3. | |||
<CODE BEGINS> | <CODE BEGINS> | |||
#include <stdint.h> | #include <stdint.h> | |||
/* See BACnet Addendum 135-2012an, section G.3.2 */ | /* See ANSI/ASHRAE Standard 135-2016 [BACnet], Section G.3.2 */ | |||
#define CRC32K_INITIAL_VALUE (0xFFFFFFFF) | #define CRC32K_INITIAL_VALUE (0xFFFFFFFF) | |||
#define CRC32K_RESIDUE (0x0843323B) | #define CRC32K_RESIDUE (0x0843323B) | |||
/* CRC-32K polynomial, 1 + x**1 + ... + x**30 (+ x**32) */ | /* CRC-32K polynomial, 1 + x**1 + ... + x**30 (+ x**32) */ | |||
#define CRC32K_POLY (0xEB31D82E) | #define CRC32K_POLY (0xEB31D82E) | |||
/* | /* | |||
* Accumulate 'data_value' into the CRC in 'crc_value'. | * Accumulate 'data_value' into the CRC in 'crc_value'. | |||
* Return updated CRC. | * Return updated CRC. | |||
* | * | |||
skipping to change at page 27, line 5 ¶ | skipping to change at page 27, line 5 ¶ | |||
70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f pqrstuvwxyz{|}~. | 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f pqrstuvwxyz{|}~. | |||
80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f ................ | 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f ................ | |||
90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f ................ | 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f ................ | |||
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af ................ | a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af ................ | |||
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf ................ | b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf ................ | |||
c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf ................ | c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf ................ | |||
d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df ................ | d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df ................ | |||
e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef ................ | e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef ................ | |||
f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd .............. | f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd .............. | |||
Acknowledgements | ||||
We are grateful to the authors of [RFC4944] and members of the IETF | ||||
6LoWPAN working group; this document borrows liberally from their | ||||
work. Ralph Droms and Brian Haberman provided indispensable guidance | ||||
and support from the outset. Peter van der Stok, James Woodyatt, | ||||
Carsten Bormann, and Dale Worley provided detailed reviews. Stuart | ||||
Cheshire invented the very clever COBS encoding. Michael Osborne | ||||
made the critical observation that encoding the data and CRC32K | ||||
fields separately would allow the CRC to be calculated on the fly. | ||||
Alexandru Petrescu, Brian Frank, Geoff Mulligan, and Don Sturek | ||||
offered valuable comments. | ||||
Authors' Addresses | Authors' Addresses | |||
Kerry Lynn (editor) | Kerry Lynn (editor) | |||
Verizon Labs | Verizon Labs | |||
50 Sylvan Rd | 50 Sylvan Rd | |||
Waltham , MA 02451 | Waltham, MA 02451 | |||
USA | United States of America | |||
Phone: +1 781 296 9722 | Phone: +1 781 296 9722 | |||
Email: kerlyn@ieee.org | Email: kerlyn@ieee.org | |||
Jerry Martocci | Jerry Martocci | |||
Johnson Controls, Inc. | Johnson Controls, Inc. | |||
507 E. Michigan St | 507 E. Michigan St | |||
Milwaukee , WI 53202 | Milwaukee, WI 53202 | |||
USA | United States of America | |||
Email: jpmartocci@sbcglobal.net | Email: jpmartocci@sbcglobal.net | |||
Carl Neilson | Carl Neilson | |||
Delta Controls, Inc. | Delta Controls, Inc. | |||
17850 56th Ave | 17850 56th Ave | |||
Surrey , BC V3S 1C7 | Surrey, BC V3S 1C7 | |||
Canada | Canada | |||
Phone: +1 604 575 5913 | Phone: +1 604 575 5913 | |||
Email: cneilson@deltacontrols.com | Email: cneilson@deltacontrols.com | |||
Stuart Donaldson | Stuart Donaldson | |||
Honeywell Automation & Control Solutions | Honeywell Automation & Control Solutions | |||
6670 185th Ave NE | 6670 185th Ave NE | |||
Redmond , WA 98052 | Redmond, WA 98052 | |||
USA | United States of America | |||
Email: stuart.donaldson@honeywell.com | Email: stuart.donaldson@honeywell.com | |||
End of changes. 92 change blocks. | ||||
196 lines changed or deleted | 190 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |