Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OSPF6 point to multipoint #14546

Merged
merged 15 commits into from
Oct 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 126 additions & 1 deletion doc/user/ospf6d.rst
Original file line number Diff line number Diff line change
Expand Up @@ -312,10 +312,135 @@ OSPF6 interface

Sets interface's Inf-Trans-Delay. Default value is 1.

.. clicmd:: ipv6 ospf6 network (broadcast|point-to-point)
.. clicmd:: ipv6 ospf6 network (broadcast|point-to-point|point-to-multipoint)

Set explicitly network type for specified interface.

The only functional difference between ``point-to-point`` (PtP) and
``point-to-multipoint`` (PtMP) mode is the packet addressing for database
flooding and updates. PtP will use multicast packets while PtMP will
unicast them. Apart from this,
:clicmd:`ipv6 ospf6 p2p-p2mp connected-prefixes <include|exclude>` has a
different default for PtP and PtMP. There are no other differences, in
particular FRR does not impose a limit of one neighbor in PtP mode.

FRR does not support NBMA mode for IPv6 and likely never will, as NBMA is
considered deprecated for IPv6. Refer to `this IETF OSPF working group
discussion
<https://mailarchive.ietf.org/arch/msg/ospf/8GAbr4qSMMt5J7SvAcZQ1H7ARhk/>`_
for context.

OSPF6 point-to-point and point-to-multipoint operation
======================================================

OSPFv3, by default, operates in broadcast mode where it elects a DR and BDR
for each network segment. This can be changed to point-to-point (PtP) /
point-to-multipoint (PtMP) mode by configuration. The actual physical
interface characteristics do not matter for this setting, all interfaces can
be configured for all modes. However, routers must be configured for the same
mode to form adjacencies.

The main advantages of PtP/PtMP mode are:

- no DR/BDR election
- adjacencies can be suppressed in a pairwise manner for any two routers, e.g.
to represent the underlying topology if it isn't a true full mesh
- distinct costs can be set for each pair of routers and direction

The main downside is less efficient flooding on networks with a large number
of OSPFv3 routers.

.. warning::

All options in this section should be considered "advanced" configuration
options. Inconsistent or nonsensical combinations can easily result in a
non-functional setup.

.. clicmd:: ipv6 ospf6 p2p-p2mp disable-multicast-hello

Disables sending normal multicast hellos when in PtP/PtMP mode. Some
vendors do this automatically for PtMP mode while others have a separate
``no-broadcast`` option matching this.

If this setting is used, you must issue
:clicmd:`ipv6 ospf6 neighbor X:X::X:X poll-interval (1-65535)` for each
neighbor to send unicast hello packets.

.. clicmd:: ipv6 ospf6 p2p-p2mp config-neighbors-only

Only form adjacencies with neighbors that are explicitly configured with
the :clicmd:`ipv6 ospf6 neighbor X:X::X:X` command. Hellos from other
routers are ignored.

.. warning::

This setting is not intended to provide any security benefit. Do not
run OSPFv3 over untrusted links without additional security measures
(e.g. IPsec.)

.. clicmd:: ipv6 ospf6 p2p-p2mp connected-prefixes <include|exclude>

For global/ULA prefixes configured on this interfaces, do (not) advertise
the full prefix to the area. Regardless of this setting, the router's own
address, as a /128 host route with the "LA" (Local Address) bit set, will
always be advertised.

The default is to include connected prefixes for PtP mode and exclude them
for PtMP mode. Since these prefixes will cover other router's addresses,
these addresses can become unreachable if the link is partitioned if the
other router does not advertise the address as a /128. However, conversely,
if all routers have this flag set, the overall prefix will not be advertised
anywhere. End hosts on this link will therefore be unreachable (and
blackholing best-practices for non-existing prefixes apply.) It may be
preferable to have only one router announce the connected prefix.

The Link LSA (which is not propagated into the area) always includes all
prefixes on the interface. This setting only affects the Router LSA that
is visible to all routers in the area.

.. note::

Before interacting with this setting, consider either not configuring
any global/ULA IPv6 address on the interface, or directly configuring a
/128 if needed. OSPFv3 relies exclusively on link-local addresses to do
its signaling and there is absolutely no reason to configure global/ULA
addresses as far as OSPFv3 is concerned.

.. clicmd:: ipv6 ospf6 neighbor X:X::X:X

Explicitly configure a neighbor by its link-local address on this interface.
This statement has no effect other than allowing an adjacency when
:clicmd:`ipv6 ospf6 p2p-p2mp config-neighbors-only` is set. This command
does **not** cause unicast hellos to be sent.

Only link-local addresses can be used to establish explicit neighbors.
When using this command, you should probably assign static IPv6 link-local
addresses to all routers on this link. It would technically be possible to
use the neighbor's Router ID (IPv4 address) here to ease working with
changing link-local addresses but this is not planned as a feature at the
time of writing. Global/ULA IPv6 addresses cannot be supported here due to
the way OSPFv3 works.

.. clicmd:: ipv6 ospf6 neighbor X:X::X:X poll-interval (1-65535)

Send unicast hellos to this neighbor at the specified interval (in seconds.)
The interval is only used while there is no adjacency with this neighbor.
As soon as an adjacency is formed, the interface's
:clicmd:`ipv6 ospf6 hello-interval HELLOINTERVAL` value is used.
(``hello-interval`` must be the same on all routers on this link.)

:rfc:`2328` recommends a "much larger" value than ``hello-interval`` for
this setting, but this is a legacy of ATM and X.25 networks and nowadays you
should probably just use the same value as for ``hello-interval``.

.. clicmd:: ipv6 ospf6 neighbor X:X::X:X cost (1-65535)

Use a distinct cost for paths traversing this neighbor. The default is
to use the interface's cost value (which may be automatically calculated
based on link bandwidth.) Note that costs are directional in OSPF and the
reverse direction must be set on the other router.


OSPF6 route-map
===============

Expand Down
1 change: 0 additions & 1 deletion lib/if.h
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,6 @@ extern ifindex_t ifname2ifindex(const char *ifname, vrf_id_t vrf_id);
/* Connected address functions. */
extern struct connected *connected_new(void);
extern void connected_free(struct connected **connected);
extern void connected_add(struct interface *, struct connected *);
extern struct connected *
connected_add_by_prefix(struct interface *, struct prefix *, struct prefix *);
extern struct connected *connected_delete_by_prefix(struct interface *,
Expand Down
Loading
Loading