<?xml version="1.0" encoding="UTF-8"?>
<rfc category="std" ipr="trust200902" docName="draft-ietf-pim-null-register-packing-11">
	<?rfc toc="yes"?>
	<?rfc compact="yes"?>
	<?rfc subcompact="no"?>
	<?rfc symrefs="yes"?>
	<front>
		<title abbrev="PIM Null-Register packing">PIM Null-Register packing</title>
		<author initials="V." surname="Kamath" fullname="Vikas Ramesh Kamath">
			<organization>VMware</organization>
			<address>
				<postal>
					<street>3401 Hillview Ave</street>
					<city>Palo Alto</city>
					<code>CA 94304</code>
					<country>USA</country>
				</postal>
				<email>vkamath@vmware.com</email>
			</address>
		</author>
		<author initials="R." surname="Chokkanathapuram Sundaram" fullname="Ramakrishnan Chokkanathapuram Sundaram">
			<organization>Cisco Systems, Inc.</organization>
			<address>
				<postal>
					<street>Tasman Drive</street>
					<city>San Jose</city>
					<code>CA 95134</code>
					<country>USA</country>
				</postal>
				<email>ramaksun@cisco.com</email>
			</address>
		</author>
		<author initials="R." surname="Banthia" fullname="Raunak Banthia">
			<organization>Apstra</organization>
			<address>
				<postal>
					<street>333 Middlefield Rd STE 200</street>
					<city>Menlo Park</city>
					<code>CA 94025</code>
					<country>USA</country>
				</postal>
				<email>rbanthia@apstra.com</email>
			</address>
		</author>
		<author initials="A." surname="Gopal" fullname="Ananya Gopal">
			<organization>Cisco Systems, Inc.</organization>
			<address>
				<postal>
					<street>Tasman Drive</street>
					<city>San Jose</city>
					<code>CA 95134</code>
					<country>USA</country>
				</postal>
				<email>ananygop@cisco.com</email>
			</address>
		</author>
		<date />
		<area>Routing</area>
		<keyword>Multicast</keyword>
		<abstract>
			<t>In PIM-SM networks PIM Null-Register messages are sent by the Designated Router (DR) to the Rendezvous Point (RP) to signal the presence of Multicast sources in the network. There are periodic PIM Null-Registers sent from the DR to the RP to keep the state alive at the RP as long as the source is active. The PIM Null-Register message carries information about a single Multicast source and group.</t>
			<t>This document defines a standard to send multiple Multicast source and group information in a single PIM Packed Null-Register message. We will refer to the new packed formats as the PIM Packed Null-Register format and PIM Packed Register-Stop format throughout the document. This document also discusses interoperability between the PIM routers which do not understand the PIM Packed Null-Register format and routers which do understand it.</t>
		</abstract>
	</front>
	<middle>
		<section title="Introduction">
			<t>PIM Null-Registers are sent by the DR periodically for Multicast streams to keep the states active on the RP, as long as the multicast source is alive. As the number of multicast sources increases, the number of PIM Null-Register messages that are sent also increases. This results in more PIM packet processing at the RP and the DR.</t>
			<t>
				The control plane policing (COPP), monitors the packets that are processed by the control plane. The high rate at which Null-Registers are received at the RP can lead to COPP drops of Multicast PIM Null-Register messages. This draft proposes a method to efficiently pack multiple PIM Null-Registers <xref target="RFC7761" />
				(Section 4.4) and Register-Stops <xref target="RFC7761" />(Section 3.2) into a single message as these packets anyway do not contain encapsulated data.
			</t>
			<t>The draft also discusses interoperability with PIM routers that do not understand the new packet format.</t>
			<section title="Conventions used in this document">
				<t>
      The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
      "MAY", and "OPTIONAL" in this document are to be interpreted as
      described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
      appear in all capitals, as shown here.
				</t>
			</section>
			<section title="Terminology">
				<t>
					<list style="hanging">
						<t hangText="RP:">Rendezvous Point</t>
						<t hangText="DR:">Designated Router</t>
					</list>
				</t>
			</section>
		</section>
		<section title="Packed Null-Register Capability">
			<t>A router (DR) can decide to pack multiple Null-Register messages based on the capability received from the RP as part of the PIM Register-Stop. This ensures compatibility with routers that do not support processing of the new format. The capability information can be indicated by the RP via the PIM Register-Stop message sent to the DR. Thus a DR will switch to the new format only when it learns that the RP is capable of handling the PIM Packed Null-Register messages.</t>
			<t>
				Conversely, a DR that does not support the packed format can continue generating the PIM Null-Register as defined in 
				<xref target="RFC7761" /> (Section 4.4). To exchange the capability information in the Register-Stop message, the "Reserved" field can be used to indicate this capability in those Register-Stop messages. One bit of the Reserved field is used to indicate the "packing" capability (P bit). The rest of the bits in the "Reserved" field will be retained for future use.
			</t>
			<figure>
				<artwork>
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |PIM Ver| Type  |P|  Reserved   |           Checksum            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             Group Address (Encoded-Group format)              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Source Address (Encoded-Unicast format)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     
      Figure 1: PIM Register-Stop message with capability option
                
                </artwork>
			</figure>
			<t>
				<list style="hanging">
					<t hangText="PIM Version, Type, Checksum, Group Address, Source Address:" />
					<t>
						Same as
						<xref target="RFC7761" />
						(Section 4.9.4)
					</t>
					<t hangText="P:" />
					<t>Capability bit (flag bit 7) used to indicate support for the Packed Null-Register Capability</t>
				</list>
			</t>
		</section>
		<section title="PIM Packed Null-Register message format">
			<t>PIM Packed Null-Register message format includes a count to indicate the number of Null-Register records in the message.</t>
			<figure>
				<artwork>
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |PIM Ver| Type  |Subtype|  FB   |           Checksum            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Count       |              Reserved                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Group Address[1]   (Encoded-Group format)                 |
   |     Source Address[1]  (Encoded-Unicast format)               |
   .                                                               .
   .                                                               .
   .                                                               .
   .                                                               .
   .     Group Address[N]                                          .
   |     Source Address[N]                                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                    
           Figure 2: PIM Packed Null-Register message format                
                </artwork>
			</figure>
			<t>
				<list style="hanging">
					<t hangText="PIM Version, Reserved, Checksum:" />
					<t>
						Same as
						<xref target="RFC7761" />
						(Section 4.9.3)
					</t>
					<t hangText="Type, SubType:" />
					<t>
						The new packed Null-Register Type and SubType values TBD.
						<xref target="RFC8736" />
					</t>
					<t hangText="Count:" />
					<t>The number of packed Null-Register records. A record consists of a Group Address and Source Address pair.</t>
					<t hangText="Group Address, Source Address:" />
					<t>
						Same as
						<xref target="RFC7761" />
						(Section 4.9.4)
					</t>
				</list>
			</t>
		</section>
		<section title="PIM Packed Register-Stop message format">
			<t>The PIM Packed Register-Stop message includes a count to indicate the number of records that are present in the message.</t>
			<figure>
				<artwork>
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |PIM Ver| Type  |Subtype|  FB   |           Checksum            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Count     |          Reserved                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Group Address[1]  (Encoded-Group format)                  |
   |     Source Address[1]  (Encoded-Unicast format)               |
   .                                                               .
   .                                                               .
   .                                                               .
   .                                                               .
   .     Group Address[N]                                          .
   |     Source Address[N]                                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Figure 3: PIM Packed Register-Stop message format                
                
                </artwork>
			</figure>
			<t>
				<list style="hanging">
					<t hangText="PIM Version, Reserved, Checksum:" />
					<t>
						Same as
						<xref target="RFC7761"/>
						(Section 4.9.4)
					</t>
					<t hangText="Type:" />
					<t>The new Register Stop Type and SubType values TBD</t>
					<t hangText="Count:" />
					<t>The number of PIM packed Register-Stop records. A record consists of a Group Address and Source Address pair.</t>
					<t hangText="Group Address, Source Address:" />
					<t>
						Same as
						<xref target="RFC7761"/>
						(Section 4.9.4)
					</t>
				</list>
			</t>
		</section>
		<section title="Protocol operation">
			<t>
				The following combinations exist -
				<list style="numbers">
					<t> DR and RP both support the PIM Packed Null-Register and PIM Packed Register-Stop formats:
						<list style="symbols">
							<t>As specified in <xref target="RFC7761"/>, the DR sends PIM Register messages towards the RP when a new source is detected. </t>
							<t>An RP supporting this specification MUST set the P-bit in the corresponding Register-Stop messages.</t>
							<t>
								When a Register-Stop message with the P-bit set is received, the DR SHOULD send PIM Packed Null-Register messages (Section 3) to the RP instead of multiple Register messages with the N-bit set <xref target="RFC7761"/>.
							</t>
							<t>The RP, after receiving a PIM Packed Null-Register message SHOULD start sending PIM Packed Register-Stop messages (Section 4) to the corresponding DR instead of individual Register-Stop messages.</t>
						</list>
					</t>
					<t> DR supports but RP does not support the PIM Packed Null-Register and PIM Packed Register-Stop formats:
						<list style="symbols">
							<t> As specified in <xref target="RFC7761"/>, DR sends PIM Null-Registers towards the RP. </t>
							<t> After receiving DR's PIM Null-Register message, RP sends a normal Register-Stop without any capability information.</t>
							<t>DR then sends PIM Null-Registers in the unpacked format <xref target="RFC7761" />. </t>

						</list>
					</t>
					<t> RP supports but DR does not support the PIM Packed Null-Register and PIM Packed Register-Stop formats:
						<list style="symbols">
							<t> As specified in <xref target="RFC7761" />, DR sends the PIM Null-Register towards the RP. </t>
							<t> After receiving DR's PIM Null-Register message, RP sends a PIM Packed Register-Stop towards the DR that includes capability information.</t>
							<t> Since DR does not support the new format, it sends PIM Null-Registers in the unpacked format <xref target="RFC7761" />. </t>
						</list>
					</t>
				</list>
			</t>
		</section>
		<section title="Operational Considerations">
			<t>In case the network manager disables the packed capability at the RP, the router should not advertise the capability. However, an implementation MAY choose to still parse any packed registers if they are received. This may be particularly useful in the transitional period after the network manager disables it.</t>
		</section>
		<section title="PIM Anycast RP Considerations">
			<t>
				The PIM Packed Null-Register format should be enabled only if it is supported by all PIM Anycast RP <xref target="RFC4610"/>
				members in the RP set for the RP address. This consideration applies to PIM Anycast RP with MSDP <xref target="RFC3446" /> as well.
			</t>
		</section>
		<section title="PIM RP router version downgrade">
			<t>Consider a PIM RP router that supports PIM Packed Null-Registers and PIM Packed Register-Stops. When this router downgrades to a software version which does not support PIM Packed Null-Registers and PIM Packed Register-Stops, the DR that sends the PIM Packed Null-Register message will not get a PIM Register-Stop message back from the RP. In such scenarios the DR can send an unpacked PIM Null-Register and check the PIM Register-Stop to see if the capability bit (P-bit) for PIM Packed Null-Register is set or not. If it is not set then the DR will continue sending unpacked PIM Null-Register messages.</t>
		</section>
		<section title="Fragmentation Considerations">
			<t>When building a PIM Packed Null-Register message or PIM Packed Register-Stop message, a router should include as many records as possible based on the path MTU towards RP, if path MTU discovery is done. Otherwise, the number of records should be limited by the MTU of the outgoing interface.</t>
		</section>
		<section title="Security Considerations">
			<t>General Register messages security considerations from <xref target="RFC7761" /> apply. As mentioned in <xref target="RFC7761"/>, PIM Null-Register messages and Register-Stop messages are forwarded by intermediate routers to their destination using normal IP forwarding. Without data origin authentication, an attacker who is located anywhere in the network may be able to forge a Null-Register or Register-Stop message. We next consider the effect of a forgery of each of these messages. By forging a Register message, an attacker can cause the RP to inject forged traffic onto the shared multicast tree.</t>
			<t>By forging a Register-Stop message, an attacker can prevent a legitimate DR from registering packets to the RP. This can prevent local hosts on that LAN from sending multicast packets. The above two PIM messages are not changed by intermediate routers and need only be examined by the intended receiver. Thus, these messages can be authenticated end-to-end. Attacks on Register and Register-Stop messages do not apply to a PIM-SSM-only implementation, as these messages are not used in PIM-SSM.</t>
			<t>There is another case where a spoofed Register-Stop can be sent to make it appear that is from the RP, and that the RP supports this new packed capability when it does not. This can cause Null-Registers to be sent to an RP that doesnt support this packed format. But standard methods to prevent spoofing should take care of this case. For example, uRPF can be used to filter out packets coming from the outside from addresses that belong to routers inside.</t>
		</section>
		<section title="IANA Considerations">
			<t>
				<list>
					<t>This document requires the assignment of Capability bit (P-bit), flag bit 7 in the PIM Register-Stop message.</t>
					<t>This document requires the assignment of 2 new PIM message types for the PIM Packed Null-Register and PIM Packed Register-Stop.</t>
				</list>
			</t>
		</section>
		<section title="Acknowledgments">
			<t>The authors would like to thank Stig Venaas, Anish Peter, Zheng Zhang and Umesh Dudani for their helpful comments on the draft.</t>
		</section>
	</middle>
	<back>
		<references title="Normative References">
			<?rfc include='reference.RFC.2119' ?>
            <?rfc include='reference.RFC.8174' ?>
			<?rfc include='reference.RFC.7761' ?>
			<?rfc include='reference.RFC.4610' ?>
			<?rfc include='reference.RFC.8736' ?>
		</references>
        <references title="Informative References">
			<?rfc include='reference.RFC.3446' ?>
		</references>
	</back>
</rfc>