2020-11-09 10:09:42 +00:00
|
|
|
.. _missing:
|
|
|
|
|
|
|
|
Missing Functionality
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
A list of functionality that the FIB does not currently provide.
|
|
|
|
|
|
|
|
|
|
|
|
PIC Edge Backup Paths
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
FIB supports the concept of path 'preference'. Only paths that have
|
|
|
|
the best preference contribute to forwarding. Only once all the paths with
|
|
|
|
the best preference go down do the paths with the next best preference
|
|
|
|
contribute.
|
|
|
|
|
|
|
|
In BGP PIC edge, BGP would install the primary paths and the backup
|
|
|
|
paths. With expectation that backups are only used once all primaries
|
|
|
|
fail; this is the same behaviour that FIB's preference sets provide.
|
|
|
|
|
|
|
|
However, in order to get prefix independent convergence, one must be
|
|
|
|
able to only modify the path-list's load-balance map (LBM) to choose the
|
|
|
|
paths to use. Hence the paths must already be in the map, and
|
|
|
|
conversely must be in the fib_entry's load-balance (LB). In other
|
|
|
|
words, to use backup paths with PIC, the fib_entry's LB must include
|
|
|
|
the backup paths, and the path-lists LBM must map from the backups to
|
|
|
|
the primaries.
|
|
|
|
|
|
|
|
This is change that is reasonably easy w.r.t. to knowing what to
|
|
|
|
change, but hard to get right and hard to test.
|
|
|
|
|
|
|
|
|
|
|
|
Loop Free Alternate Paths
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Contrary to the BGP approach for path backups, an IGP could install a
|
|
|
|
loop free alternate (LFA) path to achieve fast re-route (FRR).
|
|
|
|
|
|
|
|
Because of the way the LFA paths are calculated by the IGP an LFA backup
|
|
|
|
path is always paired with a primary. VPP FIB does not support this
|
|
|
|
primary-backup pair relationship.
|
|
|
|
|
|
|
|
In intent of LFA FRR is/was to get below the magic 50ms mark. To do
|
|
|
|
this the expectation is/was that one would need in the forwarding
|
|
|
|
graph an object that represents a path's state. This object would be
|
|
|
|
checked for each packet being sent. If the path is up, the graph (an
|
|
|
|
adjacency since it's the IGP) for the primary path is taken, if it's
|
|
|
|
down the graph for the backup is taken. When a path goes down only
|
|
|
|
this indirection object needs to be updated to affect all
|
|
|
|
routes. Naturally, the indirection would incur a performance cost, but
|
|
|
|
we know that there are many performance-convergence trade-offs in a
|
|
|
|
FIB design.
|
|
|
|
|
|
|
|
Should VPP's FIB support this feature? It all depends on the
|
|
|
|
50ms. LFA FRR comes from the era when routers ran on lower performance
|
|
|
|
CPUs and interface down was an interrupt. VPP typically has plenty of
|
|
|
|
gas but runs as a user space process. So, can it update all routes in
|
|
|
|
under 50ms on a meaty CPU and can the OS deliver the interface down
|
|
|
|
within the time requirements? I don't have the answers to either
|
|
|
|
question.
|
|
|
|
|
|
|
|
|
|
|
|
Extranets for Multicast
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
When a unicast prefix is present in two different tables, then it
|
|
|
|
refers to a different set of devices. When the prefix is imported it
|
|
|
|
refers to the same set of devices. If the set of paths to reach the
|
|
|
|
prefix is different in the import and export table, it doesn't matter,
|
|
|
|
since they both refer to the same devices, so either set can be
|
|
|
|
used. Therefore, FIB's usual source preference rules can apply. The
|
|
|
|
'import' source is lower priority.
|
|
|
|
|
|
|
|
When a multicast prefix is present in two different tables, then it's
|
|
|
|
two different flows referring to two different set of receivers. When
|
|
|
|
the prefix is imported, then it refers to the same flow and two
|
|
|
|
different sets of receivers. In other words, the receiver set in the
|
|
|
|
import table needs to be the super set of receivers.
|
|
|
|
|
|
|
|
There are two ways one might consider doing this; merging the
|
|
|
|
path-lists or replicating the packet first into each table.
|
|
|
|
|
|
|
|
|
|
|
|
Collapsing
|
|
|
|
^^^^^^^^^^
|
|
|
|
|
|
|
|
Read :ref:`fastconvergence`
|
|
|
|
|
|
|
|
Collapsing the DPO graph for recursive routes doesn't have to be an
|
|
|
|
all or nothing. Easy cases:
|
|
|
|
|
|
|
|
|
|
|
|
- A recursive prefix with only one path and a path-list that is not
|
2021-08-19 11:38:06 +02:00
|
|
|
popular, could stack directly on the LB of the via entry.
|
2020-11-09 10:09:42 +00:00
|
|
|
- A recursive prefix with only multiple paths and a path-list that is not
|
|
|
|
popular, could construct a new load balance using the choices
|
|
|
|
present in each bucket of its via entries. The choices in the new LB
|
|
|
|
though would need to reflect the relative weighting.
|
|
|
|
|
|
|
|
|
|
|
|
The condition of an non-popular path-list means that the LB doesn't
|
|
|
|
have an LB map and hence it needs to be updated for convergence to
|
|
|
|
occur.
|
|
|
|
|
|
|
|
The more difficult cases come when the recursive prefix has labels
|
|
|
|
which need to be stack on the via entries' choices.
|
|
|
|
|
|
|
|
You might also envision a global configuration that always collapses all
|
|
|
|
chains, which could be used in deployments where convergence is not a
|
|
|
|
priority.
|