Friday 6 April 2012

IPv6 Multicast BSR

Sources: here and here.

The Boot Strap Router (BSR) protocol consists of three types of routers:

Standard - does not participate in BSR or RP elections but forwards multicast traffic
BSR - The router which makes the decision about what is the current active RP
RP - The router which is part of the multicast forwarding tree

The protocol performs the same function as Cisco’s proprietary Auto-RP. Unlike Auto-RP, BSR does not use any dense-mode groups to flood candidate RP and RP mapping information. Instead, the information is flooded using PIM messages, on hop-by-hop basis.

To prevent the BSR advertisements crossing an AS boundary use the use the ipv6 pim bsr-border  (or ip pim bsr-border) command to administratively disable bootstrap router (BSR) messages from being sent or received through an interface. 


You can configure a set of routers to be the BSR as follows:

IPv4
ip pim bsr-candidate < Interface-Name > [hash-mask-length] [priority]

Default priority = 0; If there are multiple routers with zero priority then highest ip address wins.

 

IPv6
ipv6 pim [vrf vrf-name] bsr candidate bsr ipv6-address [hash-mask-length] [priority priority-value]

Default priority = 0; If there are multiple routers with zero priority then highest ip address wins.

To configure a set of routers to be the RPs use:

IPv4
ip pim rp-candidate <PIM-Enabled-Interface> [group-list] [interval] [priority <0-255>].

Default priority = 0; This is really to be considered as a metric (ie lowest number wins). Zero in this case is the best priority.

Default Group-List = If you do not specify this then it means ALL addresses.


As the BSR splits the multicast address space across a number of RPs there is no need to default to highest ip address. This is called “group range to RP set mapping”.


IPv6
ipv6 pim [vrf vrf-name] bsr candidate rp ipv6-address [group-list access-list-name] [priority priority-value] [interval seconds] [scope scope-value] [bidir]


Default priority = 0; This is really to be considered as a metric (ie lowest number wins). Zero in this case is the best priority.


As the BSR splits (or load balances) the multicast address space across a number of RPs there is no need to default to highest ip address. This is called “group range to RP set mapping”. The algorithm (same for v4 and v6) to split this mapping between the RPs is described here. However the simplest way to discover which group address maps to which RP is to use the following commands:

IPv4
show ip pim rp-hash X.X.X.X

IPv6
show ipv6 pim group-map X:X:X::X






This is the network diagram I used to test the this information.





IPv6 

R2 and R5 act as the candidate BSRs
R1 is the source 
R4 is the destination
R2 and R3 are the candidate RPs

The basic multicast configuration can be found here.

To configure R2 and R5 as the candidate BSRs use the following:

R2 Config
R2#show run | i bsr
ipv6 pim bsr candidate bsr 2000:2000::2

R5 Config
R5#show run | i bsr
ipv6 pim bsr candidate bsr 2000:2000::5



R2 BSR Election Results
The output from the command below shows the details before the hop-by-hop flooding has had a chance to exchange the details.

R2#show ipv6 pim bsr election
PIMv2 BSR information

BSR Election Information
  Scope Range List: ff00::/8
     BSR Address: ::
     Uptime: 00:00:00, BSR Priority: 0, Hash mask length: 0
     RPF: ::,
     BS Timer: now
  This system is candidate BSR
      Candidate BSR address: 2000:2000::2, priority: 0, hash mask length: 126






The next output shows the election has taken place and that R5 has been 


R2#show ipv6 pim bsr election
PIMv2 BSR information

BSR Election Information
  Scope Range List: ff00::/8
     BSR Address: 2000:2000::5
     Uptime: 00:02:46, BSR Priority: 0, Hash mask length: 126
     RPF: FE80::A8BB:CCFF:FE00:6900,Ethernet0/0
     BS Timer: 00:01:23
  This system is candidate BSR
      Candidate BSR address: 2000:2000::2, priority: 0, hash mask length: 126

R5#show ipv6 pim bsr election
PIMv2 BSR information

BSR Election Information
  Scope Range List: ff00::/8
  This system is the Bootstrap Router (BSR)
     BSR Address: 2000:2000::5
     Uptime: 03:16:40, BSR Priority: 0, Hash mask length: 126
     RPF: FE80::A8BB:CCFF:FE00:6900,Ethernet0/0
     BS Timer: 00:00:58
  This system is candidate BSR
      Candidate BSR address: 2000:2000::5, priority: 0, hash mask length: 126

R3#show ipv6 pim bsr election
PIMv2 BSR information

BSR Election Information
  Scope Range List: ff00::/8
     BSR Address: 2000:2000::5
     Uptime: 00:04:28, BSR Priority: 0, Hash mask length: 126
     RPF: FE80::A8BB:CCFF:FE00:6900,Ethernet0/0
     BS Timer: 00:01:53

You can see that the priority was zero for both routers and R5 was picked as the BSR as it has the highest IPv6 Address.






To configure R2 and R5 as the candidate RPs use the following:

R2#show run | i rp
ipv6 pim bsr candidate rp 2000:2000::2
R3#show run | i rp
ipv6 pim bsr candidate rp 2000:2000::3






The command show ipv6 pim bsr candidata-rp shows the details of the candidate RP configuration on the router. If you run this on R2/R3 you get the configured details and on R5 you get nothing. This is because R5 isn't a candidate RP, Its only a BSR.

R2#show ipv6 pim bsr candidate-rp
PIMv2 C-RP information
    Candidate RP: 2000:2000::2 SM
      All Learnt Scoped Zones, Priority 192, Holdtime 150
      Advertisement interval 60 seconds
      Next advertisement in 00:00:03

R5#show ipv6 pim bsr candidate-rp
No C-RP information found


Alternatively the command show ipv6 pim bsr rp-cache shows the RP to multicast address mapping. However running this on R2/R3 shows nothing and R5 it give you all the details.




R3#show ipv6 pim bsr rp-cache
No BSR RP-Cache information found
R5#show ipv6 pim bsr rp-cache
PIMv2 BSR C-RP Cache

BSR Candidate RP Cache

Group(s) FF00::/8, RP count 2
  RP 2000:2000::2 SM
    Priority 192, Holdtime 150
    Uptime: 00:08:17, expires: 00:02:13
  RP 2000:2000::3 SM
    Priority 192, Holdtime 150
    Uptime: 00:09:06, expires: 00:02:25

In this notice that the defaults mean that both R2 and R3 are going to share the RP responsibility.

Additionally note if you look the multicast routing table you will not see any routes as BSR does not use a multicast group to flood information.

R2#show ipv6 mroute
No mroute entries found.

R5#show ipv6 mroute
No mroute entries found.


Next setup R4 to listen to the multicast group FF05::10 and R1 to send out the traffic:



R4
interface Ethernet0/1
 ip address 3.3.3.4 255.255.255.0
 ip pim sparse-mode
 ip igmp join-group 232.0.0.10 source 1.1.1.1
 ip igmp version 3
 ip ospf authentication-key ccie
 ipv6 address 2001:2001::4/64
 ipv6 mld join-group FF05::10
 ipv6 ospf 1 area 1
!


R1
R1#ping FF05::10
Output Interface: ethernet0/0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FF05::10, timeout is 2 seconds:
Packet sent with a source address of 2000:2000::1

Reply to request 0 received from 2001:2001::4, 184 ms
Reply to request 1 received from 2001:2001::4, 152 ms
Reply to request 2 received from 2001:2001::4, 0 ms
Reply to request 3 received from 2001:2001::4, 0 ms
Reply to request 4 received from 2001:2001::4, 0 ms
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/67/184 ms
5 multicast replies and 0 errors.


If you now examine the multicast routing table on R2 and R3 (the RPs sharing the load) you see that only R2 is forwading the traffic.


R2#show ipv6 mroute
Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group,
       C - Connected, L - Local, I - Received Source Specific Host Report,
       P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set,
       J - Join SPT
Timers: Uptime/Expires
Interface state: Interface, State

(*, FF05::10), 00:02:47/00:02:46, RP 2000:2000::2, flags: SC
  Incoming interface: Tunnel3
  RPF nbr: 2000:2000::2
  Immediate Outgoing interface list:
    Ethernet0/1, Forward, 00:02:47/00:02:46

(2000:2000::1, FF05::10), 00:02:01/00:01:28, flags: ST
  Incoming interface: Ethernet0/0
  RPF nbr: FE80::A8BB:CCFF:FE00:6500
  Immediate Outgoing interface list:
    Ethernet0/1, Forward, 00:02:01/00:03:26


R3#show ipv6 mroute
Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group,
       C - Connected, L - Local, I - Received Source Specific Host Report,
       P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set,
       J - Join SPT
Timers: Uptime/Expires
Interface state: Interface, State

(*, FF05::10), 00:02:51/never, RP 2000:2000::2, flags: SPC
  Incoming interface: Ethernet0/0
  RPF nbr: FE80::A8BB:CCFF:FE00:6600
  Immediate Outgoing interface list:
    Ethernet0/1, Null, 00:02:51/never

(2000:2000::1, FF05::10), 00:02:05/00:01:24, flags: SP
  Incoming interface: Ethernet0/0
  RPF nbr: FE80::A8BB:CCFF:FE00:6500
  Inherited Outgoing interface list:
    Ethernet0/1, Null, 00:02:51/never

The interesting thing to note is the multicast traffic goes R1-R2-R4 and the return unicast ICMP traffic is load balanced. Half the traffic goes R4-R2-R1 and the rest R4-R3-R1.


No comments:

Post a Comment