diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-ipv4-labeled-unicast.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-ipv4-labeled-unicast.md
index a416c8b5e0a..cd4206b8bd1 100644
--- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-ipv4-labeled-unicast.md
+++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-ipv4-labeled-unicast.md
@@ -75,6 +75,7 @@ ASN Notation: asplain
```eos
!
router bgp 65101
+ timers bgp 4 6 min-hold-time 5 send-failure hold-time 67
!
address-family ipv4 labeled-unicast
update wait-for-convergence
diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-ipv4-labeled-unicast.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-ipv4-labeled-unicast.cfg
index 6edb13b7e19..f2c8e34e718 100644
--- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-ipv4-labeled-unicast.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-ipv4-labeled-unicast.cfg
@@ -5,6 +5,7 @@ interface Management1
ip address 10.73.255.122/24
!
router bgp 65101
+ timers bgp 4 6 min-hold-time 5 send-failure hold-time 67
!
address-family ipv4 labeled-unicast
update wait-for-convergence
diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-ipv4-labeled-unicast.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-ipv4-labeled-unicast.yml
index 004fa07f5ea..2be120391df 100644
--- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-ipv4-labeled-unicast.yml
+++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-ipv4-labeled-unicast.yml
@@ -1,5 +1,10 @@
router_bgp:
as: 65101
+ timers:
+ keepalive_time: 4
+ hold_time: 6
+ min_hold_time: 5
+ send_failure_hold_time: 67
address_family_ipv4_labeled_unicast:
update_wait_for_convergence: true
aigp_session:
diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md
index a8090791a64..1cb9c3eaf34 100644
--- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md
+++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md
@@ -12,10 +12,10 @@
| [ as_notation](## "router_bgp.as_notation") | String | | | Valid Values:
- asdot
- asplain
| BGP AS can be deplayed in the asplain <1-4294967295> or asdot notation "<1-65535>.<0-65535>". This flag indicates which mode is preferred - asplain is the default. |
| [ router_id](## "router_bgp.router_id") | String | | | | In IP address format A.B.C.D. |
| [ timers](## "router_bgp.timers") | Dictionary | | | | |
- | [ keepalive_time](## "router_bgp.timers.keepalive_time") | Integer | | | Min: 0
Max: 3600 | Time between BGP keepalive messages in seconds. |
- | [ hold_time](## "router_bgp.timers.hold_time") | Integer | | | Min: 0
Max: 7200 | Hold time in seconds. Must be defined along with keepalive_time.
The valid values are 3-7200 or 0 if both values are 0. |
- | [ min_hold_time](## "router_bgp.timers.min_hold_time") | Integer | | | Min: 3
Max: 7200 | Neighbor's minimum hold time constraint in seconds. |
- | [ send_failure_hold_time](## "router_bgp.timers.send_failure_hold_time") | Integer | | | Min: 60
Max: 65335 | Send failure hold time in seconds. |
+ | [ keepalive_time](## "router_bgp.timers.keepalive_time") | Integer | | | Min: 0
Max: 3600 | Time between BGP keepalive messages in seconds.
`keepalive_time` should be lesser than `hold_time`. |
+ | [ hold_time](## "router_bgp.timers.hold_time") | Integer | | | Min: 0
Max: 7200 | Hold time in seconds. Must be defined along with `keepalive_time`.
The valid values are 3-7200 or 0 if both values are 0. |
+ | [ min_hold_time](## "router_bgp.timers.min_hold_time") | Integer | | | Min: 3
Max: 7200 | Neighbor's minimum hold time constraint in seconds.
`min_hold_time` should be less than `hold_time`. |
+ | [ send_failure_hold_time](## "router_bgp.timers.send_failure_hold_time") | Integer | | | Min: 60
Max: 65535 | Send failure hold time in seconds. |
| [ distance](## "router_bgp.distance") | Dictionary | | | | |
| [ external_routes](## "router_bgp.distance.external_routes") | Integer | Required | | Min: 1
Max: 255 | |
| [ internal_routes](## "router_bgp.distance.internal_routes") | Integer | Required | | Min: 1
Max: 255 | |
@@ -1592,17 +1592,19 @@
timers:
# Time between BGP keepalive messages in seconds.
+ # `keepalive_time` should be lesser than `hold_time`.
keepalive_time:
- # Hold time in seconds. Must be defined along with keepalive_time.
+ # Hold time in seconds. Must be defined along with `keepalive_time`.
# The valid values are 3-7200 or 0 if both values are 0.
hold_time:
# Neighbor's minimum hold time constraint in seconds.
+ # `min_hold_time` should be less than `hold_time`.
min_hold_time:
# Send failure hold time in seconds.
- send_failure_hold_time:
+ send_failure_hold_time:
distance:
external_routes:
internal_routes:
diff --git a/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2
index b92960f32d8..65ffa32e5f0 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2
+++ b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/router-bgp.j2
@@ -30,10 +30,11 @@ router bgp {{ router_bgp.as }}
no bgp default ipv4-unicast transport ipv6
{% endif %}
{% if router_bgp.timers is arista.avd.defined %}
+{% set timers_bgp_cli = "timers bgp" %}
{% if router_bgp.timers.keepalive_time is arista.avd.defined and router_bgp.timers.hold_time is arista.avd.defined %}
-{% set timers_bgp_cli = "timers bgp " ~ router_bgp.timers.keepalive_time ~ " " ~ router_bgp.timers.hold_time %}
-{% elif router_bgp.timers.min_hold_time is arista.avd.defined or router_bgp.timers.send_failure_hold_time is arista.avd.defined %}
-{% set timers_bgp_cli = "timers bgp" %}
+{% set timers_bgp_cli = timers_bgp_cli ~ " " ~ router_bgp.timers.keepalive_time ~ " " ~ router_bgp.timers.hold_time %}
+{% endif %}
+{% if router_bgp.timers.min_hold_time is arista.avd.defined or router_bgp.timers.send_failure_hold_time is arista.avd.defined %}
{% if router_bgp.timers.min_hold_time is arista.avd.defined %}
{% set timers_bgp_cli = timers_bgp_cli ~ " min-hold-time " ~ router_bgp.timers.min_hold_time %}
{% endif %}
diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/eos_cli_config_gen.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/eos_cli_config_gen.schema.yml
index b99461095eb..3803be97108 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/schema/eos_cli_config_gen.schema.yml
+++ b/python-avd/pyavd/_eos_cli_config_gen/schema/eos_cli_config_gen.schema.yml
@@ -11898,14 +11898,16 @@ keys:
type: dict
keys:
keepalive_time:
- description: Time between BGP keepalive messages in seconds.
+ description: 'Time between BGP keepalive messages in seconds.
+
+ `keepalive_time` should be lesser than `hold_time`.'
type: int
convert_types:
- str
min: 0
max: 3600
hold_time:
- description: 'Hold time in seconds. Must be defined along with keepalive_time.
+ description: 'Hold time in seconds. Must be defined along with `keepalive_time`.
The valid values are 3-7200 or 0 if both values are 0.'
type: int
@@ -11914,7 +11916,9 @@ keys:
min: 0
max: 7200
min_hold_time:
- description: Neighbor's minimum hold time constraint in seconds.
+ description: 'Neighbor''s minimum hold time constraint in seconds.
+
+ `min_hold_time` should be less than `hold_time`.'
type: int
convert_types:
- str
@@ -11926,7 +11930,7 @@ keys:
convert_types:
- str
min: 60
- max: 65335
+ max: 65535
distance:
type: dict
keys:
diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/router_bgp.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/router_bgp.schema.yml
index da0c8bcab8b..625ee6df1a3 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/router_bgp.schema.yml
+++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/router_bgp.schema.yml
@@ -31,7 +31,9 @@ keys:
type: dict
keys:
keepalive_time:
- description: Time between BGP keepalive messages in seconds.
+ description: |-
+ Time between BGP keepalive messages in seconds.
+ `keepalive_time` should be lesser than `hold_time`.
type: int
convert_types:
- str
@@ -39,7 +41,7 @@ keys:
max: 3600
hold_time:
description: |-
- Hold time in seconds. Must be defined along with keepalive_time.
+ Hold time in seconds. Must be defined along with `keepalive_time`.
The valid values are 3-7200 or 0 if both values are 0.
type: int
convert_types:
@@ -47,7 +49,9 @@ keys:
min: 0
max: 7200
min_hold_time:
- description: Neighbor's minimum hold time constraint in seconds.
+ description: |-
+ Neighbor's minimum hold time constraint in seconds.
+ `min_hold_time` should be less than `hold_time`.
type: int
convert_types:
- str
@@ -59,7 +63,7 @@ keys:
convert_types:
- str
min: 60
- max: 65335
+ max: 65535
distance:
type: dict
keys: