Mar
24

IPv6 multicast routing is a fun topic, and is often either loved or avoided :) . Here is a jump-start for all my CCIE candidate friends.

Readers digest version: “Auto-RP is out, Dense-mode is out, IGMP is replaced with Multicast Listener Discovery (MLD). MLDv2 supports SSM. RPs, Bi-directional PIM, SSM, ASM and BSRs are still alive and well, and we can now avoid static RPs and BSR if we choose to use embedded RP within the multicast packets themselves. (Crazy and amazing stuff).

Want a little more? Then read on. In this multi-part blog, we will discuss static RP, BSR, and Embedded RP. This first blog will discuss static RP, with some examples that will assist you in getting started.  For those of you who subscribe the open lecture series, I will be including all three RP options in a discussion there as well.

Here is the topology we will use:

IPV6 Multicasting

Here is some additional info on the topology. There is a loopback 0 interface on each router using 2002:yyyy::y/64, where y = the router number. We also hard coded the MAC addresses to 00yy.yyyy.yyyy so that they would be easy to spot. OSPFv3 is running on each interface shown in the diagram including the loopbacks. Let’s verify some basic addressing and connectivity before we add IPv6 multicast routing to the mix.

R3#show ipv6 int brief
FastEthernet0/0            [up/up]
FE80::233:33FF:FE33:3333
2002:34::3
Serial0/1                  [up/up]
Serial0/1.23               [up/up]
FE80::C003:8FF:FECC:0
2002:23::3
Loopback0                  [up/up]
FE80::C003:8FF:FECC:0
2002:3333::3

R3#show ipv6 route ospf
IPv6 Routing Table - 17 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
U - Per-user Static route, M - MIPv6
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
D - EIGRP, EX - EIGRP external
O   2002:12::/64 [110/5]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:14::/64 [110/65]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:16::/64 [110/4]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:45::/64 [110/2]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:56::/64 [110/3]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:1111::1/128 [110/4]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:2222::2/128 [110/5]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:4444::4/128 [110/1]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:5555::5/128 [110/2]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
O   2002:6666::6/128 [110/3]
via FE80::244:44FF:FE44:4444, FastEthernet0/0
R3#

Looks like everything is there. Lets do an IPv6 traceroute to verify. Note the path that begins from R3, then through R4 -> R5 -> R6 -> R1 -> R2. That is the path the OSPFv3 control plane sorted out. It will be important later, when we see what the RPF path is from R3 to R2.

R3#traceroute ipv6 2002:2222::2

Type escape sequence to abort.
Tracing the route to 2002:2222::2

1 2002:34::4 80 msec 28 msec 4 msec
2 2002:45::5 44 msec 40 msec 24 msec
3 2002:56::6 4 msec 32 msec 32 msec
4 2002:16::1 40 msec 28 msec 24 msec
5 2002:2222::2 84 msec 8 msec 20 msec
R3#

OK, I am sold that we have connectivity. Lets verify that PIM, MLD and Multicast-Routing is not currently enabled yet.

R3#show ipv6 pim interface
No interfaces found.

R3#show ipv6 mld interface

FastEthernet0/0 is up, line protocol is up
Internet address is FE80::233:33FF:FE33:3333/10
MLD is disabled on interface

Loopback0 is up, line protocol is up
Internet address is FE80::C003:8FF:FECC:0/10
MLD is disabled on interface
Serial0/1.23 is up, line protocol is up
Internet address is FE80::C003:8FF:FECC:0/10
MLD is disabled on interface
R3#

Lets enable ipv6 multicast routing, and see the difference on R3.

R3(config)#ipv6 multicast-routing

R3#show ipv6 pim interface
Interface          PIM  Nbr   Hello  DR
Count Intvl  Prior

Tunnel0            off  0     30     1
Address: FE80::C003:8FF:FECC:0
DR     : not elected

FastEthernet0/0    on   0     30     1
Address: FE80::233:33FF:FE33:3333
DR     : this system

Loopback0          on   0     30     1
Address: FE80::C003:8FF:FECC:0
DR     : this system
Serial0/1.23       on   0     30     1
Address: FE80::C003:8FF:FECC:0
DR     : this system

R3#show ipv6 mld interface
Tunnel0 is up, line protocol is up
Internet address is FE80::C003:8FF:FECC:0/10
MLD is disabled on interface

FastEthernet0/0 is up, line protocol is up
Internet address is FE80::233:33FF:FE33:3333/10
MLD is enabled on interface
Current MLD version is 2
MLD query interval is 125 seconds
MLD querier timeout is 255 seconds
MLD max query response time is 10 seconds
Last member query response interval is 1 seconds
MLD activity: 9 joins, 0 leaves
MLD querying router is FE80::233:33FF:FE33:3333 (this system)

Loopback0 is up, line protocol is up
Internet address is FE80::C003:8FF:FECC:0/10
MLD is enabled on interface
Current MLD version is 2
MLD query interval is 125 seconds
MLD querier timeout is 255 seconds
MLD max query response time is 10 seconds
Last member query response interval is 1 seconds
MLD activity: 6 joins, 0 leaves
MLD querying router is FE80::C003:8FF:FECC:0 (this system)
Serial0/1.23 is up, line protocol is up
Internet address is FE80::C003:8FF:FECC:0/10
MLD is enabled on interface
Current MLD version is 2
MLD query interval is 125 seconds
MLD querier timeout is 255 seconds
MLD max query response time is 10 seconds
Last member query response interval is 1 seconds
MLD activity: 7 joins, 0 leaves
MLD querying router is FE80::C003:8FF:FECC:0 (this system)

R3#

Just adding the global command of “ipv6 multicast-routing” enabled MLD on the interfaces, and enabled PIM as well. The tunnel created is used to send register messages to RPs when multicast content is seen. The command was so easy, I added the command to the other 5 routers as well. (Not shown here, but if you want to see it, just revisit the previous command in the previous example 5 more times.  :)

Now we can take a look at some additional information such as the tunnel interface that was created and neighborships from a PIM perspective.

R3#show ipv6 int brief
FastEthernet0/0            [up/up]
FE80::233:33FF:FE33:3333
2002:34::3
Serial0/1                  [up/up]
Serial0/1.23               [up/up]
FE80::C003:8FF:FECC:0
2002:23::3
Loopback0                  [up/up]
FE80::C003:8FF:FECC:0
2002:3333::3
Tunnel0 [up/up] FE80::C003:8FF:FECC:0 unnumbered (FastEthernet0/0)

R3#show ipv6 pim neighbor
Neighbor Address           Interface          Uptime    Expires DR pri Bidir

FE80::244:44FF:FE44:4444   FastEthernet0/0    00:00:55  00:01:21 1 (DR) B
FE80::C002:8FF:FECC:0      Serial0/1.23       00:00:57  00:01:18 1      B

R3#

Looks like R4 won the DR election on the FA0/0 segment. All is fair in love and multicast.   (Earlier, before R4 was enabled for multicast routing, R3 was the DR, and R4 is now the DR for the segment due to a higher IP address on R4).
Next we will set up hard code an RP for the entire domain to use. R2’s loopback0 will do fine. We will use the following command on R2, as well as all the other 5 routers.

R2(config)#ipv6 pim rp-address 2002:2222::2
%SYS-5-CONFIG_I: Configured from console by console
%LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel1, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel2, changed state to up
R2#

On R2, PIM tunnels are automagically created. These are used for initial register messages. In sparse mode, the RP will build a shortest path tree (by default), in the direction of the multicast source.

R2#show ipv6 pim tunnel
Tunnel0*
Type  : PIM Encap
RP    : Embedded RP Tunnel
Source: 2002:12::2
Tunnel1*
Type  : PIM Encap
RP    : 2002:2222::2*
Source: 2002:12::2
Tunnel2*
Type  : PIM Decap
RP    : 2002:2222::2*
Source:  -

R2#

Lets see if everyone agrees that R2 should be the RP. They should, since we hard coded it on all 6 routers. We will do a quick check on R3. All the others should be similar.

R3#show ipv6 pim group-map ff00::/8
IP PIM Group Mapping Table
(* indicates group mappings being used)

FF00::/8*
SM, RP: 2002:2222::2
RPF: Fa0/0,FE80::244:44FF:FE44:4444
Info source: Static
Uptime: 00:04:44, Groups: 0
FF00::/8
SM
Info source: Default
Uptime: 00:17:22, Groups: 0

R3#

Sweet! Since we are on R3, let’s have R3’s loopback 0 interface join a multicast group. IGMP has been replaced in IPv6 multicast with Multicast Listener Discovery (MLD), which uses IPv6 ICMP for communications. Lets use the group of FF08:AAAA::1.

R3(config)#int lo 0
R3(config-if)#ipv6 mld join-group FF08:AAAA::1

Lets look at the mroute table. It appears that R3 is ready willing and able to get that stream of traffic. We should follow the path upstream, and see if the join went all the way to R2, (the RP).

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

(*, FF08:AAAA::1), 00:00:32/never, RP 2002:2222::2, flags: SCLJ Incoming interface: FastEthernet0/0 RPF nbr: FE80::244:44FF:FE44:4444 Immediate Outgoing interface list: Loopback0, Forward, 00:00:32/never
R3#

R4#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

(*, FF08:AAAA::1), 00:02:40/00:02:47, RP 2002:2222::2, flags: S Incoming interface: FastEthernet0/1 RPF nbr: FE80::255:55FF:FE55:5555 Immediate Outgoing interface list: FastEthernet0/0, Forward, 00:02:40/00:02:47 R4#

R5#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

(*, FF08:AAAA::1), 00:02:57/00:03:27, RP 2002:2222::2, flags: S Incoming interface: FastEthernet0/0 RPF nbr: FE80::266:66FF:FE66:6666 Immediate Outgoing interface list: FastEthernet0/1, Forward, 00:02:57/00:03:27
R5#

R6#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

(*, FF08:AAAA::1), 00:03:17/00:03:08, RP 2002:2222::2, flags: S Incoming interface: FastEthernet0/1 RPF nbr: FE80::211:11FF:FE11:1111 Immediate Outgoing interface list: FastEthernet0/0, Forward, 00:03:17/00:03:08
R6#

R1#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

(*, FF08:AAAA::1), 00:03:39/00:02:47, RP 2002:2222::2, flags: S Incoming interface: FastEthernet0/0 RPF nbr: FE80::222:22FF:FE22:2222 Immediate Outgoing interface list: FastEthernet0/1, Forward, 00:03:39/00:02:47
R1#

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

(*, FF08:AAAA::1), 00:04:05/00:03:25, RP 2002:2222::2, flags: S Incoming interface: Tunnel2 RPF nbr: 2002:2222::2 Immediate Outgoing interface list: FastEthernet0/0, Forward, 00:04:05/00:03:25 R2#

Looks like the join for that group went all the way back to the RP. (One of the reasons I did the traceroute earlier, was to show the unicast routing path for IPv6). Notice that the RPF path back to the RP of 2002:2222::2, follows the same path the traceroute did. Convenient, isn’t it.

Ok, so now we just need some content. We can use R6 to emulate a mcast server for that group, by doing a ping. First lets do a debug of ipv6 pim on the RP, R2.

R2#debug ipv6 pim
IPv6 PIM debugging is on

Now a ping from R6.

R6#ping ff08:aaaa::1
Output Interface: Fastethernet0/0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FF08:AAAA::1, timeout is 2 seconds:
Packet sent with a source address of 2002:56::6

Reply to request 0 received from 2002:3333::3, 248 ms
Reply to request 1 received from 2002:3333::3, 64 ms
Reply to request 2 received from 2002:3333::3, 80 ms
Reply to request 3 received from 2002:3333::3, 72 ms
Reply to request 4 received from 2002:3333::3, 84 ms
Success rate is 100 percent (5/5), round-trip min/avg/max = 64/109/248 ms
5 multicast replies and 0 errors.

Cool. Lets look at the debug output on the RP.

IPv6 PIM: Received J/P on FastEthernet0/0 from FE80::211:11FF:FE11:1111 target: FE80::222:22FF:FE22:2222 (to us)
IPv6 PIM: J/P entry: Join root: 2002:2222::2 group: FF08:AAAA::1 flags:  RPT WC S
IPv6 PIM: (*,FF08:AAAA::1) FastEthernet0/0 Raise J/P expiration timer to 210 seconds

Lets also investigate R5, in the path between R6 (the mcast server) and the R3 (who joined the group)

R5#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

(*, FF08:AAAA::1), 00:11:18/00:03:06, RP 2002:2222::2, flags: S
Incoming interface: FastEthernet0/0
RPF nbr: FE80::266:66FF:FE66:6666
Immediate Outgoing interface list:
FastEthernet0/1, Forward, 00:11:18/00:03:06

(2002:56::6, FF08:AAAA::1), 00:03:09/00:00:20, flags: ST Incoming interface: FastEthernet0/0 RPF nbr: FE80::266:66FF:FE66:6666 Immediate Outgoing interface list: FastEthernet0/1, Forward, 00:03:08/00:03:16
R5#

Another command that provides additional information is the show ipv6 pim topology command.

R5#show ipv6 pim topology
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive,
RA - Really Alive, LH - Last Hop, DSS - Don't Signal Sources,
RR - Register Received, SR - Sending Registers, E - MSDP External,
DCC - Don't Check Connected
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Disinterest,
II - Internal Interest, ID - Internal Disinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary

(*,FF08:AAAA::1)
SM UP: 00:11:53 JP: Join(now) Flags:
RP: 2002:2222::2
RPF: FastEthernet0/0,FE80::266:66FF:FE66:6666
FastEthernet0/1    00:11:53  fwd Join(00:02:31)

(2002:56::6,FF08:AAAA::1) SM SPT UP: 00:03:44 JP: Join(never) Flags: KAT(00:00:50) AA PA RA RPF: FastEthernet0/0,FE80::266:66FF:FE66:6666* FastEthernet0/1 00:03:44 fwd Join(00:02:41)
R5#

That’s a great little jumpstart into IPv6 multicast.

One item of note, is that hard coding the RP is not very scalable. The other options include BSR and Embedded RP (where the actual multicast traffic has the RP embedded within the packet itself). I will include those examples in another blog post. Or if you can’t wait, jump right into our RS workbooks for a wealth of information, insight and practice labs to improve your Tier1, Tier2 and Tier3 skills.

Any skills you develop in IPv4 multicasting will greatly assist you with the IPv6 multicasting, and they are both on the blueprint.

Best wishes.


You can leave a response, or trackback from your own site.

13 Responses to “Static RP, BSR RP, Embedded RP, oh My! IPv6 Multicasting”

 
  1. C. says:

    How do You guys do this ?
    Do You ever sleep ?

    Excellent Article.
    Cant wait to hear more, especialy the part with embedded RP.

    Cheers,..
    /Christian.

  2. Nadeem Rafi says:

    thanks for this great article. I hope to see more info tonight with OLS :)

  3. Terry Vinson says:

    Fantastic Article! Also great advice about understanding IPv4 before looking at IPv6 MCast. The easiest and best way to manage a topic like this is little at a time.

    Thanks!

  4. shivlu jain says:

    Hi

    Really a good jump start.

  5. [...] Static RP, BSR RP, Embedded RP, oh My! IPv6 Multicasting [...]

  6. [...] Static RP, BSR RP, Embedded RP, oh My! IPv6 Multicasting [...]

  7. Freddy Cárdenas says:

    I have a question about the RP embedded post, can you ping from R2 to R3?

  8. Shivlu – Yes, they have IPv6 connectivity.

  9. Freddy Cárdenas says:

    Thanks for the answer, but I wanted to know if R2 can ping to the multicast group… this way:
    R2#ping ff7e:640:2002:6666::1
    I couldn’t do it in my simulation.

  10. Hello Freddy-

    Next time I have that topology built, I can verify that for you.

  11. Chris Welsh says:

    Fantastic work – best I’ve found on IPv6 multicasting (after much searching). Thank you!. I’ve built your lab in GNS3 and it works beautifully. Now on to BSR.

  12. SOJ says:

    Thanks

    Can you help with steps so the RP will be RP only for a specific ipv6 multicast group and not for other groups. A simple test will be to ping the group RP has and to see that as successful while pinging a wrong group should see that failed. And of course a router can join those two groups. Regards

  13. amit3bcec says:

    Excellent article!!!

 

Leave a Reply

Categories

CCIE Bloggers