Files
fabric-orchestrator/docs/yang-paths.md
Damien Arnodo 4c7634da59 docs: add YANG paths reference documentation
Comprehensive documentation of validated gNMI YANG paths for:
- Interfaces, Loopbacks, VLANs (OpenConfig)
- BGP with EVPN AFI (OpenConfig)
- VXLAN VNI mappings (Arista experimental)
- MLAG and EVPN config (Arista experimental)

Includes examples, limitations, and key learnings.

Closes partial requirement for #3
2025-12-26 13:39:58 +00:00

8.6 KiB

YANG Paths Reference for Arista EOS 4.35.0F

This document provides the complete reference of validated gNMI YANG paths for managing Arista EVPN-VXLAN fabrics.

Tested with: Arista cEOS 4.35.0F via gNMI (port 6030)


Quick Reference

Feature Model Type Config State Subscribe ON_CHANGE
Interfaces OpenConfig
Loopbacks OpenConfig
VLANs OpenConfig
BGP OpenConfig
VXLAN Arista Exp
MLAG Arista Exp N/A
EVPN Arista Exp N/A

Interfaces

Model: openconfig-interfaces

Operation Path
All interfaces /interfaces/interface
Specific interface /interfaces/interface[name=Ethernet1]
Interface config /interfaces/interface[name=Ethernet1]/config
Interface state /interfaces/interface[name=Ethernet1]/state
Oper status only /interfaces/interface[name=Ethernet1]/state/oper-status
Admin status only /interfaces/interface[name=Ethernet1]/state/admin-status
Interface counters /interfaces/interface[name=Ethernet1]/state/counters

Example: Get Interface State

gnmic -a 172.16.0.50:6030 -u admin -p admin --insecure \
  get --path "/interfaces/interface[name=Ethernet1]/state"

Example: Subscribe to Interface Changes

gnmic -a 172.16.0.50:6030 -u admin -p admin --insecure \
  subscribe --path "/interfaces/interface[name=Ethernet1]/state" \
  --mode stream --stream-mode on-change

Loopbacks

Model: openconfig-interfaces

Operation Path
Loopback0 /interfaces/interface[name=Loopback0]
Loopback1 (VTEP) /interfaces/interface[name=Loopback1]
Loopback config /interfaces/interface[name=Loopback0]/config

VLANs

Model: openconfig-network-instance, openconfig-vlan

Operation Path
All VLANs /network-instances/network-instance[name=default]/vlans/vlan
Specific VLAN /network-instances/network-instance[name=default]/vlans/vlan[vlan-id=40]
VLAN config /network-instances/network-instance[name=default]/vlans/vlan[vlan-id=40]/config
SVI interface /interfaces/interface[name=Vlan40]

BGP

Model: openconfig-bgp, openconfig-network-instance

Base Path

/network-instances/network-instance[name=default]/protocols/protocol[identifier=BGP][name=BGP]/bgp

Paths

Operation Path (relative to base)
BGP global config /global/config
BGP global state /global/state
Router ID /global/config/router-id
AS number /global/config/as
All neighbors /neighbors/neighbor
Specific neighbor /neighbors/neighbor[neighbor-address=10.0.1.0]
Neighbor state /neighbors/neighbor[neighbor-address=10.0.1.0]/state
Neighbor session state /neighbors/neighbor[neighbor-address=10.0.1.0]/state/session-state
IPv4 Unicast AFI /neighbors/neighbor[neighbor-address=10.0.1.0]/afi-safis/afi-safi[afi-safi-name=IPV4_UNICAST]
EVPN AFI /neighbors/neighbor[neighbor-address=10.0.1.0]/afi-safis/afi-safi[afi-safi-name=L2VPN_EVPN]

Example: Get All BGP Neighbors State

gnmic -a 172.16.0.50:6030 -u admin -p admin --insecure \
  get --path "/network-instances/network-instance[name=default]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor/state"

Example: Subscribe to BGP Session Changes

gnmic -a 172.16.0.50:6030 -u admin -p admin --insecure \
  subscribe \
  --path "/network-instances/network-instance[name=default]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor/state/session-state" \
  --mode stream --stream-mode on-change

VXLAN

Model: arista-exp-eos-vxlan (augments openconfig-interfaces)

Operation Path
VXLAN interface /interfaces/interface[name=Vxlan1]
VXLAN augment /interfaces/interface[name=Vxlan1]/arista-vxlan
VXLAN config /interfaces/interface[name=Vxlan1]/arista-vxlan/config
VXLAN state /interfaces/interface[name=Vxlan1]/arista-vxlan/state
Source interface /interfaces/interface[name=Vxlan1]/arista-vxlan/config/src-ip-intf
UDP port /interfaces/interface[name=Vxlan1]/arista-vxlan/config/udp-port
All VLAN-to-VNI mappings /interfaces/interface[name=Vxlan1]/arista-vxlan/vlan-to-vnis
Specific VNI mapping /interfaces/interface[name=Vxlan1]/arista-vxlan/vlan-to-vnis/vlan-to-vni[vlan=40]
VRF-to-VNI (L3 VNI) /interfaces/interface[name=Vxlan1]/arista-vxlan/vrf-to-vnis

Example: Get VXLAN VNI Mappings

gnmic -a 172.16.0.50:6030 -u admin -p admin --insecure \
  get --path "/interfaces/interface[name=Vxlan1]/arista-vxlan/vlan-to-vnis"

Example: Subscribe to VNI Changes

gnmic -a 172.16.0.50:6030 -u admin -p admin --insecure \
  subscribe \
  --path "/interfaces/interface[name=Vxlan1]/arista-vxlan/vlan-to-vnis" \
  --mode stream --stream-mode on-change

MLAG

Model: arista-exp-eos-mlag

⚠️ Limitation: Only configuration is exposed via gNMI. Operational state (peer status, role, negotiation) requires eAPI.

Operation Path
Full MLAG /arista/eos/mlag
MLAG config /arista/eos/mlag/config

Config Fields

Field Description
domain-id MLAG domain identifier
local-intf Local VLAN interface (e.g., Vlan4090)
peer-address MLAG peer IP address
peer-link-intf Peer-link port-channel
dual-primary-action Action on dual-primary detection
dual-primary-detection-delay Detection delay in seconds
heartbeat-peer-address Heartbeat peer IP and VRF

Example: Get MLAG Config

gnmic -a 172.16.0.50:6030 -u admin -p admin --insecure \
  get --path "/arista/eos/mlag/config"

For MLAG State: Use eAPI

# MLAG state is NOT available via gNMI
# Use eAPI instead:
curl -X POST https://switch/command-api \
  -d '{"jsonrpc":"2.0","method":"runCmds","params":{"cmds":["show mlag"]},"id":1}'

EVPN

Model: arista-exp-eos-evpn

⚠️ Limitation: Only configuration is exposed via gNMI. Learned routes and MACs require eAPI.

Operation Path
All EVPN /arista/eos/evpn
EVPN instances /arista/eos/evpn/evpn-instances
Specific instance /arista/eos/evpn/evpn-instances/evpn-instance[name=40]

Config Fields

Field Path
Name .../evpn-instance[name=X]/config/name
Route Distinguisher .../evpn-instance[name=X]/config/route-distinguisher
Redistribute .../evpn-instance[name=X]/config/redistribute
Route Target Import .../evpn-instance[name=X]/route-target/config/import
Route Target Export .../evpn-instance[name=X]/route-target/config/export
VLANs .../evpn-instance[name=X]/vlans/vlan

Example: Get EVPN Config

gnmic -a 172.16.0.50:6030 -u admin -p admin --insecure \
  get --path "/arista/eos/evpn"

Port-Channel / LAG

Model: openconfig-interfaces, openconfig-if-aggregate

Operation Path
Port-Channel interface /interfaces/interface[name=Port-Channel999]
LAG config /interfaces/interface[name=Port-Channel999]/aggregation/config
LAG state /interfaces/interface[name=Port-Channel999]/aggregation/state
Member interfaces /interfaces/interface[name=Ethernet1]/ethernet/config/aggregate-id

Key Learnings

1. Path Prefix for Subscriptions

Use native paths without module prefix for ON_CHANGE subscriptions:

# ✅ Works
--path "/interfaces/interface[name=Ethernet1]/state"

# ❌ Does NOT work for ON_CHANGE
--path "/openconfig-interfaces:interfaces/interface[name=Ethernet1]/state"

2. Query Types

# Config only
gnmic get --path "/path" --type config

# State only
gnmic get --path "/path" --type state

# Both (default)
gnmic get --path "/path"

3. Depth Control

# Limit depth for exploration
gnmic get --path "/" --depth 1
gnmic get --path "/interfaces" --depth 2

4. Discovering Paths

# Start broad
gnmic get --path "/" --depth 1

# Explore branches
gnmic get --path "/arista/eos" --depth 1

# Use prompt mode with YANG models
gnmic --file EOS-4.35.0F/openconfig/public/release/models prompt

References