Commit Graph

24780 Commits

Author SHA1 Message Date
Renato Westphal
b2a2107ade tests: add OSPF graceful restart topotest
Add a new topotest that features a topology with seven routers spread
across four OSPF areas:
* 1 backbone area;
* 1 regular non-backbone area (0.0.0.1);
* 1 stub area (0.0.0.2);
* 1 NSSA area (0.0.0.3).

All routers have both GR and GR helper functionality enabled in
the configuration. The test consists of restarting each router,
one at time, and checking that all forwarding planes (and LSDBs)
are kept intact during those restarts.

A successful run takes about three minutes to finish.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2021-07-05 11:43:02 -03:00
Renato Westphal
5957a1a11f tests: add "save_config" parameter to kill_router_daemons()
Using "write memory" to save the daemons' configurations before
restarting them can cause log files to stop working correctly. Add
a new "save_config" to the kill_router_daemons() function to prevent
that from happening when saving the configurations isn't necessary.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2021-07-05 11:43:02 -03:00
Renato Westphal
1051417011 ospfd: introduce support for Graceful Restart (restarting mode)
RFC 3623 specifies the Graceful Restart enhancement to the OSPF
routing protocol. This PR implements support for the restarting mode,
whereas the helper mode was implemented by #6811.

This work is based on #6782, which implemented the pre-restart part
and settled the foundations for the post-restart part (behavioral
changes, GR exit conditions, and on-exit actions).

Here's a quick summary of how the GR restarting mode works:
* GR can be enabled on a per-instance basis using the `graceful-restart
  [grace-period (1-1800)]` command;
* To perform a graceful shutdown, the `graceful-restart prepare ospf`
  EXEC-level command needs to be issued before restarting the ospfd
  daemon (there's no specific requirement on how the daemon should
  be restarted);
* `graceful-restart prepare ospf` will initiate the graceful restart
  for all GR-enabled instances by taking the following actions:
  o Flooding Grace-LSAs over all interfaces
  o Freezing the OSPF routes in the RIB
  o Saving the end of the grace period in non-volatile memory (a JSON
    file stored in `$frr_statedir`)
* Once ospfd is started again, it will follow the procedures
  described in RFC 3623 until it detects it's time to exit the graceful
  restart (either successfully or unsuccessfully).

Testing done:
* New topotest featuring a multi-area OSPF topology (including stub
  and NSSA areas);
* Successful interop tests against IOS-XR routers acting as helpers.

Co-authored-by: GalaxyGorilla <sascha@netdef.org>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2021-07-05 11:43:02 -03:00
Renato Westphal
cd52c44c00 ospfd: rename the graceful restart header
Both the GR helper code and the upcoming GR restarting code are going
to share a lot of definitions. As such, rename ospf_gr_helper.h to
ospf_gr.h, which will be the central point of all GR definitions
and prototypes.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2021-07-05 11:43:02 -03:00
GalaxyGorilla
3f87e1d8b3 ospfd: adjust log config for GR
Remove previous log config

	debug ospf graceful-restart helper

and just use

	debug ospf graceful-restart

for everything related to OSPF GR.

Signed-off-by: GalaxyGorilla <sascha@netdef.org>
2021-07-05 11:43:02 -03:00
Renato Westphal
e9505bc63a ospfd: print extra LSA information in some log messages
Log the LSA advertising router in addition to the LSA type and
ID in the places where that information is necessary to uniquely
identify the LSA in the LSDB.

This is useful, for example, to know exactly which LSA has changed
when the router is exiting from the GR helper mode when a topology
change was detected.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2021-07-05 11:43:02 -03:00
Donatas Abraitis
12536067cc
Merge pull request #8979 from opensourcerouting/msdp-topotest-speedup
topotests: speed up MSDP convergence speed
2021-07-05 09:16:27 +03:00
Quentin Young
71bae95e4a
Merge pull request #8888 from dlqs/lua-call 2021-07-05 04:13:20 +00:00
Martin Winter
b09ca18c3f
Merge pull request #7674 from oerdnj/embedded-deb-packages
Convert the packaging to use git-buildpackage
2021-07-04 16:59:19 +02:00
Rafael Zalamena
616bbd94c8 topotests: speed up MSDP convergence speed
Decrease the connection retry time to reduce test duration on connection
failures.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-04 11:17:10 -03:00
Christian Hopps
e49199c387
Merge pull request #8974 from FRRouting/revert-8795-fix-ospf6-router-id
Revert "ospf6d: fix LSAs remain in LSDB with an old router-id value"
2021-07-03 19:40:03 -04:00
Ondřej Surý
4ebb9e9d20 debian: Merge the official Debian changelog into d/changelog
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:03:56 +02:00
Igor Ryzhov
c54e2a8144 tools: Simplify the script to build Debian binary package
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
1b3fe7ab54 debian: Update the upstream version to 7.7~dev-1
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
c4783c325a doc: Use dpkg-buildpackage to build packages (add note about debuild)
The debuild command fails when we are doing source package only build
because it expects the arch-dependent .changes file to be present.  Thus
in the instructions we switch to using dpkg-buildpackage directly and
add a note about using debuild in more complicated scenarios.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
4c65fb08f7 doc: Add instructions on how to build only source packages
In the CI, it's better to build the source package only once and then
instead of checking out the whole repository, only distribute the source
packages to the individual jobs.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
f36c3644e7 doc: Update debian packaging instructions
The debian packaging instructions have been updated, so they actually
work.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
dfbc6c046e debian: Add support for Debian bullseye to the packaging script
The Debian bullseye is frozen now, so this adds support to this
Debian release to the packaging script.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
9ea548cf3c debian: Fix the debian packaging script to build on non-default branch
The packaging script would fail to run on non-master branch, fix that
by pulling original branch name.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
33ce95cad0 debian: Make the autopkgtest more resilient (Closes: #980111)
The Debian autopkgtest would fail with new PAM introduced in Debian bullseye.
Add a little loop to wait a little longer for the changes to propagate.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
223766ead4 debian: Update the tools/build-debian-package.sh to be example build script
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
aa1e17f5ca debian: Remove now obsolete tarsource.sh script
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
06417e9f18 debian: Remove the changelog-auto automation in favor of dch
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
bcd053ee8d debian: Update tools/build-debian-package.sh to use git-buildpackage
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
25785834af debian: Adjust tarsource.sh to use native debian/changelog
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Ondřej Surý
b7abcded1a debian: Merge various debian changelogs in debian/changelog
Signed-off-by: Ondřej Surý <ondrej@sury.org>
2021-07-03 17:02:37 +02:00
Donald Lee
cd3c3a98e2 doc: space code block
Signed-off-by: Donald Lee <dlqs@gmx.com>
2021-07-03 04:43:50 +08:00
Donald Sharp
30885c7099
Revert "ospf6d: fix LSAs remain in LSDB with an old router-id value" 2021-07-02 12:38:11 -04:00
Donald Sharp
8a0ac82d96
Merge pull request #8969 from opensourcerouting/msdp-timers
pimd: allow MSDP timers to be configured
2021-07-02 11:39:58 -04:00
Mark Stapp
5537beafd1
Merge pull request #8955 from mobash-rasool/ospfv2-fixes
ospfd: show ip ospf route json does not shown metric and tag
2021-07-02 09:03:53 -04:00
Mark Stapp
0a9fcd96d1
Merge pull request #8970 from ton31337/fix/use_IPV6_MAX_BITLEN
*: Do not use 32/128 numbers for prefixlen
2021-07-02 07:52:22 -04:00
Philippe Guibert
1e15822698
Merge pull request #8795 from louis-oui/fix-ospf6-router-id
ospf6d: fix LSAs remain in LSDB with an old router-id value
2021-07-02 11:11:47 +02:00
Donatas Abraitis
8643c2e5f7 *: Replace 4/16 integers to IPV4_MAX_BYTELEN/IPV6_MAX_BYTELEN
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 23:54:39 +03:00
Donatas Abraitis
12256b84a5 *: Convert numeric 32 into IPV4_MAX_BITLEN for prefixlen
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 23:50:39 +03:00
Igor Ryzhov
5a1b002b60
Merge pull request #8962 from donaldsharp/bgp_ll_must_be_there
bgpd: Ensure v6 LL address is available before establishing peering
2021-07-01 20:20:23 +03:00
Donatas Abraitis
45833edae0 babeld: Drop in_prefix() function
Not used.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:54:10 +03:00
Donatas Abraitis
13ccce6e7e *: Convert numeric 128 into IPV6_MAX_BITLEN for prefixlen
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:53:21 +03:00
Donatas Abraitis
936fbaef47 *: Replace IPV4_MAX_PREFIXLEN to IPV4_MAX_BITLEN
Just drop IPV4_MAX_PREFIXLEN at all, no need keeping both.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:44:09 +03:00
Donatas Abraitis
f4d81e5507 *: Replace IPV6_MAX_PREFIXLEN to IPV6_MAX_BITLEN
Just drop IPV6_MAX_PREFIXLEN at all, no need keeping both.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:41:09 +03:00
Donatas Abraitis
3036004116 bgpd: Convert numeric 32 into IPV4_MAX_BITLEN for prefixlen
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:37:04 +03:00
Donatas Abraitis
135e9bdb69 bgpd: Convert numeric 128 into IPV6_MAX_BITLEN for prefixlen
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:35:02 +03:00
Rafael Zalamena
1f3ae3a678 doc: document new PIM MSDP timers command
Let the user know how to use it and what are the default values.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-01 09:59:55 -03:00
Rafael Zalamena
6f015b21a9 doc: simplify PIM RIB title
Don't use colon and make it more generic.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-01 09:59:55 -03:00
Rafael Zalamena
622fd3f11e pimd: support MSDP global timers configuration
Users can now configure:

 * Hold time
 * Keep alive
 * Connection retry

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-01 09:59:51 -03:00
Louis Scalbert
c295917b4a ospf6d: harmonize ospf6_asbr_redistribute_disable and _reset
Harmonize the code of functions ospf6_asbr_redistribute_disable and
ospf6_asbr_redistribute_reset.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2021-07-01 14:40:14 +02:00
Louis Scalbert
c54fb080a0 ospf6d: reset areas and redistribution at router-id modification
The ospf6 router-id is provided by order of preference by:

 ospf6d itself if the "ospf6 router-id X.X.X.X" command is set.
- zebra. If the "ip router-id X.X.X.X" zebra command is set, the
  configured IP is provided as the ID or alternatively the highest
  loopback IPv4 address or else the highest interface IPv4 address.

The running ospf6 router-id is stored in ospf6->router-id.

ospf6->router-id can change in the following conditions:

- A configuration change provides a new router-id value according to
  the above rules. ospf6->router-id is updated to the new value if
  there is no adjacency in FULL state. Otherwise, the ospf6d process
  must be restarted to take the new router-id into account.
- On startup of both zebra and ospf6d, if ospf6d has not yet received a
  valid router-id, ospf6d->router-id is set to 0 (i.e. 0.0.0.0). Then,
  zebra notifies ospf6d that the router-id is available.

At ospf6->router-id, the current behavior of ospf6d is the following:

- The self generated LSAs that refer to the previous router-id as the
  advertising router are kept.
- Self generated LSAs are created with router-id value.
- LSAs from the redistribution that refer to the previous router-id are
  kept and no new redistribution LSAs are created.

As a consequence, the routers in the ospf6 areas will get incorrect
LSAs and might not be able to install prefixes of those LSAs into their
RIB.

This fix solves this issue by resetting the areas and the redistribution
when ospf6->router-id updated.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2021-07-01 14:40:14 +02:00
Louis Scalbert
6794884231 ospf6d: factorize router-id update
ospf6_router_id_update function is used by ospf6_router_id_update_zebra
to update the running the ospf6 router-id.

This patches makes the functions to (un)configure ospf6 router-id use
the same function as ospf6_router_id_update_zebra.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
---
2021-07-01 14:40:14 +02:00
Louis Scalbert
08965422d0 ospf6d: don't update router-id if at least one adjacency is Full
When a router-id change is notified by zebra to ospf6d, we only take
into account the change if no adjacencies are in Full state.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2021-07-01 14:40:07 +02:00
Igor Ryzhov
bc65216a29
Merge pull request #8954 from mobash-rasool/ospfv3-feature
ospf6d: route-map config changed, not getting applied on all types of…
2021-07-01 14:47:40 +03:00
Rafael Zalamena
67aea150fe yang: add MSDP timer configuration
Allow users to configure global MSDP timers.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-01 08:40:09 -03:00