mirror of
				https://github.com/vyos/vyos-documentation.git
				synced 2025-10-26 08:41:46 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			267 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			267 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| :lastproofread: 2023-11-13
 | ||
| 
 | ||
| .. _pim:
 | ||
| 
 | ||
| ####################################
 | ||
| PIM – Protocol Independent Multicast
 | ||
| ####################################
 | ||
| 
 | ||
| VyOS supports :abbr:`PIM-SM (PIM Sparse Mode)` as well as
 | ||
| :abbr:`IGMP (Internet Group Management Protocol)` v2 and v3
 | ||
| 
 | ||
| :abbr:`PIM (Protocol Independent Multicast)` must be configured in every
 | ||
| interface of every participating router. Every router must also have the
 | ||
| location of the Rendevouz Point manually configured. Then, unidirectional
 | ||
| shared trees rooted at the Rendevouz Point will automatically be built
 | ||
| for multicast distribution.
 | ||
| 
 | ||
| Traffic from multicast sources will go to the Rendezvous Point, and
 | ||
| receivers will pull it from a shared tree using :abbr:`IGMP (Internet
 | ||
| Group Management Protocol)`.
 | ||
| 
 | ||
| Multicast receivers will talk IGMP to their local router, so, besides
 | ||
| having PIM configured in every router, IGMP must also be configured in
 | ||
| any router where there could be a multicast receiver locally connected.
 | ||
| 
 | ||
| VyOS supports both IGMP version 2 and version 3 (which allows
 | ||
| source-specific multicast).
 | ||
| 
 | ||
| ************************
 | ||
| PIM-SM - PIM Sparse Mode
 | ||
| ************************
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim ecmp
 | ||
| 
 | ||
|    If PIM has the a choice of ECMP nexthops for a particular
 | ||
|    :abbr:`RPF (Reverse Path Forwarding)`, PIM will cause S,G flows to be
 | ||
|    spread out amongst the nexthops. If this command is not specified then
 | ||
|    the first nexthop found will be used.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim ecmp rebalance
 | ||
| 
 | ||
|    If PIM is using ECMP and an interface goes down, cause PIM to rebalance all
 | ||
|    S,G flows across the remaining nexthops. If this command is not configured
 | ||
|    PIM only modifies those S,G flows that were using the interface that went
 | ||
|    down.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim join-prune-interval <n>
 | ||
| 
 | ||
|    Modify the join/prune interval that PIM uses to the new value. Time is
 | ||
|    specified in seconds.
 | ||
| 
 | ||
|    The default time is 60 seconds.
 | ||
| 
 | ||
|    If you enter a value smaller than 60 seconds be aware that this can and
 | ||
|    will affect convergence at scale.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim keep-alive-timer <n>
 | ||
| 
 | ||
|    Modify the time out value for a S,G flow from 1-65535 seconds. If choosing
 | ||
|    a value below 31 seconds be aware that some hardware platforms cannot see
 | ||
|    data flowing in better than 30 second chunks.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim packets <n>
 | ||
| 
 | ||
|    When processing packets from a neighbor process the number of packets
 | ||
|    incoming at one time before moving on to the next task.
 | ||
| 
 | ||
|    The default value is 3 packets.
 | ||
| 
 | ||
|    This command is only useful at scale when you can possibly have a large
 | ||
|    number of PIM control packets flowing.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim register-accept-list <prefix-list>
 | ||
| 
 | ||
|    When PIM receives a register packet the source of the packet will be compared
 | ||
|    to the prefix-list specified, and if a permit is received normal processing
 | ||
|    continues. If a deny is returned for the source address of the register packet
 | ||
|    a register stop message is sent to the source.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim register-suppress-time <n>
 | ||
| 
 | ||
|    Modify the time that pim will register suppress a FHR will send register
 | ||
|    notifications to the kernel.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim rp <address> group <group>
 | ||
| 
 | ||
|    In order to use PIM, it is necessary to configure a :abbr:`RP (Rendezvous Point)`
 | ||
|    for join messages to be sent to. Currently the only methodology to do this is
 | ||
|    via static rendezvous point commands.
 | ||
| 
 | ||
|    All routers in the PIM network must agree on these values.
 | ||
| 
 | ||
|    The first ip address is the RP's address and the second value is the matching
 | ||
|    prefix of group ranges covered.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim rp keep-alive-timer <n>
 | ||
| 
 | ||
|    Modify the time out value for a S,G flow from 1-65535 seconds at
 | ||
|    :abbr:`RP (Rendezvous Point)`. The normal keepalive period for the KAT(S,G)
 | ||
|    defaults to 210 seconds. However, at the :abbr:`RP (Rendezvous Point)`, the
 | ||
|    keepalive period must be at least the Register_Suppression_Time, or the RP
 | ||
|    may time out the (S,G) state before the next Null-Register arrives.
 | ||
|    Thus, the KAT(S,G) is set to max(Keepalive_Period, RP_Keepalive_Period)
 | ||
|    when a Register-Stop is sent.
 | ||
| 
 | ||
|    If choosing a value below 31 seconds be aware that some hardware platforms
 | ||
|    cannot see data flowing in better than 30 second chunks.
 | ||
| 
 | ||
|    See :rfc:`7761#section-4.1` for details.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim no-v6-secondary
 | ||
| 
 | ||
|    When sending PIM hello packets tell PIM to not send any v6 secondary
 | ||
|    addresses on the interface. This information is used to allow PIM to use v6
 | ||
|    nexthops in it's decision for :abbr:`RPF (Reverse Path Forwarding)` lookup
 | ||
|    if this option is not set (default).
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim spt-switchover infinity-and-beyond [prefix-list <list>]
 | ||
| 
 | ||
|    On the last hop router if it is desired to not switch over to the SPT tree
 | ||
|    configure this command.
 | ||
| 
 | ||
|    Optional parameter prefix-list can be use to control which groups to switch or
 | ||
|    not switch. If a group is PERMIT as per the prefix-list, then the SPT switchover
 | ||
|    does not happen for it and if it is DENY, then the SPT switchover happens.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim ssm prefix-list <list>
 | ||
| 
 | ||
|    Specify a range of group addresses via a prefix-list that forces PIM to never
 | ||
|    do :abbr:`SSM (Source-Specific Multicast)` over.
 | ||
| 
 | ||
| Interface specific commands
 | ||
| ===========================
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> bfd [profile <name>]
 | ||
| 
 | ||
|    Automatically create BFD session for each RIP peer discovered in this
 | ||
|    interface. When the BFD session monitor signalize that the link is down
 | ||
|    the RIP peer is removed and all the learned routes associated with that
 | ||
|    peer are removed.
 | ||
| 
 | ||
|    If optional profile parameter is used, select a BFD profile for the BFD
 | ||
|    sessions created via this interface.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> dr-priority <n>
 | ||
| 
 | ||
|    Set the :abbr:`DR (Designated Router)` Priority for the interface.
 | ||
|    This command is useful to allow the user to influence what node becomes
 | ||
|    the DR for a LAN segment.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> hello <n>
 | ||
| 
 | ||
|    Set the PIM hello and hold interval for a interface.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> no-bsm
 | ||
| 
 | ||
|    Tell PIM that we would not like to use this interface to process
 | ||
|    bootstrap messages.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> no-unicast-bsm
 | ||
| 
 | ||
|    Tell PIM that we would not like to use this interface to process
 | ||
|    unicast bootstrap messages.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> passive
 | ||
| 
 | ||
|    Disable sending and receiving PIM control packets on the interface.
 | ||
| 
 | ||
|  .. cfgcmd:: set protocols pim interface <interface> source-address <ip-address>
 | ||
| 
 | ||
|    If you have multiple addresses configured on a particular interface and would
 | ||
|    like PIM to use a specific source address associated with that interface.
 | ||
| 
 | ||
| ******************************************
 | ||
| IGMP - Internet Group Management Protocol)
 | ||
| ******************************************
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim igmp watermark-warning <n>
 | ||
| 
 | ||
|    Configure watermark warning generation for an IGMP group limit. Generates
 | ||
|    warning once the configured group limit is reached while adding new groups.
 | ||
| 
 | ||
| .. _pim:igmp_interface_commands:
 | ||
| 
 | ||
| Interface specific commands
 | ||
| ===========================
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> igmp
 | ||
|    join <multicast-address> source-address <IP-address>
 | ||
| 
 | ||
|    Use this command to allow the selected interface to join a multicast
 | ||
|    group defining the multicast address you want to join and the source
 | ||
|    IP address too.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> igmp
 | ||
|    query-interval <seconds>
 | ||
| 
 | ||
|    Use this command to configure in the selected interface the IGMP
 | ||
|    host query interval (1-1800) in seconds that PIM will use.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> igmp
 | ||
|    query-max-response-time <n>
 | ||
| 
 | ||
|    Use this command to configure in the selected interface the IGMP
 | ||
|    query response timeout value (10-250) in deciseconds. If a report is
 | ||
|    not returned in the specified time, it will be assumed the (S,G) or
 | ||
|    (\*,G) state :rfc:`7761#section-4.1` has timed out.
 | ||
| 
 | ||
| .. cfgcmd:: set protocols pim interface <interface> igmp version <version-number>
 | ||
| 
 | ||
|    Use this command to define in the selected interface whether you
 | ||
|    choose IGMP version 2 or 3.
 | ||
| 
 | ||
|    The default value is 3.
 | ||
| 
 | ||
| Example
 | ||
| -------
 | ||
| 
 | ||
| In the following example we can see a basic multicast setup:
 | ||
| 
 | ||
| .. image:: /_static/images/multicast-basic.png
 | ||
|    :width: 90%
 | ||
|    :align: center
 | ||
|    :alt: Network Topology Diagram
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| **Router 1**
 | ||
| 
 | ||
| .. code-block:: none
 | ||
| 
 | ||
|    set interfaces ethernet eth2 address '172.16.0.2/24'
 | ||
|    set interfaces ethernet eth1 address '100.64.0.1/24'
 | ||
|    set protocols ospf area 0 network '172.16.0.0/24'
 | ||
|    set protocols ospf area 0 network '100.64.0.0/24'
 | ||
|    set protocols igmp interface eth1
 | ||
|    set protocols pim interface eth1
 | ||
|    set protocols pim interface eth2
 | ||
|    set protocols pim rp address 172.16.255.1 group '224.0.0.0/4'
 | ||
| 
 | ||
| **Router 3**
 | ||
| 
 | ||
| .. code-block:: none
 | ||
| 
 | ||
|    set interfaces dummy dum0 address '172.16.255.1/24'
 | ||
|    set interfaces ethernet eth0 address '172.16.0.1/24'
 | ||
|    set interfaces ethernet eth1 address '172.16.1.1/24'
 | ||
|    set protocols ospf area 0 network '172.16.0.0/24'
 | ||
|    set protocols ospf area 0 network '172.16.255.0/24'
 | ||
|    set protocols ospf area 0 network '172.16.1.0/24'
 | ||
|    set protocols pim interface dum0
 | ||
|    set protocols pim interface eth0
 | ||
|    set protocols pim interface eth1
 | ||
|    set protocols pim rp address 172.16.255.1 group '224.0.0.0/4'
 | ||
| 
 | ||
| **Router 2**
 | ||
| 
 | ||
| .. code-block:: none
 | ||
| 
 | ||
|    set interfaces ethernet eth1 address '10.0.0.1/24'
 | ||
|    set interfaces ethernet eth2 address '172.16.1.2/24'
 | ||
|    set protocols ospf area 0 network '10.0.0.0/24'
 | ||
|    set protocols ospf area 0 network '172.16.1.0/24'
 | ||
|    set protocols pim interface eth1
 | ||
|    set protocols pim interface eth2
 | ||
|    set protocols pim rp address 172.16.255.1 group '224.0.0.0/4'
 |