summaryrefslogtreecommitdiffstats
path: root/docs/gettingstarted/developers/fib20/multicast.rst
blob: 15bcddfec4697ae7aef28375182ff4eaf0f54897 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
.. _mfib:

IP Multicast FIB
----------------

Basics
^^^^^^

An IP multicast FIB (mFIB) is a data-structure that holds entries that
represent a (S,G) or a (\*,G) multicast group. There is one IPv4 and
one IPv6 mFIB per IP table, i.e. each time the user calls 'ip[6] table
add X' an mFIB is created.


A path describes either where a packet is sent to or where a packet is
received from. mFIB entries maintain two sets of 'paths'; the
forwarding set and the accepting set. Each path in the forwarding set
will output a replica of a received packet. A received packet is only
accepted for forwarding if it ingresses on a path that matches in the
accepting set - this is the RPF check.


To add an entry to the default mFIB for the group (1.1.1.1, 239.1.1.1)
that will replicate packets to GigEthernet0/0/0 and GigEthernet0/0/1, do:

.. code-block:: console

   $ ip mroute add 1.1.1.1 239.1.1.1 via GigEthernet0/0/0 Forward
   $ ip mroute add 1.1.1.1 239.1.1.1 via GigEthernet0/0/1 Forward

the flag 'Forward' passed with the path specifies this path to be part of the replication set.
To add a path from GigEthernet0/0/2 to the accepting (RPF) set do:

.. code-block:: console

   $ ip mroute add 1.1.1.1 239.1.1.1 via GigEthernet0/0/2 Accept

A (\*,G) entry is added by not specifying a source address:

.. code-block:: console

   $ ip mroute add 232.2.2.2 via GigEthernet0/0/2 Forward

A (\*,G/m) entry is added by not specifying a source address and giving
the group address a mask:

.. code-block:: console

   $ ip mroute add 232.2.2.0/24 via GigEthernet0/0/2 Forward

Entries are deleted when all paths have been removed and all entry flags (see below) are also removed.

Advanced
^^^^^^^^

There are a set of flags associated only with an entry, see:

.. code-block:: console

   $ show mfib route flags

only some of these are relevant over the API/CLI:

#. Signal - packets that match this entry will generate an event that
   is sent to the control plane (which can be retrieved via the signal
   dump API)
#. Connected - indicates that the control plane should be informed of
   connected sources (also retrieved via the signal dump API)
#. Accept-all-itf - the entry shall accept packets from all
   interfaces, thus eliminating the RPF check
#. Drop - Drop all packet matching this entry.

flags on an entry can be changed with:

.. code-block:: console

   $ ip mroute <PREFIX> <FLAG>

An alternative approach to the RPF check, that does check the
accepting path set, is to give the entry and RPF-ID:

.. code-block:: console

   $ ip mroute <PREFIX> rpf-id X

the RPF-ID is an attribute of a received packet's meta-data and is
added to the packet when it ingresses on a given entity such as an
MPLS-tunnel or a BIER table disposition entry.