diff options
Diffstat (limited to 'doc/rfc/rfc2022.txt')
-rw-r--r-- | doc/rfc/rfc2022.txt | 4595 |
1 files changed, 4595 insertions, 0 deletions
diff --git a/doc/rfc/rfc2022.txt b/doc/rfc/rfc2022.txt new file mode 100644 index 0000000..28d7e63 --- /dev/null +++ b/doc/rfc/rfc2022.txt @@ -0,0 +1,4595 @@ + + + + + + +Network Working Group G. Armitage +Request for Comments: 2022 Bellcore +Category: Standards Track November 1996 + + + Support for Multicast over UNI 3.0/3.1 based ATM Networks. + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited + +Abstract + + Mapping the connectionless IP multicast service over the connection + oriented ATM services provided by UNI 3.0/3.1 is a non-trivial task. + This memo describes a mechanism to support the multicast needs of + Layer 3 protocols in general, and describes its application to IP + multicasting in particular. + + ATM based IP hosts and routers use a Multicast Address Resolution + Server (MARS) to support RFC 1112 style Level 2 IP multicast over the + ATM Forum's UNI 3.0/3.1 point to multipoint connection service. + Clusters of endpoints share a MARS and use it to track and + disseminate information identifying the nodes listed as receivers for + given multicast groups. This allows endpoints to establish and manage + point to multipoint VCs when transmitting to the group. + + The MARS behaviour allows Layer 3 multicasting to be supported using + either meshes of VCs or ATM level multicast servers. This choice may + be made on a per-group basis, and is transparent to the endpoints. + + + + + + + + + + + + + + + + + +Armitage Standards Track [Page 1] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +Table of Contents + + 1. Introduction................................................. 4 + 1.1 The Multicast Address Resolution Server (MARS)............. 5 + 1.2 The ATM level multicast Cluster............................ 5 + 1.3 Document overview.......................................... 6 + 1.4 Conventions................................................ 7 + 2. The IP multicast service model............................... 7 + 3. UNI 3.0/3.1 support for intra-cluster multicasting........... 8 + 3.1 VC meshes.................................................. 9 + 3.2 Multicast Servers.......................................... 9 + 3.3 Tradeoffs.................................................. 10 + 3.4 Interaction with local UNI 3.0/3.1 signalling entity....... 11 + 4. Overview of the MARS......................................... 12 + 4.1 Architecture............................................... 12 + 4.2 Control message format..................................... 12 + 4.3 Fixed header fields in MARS control messages............... 13 + 4.3.1 Hardware type.......................................... 14 + 4.3.2 Protocol type.......................................... 14 + 4.3.3 Checksum............................................... 15 + 4.3.4 Extensions Offset...................................... 15 + 4.3.5 Operation code......................................... 16 + 4.3.6 Reserved............................................... 16 + 5. Endpoint (MARS client) interface behaviour................... 16 + 5.1 Transmit side behaviour.................................... 17 + 5.1.1 Retrieving Group Membership from the MARS.............. 18 + 5.1.2 MARS_REQUEST, MARS_MULTI, and MARS_NAK messages........ 20 + 5.1.3 Establishing the outgoing multipoint VC................ 22 + 5.1.4 Monitoring updates on ClusterControlVC................. 24 + 5.1.4.1 Updating the active VCs............................ 24 + 5.1.4.2 Tracking the Cluster Sequence Number............... 25 + 5.1.5 Revalidating a VC's leaf nodes......................... 26 + 5.1.5.1 When leaf node drops itself........................ 27 + 5.1.5.2 When a jump is detected in the CSN................. 27 + 5.1.6 'Migrating' the outgoing multipoint VC................. 27 + 5.2. Receive side behaviour.................................... 29 + 5.2.1 Format of the MARS_JOIN and MARS_LEAVE Messages........ 30 + 5.2.1.1 Important IPv4 default values...................... 32 + 5.2.2 Retransmission of MARS_JOIN and MARS_LEAVE messages.... 33 + 5.2.3 Cluster member registration and deregistration......... 34 + 5.3 Support for Layer 3 group management....................... 34 + 5.4 Support for redundant/backup MARS entities................. 36 + 5.4.1 First response to MARS problems........................ 36 + 5.4.2 Connecting to a backup MARS............................ 37 + 5.4.3 Dynamic backup lists, and soft redirects............... 37 + 5.5 Data path LLC/SNAP encapsulations.......................... 40 + 5.5.1 Type #1 encapsulation.................................. 40 + 5.5.2 Type #2 encapsulation.................................. 41 + + + +Armitage Standards Track [Page 2] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + 5.5.3 A Type #1 example...................................... 42 + 6. The MARS in greater detail................................... 42 + 6.1 Basic interface to Cluster members......................... 43 + 6.1.1 Response to MARS_REQUEST............................... 43 + 6.1.2 Response to MARS_JOIN and MARS_LEAVE................... 43 + 6.1.3 Generating MARS_REDIRECT_MAP........................... 45 + 6.1.4 Cluster Sequence Numbers............................... 45 + 6.2 MARS interface to Multicast Servers (MCSs)................. 46 + 6.2.1 MARS_REQUESTs for MCS supported groups................. 47 + 6.2.2 MARS_MSERV and MARS_UNSERV messages.................... 47 + 6.2.3 Registering a Multicast Server (MCS)................... 49 + 6.2.4 Modified response to MARS_JOIN and MARS_LEAVE.......... 49 + 6.2.5 Sequence numbers for ServerControlVC traffic........... 51 + 6.3 Why global sequence numbers?............................... 52 + 6.4 Redundant/Backup MARS Architectures........................ 52 + 7. How an MCS utilises a MARS................................... 53 + 7.1 Association with a particular Layer 3 group................ 53 + 7.2 Termination of incoming VCs................................ 54 + 7.3 Management of outgoing VC.................................. 54 + 7.4 Use of a backup MARS....................................... 54 + 8. Support for IP multicast routers............................. 54 + 8.1 Forwarding into a Cluster.................................. 55 + 8.2 Joining in 'promiscuous' mode.............................. 55 + 8.3 Forwarding across the cluster.............................. 56 + 8.4 Joining in 'semi-promiscous' mode.......................... 56 + 8.5 An alternative to IGMP Queries............................. 57 + 8.6 CMIs across multiple interfaces............................ 58 + 9. Multiprotocol applications of the MARS and MARS clients...... 59 + 10. Supplementary parameter processing.......................... 60 + 10.1 Interpreting the mar$extoff field......................... 60 + 10.2 The format of TLVs........................................ 60 + 10.3 Processing MARS messages with TLVs........................ 62 + 10.4 Initial set of TLV elements............................... 62 + 11. Key Decisions and open issues............................... 62 + Security Considerations......................................... 65 + Acknowledgments................................................. 65 + Author's Address................................................ 65 + References...................................................... 66 + Appendix A. Hole punching algorithms............................ 67 + Appendix B. Minimising the impact of IGMP in IPv4 environments.. 69 + Appendix C. Further comments on 'Clusters'...................... 71 + Appendix D. TLV list parsing algorithm.......................... 72 + Appendix E. Summary of timer values............................. 73 + Appendix F. Pseudo code for MARS operation...................... 74 + + + + + + + +Armitage Standards Track [Page 3] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +1. Introduction. + + Multicasting is the process whereby a source host or protocol entity + sends a packet to multiple destinations simultaneously using a + single, local 'transmit' operation. The more familiar cases of + Unicasting and Broadcasting may be considered to be special cases of + Multicasting (with the packet delivered to one destination, or 'all' + destinations, respectively). + + Most network layer models, like the one described in RFC 1112 [1] for + IP multicasting, assume sources may send their packets to abstract + 'multicast group addresses'. Link layer support for such an + abstraction is assumed to exist, and is provided by technologies such + as Ethernet. + + ATM is being utilized as a new link layer technology to support a + variety of protocols, including IP. With RFC 1483 [2] the IETF + defined a multiprotocol mechanism for encapsulating and transmitting + packets using AAL5 over ATM Virtual Channels (VCs). However, the ATM + Forum's currently published signalling specifications (UNI 3.0 [8] + and UNI 3.1 [4]) does not provide the multicast address abstraction. + Unicast connections are supported by point to point, bidirectional + VCs. Multicasting is supported through point to multipoint + unidirectional VCs. The key limitation is that the sender must have + prior knowledge of each intended recipient, and explicitly establish + a VC with itself as the root node and the recipients as the leaf + nodes. + + This document has two broad goals: + + Define a group address registration and membership distribution + mechanism that allows UNI 3.0/3.1 based networks to support the + multicast service of protocols such as IP. + + Define specific endpoint behaviours for managing point to + multipoint VCs to achieve multicasting of layer 3 packets. + + As the IETF is currently in the forefront of using wide area + multicasting this document's descriptions will often focus on IP + service model of RFC 1112. A final chapter will note the + multiprotocol application of the architecture. + + This document avoids discussion of one highly non-trivial aspect of + using ATM - the specification of QoS for VCs being established in + response to higher layer needs. Research in this area is still very + formative [7], and so it is assumed that future documents will + clarify the mapping of QoS requirements to VC establishment. The + default at this time is that VCs are established with a request for + + + +Armitage Standards Track [Page 4] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Unspecified Bit Rate (UBR) service, as typified by the IETF's use of + VCs for unicast IP, described in RFC 1755 [6]. + +1.1 The Multicast Address Resolution Server (MARS). + + The Multicast Address Resolution Server (MARS) is an extended analog + of the ATM ARP Server introduced in RFC 1577 [3]. It acts as a + registry, associating layer 3 multicast group identifiers with the + ATM interfaces representing the group's members. MARS messages + support the distribution of multicast group membership information + between MARS and endpoints (hosts or routers). Endpoint address + resolution entities query the MARS when a layer 3 address needs to be + resolved to the set of ATM endpoints making up the group at any one + time. Endpoints keep the MARS informed when they need to join or + leave particular layer 3 groups. To provide for asynchronous + notification of group membership changes the MARS manages a point to + multipoint VC out to all endpoints desiring multicast support + + Valid arguments can be made for two different approaches to ATM level + multicasting of layer 3 packets - through meshes of point to + multipoint VCs, or ATM level multicast servers (MCS). The MARS + architecture allows either VC meshes or MCSs to be used on a per- + group basis. + +1.2 The ATM level multicast Cluster. + + Each MARS manages a 'cluster' of ATM-attached endpoints. A Cluster is + defined as + + The set of ATM interfaces choosing to participate in direct ATM + connections to achieve multicasting of AAL_SDUs between + themselves. + + In practice, a Cluster is the set of endpoints that choose to use the + same MARS to register their memberships and receive their updates + from. + + By implication of this definition, traffic between interfaces + belonging to different Clusters passes through an inter-cluster + device. (In the IP world an inter-cluster device would be an IP + multicast router with logical interfaces into each Cluster.) This + document explicitly avoids specifying the nature of inter-cluster + (layer 3) routing protocols. + + The mapping of clusters to other constrained sets of endpoints (such + as unicast Logical IP Subnets) is left to each network administrator. + However, for the purposes of conformance with this document network + administrators MUST ensure that each Logical IP Subnet (LIS) is + + + +Armitage Standards Track [Page 5] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + served by a separate MARS, creating a one-to-one mapping between + cluster and unicast LIS. IP multicast routers then interconnect each + LIS as they do with conventional subnets. (Relaxation of this + restriction MAY only occur after future research on the interaction + between existing layer 3 multicast routing protocols and unicast + subnet boundaries.) + + The term 'Cluster Member' will be used in this document to refer to + an endpoint that is currently using a MARS for multicast support. + Thus potential scope of a cluster may be the entire membership of a + LIS, while the actual scope of a cluster depends on which endpoints + are actually cluster members at any given time. + +1.3 Document overview. + + This document assumes an understanding of concepts explained in + greater detail in RFC 1112, RFC 1577, UNI 3.0/3.1, and RFC 1755 [6]. + + Section 2 provides an overview of IP multicast and what RFC 1112 + required from Ethernet. + + Section 3 describes in more detail the multicast support services + offered by UNI 3.0/3.1, and outlines the differences between VC + meshes and multicast servers (MCSs) as mechanisms for distributing + packets to multiple destinations. + + Section 4 provides an overview of the MARS and its relationship to + ATM endpoints. This section also discusses the encapsulation and + structure of MARS control messages. + + Section 5 substantially defines the entire cluster member endpoint + behaviour, on both receive and transmit sides. This includes both + normal operation and error recovery. + + Section 6 summarises the required behaviour of a MARS. + + Section 7 looks at how a multicast server (MCS) interacts with a + MARS. + + Section 8 discusses how IP multicast routers may make novel use of + promiscuous and semi-promiscuous group joins. Also discussed is a + mechanism designed to reduce the amount of IGMP traffic issued by + routers. + + Section 9 discusses how this document applies in the more general + (non-IP) case. + + + + + +Armitage Standards Track [Page 6] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Section 10 summarises the key proposals, and identifies areas for + future research that are generated by this MARS architecture. + + The appendices provide discussion on issues that arise out of the + implementation of this document. Appendix A discusses MARS and + endpoint algorithms for parsing MARS messages. Appendix B describes + the particular problems introduced by the current IGMP paradigms, and + possible interim work-arounds. Appendix C discusses the 'cluster' + concept in further detail, while Appendix D briefly outlines an + algorithm for parsing TLV lists. Appendix E summarises various timer + values used in this document, and Appendix F provides example + pseudo-code for a MARS entity. + +1.4 Conventions. + + In this document the following coding and packet representation rules + are used: + + All multi-octet parameters are encoded in big-endian form (i.e. + the most significant octet comes first). + + In all multi-bit parameters bit numbering begins at 0 for the + least significant bit when stored in memory (i.e. the n'th bit has + weight of 2^n). + + A bit that is 'set', 'on', or 'one' holds the value 1. + + A bit that is 'reset', 'off', 'clear', or 'zero' holds the value + 0. + +2. Summary of the IP multicast service model. + + Under IP version 4 (IPv4), addresses in the range between 224.0.0.0 + and 239.255.255.255 (224.0.0.0/4) are termed 'Class D' or 'multicast + group' addresses. These abstractly represent all the IP hosts in the + Internet (or some constrained subset of the Internet) who have + decided to 'join' the specified group. + + RFC1112 requires that a multicast-capable IP interface must support + the transmission of IP packets to an IP multicast group address, + whether or not the node considers itself a 'member' of that group. + Consequently, group membership is effectively irrelevant to the + transmit side of the link layer interfaces. When Ethernet is used as + the link layer (the example used in RFC1112), no address resolution + is required to transmit packets. An algorithmic mapping from IP + multicast address to Ethernet multicast address is performed locally + before the packet is sent out the local interface in the same 'send + and forget' manner as a unicast IP packet. + + + +Armitage Standards Track [Page 7] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Joining and Leaving an IP multicast group is more explicit on the + receive side - with the primitives JoinLocalGroup and LeaveLocalGroup + affecting what groups the local link layer interface should accept + packets from. When the IP layer wants to receive packets from a + group, it issues JoinLocalGroup. When it no longer wants to receive + packets, it issues LeaveLocalGroup. A key point to note is that + changing state is a local issue, it has no effect on other hosts + attached to the Ethernet. + + IGMP is defined in RFC 1112 to support IP multicast routers attached + to a given subnet. Hosts issue IGMP Report messages when they perform + a JoinLocalGroup, or in response to an IP multicast router sending an + IGMP Query. By periodically transmitting queries IP multicast routers + are able to identify what IP multicast groups have non-zero + membership on a given subnet. + + A specific IP multicast address, 224.0.0.1, is allocated for the + transmission of IGMP Query messages. Host IP layers issue a + JoinLocalGroup for 224.0.0.1 when they intend to participate in IP + multicasting, and issue a LeaveLocalGroup for 224.0.0.1 when they've + ceased participating in IP multicasting. + + Each host keeps a list of IP multicast groups it has been + JoinLocalGroup'd to. When a router issues an IGMP Query on 224.0.0.1 + each host begins to send IGMP Reports for each group it is a member + of. IGMP Reports are sent to the group address, not 224.0.0.1, "so + that other members of the same group on the same network can overhear + the Report" and not bother sending one of their own. IP multicast + routers conclude that a group has no members on the subnet when IGMP + Queries no longer elicit associated replies. + +3. UNI 3.0/3.1 support for intra-cluster multicasting. + + For the purposes of the MARS protocol, both UNI 3.0 and UNI 3.1 + provide equivalent support for multicasting. Differences between UNI + 3.0 and UNI 3.1 in required signalling elements are covered in RFC + 1755. + + This document will describe its operation in terms of 'generic' + functions that should be available to clients of a UNI 3.0/3.1 + signalling entity in a given ATM endpoint. The ATM model broadly + describes an 'AAL User' as any entity that establishes and manages + VCs and underlying AAL services to exchange data. An IP over ATM + interface is a form of 'AAL User' (although the default LLC/SNAP + encapsulation mode specified in RFC1755 really requires that an 'LLC + entity' is the AAL User, which in turn supports the IP/ATM + interface). + + + + +Armitage Standards Track [Page 8] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The most fundamental limitations of UNI 3.0/3.1's multicast support + are: + + Only point to multipoint, unidirectional VCs may be established. + + Only the root (source) node of a given VC may add or remove leaf + nodes. + + Leaf nodes are identified by their unicast ATM addresses. UNI + 3.0/3.1 defines two ATM address formats - native E.164 and NSAP + (although it must be stressed that the NSAP address is so called + because it uses the NSAP format - an ATM endpoint is NOT a Network + layer termination point). In UNI 3.0/3.1 an 'ATM Number' is the + primary identification of an ATM endpoint, and it may use either + format. Under some circumstances an ATM endpoint must be identified + by both a native E.164 address (identifying the attachment point of a + private network to a public network), and an NSAP address ('ATM + Subaddress') identifying the final endpoint within the private + network. For the rest of this document the term will be used to mean + either a single 'ATM Number' or an 'ATM Number' combined with an 'ATM + Subaddress'. + +3.1 VC meshes. + + The most fundamental approach to intra-cluster multicasting is the + multicast VC mesh. Each source establishes its own independent point + to multipoint VC (a single multicast tree) to the set of leaf nodes + (destinations) that it has been told are members of the group it + wishes to send packets to. + + Interfaces that are both senders and group members (leaf nodes) to a + given group will originate one point to multipoint VC, and terminate + one VC for every other active sender to the group. This criss- + crossing of VCs across the ATM network gives rise to the name 'VC + mesh'. + +3.2 Multicast Servers. + + An alternative model has each source establish a VC to an + intermediate node - the multicast server (MCS). The multicast server + itself establishes and manages a point to multipoint VC out to the + actual desired destinations. + + The MCS reassembles AAL_SDUs arriving on all the incoming VCs, and + then queues them for transmission on its single outgoing point to + multipoint VC. (Reassembly of incoming AAL_SDUs is required at the + multicast server as AAL5 does not support cell level multiplexing of + different AAL_SDUs on a single outgoing VC.) + + + +Armitage Standards Track [Page 9] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The leaf nodes of the multicast server's point to multipoint VC must + be established prior to packet transmission, and the multicast server + requires an external mechanism to identify them. A side-effect of + this method is that ATM interfaces that are both sources and group + members will receive copies of their own packets back from the MCS + (An alternative method is for the multicast server to explicitly + retransmit packets on individual VCs between itself and group + members. A benefit of this second approach is that the multicast + server can ensure that sources do not receive copies of their own + packets.) + + The simplest MCS pays no attention to the contents of each AAL_SDU. + It is purely an AAL/ATM level device. More complex MCS architectures + (where a single endpoint serves multiple layer 3 groups) are + possible, but are beyond the scope of this document. More detailed + discussion is provided in section 7. + +3.3 Tradeoffs. + + Arguments over the relative merits of VC meshes and multicast servers + have raged for some time. Ultimately the choice depends on the + relative trade-offs a system administrator must make between + throughput, latency, congestion, and resource consumption. Even + criteria such as latency can mean different things to different + people - is it end to end packet time, or the time it takes for a + group to settle after a membership change? The final choice depends + on the characteristics of the applications generating the multicast + traffic. + + If we focussed on the data path we might prefer the VC mesh because + it lacks the obvious single congestion point of an MCS. Throughput + is likely to be higher, and end to end latency lower, because the + mesh lacks the intermediate AAL_SDU reassembly that must occur in + MCSs. The underlying ATM signalling system also has greater + opportunity to ensure optimal branching points at ATM switches along + the multicast trees originating on each source. + + However, resource consumption will be higher. Every group member's + ATM interface must terminate a VC per sender (consuming on-board + memory for state information, instance of an AAL service, and + buffering in accordance with the vendors particular architecture). On + the contrary, with a multicast server only 2 VCs (one out, one in) + are required, independent of the number of senders. The allocation of + VC related resources is also lower within the ATM cloud when using a + multicast server. These points may be considered to have merit in + environments where VCs across the UNI or within the ATM cloud are + valuable (e.g. the ATM provider charges on a per VC basis), or AAL + contexts are limited in the ATM interfaces of endpoints. + + + +Armitage Standards Track [Page 10] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + If we focus on the signalling load then MCSs have the advantage when + faced with dynamic sets of receivers. Every time the membership of a + multicast group changes (a leaf node needs to be added or dropped), + only a single point to multipoint VC needs to be modified when using + an MCS. This generates a single signalling event across the MCS's + UNI. However, when membership change occurs in a VC mesh, signalling + events occur at the UNIs of every traffic source - the transient + signalling load scales with the number of sources. This has obvious + ramifications if you define latency as the time for a group's + connectivity to stabilise after change (especially as the number of + senders increases). + + Finally, as noted above, MCSs introduce a 'reflected packet' problem, + which requires additional per-AAL_SDU information to be carried in + order for layer 3 sources to detect their own AAL_SDUs coming back. + + The MARS architecture allows system administrators to utilize either + approach on a group by group basis. + +3.4 Interaction with local UNI 3.0/3.1 signalling entity. + + The following generic signalling functions are presumed to be + available to local AAL Users: + + L_CALL_RQ - Establish a unicast VC to a specific endpoint. + L_MULTI_RQ - Establish multicast VC to a specific endpoint. + L_MULTI_ADD - Add new leaf node to previously established VC. + L_MULTI_DROP - Remove specific leaf node from established VC. + L_RELEASE - Release unicast VC, or all Leaves of a multicast VC. + + The signalling exchanges and local information passed between AAL + User and UNI 3.0/3.1 signalling entity with these functions are + outside the scope of this document. + + The following indications are assumed to be available to AAL Users, + generated by the local UNI 3.0/3.1 signalling entity: + + L_ACK - Succesful completion of a local request. + L_REMOTE_CALL - A new VC has been established to the AAL User. + ERR_L_RQFAILED - A remote ATM endpoint rejected an L_CALL_RQ, + L_MULTI_RQ, or L_MULTI_ADD. + ERR_L_DROP - A remote ATM endpoint dropped off an existing VC. + ERR_L_RELEASE - An existing VC was terminated. + + The signalling exchanges and local information passed between AAL + User and UNI 3.0/3.1 signalling entity with these functions are + outside the scope of this document. + + + + +Armitage Standards Track [Page 11] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +4. Overview of the MARS. + + The MARS may reside within any ATM endpoint that is directly + addressable by the endpoints it is serving. Endpoints wishing to join + a multicast cluster must be configured with the ATM address of the + node on which the cluster's MARS resides. (Section 5.4 describes how + backup MARSs may be added to support the activities of a cluster. + References to 'the MARS' in following sections will be assumed to + mean the acting MARS for the cluster.) + +4.1 Architecture. + + Architecturally the MARS is an evolution of the RFC 1577 ARP Server. + Whilst the ARP Server keeps a table of {IP,ATM} address pairs for all + IP endpoints in an LIS, the MARS keeps extended tables of {layer 3 + address, ATM.1, ATM.2, ..... ATM.n} mappings. It can either be + configured with certain mappings, or dynamically 'learn' mappings. + The format of the {layer 3 address} field is generally not + interpreted by the MARS. + + A single ATM node may support multiple logical MARSs, each of which + support a separate cluster. The restriction is that each MARS has a + unique ATM address (e.g. a different SEL field in the NSAP address of + the node on which the multiple MARSs reside). By definition a single + instance of a MARS may not support more than one cluster. + + The MARS distributes group membership update information to cluster + members over a point to multipoint VC known as the ClusterControlVC. + Additionally, when Multicast Servers (MCSs) are being used it also + establishes a separate point to multipoint VC out to registered MCSs, + known as the ServerControlVC. All cluster members are leaf nodes of + ClusterControlVC. All registered multicast servers are leaf nodes of + ServerControlVC (described further in section 6). + + The MARS does NOT take part in the actual multicasting of layer 3 + data packets. + +4.2 Control message format. + + By default all MARS control messages MUST be LLC/SNAP encapsulated + using the following codepoints: + + [0xAA-AA-03][0x00-00-5E][0x00-03][MARS control message] + (LLC) (OUI) (PID) + + (This is a PID from the IANA OUI.) + + + + + +Armitage Standards Track [Page 12] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + MARS control messages are made up of 4 major components: + + [Fixed header][Mandatory fields][Addresses][Supplementary TLVs] + + [Fixed header] contains fields indicating the operation being + performed and the layer 3 protocol being referred to (e.g IPv4, IPv6, + AppleTalk, etc). The fixed header also carries checksum information, + and hooks to allow this basic control message structure to be re-used + by other query/response protocols. + + The [Mandatory fields] section carries fixed width parameters that + depend on the operation type indicated in [Fixed header]. + + The following [Addresses] area carries variable length fields for + source and target addresses - both hardware (e.g. ATM) and layer 3 + (e.g. IPv4). These provide the fundamental information that the + registrations, queries, and updates use and operate on. For the MARS + protocol fields in [Fixed header] indicate how to interpret the + contents of [Addresses]. + + [Supplementary TLVs] represents an optional list of TLV (type, + length, value) encoded information elements that may be appended to + provide supplementary information. This feature is described in + further detail in section 10. + + MARS messages contain variable length address fields. In all cases + null addresses SHALL be encoded as zero length, and have no space + allocated in the message. + + (Unique LLC/SNAP encapsulation of MARS control messages means MARS + and ARP Server functionality may be implemented within a common + entity, and share a client-server VC, if the implementor so chooses. + Note that the LLC/SNAP codepoint for MARS is different to the + codepoint used for ATMARP.) + +4.3 Fixed header fields in MARS control messages. + + The [Fixed header] has the following format: + + Data: + mar$afn 16 bits Address Family (0x000F). + mar$pro 56 bits Protocol Identification. + mar$hdrrsv 24 bits Reserved. Unused by MARS control protocol. + mar$chksum 16 bits Checksum across entire MARS message. + mar$extoff 16 bits Extensions Offset. + mar$op 16 bits Operation code. + mar$shtl 8 bits Type & length of source ATM number. (r) + mar$sstl 8 bits Type & length of source ATM subaddress. (q) + + + +Armitage Standards Track [Page 13] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + mar$shtl and mar$sstl provide information regarding the source's + hardware (ATM) address. In the MARS protocol these fields are always + present, as every MARS message carries a non-null source ATM address. + In all cases the source ATM address is the first variable length + field in the [Addresses] section. + + The other fields in [Fixed header] are described in the following + subsections. + +4.3.1 Hardware type. + + mar$afn defines the type of link layer addresses being carried. The + value of 0x000F SHALL be used by MARS messages generated in + accordance with this document. The encoding of ATM addresses and + subaddresses when mar$afn = 0x000F is described in section 5.1.2. + Encodings when mar$afn != 0x000F are outside the scope of this + document. + +4.3.2 Protocol type. + + The mar$pro field is made up of two subfields: + + mar$pro.type 16 bits Protocol type. + mar$pro.snap 40 bits Optional SNAP extension to protocol type. + + The mar$pro.type field is a 16 bit unsigned integer representing the + following number space: + + 0x0000 to 0x00FF Protocols defined by the equivalent NLPIDs. + 0x0100 to 0x03FF Reserved for future use by the IETF. + 0x0400 to 0x04FF Allocated for use by the ATM Forum. + 0x0500 to 0x05FF Experimental/Local use. + 0x0600 to 0xFFFF Protocols defined by the equivalent Ethertypes. + + (based on the observations that valid Ethertypes are never smaller + than 0x600, and NLPIDs never larger than 0xFF.) + + The NLPID value of 0x80 is used to indicate a SNAP encoded extension + is being used to encode the protocol type. When mar$pro.type == 0x80 + the SNAP extension is encoded in the mar$pro.snap field. This is + termed the 'long form' protocol ID. + + If mar$pro.type != 0x80 then the mar$pro.snap field MUST be zero on + transmit and ignored on receive. The mar$pro.type field itself + identifies the protocol being referred to. This is termed the 'short + form' protocol ID. + + + + + +Armitage Standards Track [Page 14] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + In all cases, where a protocol has an assigned number in the + mar$pro.type space (excluding 0x80) the short form MUST be used when + transmitting MARS messages. Additionally, where a protocol has valid + short and long forms of identification, receivers MAY choose to + recognise the long form. + + mar$pro.type values other than 0x80 MAY have 'long forms' defined in + future documents. + + For the remainder of this document references to mar$pro SHALL be + interpreted to mean mar$pro.type, or mar$pro.type in combination with + mar$pro.snap as appropriate. + + The use of different protocol types is described further in section + 9. + +4.3.3 Checksum. + + The mar$chksum field carries a standard IP checksum calculated across + the entire MARS control message (excluding the LLC/SNAP header). The + field is set to zero before performing the checksum calculation. + + As the entire LLC/SNAP encapsulated MARS message is protected by the + 32 bit CRC of the AAL5 transport, implementors MAY choose to ignore + the checksum facility. If no checksum is calculated these bits MUST + be reset before transmission. If no checksum is performed on + reception, this field MUST be ignored. If a receiver is capable of + validating a checksum it MUST only perform the validation when the + received mar$chksum field is non-zero. Messages arriving with + mar$chksum of 0 are always considered valid. + +4.3.4 Extensions Offset. + + The mar$extoff field identifies the existence and location of an + optional supplementary parameters list. Its use is described in + section 10. + + + + + + + + + + + + + + + +Armitage Standards Track [Page 15] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +4.3.5 Operation code. + + The mar$op field is further subdivided into two 8 bit fields - + mar$op.version (leading octet) and mar$op.type (trailing octet). + Together they indicate the nature of the control message, and the + context within which its [Mandatory fields], [Addresses], and + [Supplementary TLVs] should be interpreted. + + mar$op.version + 0 MARS protocol defined in this document. + 0x01 - 0xEF Reserved for future use by the IETF. + 0xF0 - 0xFE Allocated for use by the ATM Forum. + 0xFF Experimental/Local use. + + mar$op.type + Value indicates operation being performed, within context of + the control protocol version indicated by mar$op.version. + + For the rest of this document references to the mar$op value SHALL be + taken to mean mar$op.type, with mar$op.version = 0x00. The values + used in this document are summarised in section 11. + + (Note this number space is independent of the ATMARP operation code + number space.) + +4.3.6 Reserved. + + mar$hdrrsv may be subdivided and assigned specific meanings for other + control protocols indicated by mar$op.version != 0. + +5. Endpoint (MARS client) interface behaviour. + + An endpoint is best thought of as a 'shim' or 'convergence' layer, + sitting between a layer 3 protocol's link layer interface and the + underlying UNI 3.0/3.1 service. An endpoint in this context can exist + in a host or a router - any entity that requires a generic 'layer 3 + over ATM' interface to support layer 3 multicast. It is broken into + two key subsections - one for the transmit side, and one for the + receive side. + + Multiple logical ATM interfaces may be supported by a single physical + ATM interface (for example, using different SEL values in the NSAP + formatted address assigned to the physical ATM interface). Therefore + implementors MUST allow for multiple independent 'layer 3 over ATM' + interfaces too, each with its own configured MARS (or table of MARSs, + as discussed in section 5.4), and ability to be attached to the same + or different clusters. + + + + +Armitage Standards Track [Page 16] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The initial signalling path between a MARS client (managing an + endpoint) and its associated MARS is a transient point to point, + bidirectional VC. This VC is established by the MARS client, and is + used to send queries to, and receive replies from, the MARS. It has + an associated idle timer, and is dismantled if not used for a + configurable period of time. The minimum suggested value for this + time is 1 minute, and the RECOMMENDED default is 20 minutes. (Where + the MARS and ARP Server are co-resident, this VC may be used for both + ATM ARP traffic and MARS control traffic.) + + The remaining signalling path is ClusterControlVC, to which the MARS + client is added as a leaf node when it registers (described in + section 5.2.3). + + The majority of this document covers the distribution of information + allowing endpoints to establish and manage outgoing point to + multipoint VCs - the forwarding paths for multicast traffic to + particular multicast groups. The actual format of the AAL_SDUs sent + on these VCs is almost completely outside the scope of this + specification. However, endpoints are not expected to know whether + their forwarding path leads directly to a multicast group's members + or to an MCS (described in section 3). This requires additional per- + packet encapsulation (described in section 5.5) to aid in the the + detection of reflected AAL_SDUs. + +5.1 Transmit side behaviour. + + The following description will often be in terms of an IPv4/ATM + interface that is capable of transmitting packets to a Class D + address at any time, without prior warning. It should be trivial for + an implementor to generalise this behaviour to the requirements of + another layer 3 data protocol. + + When a local Layer 3 entity passes down a packet for transmission, + the endpoint first ascertains whether an outbound path to the + destination multicast group already exists. If it does not, the MARS + is queried for a set of ATM endpoints that represent an appropriate + forwarding path. (The ATM endpoints may represent the actual group + members within the cluster, or a set of one or more MCSs. The + endpoint does not distinguish between either case. Section 6.2 + describes the MARS behaviour that leads to MCSs being supplied as the + forwarding path for a multicast group.) + + + + + + + + + +Armitage Standards Track [Page 17] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The query is executed by issuing a MARS_REQUEST. The reply from the + MARS may take one of two forms: + + MARS_MULTI - Sequence of MARS_MULTI messages returning the set of + ATM endpoints that are to be leaf nodes of an + outgoing point to multipoint VC (the forwarding + path). + + MARS_NAK - No mapping found, group is empty. + + The formats of these messages are described in section 5.1.2. + + Outgoing VCs are established with a request for Unspecified Bit Rate + (UBR) service, as typified by the IETF's use of VCs for unicast IP, + described in RFC 1755 [6]. Future documents may vary this approach + and allow the specification of different ATM traffic parameters from + locally configured information or parameters obtained through some + external means. + +5.1.1 Retrieving Group Membership from the MARS. + + If the MARS had no mapping for the desired Class D address a MARS_NAK + will be returned. In this case the IP packet MUST be discarded + silently. If a match is found in the MARS's tables it proceeds to + return addresses ATM.1 through ATM.n in a sequence of one or more + MARS_MULTIs. A simple mechanism is used to detect and recover from + loss of MARS_MULTI messages. + + (If the client learns that there is no other group member in the + cluster - the MARS returns a MARS_NAK or returns a MARS_MULTI with + the client as the only member - it MUST delay sending out a new + MARS_REQUEST for that group for a period no less than 5 seconds and + no more than 10 seconds.) + + Each MARS_MULTI carries a boolean field x, and a 15 bit integer field + y - expressed as MARS_MULTI(x,y). Field y acts as a sequence number, + starting at 1 and incrementing for each MARS_MULTI sent. Field x + acts as an 'end of reply' marker. When x == 1 the MARS response is + considered complete. + + In addition, each MARS_MULTI may carry multiple ATM addresses from + the set {ATM.1, ATM.2, .... ATM.n}. A MARS MUST minimise the number + of MARS_MULTIs transmitted by placing as many group members' + addresses in a single MARS_MULTI as possible. The limit on the length + of an individual MARS_MULTI message MUST be the MTU of the underlying + VC. + + + + + +Armitage Standards Track [Page 18] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + For example, assume n ATM addresses must be returned, each MARS_MULTI + is limited to only p ATM addresses, and p << n. This would require a + sequence of k MARS_MULTI messages (where k = (n/p)+1, using integer + arithmetic), transmitted as follows: + + MARS_MULTI(0,1) carries back {ATM.1 ... ATM.p} + MARS_MULTI(0,2) carries back {ATM.(p+1) ... ATM.(2p)} + [.......] + MARS_MULTI(1,k) carries back { ... ATM.n} + + If k == 1 then only MARS_MULTI(1,1) is sent. + + Typical failure mode will be losing one or more of MARS_MULTI(0,1) + through MARS_MULTI(0,k-1). This is detected when y jumps by more than + one between consecutive MARS_MULTI's. An alternative failure mode is + losing MARS_MULTI(1,k). A timer MUST be implemented to flag the + failure of the last MARS_MULTI to arrive. A default value of 10 + seconds is RECOMMENDED. + + If a 'sequence jump' is detected, the host MUST wait for the + MARS_MULTI(1,k), discard all results, and repeat the MARS_REQUEST. + + If a timeout occurs, the host MUST discard all results, and repeat + the MARS_REQUEST. + + A final failure mode involves the MARS Sequence Number (described in + section 5.1.4.2 and carried in each part of a multi-part MARS_MULTI). + If its value changes during the reception of a multi-part MARS_MULTI + the host MUST wait for the MARS_MULTI(1,k), discard all results, and + repeat the MARS_REQUEST. + + (Corruption of cell contents will lead to loss of a MARS_MULTI + through AAL5 CPCS_PDU reassembly failure, which will be detected + through the mechanisms described above.) + + If the MARS is managing a cluster of endpoints spread across + different but directly accessible ATM networks it will not be able to + return all the group members in a single MARS_MULTI. The MARS_MULTI + message format allows for either E.164, ISO NSAP, or (E.164 + NSAP) + to be returned as ATM addresses. However, each MARS_MULTI message may + only return ATM addresses of the same type and length. The returned + addresses MUST be grouped according to type (E.164, ISO NSAP, or + both) and returned in a sequence of separate MARS_MULTI parts. + + + + + + + + +Armitage Standards Track [Page 19] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +5.1.2 MARS_REQUEST, MARS_MULTI, and MARS_NAK messages. + + MARS_REQUEST is shown below. It is indicated by an 'operation type + value' (mar$op) of 1. + + The multicast address being resolved is placed into the the target + protocol address field (mar$tpa), and the target hardware address is + set to null (mar$thtl and mar$tstl both zero). + + In IPv4 environments the protocol type (mar$pro) is 0x800 and the + target protocol address length (mar$tpln) MUST be set to 4. The + source fields MUST contain the ATM number and subaddress of the + client issuing the MARS_REQUEST (the subaddress MAY be null). + + Data: + mar$afn 16 bits Address Family (0x000F). + mar$pro 56 bits Protocol Identification. + mar$hdrrsv 24 bits Reserved. Unused by MARS control protocol. + mar$chksum 16 bits Checksum across entire MARS message. + mar$extoff 16 bits Extensions Offset. + mar$op 16 bits Operation code (MARS_REQUEST = 1) + mar$shtl 8 bits Type & length of source ATM number. (r) + mar$sstl 8 bits Type & length of source ATM subaddress. (q) + mar$spln 8 bits Length of source protocol address (s) + mar$thtl 8 bits Type & length of target ATM number (x) + mar$tstl 8 bits Type & length of target ATM subaddress (y) + mar$tpln 8 bits Length of target group address (z) + mar$pad 64 bits Padding (aligns mar$sha with MARS_MULTI). + mar$sha roctets source ATM number + mar$ssa qoctets source ATM subaddress + mar$spa soctets source protocol address + mar$tpa zoctets target multicast group address + mar$tha xoctets target ATM number + mar$tsa yoctets target ATM subaddress + + Following the RFC1577 approach, the mar$shtl, mar$sstl, mar$thtl and + mar$tstl fields are coded as follows: + + 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+ + |0|x| length | + +-+-+-+-+-+-+-+-+ + + + + + + + + + +Armitage Standards Track [Page 20] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The most significant bit is reserved and MUST be set to zero. The + second most significant bit (x) is a flag indicating whether the ATM + address being referred to is in: + + - ATM Forum NSAPA format (x = 0). + - Native E.164 format (x = 1). + + The bottom 6 bits is an unsigned integer value indicating the length + of the associated ATM address in octets. If this value is zero the + flag x is ignored. + + The mar$spln and mar$tpln fields are unsigned 8 bit integers, giving + the length in octets of the source and target protocol address fields + respectively. + + MARS packets use true variable length fields. A null (non-existant) + address MUST be coded as zero length, and no space allocated for it + in the message body. + + MARS_NAK is the MARS_REQUEST returned with operation type value of 6. + All other fields are left unchanged from the MARS_REQUEST (e.g. do + not transpose the source and target information. In all cases MARS + clients use the source address fields to identify their own messages + coming back). + + The MARS_MULTI message is identified by an mar$op value of 2. The + message format is: + + Data: + mar$afn 16 bits Address Family (0x000F). + mar$pro 56 bits Protocol Identification. + mar$hdrrsv 24 bits Reserved. Unused by MARS control protocol. + mar$chksum 16 bits Checksum across entire MARS message. + mar$extoff 16 bits Extensions Offset. + mar$op 16 bits Operation code (MARS_MULTI = 2). + mar$shtl 8 bits Type & length of source ATM number. (r) + mar$sstl 8 bits Type & length of source ATM subaddress. (q) + mar$spln 8 bits Length of source protocol address (s) + mar$thtl 8 bits Type & length of target ATM number (x) + mar$tstl 8 bits Type & length of target ATM subaddress (y) + mar$tpln 8 bits Length of target group address (z) + mar$tnum 16 bits Number of target ATM addresses returned (N) + mar$seqxy 16 bits Boolean flag x and sequence number y. + mar$msn 32 bits MARS Sequence Number. + mar$sha roctets source ATM number + mar$ssa qoctets source ATM subaddress + mar$spa soctets source protocol address + mar$tpa zoctets target multicast group address + + + +Armitage Standards Track [Page 21] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + mar$tha.1 xoctets target ATM number 1 + mar$tsa.1 yoctets target ATM subaddress 1 + mar$tha.2 xoctets target ATM number 2 + mar$tsa.2 yoctets target ATM subaddress 2 + [.......] + mar$tha.N xoctets target ATM number N + mar$tsa.N yoctets target ATM subaddress N + + The source protocol and ATM address fields are copied directly from + the MARS_REQUEST that this MARS_MULTI is in response to (not the MARS + itself). + + mar$seqxy is coded with flag x in the leading bit, and sequence + number y coded as an unsigned integer in the remaining 15 bits. + + | 1st octet | 2nd octet | + 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |x| y | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + mar$tnum is an unsigned integer indicating how many pairs of + {mar$tha,mar$tsa} (i.e. how many group member's ATM addresses) are + present in the message. mar$msn is an unsigned 32 bit number filled + in by the MARS before transmitting each MARS_MULTI. Its use is + described further in section 5.1.4. + + As an example, assume we have a multicast cluster using 4 byte + protocol addresses, 20 byte ATM numbers, and 0 byte ATM subaddresses. + For n group members in a single MARS_MULTI we require a (60 + 20n) + byte message. If we assume the default MTU of 9180 bytes, we can + return a maximum of 456 group member's addresses in a single + MARS_MULTI. + +5.1.3 Establishing the outgoing multipoint VC. + + Following the completion of the MARS_MULTI reply the endpoint may + establish a new point to multipoint VC, or reuse an existing one. + + If establishing a new VC, an L_MULTI_RQ is issued for ATM.1, followed + by an L_MULTI_ADD for every member of the set {ATM.2, ....ATM.n} + (assuming the set is non-null). The packet is then transmitted over + the newly created VC just as it would be for a unicast VC. + + After transmitting the packet, the local interface holds the VC open + and marks it as the active path out of the host for any subsequent IP + packets being sent to that Class D address. + + + + +Armitage Standards Track [Page 22] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + When establishing a new multicast VC it is possible that one or more + L_MULTI_RQ or L_MULTI_ADD may fail. The UNI 3.0/3.1 failure cause + must be returned in the ERR_L_RQFAILED signal from the local + signalling entity to the AAL User. If the failure cause is not 49 + (Quality of Service unavailable), 51 (user cell rate not available - + UNI 3.0), 37 (user cell rate not available - UNI 3.1), or 41 + (Temporary failure), the endpoint's ATM address is dropped from the + set {ATM.1, ATM.2, ..., ATM.n} returned by the MARS. Otherwise, the + L_MULTI_RQ or L_MULTI_ADD should be reissued after a random delay of + 5 to 10 seconds. If the request fails again, another request should + be issued after twice the previous delay has elapsed. This process + should be continued until the call succeeds or the multipoint VC gets + released. + + If the initial L_MULTI_RQ fails for ATM.1, and n is greater than 1 + (i.e. the returned set of ATM addresses contains 2 or more addresses) + a new L_MULTI_RQ should be immediately issued for the next ATM + address in the set. This procedure is repeated until an L_MULTI_RQ + succeeds, as no L_MULTI_ADDs may be issued until an initial outgoing + VC is established. + + Each ATM address for which an L_MULTI_RQ failed with cause 49, 51, + 37, or 41 MUST be tagged rather than deleted. An L_MULTI_ADD is + issued for these tagged addresses using the random delay procedure + outlined above. + + The VC MAY be considered 'up' before failed L_MULTI_ADDs have been + successfully re-issued. An endpoint MAY implement a concurrent + mechanism that allows data to start flowing out the new VC even while + failed L_MULTI_ADDs are being re-tried. (The alternative of waiting + for each leaf node to accept the connection could lead to significant + delays in transmitting the first packet.) + + Each VC MUST have a configurable inactivity timer associated with it. + If the timer expires, an L_RELEASE is issued for that VC, and the + Class D address is no longer considered to have an active path out of + the local host. The timer SHOULD be no less than 1 minute, and a + default of 20 minutes is RECOMMENDED. Choice of specific timer + periods is beyond the scope of this document. + + VC consumption may also be reduced by endpoints noting when a new + group's set of {ATM.1, ....ATM.n} matches that of a pre-existing VC + out to another group. With careful local management, and assuming the + QoS of the existing VC is sufficient for both groups, a new pt to mpt + VC may not be necessary. Under certain circumstances endpoints may + decide that it is sufficient to re-use an existing VC whose set of + leaf nodes is a superset of the new group's membership (in which case + some endpoints will receive multicast traffic for a layer 3 group + + + +Armitage Standards Track [Page 23] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + they haven't joined, and must filter them above the ATM interface). + Algorithms for performing this type of optimization are not discussed + here, and are not required for conformance with this document. + +5.1.4 Tracking subsequent group updates. + + Once a new VC has been established, the transmit side of the cluster + member's interface needs to monitor subsequent group changes - adding + or dropping leaf nodes as appropriate. This is achieved by watching + for MARS_JOIN and MARS_LEAVE messages from the MARS itself. These + messages are described in detail in section 5.2 - at this point it is + sufficient to note that they carry: + + - The ATM address of a node joining or leaving a group. + - The layer 3 address of the group(s) being joined or left. + - A Cluster Sequence Number (CSN) from the MARS. + + MARS_JOIN and MARS_LEAVE messages arrive at each cluster member + across ClusterControlVC. MARS_JOIN or MARS_LEAVE messages that simply + confirm information already held by the cluster member are used to + track the Cluster Sequence Number, but are otherwise ignored. + +5.1.4.1 Updating the active VCs. + + If a MARS_JOIN is seen that refers to (or encompasses) a group for + which the transmit side already has a VC open, the new member's ATM + address is extracted and an L_MULTI_ADD issued locally. This ensures + that endpoints already sending to a given group will immediately add + the new member to their list of recipients. + + If a MARS_LEAVE is seen that refers to (or encompasses) a group for + which the transmit side already has a VC open, the old member's ATM + address is extracted and an L_MULTI_DROP issued locally. This ensures + that endpoints already sending to a given group will immediately drop + the old member from their list of recipients. When the last leaf of a + VC is dropped, the VC is closed completely and the affected group no + longer has a path out of the local endpoint (the next outbound packet + to that group's address will trigger the creation of a new VC, as + described in sections 5.1.1 to 5.1.3). + + The transmit side of the interface MUST NOT shut down an active VC to + a group for which the receive side has just executed a + LeaveLocalGroup. (This behaviour is consistent with the model of + hosts transmitting to groups regardless of their own membership + status.) + + If a MARS_JOIN or MARS_LEAVE arrives with mar$pnum == 0 it carries no + <min,max> pairs, and is only used for tracking the CSN. + + + +Armitage Standards Track [Page 24] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +5.1.4.2 Tracking the Cluster Sequence Number. + + It is important that endpoints do not miss group membership updates + issued by the MARS over ClusterControlVC. However, this will happen + from time to time. The Cluster Sequence Number is carried as an + unsigned 32 bit value in the mar$msn field of many MARS messages + (except for MARS_REQUEST and MARS_NAK). It increments once for every + transmission the MARS makes on ClusterControlVC, regardless of + whether the transmission represents a change in the MARS database or + not. By tracking this counter, cluster members can determine whether + they have missed a previous message on ClusterControlVC, and possibly + a membership change. This is then used to trigger revalidation + (described in section 5.1.5). + + The current CSN is copied into the mar$msn field of MARS messages + being sent to cluster members, whether out ClusterControlVC or on a + point to point VC. + + Calculations on the sequence numbers MUST be performed as unsigned 32 + bit arithmetic. + + Every cluster member keeps its own 32 bit Host Sequence Number (HSN) + to track the MARS's sequence number. Whenever a message is received + that carries an mar$msn field the following processing is performed: + + Seq.diff = mar$msn - HSN + + mar$msn -> HSN + {...process MARS message as appropriate...} + + if ((Seq.diff != 1) && (Seq.diff != 0)) + then {...revalidate group membership information...} + + The basic result is that the cluster member attempts to keep locked + in step with membership changes noted by the MARS. If it ever detects + that a membership change occurred (in any group) without it noticing, + it re-validates the membership of all groups it currently has + multicast VCs open to. + + The mar$msn value in an individual MARS_MULTI is not used to update + the HSN until all parts of the MARS_MULTI (if more than 1) have + arrived. (If the mar$msn changes the MARS_MULTI is discarded, as + described in section 5.1.1.) + + The MARS is free to choose an initial value of CSN. When a new + cluster member starts up it should initialise HSN to zero. When the + cluster member sends the MARS_JOIN to register (described later), the + HSN will be correctly updated to the current CSN value when the + + + +Armitage Standards Track [Page 25] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + endpoint receives the copy of its MARS_JOIN back from the MARS. + +5.1.5 Revalidating a VC's leaf nodes. + + Certain events may inform a cluster member that it has incorrect + information about the sets of leaf nodes it should be sending to. If + an error occurs on a VC associated with a particular group, the + cluster member initiates revalidation procedures for that specific + group. If a jump is detected in the Cluster Sequence Number, this + initiates revalidation of all groups to which the cluster member + currently has open point to multipoint VCs. + + Each open and active multipoint VC has a flag associated with it + called 'VC_revalidate'. This flag is checked everytime a packet is + queued for transmission on that VC. If the flag is false, the packet + is transmitted and no further action is required. + + However, if the VC_revalidate flag is true then the packet is + transmitted and a new sequence of events is started locally. + + Revalidation begins with re-issuing a MARS_REQUEST for the group + being revalidated. The returned set of members {NewATM.1, NewATM.2, + .... NewATM.n} is compared with the set already held locally. + L_MULTI_DROPs are issued on the group's VC for each node that appears + in the original set of members but not in the revalidated set of + members. L_MULTI_ADDs are issued on the group's VC for each node that + appears in the revalidated set of members but not in the original set + of members. The VC_revalidate flag is reset when revalidation + concludes for the given group. Implementation specific mechanisms + will be needed to flag the 'revalidation in progress' state. + + The key difference between constructing a VC (section 5.1.3) and + revalidating a VC is that packet transmission continues on the open + VC while it is being revalidated. This minimises the disruption to + existing traffic. + + The algorithm for initiating revalidation is: + + - When a packet arrives for transmission on a given group, + the groups membership is revalidated if VC_revalidate == TRUE. + Revalidation resets VC_revalidate. + - When an event occurs that demands revalidation, every + group has its VC_revalidate flag set TRUE at a random time + between 1 and 10 seconds. + + Benefit: Revalidation of active groups occurs quickly, and + essentially idle groups are revalidated as needed. Randomly + distributed setting of VC_revalidate flag improves chances of + + + +Armitage Standards Track [Page 26] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + staggered revalidation requests from senders when a sequence number + jump is detected. + +5.1.5.1 When leaf node drops itself. + + During the life of a multipoint VC an ERR_L_DROP may be received + indicating that a leaf node has terminated its participation at the + ATM level. The ATM endpoint associated with the ERR_L_DROP MUST be + removed from the locally held set {ATM.1, ATM.2, .... ATM.n} + associated with the VC. + + After a random period of time between 1 and 10 seconds the + VC_revalidate flag associated with that VC MUST be set true. + + If an ERR_L_RELEASE is received then the entire set {ATM.1, ATM.2, + .... ATM.n} is cleared and the VC is considered to be completely shut + down. Further packet transmission to the group served by this VC will + result in a new VC being established as described in section 5.1.3. + +5.1.5.2 When a jump is detected in the CSN. + + Section 5.1.4.2 describes how a CSN jump is detected. If a CSN jump + is detected upon receipt of a MARS_JOIN or a MARS_LEAVE then every + outgoing multicast VC MUST have its VC_revalidate flag set true at + some random interval between 1 and 10 seconds from when the CSN jump + was detected. + + The only exception to this rule is if a sequence number jump is + detected during the establishment of a new group's VC (i.e. a + MARS_MULTI reply was correctly received, but its mar$msn indicated + that some previous MARS traffic had been missed on ClusterControlVC). + In this case every open VC, EXCEPT the one just established, MUST + have its VC_revalidate flag set true at some random interval between + 1 and 10 seconds from when the CSN jump was detected. (The VC being + established at the time is considered already validated.) + +5.1.6 'Migrating' the outgoing multipoint VC + + In addition to the group tracking described in section 5.1.4, the + transmit side of a cluster member must respond to 'migration' + requests by the MARS. This is triggered by the reception of a + MARS_MIGRATE message from ClusterControlVC. The MARS_MIGRATE message + is shown below, with an mar$op code of 13. + + Data: + mar$afn 16 bits Address Family (0x000F). + mar$pro 56 bits Protocol Identification. + mar$hdrrsv 24 bits Reserved. Unused by MARS control protocol. + + + +Armitage Standards Track [Page 27] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + mar$chksum 16 bits Checksum across entire MARS message. + mar$extoff 16 bits Extensions Offset. + mar$op 16 bits Operation code (MARS_MIGRATE = 13). + mar$shtl 8 bits Type & length of source ATM number. (r) + mar$sstl 8 bits Type & length of source ATM subaddress. (q) + mar$spln 8 bits Length of source protocol address (s) + mar$thtl 8 bits Type & length of target ATM number (x) + mar$tstl 8 bits Type & length of target ATM subaddress (y) + mar$tpln 8 bits Length of target group address (z) + mar$tnum 16 bits Number of target ATM addresses returned (N) + mar$resv 16 bits Reserved. + mar$msn 32 bits MARS Sequence Number. + mar$sha roctets source ATM number + mar$ssa qoctets source ATM subaddress + mar$spa soctets source protocol address + mar$tpa zoctets target multicast group address + mar$tha.1 xoctets target ATM number 1 + mar$tsa.1 yoctets target ATM subaddress 1 + mar$tha.2 xoctets target ATM number 2 + mar$tsa.2 yoctets target ATM subaddress 2 + [.......] + mar$tha.N xoctets target ATM number N + mar$tsa.N yoctets target ATM subaddress N + + A migration is requested when the MARS determines that it no longer + wants cluster members forwarding their packets directly to the ATM + addresses it had previously specified (through MARS_REQUESTs or + MARS_JOINs). When a MARS_MIGRATE is received each cluster member MUST + perform the following steps: + + Close down any existing outgoing VC associated with the group + carried in the mar$tpa field (L_RELEASE), or dissociate the group + from any outgoing VC it may have been sharing (as described in + section 5.1.3). + + Establish a new outgoing VC for the specified group, using the + algorithm described in section 5.1.3 and taking the set of ATM + addresses supplied in the MARS_MIGRATE as the group's new set of + members {ATM.1, .... ATM.n}. + + The MARS_MIGRATE carries the new set of members {ATM.1, .... ATM.n} + in a single message, in similar manner to a single part MARS_MULTI. + As with other messages from the MARS, the Cluster Sequence Number + carried in mar$msn is checked as described in section 5.1.4.2. + + + + + + + +Armitage Standards Track [Page 28] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +5.2. Receive side behaviour. + + A cluster member is a 'group member' (in the sense that it receives + packets directed at a given multicast group) when its ATM address + appears in the MARS's table entry for the group's multicast address. + A key function within each cluster is the distribution of group + membership information from the MARS to cluster members. + + An endpoint may wish to 'join a group' in response to a local, higher + level request for membership of a group, or because the endpoint + supports a layer 3 multicast forwarding engine that requires the + ability to 'see' intra-cluster traffic in order to forward it. + + Two messages support these requirements - MARS_JOIN and MARS_LEAVE. + These are sent to the MARS by endpoints when the local layer 3/ATM + interface is requested to join or leave a multicast group. The MARS + propagates these messages back out over ClusterControlVC, to ensure + the knowledge of the group's membership change is distributed in a + timely fashion to other cluster members. + + Certain models of layer 3 endpoints (e.g. IP multicast routers) + expect to be able to receive packet traffic 'promiscuously' across + all groups. This functionality may be emulated by allowing routers + to request that the MARS returns them as 'wild card' members of all + Class D addresses. However, a problem inherent in the current ATM + model is that a completely promiscuous router may exhaust the local + reassembly resources in its ATM interface. MARS_JOIN supports a + generalisation to the notion of 'wild card' entries, enabling routers + to limit themselves to 'blocks' of the Class D address space. Use of + this facility is described in greater detail in Section 8. + + A block can be as small as 1 (a single group) or as large as the + entire multicast address space (e.g. default IPv4 'promiscuous' + behaviour). A block is defined as all addresses between, and + inclusive of, a <min,max> address pair. A MARS_JOIN or MARS_LEAVE may + carry multiple <min,max> pairs. + + Cluster members MUST provide ONLY a single <min,max> pair in each + JOIN/LEAVE message they issue. However, they MUST be able to process + multiple <min,max> pairs in JOIN/LEAVE messages when performing VC + management as described in section 5.1.4 (the interpretation being + that the join/leave operation applies to all addresses in the range + from <min> to <max> inclusive, for every <min,max> pair). + + In RFC1112 environments a MARS_JOIN for a single group is triggered + by a JoinLocalGroup signal from the IP layer. A MARS_LEAVE for a + single group is triggered by a LeaveLocalGroup signal from the IP + layer. + + + +Armitage Standards Track [Page 29] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Cluster members with special requirements (e.g. multicast routers) + may issue MARS_JOINs and MARS_LEAVEs specifying a single block of 2 + or more multicast group addresses. However, a cluster member SHALL + NOT issue such a multi-group block join for an address range fully or + partially overlapped by multi-group block join(s) that the cluster + member has previously issued and not yet retracted. A cluster member + MAY issue combinations of single group MARS_JOINs that overlap with a + multi-group block MARS_JOIN. + + An endpoint MUST register with a MARS in order to become a member of + a cluster and be added as a leaf to ClusterControlVC. Registration + is covered in section 5.2.3. + + Finally, the endpoint MUST be capable of terminating unidirectional + VCs (i.e. act as a leaf node of a UNI 3.0/3.1 point to multipoint VC, + with zero bandwidth assigned on the return path). RFC 1755 describes + the signalling information required to terminate VCs carrying + LLC/SNAP encapsulated traffic (discussed further in section 5.5). + +5.2.1 Format of the MARS_JOIN and MARS_LEAVE Messages. + + The MARS_JOIN message is indicated by an operation type value of 4. + MARS_LEAVE has the same format and operation type value of 5. The + message format is: + + Data: + mar$afn 16 bits Address Family (0x000F). + mar$pro 56 bits Protocol Identification. + mar$hdrrsv 24 bits Reserved. Unused by MARS control protocol. + mar$chksum 16 bits Checksum across entire MARS message. + mar$extoff 16 bits Extensions Offset. + mar$op 16 bits Operation code (MARS_JOIN or MARS_LEAVE). + mar$shtl 8 bits Type & length of source ATM number. (r) + mar$sstl 8 bits Type & length of source ATM subaddress. (q) + mar$spln 8 bits Length of source protocol address (s) + mar$tpln 8 bits Length of group address (z) + mar$pnum 16 bits Number of group address pairs (N) + mar$flags 16 bits layer3grp, copy, and register flags. + mar$cmi 16 bits Cluster Member ID + mar$msn 32 bits MARS Sequence Number. + mar$sha roctets source ATM number. + mar$ssa qoctets source ATM subaddress. + mar$spa soctets source protocol address + mar$min.1 zoctets Minimum multicast group address - pair.1 + mar$max.1 zoctets Maximum multicast group address - pair.1 + [.......] + mar$min.N zoctets Minimum multicast group address - pair.N + mar$max.N zoctets Maximum multicast group address - pair.N + + + +Armitage Standards Track [Page 30] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + mar$spln indicates the number of bytes in the source endpoint's + protocol address, and is interpreted in the context of the protocol + indicated by the mar$pro field. (e.g. in IPv4 environments mar$pro + will be 0x800, mar$spln is 4, and mar$tpln is 4.) + + The mar$flags field contains three flags: + + Bit 15 - mar$flags.layer3grp. + Bit 14 - mar$flags.copy. + Bit 13 - mar$flags.register. + Bit 12 - mar$flags.punched. + Bit 0-7 - mar$flags.sequence. + + Bits 8 to 11 are reserved and MUST be zero. + + mar$flags.sequence is set by cluster members, and MUST always be + passed on unmodified by the MARS when retransmitting MARS_JOIN or + MARS_LEAVE messages. It is source specific, and MUST be ignored by + other cluster members. Its use is described in section 5.2.2. + + mar$flags.punched MUST be zero when the MARS_JOIN or MARS_LEAVE is + transmitted to the MARS. Its use is described in section 5.2.2 and + section 6.2.4. + + mar$flags.copy MUST be set to 0 when the message is being sent from a + MARS client, and MUST be set to 1 when the message is being sent from + a MARS. (This flag is intended to support integrating the MARS + function with one of the MARS clients in your cluster. The + destination of an incoming MARS_JOIN can be determined from its + value.) + + mar$flags.layer3grp allows the MARS to provide the group membership + information described further in section 5.3. The rules for its use + are: + + mar$flags.layer3grp MUST be set when the cluster member is issuing + the MARS_JOIN as the result of a layer 3 multicast group being + explicitly joined. (e.g. as a result of a JoinHostGroup operation + in an RFC1112 compliant host). + + mar$flags.layer3grp MUST be reset in each MARS_JOIN if the + MARS_JOIN is simply the local ip/atm interface registering to + receive traffic on that group for its own reasons. + + mar$flags.layer3grp is ignored and MUST be treated as reset by the + MARS for any MARS_JOIN that specifies a block covering more than a + single group (e.g. a block join from a router ensuring their + forwarding engines 'see' all traffic). + + + +Armitage Standards Track [Page 31] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + mar$flags.register indicates whether the MARS_JOIN or MARS_LEAVE is + being used to register or deregister a cluster member (described in + section 5.2.3). When used to join or leave specific groups the + mar$register flag MUST be zero. + + mar$pnum indicates how many <min,max> pairs are included in the + message. This field MUST be 1 when the message is sent from a cluster + member. A MARS MAY return a MARS_JOIN or MARS_LEAVE with any mar$pnum + value, including zero. This will be explained futher in section + 6.2.4. + + The mar$cmi field MUST be zeroed by cluster members, and is used by + the MARS during cluster member registration, described in section + 5.2.3. + + mar$msn MUST be zero when transmitted by an endpoint. It is set to + the current value of the Cluster Sequence Number by the MARS when the + MARS_JOIN or MARS_LEAVE is retransmitted. Its use has been described + in section 5.1.4. + + To simplify construction and parsing of MARS_JOIN and MARS_LEAVE + messages, the following restrictions are imposed on the <min,max> + pairs: + + Assume max(N) is the <max> field from the Nth <min,max> pair. + Assume min(N) is the <min> field from the Nth <min,max> pair. + Assume a join/leave message arrives with K <min,max> pairs. + The following must hold: + max(N) < min(N+1) for 1 <= N < K + max(N) >= min(N) for 1 <= N <= K + + In plain language, the set must specify an ascending sequence of + address blocks. The definition of "greater" or "less than" may be + protocol specific. In IPv4 environments the addresses are treated as + 32 bit, unsigned binary values (most significant byte first). + +5.2.1.1 Important IPv4 default values. + + The JoinLocalGroup and LeaveLocalGroup operations are only valid for + a single group. For any arbitrary group address X the associated + MARS_JOIN or MARS_LEAVE MUST specify a single pair <X, X>. + mar$flags.layer3grp MUST be set under these circumstances. + + A router choosing to behave strictly in accordance with RFC1112 MUST + specify the entire Class D space. The associated MARS_JOIN or + MARS_LEAVE MUST specify a single pair <224.0.0.0, 239.255.255.255>. + Whenever a router issues a MARS_JOIN only in order to forward IP + traffic it MUST reset mar$flags.layer3grp. + + + +Armitage Standards Track [Page 32] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The use of alternative <min, max> values by multicast routers is + discussed in Section 8. + +5.2.2 Retransmission of MARS_JOIN and MARS_LEAVE messages. + + Transient problems may result in the loss of messages between the + MARS and cluster members + + A simple algorithm is used to solve this problem. Cluster members + retransmit each MARS_JOIN and MARS_LEAVE message at regular intervals + until they receive a copy back again, either on ClusterControlVC or + the VC on which they are sending the message. At this point the + local endpoint can be certain that the MARS received and processed + it. + + The interval should be no shorter than 5 seconds, and a default value + of 10 seconds is recommended. After 5 retransmissions the attempt + should be flagged locally as a failure. This MUST be considered as a + MARS failure, and triggers the MARS reconnection described in section + 5.4. + + A 'copy' is defined as a received message with the following fields + matching a previously transmitted MARS_JOIN/LEAVE: + + - mar$op + - mar$flags.register + - mar$flags.sequence + - mar$pnum + - Source ATM address + - First <min,max> pair + + In addition, a valid copy MUST have the following field values: + + - mar$flags.punched = 0 + - mar$flags.copy = 1 + + The mar$flags.sequence field is never modified or checked by a MARS. + Implementors MAY choose to utilize locally significant sequence + number schemes, which MAY differ from one cluster member to the next. + In the absence of such schemes the default value for + mar$flags.sequence MUST be zero. + + Careful implementations MAY have more than one unacknowledged + MARS_JOIN/LEAVE outstanding at a time. + + + + + + + +Armitage Standards Track [Page 33] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +5.2.3 Cluster member registration and deregistration. + + To become a cluster member an endpoint must register with the MARS. + This achieves two things - the endpoint is added as a leaf node of + ClusterControlVC, and the endpoint is assigned a 16 bit Cluster + Member Identifier (CMI). The CMI uniquely identifies each endpoint + that is attached to the cluster. + + Registration with the MARS occurs when an endpoint issues a MARS_JOIN + with the mar$flags.register flag set to one (bit 13 of the mar$flags + field). + + The cluster member MUST include its source ATM address, and MAY + choose to specify a null source protocol address when registering. + + No protocol specific group addresses are included in a registration + MARS_JOIN. + + The cluster member retransmits this MARS_JOIN in accordance with + section 5.2.2 until it confirms that the MARS has received it. + + When the registration MARS_JOIN is returned it contains a non-zero + value in mar$cmi. This value MUST be noted by the cluster member, and + used whenever circumstances require the cluster member's CMI. + + An endpoint may also choose to de-register, using a MARS_LEAVE with + mar$flags.register set. This would result in the MARS dropping the + endpoint from ClusterControlVC, removing all references to the member + in the mapping database, and freeing up its CMI. + + As for registration, a deregistration request MUST include the + correct source ATM address for the cluster member, but MAY choose to + specify a null source protocol address. + + The cluster member retransmits this MARS_LEAVE in accordance with + section 5.2.2 until it confirms that the MARS has received it. + +5.3 Support for Layer 3 group management. + + Whilst the intention of this specification is to be independent of + layer 3 issues, an attempt is being made to assist the operation of + layer 3 multicast routing protocols that need to ascertain if any + groups have members within a cluster. + + One example is IP, where IGMP is used (as described in section 2) + simply to determine whether any other cluster members are listening + to a group because they have higher layer applications that want to + receive a group's traffic. + + + +Armitage Standards Track [Page 34] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Routers may choose to query the MARS for this information, rather + than multicasting IGMP queries to 224.0.0.1 and incurring the + associated cost of setting up a VC to all systems in the cluster. + + The query is issued by sending a MARS_GROUPLIST_REQUEST to the MARS. + MARS_GROUPLIST_REQUEST is built from a MARS_JOIN, but it has an + operation code of 10. The first <min,max> pair will be used by the + MARS to identify the range of groups in which the querying cluster + member is interested. Any additional <min,max> pairs will be ignored. + A request with mar$pnum = 0 will be ignored. + + The response from the MARS is a MARS_GROUPLIST_REPLY, carrying a list + of the multicast groups within the specified <min,max> block that + have Layer 3 members. A group is noted in this list if one or more + of the MARS_JOINs that generated its mapping entry in the MARS + contained a set mar$flags.layer3grp flag. + + MARS_GROUPLIST_REPLYs are transmitted back to the querying cluster + member on the VC used to send the MARS_GROUPLIST_REQUEST. + + MARS_GROUPLIST_REPLY is derived from the MARS_MULTI but with mar$op = + 11. It may have multiple parts if needed, and is received in a + similar manner to a MARS_MULTI. + + Data: + mar$afn 16 bits Address Family (0x000F). + mar$pro 56 bits Protocol Identification. + mar$hdrrsv 24 bits Reserved. Unused by MARS control protocol. + mar$chksum 16 bits Checksum across entire MARS message. + mar$extoff 16 bits Extensions Offset. + mar$op 16 bits Operation code (MARS_GROUPLIST_REPLY). + mar$shtl 8 bits Type & length of source ATM number. (r) + mar$sstl 8 bits Type & length of source ATM subaddress. (q) + mar$spln 8 bits Length of source protocol address (s) + mar$thtl 8 bits Unused - set to zero. + mar$tstl 8 bits Unused - set to zero. + mar$tpln 8 bits Length of target group address (z) + mar$tnum 16 bits Number of group addresses returned (N). + mar$seqxy 16 bits Boolean flag x and sequence number y. + mar$msn 32 bits MARS Sequence Number. + mar$sha roctets source ATM number. + mar$ssa qoctets source ATM subaddress. + mar$spa soctets source protocol address + mar$mgrp.1 zoctets Group address 1 + [.......] + mar$mgrp.N zoctets Group address N + + mar$seqxy is coded as for the MARS_MULTI - multiple + + + +Armitage Standards Track [Page 35] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + MARS_GROUPLIST_REPLY components are transmitted and received using + the same algorithm as described in section 5.1.1 for MARS_MULTI. The + only difference is that protocol addresses are being returned rather + than ATM addresses. + + As for MARS_MULTIs, if an error occurs in the reception of a multi + part MARS_GROUPLIST_REPLY the whole thing MUST be discarded and the + MARS_GROUPLIST_REQUEST re-issued. (This includes the mar$msn value + being constant.) + + Note that the ability to generate MARS_GROUPLIST_REQUEST messages, + and receive MARS_GROUPLIST_REPLY messages, is not required for + general host interface implementations. It is optional for interfaces + being implemented to support layer 3 multicast forwarding engines. + However, this functionality MUST be supported by the MARS. + +5.4 Support for redundant/backup MARS entities. + + Endpoints are assumed to have been configured with the ATM address of + at least one MARS. Endpoints MAY choose to maintain a table of ATM + addresses, representing alternative MARSs that will be contacted in + the event that normal operation with the original MARS is deemed to + have failed. It is assumed that this table orders the ATM addresses + in descending order of preference. + + An endpoint will typically decide there are problems with the MARS + when: + + - It fails to establish a point to point VC to the MARS. + - MARS_REQUESTs fail (section 5.1.1). + - MARS_JOIN/MARS_LEAVEs fail (section 5.2.2). + - It has not received a MARS_REDIRECT_MAP in the last 4 minutes + (section 5.4.3). + + (If it is able to discern which connection represents + ClusterControlVC, it may also use connection failures on this VC to + indicate problems with the MARS). + +5.4.1 First response to MARS problems. + + The first response is to assume a transient problem with the MARS + being used at the time. The cluster member should wait a random + period of time between 1 and 10 seconds before attempting to re- + connect and re-register with the MARS. If the registration MARS_JOIN + is successful then: + + The cluster member MUST then proceed to rejoin every group that + its local higher layer protocol(s) have joined. It is + + + +Armitage Standards Track [Page 36] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + recommended that a random delay between 1 and 10 seconds be + inserted before attempting each MARS_JOIN. + + The cluster member MUST initiate the revalidation of every + multicast group it was sending to (as though a sequence number + jump had been detected, section 5.1.5). + + The rejoin and revalidation procedure must not disrupt the + cluster member's use of multipoint VCs that were already open at + the time of the MARS failure. + + If re-registration with the current MARS fails, and there are no + backup MARS addresses configured, the cluster member MUST wait for at + least 1 minute before repeating the re-registration procedure. It is + RECOMMENDED that the cluster member signals an error condition in + some locally significant fashion. + + This procedure may repeat until network administrators manually + intervene or the current MARS returns to normal operation. + +5.4.2 Connecting to a backup MARS. + + If the re-registration with the current MARS fails, and other MARS + addresses have been configured, the next MARS address on the list is + chosen to be the current MARS, and the cluster member immediately + restarts the re-registration procedure described in section 5.4.1. If + this is succesful the cluster member will resume normal operation + using the new MARS. It is RECOMMENDED that the cluster member signals + a warning of this condition in some locally significant fashion. + + If the attempt at re-registration with the new MARS fails, the + cluster member MUST wait for at least 1 minute before choosing the + next MARS address in the table and repeating the procedure. If the + end of the table has been reached, the cluster member starts again at + the top of the table (which should be the original MARS that the + cluster member started with). + + In the worst case scenario this will result in cluster members + looping through their table of possible MARS addresses until network + administrators manually intervene. + +5.4.3 Dynamic backup lists, and soft redirects. + + To support some level of autoconfiguration, a MARS message is defined + that allows the current MARS to broadcast on ClusterControlVC a table + of backup MARS addresses. When this message is received, cluster + members that maintain a list of backup MARS addresses MUST insert + this information at the top of their locally held list (i.e. the + + + +Armitage Standards Track [Page 37] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + information provided by the MARS has a higher preference than + addresses that may have been manually configured into the cluster + member). + + The message is MARS_REDIRECT_MAP. It is based on the MARS_MULTI + message, with the following changes: + + - mar$tpln field replaced by mar$redirf. + - mar$spln field reserved. + - mar$tpa and mar$spa eliminated. + + MARS_REDIRECT_MAP has an operation type code of 12 decimal. + + Data: + mar$afn 16 bits Address Family (0x000F). + mar$pro 56 bits Protocol Identification. + mar$hdrrsv 24 bits Reserved. Unused by MARS control protocol. + mar$chksum 16 bits Checksum across entire MARS message. + mar$extoff 16 bits Extensions Offset. + mar$op 16 bits Operation code (MARS_REDIRECT_MAP). + mar$shtl 8 bits Type & length of source ATM number. (r) + mar$sstl 8 bits Type & length of source ATM subaddress. (q) + mar$spln 8 bits Length of source protocol address (s) + mar$thtl 8 bits Type & length of target ATM number (x) + mar$tstl 8 bits Type & length of target ATM subaddress (y) + mar$redirf 8 bits Flag controlling client redirect behaviour. + mar$tnum 16 bits Number of MARS addresses returned (N). + mar$seqxy 16 bits Boolean flag x and sequence number y. + mar$msn 32 bits MARS Sequence Number. + mar$sha roctets source ATM number + mar$ssa qoctets source ATM subaddress + mar$tha.1 xoctets ATM number for MARS 1 + mar$tsa.1 yoctets ATM subaddress for MARS 1 + mar$tha.2 xoctets ATM number for MARS 2 + mar$tsa.2 yoctets ATM subaddress for MARS 2 + [.......] + mar$tha.N xoctets ATM number for MARS N + mar$tsa.N yoctets ATM subaddress for MARS N + + The source ATM address field(s) MUST identify the originating MARS. + A multi-part MARS_REDIRECT_MAP may be transmitted and reassembled + using the mar$seqxy field in the same manner as a multi-part + MARS_MULTI (section 5.1.1). If a failure occurs during the reassembly + of a multi-part MARS_REDIRECT_MAP (a part lost, reassembly timeout, + or illegal MARS Sequence Number jump) the entire message MUST be + discarded. + + + + + +Armitage Standards Track [Page 38] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + This message is transmitted regularly by the MARS (it MUST be + transmitted at least every 2 minutes, it is RECOMMENDED that it is + transmitted every 1 minute). + + The MARS_REDIRECT_MAP is also used to force cluster members to shift + from one MARS to another. If the ATM address of the first MARS + contained in a MARS_REDIRECT_MAP table is not the address of cluster + member's current MARS the client MUST 'redirect' to the new MARS. The + mar$redirf field controls how the redirection occurs. + + mar$redirf has the following format: + + 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+ + |x| | + +-+-+-+-+-+-+-+-+ + + If Bit 7 (the most significant bit) of mar$redirf is 1 then the + cluster member MUST perform a 'hard' redirect. Having installed the + new table of MARS addresses carried by the MARS_REDIRECT_MAP, the + cluster member re-registers with the MARS now at the top of the table + using the mechanism described in sections 5.4.1 and 5.4.2. + + If Bit 7 of mar$redirf is 0 then the cluster member MUST perform a + 'soft' redirect, beginning with the following actions: + + - open a point to point VC to the first ATM address. + - attempt a registration (section 5.2.3). + + If the registration succeeds, the cluster member shuts down its point + to point VC to the current MARS (if it had one open), and then + proceeds to use the newly opened point to point VC as its connection + to the 'current MARS'. The cluster member does NOT attempt to rejoin + the groups it is a member of, or revalidate groups it is currently + sending to. + + This is termed a 'soft redirect' because it avoids the extra + rejoining and revalidation processing that occurs when a MARS failure + is being recovered from. It assumes some external synchronisation + mechanisms exist between the old and new MARS - mechanisms that are + outside the scope of this specification. + + Some level of trust is required before initiating a soft redirect. A + cluster member MUST check that the calling party at the other end of + the VC on which the MARS_REDIRECT_MAP arrived (supposedly + ClusterControlVC) is in fact the node it trusts as the current MARS. + + Additional applications of this function are for further study. + + + +Armitage Standards Track [Page 39] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +5.5 Data path LLC/SNAP encapsulations. + + An extended encapsulation scheme is required to support the filtering + of possible reflected packets (section 3.3). + + Two LLC/SNAP codepoints are allocated from the IANA OUI space. These + support two different mechanisms for detecting reflected packets. + They are called Type #1 and Type #2 multicast encapsulations. + + Type #1 + + [0xAA-AA-03][0x00-00-5E][0x00-01][Type #1 Extended Layer 3 packet] + LLC OUI PID + + Type #2 + + [0xAA-AA-03][0x00-00-5E][0x00-04][Type #2 Extended Layer 3 packet] + LLC OUI PID + + For conformance with this document MARS clients: + + MUST transmit data using Type #1 encapsulation. + + MUST be able to correctly receive traffic using Type #1 OR Type #2 + encapsulation. + + MUST NOT transmit using Type #2 encapsulation. + +5.5.1 Type #1 encapsulation. + + The Type #1 Extended layer 3 packet carries within it a copy of the + source's Cluster Member ID (CMI) and either the 'short form' or 'long + form' of the protocol type as appropriate (section 4.3). + + When carrying packets belonging to protocols with valid short form + representations the [Type #1 Extended Layer 3 packet] is encoded as: + + [pkt$cmi][pkt$pro][Original Layer 3 packet] + 2octet 2octet N octet + + The first 2 octets (pkt$cmi) carry the CMI assigned when an endpoint + registers with the MARS (section 5.2.3). The second 2 octets + (pkt$pro) indicate the protocol type of the packet carried in the + remainder of the payload. This is copied from the mar$pro field used + in the MARS control messages. + + When carrying packets belonging to protocols that only have a long + form representation (pkt$pro = 0x80) the overhead SHALL be further + + + +Armitage Standards Track [Page 40] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + extended to carry the 5 byte mar$pro.snap field (with padding for 32 + bit alignment). The encoded form SHALL be: + + [pkt$cmi][0x00-80][mar$pro.snap][padding][Original Layer 3 packet] + 2octet 2octet 5 octets 3 octets N octet + + + The CMI is copied into the pkt$cmi field of every outgoing Type #1 + packet. When an endpoint interface receives an AAL_SDU with the + LLC/SNAP codepoint indicating Type #1 encapsulation it compares the + CMI field with its own Cluster Member ID for the indicated protocol. + The packet is discarded silently if they match. Otherwise the packet + is accepted for processing by the local protocol entity identified by + the pkt$pro (and possibly SNAP) field(s). + + Where a protocol has valid short and long forms of identification, + receivers MAY choose to additionally recognise the long form. + +5.5.2 Type #2 encapsulation. + + Future developments may enable direct multicasting of AAL_SDUs beyond + cluster boundaries. Expanding the set of possible sources in this way + may cause the CMI to become an inadequate parameter with which to + detect reflected packets. A larger source identification field may + be required. + + The Type #2 Extended layer 3 packet carries within it an 8 octet + source ID field and either the 'short form' or 'long form' of the + protocol type as appropriate (section 4.3). The form and content of + the source ID field is currently unspecified, and is not relevant to + any MARS client built in conformance with this document. Received + Type #2 encapsulated packets MUST always be accepted and passed up to + the higher layer indicated by the protocol identifier. + + When carrying packets belonging to protocols with valid short form + representations the [Type #2 Extended Layer 3 packet] is encoded as: + + [8 octet sourceID][mar$pro.type][Null pad][Original Layer 3 + packet] + 2octets 2octets + + When carrying packets belonging to protocols that only have a long + form representation (pkt$pro = 0x80) the overhead SHALL be further + extended to carry the 5 byte mar$pro.snap field (with padding for 32 + bit alignment). The encoded form SHALL be: + + [8 octet sourceID][mar$pro.type][mar$pro.snap][Null pad][Layer 3 + packet] + + + +Armitage Standards Track [Page 41] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + 2octets 5octets 1octet + + (Note that in this case the padding after the SNAP field is 1 octet + rather than the 3 octets used in Type #1.) + + Where a protocol has valid short and long forms of identification, + receivers MAY choose to additionally recognise the long form. + + (Future documents may specify the contents of the source ID field. + This will only be relevant to implementations sending Type #2 + encapsulated packets, as they are the only entities that need to be + concerned about detecting reflected Type #2 packets.) + +5.5.3 A Type #1 example. + + An IPv4 packet (fully identified by an Ethertype of 0x800, therefore + requiring 'short form' protocol type encoding) would be transmitted + as: + + [0xAA-AA-03][0x00-00-5E][0x00-01][pkt$cmi][0x800][IPv4 packet] + + The different LLC/SNAP codepoints for unicast and multicast packet + transmission allows a single IPv4/ATM interface to support both by + demuxing on the LLC/SNAP header. + +6. The MARS in greater detail. + + Section 5 implies a lot about the MARS's basic behaviour as observed + by cluster members. This section summarises the behaviour of the MARS + for groups that are VC mesh based, and describes how a MARSs + behaviour changes when an MCS is registered to support a group. + + The MARS is intended to be a multiprotocol entity - all its mapping + tables, CMIs, and control VCs MUST be managed within the context of + the mar$pro field in incoming MARS messages. For example, a MARS + supports completely separate ClusterControlVCs for each layer 3 + protocol that it is registering members for. If a MARS receives + messages with a mar$pro that it does not support, the message is + dropped. + + In general the MARS treats protocol addresses as arbitrary byte + strings. For example, the MARS will not apply IPv4 specific 'class' + checks to addresses supplied under mar$pro = 0x800. It is sufficient + for the MARS to simply assume that endpoints know how to interpret + the protocol addresses that they are establishing and releasing + mappings for. + + + + + +Armitage Standards Track [Page 42] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The MARS requires control messages to carry the originator's identity + in the source ATM address field(s). Messages that arrive with an + empty ATM Number field are silently discarded prior to any other + processing by the MARS. (Only the ATM Number field needs to be + checked. An empty ATM Number field combined with a non-empty ATM + Subaddress field does not represent a valid ATM address.) + + (Some example pseudo-code for a MARS can be found in Appendix F.) + +6.1 Basic interface to Cluster members. + + The following MARS messages are used or required by cluster members: + + 1 MARS_REQUEST + 2 MARS_MULTI + 4 MARS_JOIN + 5 MARS_LEAVE + 6 MARS_NAK + 10 MARS_GROUPLIST_REQUEST + 11 MARS_GROUPLIST_REPLY + 12 MARS_REDIRECT_MAP + +6.1.1 Response to MARS_REQUEST. + + Except as described in section 6.2, if a MARS_REQUEST arrives whose + source ATM address does not match that of any registered Cluster + member the message MUST be dropped and ignored. + +6.1.2 Response to MARS_JOIN and MARS_LEAVE. + + When a registration MARS_JOIN arrives (described in section 5.2.3) + the MARS performs the following actions: + + - Adds the node to ClusterControlVC. + - Allocates a new Cluster Member ID (CMI). + - Inserts the new CMI into the mar$cmi field of the MARS_JOIN. + - Retransmits the MARS_JOIN back privately. + + If the node is already a registered member of the cluster associated + with the specified protocol type then its existing CMI is simply + copied into the MARS_JOIN, and the MARS_JOIN retransmitted back to + the node. A single node may register multiple times if it supports + multiple layer 3 protocols. The CMIs allocated by the MARS for each + such registration may or may not be the same. + + The retransmitted registration MARS_JOIN must NOT be sent on + ClusterControlVC. If a cluster member issues a deregistration + MARS_LEAVE it too is retransmitted privately. + + + +Armitage Standards Track [Page 43] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Non-registration MARS_JOIN and MARS_LEAVE messages are ignored if + they arrive from a node that is not registered as a cluster member. + + MARS_JOIN or MARS_LEAVE messages MUST arrive at the MARS with + mar$flags.copy set to 0, otherwise the message is silently ignored. + + All outgoing MARS_JOIN or MARS_LEAVE messages SHALL have + mar$flags.copy set to 1, and mar$msn set to the current Cluster + Sequence Number for ClusterControlVC (Section 5.1.4.2). + + mar$flags.layer3grp (section 5.3) MUST be treated as reset for + MARS_JOINs specifying a single <min,max> pair covering more than a + single group. If a MARS_JOIN/LEAVE is received that contains more + than one <min,max> pair, the MARS MUST silently drop the message. + + If one or more MCSs have registered with the MARS, message processing + continues as described in section 6.2.4. + + The MARS database is updated to add the node to any indicated + group(s) that it was not already considered a member of, and message + processing continues as follows: + + If a single group was being joined or left: + + mar$flags.punched is set to 0. + + If the joining (leaving) node was already (is still) considered a + member of the specified group, the message is retransmitted + privately back to the cluster member. Otherwise the message is + retransmitted on ClusterControlVC. + + If a single block covering 2 or more groups was being joined or left: + + A copy of the original MARS_JOIN/LEAVE is made. This copy then has + its <min,max> block replaced with a 'hole punched' set of zero or + more <min,max> pairs. The 'hole punched' set of <min,max> pairs + covers the entire address range specified by the original + <min,max> pair, but excludes those addresses/groups which the + joining (leaving) node is already (still) a member of due to a + previous single group join. + + If no 'holes' were punched in the specified block, the original + MARS_JOIN/LEAVE is retransmitted out on ClusterControlVC. + Otherwise the following occurs: + + The original MARS_JOIN/LEAVE is transmitted back to the source + cluster member unchanged, using the VC it arrived on. The + mar$flags.punched field MUST be reset to 0 in this message. + + + +Armitage Standards Track [Page 44] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + If the hole-punched set contains 1 or more <min,max> pair, the + copy of the original MARS_JOIN/LEAVE is transmitted on + ClusterControlVC, carrying the new <min,max> list. The + mar$flags.punched field MUST be set to 1 in this message. (The + mar$flags.punched field is set to ensure the hole-punched copy + is ignored by the message's source when trying to match + received MARS_JOIN/LEAVE messages with ones previously sent + (section 5.2.2)). + + If the MARS receives a deregistration MARS_LEAVE (described in + section 5.2.3) that member's ATM address MUST be removed from all + groups for which it may have joined, dropped from ClusterControlVC, + and the CMI released. + + If the MARS receives an ERR_L_RELEASE on ClusterControlVC indicating + that a cluster member has disconnected, that member's ATM address + MUST be removed from all groups for which it may have joined, and the + CMI released. + +6.1.3 Generating MARS_REDIRECT_MAP. + + A MARS_REDIRECT_MAP message (described in section 5.4.3) MUST be + regularly transmitted on ClusterControlVC. It is RECOMMENDED that + this occur every 1 minute, and it MUST occur at least every 2 + minutes. If the MARS has no knowledge of other backup MARSs serving + the cluster, it MUST include its own address as the only entry in the + MARS_REDIRECT_MAP message (in addition to filling in the source + address fields). + + The design and use of backup MARS entities is beyond the scope of + this document, and will be covered in future work. + +6.1.4 Cluster Sequence Numbers. + + The Cluster Sequence Number (CSN) is described in section 5.1.4, and + is carried in the mar$msn field of MARS messages being sent to + cluster members (either out ClusterControlVC or on an individual VC). + The MARS increments the CSN after every transmission of a message on + ClusterControlVC. The current CSN is copied into the mar$msn field + of MARS messages being sent to cluster members, whether out + ClusterControlVC or on a private VC. + + A MARS should be carefully designed to minimise the possibility of + the CSN jumping unnecessarily. Under normal operation only cluster + members affected by transient link problems will miss CSN updates and + be forced to revalidate. If the MARS itself glitches, it will be + innundated with requests for a period as every cluster member + attempts to revalidate. + + + +Armitage Standards Track [Page 45] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Calculations on the CSN MUST be performed as unsigned 32 bit + arithmetic. + + One implication of this mechanism is that the MARS should serialize + its processing of 'simultaneous' MARS_REQUEST, MARS_JOIN and + MARS_LEAVE messages. Join and Leave operations should be queued + within the MARS along with MARS_REQUESTS, and not processed until all + the reply packets of a preceeding MARS_REQUEST have been transmitted. + The transmission of MARS_REDIRECT_MAP should also be similarly + queued. + + (The regular transmission of MARS_REDIRECT_MAP serves a secondary + purpose of allowing cluster members to track the CSN, even if they + miss an earlier MARS_JOIN or MARS_LEAVE.) + +6.2 MARS interface to Multicast Servers (MCS). + + When the MARS returns the actual addresses of group members, the + endpoint behaviour described in section 5 results in all groups being + supported by meshes of point to multipoint VCs. However, when MCSs + register to support particular layer 3 multicast groups the MARS + modifies its use of various MARS messages to fool endpoints into + using the MCS instead. + + The following MARS messages are associated with interaction between + the MARS and MCSs. + + 3 MARS_MSERV + 7 MARS_UNSERV + 8 MARS_SJOIN + 9 MARS_SLEAVE + + The following MARS messages are treated in a slightly different + manner when MCSs have registered to support certain group addresses: + + 1 MARS_REQUEST + 4 MARS_JOIN + 5 MARS_LEAVE + + A MARS must keep two sets of mappings for each layer 3 group using + MCS support. The original {layer 3 address, ATM.1, ATM.2, ... ATM.n} + mapping (now termed the 'host map', although it includes routers) is + augmented by a parallel {layer 3 address, server.1, server.2, .... + server.K} mapping (the 'server map'). It is assumed that no ATM + addresses appear in both the server and host maps for the same + multicast group. Typically K will be 1, but it will be larger if + multiple MCSs are configured to support a given group. + + + + +Armitage Standards Track [Page 46] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The MARS also maintains a point to multipoint VC out to any MCSs + registered with it, called ServerControlVC (section 6.2.3). This + serves an analogous role to ClusterControlVC, allowing the MARS to + update the MCSs with group membership changes as they occur. A MARS + MUST also send its regular MARS_REDIRECT_MAP transmissions on both + ServerControlVC and ClusterControlVC. + +6.2.1 Response to a MARS_REQUEST if MCS is registered. + + When the MARS receives a MARS_REQUEST for an address that has both + host and server maps it generates a response based on the identity of + the request's source. If the requestor is a member of the server map + for the requested group then the MARS returns the contents of the + host map in a sequence of one or more MARS_MULTIs. Otherwise, if the + source is a valid cluster member, the MARS returns the contents of + the server map in a sequence of one or more MARS_MULTIs. If the + source is neither a cluster member, nor a member of the server map + for the group, the request is dropped and ignored. + + Servers use the host map to establish a basic distribution VC for the + group. Cluster members will establish outgoing multipoint VCs to + members of the group's server map, without being aware that their + packets will not be going directly to the multicast group's members. + +6.2.2 MARS_MSERV and MARS_UNSERV messages. + + MARS_MSERV and MARS_UNSERV are identical to the MARS_JOIN message. + An MCS uses a MARS_MSERV with a <min,max> pair of <X,X> to specify + the multicast group X that it is willing to support. A single group + MARS_UNSERV indicates the group that the MCS is no longer willing to + support. The operation code for MARS_MSERV is 3 (decimal), and + MARS_UNSERV is 7 (decimal). + + Both of these messages are sent to the MARS over a point to point VC + (between MCS and MARS). After processing, they are retransmitted on + ServerControlVC to allow other MCSs to note the new node. + + When registering or deregistering support for specific groups the + mar$flags.register flag MUST be zero. (This flag is only one when the + MCS is registering as a member of ServerControlVC, as described in + section 6.2.3.) + + When an MCS issues a MARS_MSERV for a specific group the message MUST + be dropped and ignored if the source has not already registered with + the MARS as a multicast server (section 6.2.3). Otherwise, the MARS + adds the new ATM address to the server map for the specified group, + possibly constructing a new server map if this is the first MCS for + the group. + + + +Armitage Standards Track [Page 47] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + If a MARS_MSERV represents the first MCS to register for a particular + group, and there exists a non null host map serving that particular + group, the MARS issues a MARS_MIGRATE (section 5.1.6) on + ClusterControlVC. The MARS's own identity is placed in the source + protocol and hardware address fields of the MARS_MIGRATE. The ATM + address of the MCS is placed as the first and only target ATM + address. The address of the affected group is placed in the target + multicast group address field. + + If a MARS_MSERV is not the first MCS to register for a particular + group the MARS simply changes its operation code to MARS_JOIN, and + sends a copy of the message on ClusterControlVC. This fools the + cluster members into thinking a new leaf node has been added to the + group specified. In the retransmitted MARS_JOIN mar$flags.layer3grp + MUST be zero, mar$flags.copy MUST be one, and mar$flags.register MUST + be zero. + + When an MCS issues a MARS_UNSERV the MARS removes its ATM address + from the server maps for each specified group, deleting any server + maps that end up being null after the operation. + + The operation code is then changed to MARS_LEAVE and the MARS sends a + copy of the message on ClusterControlVC. This fools the cluster + members into thinking a leaf node has been dropped from the group + specified. In the retransmitted MARS_LEAVE mar$flags.layer3grp MUST + be zero, mar$flags.copy MUST be one, and mar$flags.register MUST be + zero. + + The MARS retransmits redundant MARS_MSERV and MARS_UNSERV messages + directly back to the MCS generating them. MARS_MIGRATE messages are + never repeated in response to redundant MARS_MSERVs. + + The last or only MCS for a group MAY choose to issue a MARS_UNSERV + while the group still has members. When the MARS_UNSERV is processed + by the MARS the 'server map' will be deleted. When the associated + MARS_LEAVE is issued on ClusterControlVC, all cluster members with a + VC open to the MCS for that group will close down the VC (in + accordance with section 5.1.4, since the MCS was their only leaf + node). When cluster members subsequently find they need to transmit + packets to the group, they will begin again with the + MARS_REQUEST/MARS_MULTI sequence to establish a new VC. Since the + MARS will have deleted the server map, this will result in the host + map being returned, and the group reverts to being supported by a VC + mesh. + + The reverse process is achieved through the MARS_MIGRATE message when + the first MCS registers to support a group. This ensures that + cluster members explicitly dismantle any VC mesh they may have had + + + +Armitage Standards Track [Page 48] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + up, and re-establish their multicast forwarding path with the MCS as + its termination point. + +6.2.3 Registering a Multicast Server (MCS). + + Section 5.2.3 describes how endpoints register as cluster members, + and hence get added as leaf nodes to ClusterControlVC. The same + approach is used to register endpoints that intend to provide MCS + support. + + Registration with the MARS occurs when an endpoint issues a + MARS_MSERV with mar$flags.register set to one. Upon registration the + endpoint is added as a leaf node to ServerControlVC, and the + MARS_MSERV is returned to the MCS privately. + + The MCS retransmits this MARS_MSERV until it confirms that the MARS + has received it (by receiving a copy back, in an analogous way to the + mechanism described in section 5.2.2 for reliably transmitting + MARS_JOINs). + + The mar$cmi field in MARS_MSERVs MUST be set to zero by both MCS and + MARS. + + An MCS may also choose to de-register, using a MARS_UNSERV with + mar$flags.register set to one. When this occurs the MARS MUST remove + all references to that MCS in all servermaps associated with the + protocol (mar$pro) specified in the MARS_UNSERV, and drop the MCS + from ServerControlVC. + + Note that multiple logical MCSs may share the same physical ATM + interface, provided that each MCS uses a separate ATM address (e.g. a + different SEL field in the NSAP format address). In fact, an MCS may + share the ATM interface of a node that is also a cluster member + (either host or router), provided each logical entity has a different + ATM address. + + A MARS MUST be capable of handling a multi-entry servermap. However, + the possible use of multiple MCSs registering to support the same + group is a subject for further study. In the absence of an MCS + synchronisation protocol a system administrator MUST NOT allow more + than one logical MCS to register for a given group. + +6.2.4 Modified response to MARS_JOIN and MARS_LEAVE. + + The existence of MCSs supporting some groups but not others requires + the MARS to modify its distribution of single and block join/leave + updates to cluster members. The MARS also adds two new messages - + MARS_SJOIN and MARS_SLEAVE - for communicating group changes to MCSs + + + +Armitage Standards Track [Page 49] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + over ServerControlVC. + + The MARS_SJOIN and MARS_SLEAVE messages are identical to MARS_JOIN, + with operation codes 18 and 19 (decimal) respectively. + + When a cluster member issues MARS_JOIN or MARS_LEAVE for a single + group, the MARS checks to see if the group has an associated server + map. If the specified group does not have a server map processing + continues as described in section 6.1.2. + + However, if a server map exists for the group a new set of actions + are taken. + + If the joining (leaving) node was not already (is no longer) + considered a member of the specified group, a copy of the + MARS_JOIN/LEAVE is made with type MARS_SJOIN or MARS_SLEAVE as + appropriate, and transmitted on ServerControlVC. This allows the + MCS(s) supporting the group to note the new member and update + their data VCs. + + The original message is transmitted back to the source cluster + member unchanged, using the VC it arrived on rather than + ClusterControlVC. The mar$flags.punched field MUST be reset to 0 + in this message. + + (Section 5.2.2 requires cluster members have a mechanism to confirm + the reception of their message by the MARS. For mesh supported + groups, using ClusterControlVC serves dual purpose of providing this + confirmation and distributing group update information. When a group + is MCS supported, there is no reason for all cluster members to + process null join/leave messages on ClusterControlVC, so they are + sent back on the private VC between cluster member and MARS.) + + Receipt of a block MARS_JOIN (e.g. from a router coming on-line) or + MARS_LEAVE requires a more complex response. The single <min,max> + block may simultaneously cover mesh supported and MCS supported + groups. However, cluster members only need to be informed of the + mesh supported groups that the endpoint has joined. Only the MCSs + need to know if the endpoint is joining any MCS supported groups. + + The solution is to modify the MARS_JOIN or MARS_LEAVE that is + retransmitted on ClusterControlVC. The following action is taken: + + A copy of the MARS_JOIN/LEAVE is made with type MARS_SJOIN or + MARS_SLEAVE as appropriate, with its <min,max> block replaced with + a 'hole punched' set of zero or more <min,max> pairs. The 'hole + punched' set of <min,max> pairs covers the entire address range + specified by the original <min,max> pair, but excludes those + + + +Armitage Standards Track [Page 50] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + addresses/groups which the joining (leaving) node is already + (still) a member of due to a previous single group join. + + Before transmission on the ClusterControlVC, the original + MARS_JOIN/LEAVE then has its <min,max> block replaced with a 'hole + punched' set of zero or more <min,max> pairs. The 'hole punched' + set of <min,max> pairs covers the entire address range specified + by the original <min,max> pair, but excludes those + addresses/groups supported by MCSs or which the joining (leaving) + node is already (still) a member of due to a previous single group + join. + + If no 'holes' were punched in the specified block, the original + MARS_JOIN/LEAVE is re-transmitted out on ClusterControlVC + unchanged. Otherwise the following occurs: + + The original MARS_JOIN/LEAVE is transmitted back to the source + cluster member unchanged, using the VC it arrived on. The + mar$flags.punched field MUST be reset to 0 in this message. + + If the hole-punched set contains 1 or more <min,max> pair, a + copy of the original MARS_JOIN/LEAVE is transmitted on + ClusterControlVC, carrying the new <min,max> list. The + mar$flags.punched field MUST be set to 1 in this message. + + The mar$flags.punched field is set to ensure the hole-punched copy + is ignored by the message's source when trying to match received + MARS_JOIN/LEAVE messages with ones previously sent (section + 5.2.2). + + (Appendix A discusses some algorithms for 'hole punching'.) + + It is assumed that MCSs use the MARS_SJOINs and MARS_SLEAVEs to + update their own VCs out to the actual group's members. + + mar$flags.layer3grp is copied over into the messages transmitted by + the MARS. mar$flags.copy MUST be set to one. + +6.2.5 Sequence numbers for ServerControlVC traffic. + + In an analogous fashion to the Cluster Sequence Number, the MARS + keeps a Server Sequence Number (SSN) that is incremented after every + transmission on ServerControlVC. The current value of the SSN is + inserted into the mar$msn field of every message the MARS issues that + it believes is destined for an MCS. This includes MARS_MULTIs that + are being returned in response to a MARS_REQUEST from an MCS, and + MARS_REDIRECT_MAP being sent on ServerControlVC. The MARS must check + the MARS_REQUESTs source, and if it is a registered MCS the SSN is + + + +Armitage Standards Track [Page 51] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + copied into the mar$msn field, otherwise the CSN is copied into the + mar$msn field. + + MCSs are expected to track and use the SSNs in an analogous manner to + the way endpoints use the CSN in section 5.1 (to trigger revalidation + of group membership information). + + A MARS should be carefully designed to minimise the possibility of + the SSN jumping unnecessarily. Under normal operation only MCSs that + are affected by transient link problems will miss mar$msn updates and + be forced to revalidate. If the MARS itself glitches it will be + innundated with requests for a period as every MCS attempts to + revalidate. + +6.3 Why global sequence numbers? + + The CSN and SSN are global within the context of a given protocol + (e.g. IPv4, mar$pro = 0x800). They count ClusterControlVC and + ServerControlVC activity without reference to the multicast group(s) + involved. This may be perceived as a limitation, because there is no + way for cluster members or multicast servers to isolate exactly which + multicast group they may have missed an update for. An alternative + was to try and provide a per-group sequence number. + + Unfortunately per-group sequence numbers are not practical. The + current mechanism allows sequence information to be piggy-backed onto + MARS messages already in transit for other reasons. The ability to + specify blocks of multicast addresses with a single MARS_JOIN or + MARS_LEAVE means that a single message can refer to membership change + for multiple groups simultaneously. A single mar$msn field cannot + provide meaningful information about each group's sequence. Multiple + mar$msn fields would have been unwieldy. + + Any MARS or cluster member that supports different protocols MUST + keep separate mapping tables and sequence numbers for each protocol. + +6.4 Redundant/Backup MARS Architectures. + + If backup MARSs exist for a given cluster then mechanisms are needed + to ensure consistency between their mapping tables and those of the + active, current MARS. + + (Cluster members will consider backup MARSs to exist if they have + been configured with a table of MARS addresses, or the regular + MARS_REDIRECT_MAP messages contain a list of 2 or more addresses.) + + The definition of an MARS-synchronization protocol is beyond the + current scope of this document, and is expected to be the subject of + + + +Armitage Standards Track [Page 52] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + further research work. However, the following observations may be + made: + + MARS_REDIRECT_MAP messages exist, enabling one MARS to force + endpoints to move to another MARS (e.g. in the aftermath of a MARS + failure, the chosen backup MARS will eventually wish to hand + control of the cluster over to the main MARS when it is + functioning properly again). + + Cluster members and MCSs do not need to start up with knowledge of + more than one MARS, provided that MARS correctly issues + MARS_REDIRECT_MAP messages with the full list of MARSs for that + cluster. + + Any mechanism for synchronising backup MARSs (and coping with the + aftermath of MARS failures) should be compatible with the cluster + member behaviour described in this document. + +7. How an MCS utilises a MARS. + + When an MCS supports a multicast group it acts as a proxy cluster + endpoint for the senders to the group. It also behaves in an + analogous manner to a sender, managing a single outgoing point to + multipoint VC to the real group members. + + Detailed description of possible MCS architectures are beyond the + scope of this document. This section will outline the main issues. + +7.1 Association with a particular Layer 3 group. + + When an MCS issues a MARS_MSERV it forces all senders to the + specified layer 3 group to terminate their VCs on the supplied source + ATM address. + + The simplest MCS architecture involves taking incoming AAL_SDUs and + simply flipping them back out a single point to multipoint VC. Such + an MCS cannot support more than one group at once, as it has no way + to differentiate between traffic destined for different groups. + Using this architecture, a physical node would provide MCS support + for multiple groups by creating multiple logical instances of the + MCS, each with different ATM Addresses (e.g. a different SEL value in + the node's NSAPA). + + A slightly more complex approach would be to add minimal layer 3 + specific processing into the MCS. This would look inside the received + AAL_SDUs and determine which layer 3 group they are destined for. A + single instance of such an MCS might register its ATM Address with + the MARS for multiple layer 3 groups, and manage multiple independent + + + +Armitage Standards Track [Page 53] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + outgoing point to multipoint VCs (one for each group). + + When an MCS starts up it MUST register with the MARS as described in + section 6.2.3, identifying the protocol it supports with the mar$pro + field of the MARS_MSERV. This also applies to logical MCSs, even if + they share the same physical ATM interface. This is important so that + the MARS can react to the loss of an MCS when it drops off + ServerControlVC. (One consequence is that 'simple' MCS architectures + end up with one ServerControlVC member per group. MCSs with layer 3 + specific processing may support multiple groups while still only + registering as one member of ServerControlVC.) + + An MCS MUST NOT share the same ATM address as a cluster member, + although it may share the same physical ATM interface. + +7.2 Termination of incoming VCs. + + An MCS MUST terminate unidirectional VCs in the same manner as a + cluster member. (e.g. terminate on an LLC entity when LLC/SNAP + encapsulation is used, as described in RFC 1755 for unicast + endpoints.) + +7.3 Management of outgoing VC. + + An MCS MUST establish and manage its outgoing point to multipoint VC + as a cluster member does (section 5.1). + + MARS_REQUEST is used by the MCS to establish the initial leaf nodes + for the MCS's outgoing point to multipoint VC. After the VC is + established, the MCS reacts to MARS_SJOINs and MARS_SLEAVEs in the + same way a cluster member reacts to MARS_JOINs and MARS_LEAVEs. + + The MCS tracks the Server Sequence Number from the mar$msn fields of + messages from the MARS, and revalidates its outgoing point to + multipoint VC(s) when a sequence number jump occurs. + +7.4 Use of a backup MARS. + + The MCS uses the same approach to backup MARSs as a cluster member + (section 5.4), tracking MARS_REDIRECT_MAP messages on + ServerControlVC. + +8. Support for IP multicast routers. + + Multicast routers are required for the propagation of multicast + traffic beyond the constraints of a single cluster (inter-cluster + traffic). (In a sense, they are multicast servers acting at the next + higher layer, with clusters, rather than individual endpoints, as + + + +Armitage Standards Track [Page 54] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + their abstract sources and destinations.) + + Multicast routers typically participate in higher layer multicast + routing algorithms and policies that are beyond the scope of this + memo (e.g. DVMRP [5] in the IPv4 environment). + + It is assumed that the multicast routers will be implemented over the + same sort of IP/ATM interface that a multicast host would use. Their + IP/ATM interfaces will register with the MARS as cluster members, + joining and leaving multicast groups as necessary. As noted in + section 5, multiple logical 'endpoints' may be implemented over a + single physical ATM interface. Routers use this approach to provide + interfaces into each of the clusters they will be routing between. + + The rest of this section will assume a simple IPv4 scenario where the + scope of a cluster has been limited to a particular LIS that is part + of an overlaid IP network. Not all members of the LIS are necessarily + registered cluster members (you may have unicast-only hosts in the + LIS). + +8.1 Forwarding into a Cluster. + + If the multicast router needs to transmit a packet to a group within + the cluster its IP/ATM interface opens a VC in the same manner as a + normal host would. Once a VC is open, the router watches for + MARS_JOIN and MARS_LEAVE messages and responds to them as a normal + host would. + + The multicast router's transmit side MUST implement inactivity timers + to shut down idle outgoing VCs, as for normal hosts. + + As with normal host, the multicast router does not need to be a + member of a group it is sending to. + +8.2 Joining in 'promiscuous' mode. + + Once registered and initialised, the simplest model of IPv4 multicast + router operation is for it to issue a MARS_JOIN encompassing the + entire Class D address space. In effect it becomes 'promiscuous', as + it will be a leaf node to all present and future multipoint VCs + established to IPv4 groups on the cluster. + + How a router chooses which groups to propagate outside the cluster is + beyond the scope of this document. + + Consistent with RFC 1112, IP multicast routers may retain the use of + IGMP Query and IGMP Report messages to ascertain group membership. + However, certain optimisations are possible, and are described in + + + +Armitage Standards Track [Page 55] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + section 8.5. + +8.3 Forwarding across the cluster. + + Under some circumstances the cluster may simply be another hop + between IP subnets that have participants in a multicast group. + + [LAN.1] ----- IPmcR.1 -- [cluster/LIS] -- IPmcR.2 ----- [LAN.2] + + LAN.1 and LAN.2 are subnets (such as Ethernet) with attached hosts + that are members of group X. + + IPmcR.1 and IPmcR.2 are multicast routers with interfaces to the LIS. + + A traditional solution would be to treat the LIS as a unicast subnet, + and use tunneling routers. However, this would not allow hosts on the + LIS to participate in the cross-LIS traffic. + + Assume IPmcR.1 is receiving packets promiscuously on its LAN.1 + interface. Assume further it is configured to propagate multicast + traffic to all attached interfaces. In this case that means the LIS. + + When a packet for group X arrives on its LAN.1 interface, IPmcR.1 + simply sends the packet to group X on the LIS interface as a normal + host would (Issuing MARS_REQUEST for group X, creating the VC, + sending the packet). + + Assuming IPmcR.2 initialised itself with the MARS as a member of the + entire Class D space, it will have been returned as a member of X + even if no other nodes on the LIS were members. All packets for group + X received on IPmcR.2's LIS interface may be retransmitted on LAN.2. + + If IPmcR.1 is similarly initialised the reverse process will apply + for multicast traffic from LAN.2 to LAN.1, for any multicast group. + The benefit of this scenario is that cluster members within the LIS + may also join and leave group X at anytime. + +8.4 Joining in 'semi-promiscuous' mode. + + Both unicast and multicast IP routers have a common problem - + limitations on the number of AAL contexts available at their ATM + interfaces. Being 'promiscuous' in the RFC 1112 sense means that for + every M hosts sending to N groups, a multicast router's ATM interface + will have M*N incoming reassembly engines tied up. + + It is not hard to envisage situations where a number of multicast + groups are active within the LIS but are not required to be + propagated beyond the LIS itself. An example might be a distributed + + + +Armitage Standards Track [Page 56] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + simulation system specifically designed to use the high speed IP/ATM + environment. There may be no practical way its traffic could be + utilised on 'the other side' of the multicast router, yet under the + conventional scheme the router would have to be a leaf to each + participating host anyway. + + As this problem occurs below the IP layer, it is worth noting that + 'scoping' mechanisms at the IP multicast routing level do not provide + a solution. An IP level scope would still result in the router's ATM + interface receiving traffic on the scoped groups, only to drop it. + + In this situation the network administrator might configure their + multicast routers to exclude sections of the Class D address space + when issuing MARS_JOIN(s). Multicast groups that will never be + propagated beyond the cluster will not have the router listed as a + member, and the router will never have to receive (and simply ignore) + traffic from those groups. + + Another scenario involves the product M*N exceeding the capacity of a + single router's interface (especially if the same interface must also + support a unicast IP router service). + + A network administrator may choose to add a second node, to function + as a parallel IP multicast router. Each router would be configured to + be 'promiscuous' over separate parts of the Class D address space, + thus exposing themselves to only part of the VC load. This sharing + would be completely transparent to IP hosts within the LIS. + + Restricted promiscuous mode does not break RFC 1112's use of IGMP + Report messages. If the router is configured to serve a given block + of Class D addresses, it will receive the IGMP Report. If the router + is not configured to support a given block, then the existence of an + IGMP Report for a group in that block is irrelevant to the router. + All routers are able to track membership changes through the + MARS_JOIN and MARS_LEAVE traffic anyway. (Section 8.5 discusses a + better alternative to IGMP within a cluster.) + + Mechanisms and reasons for establishing these modes of operation are + beyond the scope of this document. + +8.5 An alternative to IGMP Queries. + + An unfortunate aspect of IGMP is that it assumes multicasting of IP + packets is a cheap and trivial event at the link layer. As a + consequence, regular IGMP Queries are multicasted by routers to group + 224.0.0.1. These queries are intended to trigger IGMP Replies by + cluster members that have layer 3 members of particular groups. + + + + +Armitage Standards Track [Page 57] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The MARS_GROUPLIST_REQUEST and MARS_GROUPLIST_REPLY messages were + designed to allow routers to avoid actually transmitting IGMP Queries + out into a cluster. + + Whenever the router's forwarding engine wishes to transmit an IGMP + query, a MARS_GROUPLIST_REQUEST can be sent to the MARS instead. The + resulting MARS_GROUPLIST_REPLY(s) (described in section 5.3) from the + MARS carry all the information that the router would have ascertained + from IGMP replies. + + It is RECOMMENDED that multicast routers utilise this MARS service to + minimise IGMP traffic within the cluster. + + By default a MARS_GROUPLIST_REQUEST SHOULD specify the entire address + space (e.g. <224.0.0.0, 239.255.255.255> in an IPv4 environment). + However, routers serving part of the address space (as described in + section 8.4) MAY choose to issue MARS_GROUPLIST_REQUESTs that specify + only the subset of the address space they are serving. + + (On the surface it would also seem useful for multicast routers to + track MARS_JOINs and MARS_LEAVEs that arrive with mar$flags.layer3grp + set. These might be used in lieu of IGMP Reports, to provide the + router with timely indication that a new layer 3 group member exists + within the cluster. However, this only works on VC mesh supported + groups, and is therefore NOT recommended). + + Appendix B discusses less elegant mechanisms for reducing the impact + of IGMP traffic within a cluster, on the assumption that the IP/ATM + interfaces to the cluster are being used by un-optimised IP + multicasting code. + +8.6 CMIs across multiple interfaces. + + The Cluster Member ID is only unique within the Cluster managed by a + given MARS. On the surface this might appear to leave us with a + problem when a multicast router is routing between two or more + Clusters using a single physical ATM interface. The router will + register with two or more MARSs, and thereby acquire two or more + independent CMI's. Given that each MARS has no reason to synchronise + their CMI allocations, it is possible for a host in one cluster to + have the same CMI has the router's interface to another Cluster. How + does the router distinguish between its own reflected packets, and + packets from that other host? + + The answer lies in the fact that routers (and hosts) actually + implement logical IP/ATM interfaces over a single physical ATM + interface. Each logical interface will have a unique ATM Address (eg. + an NSAP with different SELector fields, one for each logical + + + +Armitage Standards Track [Page 58] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + interface). + + Each logical IP/ATM interface is configured with the address of a + single MARS, attaches to only one cluster, and so has only one CMI to + worry about. Each of the MARSs that the router is registered with + will have been given a different ATM Address (corresponding to the + different logical IP/ATM interfaces) in each registration MARS_JOIN. + + When hosts in a cluster add the router as a leaf node, they'll + specify the ATM Address of the appropriate logical IP/ATM interface + on the router in the L_MULTI_ADD message. Thus, each logical IP/ATM + interface will only have to check and filter on CMIs assigned by its + own MARS. + + In essence the cluster differentiation is achieved by ensuring that + logical IP/ATM interfaces are assigned different ATM Addresses. + +9. Multiprotocol applications of the MARS and MARS clients. + + A deliberate attempt has been made to describe the MARS and + associated mechanisms in a manner independent of a specific higher + layer protocol being run over the ATM cloud. The immediate + application of this document will be in an IPv4 environment, and this + is reflected by the focus of key examples. However, the mar$pro.type + and mar$pro.snap fields in every MARS control message allow any + higher layer protocol that has a 'short form' or 'long form' of + protocol identification (section 4.3) to be supported by a MARS. + + Every MARS MUST implement entirely separate logical mapping tables + and support. Every cluster member must interpret messages from the + MARS in the context of the protocol type that the MARS message refers + to. + + Every MARS and MARS client MUST treat Cluster Member IDs in the + context of the protocol type carried in the MARS message or data + packet containing the CMI. + + For example, IPv6 has been allocated an Ethertype of 0x86DD. This + means the 'short form' of protocol identification must be used in the + MARS control messages and the data path encapsulation (section 5.5). + An IPv6 multicasting client sets the mar$pro.type field of every MARS + message to 0x86DD. When carrying IPv6 addresses the mar$spln and + mar$tpln fields are either 0 (for null or non-existent information) + or 16 (for the full IPv6 address). + + Following the rules in section 5.5, an IPv6 data packet is + encapsulated as: + + + + +Armitage Standards Track [Page 59] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + [0xAA-AA-03][0x00-00-5E][0x00-01][pkt$cmi][0x86DD][IPv6 packet] + + A host or endpoint interface that is using the same MARS to support + multicasting needs of multiple protocols MUST not assume their CMI + will be the same for each protocol. + +10. Supplementary parameter processing. + + The mar$extoff field in the [Fixed header] indicates whether + supplementary parameters are being carried by a MARS control message. + This mechanism is intended to enable the addition of new + functionality to the MARS protocol in later documents. + + Supplementary parameters are conveyed as a list of TLV (type, length, + value) encoded information elements. The TLV(s) begin on the first + 32 bit boundary following the [Addresses] field in the MARS control + message (e.g. after mar$tsa.N in a MARS_MULTI, after mar$max.N in a + MARS_JOIN, etc). + +10.1 Interpreting the mar$extoff field. + + If the mar$extoff field is non-zero it indicates that a list of one + or more TLVs have been appended to the MARS message. The first TLV + is found by treating mar$extoff as an unsigned integer representing + an offset (in octets) from the beginning of the MARS message (the MSB + of the mar$afn field). + + As TLVs are 32 bit aligned the bottom 2 bits of mar$extoff are also + reserved. A receiver MUST mask off these two bits before calculating + the octet offset to the TLV list. A sender MUST set these two bits + to zero. + + If mar$extoff is zero no TLVs have been appended. + +10.2 The format of TLVs. + + When they exist, TLVs begin on 32 bit boundaries, are multiples of 32 + bits in length, and form a sequential list terminated by a NULL TLV. + + The TLV structure is: + + [Type - 2 octets][Length - 2 octets][Value - n*4 octets] + + The Type subfield indicates how the contents of the Value subfield + are to be interpreted. + + The Length subfield indicates the number of VALID octets in the Value + subfield. Valid octets in the Value subfield start immediately after + + + +Armitage Standards Track [Page 60] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + the Length subfield. The offset (in octets) from the start of this + TLV to the start of the next TLV in the list is given by the + following formula: + + offset = (length + 4 + ((4-(length & 3)) % 4)) + + (where % is the modulus operator) + + The Value subfield is padded with 0, 1, 2, or 3 octets to ensure the + next TLV is 32 bit aligned. The padded locations MUST be set to zero. + + (For example, a TLV that needed only 5 valid octets of information + would be 12 octets long. The Length subfield would hold the value 5, + and the Value subfield would be padded out to 8 bytes. The 5 valid + octets of information begin at the first octet of the Value + subfield.) + + The Type subfield is formatted in the following way: + + | 1st octet | 2nd octet | + 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | x | y | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The most significant 2 bits (Type.x) determine how a recipient should + behave when it doesn't recognise the TLV type indicated by the lower + 14 bits (Type.y). The required behaviours are: + + Type.x = 0 Skip the TLV, continue processing the list. + Type.x = 1 Stop processing, silently drop the MARS message. + Type.x = 2 Stop processing, drop message, give error indication. + Type.x = 3 Reserved. (currently treat as x = 0) + + (The error indication generated when Type.x = 2 SHOULD be logged in + some locally significant fashion. Consequential MARS message activity + in response to such an error condition will be defined in future + documents.) + + The TLV type space (Type.y) is further subdivided to encourage use + outside the IETF. + + 0 Null TLV. + 0x0001 - 0x0FFF Reserved for the IETF. + 0x1000 - 0x11FF Allocated to the ATM Forum. + 0x1200 - 0x37FF Reserved for the IETF. + 0x3800 - 0x3FFF Experimental use. + + + + +Armitage Standards Track [Page 61] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +10.3 Processing MARS messages with TLVs. + + Supplementary parameters act as modifiers to the basic behaviour + specified by the mar$op field of any given MARS message. + + If a MARS message arrives with a non-zero mar$extoff field its TLV + list MUST be parsed before handling the MARS message in accordance + with the mar$op value. Unrecognised TLVs MUST be handled as required + by their Type.x value. + + How TLVs modify basic MARS operations will be mar$op and TLV + specific. + +10.4 Initial set of TLV elements. + + Conformance with this document only REQUIRES the recognition of one + TLV, the Null TLV. This terminates a list of TLVs, and MUST be + present if mar$extoff is non-zero in a MARS message. It MAY be the + only TLV present. + + The Null TLV is coded as: + + [0x00-00][0x00-00] + + Future documents will describe the formats, contents, and + interpretations of additional TLVs. The minimal parsing requirements + imposed by this document are intended to allow conformant MARS and + MARS client implementations to deal gracefully and predictably with + future TLV developments. + +11. Key Decisions and open issues. + + The key decisions this document proposes: + + A Multicast Address Resolution Server (MARS) is proposed to co- + ordinate and distribute mappings of ATM endpoint addresses to + arbitrary higher layer 'multicast group addresses'. The specific + case of IPv4 multicast is used as the example. + + The concept of 'clusters' is introduced to define the scope of a + MARS's responsibility, and the set of ATM endpoints willing to + participate in link level multicasting. + + A MARS is described with the functionality required to support + intra-cluster multicasting using either VC meshes or ATM level + multicast servers (MCSs). + + + + + +Armitage Standards Track [Page 62] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + LLC/SNAP encapsulation of MARS control messages allows MARS and + ATMARP traffic to share VCs, and allows partially co-resident MARS + and ATMARP entities. + + New message types: + + MARS_JOIN, MARS_LEAVE, MARS_REQUEST. Allow endpoints to join, + leave, and request the current membership list of multicast + groups. + + MARS_MULTI. Allows multiple ATM addresses to be returned by the + MARS in response to a MARS_REQUEST. + + MARS_MSERV, MARS_UNSERV. Allow multicast servers to register + and deregister themselves with the MARS. + + MARS_SJOIN, MARS_SLEAVE. Allow MARS to pass on group membership + changes to multicast servers. + + MARS_GROUPLIST_REQUEST, MARS_GROUPLIST_REPLY. Allow MARS to + indicate which groups have actual layer 3 members. May be used + to support IGMP in IPv4 environments, and similar functions in + other environments. + + MARS_REDIRECT_MAP. Allow MARS to specify a set of backup MARS + addresses. + + MARS_MIGRATE. Allows MARS to force cluster members to shift + from VC mesh to MCS based forwarding tree in single operation. + + 'wild card' MARS mapping table entries are possible, where a + single ATM address is simultaneously associated with blocks of + multicast group addresses. + + For the MARS protocol mar$op.version = 0. The complete set of MARS + control messages and mar$op.type values is: + + 1 MARS_REQUEST + 2 MARS_MULTI + 3 MARS_MSERV + 4 MARS_JOIN + 5 MARS_LEAVE + 6 MARS_NAK + 7 MARS_UNSERV + 8 MARS_SJOIN + 9 MARS_SLEAVE + 10 MARS_GROUPLIST_REQUEST + 11 MARS_GROUPLIST_REPLY + + + +Armitage Standards Track [Page 63] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + 12 MARS_REDIRECT_MAP + 13 MARS_MIGRATE + + A number of issues are left open at this stage, and are likely to be + the subject of on-going research and additional documents that build + upon this one. + + The specified endpoint behaviour allows the use of + redundant/backup MARSs within a cluster. However, no + specifications yet exist on how these MARSs co-ordinate amongst + themselves. (The default is to only have one MARS per cluster.) + + The specified endpoint behaviour and MARS service allows the use + of multiple MCSs per group. However, no specifications yet exist + on how this may be used, or how these MCSs co-ordinate amongst + themselves. Until futher work is done on MCS co-ordination + protocols the default is to only have one MCS per group. + + The MARS relies on the cluster member dropping off + ClusterControlVC if the cluster member dies. It is not clear if + additional mechanisms are needed to detect and delete 'dead' + cluster members. + + Supporting layer 3 'broadcast' as a special case of multicasting + (where the 'group' encompasses all cluster members) has not been + explicitly discussed. + + Supporting layer 3 'unicast' as a special case of multicasting + (where the 'group' is a single cluster member, identified by the + cluster member's unicast protocol address) has not been explicitly + discussed. + + The future development of ATM Group Addresses and Leaf Initiated + Join to ATM Forum's UNI specification has not been addressed. + (However, the problems identified in this document with respect to + VC scarcity and impact on AAL contexts will not be fixed by such + developments in the signalling protocol.) + + Possible modifications to the interpretation of the mar$hrdrsv and + mar$afn fields in the Fixed header, based on different values for + mar$op.version, are for further study. + + + + + + + + + + +Armitage Standards Track [Page 64] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +Security Considerations + + Security issues are not addressed in this document. + +Acknowledgments + + The discussions within the IP over ATM Working Group have helped + clarify the ideas expressed in this document. John Moy (Cascade + Communications Corp.) initially suggested the idea of wild-card + entries in the ARP Server. Drew Perkins (Fore Systems) provided + rigorous and useful critique of early proposed mechanisms for + distributing and validating group membership information. Susan + Symington (and co-workers at MITRE Corp., Don Chirieleison, and Bill + Barns) clearly articulated the need for multicast server support, + proposed a solution, and challenged earlier block join/leave + mechanisms. John Shirron (Fore Systems) provided useful improvements + on my original revalidation procedures. + + Susan Symington and Bryan Gleeson (Adaptec) independently championed + the need for the service provided by MARS_GROUPLIST_REQUEST/REPLY. + The new encapsulation scheme arose from WG discussions, captured by + Bryan Gleeson in an interim Work in Progress (with Keith McCloghrie + (Cisco), Andy Malis (Ascom Nexion), and Andrew Smith (Bay Networks) + as key contributors). James Watt (Newbridge) and Joel Halpern + (Newbridge) motivated the development of a more multiprotocol MARS + control message format, evolving it away from its original ATMARP + roots. They also motivated the development of Type #1 and Type #2 + data path encapsulations. Rajesh Talpade (Georgia Tech) helped + clarify the need for the MARS_MIGRATE function. + + Maryann Maher (ISI) provided valuable sanity and implementation + checking during the latter stages of the document's development. + Finally, Jim Rubas (IBM) supplied the MARS pseudo-code in Appendix F + and also provided detailed proof-reading in the latter stages of the + document's development. + +Author's Address + + Grenville Armitage + Bellcore, 445 South Street + Morristown, NJ, 07960 + USA + + EMail: gja@thumper.bellcore.com + Phone: +1 201 829 2635 + + + + + + +Armitage Standards Track [Page 65] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +References + + [1] Deering, S., "Host Extensions for IP Multicasting", STD 3, RFC + 1112, Stanford University, August 1989. + + [2] Heinanen, J., "Multiprotocol Encapsulation over ATM Adaption + Layer 5", RFC 1483, Telecom Finland, July 1993. + + [3] Laubach, M., "Classical IP and ARP over ATM", RFC 1577, Hewlett- + Packard Laboratories, December 1993. + + [4] ATM Forum, "ATM User Network Interface (UNI) Specification + Version 3.1", ISBN 0-13-393828-X, Prentice Hall, Englewood Cliffs, + NJ, June 1995. + + [5] Waitzman, D., Partridge, C., and S. Deering, "Distance Vector + Multicast Routing Protocol", RFC 1075, November 1988. + + [6] Perez, M., Liaw, F., Grossman, D., Mankin, A., Hoffman, E., and + A. Malis, "ATM Signaling Support for IP over ATM", RFC 1755, + February 1995. + + [7] Borden, M., Crawley, E., Davie, B., and S. Batsell, "Integration + of Real-time Services in an IP-ATM Network Architecture.", RFC 1821, + August 1995. + + [8] ATM Forum, "ATM User-Network Interface Specification Version + 3.0", Englewood Cliffs, NJ: Prentice Hall, September 1993. + + + + + + + + + + + + + + + + + + + + + + + +Armitage Standards Track [Page 66] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +Appendix A. Hole punching algorithms. + + Implementations are entirely free to comply with the body of this + memo in any way they see fit. This appendix is purely for + clarification. + + A MARS implementation might pre-construct a set of <min,max> pairs + (P) that reflects the entire Class D space, excluding any addresses + currently supported by multicast servers. The <min> field of the + first pair MUST be 224.0.0.0, and the <max> field of the last pair + must be 239.255.255.255. The first and last pair may be the same. + This set is updated whenever a multicast server registers or + deregisters. + + When the MARS must perform 'hole punching' it might consider the + following algorithm: + + Assume the MARS_JOIN/LEAVE received by the MARS from the cluster + member specified the block <Emin, Emax>. + + Assume Pmin(N) and Pmax(N) are the <min> and <max> fields from the + Nth pair in the MARS's current set P. + + Assume set P has K pairs. Pmin(1) MUST equal 224.0.0.0, and + Pmax(M) MUST equal 239.255.255.255. (If K == 1 then no hole + punching is required). + + Execute pseudo-code: + + create copy of set P, call it set C. + + index1 = 1; + while (Pmax(index1) <= Emin) + index1++; + + index2 = K; + while (Pmin(index2) >= Emax) + index2--; + + if (index1 > index2) + Exit, as the hole-punched set is null. + + if (Pmin(index1) < Emin) + Cmin(index1) = Emin; + + if (Pmax(index2) > Emax) + Cmax(index2) = Emax; + + + + +Armitage Standards Track [Page 67] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Set C is the required 'hole punched' set of address blocks. + + The resulting set C retains all the MARS's pre-constructed 'holes' + covering the multicast servers, but will have been pruned to cover + the section of the Class D space specified by the originating host's + <Emin,Emax> values. + + The host end should keep a table, H, of open VCs in ascending order + of Class D address. + + Assume H(x).addr is the Class address associated with VC.x. + Assume H(x).addr < H(x+1).addr. + + The pseudo code for updating VCs based on an incoming JOIN/LEAVE + might be: + + x = 1; + N = 1; + + while (x < no.of VCs open) + { + while (H(x).addr > max(N)) + { + N++; + if (N > no. of pairs in JOIN/LEAVE) + return(0); + } + + if ((H(x).addr <= max(N) && + ((H(x).addr >= min(N)) + perform_VC_update(); + x++; + } + + + + + + + + + + + + + + + + + + +Armitage Standards Track [Page 68] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +Appendix B. Minimising the impact of IGMP in IPv4 environments. + + Implementing any part of this appendix is not required for + conformance with this document. It is provided solely to document + issues that have been identified. + + The intent of section 5.1 is for cluster members to only have + outgoing point to multipoint VCs when they are actually sending data + to a particular multicast group. However, in most IPv4 environments + the multicast routers attached to a cluster will periodically issue + IGMP Queries to ascertain if particular groups have members. The + current IGMP specification attempts to avoid having every group + member respond by insisting that each group member wait a random + period, and responding if no other member has responded before them. + The IGMP reply is sent to the multicast address of the group being + queried. + + Unfortunately, as it stands the IGMP algorithm will be a nuisance for + cluster members that are essentially passive receivers within a given + multicast group. It is just as likely that a passive member, with no + outgoing VC already established to the group, will decide to send an + IGMP reply - causing a VC to be established where there was no need + for one. This is not a fatal problem for small clusters, but will + seriously impact on the ability of a cluster to scale. + + The most obvious solution is for routers to use the + MARS_GROUPLIST_REQUEST and MARS_GROUPLIST_REPLY messages, as + described in section 8.5. This would remove the regular IGMP Queries, + resulting in cluster members only sending an IGMP Report when they + first join a group. + + Alternative solutions do exist. One would be to modify the IGMP reply + algorithm, for example: + + If the group member has VC open to the group proceed as per RFC + 1112 (picking a random reply delay between 0 and 10 seconds). + + If the group member does not have VC already open to the group, + pick random reply delay between 10 and 20 seconds instead, and + then proceed as per RFC 1112. + + If even one group member is sending to the group at the time the IGMP + Query is issued then all the passive receivers will find the IGMP + Reply has been transmitted before their delay expires, so no new VC + is required. If all group members are passive at the time of the IGMP + Query then a response will eventually arrive, but 10 seconds later + than under conventional circumstances. + + + + +Armitage Standards Track [Page 69] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + The preceding solution requires re-writing existing IGMP code, and + implies the ability of the IGMP entity to ascertain the status of VCs + on the underlying ATM interface. This is not likely to be available + in the short term. + + One short term solution is to provide something like the preceding + functionality with a 'hack' at the IP/ATM driver level within cluster + members. Arrange for the IP/ATM driver to snoop inside IP packets + looking for IGMP traffic. If an IGMP packet is accepted for + transmission, the IP/ATM driver can buffer it locally if there is no + VC already active to that group. A 10 second timer is started, and if + an IGMP Reply for that group is received from elsewhere on the + cluster the timer is reset. If the timer expires, the IP/ATM driver + then establishes a VC to the group as it would for a normal IP + multicast packet. + + Some network implementors may find it advantageous to configure a + multicast server to support the group 224.0.0.1, rather than rely on + a mesh. Given that IP multicast routers regularly send IGMP queries + to this address, a mesh will mean that each router will permanently + consume an AAL context within each cluster member. In clusters served + by multiple routers the VC load within switches in the underlying ATM + network will become a scaling problem. + + Finally, if a multicast server is used to support 224.0.0.1, another + ATM driver level hack becomes a possible solution to IGMP Reply + traffic. The ATM driver may choose to grab all outgoing IGMP packets + and send them out on the VC established for sending to 224.0.0.1, + regardless of the Class D address the IGMP message was actually for. + Given that all hosts and routers must be members of 224.0.0.1, the + intended recipients will still receive the IGMP Replies. The negative + impact is that all cluster members will receive the IGMP Replies. + + + + + + + + + + + + + + + + + + + +Armitage Standards Track [Page 70] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +Appendix C. Further comments on 'Clusters'. + + The cluster concept was introduced in section 1 for two reasons. The + more well known term of Logical IP Subnet is both very IP specific, + and constrained to unicast routing boundaries. As the architecture + described in this document may be re-used in non-IP environments a + more neutral term was needed. As the needs of multicasting are not + always bound by the same scopes as unicasting, it was not immediately + obvious that apriori limiting ourselves to LISs was beneficial in the + long term. + + It must be stressed that Clusters are purely an administrative being. + You choose their size (i.e. the number of endpoints that register + with the same MARS) based on your multicasting needs, and the + resource consumption you are willing to put up with. The larger the + number of ATM attached hosts you require multicast support for, the + more individual clusters you might choose to establish (along with + multicast routers to provide inter-cluster traffic paths). + + Given that not all the hosts in any given LIS may require multicast + support, it becomes conceivable that you might assign a single MARS + to support hosts from across multiple LISs. In effect you have a + cluster covering multiple LISs, and have achieved 'cut through' + routing for multicast traffic. Under these circumstances increasing + the geographical size of a cluster might be considered a good thing. + + However, practical considerations limit the size of clusters. Having + a cluster span multiple LISs may not always be a particular 'win' + situation. As the number of multicast capable hosts in your LISs + increases it becomes more likely that you'll want to constrain a + cluster's size and force multicast traffic to aggregate at multicast + routers scattered across your ATM cloud. + + Finally, multi-LIS clusters require a degree of care when deploying + IP multicast routers. Under the Classical IP model you need unicast + routers on the edges of LISs. Under the MARS architecture you only + need multicast routers at the edges of clusters. If your cluster + spans multiple LISs, then the multicast routers will perceive + themselves to have a single interface that is simultaneously attached + to multiple unicast subnets. Whether this situation will work depends + on the inter-domain multicast routing protocols you use, and your + multicast router's ability to understand the new relationship between + unicast and multicast topologies. + + In the absence of futher research in this area, networks deployed in + conformance to this document MUST make their IP cluster and IP LIS + coincide, so as to avoid these complications. + + + + +Armitage Standards Track [Page 71] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +Appendix D. TLV list parsing algorithm. + + The following pseudo-code represents how the TLV list format + described in section 10 could be handled by a MARS or MARS client. + + list = (mar$extoff & 0xFFFC); + + if (list == 0) exit; + + list = list + message_base; + + while (list->Type.y != 0) + { + switch (list->Type.y) + { + default: + { + if (list->Type.x == 0) break; + + if (list->Type.x == 1) exit; + + if (list->Type.x == 2) log-error-and-exit; + } + + [...other handling goes here..] + + } + + list += (list->Length + 4 + ((4-(list->Length & 3)) % + 4)); + + } + + return; + + + + + + + + + + + + + + + + + +Armitage Standards Track [Page 72] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +Appendix E. Summary of timer values. + + This appendix summarises various timers or limits mentioned in the + main body of the document. Values are specified in the following + format: [x, y, z] indicating a minimum value of x, a recommended + value of y, and a maximum value of z. A '-' will indicate that a + category has no value specified. Values in minutes are followed by + 'min', values in seconds are followed by 'sec'. + + Idle time for MARS - MARS client pt to pt VC: + [1 min, 20 min, -] + + Idle time for multipoint VCs from client. + [1 min, 20 min, -] + + Allowed time between MARS_MULTI components. + [-, -, 10 sec] + + Initial random L_MULTI_RQ/ADD retransmit timer range. + [5 sec, -, 10 sec] + + Random time to set VC_revalidate flag. + [1 sec, -, 10 sec] + + MARS_JOIN/LEAVE retransmit interval. + [5 sec, 10 sec, -] + + MARS_JOIN/LEAVE retransmit limit. + [-, -, 5] + + Random time to re-register with MARS. + [1 sec, -, 10 sec] + + Force wait if MARS re-registration is looping. + [1 min, -, -] + + Transmission interval for MARS_REDIRECT_MAP. + [1 min, 1 min, 2 min] + + Limit for client to miss MARS_REDIRECT_MAPs. + [-, -, 4 min] + + + + + + + + + + +Armitage Standards Track [Page 73] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + +Appendix F. Pseudo code for MARS operation. + + Implementations are entirely free to comply with the body of this + memo in any way they see fit. This appendix is purely for possible + clarification. + + A MARS implementation might be built along the lines suggested in + this pseudo-code. + + 1. Main + + 1.1 Initilization + + Define a server list as the list of leaf nodes + on ServerControlVC. + Define a cluster list as the list of leaf nodes + on ClusterControlVC. + Define a host map as the list of hosts that are + members of a group. + Define a server map as the list of hosts (MCSs) + that are serving a group. + Read config file. + Allocate message queues. + Allocate internal tables. + Set up passive open VC connection. + Set up redirect_map timer. + Establish logging. + + 1.2 Message Processing + + Forever { + If the message has a TLV then { + If TLV is unsupported then { + process as defined in TLV type field. + } /* unknown TLV */ + } /* TLV present */ + Place incoming message in the queue. + For (all messages in the queue) { + If the message is not a JOIN/LEAVE/MSERV/UNSERV with + mar$flags.register == 1 then { + If the message source is (not a member of server list) && + (not a member of cluster list) then { + Drop the message silently. + } + } + If (mar$pro.type is not supported) or + (the ATM source address is missing) then { + Continue. + + + +Armitage Standards Track [Page 74] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + } + Determine type of message. + If an ERR_L_RELEASE arrives on ClusterControlVC then { + Remove the endpoints ATM address from all groups + for which it has joined. + Release the CMI. + Continue. + } /* error on CCVC */ + Call specific message handling routine. + If redirect_map timer pops { + Call MARS_REDIRECT_MAP message handling routine. + } /* redirect timer pop */ + } /* all msgs in the queue */ + } /* forever loop */ + + 2. Message Handler + + 2.1 Messages: + + - MARS_REQUEST + + Indicate no MARS_MULTI support of TLV. + If the supported TLV is not NULL then { + Indicate MARS_MULTI support of TLV. + Process as required. + } else { /* TLV NULL */ + Indicate message to be sent on Private VC. + If the message source is a member of server list then { + If the group has a non-null host map then { + Call MARS_MULTI with the host map for the group. + } else { /* no group */ + Call MARS_NAK message routine. + } /* no group */ + } else { /* source is cluster list */ + If the group has a non-null server map then { + Call MARS_MULTI with the server map for the group. + } else { /* cluster member but no server map */ + If the group has a non-null host map then { + Call MARS_MULTI with the host map for the group. + } else { /* no group */ + Call MARS_NAK message routine. + } /* no group */ + } /* cluster member but no server map */ + } /* source is a cluster list */ + } /* TLV NULL */ + If a message exists then { + Send message as indicated. + } + + + +Armitage Standards Track [Page 75] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Return. + + - MARS_MULTI + + Construct a MARS_MULTI for the specified map. + If the param indicates TLV support then { + Process the TLV as required. + } + Return. + + - MARS_JOIN + + If (mar$flags.copy != 0) silently ignore the message. + If more than a single <min,max> pair is specified then + silently ignore the message. + Indicate message to be sent on private VC. + If (mar$flags.register == 1) then { + If the node is already a registered member of the cluster + associated with protocol type then { /*previous register*/ + Copy the existing CMI into the MARS_JOIN. + } else { /* new register */ + Add the node to ClusterControlVC. + Add the node to cluster list. + mar$cmi = obtain CMI. + } /* new register */ + } else { /* not a register */ + If the group is a duplicate of a previous MARS_JOIN then { + mar$msn = current csn. + Indicate message to be sent on Private VC. + } else { + Indicate no message to be sent. + If the message source is in server map then { + Drop the message silently. + } else { + If the first <min,max> encompasses any group with + a server map then { + Call the Modified JOIN/LEAVE Processing routine. + } else { + If the MARS_JOIN is for a multi group then { + Call the MultiGroup JOIN/LEAVE Processing Routine. + } else { + Indicate message to be sent on ClusterControlVC. + } /* not for a multi group */ + } /* group not handled by server */ + } /* msg src not in server map */ + Update internal tables. + } /* not a duplicate */ + } /* not a register */ + + + +Armitage Standards Track [Page 76] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + If a message exists then { + mar$flags.copy = 1. + Send message as indicated. + } + Return. + + - MARS_LEAVE + + If (mar$flags.copy != 0) silently ignore the message. + If more than a single <min,max> pair is specified then + silently ignore the message. + Indicate message to be sent on ClusterControlVC. + If (mar$flags.register == 1) then { /* deregistration */ + Update internal tables to remove the member's ATM addr + from all groups it has joined. + Drop the endpoint from ClusterControlVC. + Drop the endpoint from cluster list. + Release the CMI. + Indicate message to be sent on Private VC. + } else { /* not a deregistration */ + If the group is a duplicate of a previous MARS_LEAVE then { + mar$msn = current csn. + Indicate message to be sent on Private VC. + } else { + Indicate no message to be sent. + If the first <min,max> encompasses any group with + a server map then { + Call the Modified JOIN/LEAVE Processing routine. + } else { + If the MARS_LEAVE is for a multi group then { + Call the MultiGroup JOIN/LEAVE Processing Routine. + } else { + Indicate message to be sent on ClusterControlVC. + } + } + Update internal tables. + } /* not a duplicate */ + } /* not a deregistration */ + If a message exists then { + mar$flags.copy = 1. + Send message as indicated. + } + Return. + + - MARS_MSERV + + If (mar$flags.register == 1) then { /* server register */ + Add the endpoint as a leaf node to ServerControlVC. + + + +Armitage Standards Track [Page 77] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + Add the endpoint to the server list. + Indicate the message to be sent on Private VC. + mar$cmi = 0. + } else { /* not a register */ + If the source has not registered then { + Drop and ignore the message. + Indicate no message to be sent. + } else { /* source is registered */ + If MCS is already member of indicated server map { + Indicate message to be sent on Private VC. + mar$flags.layer3grp = 0; + mar$flags.copy = 1. + } else { /* New MCS to add. */ + Add the server ATM addr to server map for group. + Indicate message to be sent on ServerControlVC. + Send message as indicated. + Make a copy of the message. + Indicate message to be sent on ClusterControlVC. + If new server map was just created { + Construct MARS_MIGRATE, with MCS as target. + } else { + Change the op code to MARS_JOIN. + mar$flags.layer3grp = 0. + mar$flags.copy = 1. + } /* new server map */ + } /* New MCS to add. */ + } /* source is registered */ + } /* not a register */ + + If a message exists then { + Send message as indicated. + } + Return. + + + - MARS_UNSERV + + If (mar$flags.register == 1) then { /* deregister */ + Remove the ATM addr of the MCS from all server maps. + If a server map becomes null then delete it. + Remove the endpoint as a leaf of ServerControlVC. + Remove the endpoint from server list. + Indicate the message to be sent on Private VC. + } else { /* not a deregister */ + If the source is not a member of server list then { + Drop and ignore the message. + Indicate no message to be sent. + } else { /* source is registered */ + + + +Armitage Standards Track [Page 78] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + If MCS is not member of indicated server map { + Indicate message to be sent on Private VC. + mar$flags.layer3grp = 0; + mar$flags.copy = 1. + } else { /* MCS existed, must be removed. */ + Remove ATM addr of the MCS from indicated server map. + If a server map is null then delete it. + Indicate the message to be sent on ServerControlVC. + Send message as indicated. + Make a copy of the message. + Change the op code to MARS_LEAVE. + Indicate message (copy) to be sent on ClusterControlVC. + mar$flags.layer3grp = 0; + mar$flags.copy = 1. + } /* MCS existed, must be removed. */ + } /* source is registered */ + } /* not a deregister */ + If a message exists then { + Send message as indicated. + } + Return. + + - MARS_NAK + + Build command. + Return. + + - MARS_GROUPLIST_REQUEST + + If (mar$pnum != 1) then Return. + Call MARS_GROUPLIST_REPLY with the range and output VC. + Return. + + - MARS_GROUPLIST_REPLY + + Build command for specified range. + Indicate message to be sent on specified VC. + Send message as indicated. + Return. + + - MARS_REDIRECT_MAP + + Include the MARSs own address in the message. + If there are backup MARSs then include their addresses. + Indicate MARS_REDIRECT_MAP is to be sent on ClusterControlVC. + Send message back as indicated. + Return. + + + + +Armitage Standards Track [Page 79] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + 3. Send Message Handler + + If (the message is going out ClusterControlVC) && + (a new csn is required) then { + mar$msn = obtain a CSN + } + If (the message is going out ServerControlVC) && + (a new ssn is required) then { + mar$msn = obtain a SSN + } + Return. + + 4. Number Generator + + 4.1 Cluster Sequence Number + + Generate the next sequence number. + Return. + + 4.2 Server Sequence Number + + Generate the next sequence number. + Return. + + 4.3 CMI + + CMIs are allocated uniquely per registered cluster member + within the context of a particular layer 3 protocol type. + A single node may register multiple times if it supports + multiple layer 3 protocols. + The CMIs allocated for each such registration may or may + not be the same. + Generate a CMI for this protocol. + Return. + + 5. Modified JOIN/LEAVE Processing + + This routine processes JOIN/LEAVE when a server map exists. + + Make a copy of the message. + Change the type of the copy to MARS_SJOIN. + If the message is a MARS_LEAVE then { + Change the type of the copy to MARS_SLEAVE. + } + mar$flags.copy = 1 (copy). + Hole punch the <min,max> group by excluding + from the range those groups which the joining + (leaving) node is already (still) a member of + + + +Armitage Standards Track [Page 80] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + due to it having previously issued a single group + join. + Indicate the message to be sent on ServerControlVC. + If the message (copy) contains one or more <min,max> pair { + Send message (copy) as indicated. + } + mar$flags.punched = 0 in the original message. + Indicate the message to be sent on Private VC. + Send message (original) as indicated. + Hole punch the <min,max> group by excluding + from the range those groups that are served by MCSs + or which the joining (leaving) node is already + (still) a member of due to it having previously + issued a single group join. + Indicate the (original) message to be sent on ClusterControlVC. + If (number of holes punched > 0) then { /* punched holes */ + In original message do { + mar$flags.punched = 1. + old punched list <- new punched list. + } + } /* punched holes */ + mar$flags.copy = 1. + Send message as indicated. + Return. + + 5.1 MultiGroup JOIN/LEAVE Processing + + This routine processes JOIN/LEAVE when a multi group exists. + + If (mar$flags.layer3grp) { + Ignore this setting, consider it reset. + } + mar$flags.copy = 1. + Make a copy of the message. + From the copy hole punch the <min,max> group by + excluding from the range those groups that this + node has already joined or left. + If (number of holes punched > 0) then { + mar$flags.punch = 0 in original message. + Indicate original message to be sent on Private VC. + Send original message as indicated. + mar$flags.punch = 1 in copy message. + old group range <- new punched list. + Indicate message to be sent on ClusterControlVC. + Send copy of message as indicated. + } else { + Indicate message to be sent on ClusterControlVC. + Send original message as indicated. + + + +Armitage Standards Track [Page 81] + +RFC 2022 Multicast over UNI 3.0/3.1 based ATM November 1996 + + + } /* no holes punched */ + Return. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Armitage Standards Track [Page 82] + |