Skip to content

Conversation

ccoueffe
Copy link
Collaborator

@ccoueffe ccoueffe commented Aug 12, 2025

Related Issue(s)

Related Collection Role

  • cisco.nac_dc_vxlan.validate
  • cisco.nac_dc_vxlan.dtc.create
  • cisco.nac_dc_vxlan.dtc.deploy
  • cisco.nac_dc_vxlan.dtc.remove
  • other

Related Data Model Element

  • vxlan.fabric
  • vxlan.global
  • vxlan.topology
  • vxlan.underlay
  • vxlan.overlay
  • vxlan.overlay_extensions
  • vxlan.policy
  • vxlan.multisite
  • defaults.vxlan
  • other

Proposed Changes

Add support for manual IPv6 underlay.
Need to add a key: manual_ipv6_router_id in schema to defined router_id on Nexus device.
In IPv6 we cannot use Loopback IPv6 and we need to provide an additional value.

Example:

vxlan:
  topology:
    switches:
      - name: ipv6-bgw1
        role: spine
        management:
          default_gateway_v4: 10.229.42.254
          management_ipv4_address: 10.229.42.180
          subnet_mask_ipv4: 24
        manual_ipv6_router_id: 1.1.1.180 <<< New key
        serial_number: 9B9EAU0DP6F

Jinja template for underlay renders this data:

---
- entity_name: "9B9EAU0DP6F~loopback0"
  pool_type: IP
  pool_name: "LOOPBACK0_IP_POOL"
  scope_type: device_interface
  resource: "fd00::a:180"
  switch:
    - "10.229.42.180"
- entity_name: "9FC431O3ALV~loopback0"
  pool_type: IP
  pool_name: "LOOPBACK0_IP_POOL"
  scope_type: device_interface
  resource: "fd00::a:181"
  switch:
    - "10.229.42.181"

- entity_name: "9B9EAU0DP6F~loopback1"
  pool_type: IP
  pool_name: "LOOPBACK1_IP_POOL"
  scope_type: device_interface
  resource: "fd00::b:180"
  switch:
    - "10.229.42.180"
- entity_name: "9FC431O3ALV~loopback1"
  pool_type: IP
  pool_name: "LOOPBACK1_IP_POOL"
  scope_type: device_interface
  resource: "fd00::b:181"
  switch:
    - "10.229.42.181"

- entity_name: "9B9EAU0DP6F"
  pool_type: IP
  pool_name: "ROUTER_ID_POOL"
  scope_type: device
  resource: "1.1.1.180"
  switch:
    - "10.229.42.180"
- entity_name: "9FC431O3ALV"
  pool_type: IP
  pool_name: "ROUTER_ID_POOL"
  scope_type: device
  resource: "1.1.1.181"
  switch:
    - "10.229.42.181"


- entity_name: "9B9EAU0DP6F~Ethernet1/1~9FC431O3ALV~Ethernet1/1"
  pool_type: SUBNET
  pool_name: "SUBNET"
  scope_type: link
  resource: "ffd0::a04:0/127"
  switch:
  - "10.229.42.180"

- entity_name: "9B9EAU0DP6F~Ethernet1/1"
  pool_type: IP
  pool_name: "ffd0::a04:0/127"
  scope_type: device_interface
  resource: "ffd0::a04:0"
  switch:
  - "10.229.42.180"

- entity_name: "9FC431O3ALV~Ethernet1/1"
  pool_type: IP
  pool_name: "ffd0::a04:0/127"
  scope_type: device_interface
  resource: "ffd0::a04:1"
  switch:
  - "10.229.42.181"

Rule 208 is updated to check both IPv4 and IPv6. There is also a special thing to check router_id in IPv6.

Condition in Create Fabric task is updated to limit Anycast only when replication is multicast. It's not required in Ingress. Resource: anycast is updated to use ipv4 or ipv6 value depending on ipv6_underlay configuration.

Example of data source:

---
vxlan:
  topology:
    # vpc_peers:
    #   - peer1: ipv6-leaf1
    #     peer2: ipv6-leaf2
    #     peer1_peerlink_interfaces:
    #       - name: Ethernet1/3
    #     peer2_peerlink_interfaces:
    #       - name: Ethernet1/3
    #     domain_id: 10
    #     fabric_peering: false
    #     vtep_vip: fd00::a:180

    fabric_links:
      # Example of P2P w/ physical interfaces
      # Required only if vxlan.underlay.ipv6.enable_ipv6_link_local_address is false.
      # In that case we need to provide IPv6. Could be compared to p2p vs unnumbered in IPv4
      - source_device: ipv6-bgw1
        source_interface: Ethernet1/1
        dest_device: ipv6-leaf1
        dest_interface: Ethernet1/1
        ipv6:
          subnet: "ffd0::a04:0/127"
          source_ipv6: "ffd0::a04:0"
          dest_ipv6: "ffd0::a04:1"

    switches:
      - name: ipv6-bgw1
        role: spine
        management:
          default_gateway_v4: 10.229.42.254
          management_ipv4_address: 10.229.42.180
          subnet_mask_ipv4: 24
        manual_ipv6_router_id: 1.1.1.180
        serial_number: 9B9EAU0DP6F
        interfaces:
          - name: Loopback0
            mode: fabric_loopback
            enabled: true
            ipv6_address: fd00::a:180
            description: Routing loopback interface
          - name: Loopback1
            mode: fabric_loopback
            enabled: true
            ipv6_address: fd00::b:180
            description: VTEP loopback interface
      - name: ipv6-leaf1
        role: leaf
        management:
          default_gateway_v4: 10.229.42.254/24
          management_ipv4_address: 10.229.42.181
        manual_ipv6_router_id: 1.1.1.181
        serial_number: 9FC431O3ALV
        interfaces:
          - name: Loopback0
            mode: fabric_loopback
            enabled: true
            ipv6_address: fd00::a:181
            description: Routing loopback interface
          - name: Loopback1
            mode: fabric_loopback
            enabled: true
            ipv6_address: fd00::b:181
            description: VTEP loopback interface

Test Notes

Cisco NDFC Version

Checklist

  • Latest commit is rebased from develop with merge conflicts resolved
  • New or updates to documentation has been made accordingly
  • Assigned the proper reviewers

@ccoueffe ccoueffe self-assigned this Aug 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants