--- 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.