--- 1/draft-ietf-pim-drlb-12.txt 2019-10-24 07:14:02.847116396 -0700 +++ 2/draft-ietf-pim-drlb-13.txt 2019-10-24 07:14:02.887117410 -0700 @@ -4,21 +4,21 @@ Intended status: Standards Track Alibaba Group Expires: April 25, 2020 S. Vallepalli M. Mishra S. Venaas Cisco Systems, Inc. A. Green British Telecom October 23, 2019 PIM Designated Router Load Balancing - draft-ietf-pim-drlb-12 + draft-ietf-pim-drlb-13 Abstract On a multi-access network, one of the PIM-SM routers is elected as a Designated Router. One of the responsibilities of the Designated Router is to track local multicast listeners and forward data to these listeners if the group is operating in PIM-SM. This document specifies a modification to the PIM-SM protocol that allows more than one of the PIM-SM routers to take on this responsibility so that the forwarding load can be distributed among multiple routers. @@ -344,48 +344,48 @@ to denote the number of zeroes counted from the least significant bit of a Hash Mask hash_mask. As an example, LSZC(255.255.128) is 7 and also LSZC(FFFF:8000::) is 111. If all bits are set, LSZC will be 0. If the mask is zero, then LSZC will be 32 for IPv4, and 128 for IPv6. The number of GDR Candidates is denoted as GDRC. The idea behind the Modulo Hash Algorithm is in simple terms that the corresponding mask is applied to a value, then the result is shifted right LSZC(mask) bits so that the least significant bits that were - masked out are not considered. Then this result is masked by 0xFFFF, - keeping only the last 32 bits of the result (this only makes a - difference for IPv6). Finally, the hash value is this result modulo - the number of GDR Candidates (GDRC). + masked out are not considered. Then this result is masked by + 0xFFFFFFFF, keeping only the last 32 bits of the result (this only + makes a difference for IPv6). Finally, the hash value is this result + modulo the number of GDR Candidates (GDRC). The Modulo Hash Algorithm for computing the values hashvalue_RP, hashvalue_Group and hashvalue_SG is defined as follows. hashvalue_RP is calculated as: - (((RP_address & RP_mask) >> LSZC(RP_mask)) & 0xFFFF) % GDRC + (((RP_address & RP_mask) >> LSZC(RP_mask)) & 0xFFFFFFFF) % GDRC RP_address is the address of the RP defined for the group and RP_mask is the RP Hash Mask. hashvalue_Group is calculated as: - (((Group_address & Group_mask) >> LSZC(Group_mask)) & 0xFFFF) % - GDRC + (((Group_address & Group_mask) >> LSZC(Group_mask)) & 0xFFFFFFFF) + % GDRC Group_address is the group address and Group_mask is the Group Hash Mask. hashvalue_SG is calculated as: - ((((Source_address & Source_mask) >> LSZC(Source_mask)) & 0xFFFF) - ^ (((Group_address & Group_mask) >> LSZC(Group_mask)) & 0xFFFF)) % - GDRC + ((((Source_address & Source_mask) >> LSZC(Source_mask)) & + 0xFFFFFFFF) ^ (((Group_address & Group_mask) >> LSZC(Group_mask)) + & 0xFFFFFFFF)) % GDRC Group_address is the group address and Group_mask is the Group Hash Mask. 5.2.1. Modulo Hash Algorithm Examples To help illustrate the algorithm, consider this example. Router X with IPv4 address 203.0.113.1 receives a DRLB-List Hello Option from the DR, which announces RP Hash Mask 0.0.255.0 and a list of GDR Candidates, sorted by IP addresses from high to low: 203.0.113.3, @@ -393,59 +393,60 @@ addresses would be: 0 for 203.0.113.3; 1 for 203.0.113.2; 2 for 203.0.113.1 (Router X). Assume there are 2 RPs: RP1 192.0.2.1 for Group1 and RP2 198.51.100.2 for Group2. Following the modulo Hash Algorithm: LSZC(0.0.255.0) is 8 and GDRC is 3. The hashvalue_RP for Group1 with RP RP1 is: - (((192.0.2.1 & 0.0.255.0) >> 8) & 0xFFFF % 3) = 2 % 3 = 2 + (((192.0.2.1 & 0.0.255.0) >> 8) & 0xFFFFFFFF % 3) = 2 % 3 = 2 which matches the ordinal number assigned to Router X. Router X will be the GDR for Group1. The hashvalue_RP for Group2 with RP RP2 is: - (((198.51.100.2 & 0.0.255.0) >> 8) & 0xFFFF % 3) = 100 % 3 = 1 + (((198.51.100.2 & 0.0.255.0) >> 8) & 0xFFFFFFFF % 3) = 100 % 3 = 1 which is different from the ordinal number of router X (2). Hence, Router X will not be GDR for Group2. For IPv6 consider this example, similar to the above. Router X with IPv6 address FE80::1 receives a DRLB-List Hello Option from the DR, - which announces RP Hash Mask ::FFFF:FFFF:0 and a list of GDR + which announces RP Hash Mask ::FFFF:FFFF:FFFF:0 and a list of GDR Candidates, sorted by IP addresses from high to low: FE80::3, FE80::2 and FE80::1. The ordinal number assigned to those addresses would be: 0 for FE80::3; 1 for FE80::2; 2 for FE80::1 (Router X). - Assume there are 2 RPs: RP1 2001:DB8::1:5678:1 for Group1 and RP2 - 2001:DB8::1:1234:2 for Group2. Following the modulo Hash Algorithm: + Assume there are 2 RPs: RP1 2001:DB8::1:0:5678:1 for Group1 and RP2 + 2001:DB8::1:0:1234:2 for Group2. Following the modulo Hash + Algorithm: - LSZC(::FFFF:FFFF:0) is 32 and GDRC is 3. The hashvalue_RP for Group1 - with RP RP1 is: + LSZC(::FFFF:FFFF:FFFF:0) is 16 and GDRC is 3. The hashvalue_RP for + Group1 with RP RP1 is: - (((2001:DB8::1:5678:1 & ::FFFF:FFFF:0) >> 32) & 0xFFFF % 3) = - ((::1:5678:0 >> 32) & 0xFFFF % 3) = (::1:5678 & 0xFFFF % 3) = ::5678 - % 3 = 2 + (((2001:DB8::1:0:5678:1 & ::FFFF:FFFF:FFFF:0) >> 16) & 0xFFFFFFFF % + 3) = ((::1:0:5678:0 >> 16) & 0xFFFFFFFF % 3) = (::1:0:5678 & + 0xFFFFFFFF % 3) = ::5678 % 3 = 2 which matches the ordinal number assigned to Router X. Router X will be the GDR for Group1. The hashvalue_RP for Group2 with RP RP2 is: - (((2001:DB8::1:1234:1 & ::FFFF:FFFF:0) >> 32) & 0xFFFF % 3) = - ((::1:1234:0 >> 32) & 0xFFFF % 3) = (::1:1234 & 0xFFFF % 3) = ::1234 - % 3 = 1 + (((2001:DB8::1:0:1234:1 & ::FFFF:FFFF:FFFF:0) >> 16) & 0xFFFFFFFF % + 3) = ((::1:0:1234:0 >> 16) & 0xFFFFFFFF % 3) = (::1:0:1234 & + 0xFFFFFFFF % 3) = ::1234 % 3 = 1 which is different from the ordinal number of router X (2). Hence, Router X will not be GDR for Group2. 5.2.2. Limitations The Modulo Hash Algorithm has poor failover characteristics when a shared LAN has more than two GDRs. In the case of more than two GDRs on a LAN, when one GDR fails, all of the groups may be reassigned to a different GDR, even if they were not assigned to the failed GDR.