diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/host1.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/host1.md
index 7f7ebf17547..a84aa96ee04 100644
--- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/host1.md
+++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/host1.md
@@ -1020,6 +1020,7 @@ interface Dps1
| Interface | Group Name | Direction |
| --------- | ---------- | --------- |
| Ethernet1 | EVPN_MH_ES1 | upstream |
+| Ethernet1 | EVPN_MH_ES3, EVPN_MH_ES4 | upstream |
| Ethernet3 | EVPN_MH_ES2 | downstream |
##### Phone Interfaces
@@ -1253,6 +1254,8 @@ interface Ethernet1
switchport backup initial-mac-move-delay 10
switchport backup dest-macaddr 01:00:00:00:00:00
link tracking group EVPN_MH_ES1 upstream
+ link tracking group EVPN_MH_ES3 upstream
+ link tracking group EVPN_MH_ES4 upstream
comment
Comment created from eos_cli under ethernet_interfaces.Ethernet1
EOF
@@ -2190,6 +2193,7 @@ interface Ethernet81/10
| Interface | Group Name | Direction |
| --------- | ---------- | --------- |
| Port-Channel5 | EVPN_MH_ES1 | downstream |
+| Port-Channel5 | EVPN_MH_ES3, EVPN_MH_ES4 | downstream |
| Port-Channel15 | EVPN_MH_ES2 | upstream |
##### IPv4
@@ -2275,6 +2279,8 @@ interface Port-Channel5
storm-control multicast level 1
storm-control unknown-unicast level 1
link tracking group EVPN_MH_ES1 downstream
+ link tracking group EVPN_MH_ES3 downstream
+ link tracking group EVPN_MH_ES4 downstream
comment
Comment created from eos_cli under port_channel_interfaces.Port-Channel5
EOF
diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/host1.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/host1.cfg
index ae132c73904..dd9de2b5f5a 100644
--- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/host1.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/host1.cfg
@@ -363,6 +363,8 @@ interface Port-Channel5
storm-control multicast level 1
storm-control unknown-unicast level 1
link tracking group EVPN_MH_ES1 downstream
+ link tracking group EVPN_MH_ES3 downstream
+ link tracking group EVPN_MH_ES4 downstream
comment
Comment created from eos_cli under port_channel_interfaces.Port-Channel5
EOF
@@ -888,6 +890,8 @@ interface Ethernet1
switchport backup initial-mac-move-delay 10
switchport backup dest-macaddr 01:00:00:00:00:00
link tracking group EVPN_MH_ES1 upstream
+ link tracking group EVPN_MH_ES3 upstream
+ link tracking group EVPN_MH_ES4 upstream
comment
Comment created from eos_cli under ethernet_interfaces.Ethernet1
EOF
diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/host1/ethernet-interfaces.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/host1/ethernet-interfaces.yml
index ab8cba8a2ab..c04de97da42 100644
--- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/host1/ethernet-interfaces.yml
+++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/host1/ethernet-interfaces.yml
@@ -14,6 +14,9 @@ ethernet_interfaces:
link_tracking_groups:
- name: EVPN_MH_ES1
direction: upstream
+ link_tracking:
+ direction: upstream
+ groups: [EVPN_MH_ES3, EVPN_MH_ES4]
priority_flow_control:
enabled: true
priorities:
diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/host1/port-channel-interfaces.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/host1/port-channel-interfaces.yml
index 801a7551aa6..928a4e8405a 100644
--- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/host1/port-channel-interfaces.yml
+++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/host1/port-channel-interfaces.yml
@@ -6,6 +6,9 @@ port_channel_interfaces:
link_tracking_groups:
- name: EVPN_MH_ES1
direction: downstream
+ link_tracking:
+ direction: downstream
+ groups: [EVPN_MH_ES3, EVPN_MH_ES4]
switchport:
enabled: true
mode: trunk
diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ethernet-interfaces.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ethernet-interfaces.md
index 4a9211276a1..44d8d6c3243 100644
--- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ethernet-interfaces.md
+++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ethernet-interfaces.md
@@ -47,6 +47,10 @@
| [ link_tracking_groups](## "ethernet_interfaces.[].link_tracking_groups") | List, items: Dictionary | | | | |
| [ - name](## "ethernet_interfaces.[].link_tracking_groups.[].name") | String | Required, Unique | | | Group name. |
| [ direction](## "ethernet_interfaces.[].link_tracking_groups.[].direction") | String | | | Valid Values:
- upstream
- downstream
| |
+ | [ link_tracking](## "ethernet_interfaces.[].link_tracking") | Dictionary | | | | |
+ | [ direction](## "ethernet_interfaces.[].link_tracking.direction") | String | | | Valid Values:
- upstream
- downstream
| |
+ | [ groups](## "ethernet_interfaces.[].link_tracking.groups") | List, items: String | | | | Link state group(s) an interface belongs to. |
+ | [ - <str>](## "ethernet_interfaces.[].link_tracking.groups.[]") | String | | | | Group names. |
| [ evpn_ethernet_segment](## "ethernet_interfaces.[].evpn_ethernet_segment") | Dictionary | | | | |
| [ identifier](## "ethernet_interfaces.[].evpn_ethernet_segment.identifier") | String | | | | EVPN Ethernet Segment Identifier (Type 1 format). |
| [ redundancy](## "ethernet_interfaces.[].evpn_ethernet_segment.redundancy") | String | | | Valid Values:
- all-active
- single-active
| |
@@ -597,6 +601,14 @@
# Group name.
- name:
direction:
+ link_tracking:
+ direction:
+
+ # Link state group(s) an interface belongs to.
+ groups:
+
+ # Group names.
+ -
evpn_ethernet_segment:
# EVPN Ethernet Segment Identifier (Type 1 format).
diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/port-channel-interfaces.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/port-channel-interfaces.md
index 181296ff82d..840726474c3 100644
--- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/port-channel-interfaces.md
+++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/port-channel-interfaces.md
@@ -56,6 +56,10 @@
| [ link_tracking_groups](## "port_channel_interfaces.[].link_tracking_groups") | List, items: Dictionary | | | | |
| [ - name](## "port_channel_interfaces.[].link_tracking_groups.[].name") | String | Required, Unique | | | Group name. |
| [ direction](## "port_channel_interfaces.[].link_tracking_groups.[].direction") | String | | | Valid Values:
- upstream
- downstream
| |
+ | [ link_tracking](## "port_channel_interfaces.[].link_tracking") | Dictionary | | | | |
+ | [ direction](## "port_channel_interfaces.[].link_tracking.direction") | String | | | Valid Values:
- upstream
- downstream
| |
+ | [ groups](## "port_channel_interfaces.[].link_tracking.groups") | List, items: String | | | | Link state group(s) an interface belongs to. |
+ | [ - <str>](## "port_channel_interfaces.[].link_tracking.groups.[]") | String | | | | Group names. |
| [ phone](## "port_channel_interfaces.[].phone") deprecated | Dictionary | | | | This key is deprecated. Support will be removed in AVD version 6.0.0. Use switchport.phone instead. |
| [ trunk](## "port_channel_interfaces.[].phone.trunk") | String | | | Valid Values:
- tagged
- untagged
| |
| [ vlan](## "port_channel_interfaces.[].phone.vlan") | Integer | | | Min: 1
Max: 4094 | |
@@ -469,6 +473,14 @@
# Group name.
- name:
direction:
+ link_tracking:
+ direction:
+
+ # Link state group(s) an interface belongs to.
+ groups:
+
+ # Group names.
+ -
# This key is deprecated.
# Support will be removed in AVD version 6.0.0.
# Use switchport.phone instead.
diff --git a/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/ethernet-interfaces.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/ethernet-interfaces.j2
index 35beb2db573..dbd0bd9b9c6 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/ethernet-interfaces.j2
+++ b/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/ethernet-interfaces.j2
@@ -334,6 +334,9 @@
| {{ link_tracking_interface.name }} | {{ link_tracking_group.name }} | {{ link_tracking_group.direction }} |
{% endif %}
{% endfor %}
+{% if link_tracking_interface.link_tracking.direction is arista.avd.defined and link_tracking_interface.link_tracking.groups is arista.avd.defined %}
+| {{ link_tracking_interface.name }} | {{ link_tracking_interface.link_tracking.groups | join(', ') }} | {{ link_tracking_interface.link_tracking.direction }} |
+{% endif %}
{% endfor %}
{% endif %}
{# Phone Interfaces #}
diff --git a/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/port-channel-interfaces.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/port-channel-interfaces.j2
index 0f4beb36ce1..a12627fd244 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/port-channel-interfaces.j2
+++ b/python-avd/pyavd/_eos_cli_config_gen/j2templates/documentation/port-channel-interfaces.j2
@@ -291,6 +291,9 @@
| {{ link_tracking_interface.name }} | {{ link_tracking_group.name }} | {{ link_tracking_group.direction }} |
{% endif %}
{% endfor %}
+{% if link_tracking_interface.link_tracking.direction is arista.avd.defined and link_tracking_interface.link_tracking.groups is arista.avd.defined %}
+| {{ link_tracking_interface.name }} | {{ link_tracking_interface.link_tracking.groups | join(', ') }} | {{ link_tracking_interface.link_tracking.direction }} |
+{% endif %}
{% endfor %}
{% endif %}
{# IPv4 #}
diff --git a/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/ethernet-interfaces.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/ethernet-interfaces.j2
index 4da67bafade..a87e3d8d713 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/ethernet-interfaces.j2
+++ b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/ethernet-interfaces.j2
@@ -907,6 +907,11 @@ interface {{ ethernet_interface.name }}
link tracking group {{ link_tracking_group.name }} {{ link_tracking_group.direction }}
{% endif %}
{% endfor %}
+{% if ethernet_interface.link_tracking.direction is arista.avd.defined and ethernet_interface.link_tracking.groups is arista.avd.defined %}
+{% for group_name in ethernet_interface.link_tracking.groups %}
+ link tracking group {{ group_name }} {{ ethernet_interface.link_tracking.direction }}
+{% endfor %}
+{% endif %}
{% if ethernet_interface.vmtracer is arista.avd.defined(true) %}
vmtracer vmware-esx
{% endif %}
diff --git a/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/port-channel-interfaces.j2 b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/port-channel-interfaces.j2
index 62ef64ce27c..10cedbd0636 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/port-channel-interfaces.j2
+++ b/python-avd/pyavd/_eos_cli_config_gen/j2templates/eos/port-channel-interfaces.j2
@@ -726,6 +726,11 @@ interface {{ port_channel_interface.name }}
link tracking group {{ link_tracking_group.name }} {{ link_tracking_group.direction }}
{% endif %}
{% endfor %}
+{% if port_channel_interface.link_tracking.direction is arista.avd.defined and port_channel_interface.link_tracking.groups is arista.avd.defined %}
+{% for group_name in port_channel_interface.link_tracking.groups %}
+ link tracking group {{ group_name }} {{ port_channel_interface.link_tracking.direction }}
+{% endfor %}
+{% endif %}
{% if port_channel_interface.vmtracer is arista.avd.defined(true) %}
vmtracer vmware-esx
{% 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 c1fe38df9a6..27be11dd90c 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
@@ -2239,6 +2239,20 @@ keys:
valid_values:
- upstream
- downstream
+ link_tracking:
+ type: dict
+ keys:
+ direction:
+ type: str
+ valid_values:
+ - upstream
+ - downstream
+ groups:
+ type: list
+ description: Link state group(s) an interface belongs to.
+ items:
+ type: str
+ description: Group names.
evpn_ethernet_segment:
type: dict
keys:
@@ -9494,6 +9508,20 @@ keys:
valid_values:
- upstream
- downstream
+ link_tracking:
+ type: dict
+ keys:
+ direction:
+ type: str
+ valid_values:
+ - upstream
+ - downstream
+ groups:
+ type: list
+ description: Link state group(s) an interface belongs to.
+ items:
+ type: str
+ description: Group names.
phone:
type: dict
deprecation:
diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/ethernet_interfaces.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/ethernet_interfaces.schema.yml
index f20d4a1dff9..00822220f92 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/ethernet_interfaces.schema.yml
+++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/ethernet_interfaces.schema.yml
@@ -195,6 +195,18 @@ keys:
direction:
type: str
valid_values: ["upstream", "downstream"]
+ link_tracking:
+ type: dict
+ keys:
+ direction:
+ type: str
+ valid_values: ["upstream", "downstream"]
+ groups:
+ type: list
+ description: Link state group(s) an interface belongs to.
+ items:
+ type: str
+ description: Group names.
evpn_ethernet_segment:
type: dict
keys:
diff --git a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/port_channel_interfaces.schema.yml b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/port_channel_interfaces.schema.yml
index b06d19b30ca..3fba4a682d8 100644
--- a/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/port_channel_interfaces.schema.yml
+++ b/python-avd/pyavd/_eos_cli_config_gen/schema/schema_fragments/port_channel_interfaces.schema.yml
@@ -321,6 +321,18 @@ keys:
valid_values:
- upstream
- downstream
+ link_tracking:
+ type: dict
+ keys:
+ direction:
+ type: str
+ valid_values: ["upstream", "downstream"]
+ groups:
+ type: list
+ description: Link state group(s) an interface belongs to.
+ items:
+ type: str
+ description: Group names.
phone:
type: dict
deprecation: