diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD1-LEAF2B.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD1-LEAF2B.yml
index e7b55cb73e2..216bf33c707 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD1-LEAF2B.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD1-LEAF2B.yml
@@ -656,9 +656,9 @@ ethernet_interfaces:
enabled: false
shutdown: false
ip_address: 11.1.0.38/31
- description: P2P_DC2-POD1-LEAF1A_Ethernet7
ptp:
enable: true
+ description: P2P_DC2-POD1-LEAF1A_Ethernet7
- name: Ethernet16
peer: server-1
peer_interface: Eth2
diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD2-SPINE2.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD2-SPINE2.yml
index a62e1233544..24dbb6ca8fd 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD2-SPINE2.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD2-SPINE2.yml
@@ -170,9 +170,9 @@ ethernet_interfaces:
enabled: false
shutdown: false
ip_address: 200.200.200.101/24
- description: P2P_DC2-POD1-SPINE2_Ethernet5
ptp:
enable: true
+ description: P2P_DC2-POD1-SPINE2_Ethernet5
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-SUPER-SPINE1.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-SUPER-SPINE1.yml
index 4a1e427bae6..bad6a3c60ea 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-SUPER-SPINE1.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-SUPER-SPINE1.yml
@@ -170,11 +170,11 @@ ethernet_interfaces:
enabled: false
shutdown: false
ip_address: 11.1.2.0/31
+ ptp:
+ enable: true
mac_security:
profile: MACSEC_PROFILE
description: P2P_DC2-SUPER-SPINE1_Ethernet4
- ptp:
- enable: true
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-LEAF1A.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-LEAF1A.yml
index ccd6017d426..467398a46d3 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-LEAF1A.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-LEAF1A.yml
@@ -272,9 +272,9 @@ ethernet_interfaces:
enabled: false
shutdown: false
ip_address: 11.1.0.39/31
- description: P2P_DC1-POD1-LEAF2B_Ethernet7
ptp:
enable: true
+ description: P2P_DC1-POD1-LEAF2B_Ethernet7
port_channel_interfaces:
- name: Port-Channel3
description: L2_DC2-POD1-L2LEAF1A_Port-Channel1
diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-SPINE2.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-SPINE2.yml
index 41e5c6b56db..3b860b45e9d 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-SPINE2.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-SPINE2.yml
@@ -154,9 +154,9 @@ ethernet_interfaces:
enabled: false
shutdown: false
ip_address: 200.200.200.201/24
- description: P2P_DC1-POD2-SPINE2_Ethernet4
ptp:
enable: true
+ description: P2P_DC1-POD2-SPINE2_Ethernet4
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-SUPER-SPINE1.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-SUPER-SPINE1.yml
index 24fff311dbf..b16baa75a0b 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-SUPER-SPINE1.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-SUPER-SPINE1.yml
@@ -219,11 +219,11 @@ ethernet_interfaces:
enabled: false
shutdown: false
ip_address: 11.1.2.1/31
+ ptp:
+ enable: true
mac_security:
profile: MACSEC_PROFILE
description: P2P_DC1-SUPER-SPINE1_Ethernet6
- ptp:
- enable: true
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/configs/host1.cfg b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/configs/host1.cfg
index 63411758be5..cd8ed9f0f66 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/configs/host1.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/configs/host1.cfg
@@ -19,6 +19,27 @@ management api http-commands
vrf MGMT
no shutdown
!
+interface Port-Channel1
+ description SERVER_OLD_SW-1/2_ENDPOINT_PORT_CHANNEL
+ no shutdown
+ switchport
+ ptp enable
+ ptp announce interval 0
+ ptp announce timeout 3
+ ptp delay-req interval -3
+ ptp sync-message interval -3
+ ptp transport ipv4
+!
+interface Ethernet1
+ description SERVER_OLD_SW-1/2_Endpoint_port1
+ no shutdown
+ channel-group 1 mode active
+!
+interface Ethernet2
+ description SERVER_OLD_SW-1/2_ENDPOINT_PORT2
+ no shutdown
+ channel-group 1 mode active
+!
interface Loopback0
description CUSTOM_ROUTER_ID
no shutdown
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/structured_configs/host1.yml b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/structured_configs/host1.yml
index 0e8dc9ceee6..df2428710de 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/structured_configs/host1.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/structured_configs/host1.yml
@@ -100,3 +100,37 @@ vxlan_interface:
vxlan:
udp_port: 4789
source_interface: Loopback1
+ethernet_interfaces:
+- name: Ethernet1
+ peer: OLD_SW-1/2
+ peer_interface: Endpoint_port1
+ peer_type: server
+ description: SERVER_OLD_SW-1/2_Endpoint_port1
+ shutdown: false
+ channel_group:
+ id: 1
+ mode: active
+- name: Ethernet2
+ peer: OLD_SW-1/2
+ peer_interface: ENDPOINT_PORT2
+ peer_type: server
+ description: SERVER_OLD_SW-1/2_ENDPOINT_PORT2
+ shutdown: false
+ channel_group:
+ id: 1
+ mode: active
+port_channel_interfaces:
+- name: Port-Channel1
+ description: SERVER_OLD_SW-1/2_ENDPOINT_PORT_CHANNEL
+ shutdown: false
+ ptp:
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
+ enable: true
+ switchport:
+ enabled: true
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/inventory/host_vars/host1/connected-endpoints.yml b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/inventory/host_vars/host1/connected-endpoints.yml
new file mode 100644
index 00000000000..5ba631de111
--- /dev/null
+++ b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/inventory/host_vars/host1/connected-endpoints.yml
@@ -0,0 +1,14 @@
+---
+# Test deprecated key endpoint_role - bmca
+servers:
+ - name: OLD_SW-1/2
+ adapters:
+ - switches: [host1, host1]
+ switch_ports: [Ethernet1, Ethernet2]
+ endpoint_ports: [Endpoint_port1, ENDPOINT_PORT2]
+ port_channel:
+ mode: "active"
+ endpoint_port_channel: ENDPOINT_PORT_CHANNEL
+ ptp:
+ enabled: true
+ endpoint_role: bmca
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/failure-p2p-links-ptp-profile-does-not-exist.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/failure-p2p-links-ptp-profile-does-not-exist.yml
new file mode 100644
index 00000000000..826e6522a09
--- /dev/null
+++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/failure-p2p-links-ptp-profile-does-not-exist.yml
@@ -0,0 +1,29 @@
+---
+type: l3leaf
+
+ptp_profiles:
+ - profile: PROFILE-1
+
+l3leaf:
+ defaults:
+ loopback_ipv4_pool: 10.254.1.0/27
+ vtep_loopback_ipv4_pool: 10.254.11.0/27
+ nodes:
+ - name: failure-p2p-links-ptp-profile-does-not-exist
+ id: 1
+ bgp_as: 65101
+ mgmt_ip: 192.168.0.101/24
+ ptp:
+ enabled: true
+
+l3_edge:
+ p2p_links:
+ - nodes: [failure-p2p-links-ptp-profile-does-not-exist, not-in-fabric]
+ interfaces: [Ethernet10, Ethernet11]
+ ip: [192.168.0.2/31, 192.168.0.3/31]
+ ptp:
+ enabled: true
+ profile: PROFILE DOES NOT EXIST
+
+expected_error_message: >-
+ PTP Profile 'PROFILE DOES NOT EXIST' referenced under l3_edge.p2p_links does not exist in `ptp_profiles`.
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml
index 82134b2f75e..9ec68dcf98c 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml
@@ -107,6 +107,7 @@ all:
failure-missing-evpn-multicast-peg-rps:
failure-missing-evpn-multicast-with-pim:
failure-network-port-ptp-profile-does-not-exist:
+ failure-p2p-links-ptp-profile-does-not-exist:
failure-no-local-path-group-in-default-policy:
failure-adapter-ptp-profile-does-not-exist:
failure-svi-grandparent-profile-does-not-exist:
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-1-isis-sr-ldp.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-1-isis-sr-ldp.cfg
index 614d56a116d..94fd990aab6 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-1-isis-sr-ldp.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-1-isis-sr-ldp.cfg
@@ -10,6 +10,19 @@ service routing protocols model multi-agent
!
hostname core-1-isis-sr-ldp
!
+ptp clock-identity 00:1C:73:7f:00:01
+ptp domain 127
+ptp mode boundary
+ptp priority1 127
+ptp priority2 1
+ptp monitor threshold offset-from-master 250
+ptp monitor threshold mean-path-delay 1500
+ptp monitor sequence-id
+ptp monitor threshold missing-message sync 3 sequence-ids
+ptp monitor threshold missing-message follow-up 3 sequence-ids
+ptp monitor threshold missing-message delay-resp 3 sequence-ids
+ptp monitor threshold missing-message announce 3 sequence-ids
+!
spanning-tree mode none
!
vrf instance MGMT
@@ -67,6 +80,12 @@ interface Port-Channel16
mpls ldp igp sync
mpls ldp interface
mpls ip
+ ptp enable
+ ptp announce interval 0
+ ptp announce timeout 3
+ ptp delay-req interval -3
+ ptp sync-message interval -3
+ ptp transport ipv4
isis enable CORE
isis circuit-type level-2
isis metric 60
@@ -194,6 +213,12 @@ interface Ethernet10
mpls ldp igp sync
mpls ldp interface
mpls ip
+ ptp enable
+ ptp announce interval 0
+ ptp announce timeout 3
+ ptp delay-req interval -3
+ ptp sync-message interval -3
+ ptp transport ipv4
isis enable CORE
isis circuit-type level-2
isis metric 50
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-2-ospf-ldp.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-2-ospf-ldp.cfg
index 42812ae570d..661787137a3 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-2-ospf-ldp.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-2-ospf-ldp.cfg
@@ -10,6 +10,19 @@ service routing protocols model multi-agent
!
hostname core-2-ospf-ldp
!
+ptp clock-identity 00:1C:73:7f:00:02
+ptp domain 127
+ptp mode boundary
+ptp priority1 127
+ptp priority2 2
+ptp monitor threshold offset-from-master 250
+ptp monitor threshold mean-path-delay 1500
+ptp monitor sequence-id
+ptp monitor threshold missing-message sync 3 sequence-ids
+ptp monitor threshold missing-message follow-up 3 sequence-ids
+ptp monitor threshold missing-message delay-resp 3 sequence-ids
+ptp monitor threshold missing-message announce 3 sequence-ids
+!
spanning-tree mode none
!
vrf instance MGMT
@@ -59,6 +72,12 @@ interface Port-Channel16
mpls ip
ip ospf network point-to-point
ip ospf area 0.0.0.0
+ ptp enable
+ ptp announce interval 0
+ ptp announce timeout 3
+ ptp delay-req interval -3
+ ptp sync-message interval -3
+ ptp transport ipv4
!
interface Ethernet1
description P2P_LINK_TO_CORE-1-ISIS-SR-LDP_Ethernet1
@@ -154,6 +173,12 @@ interface Ethernet10
mpls ip
ip ospf network point-to-point
ip ospf area 0.0.0.0
+ ptp enable
+ ptp announce interval 0
+ ptp announce timeout 3
+ ptp delay-req interval -3
+ ptp sync-message interval -3
+ ptp transport ipv4
!
interface Ethernet12
description P2P_LINK_TO_CORE-1-ISIS-SR-LDP_Ethernet12
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_bgp.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_bgp.cfg
index 4cfaba9b585..ab2a855e46d 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_bgp.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_bgp.cfg
@@ -10,6 +10,19 @@ service routing protocols model multi-agent
!
hostname l3_edge_bgp
!
+ptp clock-identity 00:1C:73:14:00:01
+ptp domain 127
+ptp mode boundary
+ptp priority1 20
+ptp priority2 1
+ptp monitor threshold offset-from-master 250
+ptp monitor threshold mean-path-delay 1500
+ptp monitor sequence-id
+ptp monitor threshold missing-message sync 3 sequence-ids
+ptp monitor threshold missing-message follow-up 3 sequence-ids
+ptp monitor threshold missing-message delay-resp 3 sequence-ids
+ptp monitor threshold missing-message announce 3 sequence-ids
+!
spanning-tree mode none
!
vrf instance MGMT
@@ -44,6 +57,11 @@ interface ethernet1
ip address 192.168.0.0/31
mac security profile TEST-MACSEC-PROFILE
ptp enable
+ ptp announce interval 0
+ ptp announce timeout 3
+ ptp delay-req interval -3
+ ptp sync-message interval -3
+ ptp transport ipv4
service-policy type qos input TEST_POLICY
service-profile TEST-QOS-PROFILE
! TEST RAW_EOS_CLI
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_isis.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_isis.cfg
index c1ff76a9de2..4920f2721dd 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_isis.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_isis.cfg
@@ -10,6 +10,19 @@ service routing protocols model multi-agent
!
hostname l3_edge_isis
!
+ptp clock-identity 00:1C:73:14:00:01
+ptp domain 127
+ptp mode boundary
+ptp priority1 20
+ptp priority2 1
+ptp monitor threshold offset-from-master 250
+ptp monitor threshold mean-path-delay 1500
+ptp monitor sequence-id
+ptp monitor threshold missing-message sync 3 sequence-ids
+ptp monitor threshold missing-message follow-up 3 sequence-ids
+ptp monitor threshold missing-message delay-resp 3 sequence-ids
+ptp monitor threshold missing-message announce 3 sequence-ids
+!
spanning-tree mode none
!
vrf instance MGMT
@@ -30,6 +43,11 @@ interface ethernet1
ip address 192.168.0.0/31
mac security profile TEST-MACSEC-PROFILE
ptp enable
+ ptp announce interval 0
+ ptp announce timeout 3
+ ptp delay-req interval -3
+ ptp sync-message interval -3
+ ptp transport ipv4
service-profile TEST-QOS-PROFILE
!
interface ethernet2
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_ospf.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_ospf.cfg
index 762df9dc35f..b654bece544 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_ospf.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_ospf.cfg
@@ -10,6 +10,19 @@ service routing protocols model multi-agent
!
hostname l3_edge_ospf
!
+ptp clock-identity 00:1C:73:14:00:01
+ptp domain 127
+ptp mode boundary
+ptp priority1 20
+ptp priority2 1
+ptp monitor threshold offset-from-master 250
+ptp monitor threshold mean-path-delay 1500
+ptp monitor sequence-id
+ptp monitor threshold missing-message sync 3 sequence-ids
+ptp monitor threshold missing-message follow-up 3 sequence-ids
+ptp monitor threshold missing-message delay-resp 3 sequence-ids
+ptp monitor threshold missing-message announce 3 sequence-ids
+!
spanning-tree mode none
!
vrf instance MGMT
@@ -30,6 +43,11 @@ interface ethernet1
ip address 192.168.0.0/31
mac security profile TEST-MACSEC-PROFILE
ptp enable
+ ptp announce interval 0
+ ptp announce timeout 3
+ ptp delay-req interval -3
+ ptp sync-message interval -3
+ ptp transport ipv4
service-profile TEST-QOS-PROFILE
!
interface ethernet2
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-leaf1.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-leaf1.cfg
index 4d30b44ee00..a733181d4b7 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-leaf1.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-leaf1.cfg
@@ -193,7 +193,7 @@ interface Ethernet12
channel-group 12 mode active
!
interface Ethernet13
- description SERVER_bmca-endpoint_eth1
+ description SERVER_dynamic-endpoint_eth1
no shutdown
switchport access vlan 11
switchport mode access
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine1.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine1.cfg
index 1145a809124..fb7e12507c4 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine1.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine1.cfg
@@ -92,10 +92,10 @@ interface Ethernet6
mtu 9214
no switchport
ptp enable
- ptp announce interval 0
- ptp announce timeout 3
- ptp delay-req interval -3
- ptp sync-message interval -3
+ ptp announce interval 2
+ ptp announce timeout 10
+ ptp delay-req interval 2
+ ptp sync-message interval 2
ptp transport ipv4
!
interface Ethernet7
@@ -107,6 +107,7 @@ interface Ethernet7
ptp announce interval 0
ptp announce timeout 3
ptp delay-req interval -3
+ ptp role master
ptp sync-message interval -3
ptp transport ipv4
!
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine2.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine2.cfg
index 3f1d97728f7..fc956cf3905 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine2.cfg
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine2.cfg
@@ -48,10 +48,10 @@ interface Ethernet6
mtu 9214
no switchport
ptp enable
- ptp announce interval 0
- ptp announce timeout 3
- ptp delay-req interval -3
- ptp sync-message interval -3
+ ptp announce interval 2
+ ptp announce timeout 10
+ ptp delay-req interval 2
+ ptp sync-message interval 2
ptp transport ipv4
!
interface Ethernet7
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-1-isis-sr-ldp.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-1-isis-sr-ldp.yml
index bfd506aff18..dc0f7996f6e 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-1-isis-sr-ldp.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-1-isis-sr-ldp.yml
@@ -27,6 +27,24 @@ management_api_http:
enable_vrfs:
- name: MGMT
enable_https: true
+ptp:
+ mode: boundary
+ clock_identity: 00:1C:73:7f:00:01
+ priority1: 127
+ priority2: 1
+ domain: 127
+ monitor:
+ enabled: true
+ threshold:
+ offset_from_master: 250
+ mean_path_delay: 1500
+ missing_message:
+ sequence_ids:
+ enabled: true
+ announce: 3
+ delay_resp: 3
+ follow_up: 3
+ sync: 3
router_general:
router_id:
ipv4: 10.0.0.1
@@ -236,6 +254,15 @@ ethernet_interfaces:
shutdown: false
mtu: 1500
ip_address: 100.64.48.12/31
+ ptp:
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
+ enable: true
isis_enable: CORE
isis_metric: 50
isis_network_point_to_point: true
@@ -435,6 +462,15 @@ port_channel_interfaces:
shutdown: false
mtu: 1500
ip_address: 100.64.48.16/31
+ ptp:
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
+ enable: true
ipv6_enable: true
isis_enable: CORE
isis_metric: 60
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-2-ospf-ldp.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-2-ospf-ldp.yml
index d57edb98af2..33858baf8be 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-2-ospf-ldp.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-2-ospf-ldp.yml
@@ -27,6 +27,24 @@ management_api_http:
enable_vrfs:
- name: MGMT
enable_https: true
+ptp:
+ mode: boundary
+ clock_identity: 00:1C:73:7f:00:02
+ priority1: 127
+ priority2: 2
+ domain: 127
+ monitor:
+ enabled: true
+ threshold:
+ offset_from_master: 250
+ mean_path_delay: 1500
+ missing_message:
+ sequence_ids:
+ enabled: true
+ announce: 3
+ delay_resp: 3
+ follow_up: 3
+ sync: 3
router_general:
router_id:
ipv4: 10.0.0.2
@@ -181,6 +199,15 @@ ethernet_interfaces:
shutdown: false
mtu: 1500
ip_address: 100.64.48.13/31
+ ptp:
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
+ enable: true
ospf_network_point_to_point: true
ospf_area: 0.0.0.0
mpls:
@@ -298,6 +325,15 @@ port_channel_interfaces:
shutdown: false
mtu: 1500
ip_address: 100.64.48.17/31
+ ptp:
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
+ enable: true
ipv6_enable: true
ospf_network_point_to_point: true
ospf_area: 0.0.0.0
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/custom-ptp-profile.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/custom-ptp-profile.yml
index 9daa77e0615..f441ed5e67e 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/custom-ptp-profile.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/custom-ptp-profile.yml
@@ -140,7 +140,6 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_not-in-this-fabric_Ethernet8
ptp:
announce:
interval: 4
@@ -150,6 +149,7 @@ ethernet_interfaces:
interval: -7
transport: ipv4
enable: true
+ description: P2P_not-in-this-fabric_Ethernet8
vlans:
- id: 11
name: VLAN11
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_bgp.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_bgp.yml
index c3ceb717a5f..cd4fb857328 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_bgp.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_bgp.yml
@@ -72,6 +72,24 @@ management_api_http:
enable_vrfs:
- name: MGMT
enable_https: true
+ptp:
+ mode: boundary
+ clock_identity: 00:1C:73:14:00:01
+ priority1: 20
+ priority2: 1
+ domain: 127
+ monitor:
+ enabled: true
+ threshold:
+ offset_from_master: 250
+ mean_path_delay: 1500
+ missing_message:
+ sequence_ids:
+ enabled: true
+ announce: 3
+ delay_resp: 3
+ follow_up: 3
+ sync: 3
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
@@ -103,12 +121,19 @@ ethernet_interfaces:
'
ip_address: 192.168.0.0/31
+ ptp:
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
+ enable: true
mac_security:
profile: TEST-MACSEC-PROFILE
description: P2P_peer1_ethernet1
speed: forced 10000full
- ptp:
- enable: true
service_policy:
qos:
input: TEST_POLICY
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_isis.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_isis.yml
index 207a4a9a407..a659f6cfe9f 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_isis.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_isis.yml
@@ -22,6 +22,24 @@ management_api_http:
enable_vrfs:
- name: MGMT
enable_https: true
+ptp:
+ mode: boundary
+ clock_identity: 00:1C:73:14:00:01
+ priority1: 20
+ priority2: 1
+ domain: 127
+ monitor:
+ enabled: true
+ threshold:
+ offset_from_master: 250
+ mean_path_delay: 1500
+ missing_message:
+ sequence_ids:
+ enabled: true
+ announce: 3
+ delay_resp: 3
+ follow_up: 3
+ sync: 3
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
@@ -49,12 +67,19 @@ ethernet_interfaces:
mtu: 2000
service_profile: TEST-QOS-PROFILE
ip_address: 192.168.0.0/31
+ ptp:
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
+ enable: true
mac_security:
profile: TEST-MACSEC-PROFILE
description: P2P_peer1_ethernet1
speed: forced 10000full
- ptp:
- enable: true
- name: ethernet2
peer: peer2
peer_interface: ethernet2
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_ospf.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_ospf.yml
index 703e8a7d313..d7d84e4d162 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_ospf.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_ospf.yml
@@ -22,6 +22,24 @@ management_api_http:
enable_vrfs:
- name: MGMT
enable_https: true
+ptp:
+ mode: boundary
+ clock_identity: 00:1C:73:14:00:01
+ priority1: 20
+ priority2: 1
+ domain: 127
+ monitor:
+ enabled: true
+ threshold:
+ offset_from_master: 250
+ mean_path_delay: 1500
+ missing_message:
+ sequence_ids:
+ enabled: true
+ announce: 3
+ delay_resp: 3
+ follow_up: 3
+ sync: 3
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
@@ -50,12 +68,19 @@ ethernet_interfaces:
mtu: 2000
service_profile: TEST-QOS-PROFILE
ip_address: 192.168.0.0/31
+ ptp:
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
+ enable: true
mac_security:
profile: TEST-MACSEC-PROFILE
description: P2P_peer1_ethernet1
speed: forced 10000full
- ptp:
- enable: true
- name: ethernet2
peer: peer2
peer_interface: ethernet2
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-leaf1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-leaf1.yml
index ea3eee408f2..76a1308679e 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-leaf1.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-leaf1.yml
@@ -359,11 +359,11 @@ ethernet_interfaces:
id: 14
mode: active
- name: Ethernet13
- peer: bmca-endpoint
+ peer: dynamic-endpoint
peer_interface: eth1
peer_type: server
- port_profile: PTP-profile-BMCA
- description: SERVER_bmca-endpoint_eth1
+ port_profile: PTP-profile-dynamic
+ description: SERVER_dynamic-endpoint_eth1
shutdown: false
switchport:
enabled: true
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine1.yml
index 3b32eeca7db..651c29025ba 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine1.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine1.yml
@@ -207,16 +207,16 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_ptp-tests-spine2_Ethernet6
ptp:
announce:
- interval: 0
- timeout: 3
- delay_req: -3
+ interval: 2
+ timeout: 10
+ delay_req: 2
sync_message:
- interval: -3
+ interval: 2
transport: ipv4
enable: true
+ description: P2P_ptp-tests-spine2_Ethernet6
- name: Ethernet7
peer: ptp-tests-spine2
peer_interface: Ethernet7
@@ -225,7 +225,6 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_ptp-tests-spine2_Ethernet7
ptp:
announce:
interval: 0
@@ -234,7 +233,9 @@ ethernet_interfaces:
sync_message:
interval: -3
transport: ipv4
+ role: master
enable: true
+ description: P2P_ptp-tests-spine2_Ethernet7
- name: Ethernet8
peer: ptp-tests-spine2
peer_interface: Ethernet8
@@ -243,7 +244,6 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_ptp-tests-spine2_Ethernet8
ptp:
announce:
interval: 0
@@ -253,6 +253,7 @@ ethernet_interfaces:
interval: -3
transport: ipv4
enable: true
+ description: P2P_ptp-tests-spine2_Ethernet8
- name: Ethernet9
peer: ptp-tests-spine2
peer_interface: Ethernet9
@@ -261,7 +262,6 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_ptp-tests-spine2_Ethernet9
ptp:
announce:
interval: 0
@@ -271,6 +271,7 @@ ethernet_interfaces:
interval: -3
transport: ipv4
enable: true
+ description: P2P_ptp-tests-spine2_Ethernet9
loopback_interfaces:
- name: Loopback0
description: ROUTER_ID
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine2.yml
index 95361e29f9e..c555572bccb 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine2.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine2.yml
@@ -135,16 +135,16 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_ptp-tests-spine1_Ethernet6
ptp:
announce:
- interval: 0
- timeout: 3
- delay_req: -3
+ interval: 2
+ timeout: 10
+ delay_req: 2
sync_message:
- interval: -3
+ interval: 2
transport: ipv4
enable: true
+ description: P2P_ptp-tests-spine1_Ethernet6
- name: Ethernet7
peer: ptp-tests-spine1
peer_interface: Ethernet7
@@ -153,7 +153,6 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_ptp-tests-spine1_Ethernet7
ptp:
announce:
interval: 0
@@ -163,6 +162,7 @@ ethernet_interfaces:
interval: -3
transport: ipv4
enable: true
+ description: P2P_ptp-tests-spine1_Ethernet7
- name: Ethernet8
peer: ptp-tests-spine1
peer_interface: Ethernet8
@@ -171,7 +171,6 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_ptp-tests-spine1_Ethernet8
ptp:
announce:
interval: 0
@@ -181,6 +180,7 @@ ethernet_interfaces:
interval: -3
transport: ipv4
enable: true
+ description: P2P_ptp-tests-spine1_Ethernet8
- name: Ethernet9
peer: ptp-tests-spine1
peer_interface: Ethernet9
@@ -189,7 +189,6 @@ ethernet_interfaces:
enabled: false
shutdown: false
mtu: 9214
- description: P2P_ptp-tests-spine1_Ethernet9
ptp:
announce:
interval: 0
@@ -199,5 +198,6 @@ ethernet_interfaces:
interval: -3
transport: ipv4
enable: true
+ description: P2P_ptp-tests-spine1_Ethernet9
metadata:
platform: vEOS-LAB
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CORE_UNIT_TESTS.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CORE_UNIT_TESTS.yml
index 5e6ebb4f3b1..d2e3eb9e8af 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CORE_UNIT_TESTS.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CORE_UNIT_TESTS.yml
@@ -47,8 +47,12 @@ core_router:
nodes:
- name: core-1-isis-sr-ldp
id: 1
+ ptp:
+ enabled: true
- name: core-2-ospf-ldp
id: 2
+ ptp:
+ enabled: true
- name: core-3-isis-sr-ldp
id: 3
- name: core-4-multicast
@@ -77,6 +81,8 @@ core_interfaces:
speed: "forced 1000full"
mtu: 1500
ip_pool: underlay_pool
+ ptp:
+ enabled: true
# Testing merge of structured config on profile and link.
structured_config:
l2_mtu: 2222
@@ -184,6 +190,8 @@ core_interfaces:
- node: core-2-ospf-ldp
interfaces: [ Ethernet16, Ethernet17 ]
profile: isis_bb_profile
+ ptp:
+ enabled: true
# P2P core links with underlay_multicast(pim-sparse) enabled.
- nodes: [ core-4-multicast, peer1 ]
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/PTP_TESTS.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/PTP_TESTS.yml
index c21d43b644f..2ef8cec0535 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/PTP_TESTS.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/PTP_TESTS.yml
@@ -14,11 +14,13 @@ core_interfaces:
interfaces: [ Ethernet6, Ethernet6 ]
ptp:
enabled: true
+ profile: myptpprofile
include_in_underlay_protocol: false
- nodes: [ ptp-tests-spine1, ptp-tests-spine2 ]
interfaces: [ Ethernet7, Ethernet7 ]
ptp:
enabled: true
+ roles: ["master", "dynamic"]
include_in_underlay_protocol: false
# Testing the same as above with l3_edge
@@ -59,20 +61,20 @@ tenants:
ip_address: 172.17.11.1/24
port_profiles:
- - profile: PTP-profile-BMCA
+ - profile: PTP-profile-dynamic
vlans: 11
mode: access
ptp:
enabled: true
- endpoint_role: bmca
+ endpoint_role: dynamic
servers:
- - name: bmca-endpoint
+ - name: dynamic-endpoint
adapters:
- endpoint_ports: [ eth1 ]
switch_ports: [ Ethernet13 ]
switches: [ ptp-tests-leaf1 ]
- profile: PTP-profile-BMCA
+ profile: PTP-profile-dynamic
- name: video-endpoint
adapters:
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/custom-ptp-profile.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/custom-ptp-profile.yml
index fbd45d54bd4..37eb8f780a4 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/custom-ptp-profile.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/custom-ptp-profile.yml
@@ -18,6 +18,7 @@ l3_edge:
interfaces: [ Ethernet8, Ethernet8 ]
ptp:
enabled: true
+ profile: my-custom-ptp-profile
include_in_underlay_protocol: false
ptp_settings:
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_bgp.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_bgp.yml
index 34bbc14621e..e0655ba14cb 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_bgp.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_bgp.yml
@@ -2,6 +2,8 @@ type: spine
spine:
nodes:
- name: l3_edge_bgp
+ ptp:
+ enabled: true
id: 1
evpn_role: "none"
loopback_ipv4_pool: 1.2.3.4/24
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_isis.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_isis.yml
index 4d9c4718363..da27d83db12 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_isis.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_isis.yml
@@ -8,6 +8,8 @@ type: spine
spine:
nodes:
- name: l3_edge_isis
+ ptp:
+ enabled: true
id: 1
evpn_role: "none"
loopback_ipv4_pool: 1.2.3.4/24
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_ospf.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_ospf.yml
index 4984a58bbad..8239bd5e829 100644
--- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_ospf.yml
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_ospf.yml
@@ -4,6 +4,8 @@ type: spine
spine:
nodes:
- name: l3_edge_ospf
+ ptp:
+ enabled: true
id: 1
evpn_role: "none"
loopback_ipv4_pool: 1.2.3.4/24
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine1.yml
new file mode 100644
index 00000000000..c72a5aa10a0
--- /dev/null
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine1.yml
@@ -0,0 +1,18 @@
+---
+ptp_profiles:
+ - profile: myptpprofile
+ announce:
+ interval: 2
+ timeout: 10
+ delay_req: 2
+ sync_message:
+ interval: 2
+ transport: ipv4
+ - profile: aes67-r16-2016
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine2.yml
new file mode 100644
index 00000000000..c72a5aa10a0
--- /dev/null
+++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine2.yml
@@ -0,0 +1,18 @@
+---
+ptp_profiles:
+ - profile: myptpprofile
+ announce:
+ interval: 2
+ timeout: 10
+ delay_req: 2
+ sync_message:
+ interval: 2
+ transport: ipv4
+ - profile: aes67-r16-2016
+ announce:
+ interval: 0
+ timeout: 3
+ delay_req: -3
+ sync_message:
+ interval: -3
+ transport: ipv4
diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md
index b3ff11d4e76..487da91d999 100644
--- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md
+++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md
@@ -41,7 +41,7 @@
| [ qos_profile](## ".[].adapters.[].qos_profile") | String | | | | QOS profile name. |
| [ ptp](## ".[].adapters.[].ptp") | Dictionary | | | | The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.
`ptp role master` is set to ensure control over the PTP topology.
|
| [ enabled](## ".[].adapters.[].ptp.enabled") | Boolean | | `False` | | |
- | [ endpoint_role](## ".[].adapters.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- bmca
- default
- follower
| |
+ | [ endpoint_role](## ".[].adapters.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- follower
- dynamic
- bmca
- default
| PTP role of the endpoint.
`follower` will configure the switch port as `ptp role master`.
`dynamic` will use BMCA.
`default` is deprecated in favor of `follower`.
`bmca` is deprecated in favor of `dynamic`. |
| [ profile](## ".[].adapters.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" |
| [ sflow](## ".[].adapters.[].sflow") | Boolean | | | | Configures sFlow on the interface. Overrides `fabric_sflow.endpoints` setting. |
| [ flow_tracking](## ".[].adapters.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.endpoints` setting. |
@@ -300,7 +300,13 @@
# `ptp role master` is set to ensure control over the PTP topology.
ptp:
enabled:
- endpoint_role:
+
+ # PTP role of the endpoint.
+ # `follower` will configure the switch port as `ptp role master`.
+ # `dynamic` will use BMCA.
+ # `default` is deprecated in favor of `follower`.
+ # `bmca` is deprecated in favor of `dynamic`.
+ endpoint_role:
# Default available profiles are:
# - "aes67"
diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md
index ccdb0ec2844..8eae83c0fe1 100644
--- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md
+++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md
@@ -42,6 +42,9 @@
| [ bfd](## "core_interfaces.p2p_links_profiles.[].bfd") | Boolean | | | | Enable BFD (only considered for BGP). |
| [ ptp](## "core_interfaces.p2p_links_profiles.[].ptp") | Dictionary | | | | PTP parameters. |
| [ enabled](## "core_interfaces.p2p_links_profiles.[].ptp.enabled") | Boolean | | `False` | | Enable PTP. |
+ | [ roles](## "core_interfaces.p2p_links_profiles.[].ptp.roles") | List, items: String | | | | Role in boundary clock mode for each node. Default is `dynamic`. |
+ | [ - <str>](## "core_interfaces.p2p_links_profiles.[].ptp.roles.[]") | String | | `dynamic` | Valid Values:
- dynamic
- master
| |
+ | [ profile](## "core_interfaces.p2p_links_profiles.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" |
| [ sflow](## "core_interfaces.p2p_links_profiles.[].sflow") | Boolean | | | | Enable sFlow. Overrides `fabric_sflow` setting. |
| [ underlay_multicast](## "core_interfaces.p2p_links_profiles.[].underlay_multicast") | Boolean | | `False` | | Enable PIM sparse mode. Requires `include_in_underlay_protocol` and the global `underlay_multicast` to be `true`. |
| [ flow_tracking](## "core_interfaces.p2p_links_profiles.[].flow_tracking") | Dictionary | | | | Enable flow-tracking. Overrides `fabric_flow_tracking` setting. |
@@ -90,6 +93,9 @@
| [ bfd](## "core_interfaces.p2p_links.[].bfd") | Boolean | | | | Enable BFD (only considered for BGP). |
| [ ptp](## "core_interfaces.p2p_links.[].ptp") | Dictionary | | | | PTP parameters. |
| [ enabled](## "core_interfaces.p2p_links.[].ptp.enabled") | Boolean | | `False` | | Enable PTP. |
+ | [ roles](## "core_interfaces.p2p_links.[].ptp.roles") | List, items: String | | | | Role in boundary clock mode for each node. Default is `dynamic`. |
+ | [ - <str>](## "core_interfaces.p2p_links.[].ptp.roles.[]") | String | | `dynamic` | Valid Values:
- dynamic
- master
| |
+ | [ profile](## "core_interfaces.p2p_links.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" |
| [ sflow](## "core_interfaces.p2p_links.[].sflow") | Boolean | | | | Enable sFlow. Overrides `fabric_sflow` setting. |
| [ underlay_multicast](## "core_interfaces.p2p_links.[].underlay_multicast") | Boolean | | `False` | | Enable PIM sparse mode. Requires `include_in_underlay_protocol` and the global `underlay_multicast` to be `true`. |
| [ flow_tracking](## "core_interfaces.p2p_links.[].flow_tracking") | Dictionary | | | | Enable flow-tracking. Overrides `fabric_flow_tracking` setting. |
@@ -214,6 +220,16 @@
# Enable PTP.
enabled:
+ # Role in boundary clock mode for each node. Default is `dynamic`.
+ roles:
+ -
+
+ # Default available profiles are:
+ # - "aes67"
+ # - "aes67-r16-2016"
+ # - "smpte2059-2"
+ profile:
+
# Enable sFlow. Overrides `fabric_sflow` setting.
sflow:
@@ -360,6 +376,16 @@
# Enable PTP.
enabled:
+ # Role in boundary clock mode for each node. Default is `dynamic`.
+ roles:
+ -
+
+ # Default available profiles are:
+ # - "aes67"
+ # - "aes67-r16-2016"
+ # - "smpte2059-2"
+ profile:
+
# Enable sFlow. Overrides `fabric_sflow` setting.
sflow:
diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md
index 40eb4f7d50e..e51b6e0a0d5 100644
--- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md
+++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md
@@ -42,6 +42,9 @@
| [ bfd](## "l3_edge.p2p_links_profiles.[].bfd") | Boolean | | | | Enable BFD (only considered for BGP). |
| [ ptp](## "l3_edge.p2p_links_profiles.[].ptp") | Dictionary | | | | PTP parameters. |
| [ enabled](## "l3_edge.p2p_links_profiles.[].ptp.enabled") | Boolean | | `False` | | Enable PTP. |
+ | [ roles](## "l3_edge.p2p_links_profiles.[].ptp.roles") | List, items: String | | | | Role in boundary clock mode for each node. Default is `dynamic`. |
+ | [ - <str>](## "l3_edge.p2p_links_profiles.[].ptp.roles.[]") | String | | `dynamic` | Valid Values:
- dynamic
- master
| |
+ | [ profile](## "l3_edge.p2p_links_profiles.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" |
| [ sflow](## "l3_edge.p2p_links_profiles.[].sflow") | Boolean | | | | Enable sFlow. Overrides `fabric_sflow` setting. |
| [ underlay_multicast](## "l3_edge.p2p_links_profiles.[].underlay_multicast") | Boolean | | `False` | | Enable PIM sparse mode. Requires `include_in_underlay_protocol` and the global `underlay_multicast` to be `true`. |
| [ flow_tracking](## "l3_edge.p2p_links_profiles.[].flow_tracking") | Dictionary | | | | Enable flow-tracking. Overrides `fabric_flow_tracking` setting. |
@@ -90,6 +93,9 @@
| [ bfd](## "l3_edge.p2p_links.[].bfd") | Boolean | | | | Enable BFD (only considered for BGP). |
| [ ptp](## "l3_edge.p2p_links.[].ptp") | Dictionary | | | | PTP parameters. |
| [ enabled](## "l3_edge.p2p_links.[].ptp.enabled") | Boolean | | `False` | | Enable PTP. |
+ | [ roles](## "l3_edge.p2p_links.[].ptp.roles") | List, items: String | | | | Role in boundary clock mode for each node. Default is `dynamic`. |
+ | [ - <str>](## "l3_edge.p2p_links.[].ptp.roles.[]") | String | | `dynamic` | Valid Values:
- dynamic
- master
| |
+ | [ profile](## "l3_edge.p2p_links.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" |
| [ sflow](## "l3_edge.p2p_links.[].sflow") | Boolean | | | | Enable sFlow. Overrides `fabric_sflow` setting. |
| [ underlay_multicast](## "l3_edge.p2p_links.[].underlay_multicast") | Boolean | | `False` | | Enable PIM sparse mode. Requires `include_in_underlay_protocol` and the global `underlay_multicast` to be `true`. |
| [ flow_tracking](## "l3_edge.p2p_links.[].flow_tracking") | Dictionary | | | | Enable flow-tracking. Overrides `fabric_flow_tracking` setting. |
@@ -214,6 +220,16 @@
# Enable PTP.
enabled:
+ # Role in boundary clock mode for each node. Default is `dynamic`.
+ roles:
+ -
+
+ # Default available profiles are:
+ # - "aes67"
+ # - "aes67-r16-2016"
+ # - "smpte2059-2"
+ profile:
+
# Enable sFlow. Overrides `fabric_sflow` setting.
sflow:
@@ -360,6 +376,16 @@
# Enable PTP.
enabled:
+ # Role in boundary clock mode for each node. Default is `dynamic`.
+ roles:
+ -
+
+ # Default available profiles are:
+ # - "aes67"
+ # - "aes67-r16-2016"
+ # - "smpte2059-2"
+ profile:
+
# Enable sFlow. Overrides `fabric_sflow` setting.
sflow:
diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md
index 355bf327783..4fbaec627be 100644
--- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md
+++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md
@@ -36,7 +36,7 @@
| [ qos_profile](## "network_ports.[].qos_profile") | String | | | | QOS profile name. |
| [ ptp](## "network_ports.[].ptp") | Dictionary | | | | The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.
`ptp role master` is set to ensure control over the PTP topology.
|
| [ enabled](## "network_ports.[].ptp.enabled") | Boolean | | `False` | | |
- | [ endpoint_role](## "network_ports.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- bmca
- default
- follower
| |
+ | [ endpoint_role](## "network_ports.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- follower
- dynamic
- bmca
- default
| PTP role of the endpoint.
`follower` will configure the switch port as `ptp role master`.
`dynamic` will use BMCA.
`default` is deprecated in favor of `follower`.
`bmca` is deprecated in favor of `dynamic`. |
| [ profile](## "network_ports.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" |
| [ sflow](## "network_ports.[].sflow") | Boolean | | | | Configures sFlow on the interface. Overrides `fabric_sflow.endpoints` setting. |
| [ flow_tracking](## "network_ports.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.endpoints` setting. |
@@ -274,7 +274,13 @@
# `ptp role master` is set to ensure control over the PTP topology.
ptp:
enabled:
- endpoint_role:
+
+ # PTP role of the endpoint.
+ # `follower` will configure the switch port as `ptp role master`.
+ # `dynamic` will use BMCA.
+ # `default` is deprecated in favor of `follower`.
+ # `bmca` is deprecated in favor of `dynamic`.
+ endpoint_role:
# Default available profiles are:
# - "aes67"
diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md
index a71c88ee66d..9dec90eaddd 100644
--- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md
+++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md
@@ -32,7 +32,7 @@
| [ qos_profile](## "port_profiles.[].qos_profile") | String | | | | QOS profile name. |
| [ ptp](## "port_profiles.[].ptp") | Dictionary | | | | The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.
`ptp role master` is set to ensure control over the PTP topology.
|
| [ enabled](## "port_profiles.[].ptp.enabled") | Boolean | | `False` | | |
- | [ endpoint_role](## "port_profiles.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- bmca
- default
- follower
| |
+ | [ endpoint_role](## "port_profiles.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- follower
- dynamic
- bmca
- default
| PTP role of the endpoint.
`follower` will configure the switch port as `ptp role master`.
`dynamic` will use BMCA.
`default` is deprecated in favor of `follower`.
`bmca` is deprecated in favor of `dynamic`. |
| [ profile](## "port_profiles.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" |
| [ sflow](## "port_profiles.[].sflow") | Boolean | | | | Configures sFlow on the interface. Overrides `fabric_sflow.endpoints` setting. |
| [ flow_tracking](## "port_profiles.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.endpoints` setting. |
@@ -255,7 +255,13 @@
# `ptp role master` is set to ensure control over the PTP topology.
ptp:
enabled:
- endpoint_role:
+
+ # PTP role of the endpoint.
+ # `follower` will configure the switch port as `ptp role master`.
+ # `dynamic` will use BMCA.
+ # `default` is deprecated in favor of `follower`.
+ # `bmca` is deprecated in favor of `dynamic`.
+ endpoint_role:
# Default available profiles are:
# - "aes67"
diff --git a/python-avd/pyavd/_eos_designs/schema/__init__.py b/python-avd/pyavd/_eos_designs/schema/__init__.py
index 1f35119d087..204df7de342 100644
--- a/python-avd/pyavd/_eos_designs/schema/__init__.py
+++ b/python-avd/pyavd/_eos_designs/schema/__init__.py
@@ -1026,18 +1026,51 @@ class Descriptions(AvdList[str]):
class Ptp(AvdModel):
"""Subclass of AvdModel."""
- _fields: ClassVar[dict] = {"enabled": {"type": bool, "default": False}, "_custom_data": {"type": dict}}
+ class Roles(AvdList[str]):
+ """Subclass of AvdList with `str` items."""
+
+ Roles._item_type = str
+
+ _fields: ClassVar[dict] = {
+ "enabled": {"type": bool, "default": False},
+ "roles": {"type": Roles},
+ "profile": {"type": str, "default": "aes67-r16-2016"},
+ "_custom_data": {"type": dict},
+ }
enabled: bool
"""
Enable PTP.
Default value: `False`
"""
+ roles: Roles
+ """
+ Role in boundary clock mode for each node. Default is `dynamic`.
+
+ Subclass of AvdList with `str`
+ items.
+ """
+ profile: str
+ """
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
+
+ Default value: `"aes67-r16-2016"`
+ """
_custom_data: dict[str, Any]
if TYPE_CHECKING:
- def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined) -> None:
+ def __init__(
+ self,
+ *,
+ enabled: bool | UndefinedType = Undefined,
+ roles: Roles | UndefinedType = Undefined,
+ profile: str | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
"""
Ptp.
@@ -1046,6 +1079,16 @@ def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: d
Args:
enabled: Enable PTP.
+ roles:
+ Role in boundary clock mode for each node. Default is `dynamic`.
+
+ Subclass of AvdList with `str`
+ items.
+ profile:
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
_custom_data: _custom_data
"""
@@ -1556,18 +1599,51 @@ class Descriptions(AvdList[str]):
class Ptp(AvdModel):
"""Subclass of AvdModel."""
- _fields: ClassVar[dict] = {"enabled": {"type": bool, "default": False}, "_custom_data": {"type": dict}}
+ class Roles(AvdList[str]):
+ """Subclass of AvdList with `str` items."""
+
+ Roles._item_type = str
+
+ _fields: ClassVar[dict] = {
+ "enabled": {"type": bool, "default": False},
+ "roles": {"type": Roles},
+ "profile": {"type": str, "default": "aes67-r16-2016"},
+ "_custom_data": {"type": dict},
+ }
enabled: bool
"""
Enable PTP.
Default value: `False`
"""
+ roles: Roles
+ """
+ Role in boundary clock mode for each node. Default is `dynamic`.
+
+ Subclass of AvdList with `str`
+ items.
+ """
+ profile: str
+ """
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
+
+ Default value: `"aes67-r16-2016"`
+ """
_custom_data: dict[str, Any]
if TYPE_CHECKING:
- def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined) -> None:
+ def __init__(
+ self,
+ *,
+ enabled: bool | UndefinedType = Undefined,
+ roles: Roles | UndefinedType = Undefined,
+ profile: str | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
"""
Ptp.
@@ -1576,6 +1652,16 @@ def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: d
Args:
enabled: Enable PTP.
+ roles:
+ Role in boundary clock mode for each node. Default is `dynamic`.
+
+ Subclass of AvdList with `str`
+ items.
+ profile:
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
_custom_data: _custom_data
"""
@@ -5079,18 +5165,51 @@ class Descriptions(AvdList[str]):
class Ptp(AvdModel):
"""Subclass of AvdModel."""
- _fields: ClassVar[dict] = {"enabled": {"type": bool, "default": False}, "_custom_data": {"type": dict}}
+ class Roles(AvdList[str]):
+ """Subclass of AvdList with `str` items."""
+
+ Roles._item_type = str
+
+ _fields: ClassVar[dict] = {
+ "enabled": {"type": bool, "default": False},
+ "roles": {"type": Roles},
+ "profile": {"type": str, "default": "aes67-r16-2016"},
+ "_custom_data": {"type": dict},
+ }
enabled: bool
"""
Enable PTP.
Default value: `False`
"""
+ roles: Roles
+ """
+ Role in boundary clock mode for each node. Default is `dynamic`.
+
+ Subclass of AvdList with `str`
+ items.
+ """
+ profile: str
+ """
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
+
+ Default value: `"aes67-r16-2016"`
+ """
_custom_data: dict[str, Any]
if TYPE_CHECKING:
- def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined) -> None:
+ def __init__(
+ self,
+ *,
+ enabled: bool | UndefinedType = Undefined,
+ roles: Roles | UndefinedType = Undefined,
+ profile: str | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
"""
Ptp.
@@ -5099,6 +5218,16 @@ def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: d
Args:
enabled: Enable PTP.
+ roles:
+ Role in boundary clock mode for each node. Default is `dynamic`.
+
+ Subclass of AvdList with `str`
+ items.
+ profile:
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
_custom_data: _custom_data
"""
@@ -5609,18 +5738,51 @@ class Descriptions(AvdList[str]):
class Ptp(AvdModel):
"""Subclass of AvdModel."""
- _fields: ClassVar[dict] = {"enabled": {"type": bool, "default": False}, "_custom_data": {"type": dict}}
+ class Roles(AvdList[str]):
+ """Subclass of AvdList with `str` items."""
+
+ Roles._item_type = str
+
+ _fields: ClassVar[dict] = {
+ "enabled": {"type": bool, "default": False},
+ "roles": {"type": Roles},
+ "profile": {"type": str, "default": "aes67-r16-2016"},
+ "_custom_data": {"type": dict},
+ }
enabled: bool
"""
Enable PTP.
Default value: `False`
"""
+ roles: Roles
+ """
+ Role in boundary clock mode for each node. Default is `dynamic`.
+
+ Subclass of AvdList with `str`
+ items.
+ """
+ profile: str
+ """
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
+
+ Default value: `"aes67-r16-2016"`
+ """
_custom_data: dict[str, Any]
if TYPE_CHECKING:
- def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined) -> None:
+ def __init__(
+ self,
+ *,
+ enabled: bool | UndefinedType = Undefined,
+ roles: Roles | UndefinedType = Undefined,
+ profile: str | UndefinedType = Undefined,
+ _custom_data: dict[str, Any] | UndefinedType = Undefined,
+ ) -> None:
"""
Ptp.
@@ -5629,6 +5791,16 @@ def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: d
Args:
enabled: Enable PTP.
+ roles:
+ Role in boundary clock mode for each node. Default is `dynamic`.
+
+ Subclass of AvdList with `str`
+ items.
+ profile:
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
_custom_data: _custom_data
"""
@@ -6825,8 +6997,18 @@ class Ptp(AvdModel):
}
enabled: bool
"""Default value: `False`"""
- endpoint_role: Literal["bmca", "default", "follower"]
- """Default value: `"follower"`"""
+ endpoint_role: Literal["follower", "dynamic", "bmca", "default"]
+ """
+ PTP role of the endpoint.
+ `follower` will configure the switch port as `ptp role master`.
+ `dynamic`
+ will use BMCA.
+ `default` is deprecated in favor of `follower`.
+ `bmca` is deprecated in favor of
+ `dynamic`.
+
+ Default value: `"follower"`
+ """
profile: str
"""
Default available profiles are:
@@ -6844,7 +7026,7 @@ def __init__(
self,
*,
enabled: bool | UndefinedType = Undefined,
- endpoint_role: Literal["bmca", "default", "follower"] | UndefinedType = Undefined,
+ endpoint_role: Literal["follower", "dynamic", "bmca", "default"] | UndefinedType = Undefined,
profile: str | UndefinedType = Undefined,
_custom_data: dict[str, Any] | UndefinedType = Undefined,
) -> None:
@@ -6856,7 +7038,14 @@ def __init__(
Args:
enabled: enabled
- endpoint_role: endpoint_role
+ endpoint_role:
+ PTP role of the endpoint.
+ `follower` will configure the switch port as `ptp role master`.
+ `dynamic`
+ will use BMCA.
+ `default` is deprecated in favor of `follower`.
+ `bmca` is deprecated in favor of
+ `dynamic`.
profile:
Default available profiles are:
- "aes67"
@@ -10664,8 +10853,18 @@ class Ptp(AvdModel):
}
enabled: bool
"""Default value: `False`"""
- endpoint_role: Literal["bmca", "default", "follower"]
- """Default value: `"follower"`"""
+ endpoint_role: Literal["follower", "dynamic", "bmca", "default"]
+ """
+ PTP role of the endpoint.
+ `follower` will configure the switch port as `ptp role master`.
+ `dynamic`
+ will use BMCA.
+ `default` is deprecated in favor of `follower`.
+ `bmca` is deprecated in favor of
+ `dynamic`.
+
+ Default value: `"follower"`
+ """
profile: str
"""
Default available profiles are:
@@ -10683,7 +10882,7 @@ def __init__(
self,
*,
enabled: bool | UndefinedType = Undefined,
- endpoint_role: Literal["bmca", "default", "follower"] | UndefinedType = Undefined,
+ endpoint_role: Literal["follower", "dynamic", "bmca", "default"] | UndefinedType = Undefined,
profile: str | UndefinedType = Undefined,
_custom_data: dict[str, Any] | UndefinedType = Undefined,
) -> None:
@@ -10695,7 +10894,14 @@ def __init__(
Args:
enabled: enabled
- endpoint_role: endpoint_role
+ endpoint_role:
+ PTP role of the endpoint.
+ `follower` will configure the switch port as `ptp role master`.
+ `dynamic`
+ will use BMCA.
+ `default` is deprecated in favor of `follower`.
+ `bmca` is deprecated in favor of
+ `dynamic`.
profile:
Default available profiles are:
- "aes67"
@@ -17657,8 +17863,18 @@ class Ptp(AvdModel):
}
enabled: bool
"""Default value: `False`"""
- endpoint_role: Literal["bmca", "default", "follower"]
- """Default value: `"follower"`"""
+ endpoint_role: Literal["follower", "dynamic", "bmca", "default"]
+ """
+ PTP role of the endpoint.
+ `follower` will configure the switch port as `ptp role master`.
+ `dynamic`
+ will use BMCA.
+ `default` is deprecated in favor of `follower`.
+ `bmca` is deprecated in favor of
+ `dynamic`.
+
+ Default value: `"follower"`
+ """
profile: str
"""
Default available profiles are:
@@ -17676,7 +17892,7 @@ def __init__(
self,
*,
enabled: bool | UndefinedType = Undefined,
- endpoint_role: Literal["bmca", "default", "follower"] | UndefinedType = Undefined,
+ endpoint_role: Literal["follower", "dynamic", "bmca", "default"] | UndefinedType = Undefined,
profile: str | UndefinedType = Undefined,
_custom_data: dict[str, Any] | UndefinedType = Undefined,
) -> None:
@@ -17688,7 +17904,14 @@ def __init__(
Args:
enabled: enabled
- endpoint_role: endpoint_role
+ endpoint_role:
+ PTP role of the endpoint.
+ `follower` will configure the switch port as `ptp role master`.
+ `dynamic`
+ will use BMCA.
+ `default` is deprecated in favor of `follower`.
+ `bmca` is deprecated in favor of
+ `dynamic`.
profile:
Default available profiles are:
- "aes67"
diff --git a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml
index 9b77a0373a5..4eb87f66f14 100644
--- a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml
+++ b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml
@@ -5274,11 +5274,21 @@ $defs:
default: false
endpoint_role:
type: str
+ description: 'PTP role of the endpoint.
+
+ `follower` will configure the switch port as `ptp role master`.
+
+ `dynamic` will use BMCA.
+
+ `default` is deprecated in favor of `follower`.
+
+ `bmca` is deprecated in favor of `dynamic`.'
default: follower
valid_values:
+ - follower
+ - dynamic
- bmca
- default
- - follower
profile:
type: str
default: aes67-r16-2016
@@ -9672,6 +9682,20 @@ $defs:
type: bool
default: false
description: Enable PTP.
+ roles:
+ type: list
+ description: Role in boundary clock mode for each node. Default is `dynamic`.
+ items:
+ type: str
+ default: dynamic
+ valid_values:
+ - dynamic
+ - master
+ profile:
+ type: str
+ default: aes67-r16-2016
+ description: "Default available profiles are:\n - \"aes67\"\n - \"aes67-r16-2016\"\n
+ \ - \"smpte2059-2\""
sflow:
type: bool
description: Enable sFlow. Overrides `fabric_sflow` setting.
diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_adapter_config.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_adapter_config.schema.yml
index 42733f30bd8..8dce57646a7 100644
--- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_adapter_config.schema.yml
+++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_adapter_config.schema.yml
@@ -135,11 +135,18 @@ $defs:
default: false
endpoint_role:
type: str
+ description: |-
+ PTP role of the endpoint.
+ `follower` will configure the switch port as `ptp role master`.
+ `dynamic` will use BMCA.
+ `default` is deprecated in favor of `follower`.
+ `bmca` is deprecated in favor of `dynamic`.
default: "follower"
valid_values:
+ - "follower"
+ - "dynamic"
- "bmca"
- "default"
- - "follower"
profile:
type: str
default: "aes67-r16-2016"
diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_p2p_links.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_p2p_links.schema.yml
index 62fc8a436ef..4372b615769 100644
--- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_p2p_links.schema.yml
+++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_p2p_links.schema.yml
@@ -132,6 +132,23 @@ $defs:
type: bool
default: false
description: Enable PTP.
+ roles:
+ type: list
+ description: Role in boundary clock mode for each node. Default is `dynamic`.
+ items:
+ type: str
+ default: "dynamic"
+ valid_values:
+ - "dynamic"
+ - "master"
+ profile:
+ type: str
+ default: "aes67-r16-2016"
+ description: |-
+ Default available profiles are:
+ - "aes67"
+ - "aes67-r16-2016"
+ - "smpte2059-2"
sflow:
type: bool
description: Enable sFlow. Overrides `fabric_sflow` setting.
diff --git a/python-avd/pyavd/_eos_designs/structured_config/connected_endpoints/utils.py b/python-avd/pyavd/_eos_designs/structured_config/connected_endpoints/utils.py
index 45251b79108..820b6d3af4e 100644
--- a/python-avd/pyavd/_eos_designs/structured_config/connected_endpoints/utils.py
+++ b/python-avd/pyavd/_eos_designs/structured_config/connected_endpoints/utils.py
@@ -226,7 +226,7 @@ def _get_adapter_ptp(
ptp_config["enable"] = True
- if adapter.ptp.endpoint_role != "bmca":
+ if adapter.ptp.endpoint_role not in ["dynamic", "bmca"]:
ptp_config["role"] = "master"
ptp_config.pop("profile", None)
diff --git a/python-avd/pyavd/_eos_designs/structured_config/core_interfaces_and_l3_edge/utils.py b/python-avd/pyavd/_eos_designs/structured_config/core_interfaces_and_l3_edge/utils.py
index 74293364638..4daf1196b12 100644
--- a/python-avd/pyavd/_eos_designs/structured_config/core_interfaces_and_l3_edge/utils.py
+++ b/python-avd/pyavd/_eos_designs/structured_config/core_interfaces_and_l3_edge/utils.py
@@ -211,6 +211,31 @@ def _get_common_interface_cfg(self: AvdStructuredConfigCoreInterfacesAndL3Edge,
if p2p_link.ip:
interface_cfg["ip_address"] = p2p_link.ip[index]
+ if p2p_link.ptp.enabled:
+ ptp_config = {}
+
+ if self.shared_utils.ptp_enabled:
+ # Apply PTP profile config from node settings when profile is not defined on p2p_link
+ if not p2p_link.ptp.profile:
+ ptp_config.update(self.shared_utils.ptp_profile._as_dict(include_default_values=True))
+
+ # Apply PTP profile defined for the p2p_link
+ elif p2p_link.ptp.profile not in self.inputs.ptp_profiles:
+ msg = f"PTP Profile '{p2p_link.ptp.profile}' referenced under {self.data_model}.p2p_links does not exist in `ptp_profiles`."
+ raise AristaAvdInvalidInputsError(msg)
+
+ else:
+ ptp_config.update(self.inputs.ptp_profiles[p2p_link.ptp.profile]._as_dict(include_default_values=True))
+
+ node_index = p2p_link.nodes._as_list().index(self.shared_utils.hostname) # TODO: Implement .index() method on AvdList and AvdIndexedList class.
+ if len(p2p_link.ptp.roles) > node_index and p2p_link.ptp.roles[node_index] == "master":
+ ptp_config["role"] = "master"
+
+ ptp_config["enable"] = True
+ ptp_config.pop("profile", None)
+
+ interface_cfg["ptp"] = ptp_config
+
if p2p_link.include_in_underlay_protocol:
if p2p_link.underlay_multicast and self.shared_utils.underlay_multicast:
interface_cfg["pim"] = {"ipv4": {"sparse_mode": True}}
@@ -271,22 +296,7 @@ def _get_ethernet_cfg(self: AvdStructuredConfigCoreInterfacesAndL3Edge, p2p_link
Covers config that is only applicable to ethernet interfaces.
This config will only be used on both main interfaces and port-channel members.
"""
- ethernet_cfg = {"speed": p2p_link.speed}
-
- if not p2p_link.ptp.enabled:
- return ethernet_cfg
-
- ptp_config = {}
-
- # Apply PTP profile config
- if self.shared_utils.ptp_enabled:
- ptp_config.update(self.shared_utils.ptp_profile._as_dict(include_default_values=True))
-
- ptp_config["enable"] = True
- ptp_config.pop("profile", None)
- ethernet_cfg["ptp"] = ptp_config
-
- return ethernet_cfg
+ return {"speed": p2p_link.speed}
def _get_port_channel_member_cfg(self: AvdStructuredConfigCoreInterfacesAndL3Edge, p2p_link: T_P2pLinksItem, p2p_link_data: dict, member: dict) -> dict:
"""