Resolves: RHEL-2263 - eBGP multihop peer flapping due to delta miscalculation of new configuration

This commit is contained in:
Michal Ruprich 2023-10-10 16:22:36 +02:00
parent 49a02a9374
commit 5481c6a69a
14 changed files with 188 additions and 2 deletions

1
.fmf/version Normal file
View File

@ -0,0 +1 @@
1

93
0015-max-ttl-reload.patch Normal file
View File

@ -0,0 +1,93 @@
From 767aaa3a80489bfc4ff097f932fc347e3db25b89 Mon Sep 17 00:00:00 2001
From: Donatas Abraitis <donatas@opensourcerouting.org>
Date: Mon, 21 Aug 2023 00:01:42 +0300
Subject: [PATCH] bgpd: Do not explicitly print MAXTTL value for ebgp-multihop
vty output
1. Create /etc/frr/frr.conf
```
frr version 7.5
frr defaults traditional
hostname centos8.localdomain
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
line vty
router bgp 4250001000
neighbor 192.168.122.207 remote-as 65512
neighbor 192.168.122.207 ebgp-multihop
```
2. Start FRR
`# systemctl start frr
`
3. Show running configuration. Note that FRR explicitly set and shows the default TTL (225)
```
Building configuration...
Current configuration:
!
frr version 7.5
frr defaults traditional
hostname centos8.localdomain
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
!
router bgp 4250001000
neighbor 192.168.122.207 remote-as 65512
neighbor 192.168.122.207 ebgp-multihop 255
!
line vty
!
end
```
4. Copy initial frr.conf to frr.conf.new (no changes)
`# cp /etc/frr/frr.conf /root/frr.conf.new
`
5. Run frr-reload.sh:
```
$ /usr/lib/frr/frr-reload.py --test /root/frr.conf.new
2023-08-20 20:15:48,050 INFO: Called via "Namespace(bindir='/usr/bin', confdir='/etc/frr', daemon='', debug=False, filename='/root/frr.conf.new', input=None, log_level='info', overwrite=False, pathspace=None, reload=False, rundir='/var/run/frr', stdout=False, test=True, vty_socket=None)"
2023-08-20 20:15:48,050 INFO: Loading Config object from file /root/frr.conf.new
2023-08-20 20:15:48,124 INFO: Loading Config object from vtysh show running
Lines To Delete
===============
router bgp 4250001000
no neighbor 192.168.122.207 ebgp-multihop 255
Lines To Add
============
router bgp 4250001000
neighbor 192.168.122.207 ebgp-multihop
```
Closes https://github.com/FRRouting/frr/issues/14242
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
---
bgpd/bgp_vty.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index be0fe4283747..c9a9255f3392 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -17735,8 +17735,12 @@ static void bgp_config_write_peer_global(struct vty *vty, struct bgp *bgp,
&& !(peer->gtsm_hops != BGP_GTSM_HOPS_DISABLED
&& peer->ttl == MAXTTL)) {
if (!peer_group_active(peer) || g_peer->ttl != peer->ttl) {
- vty_out(vty, " neighbor %s ebgp-multihop %d\n", addr,
- peer->ttl);
+ if (peer->ttl != MAXTTL)
+ vty_out(vty, " neighbor %s ebgp-multihop %d\n",
+ addr, peer->ttl);
+ else
+ vty_out(vty, " neighbor %s ebgp-multihop\n",
+ addr);
}
}

View File

@ -7,7 +7,7 @@
Name: frr
Version: 7.5.1
Release: 12%{?checkout}%{?dist}
Release: 13%{?checkout}%{?dist}
Summary: Routing daemon
License: GPLv2+
URL: http://www.frrouting.org
@ -54,6 +54,7 @@ Patch0011: 0011-reload-bfd-profile.patch
Patch0012: 0012-graceful-restart.patch
Patch0013: 0013-CVE-2022-37032.patch
Patch0014: 0014-bfd-profile-crash.patch
Patch0015: 0015-max-ttl-reload.patch
%description
FRRouting is free software that manages TCP/IP based routing protocols. It takes
@ -274,6 +275,9 @@ make check PYTHON=%{__python3}
%endif
%changelog
* Tue Oct 10 2023 Michal Ruprich <mruprich@redhat.com> - 7.5.1-13
- Resolves: RHEL-2263 - eBGP multihop peer flapping due to delta miscalculation of new configuration
* Wed Aug 23 2023 Michal Ruprich <mruprich@redhat.com> - 7.5.1-12
- Resolves: #2216911 - Adding missing sys_admin SELinux call

View File

@ -4,5 +4,8 @@ product_versions:
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/internal/tier1-internal.functional}
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/internal/Acceptance-internal.functional}
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/public/tier1-public.functional}
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/internal/Acceptance-public.functional}
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tedude.validation}
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.acceptance-tier.functional}

View File

@ -0,0 +1,10 @@
summary: Internal Acceptance tests plan
discover:
how: fmf
filter: 'tag: Acceptance'
url: git://pkgs.devel.redhat.com/tests/frr
execute:
how: tmt
adjust:
enabled: false
when: distro == centos-stream or distro == fedora

View File

@ -0,0 +1,10 @@
summary: Internal Other tests plan
discover:
how: fmf
filter: 'tier: -1 & tier: -2 & tier: -3 & tag: -Acceptance & tag: -multihost'
url: git://pkgs.devel.redhat.com/tests/frr
execute:
how: tmt
adjust:
enabled: false
when: distro == centos-stream or distro == fedora

View File

@ -0,0 +1,10 @@
summary: Internal Tier1 tests plan
discover:
how: fmf
filter: 'tier: 1'
url: git://pkgs.devel.redhat.com/tests/frr
execute:
how: tmt
adjust:
enabled: false
when: distro == centos-stream or distro == fedora

View File

@ -0,0 +1,10 @@
summary: Internal Tier2 tests plan
discover:
how: fmf
filter: 'tier: 2'
url: git://pkgs.devel.redhat.com/tests/frr
execute:
how: tmt
adjust:
enabled: false
when: distro == centos-stream or distro == fedora

View File

@ -0,0 +1,10 @@
summary: Internal Tier3 tests plan
discover:
how: fmf
filter: 'tier: 3'
url: git://pkgs.devel.redhat.com/tests/frr
execute:
how: tmt
adjust:
enabled: false
when: distro == centos-stream or distro == fedora

View File

@ -0,0 +1,7 @@
Summary: Public Acceptance tests plan
discover:
how: fmf
url: https://src.fedoraproject.org/tests/frr.git
filter: 'tag: Acceptance'
execute:
how: tmt

View File

@ -0,0 +1,7 @@
Summary: Public other tests plan
discover:
how: fmf
url: https://src.fedoraproject.org/tests/frr.git
filter: 'tier: -1 & tier: -2 & tier: -3 & tag: -Acceptance & tag: -multihost'
execute:
how: tmt

View File

@ -0,0 +1,7 @@
Summary: Public Tier1 tests plan
discover:
how: fmf
url: https://src.fedoraproject.org/tests/frr.git
filter: 'tier: 1'
execute:
how: tmt

View File

@ -0,0 +1,7 @@
Summary: Public Tier2 tests plan
discover:
how: fmf
url: https://src.fedoraproject.org/tests/frr.git
filter: 'tier: 2'
execute:
how: tmt

View File

@ -0,0 +1,7 @@
Summary: Public Tier3 tests plan
discover:
how: fmf
url: https://src.fedoraproject.org/tests/frr.git
filter: 'tier: 3'
execute:
how: tmt