]> git.proxmox.com Git - mirror_frr.git/blob - doc/user/pim.rst
Merge pull request #9023 from idryzhov/static-nb
[mirror_frr.git] / doc / user / pim.rst
1 .. _pim:
2
3 ***
4 PIM
5 ***
6
7 PIM -- Protocol Independent Multicast
8
9 *pimd* supports pim-sm as well as igmp v2 and v3. pim is
10 vrf aware and can work within the context of vrf's in order to
11 do S,G mrouting. Additionally PIM can be used in the EVPN underlay
12 network for optimizing forwarding of overlay BUM traffic.
13
14 .. note::
15
16 On Linux for PIM-SM operation you *must* have kernel version 4.18 or greater.
17 To use PIM for EVPN BUM forwarding, kernels 5.0 or greater are required.
18 OpenBSD has no multicast support and FreeBSD, and NetBSD only
19 have support for SSM.
20
21 .. _starting-and-stopping-pimd:
22
23 Starting and Stopping pimd
24 ==========================
25
26 The default configuration file name of *pimd*'s is :file:`pimd.conf`. When
27 invoked *pimd* searches directory |INSTALL_PREFIX_ETC|. If
28 :file:`pimd.conf` is not there then next search current directory.
29
30 *pimd* requires zebra for proper operation. Additionally *pimd* depends on
31 routing properly setup and working in the network that it is working on.
32
33 ::
34
35 # zebra -d
36 # pimd -d
37
38
39 Please note that *zebra* must be invoked before *pimd*.
40
41 To stop *pimd* please use::
42
43 kill `cat /var/run/pimd.pid`
44
45 Certain signals have special meanings to *pimd*.
46
47 +---------+---------------------------------------------------------------------+
48 | Signal | Meaning |
49 +=========+=====================================================================+
50 | SIGUSR1 | Rotate the *pimd* logfile |
51 +---------+---------------------------------------------------------------------+
52 | SIGINT | *pimd* sweeps all installed PIM mroutes then terminates gracefully. |
53 | SIGTERM | |
54 +---------+---------------------------------------------------------------------+
55
56 *pimd* invocation options. Common options that can be specified
57 (:ref:`common-invocation-options`).
58
59 .. clicmd:: ip pim rp A.B.C.D A.B.C.D/M
60
61 In order to use pim, it is necessary to configure a RP for join messages to
62 be sent to. Currently the only methodology to do this is via static rp
63 commands. All routers in the pim network must agree on these values. The
64 first ip address is the RP's address and the second value is the matching
65 prefix of group ranges covered. This command is vrf aware, to configure for
66 a vrf, enter the vrf submode.
67
68 .. clicmd:: ip pim register-accept-list PLIST
69
70 When pim receives a register packet the source of the packet will be compared
71 to the prefix-list specified, PLIST, and if a permit is received normal
72 processing continues. If a deny is returned for the source address of the
73 register packet a register stop message is sent to the source.
74
75 .. clicmd:: ip pim spt-switchover infinity-and-beyond
76
77 On the last hop router if it is desired to not switch over to the SPT tree.
78 Configure this command. This command is vrf aware, to configure for a vrf,
79 enter the vrf submode.
80
81 .. clicmd:: ip pim ecmp
82
83 If pim has the a choice of ECMP nexthops for a particular RPF, pim will
84 cause S,G flows to be spread out amongst the nexthops. If this command is
85 not specified then the first nexthop found will be used. This command is vrf
86 aware, to configure for a vrf, enter the vrf submode.
87
88 .. clicmd:: ip pim ecmp rebalance
89
90 If pim is using ECMP and an interface goes down, cause pim to rebalance all
91 S,G flows across the remaining nexthops. If this command is not configured
92 pim only modifies those S,G flows that were using the interface that went
93 down. This command is vrf aware, to configure for a vrf, enter the vrf
94 submode.
95
96 .. clicmd:: ip pim join-prune-interval (5-600)
97
98 Modify the join/prune interval that pim uses to the new value. Time is
99 specified in seconds. This command is vrf aware, to configure for a vrf,
100 enter the vrf submode. The default time is 60 seconds. If you enter
101 a value smaller than 60 seconds be aware that this can and will affect
102 convergence at scale.
103
104 .. clicmd:: ip pim keep-alive-timer (31-60000)
105
106 Modify the time out value for a S,G flow from 31-60000 seconds. 31 seconds
107 is chosen for a lower bound because some hardware platforms cannot see data
108 flowing in better than 30 second chunks. This command is vrf aware, to
109 configure for a vrf, enter the vrf submode.
110
111 .. clicmd:: ip pim packets (1-100)
112
113 When processing packets from a neighbor process the number of packets
114 incoming at one time before moving on to the next task. The default value is
115 3 packets. This command is only useful at scale when you can possibly have
116 a large number of pim control packets flowing. This command is vrf aware, to
117 configure for a vrf, enter the vrf submode.
118
119 .. clicmd:: ip pim register-suppress-time (5-60000)
120
121 Modify the time that pim will register suppress a FHR will send register
122 notifications to the kernel. This command is vrf aware, to configure for a
123 vrf, enter the vrf submode.
124
125 .. clicmd:: ip pim send-v6-secondary
126
127 When sending pim hello packets tell pim to send any v6 secondary addresses
128 on the interface. This information is used to allow pim to use v6 nexthops
129 in it's decision for RPF lookup. This command is vrf aware, to configure for
130 a vrf, enter the vrf submode.
131
132 .. clicmd:: ip pim ssm prefix-list WORD
133
134 Specify a range of group addresses via a prefix-list that forces pim to
135 never do SM over. This command is vrf aware, to configure for a vrf, enter
136 the vrf submode.
137
138 .. clicmd:: ip multicast rpf-lookup-mode WORD
139
140 Modify how PIM does RPF lookups in the zebra routing table. You can use
141 these choices:
142
143 longer-prefix
144 Lookup the RPF in both tables using the longer prefix as a match
145
146 lower-distance
147 Lookup the RPF in both tables using the lower distance as a match
148
149 mrib-only
150 Lookup in the Multicast RIB only
151
152 mrib-then-urib
153 Lookup in the Multicast RIB then the Unicast Rib, returning first found.
154 This is the default value for lookup if this command is not entered
155
156 urib-only
157 Lookup in the Unicast Rib only.
158
159 .. clicmd:: ip igmp generate-query-once [version (2-3)]
160
161 Generate IGMP query (v2/v3) on user requirement. This will not depend on
162 the existing IGMP general query timer.If no version is provided in the cli,
163 it will be considered as default v2 query.This is a hidden command.
164
165 .. clicmd:: ip igmp watermark-warn (10-60000)
166
167 Configure watermark warning generation for an igmp group limit. Generates
168 warning once the configured group limit is reached while adding new groups.
169 'no' form of the command disables the warning generation. This command is
170 vrf aware. To configure per vrf, enter vrf submode.
171
172 .. _pim-interface-configuration:
173
174 PIM Interface Configuration
175 ===========================
176
177 PIM interface commands allow you to configure an interface as either a Receiver
178 or a interface that you would like to form pim neighbors on. If the interface
179 is in a vrf, enter the interface command with the vrf keyword at the end.
180
181 .. clicmd:: ip pim active-active
182
183 Turn on pim active-active configuration for a Vxlan interface. This
184 command will not do anything if you do not have the underlying ability
185 of a mlag implementation.
186
187 .. clicmd:: ip pim bsm
188
189 Tell pim that we would like to use this interface to process bootstrap
190 messages. This is enabled by default. 'no' form of this command is used to
191 restrict bsm messages on this interface.
192
193 .. clicmd:: ip pim unicast-bsm
194
195 Tell pim that we would like to allow interface to process unicast bootstrap
196 messages. This is enabled by default. 'no' form of this command is used to
197 restrict processing of unicast bsm messages on this interface.
198
199 .. clicmd:: ip pim drpriority (1-4294967295)
200
201 Set the DR Priority for the interface. This command is useful to allow the
202 user to influence what node becomes the DR for a lan segment.
203
204 .. clicmd:: ip pim hello (1-180) (1-630)
205
206 Set the pim hello and hold interval for a interface.
207
208 .. clicmd:: ip pim
209
210 Tell pim that we would like to use this interface to form pim neighbors
211 over. Please note that this command does not enable the reception of IGMP
212 reports on the interface. Refer to the next `ip igmp` command for IGMP
213 management.
214
215 .. clicmd:: ip pim use-source A.B.C.D
216
217 If you have multiple addresses configured on a particular interface
218 and would like pim to use a specific source address associated with
219 that interface.
220
221 .. clicmd:: ip igmp
222
223 Tell pim to receive IGMP reports and Query on this interface. The default
224 version is v3. This command is useful on a LHR.
225
226 .. clicmd:: ip igmp join A.B.C.D [A.B.C.D]
227
228 Join multicast group or source-group on an interface.
229
230 .. clicmd:: ip igmp query-interval (1-1800)
231
232 Set the IGMP query interval that PIM will use.
233
234 .. clicmd:: ip igmp query-max-response-time (10-250)
235
236 Set the IGMP query response timeout value. If an report is not returned in
237 the specified time we will assume the S,G or \*,G has timed out.
238
239 .. clicmd:: ip igmp version (2-3)
240
241 Set the IGMP version used on this interface. The default value is 3.
242
243 .. clicmd:: ip multicast boundary oil WORD
244
245 Set a pim multicast boundary, based upon the WORD prefix-list. If a pim join
246 or IGMP report is received on this interface and the Group is denied by the
247 prefix-list, PIM will ignore the join or report.
248
249 .. clicmd:: ip igmp last-member-query-count (1-7)
250
251 Set the IGMP last member query count. The default value is 2. 'no' form of
252 this command is used to to configure back to the default value.
253
254 .. clicmd:: ip igmp last-member-query-interval (1-255)
255
256 Set the IGMP last member query interval in deciseconds. The default value is
257 10 deciseconds. 'no' form of this command is used to to configure back to the
258 default value.
259
260 .. clicmd:: ip mroute INTERFACE A.B.C.D [A.B.C.D]
261
262 Set a static multicast route for a traffic coming on the current interface to
263 be forwarded on the given interface if the traffic matches the group address
264 and optionally the source address.
265
266
267 .. seealso::
268
269 :ref:`bfd-pim-peer-config`
270
271
272 .. _pim-multicast-rib:
273
274 PIM Multicast RIB
275 =================
276
277 In order to influence Multicast RPF lookup, it is possible to insert
278 into zebra routes for the Multicast RIB. These routes are only
279 used for RPF lookup and will not be used by zebra for insertion
280 into the kernel *or* for normal rib processing. As such it is
281 possible to create weird states with these commands. Use with
282 caution. Most of the time this will not be necessary.
283
284 .. clicmd:: ip mroute A.B.C.D/M A.B.C.D (1-255)
285
286 Insert into the Multicast Rib Route A.B.C.D/M with specified nexthop. The
287 distance can be specified as well if desired.
288
289 .. clicmd:: ip mroute A.B.C.D/M INTERFACE (1-255)
290
291 Insert into the Multicast Rib Route A.B.C.D/M using the specified INTERFACE.
292 The distance can be specified as well if desired.
293
294 .. _msdp-configuration:
295
296 Multicast Source Discovery Protocol (MSDP) Configuration
297 ========================================================
298
299 MSDP can be setup in different ways:
300
301 * MSDP meshed-group: where all peers are connected with each other creating
302 a fully meshed network. SAs (source active) messages are not forwarded in
303 this mode because the origin is able to send SAs to all members.
304
305 This setup is commonly used with anycast.
306
307 * MSDP peering: when there is one or more peers that are not fully meshed. SAs
308 may be forwarded depending on the result of filtering and RPF checks.
309
310 This setup is commonly consistent with BGP peerings (for RPF checks).
311
312 * MSDP default peer: there is only one peer and all SAs will be forwarded
313 there.
314
315 .. note::
316
317 MSDP default peer and SA filtering is not implemented.
318
319
320 Commands available for MSDP:
321
322 .. clicmd:: ip msdp timers (2-600) (3-600) [(1-600)]
323
324 Configure global MSDP timers.
325
326 First value is the keep-alive interval and it must be less than the
327 second value which is hold-time. This configures the interval in
328 seconds between keep-alive messages. The default value is 60 seconds.
329
330 Second value is the hold-time and it must be greater than the keep-alive
331 interval. This configures the interval in seconds before closing a non
332 responding connection. The default value is 75.
333
334 Third value is the connection retry interval and it is optional. This
335 configures the interval between connection attempts. The default value
336 is 30 seconds.
337
338 .. clicmd:: ip msdp mesh-group WORD member A.B.C.D
339
340 Create or update a mesh group to include the specified MSDP peer.
341
342 .. clicmd:: ip msdp mesh-group WORD source A.B.C.D
343
344 Create or update a mesh group to set the source address used to connect to
345 peers.
346
347 .. clicmd:: ip msdp peer A.B.C.D source A.B.C.D
348
349 Create a regular MSDP session with peer using the specified source address.
350
351
352 .. _show-pim-information:
353
354 Show PIM Information
355 ====================
356
357 All PIM show commands are vrf aware and typically allow you to insert a
358 specified vrf command if information is desired about a specific vrf. If no
359 vrf is specified then the default vrf is assumed. Finally the special keyword
360 'all' allows you to look at all vrfs for the command. Naming a vrf 'all' will
361 cause great confusion.
362
363 .. clicmd:: show ip igmp interface
364
365 Display IGMP interface information.
366
367 .. clicmd:: show ip igmp [vrf NAME] join [json]
368
369 Display IGMP static join information for a specific vrf.
370 If "vrf all" is provided, it displays information for all the vrfs present.
371
372 .. clicmd:: show ip igmp groups
373
374 Display IGMP groups information.
375
376 .. clicmd:: show ip igmp groups retransmissions
377
378 Display IGMP group retransmission information.
379
380 .. clicmd:: show ip igmp sources
381
382 Display IGMP sources information.
383
384 .. clicmd:: show ip igmp sources retransmissions
385
386 Display IGMP source retransmission information.
387
388 .. clicmd:: show ip igmp statistics
389
390 Display IGMP statistics information.
391
392 .. clicmd:: show ip multicast
393
394 Display various information about the interfaces used in this pim instance.
395
396 .. clicmd:: show ip mroute [vrf NAME] [A.B.C.D [A.B.C.D]] [fill] [json]
397
398 Display information about installed into the kernel S,G mroutes. If
399 one address is specified we assume it is the Group we are interested
400 in displaying data on. If the second address is specified then it is
401 Source Group. The keyword `fill` says to fill in all assumed data
402 for test/data gathering purposes.
403
404 .. clicmd:: show ip mroute [vrf NAME] count [json]
405
406 Display information about installed into the kernel S,G mroutes and in
407 addition display data about packet flow for the mroutes for a specific
408 vrf.
409
410 .. clicmd:: show ip mroute vrf all count [json]
411
412 Display information about installed into the kernel S,G mroutes and in
413 addition display data about packet flow for the mroutes for all vrfs.
414
415 .. clicmd:: show ip mroute [vrf NAME] summary [json]
416
417 Display total number of S,G mroutes and number of S,G mroutes installed
418 into the kernel for a specific vrf.
419
420 .. clicmd:: show ip mroute vrf all summary [json]
421
422 Display total number of S,G mroutes and number of S,G mroutes
423 installed into the kernel for all vrfs.
424
425 .. clicmd:: show ip msdp mesh-group
426
427 Display the configured mesh-groups, the local address associated with each
428 mesh-group, the peer members included in each mesh-group, and their status.
429
430 .. clicmd:: show ip msdp peer
431
432 Display information about the MSDP peers. That includes the peer address,
433 the local address used to establish the connection to the peer, the
434 connection status, and the number of active sources.
435
436 .. clicmd:: show ip pim assert
437
438 Display information about asserts in the PIM system for S,G mroutes.
439
440 .. clicmd:: show ip pim assert-internal
441
442 Display internal assert state for S,G mroutes
443
444 .. clicmd:: show ip pim assert-metric
445
446 Display metric information about assert state for S,G mroutes
447
448 .. clicmd:: show ip pim assert-winner-metric
449
450 Display winner metric for assert state for S,G mroutes
451
452 .. clicmd:: show ip pim group-type
453
454 Display SSM group ranges.
455
456 .. clicmd:: show ip pim interface
457
458 Display information about interfaces PIM is using.
459
460 .. clicmd:: show ip pim mlag [vrf NAME|all] interface [detail|WORD] [json]
461
462 Display mlag interface information.
463
464 .. clicmd:: show ip pim join
465
466 Display information about PIM joins received. If one address is specified
467 then we assume it is the Group we are interested in displaying data on.
468 If the second address is specified then it is Source Group.
469
470 .. clicmd:: show ip pim local-membership
471
472 Display information about PIM interface local-membership.
473
474 .. clicmd:: show ip pim mlag summary [json]
475
476 Display mlag information state that PIM is keeping track of.
477
478 .. clicmd:: show ip pim neighbor
479
480 Display information about PIM neighbors.
481
482 .. clicmd:: show ip pim nexthop
483
484 Display information about pim nexthops that are being used.
485
486 .. clicmd:: show ip pim nexthop-lookup
487
488 Display information about a S,G pair and how the RPF would be chosen. This
489 is especially useful if there are ECMP's available from the RPF lookup.
490
491 .. clicmd:: show ip pim rp-info
492
493 Display information about RP's that are configured on this router.
494
495 .. clicmd:: show ip pim rpf
496
497 Display information about currently being used S,G's and their RPF lookup
498 information. Additionally display some statistics about what has been
499 happening on the router.
500
501 .. clicmd:: show ip pim secondary
502
503 Display information about an interface and all the secondary addresses
504 associated with it.
505
506 .. clicmd:: show ip pim state
507
508 Display information about known S,G's and incoming interface as well as the
509 OIL and how they were chosen.
510
511 .. clicmd:: show ip pim [vrf NAME] upstream [A.B.C.D [A.B.C.D]] [json]
512
513 Display upstream information about a S,G mroute. Allow the user to
514 specify sub Source and Groups that we are only interested in.
515
516 .. clicmd:: show ip pim upstream-join-desired
517
518 Display upstream information for S,G's and if we desire to
519 join the multicast tree
520
521 .. clicmd:: show ip pim upstream-rpf
522
523 Display upstream information for S,G's and the RPF data associated with them.
524
525 .. clicmd:: show ip pim [vrf NAME] mlag upstream [A.B.C.D [A.B.C.D]] [json]
526
527 Display upstream entries that are synced across MLAG switches.
528 Allow the user to specify sub Source and Groups address filters.
529
530 .. clicmd:: show ip pim mlag summary
531
532 Display PIM MLAG (multi-chassis link aggregation) session status and
533 control message statistics.
534
535 .. clicmd:: show ip pim bsr
536
537 Display current bsr, its uptime and last received bsm age.
538
539 .. clicmd:: show ip pim bsrp-info
540
541 Display group-to-rp mappings received from E-BSR.
542
543 .. clicmd:: show ip pim bsm-database
544
545 Display all fragments ofstored bootstrap message in user readable format.
546
547 .. clicmd:: mtrace A.B.C.D [A.B.C.D]
548
549 Display multicast traceroute towards source, optionally for particular group.
550
551 .. clicmd:: show ip multicast count [vrf NAME] [json]
552
553 Display multicast data packets count per interface for a vrf.
554
555 .. clicmd:: show ip multicast count vrf all [json]
556
557 Display multicast data packets count per interface for all vrf.
558
559
560 .. seealso::
561
562 :ref:`multicast-rib-commands`
563
564
565 PIM Debug Commands
566 ==================
567
568 The debugging subsystem for PIM behaves in accordance with how FRR handles
569 debugging. You can specify debugging at the enable CLI mode as well as the
570 configure CLI mode. If you specify debug commands in the configuration cli
571 mode, the debug commands can be persistent across restarts of the FRR pimd if
572 the config was written out.
573
574 .. clicmd:: debug igmp
575
576 This turns on debugging for IGMP protocol activity.
577
578 .. clicmd:: debug mtrace
579
580 This turns on debugging for mtrace protocol activity.
581
582 .. clicmd:: debug mroute
583
584 This turns on debugging for PIM interaction with kernel MFC cache.
585
586 .. clicmd:: debug pim events
587
588 This turns on debugging for PIM system events. Especially timers.
589
590 .. clicmd:: debug pim nht
591
592 This turns on debugging for PIM nexthop tracking. It will display
593 information about RPF lookups and information about when a nexthop changes.
594
595 .. clicmd:: debug pim packet-dump
596
597 This turns on an extraordinary amount of data. Each pim packet sent and
598 received is dumped for debugging purposes. This should be considered a
599 developer only command.
600
601 .. clicmd:: debug pim packets
602
603 This turns on information about packet generation for sending and about
604 packet handling from a received packet.
605
606 .. clicmd:: debug pim trace
607
608 This traces pim code and how it is running.
609
610 .. clicmd:: debug pim bsm
611
612 This turns on debugging for BSR message processing.
613
614 .. clicmd:: debug pim zebra
615
616 This gathers data about events from zebra that come up through the ZAPI.
617
618 PIM Clear Commands
619 ==================
620 Clear commands reset various variables.
621
622 .. clicmd:: clear ip interfaces
623
624 Reset interfaces.
625
626 .. clicmd:: clear ip igmp interfaces
627
628 Reset IGMP interfaces.
629
630 .. clicmd:: clear ip mroute
631
632 Reset multicast routes.
633
634 .. clicmd:: clear ip mroute [vrf NAME] count
635
636 When this command is issued, reset the counts of data shown for
637 packet count, byte count and wrong interface to 0 and start count
638 up from this spot.
639
640 .. clicmd:: clear ip pim interfaces
641
642 Reset PIM interfaces.
643
644 .. clicmd:: clear ip pim oil
645
646 Rescan PIM OIL (output interface list).
647
648 .. clicmd:: clear ip pim [vrf NAME] bsr-data
649
650 This command will clear the BSM scope data struct. This command also
651 removes the next hop tracking for the bsr and resets the upstreams
652 for the dynamically learnt RPs.
653
654 PIM EVPN configuration
655 ======================
656 To use PIM in the underlay for overlay BUM forwarding associate a multicast
657 group with the L2 VNI. The actual configuration is based on your distribution.
658 Here is an ifupdown2 example::
659
660 auto vx-10100
661 iface vx-10100
662 vxlan-id 10100
663 bridge-access 100
664 vxlan-local-tunnelip 27.0.0.11
665 vxlan-mcastgrp 239.1.1.100
666
667 .. note::
668
669 PIM will see the ``vxlan-mcastgrp`` configuration and auto configure state
670 to properly forward BUM traffic.
671
672 PIM also needs to be configured in the underlay to allow the BUM MDT to be
673 setup. This is existing PIM configuration:
674
675 - Enable pim on the underlay L3 interface via the "ip pim" command.
676 - Configure RPs for the BUM multicast group range.
677 - Ensure the PIM is enabled on the lo of the VTEPs and the RP.
678
679
680 Sample configuration
681 ====================
682
683 .. code-block:: frr
684
685 debug igmp
686 debug pim
687 debug pim zebra
688
689 ! You may want to enable ssmpingd for troubleshooting
690 ! See http://www.venaas.no/multicast/ssmping/
691 !
692 ip ssmpingd 1.1.1.1
693 ip ssmpingd 2.2.2.2
694
695 ! HINTS:
696 ! - Enable "ip pim ssm" on the interface directly attached to the
697 ! multicast source host (if this is the first-hop router)
698 ! - Enable "ip pim ssm" on pim-routers-facing interfaces
699 ! - Enable "ip igmp" on IGMPv3-hosts-facing interfaces
700 ! - In order to inject IGMPv3 local membership information in the
701 ! PIM protocol state, enable both "ip pim ssm" and "ip igmp" on
702 ! the same interface; otherwise PIM won't advertise
703 ! IGMPv3-learned membership to other PIM routers
704
705 interface eth0
706 ip pim ssm
707 ip igmp
708