Go to file
Donald Sharp 421cf856ef bgpd: Cleanup multipath figuring out in bgp
Currently bgp multipath has these properties:

a) mp_info may or may not be on a single path, based
upon path perturbations in the past.
b) mp_info->count started counting at 0( meaning 1 ).  As that the
bestpath path_info was never included in the count
c) The first mp_info in the list held the multipath data associated
with the multipath.  As such if you were at any other node that data
was not filled in.
d) As such the mp_info's that are not first on the list basically
were just pointers to the corresponding bgp_path_info that was in
the multipath.
e) On bestpath calculation, a linklist(struct linklist *) of bgp_path_info's was
created.
f) This linklist was passed in to a comparison function that took the
old mpinfo list and compared it item by item to the linklist and
doing magic to figure out how to create a new mp_info list.
g) the old mp_info and the link list had to be memory managed and
freed up.
h) BGP_PATH_MULTIPATH is only set on non bestpath nodes in the
multipath.

This is really complicated.  Let's change the algorithm to this:

a) When running bestpath, mark a bgp_path_info node that could be in the ecmp path as
BGP_PATH_MULTIPATH_NEW.
b) When running multipath, just walk the list of bgp_path_info's and if
it has BGP_PATH_MULTIPATH_NEW on it, decide if it is in BGP_MULTIPATH.
If we run out of space to put in the ecmp, clear the flag on the rest.
c) Clean up the counting of sometimes adding 1 to the mpath count.
d) Only allocate a mpath_info node for the bestpath.  Clean it up
when done with it.
e) remove the unneeded list management associated with the linklist and
the mp_list.

This greatly simplifies multipath computation for bgp and reduces memory
load for large scale deployments.

2 full feeds in work_queue_run prior:

    0      56367.471      1123    50193    493695    50362    493791         0         0          0    TE   work_queue_run

BGP multipath info            :  1941844     48   110780992  1941844 110780992

2 full feeds in work_queue_run after change:

    1      52924.931      1296    40837    465968    41025    487390         0         0          1    TE   work_queue_run

BGP multipath info            :   970860     32    38836880   970866  38837120

Aproximately 4 seconds of saved cpu time for convergence and ~75 mb
smaller run time.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-10-01 12:25:57 -04:00
.github ci: do apt-get update before installing required modules 2024-06-08 17:29:19 -04:00
alpine docker: Set ABUILD_APK_INDEX_OPTS for frr build 2024-06-14 16:33:32 +03:00
babeld babeld: changes for code maintainability 2024-09-06 07:02:51 +05:30
bfdd bfdd: remove control socket obsolete code 2024-07-25 10:37:11 -03:00
bgpd bgpd: Cleanup multipath figuring out in bgp 2024-10-01 12:25:57 -04:00
debian debian: Add option to build pkg with grpc support 2024-06-20 12:14:48 +02:00
doc doc: Add user documentation for AutoRP CLI 2024-09-24 16:39:19 +00:00
docker docker: Set ABUILD_APK_INDEX_OPTS for libyang 2024-06-14 11:37:23 +03:00
eigrpd *: Modify agentx to be allowed to be called 2024-05-10 10:16:29 -04:00
fpm *: add XREF_SETUP() to libraries and utilites 2024-05-02 23:03:08 +02:00
gdb lib: add simplified native msg support 2023-12-26 08:34:56 -05:00
grpc build: throw in a few more XREF_SETUP 2024-05-09 18:02:49 +02:00
include build: include our own copy of if.h and dependencies 2024-04-26 17:11:53 +02:00
isisd Merge pull request #16855 from zhou-run/202409131731 2024-09-24 11:25:13 -04:00
ldpd ldpd: fix wrong gtsm count 2024-06-15 23:30:18 +08:00
lib lib: fix calloc warning on recent compiler 2024-09-30 11:31:56 -03:00
m4 build: add recursion limit for AX_RECURSIVE_EVAL 2024-01-27 19:01:19 +01:00
mgmtd mgmtd: add ietf-yang-library support 2024-09-17 22:27:36 -04:00
mlag build: throw in a few more XREF_SETUP 2024-05-09 18:02:49 +02:00
nhrpd Merge pull request #16788 from LabNConsulting/jmuthii/nhrpd-retry-resolution 2024-09-24 11:07:21 -05:00
ospf6d Merge pull request #16908 from donaldsharp/ospf6_snmp_special 2024-09-24 13:39:57 -05:00
ospfclient tools, ospfclient: add a config option to skip installing python scripts 2024-08-22 13:46:30 -05:00
ospfd Merge pull request #16853 from Shbinging/no_ip_ospf_dead_interval_minimal 2024-09-24 10:03:29 -04:00
pathd *: Create termtable specific temp memory 2024-09-01 13:07:46 -04:00
pbrd lib: common debug status output 2024-08-27 09:53:02 -04:00
pceplib Merge pull request #15215 from donaldsharp/pceplib_fixup 2024-01-25 09:59:59 +02:00
pimd Merge pull request #16957 from opensourcerouting/pim-fixes 2024-09-30 12:07:50 -05:00
pkgsrc build: homologize path handling 2024-01-27 19:02:52 +01:00
python vtysh, lib: preprocess CLI graphs 2024-07-31 08:08:53 -04:00
qpb *: add XREF_SETUP() to libraries and utilites 2024-05-02 23:03:08 +02:00
redhat redhat: Add option to build pkg with grpc support 2024-06-20 12:14:56 +02:00
ripd ripd: fix show run output for distribute-list 2024-08-08 01:25:02 +03:00
ripngd ripngd: adjust header for display command 2024-07-05 09:31:39 +08:00
sharpd sharpd: Eliminate leaked list for locator-chunks 2024-08-08 14:24:59 -04:00
snapcraft bfdd: remove control socket obsolete code 2024-07-25 10:37:11 -03:00
staticd lib: common debug status output 2024-08-27 09:53:02 -04:00
tests bgpd: Cleanup multipath figuring out in bgp 2024-10-01 12:25:57 -04:00
tools Merge pull request #16733 from gtataranni/fix/regex-string 2024-09-04 08:13:19 +03:00
vrrpd *: Create termtable specific temp memory 2024-09-01 13:07:46 -04:00
vtysh Merge pull request #16664 from mjstapp/igor_debug_simplify 2024-08-29 11:51:53 -04:00
watchfrr build: homologize path handling 2024-01-27 19:02:52 +01:00
yang pimd,yang: Implement AutoRP CLI and NB config path 2024-09-24 16:39:17 +00:00
zebra zebra: Add missing proto translations 2024-09-25 12:14:50 -04:00
.clang-format *: Modify clang-format column limit to 100 2024-09-26 09:58:32 -04:00
.dockerignore docker: Make docker image on CentOS 7 2019-11-26 19:29:30 +00:00
.flake8 style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.git-blame-ignore-revs tools: Add black formatting commit to .git-blame-ignore-revs 2024-04-28 12:50:51 +03:00
.gitignore python: add tool to expand typesafe definitions 2024-04-29 17:37:49 +02:00
.isort.cfg style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.pylintrc style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.travis.yml lib: libyang2 add missed conversion 2021-05-17 22:13:59 -04:00
bootstrap.sh build: turn on automake warnings (& symlinks) 2021-04-21 15:42:37 +02:00
buildtest.sh build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
config.version.in build: carry --with-pkg-extra-version into tarballs 2018-10-24 15:11:50 +02:00
configure.ac Merge pull request #16610 from Jafaral/no-py 2024-08-27 10:38:09 -04:00
COPYING *: sort out & explain licenses used in FRR 2023-02-09 12:46:13 +01:00
Makefile.am build: homologize path handling 2024-01-27 19:02:52 +01:00
README.md doc: Fix the link that points to Slack invitation in README 2022-03-24 13:13:37 +02:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00
version.h build: make builddir include path consistent 2021-04-21 15:42:33 +02:00

Icon

FRRouting

FRR is free software that implements and manages various IPv4 and IPv6 routing protocols. It runs on nearly all distributions of Linux and BSD and supports all modern CPU architectures.

FRR currently supports the following protocols:

  • BGP
  • OSPFv2
  • OSPFv3
  • RIPv1
  • RIPv2
  • RIPng
  • IS-IS
  • PIM-SM/MSDP
  • LDP
  • BFD
  • Babel
  • PBR
  • OpenFabric
  • VRRP
  • EIGRP (alpha)
  • NHRP (alpha)

Installation & Use

For source tarballs, see the releases page.

For Debian and its derivatives, use the APT repository at https://deb.frrouting.org/.

Instructions on building and installing from source for supported platforms may be found in the developer docs.

Once installed, please refer to the user guide for instructions on use.

Community

The FRRouting email list server is located here and offers the following public lists:

Topic List
Development dev@lists.frrouting.org
Users & Operators frog@lists.frrouting.org
Announcements announce@lists.frrouting.org

For chat, we currently use Slack. You can join by clicking the "Slack" link under the Participate section of our website.

Contributing

FRR maintains developer's documentation which contains the project workflow and expectations for contributors. Some technical documentation on project internals is also available.

We welcome and appreciate all contributions, no matter how small!

Security

To report security issues, please use our security mailing list:

security [at] lists.frrouting.org