The FRRouting Protocol Suite
Find a file
Krishnasamy b45c53b4f5 bgpd: Optimize BGP path lookup using typesafe hash for efficient lookup
Problem:
--------
BGP path lookup currently uses O(N) linear search through the list
(dest->info) for every incoming route update. In high-ECMP scenarios,
each update requires iterating through the entire path list to check
if a path from that peer already exists.

This becomes a severe performance bottleneck in data center environments
with high ECMP during large-scale route updates churn.

Solution:
---------
Implement a path_info hash per table using typesafe hash.
Use the same in bgp_update() for efficient lookup.

This hash lookup improves CPU overhead upto ~60%

Signed-off-by: Krishnasamy R <krishnasamyr@nvidia.com>
Signed-off-by: Krishnasamy <krishnasamyr@nvidia.com>
2026-01-08 11:51:32 +00:00
.github github: enable Ubuntu 24.04 amd64/arm64 CI 2025-11-03 20:44:53 -06:00
alpine docker: Add missing pytest package for Alpine as dependency 2026-01-06 10:45:37 +02:00
babeld babeld: Declarations should have variable names 2025-11-07 10:54:55 -05:00
bfdd Merge pull request #20210 from sougatahitcs/bfd_actual_tx_timeout_with_applied_jitter 2025-12-30 09:01:03 -05:00
bgpd bgpd: Optimize BGP path lookup using typesafe hash for efficient lookup 2026-01-08 11:51:32 +00:00
debian debian, redhat: update changelog with 10.5.0 release 2025-11-17 23:19:35 -06:00
doc Merge pull request #19778 from Pdoijode/pdoijode/evpn-gr-mh 2026-01-06 23:29:54 +02:00
docker docker: modify libyang version in Dockerfile for centos-8 2025-12-30 00:33:14 +09:00
eigrpd eigrpd: Declarations should have variable names 2025-11-07 10:54:55 -05:00
fpm fpm: guard against garbage in unused address bytes 2025-01-29 16:48:37 +01:00
gdb gdb: Add a walk_bgp_table macro 2025-10-10 12:21:27 -04:00
grpc build: throw in a few more XREF_SETUP 2024-05-09 18:02:49 +02:00
include include: Copy over new nexthop.h 2025-09-05 08:46:20 -04:00
isisd Merge pull request #20244 from mjstapp/move_json_includes 2025-12-12 15:26:34 -05:00
ldpd ldpd: Declarations should have variable names 2025-11-07 10:54:55 -05:00
lib Merge pull request #19778 from Pdoijode/pdoijode/evpn-gr-mh 2026-01-06 23:29:54 +02:00
m4 *: SPDX license spring cleaning 2025-05-24 20:49:19 +02:00
mgmtd mgmtd: update a few logs 2026-01-07 06:39:42 -05:00
mlag build: throw in a few more XREF_SETUP 2024-05-09 18:02:49 +02:00
nhrpd nhrpd: Initialize variable 2025-11-10 09:07:36 -05:00
ospf6d ospf6d: Route-Map parameter forwarding-address functionality not working properly 2025-12-23 06:16:20 +00:00
ospfclient *: Stop using thread as a variable name 2025-11-03 14:27:17 -05:00
ospfd Merge pull request #20363 from Shbinging/fix_delete_sr_local_label_bug 2026-01-05 09:04:38 -05:00
pathd Merge pull request #20244 from mjstapp/move_json_includes 2025-12-12 15:26:34 -05:00
pbrd pbrd: fix memleak during pbr map deletion 2025-10-28 02:30:00 -07:00
pceplib build: replace GNU_LINUX with __linux__ in .h 2025-05-24 07:35:50 +02:00
pimd pimd: Remove weird Hidden message in help string 2026-01-05 14:59:39 -05:00
pkgsrc build: homologize path handling 2024-01-27 19:02:52 +01:00
python *: fix add unsigned long support to RANGE token CLI 2025-10-27 10:56:27 +01:00
qpb qpb: Cleanup qpb headers 2025-11-07 10:54:55 -05:00
redhat debian, redhat: update changelog with 10.5.0 release 2025-11-17 23:19:35 -06:00
ripd mgmtd: remove client specific data from mgmtd 2025-12-23 09:53:45 +00:00
ripngd mgmtd: remove client specific data from mgmtd 2025-12-23 09:53:45 +00:00
sharpd sharpd: Add 'sharp use-underlays-nexthop-weight` 2025-12-15 11:05:23 -05:00
snapcraft build: remove --disable-rtadv option 2025-05-30 10:03:57 +02:00
staticd mgmtd: remove client specific data from mgmtd 2025-12-23 09:53:45 +00:00
tests Merge pull request #20181 from raja-rajasekar/rajasekarr/promiscuity 2026-01-07 16:12:13 -05:00
tools tools: add to the support bundle 2026-01-07 10:13:03 -05:00
vrrpd vrrpd: [Mem leak] Vrrp interface delete fails to free connected route 2025-11-17 22:23:46 -08:00
vtysh vtysh: implement clear command 2025-12-10 18:19:18 +01:00
watchfrr lib: add the vty arg to the start/end config callbacks 2025-11-20 11:28:48 +00:00
yang bgpd: add 'match as-path-count' command to restrict AS path count 2025-12-23 16:17:28 +01:00
zebra zebra: Fix coverity reported issue - 1668074 2026-01-07 17:55:06 -08:00
.clang-format tools: recognize new FOREACH_BE_ADAPTER_BITS macro 2025-11-20 11:28:48 +00: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 *: Add commit to .git-blame-ignore-revs 2025-11-06 12:38:07 -05: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 tests: add another directory to search path for pylint 2025-03-24 05:10:36 +00: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: remove --disable-rtadv option 2025-05-30 10:03:57 +02:00
config.version.in build: carry --with-pkg-extra-version into tarballs 2018-10-24 15:11:50 +02:00
configure.ac lib: warn about ly4 in configure.ac 2026-01-06 05:15:31 -05:00
COPYING *: sort out & explain licenses used in FRR 2023-02-09 12:46:13 +01:00
Makefile.am build: use nobase_ for headers to support out-of-tree dplane plugins 2025-10-14 19:50:20 +02: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
version.h *: clear up copyright/SPDX on NetDEF "owned" files 2025-05-24 21:28:09 +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