.. _pim6:

##############################################
PIM6 - Protocol Independent Multicast for IPv6
##############################################

VyOS facilitates IPv6 Multicast by supporting **PIMv6** and **MLD**.

PIMv6 (Protocol Independent Multicast for IPv6) 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 MLD (Multicast Listener Discovery).

Multicast receivers will talk MLD to their local router, so, besides having
PIMv6 configured in every router, MLD must also be configured in any router
where there could be a multicast receiver locally connected.

VyOS supports both MLD version 1 and version 2
(which allows source-specific multicast).

Basic commands
==============
These are the commands for a basic setup.

.. cfgcmd:: set protocols pim6 interface <interface-name>

   Use this command to enable PIMv6 in the selected interface so that it
   can communicate with PIMv6 neighbors. This command also enables MLD reports
   and query on the interface unless :cfgcmd:`mld disable` is configured.

.. cfgcmd:: set protocols pim6 interface <interface-name> mld disable

   Disable MLD reports and query on the interface.


Tuning commands
===============
You can also tune multicast with the following commands.


.. cfgcmd:: set protocols pim6 interface <interface-name> mld interval <seconds>

   Use this command to configure in the selected interface the MLD
   host query interval (1-65535) in seconds that PIM will use.
   The default value is 125 seconds.

.. cfgcmd:: set protocols pim6 interface <interface-name> mld join <multicast-address>

   Use this command to allow the selected interface to join a multicast group.

.. cfgcmd:: set protocols pim6 interface <interface-name> mld join <multicast-address> source <source-address>

   Use this command to allow the selected interface to join a source-specific multicast
   group.

.. cfgcmd:: set protocols pim6 interface <interface-name> mld last-member-query-count <count>

   Set the MLD last member query count. The default value is 2.

.. cfgcmd:: set protocols pim6 interface <interface-name> mld last-member-query-interval <milliseconds>

   Set the MLD last member query interval in milliseconds (100-6553500). The default value is 1000 milliseconds.

.. cfgcmd:: set protocols pim6 interface <interface-name> mld max-response-time <milliseconds>

   Set the MLD query response timeout in milliseconds (100-6553500). The default value is 10000 milliseconds.

.. cfgcmd:: set protocols pim6 interface <interface-name> mld version <version-number>

   Set the MLD version used on this interface. The default value is 2.

*********************
Configuration Example
*********************

To enable MLD reports and query on interfaces `eth0` and `eth1`:

.. code-block:: none

  set protocols pim6 interface eth0
  set protocols pim6 interface eth1

The following configuration explicitly joins multicast group `ff15::1234` on interface `eth1`
and source-specific multicast group `ff15::5678` with source address `2001:db8::1` on interface
`eth1`:

.. code-block:: none

  set protocols pim6 interface eth0 mld join ff15::1234
  set protocols pim6 interface eth1 mld join ff15::5678 source 2001:db8::1