From 70e0911198143a1dacbfb1d8bdbad34bd6b64ef1 Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Thu, 27 Nov 2025 10:30:47 -0800 Subject: [PATCH 1/2] Add Arrcus YANG modules. --- vendor/arrcus/README.md | 5 + vendor/arrcus/arcos/check.sh | 70 + .../arrcus/arcos/v521/INET-ADDRESS-MIB.yang | 466 ++ vendor/arrcus/arcos/v521/IPV6-TC.yang | 44 + vendor/arrcus/arcos/v521/SNMPv2-SMI.yang | 73 + vendor/arrcus/arcos/v521/SNMPv2-TC.yang | 139 + .../arcos/v521/TRANSPORT-ADDRESS-MIB.yang | 120 + vendor/arrcus/arcos/v521/arcos-acl-clear.yang | 73 + vendor/arrcus/arcos/v521/arcos-acl-knob.yang | 28 + vendor/arrcus/arcos/v521/arcos-aft-types.yang | 32 + vendor/arrcus/arcos/v521/arcos-aft.yang | 114 + .../arcos/v521/arcos-arp-nd-global.yang | 17 + .../arcos/v521/arcos-bgp-auto-peer-group.yang | 300 + vendor/arrcus/arcos/v521/arcos-bgp-debug.yang | 241 + vendor/arrcus/arcos/v521/arcos-bgp-rnh.yang | 125 + vendor/arrcus/arcos/v521/arcos-bgp-types.yang | 169 + vendor/arrcus/arcos/v521/arcos-bgp.yang | 182 + .../v521/arcos-bridge-isolation-clear.yang | 37 + .../arcos/v521/arcos-bridge-isolation.yang | 62 + vendor/arrcus/arcos/v521/arcos-bridge.yang | 102 + vendor/arrcus/arcos/v521/arcos-chassis.yang | 306 + .../v521/arcos-classifier-filter-types.yang | 97 + .../arcos/v521/arcos-classifier-filter.yang | 155 + .../arrcus/arcos/v521/arcos-classifier.yang | 140 + .../arrcus/arcos/v521/arcos-common-types.yang | 45 + .../arrcus/arcos/v521/arcos-confd-hafw.yang | 90 + .../arcos/v521/arcos-copp-classifier.yang | 91 + .../v521/arcos-copp-policy-deviations.yang | 169 + .../arrcus/arcos/v521/arcos-copp-policy.yang | 119 + .../arcos-copp-service-policy-deviations.yang | 36 + .../arcos/v521/arcos-copp-service-policy.yang | 94 + vendor/arrcus/arcos/v521/arcos-copp.yang | 46 + vendor/arrcus/arcos/v521/arcos-corefile.yang | 71 + .../arcos/v521/arcos-datapath-aft-common.yang | 78 + .../arcos/v521/arcos-datapath-aft-ipv4.yang | 105 + .../arcos/v521/arcos-datapath-aft-ipv6.yang | 106 + .../arcos/v521/arcos-datapath-aft-mac.yang | 122 + .../arcos/v521/arcos-datapath-aft-mpls.yang | 79 + .../arcos/v521/arcos-datapath-aft-srv6.yang | 125 + .../arcos/v521/arcos-datapath-aft-types.yang | 123 + .../arrcus/arcos/v521/arcos-datapath-aft.yang | 159 + .../arcos/v521/arcos-datapath-asic.yang | 287 + .../arcos/v521/arcos-datapath-nexthop.yang | 312 + .../arcos/v521/arcos-datapath-queues.yang | 138 + .../arcos/v521/arcos-datapath-tunnel.yang | 162 + .../arcos/v521/arcos-datapath-types.yang | 35 + vendor/arrcus/arcos/v521/arcos-datapath.yang | 139 + vendor/arrcus/arcos/v521/arcos-debug.yang | 348 + vendor/arrcus/arcos/v521/arcos-dist-dpal.yang | 115 + vendor/arrcus/arcos/v521/arcos-dist-fib.yang | 1143 +++ vendor/arrcus/arcos/v521/arcos-dpal.yang | 122 + vendor/arrcus/arcos/v521/arcos-event.yang | 192 + vendor/arrcus/arcos/v521/arcos-evpn.yang | 511 ++ vendor/arrcus/arcos/v521/arcos-features.yang | 138 + vendor/arrcus/arcos/v521/arcos-fib.yang | 1551 ++++ .../arcos/v521/arcos-hardware-common.yang | 25 + .../arcos/v521/arcos-hardware-deviations.yang | 23 + .../arcos/v521/arcos-hardware-ecmp.yang | 128 + .../v521/arcos-hardware-platform-dnx.yang | 26 + .../arcos-hardware-platform-interface.yang | 39 + .../v521/arcos-hardware-platform-types.yang | 71 + ...arcos-hardware-platform-xgs-interface.yang | 115 + .../v521/arcos-hardware-platform-xgs.yang | 550 ++ .../arcos/v521/arcos-hardware-platform.yang | 257 + .../arcos/v521/arcos-hardware-scale.yang | 25 + .../arcos/v521/arcos-hardware-units.yang | 153 + vendor/arrcus/arcos/v521/arcos-hardware.yang | 63 + .../arrcus/arcos/v521/arcos-icmp-types.yang | 449 + .../arrcus/arcos/v521/arcos-icmpv6-types.yang | 594 ++ .../arcos/v521/arcos-ietf-ptp-augments.yang | 646 ++ .../arcos/v521/arcos-ietf-ptp-deviations.yang | 182 + .../arcos/v521/arcos-ietf-ptp-types.yang | 143 + ...rcos-if-qos-service-policy-deviations.yang | 54 + .../v521/arcos-if-qos-service-policy.yang | 220 + .../v521/arcos-if-qos-service-tablemap.yang | 132 + vendor/arrcus/arcos/v521/arcos-if-qos.yang | 46 + vendor/arrcus/arcos/v521/arcos-igp-types.yang | 177 + .../arcos/v521/arcos-interfaces-breakout.yang | 62 + .../arcos/v521/arcos-interfaces-cache.yang | 43 + .../arcos/v521/arcos-interfaces-clear.yang | 32 + .../arcos/v521/arcos-interfaces-debug.yang | 56 + .../arrcus/arcos/v521/arcos-isis-debug.yang | 64 + .../arrcus/arcos/v521/arcos-isis-types.yang | 89 + vendor/arrcus/arcos/v521/arcos-l2rib.yang | 1687 ++++ .../arrcus/arcos/v521/arcos-l3fm-debug.yang | 88 + vendor/arrcus/arcos/v521/arcos-ldp-debug.yang | 94 + vendor/arrcus/arcos/v521/arcos-license.yang | 105 + vendor/arrcus/arcos/v521/arcos-mbroker.yang | 718 ++ vendor/arrcus/arcos/v521/arcos-mmu-clear.yang | 23 + vendor/arrcus/arcos/v521/arcos-monitor.yang | 313 + vendor/arrcus/arcos/v521/arcos-mpls-ldp.yang | 852 ++ .../arcos/v521/arcos-mplsoam-debug.yang | 60 + vendor/arrcus/arcos/v521/arcos-mpsc.yang | 705 ++ .../arcos/v521/arcos-neighbor-types.yang | 51 + vendor/arrcus/arcos/v521/arcos-neighbor.yang | 328 + .../v521/arcos-network-instance-global.yang | 23 + vendor/arrcus/arcos/v521/arcos-oam-types.yang | 152 + vendor/arrcus/arcos/v521/arcos-oam.yang | 610 ++ .../v521/arcos-openconfig-aaa-types.yang | 34 + ...os-openconfig-acl-augments-deviations.yang | 139 + .../v521/arcos-openconfig-acl-augments.yang | 448 + .../v521/arcos-openconfig-acl-deviations.yang | 367 + .../v521/arcos-openconfig-aft-augments.yang | 148 + .../arcos/v521/arcos-openconfig-aft.yang | 37 + .../arcos-openconfig-alarms-deviations.yang | 47 + .../v521/arcos-openconfig-bfd-augments.yang | 129 + .../v521/arcos-openconfig-bfd-deviations.yang | 120 + ...nconfig-bgp-augments-arcrr-deviations.yang | 25 + ...os-openconfig-bgp-augments-deviations.yang | 490 ++ .../v521/arcos-openconfig-bgp-augments.yang | 5115 ++++++++++++ .../v521/arcos-openconfig-bgp-deviations.yang | 15 + ...config-bgp-policy-augments-deviations.yang | 121 + .../arcos-openconfig-bgp-policy-augments.yang | 834 ++ ...rcos-openconfig-bgp-policy-deviations.yang | 281 + .../v521/arcos-openconfig-bgp-types.yang | 635 ++ ...os-openconfig-defined-sets-deviations.yang | 47 + ...rcos-openconfig-if-aggregate-augments.yang | 264 + ...os-openconfig-if-aggregate-deviations.yang | 26 + ...arcos-openconfig-if-ethernet-augments.yang | 42 + ...cos-openconfig-if-ethernet-deviations.yang | 47 + .../v521/arcos-openconfig-if-ip-augments.yang | 409 + .../arcos-openconfig-if-ip-deviations.yang | 147 + .../arcos-openconfig-interfaces-augments.yang | 534 ++ ...rcos-openconfig-interfaces-deviations.yang | 176 + ...s-openconfig-isis-augments-deviations.yang | 127 + .../v521/arcos-openconfig-isis-augments.yang | 4253 ++++++++++ ...cos-openconfig-isis-policy-deviations.yang | 22 + .../arcos-openconfig-keychain-augments.yang | 97 + .../arcos-openconfig-keychain-deviations.yang | 153 + .../arcos-openconfig-lacp-deviations.yang | 84 + .../v521/arcos-openconfig-lldp-augments.yang | 34 + .../arcos-openconfig-lldp-deviations.yang | 173 + ...cos-openconfig-local-routing-augments.yang | 167 + .../arcos-openconfig-messages-deviations.yang | 14 + .../v521/arcos-openconfig-mpls-augments.yang | 135 + ...-network-instance-augments-deviations.yang | 224 + ...-openconfig-network-instance-augments.yang | 420 + ...penconfig-network-instance-deviations.yang | 4960 +++++++++++ ...cos-openconfig-network-instance-types.yang | 43 + ...rcos-openconfig-packet-match-augments.yang | 556 ++ .../arcos-openconfig-platform-augments.yang | 201 + ...os-openconfig-platform-cpu-deviations.yang | 43 + .../arcos-openconfig-platform-deviations.yang | 352 + ...os-openconfig-platform-ext-deviations.yang | 43 + ...s-openconfig-platform-port-deviations.yang | 43 + ...os-openconfig-platform-psu-deviations.yang | 69 + .../v521/arcos-openconfig-policy-types.yang | 55 + ...arcos-openconfig-relay-agent-augments.yang | 361 + ...cos-openconfig-relay-agent-deviations.yang | 139 + ...penconfig-rib-bgp-augments-deviations.yang | 103 + .../arcos-openconfig-rib-bgp-augments.yang | 7243 +++++++++++++++++ .../v521/arcos-openconfig-rib-bgp-types.yang | 57 + ...os-openconfig-routing-policy-augments.yang | 403 + ...-openconfig-routing-policy-deviations.yang | 136 + ...openconfig-routing-policy-sr-augments.yang | 114 + ...s-openconfig-segment-routing-augments.yang | 64 + ...cos-openconfig-spanning-tree-augments.yang | 61 + ...s-openconfig-spanning-tree-deviations.yang | 171 + .../arcos-openconfig-system-augments.yang | 3135 +++++++ .../arcos-openconfig-system-deviations.yang | 767 ++ .../arcos-openconfig-telemetry-augments.yang | 435 + ...arcos-openconfig-telemetry-deviations.yang | 176 + .../v521/arcos-openconfig-vlan-augments.yang | 129 + .../arcos-openconfig-vlan-deviations.yang | 76 + .../v521/arcos-openconfig-vlan-types.yang | 60 + .../arcos/v521/arcos-ospf-aggregate.yang | 111 + .../arcos/v521/arcos-ospf-area-interface.yang | 389 + vendor/arrcus/arcos/v521/arcos-ospf-area.yang | 181 + vendor/arrcus/arcos/v521/arcos-ospf-as.yang | 61 + .../arrcus/arcos/v521/arcos-ospf-common.yang | 725 ++ .../arrcus/arcos/v521/arcos-ospf-debug.yang | 108 + .../arcos/v521/arcos-ospf-ext-types.yang | 471 ++ .../arrcus/arcos/v521/arcos-ospf-global.yang | 249 + .../arrcus/arcos/v521/arcos-ospf-policy.yang | 122 + vendor/arrcus/arcos/v521/arcos-ospf-rib.yang | 363 + vendor/arrcus/arcos/v521/arcos-ospf-spf.yang | 546 ++ .../arcos/v521/arcos-ospf-statistics.yang | 1336 +++ .../arrcus/arcos/v521/arcos-ospf-types.yang | 794 ++ vendor/arrcus/arcos/v521/arcos-ospf.yang | 94 + .../v521/arcos-ospfv2-area-interface.yang | 50 + .../arcos/v521/arcos-ospfv2-common.yang | 47 + .../arrcus/arcos/v521/arcos-ospfv2-lsdb.yang | 2379 ++++++ vendor/arrcus/arcos/v521/arcos-ospfv2.yang | 67 + .../v521/arcos-ospfv3-area-interface.yang | 76 + .../arcos/v521/arcos-ospfv3-common.yang | 76 + .../arrcus/arcos/v521/arcos-ospfv3-lsdb.yang | 907 +++ vendor/arrcus/arcos/v521/arcos-ospfv3.yang | 101 + .../arcos/v521/arcos-packet-match-mpls.yang | 48 + vendor/arrcus/arcos/v521/arcos-platform.yang | 491 ++ .../arcos/v521/arcos-policy-action-types.yang | 34 + .../arcos/v521/arcos-policy-action.yang | 264 + vendor/arrcus/arcos/v521/arcos-policy.yang | 260 + vendor/arrcus/arcos/v521/arcos-portsec.yang | 306 + vendor/arrcus/arcos/v521/arcos-process.yang | 32 + vendor/arrcus/arcos/v521/arcos-puntpath.yang | 89 + .../arcos/v521/arcos-qos-classifier.yang | 113 + .../v521/arcos-qos-policy-action-types.yang | 55 + .../v521/arcos-qos-policy-deviations.yang | 145 + .../arrcus/arcos/v521/arcos-qos-policy.yang | 424 + .../arcos/v521/arcos-qos-random-detect.yang | 322 + .../v521/arcos-qos-tablemap-deviations.yang | 47 + .../arcos/v521/arcos-qos-tablemap-types.yang | 47 + .../arrcus/arcos/v521/arcos-qos-tablemap.yang | 247 + vendor/arrcus/arcos/v521/arcos-qos.yang | 46 + .../arrcus/arcos/v521/arcos-relay-agent.yang | 40 + .../arrcus/arcos/v521/arcos-rib-bgp-lpm.yang | 187 + vendor/arrcus/arcos/v521/arcos-rib-clear.yang | 44 + vendor/arrcus/arcos/v521/arcos-rib-debug.yang | 122 + vendor/arrcus/arcos/v521/arcos-rib-lpm.yang | 218 + vendor/arrcus/arcos/v521/arcos-rib.yang | 2032 +++++ vendor/arrcus/arcos/v521/arcos-rov-types.yang | 54 + vendor/arrcus/arcos/v521/arcos-runtime.yang | 66 + .../arcos/v521/arcos-service-policy.yang | 79 + .../arrcus/arcos/v521/arcos-sflow-clear.yang | 42 + vendor/arrcus/arcos/v521/arcos-sflow.yang | 258 + vendor/arrcus/arcos/v521/arcos-sla-icmp.yang | 315 + .../arrcus/arcos/v521/arcos-srv6-types.yang | 630 ++ vendor/arrcus/arcos/v521/arcos-srv6.yang | 502 ++ .../arcos/v521/arcos-storm-control.yang | 138 + vendor/arrcus/arcos/v521/arcos-sync-e.yang | 273 + .../arcos/v521/arcos-system-information.yang | 31 + .../v521/arcos-system-logging-types.yang | 47 + .../arcos/v521/arcos-system-management.yang | 193 + .../arrcus/arcos/v521/arcos-system-types.yang | 308 + vendor/arrcus/arcos/v521/arcos-system.yang | 416 + vendor/arrcus/arcos/v521/arcos-te-types.yang | 1809 ++++ vendor/arrcus/arcos/v521/arcos-te.yang | 269 + vendor/arrcus/arcos/v521/arcos-twamp.yang | 264 + vendor/arrcus/arcos/v521/arcos-version.yang | 136 + .../arrcus/arcos/v521/arcos-vrrp-debug.yang | 49 + vendor/arrcus/arcos/v521/arcos-vxlan.yang | 425 + vendor/arrcus/arcos/v521/confd_dyncfg.yang | 7183 ++++++++++++++++ vendor/arrcus/arcos/v521/iana-crypt-hash.yang | 120 + vendor/arrcus/arcos/v521/iana-if-type.yang | 1579 ++++ vendor/arrcus/arcos/v521/ietf-datastores.yang | 117 + vendor/arrcus/arcos/v521/ietf-inet-types.yang | 457 ++ vendor/arrcus/arcos/v521/ietf-interfaces.yang | 744 ++ vendor/arrcus/arcos/v521/ietf-ip.yang | 939 +++ .../arrcus/arcos/v521/ietf-netconf-acm.yang | 463 ++ .../arcos/v521/ietf-netconf-monitoring.yang | 558 ++ .../arrcus/arcos/v521/ietf-netconf-nmda.yang | 384 + .../v521/ietf-netconf-notifications.yang | 334 + .../arcos/v521/ietf-netconf-partial-lock.yang | 77 + .../v521/ietf-netconf-with-defaults.yang | 140 + vendor/arrcus/arcos/v521/ietf-netconf.yang | 928 +++ .../arcos/v521/ietf-network-instance.yang | 282 + vendor/arrcus/arcos/v521/ietf-origin.yang | 147 + vendor/arrcus/arcos/v521/ietf-ptp.yang | 573 ++ .../arcos/v521/ietf-restconf-monitoring.yang | 150 + vendor/arrcus/arcos/v521/ietf-restconf.yang | 280 + .../v521/ietf-subscribed-notifications.yang | 1350 +++ .../arcos/v521/ietf-x509-cert-to-name.yang | 303 + .../arrcus/arcos/v521/ietf-yang-library.yang | 545 ++ .../arrcus/arcos/v521/ietf-yang-metadata.yang | 82 + vendor/arrcus/arcos/v521/ietf-yang-patch.yang | 390 + vendor/arrcus/arcos/v521/ietf-yang-push.yang | 797 ++ .../arcos/v521/ietf-yang-schema-mount.yang | 226 + vendor/arrcus/arcos/v521/ietf-yang-smiv2.yang | 146 + vendor/arrcus/arcos/v521/ietf-yang-types.yang | 474 ++ .../arcos/v521/openconfig-aaa-radius.yang | 186 + .../arcos/v521/openconfig-aaa-tacacs.yang | 142 + .../arcos/v521/openconfig-aaa-types.yang | 172 + vendor/arrcus/arcos/v521/openconfig-aaa.yang | 837 ++ vendor/arrcus/arcos/v521/openconfig-acl.yang | 843 ++ .../arcos/v521/openconfig-aft-common.yang | 229 + .../arcos/v521/openconfig-aft-ethernet.yang | 95 + .../arcos/v521/openconfig-aft-ipv4.yang | 96 + .../arcos/v521/openconfig-aft-ipv6.yang | 96 + .../arcos/v521/openconfig-aft-mpls.yang | 96 + .../arrcus/arcos/v521/openconfig-aft-pf.yang | 174 + .../arcos/v521/openconfig-aft-types.yang | 58 + vendor/arrcus/arcos/v521/openconfig-aft.yang | 143 + .../arcos/v521/openconfig-alarm-types.yang | 150 + .../arrcus/arcos/v521/openconfig-alarms.yang | 237 + vendor/arrcus/arcos/v521/openconfig-bfd.yang | 703 ++ .../openconfig-bgp-common-multiprotocol.yang | 543 ++ .../v521/openconfig-bgp-common-structure.yang | 221 + .../arcos/v521/openconfig-bgp-common.yang | 690 ++ .../arcos/v521/openconfig-bgp-errors.yang | 427 + .../arcos/v521/openconfig-bgp-global.yang | 414 + .../arcos/v521/openconfig-bgp-neighbor.yang | 754 ++ .../arcos/v521/openconfig-bgp-peer-group.yang | 290 + .../arcos/v521/openconfig-bgp-policy.yang | 1200 +++ .../arcos/v521/openconfig-bgp-types.yang | 614 ++ vendor/arrcus/arcos/v521/openconfig-bgp.yang | 188 + .../arcos/v521/openconfig-defined-sets.yang | 227 + .../arcos/v521/openconfig-extensions.yang | 198 + .../arcos/v521/openconfig-if-aggregate.yang | 192 + .../arcos/v521/openconfig-if-ethernet.yang | 356 + .../arrcus/arcos/v521/openconfig-if-ip.yang | 1002 +++ .../arcos/v521/openconfig-inet-types.yang | 344 + .../arcos/v521/openconfig-interfaces.yang | 932 +++ .../v521/openconfig-isis-lsdb-types.yang | 1588 ++++ .../arcos/v521/openconfig-isis-lsp.yang | 3218 ++++++++ .../arcos/v521/openconfig-isis-policy.yang | 168 + .../arcos/v521/openconfig-isis-routing.yang | 363 + .../arcos/v521/openconfig-isis-types.yang | 321 + vendor/arrcus/arcos/v521/openconfig-isis.yang | 2004 +++++ .../arcos/v521/openconfig-keychain-types.yang | 140 + .../arcos/v521/openconfig-keychain.yang | 311 + vendor/arrcus/arcos/v521/openconfig-lacp.yang | 462 ++ .../arcos/v521/openconfig-lldp-types.yang | 294 + vendor/arrcus/arcos/v521/openconfig-lldp.yang | 636 ++ .../arcos/v521/openconfig-local-routing.yang | 409 + .../arcos/v521/openconfig-messages.yang | 221 + .../arcos/v521/openconfig-mpls-igp.yang | 92 + .../arcos/v521/openconfig-mpls-ldp.yang | 962 +++ .../arcos/v521/openconfig-mpls-rsvp.yang | 1140 +++ .../arrcus/arcos/v521/openconfig-mpls-sr.yang | 101 + .../arcos/v521/openconfig-mpls-static.yang | 274 + .../arrcus/arcos/v521/openconfig-mpls-te.yang | 1291 +++ .../arcos/v521/openconfig-mpls-types.yang | 419 + vendor/arrcus/arcos/v521/openconfig-mpls.yang | 707 ++ .../v521/openconfig-network-instance-l2.yang | 297 + .../v521/openconfig-network-instance-l3.yang | 112 + .../openconfig-network-instance-types.yang | 421 + .../v521/openconfig-network-instance.yang | 1066 +++ .../arcos/v521/openconfig-ospf-types.yang | 837 ++ .../openconfig-ospfv2-area-interface.yang | 481 ++ .../arcos/v521/openconfig-ospfv2-area.yang | 175 + .../arcos/v521/openconfig-ospfv2-common.yang | 97 + .../arcos/v521/openconfig-ospfv2-global.yang | 515 ++ .../arcos/v521/openconfig-ospfv2-lsdb.yang | 2374 ++++++ .../arrcus/arcos/v521/openconfig-ospfv2.yang | 109 + .../v521/openconfig-packet-match-types.yang | 300 + .../arcos/v521/openconfig-packet-match.yang | 327 + .../arcos/v521/openconfig-platform-cpu.yang | 72 + .../arcos/v521/openconfig-platform-ext.yang | 82 + .../arcos/v521/openconfig-platform-fan.yang | 76 + .../arcos/v521/openconfig-platform-port.yang | 161 + .../arcos/v521/openconfig-platform-psu.yang | 146 + .../arcos/v521/openconfig-platform-types.yang | 347 + .../arcos/v521/openconfig-platform.yang | 779 ++ .../arcos/v521/openconfig-policy-types.yang | 178 + .../arrcus/arcos/v521/openconfig-procmon.yang | 180 + .../arcos/v521/openconfig-relay-agent.yang | 815 ++ .../v521/openconfig-rib-bgp-attributes.yang | 934 +++ .../openconfig-rib-bgp-shared-attributes.yang | 197 + .../openconfig-rib-bgp-table-attributes.yang | 137 + .../arcos/v521/openconfig-rib-bgp-tables.yang | 964 +++ .../arcos/v521/openconfig-rib-bgp-types.yang | 269 + .../arrcus/arcos/v521/openconfig-rib-bgp.yang | 234 + .../arcos/v521/openconfig-routing-policy.yang | 1114 +++ .../v521/openconfig-segment-routing.yang | 783 ++ .../v521/openconfig-spanning-tree-types.yang | 224 + .../arcos/v521/openconfig-spanning-tree.yang | 866 ++ .../arcos/v521/openconfig-system-logging.yang | 503 ++ .../v521/openconfig-system-management.yang | 147 + .../v521/openconfig-system-terminal.yang | 249 + .../arrcus/arcos/v521/openconfig-system.yang | 1004 +++ .../v521/openconfig-telemetry-types.yang | 124 + .../arcos/v521/openconfig-telemetry.yang | 782 ++ .../v521/openconfig-transport-types.yang | 1047 +++ .../arrcus/arcos/v521/openconfig-types.yang | 471 ++ .../arcos/v521/openconfig-vlan-types.yang | 283 + vendor/arrcus/arcos/v521/openconfig-vlan.yang | 997 +++ .../arcos/v521/openconfig-yang-types.yang | 192 + .../arcos/v521/tailf-aaa-deviations.yang | 18 + vendor/arrcus/arcos/v521/tailf-aaa.yang | 334 + vendor/arrcus/arcos/v521/tailf-acm.yang | 182 + .../arcos/v521/tailf-cli-extensions.yang | 3467 ++++++++ .../arcos/v521/tailf-common-monitoring.yang | 973 +++ .../arrcus/arcos/v521/tailf-common-query.yang | 284 + vendor/arrcus/arcos/v521/tailf-common.yang | 3604 ++++++++ .../arcos/v521/tailf-confd-monitoring.yang | 92 + .../arcos/v521/tailf-confd-progress.yang | 47 + vendor/arrcus/arcos/v521/tailf-kicker.yang | 364 + .../arrcus/arcos/v521/tailf-last-login.yang | 137 + .../arcos/v521/tailf-meta-extensions.yang | 157 + .../arcos/v521/tailf-netconf-extensions.yang | 141 + .../arcos/v521/tailf-netconf-forward.yang | 129 + .../arcos/v521/tailf-netconf-inactive.yang | 123 + .../arcos/v521/tailf-netconf-monitoring.yang | 422 + .../arcos/v521/tailf-netconf-query.yang | 98 + .../arcos/v521/tailf-netconf-rollback.yang | 50 + .../v521/tailf-netconf-transactions.yang | 146 + .../v521/tailf-netconf-with-rollback-id.yang | 79 + .../tailf-netconf-with-transaction-id.yang | 85 + vendor/arrcus/arcos/v521/tailf-progress.yang | 357 + vendor/arrcus/arcos/v521/tailf-rollback.yang | 200 + vendor/arrcus/arcos/v521/tailf-tls.yang | 151 + vendor/arrcus/arcos/v521/tailf-xsd-types.yang | 95 + vendor/arrcus/check.sh | 23 + 383 files changed, 158930 insertions(+) create mode 100644 vendor/arrcus/README.md create mode 100755 vendor/arrcus/arcos/check.sh create mode 100644 vendor/arrcus/arcos/v521/INET-ADDRESS-MIB.yang create mode 100644 vendor/arrcus/arcos/v521/IPV6-TC.yang create mode 100644 vendor/arrcus/arcos/v521/SNMPv2-SMI.yang create mode 100644 vendor/arrcus/arcos/v521/SNMPv2-TC.yang create mode 100644 vendor/arrcus/arcos/v521/TRANSPORT-ADDRESS-MIB.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-acl-clear.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-acl-knob.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-aft-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-aft.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-arp-nd-global.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-bgp-auto-peer-group.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-bgp-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-bgp-rnh.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-bgp-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-bgp.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-bridge-isolation-clear.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-bridge-isolation.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-bridge.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-chassis.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-classifier-filter-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-classifier-filter.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-classifier.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-common-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-confd-hafw.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-copp-classifier.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-copp-policy-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-copp-policy.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-copp-service-policy-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-copp-service-policy.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-copp.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-corefile.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-aft-common.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-aft-ipv4.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-aft-ipv6.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-aft-mac.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-aft-mpls.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-aft-srv6.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-aft-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-aft.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-asic.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-nexthop.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-queues.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-tunnel.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-datapath.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-dist-dpal.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-dist-fib.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-dpal.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-event.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-evpn.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-features.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-fib.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-common.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-ecmp.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-platform-dnx.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-platform-interface.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-platform-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-platform-xgs-interface.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-platform-xgs.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-platform.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-scale.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware-units.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-hardware.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-icmp-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-icmpv6-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ietf-ptp-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ietf-ptp-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ietf-ptp-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-if-qos-service-policy-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-if-qos-service-policy.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-if-qos-service-tablemap.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-if-qos.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-igp-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-interfaces-breakout.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-interfaces-cache.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-interfaces-clear.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-interfaces-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-isis-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-isis-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-l2rib.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-l3fm-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ldp-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-license.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-mbroker.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-mmu-clear.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-monitor.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-mpls-ldp.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-mplsoam-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-mpsc.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-neighbor-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-neighbor.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-network-instance-global.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-oam-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-oam.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-aaa-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-acl-augments-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-acl-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-acl-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-aft-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-aft.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-alarms-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bfd-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bfd-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments-arcrr-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bgp-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-augments-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-bgp-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-defined-sets-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-if-aggregate-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-if-aggregate-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-if-ethernet-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-if-ethernet-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-if-ip-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-if-ip-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-interfaces-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-interfaces-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-isis-augments-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-isis-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-isis-policy-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-keychain-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-keychain-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-lacp-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-lldp-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-lldp-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-local-routing-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-messages-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-mpls-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-augments-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-packet-match-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-platform-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-platform-cpu-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-platform-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-platform-ext-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-platform-port-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-platform-psu-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-policy-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-relay-agent-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-relay-agent-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-augments-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-sr-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-segment-routing-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-spanning-tree-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-spanning-tree-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-system-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-system-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-telemetry-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-telemetry-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-vlan-augments.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-vlan-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-openconfig-vlan-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-aggregate.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-area-interface.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-area.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-as.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-common.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-ext-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-global.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-policy.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-rib.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-spf.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-statistics.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospf.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospfv2-area-interface.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospfv2-common.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospfv2-lsdb.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospfv2.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospfv3-area-interface.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospfv3-common.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospfv3-lsdb.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-ospfv3.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-packet-match-mpls.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-platform.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-policy-action-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-policy-action.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-policy.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-portsec.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-process.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-puntpath.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos-classifier.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos-policy-action-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos-policy-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos-policy.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos-random-detect.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos-tablemap-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos-tablemap-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos-tablemap.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-qos.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-relay-agent.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-rib-bgp-lpm.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-rib-clear.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-rib-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-rib-lpm.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-rib.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-rov-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-runtime.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-service-policy.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-sflow-clear.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-sflow.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-sla-icmp.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-srv6-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-srv6.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-storm-control.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-sync-e.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-system-information.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-system-logging-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-system-management.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-system-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-system.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-te-types.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-te.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-twamp.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-version.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-vrrp-debug.yang create mode 100644 vendor/arrcus/arcos/v521/arcos-vxlan.yang create mode 100644 vendor/arrcus/arcos/v521/confd_dyncfg.yang create mode 100644 vendor/arrcus/arcos/v521/iana-crypt-hash.yang create mode 100644 vendor/arrcus/arcos/v521/iana-if-type.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-datastores.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-inet-types.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-interfaces.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-ip.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-netconf-acm.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-netconf-monitoring.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-netconf-nmda.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-netconf-notifications.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-netconf-partial-lock.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-netconf-with-defaults.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-netconf.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-network-instance.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-origin.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-ptp.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-restconf-monitoring.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-restconf.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-subscribed-notifications.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-x509-cert-to-name.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-yang-library.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-yang-metadata.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-yang-patch.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-yang-push.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-yang-schema-mount.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-yang-smiv2.yang create mode 100644 vendor/arrcus/arcos/v521/ietf-yang-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aaa-radius.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aaa-tacacs.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aaa-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aaa.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-acl.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aft-common.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aft-ethernet.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aft-ipv4.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aft-ipv6.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aft-mpls.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aft-pf.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aft-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-aft.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-alarm-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-alarms.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bfd.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-common-multiprotocol.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-common-structure.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-common.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-errors.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-global.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-neighbor.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-peer-group.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-policy.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-bgp.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-defined-sets.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-extensions.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-if-aggregate.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-if-ethernet.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-if-ip.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-inet-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-interfaces.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-isis-lsdb-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-isis-lsp.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-isis-policy.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-isis-routing.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-isis-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-isis.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-keychain-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-keychain.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-lacp.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-lldp-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-lldp.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-local-routing.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-messages.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-mpls-igp.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-mpls-ldp.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-mpls-rsvp.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-mpls-sr.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-mpls-static.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-mpls-te.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-mpls-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-mpls.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-network-instance-l2.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-network-instance-l3.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-network-instance-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-network-instance.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-ospf-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-ospfv2-area-interface.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-ospfv2-area.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-ospfv2-common.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-ospfv2-global.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-ospfv2-lsdb.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-ospfv2.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-packet-match-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-packet-match.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-platform-cpu.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-platform-ext.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-platform-fan.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-platform-port.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-platform-psu.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-platform-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-platform.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-policy-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-procmon.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-relay-agent.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-rib-bgp-attributes.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-rib-bgp-shared-attributes.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-rib-bgp-table-attributes.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-rib-bgp-tables.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-rib-bgp-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-rib-bgp.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-routing-policy.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-segment-routing.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-spanning-tree-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-spanning-tree.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-system-logging.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-system-management.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-system-terminal.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-system.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-telemetry-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-telemetry.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-transport-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-vlan-types.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-vlan.yang create mode 100644 vendor/arrcus/arcos/v521/openconfig-yang-types.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-aaa-deviations.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-aaa.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-acm.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-cli-extensions.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-common-monitoring.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-common-query.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-common.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-confd-monitoring.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-confd-progress.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-kicker.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-last-login.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-meta-extensions.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-extensions.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-forward.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-inactive.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-monitoring.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-query.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-rollback.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-transactions.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-with-rollback-id.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-netconf-with-transaction-id.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-progress.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-rollback.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-tls.yang create mode 100644 vendor/arrcus/arcos/v521/tailf-xsd-types.yang create mode 100755 vendor/arrcus/check.sh diff --git a/vendor/arrcus/README.md b/vendor/arrcus/README.md new file mode 100644 index 000000000..adfea4d92 --- /dev/null +++ b/vendor/arrcus/README.md @@ -0,0 +1,5 @@ +This directory contains YANG models for Arrcus. There is for now one sub-directory: + +* **arcos** - models that are specific to ArcOS + +Each subdirectory may have further OS information in a README file. diff --git a/vendor/arrcus/arcos/check.sh b/vendor/arrcus/arcos/check.sh new file mode 100755 index 000000000..7d2086385 --- /dev/null +++ b/vendor/arrcus/arcos/check.sh @@ -0,0 +1,70 @@ +#!/bin/bash -xv +# +# Vendor-specific check script. Assumes that pyang is on path and that +# all standard modules are on its internal module path. +# +# Deviation modules are NOT checked as they require specific imports +# typically not available locally. +# +# This script will only be run for the last release of a version branch. +# When a new set of models is committed for a version, the previous +# should be removed. +# +platform_dir="vendor/arrcus/" + +# NOTE: please just have the directories you are checking here +to_check="arcos/v521" + +debug=0 + +checkDir () { + if [ "$debug" -eq "1" ]; then + echo Checking yang files in $platform_dir/$1 + fi + exit_status="" + cwd=`pwd` + cd $1 + to_process=`grep -L arcos-*.yang` + for f in $to_process; do + if [ "$debug" -eq "1" ]; then + echo Checking $f... + fi + errors=`pyang $yanglint_flags $f 2>&1 | grep -v "warning:"` + if [ ! -z "$errors" ]; then + printf "PYANG: Errors in $f\n" + printf "$errors\n" + exit_status="failed!" + # if [ "$debug" -eq "1" ]; then + # printf "\n\n*** EARLY EXIT DUE TO ERROR ***\n\n" + # exit 1 + # fi + fi + done + cd $cwd + + if [ ! -z "$exit_status" ]; then + exit 1 + fi +} + +if [ "$debug" -eq "1" ]; then + printf "\nChecking modules with yanglint, using 'lax quote checks' via perlre filtering\n" +fi + +if [ -e "$platform_dir" ]; then + cd $platform_dir +fi + +# for d in $to_check; do +# checkDir $d +# done + +declare -a pids +for d in $to_check; do + (checkDir $d) & + pids+=("$!") +done + +for p in $pids; do + wait $p || exit 1 +done diff --git a/vendor/arrcus/arcos/v521/INET-ADDRESS-MIB.yang b/vendor/arrcus/arcos/v521/INET-ADDRESS-MIB.yang new file mode 100644 index 000000000..834086fbf --- /dev/null +++ b/vendor/arrcus/arcos/v521/INET-ADDRESS-MIB.yang @@ -0,0 +1,466 @@ +/* + * Generated by confdc --mib2yang-std + * Source: INET-ADDRESS-MIB.mib + */ +/* + * This YANG module has been generated by smidump 0.5.0: + * + * smidump -f yang INET-ADDRESS-MIB + * + * Do not edit. Edit the source file instead! + */ + +module INET-ADDRESS-MIB { + + namespace "urn:ietf:params:xml:ns:yang:smiv2:INET-ADDRESS-MIB"; + prefix "inet-address"; + + import ietf-yang-smiv2 { + prefix "smiv2"; + } + + organization + "IETF Operations and Management Area"; + + contact + "Juergen Schoenwaelder (Editor) + International University Bremen + P.O. Box 750 561 + 28725 Bremen, Germany + + Phone: +49 421 200-3587 + EMail: j.schoenwaelder@iu-bremen.de + + Send comments to ."; + + description + "This MIB module defines textual conventions for + representing Internet addresses. An Internet + address can be an IPv4 address, an IPv6 address, + or a DNS domain name. This module also defines + textual conventions for Internet port numbers, + autonomous system numbers, and the length of an + Internet address prefix. + + Copyright (C) The Internet Society (2005). This version + of this MIB module is part of RFC 4001, see the RFC + itself for full legal notices."; + + revision 2005-02-04 { + description + "Third version, published as RFC 4001. This revision + introduces the InetZoneIndex, InetScopeType, and + InetVersion textual conventions."; + } + + revision 2002-05-09 { + description + "Second version, published as RFC 3291. This + revision contains several clarifications and + introduces several new textual conventions: + InetAddressPrefixLength, InetPortNumber, + InetAutonomousSystemNumber, InetAddressIPv4z, + and InetAddressIPv6z."; + } + + revision 2000-06-08 { + description + "Initial version, published as RFC 2851."; + } + + typedef InetAddressType { + type enumeration { + enum "unknown" { + value "0"; + } + enum "ipv4" { + value "1"; + } + enum "ipv6" { + value "2"; + } + enum "ipv4z" { + value "3"; + } + enum "ipv6z" { + value "4"; + } + enum "dns" { + value "16"; + } + } + description + "A value that represents a type of Internet address. + + unknown(0) An unknown address type. This value MUST + be used if the value of the corresponding + InetAddress object is a zero-length string. + It may also be used to indicate an IP address + that is not in one of the formats defined + below. + + ipv4(1) An IPv4 address as defined by the + InetAddressIPv4 textual convention. + + ipv6(2) An IPv6 address as defined by the + InetAddressIPv6 textual convention. + + ipv4z(3) A non-global IPv4 address including a zone + index as defined by the InetAddressIPv4z + textual convention. + + ipv6z(4) A non-global IPv6 address including a zone + index as defined by the InetAddressIPv6z + textual convention. + + dns(16) A DNS domain name as defined by the + InetAddressDNS textual convention. + + Each definition of a concrete InetAddressType value must be + accompanied by a definition of a textual convention for use + with that InetAddressType. + + To support future extensions, the InetAddressType textual + convention SHOULD NOT be sub-typed in object type definitions. + It MAY be sub-typed in compliance statements in order to + require only a subset of these address types for a compliant + implementation. + + Implementations must ensure that InetAddressType objects + and any dependent objects (e.g., InetAddress objects) are + consistent. An inconsistentValue error must be generated + if an attempt to change an InetAddressType object would, + for example, lead to an undefined InetAddress value. In + + + particular, InetAddressType/InetAddress pairs must be + changed together if the address type changes (e.g., from + ipv6(2) to ipv4(1))."; + } + + typedef InetAddress { + type binary { + length "0..255"; + } + description + "Denotes a generic Internet address. + + An InetAddress value is always interpreted within the context + of an InetAddressType value. Every usage of the InetAddress + textual convention is required to specify the InetAddressType + object that provides the context. It is suggested that the + InetAddressType object be logically registered before the + object(s) that use the InetAddress textual convention, if + they appear in the same logical row. + + The value of an InetAddress object must always be + consistent with the value of the associated InetAddressType + object. Attempts to set an InetAddress object to a value + inconsistent with the associated InetAddressType + must fail with an inconsistentValue error. + + When this textual convention is used as the syntax of an + index object, there may be issues with the limit of 128 + sub-identifiers specified in SMIv2, STD 58. In this case, + the object definition MUST include a 'SIZE' clause to + limit the number of potential instance sub-identifiers; + otherwise the applicable constraints MUST be stated in + the appropriate conceptual row DESCRIPTION clauses, or + in the surrounding documentation if there is no single + DESCRIPTION clause that is appropriate."; + } + + typedef InetAddressIPv4 { + type string; + description + "Represents an IPv4 network address: + + + Octets Contents Encoding + 1-4 IPv4 address network-byte order + + The corresponding InetAddressType value is ipv4(1). + + This textual convention SHOULD NOT be used directly in object + definitions, as it restricts addresses to a specific format. + However, if it is used, it MAY be used either on its own or in + conjunction with InetAddressType, as a pair."; + smiv2:display-hint "1d.1d.1d.1d"; + } + + typedef InetAddressIPv6 { + type string; + description + "Represents an IPv6 network address: + + Octets Contents Encoding + 1-16 IPv6 address network-byte order + + The corresponding InetAddressType value is ipv6(2). + + This textual convention SHOULD NOT be used directly in object + definitions, as it restricts addresses to a specific format. + However, if it is used, it MAY be used either on its own or in + conjunction with InetAddressType, as a pair."; + smiv2:display-hint "2x:2x:2x:2x:2x:2x:2x:2x"; + } + + typedef InetAddressIPv4z { + type string; + description + "Represents a non-global IPv4 network address, together + with its zone index: + + Octets Contents Encoding + 1-4 IPv4 address network-byte order + 5-8 zone index network-byte order + + The corresponding InetAddressType value is ipv4z(3). + + The zone index (bytes 5-8) is used to disambiguate identical + address values on nodes that have interfaces attached to + different zones of the same scope. The zone index may contain + the special value 0, which refers to the default zone for each + scope. + + This textual convention SHOULD NOT be used directly in object + + + definitions, as it restricts addresses to a specific format. + However, if it is used, it MAY be used either on its own or in + conjunction with InetAddressType, as a pair."; + smiv2:display-hint "1d.1d.1d.1d%4d"; + } + + typedef InetAddressIPv6z { + type string; + description + "Represents a non-global IPv6 network address, together + with its zone index: + + Octets Contents Encoding + 1-16 IPv6 address network-byte order + 17-20 zone index network-byte order + + The corresponding InetAddressType value is ipv6z(4). + + The zone index (bytes 17-20) is used to disambiguate + identical address values on nodes that have interfaces + attached to different zones of the same scope. The zone index + may contain the special value 0, which refers to the default + zone for each scope. + + This textual convention SHOULD NOT be used directly in object + definitions, as it restricts addresses to a specific format. + However, if it is used, it MAY be used either on its own or in + conjunction with InetAddressType, as a pair."; + smiv2:display-hint "2x:2x:2x:2x:2x:2x:2x:2x%4d"; + } + + typedef InetAddressDNS { + type string; + description + "Represents a DNS domain name. The name SHOULD be fully + qualified whenever possible. + + The corresponding InetAddressType is dns(16). + + The DESCRIPTION clause of InetAddress objects that may have + InetAddressDNS values MUST fully describe how (and when) + these names are to be resolved to IP addresses. + + The resolution of an InetAddressDNS value may require to + query multiple DNS records (e.g., A for IPv4 and AAAA for + IPv6). The order of the resolution process and which DNS + record takes precedence depends on the configuration of the + resolver. + + + This textual convention SHOULD NOT be used directly in object + definitions, as it restricts addresses to a specific format. + However, if it is used, it MAY be used either on its own or in + conjunction with InetAddressType, as a pair."; + smiv2:display-hint "255a"; + } + + typedef InetAddressPrefixLength { + type uint32 { + range "0..2040"; + } + description + "Denotes the length of a generic Internet network address + prefix. A value of n corresponds to an IP address mask + that has n contiguous 1-bits from the most significant + bit (MSB), with all other bits set to 0. + + An InetAddressPrefixLength value is always interpreted within + the context of an InetAddressType value. Every usage of the + InetAddressPrefixLength textual convention is required to + specify the InetAddressType object that provides the + context. It is suggested that the InetAddressType object be + logically registered before the object(s) that use the + InetAddressPrefixLength textual convention, if they appear + in the same logical row. + + InetAddressPrefixLength values larger than + the maximum length of an IP address for a specific + InetAddressType are treated as the maximum significant + value applicable for the InetAddressType. The maximum + significant value is 32 for the InetAddressType + 'ipv4(1)' and 'ipv4z(3)' and 128 for the InetAddressType + 'ipv6(2)' and 'ipv6z(4)'. The maximum significant value + for the InetAddressType 'dns(16)' is 0. + + The value zero is object-specific and must be defined as + part of the description of any object that uses this + syntax. Examples of the usage of zero might include + situations where the Internet network address prefix + is unknown or does not apply. + + The upper bound of the prefix length has been chosen to + be consistent with the maximum size of an InetAddress."; + smiv2:display-hint "d"; + } + + typedef InetPortNumber { + type uint32 { + range "0..65535"; + } + description + "Represents a 16 bit port number of an Internet transport + + + layer protocol. Port numbers are assigned by IANA. A + current list of all assignments is available from + . + + The value zero is object-specific and must be defined as + part of the description of any object that uses this + syntax. Examples of the usage of zero might include + situations where a port number is unknown, or when the + value zero is used as a wildcard in a filter."; + reference + "STD 6 (RFC 768), STD 7 (RFC 793) and RFC 2960"; + smiv2:display-hint "d"; + } + + typedef InetAutonomousSystemNumber { + type uint32; + description + "Represents an autonomous system number that identifies an + Autonomous System (AS). An AS is a set of routers under a + single technical administration, using an interior gateway + protocol and common metrics to route packets within the AS, + and using an exterior gateway protocol to route packets to + other ASes'. IANA maintains the AS number space and has + delegated large parts to the regional registries. + + Autonomous system numbers are currently limited to 16 bits + (0..65535). There is, however, work in progress to enlarge the + autonomous system number space to 32 bits. Therefore, this + textual convention uses an Unsigned32 value without a + range restriction in order to support a larger autonomous + system number space."; + reference + "RFC 1771, RFC 1930"; + smiv2:display-hint "d"; + } + + typedef InetScopeType { + type enumeration { + enum "interfaceLocal" { + value "1"; + } + enum "linkLocal" { + value "2"; + } + enum "subnetLocal" { + value "3"; + } + enum "adminLocal" { + value "4"; + } + enum "siteLocal" { + value "5"; + } + enum "organizationLocal" { + value "8"; + } + enum "global" { + value "14"; + } + } + description + "Represents a scope type. This textual convention can be used + in cases where a MIB has to represent different scope types + and there is no context information, such as an InetAddress + object, that implicitly defines the scope type. + + Note that not all possible values have been assigned yet, but + they may be assigned in future revisions of this specification. + Applications should therefore be able to deal with values + not yet assigned."; + reference + "RFC 3513"; + } + + typedef InetZoneIndex { + type uint32; + description + "A zone index identifies an instance of a zone of a + specific scope. + + The zone index MUST disambiguate identical address + values. For link-local addresses, the zone index will + typically be the interface index (ifIndex as defined in the + IF-MIB) of the interface on which the address is configured. + + The zone index may contain the special value 0, which refers + to the default zone. The default zone may be used in cases + where the valid zone index is not known (e.g., when a + management application has to write a link-local IPv6 + address without knowing the interface index value). The + default zone SHOULD NOT be used as an easy way out in + cases where the zone index for a non-global IPv6 address + is known."; + reference + "RFC4007"; + smiv2:display-hint "d"; + } + + typedef InetVersion { + type enumeration { + enum "unknown" { + value "0"; + } + enum "ipv4" { + value "1"; + } + enum "ipv6" { + value "2"; + } + } + description + "A value representing a version of the IP protocol. + + unknown(0) An unknown or unspecified version of the IP + protocol. + + + ipv4(1) The IPv4 protocol as defined in RFC 791 (STD 5). + + ipv6(2) The IPv6 protocol as defined in RFC 2460. + + Note that this textual convention SHOULD NOT be used to + distinguish different address types associated with IP + protocols. The InetAddressType has been designed for this + purpose."; + reference + "RFC 791, RFC 2460"; + } + + smiv2:alias "inetAddressMIB" { + smiv2:oid "1.3.6.1.2.1.76"; + } + +} diff --git a/vendor/arrcus/arcos/v521/IPV6-TC.yang b/vendor/arrcus/arcos/v521/IPV6-TC.yang new file mode 100644 index 000000000..c5b6a9af7 --- /dev/null +++ b/vendor/arrcus/arcos/v521/IPV6-TC.yang @@ -0,0 +1,44 @@ +module IPV6-TC { + namespace "http://tail-f.com/ns/mibs/IPV6-TC/199812010000Z"; + prefix IPV6_TC; + tailf:id ""; + tailf:snmp-mib-module-name "IPV6-TC"; + + import ietf-inet-types { + prefix inet; + } + import tailf-common { + prefix tailf; + } + + revision 1998-12-01 { + description + ""; + } + + typedef Ipv6Address { + type inet:ipv6-address; + } + + typedef Ipv6AddressPrefix { + type inet:ipv6-prefix; + } + + typedef Ipv6AddressIfIdentifier { + type string { + pattern "(((([0-9A-Fa-f]{2}):){0,7}([0-9A-Fa-f]{2}))){0,1}"; + } + } + + typedef Ipv6IfIndex { + type int32 { + range "1 .. 2147483647"; + } + } + + typedef Ipv6IfIndexOrZero { + type int32 { + range "0 .. 2147483647"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/SNMPv2-SMI.yang b/vendor/arrcus/arcos/v521/SNMPv2-SMI.yang new file mode 100644 index 000000000..b5d80935d --- /dev/null +++ b/vendor/arrcus/arcos/v521/SNMPv2-SMI.yang @@ -0,0 +1,73 @@ +module SNMPv2-SMI { + namespace "http://tail-f.com/ns/mibs/SNMPv2-SMI/1.0"; + prefix SNMPv2_SMI; + tailf:id ""; + tailf:snmp-mib-module-name "SNMPv2-SMI"; + + import ietf-yang-types { + prefix yang; + } + import tailf-common { + prefix tailf; + } + + typedef ExtUTCTime { + type tailf:hex-list { + tailf:value-length "11 .. 13"; + } + } + + typedef ObjectName { + type yang:object-identifier; + } + + typedef NotificationName { + type yang:object-identifier; + } + + typedef Integer32 { + type int32 { + range "-2147483648 .. 2147483647"; + } + } + + typedef IpAddress { + type string { + pattern "(0|[1-9](([0-9]){0,2})).(0|[1-9](([0-9]){0,2})).(0|[1-9](([0-9]){0,2})).(0|[1-9](([0-9]){0,2}))"; + } + } + + typedef Counter32 { + type uint32 { + range "0 .. 4294967295"; + } + } + + typedef Gauge32 { + type uint32 { + range "0 .. 4294967295"; + } + } + + typedef Unsigned32 { + type uint32 { + range "0 .. 4294967295"; + } + } + + typedef TimeTicks { + type uint32 { + range "0 .. 4294967295"; + } + } + + typedef Opaque { + type tailf:hex-list; + } + + typedef Counter64 { + type yang:counter64 { + range "0 .. 18446744073709551615"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/SNMPv2-TC.yang b/vendor/arrcus/arcos/v521/SNMPv2-TC.yang new file mode 100644 index 000000000..b4863e74e --- /dev/null +++ b/vendor/arrcus/arcos/v521/SNMPv2-TC.yang @@ -0,0 +1,139 @@ +module SNMPv2-TC { + namespace "http://tail-f.com/ns/mibs/SNMPv2-TC/1.0"; + prefix SNMPv2_TC; + tailf:id ""; + tailf:snmp-mib-module-name "SNMPv2-TC"; + + import ietf-yang-types { + prefix yang; + } + import tailf-common { + prefix tailf; + } + import ietf-yang-smiv2 { + prefix smiv2; + } + + typedef DisplayString { + type string { + length "min .. 255"; + pattern '\p{IsBasicLatin}{0,255}'; + } + } + + typedef PhysAddress { + type tailf:hex-list { + pattern "(((([0-9A-Fa-f]{2}):)*([0-9A-Fa-f]{2}))){0,1}"; + } + } + + typedef MacAddress { + type tailf:hex-list { + pattern "(((([0-9A-Fa-f]{2}):){5,5})([0-9A-Fa-f]{2}))"; + tailf:value-length "6"; + } + } + + typedef TruthValue { + type enumeration { + enum "true" { + value 1; + } + enum "false" { + value 2; + } + } + } + + typedef TestAndIncr { + type int32 { + range "0 .. 2147483647"; + } + } + + typedef AutonomousType { + type yang:object-identifier; + } + + typedef InstancePointer { + type yang:object-identifier; + } + + typedef VariablePointer { + type yang:object-identifier; + } + + typedef RowPointer { + type yang:object-identifier; + } + + typedef RowStatus { + type enumeration { + enum "active" { + value 1; + } + enum "notInService" { + value 2; + } + enum "notReady" { + value 3; + } + enum "createAndGo" { + value 4; + } + enum "createAndWait" { + value 5; + } + enum "destroy" { + value 6; + } + } + } + + typedef TimeStamp { + type uint32 { + range "0 .. 4294967295"; + } + } + + typedef TimeInterval { + type int32 { + range "0 .. 2147483647"; + } + } + + typedef DateAndTime { + smiv2:display-hint "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"; + type string; + } + + typedef StorageType { + type enumeration { + enum "other" { + value 1; + } + enum "volatile" { + value 2; + } + enum "nonVolatile" { + value 3; + } + enum "permanent" { + value 4; + } + enum "readOnly" { + value 5; + } + } + } + + typedef TDomain { + type yang:object-identifier; + } + + typedef TAddress { + type tailf:octet-list { + tailf:value-length "1 .. 255"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/TRANSPORT-ADDRESS-MIB.yang b/vendor/arrcus/arcos/v521/TRANSPORT-ADDRESS-MIB.yang new file mode 100644 index 000000000..fd43e556c --- /dev/null +++ b/vendor/arrcus/arcos/v521/TRANSPORT-ADDRESS-MIB.yang @@ -0,0 +1,120 @@ +module TRANSPORT-ADDRESS-MIB { + namespace "http://tail-f.com/ns/mibs/TRANSPORT-ADDRESS-MIB/200211010000Z"; + prefix TRANSPORT_ADDRESS_MIB; + tailf:id ""; + tailf:snmp-mib-module-name "TRANSPORT-ADDRESS-MIB"; + + import ietf-yang-types { + prefix yang; + } + import tailf-common { + prefix tailf; + } + + revision 2002-11-01 { + description + ""; + } + + typedef TransportDomain { + type yang:object-identifier; + } + + typedef TransportAddressType { + type enumeration { + enum "unknown" { + value 0; + } + enum "udpIpv4" { + value 1; + } + enum "udpIpv6" { + value 2; + } + enum "udpIpv4z" { + value 3; + } + enum "udpIpv6z" { + value 4; + } + enum "tcpIpv4" { + value 5; + } + enum "tcpIpv6" { + value 6; + } + enum "tcpIpv4z" { + value 7; + } + enum "tcpIpv6z" { + value 8; + } + enum "sctpIpv4" { + value 9; + } + enum "sctpIpv6" { + value 10; + } + enum "sctpIpv4z" { + value 11; + } + enum "sctpIpv6z" { + value 12; + } + enum "local" { + value 13; + } + enum "udpDns" { + value 14; + } + enum "tcpDns" { + value 15; + } + enum "sctpDns" { + value 16; + } + } + } + + typedef TransportAddress { + type tailf:hex-list { + tailf:value-length "min .. 255"; + } + } + + typedef TransportAddressIPv4 { + type tailf:hex-list { + tailf:value-length "6"; + } + } + + typedef TransportAddressIPv6 { + type tailf:hex-list { + tailf:value-length "18"; + } + } + + typedef TransportAddressIPv4z { + type tailf:hex-list { + tailf:value-length "10"; + } + } + + typedef TransportAddressIPv6z { + type tailf:hex-list { + tailf:value-length "22"; + } + } + + typedef TransportAddressLocal { + type string { + length "1 .. 255"; + } + } + + typedef TransportAddressDns { + type string { + length "1 .. 255"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-acl-clear.yang b/vendor/arrcus/arcos/v521/arcos-acl-clear.yang new file mode 100644 index 000000000..d83a78cd5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-acl-clear.yang @@ -0,0 +1,73 @@ +module arcos-acl-clear { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/acl/clear"; + prefix arc-acl-clr; + + import openconfig-acl { + prefix oc-acl; + } + + container acl-counters { + description + "Clear ACL statistics"; + + action all { + description + "Clear stats counters for all ACL sets and entries"; + + output { + leaf result { + type string; + description + "The status of the clear operation"; + } + } + } + + action set { + description + "Clear stats counters for a specific ACL set or entry"; + + input { + leaf name { + type leafref { + path "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:config" + + "/oc-acl:name"; + } + mandatory true; + description + "The ACL name"; + } + + leaf type { + type leafref { + path "/oc-acl:acl/oc-acl:acl-sets" + + "/oc-acl:acl-set[oc-acl:name=current()/../name]" + + "/oc-acl:config/oc-acl:type"; + } + mandatory true; + description + "The ACL type"; + } + + leaf acl-entry { + type leafref { + path "/oc-acl:acl/oc-acl:acl-sets" + + "/oc-acl:acl-set[oc-acl:name=current()/../name] " + + "[oc-acl:type=current()/../type]/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:config/oc-acl:sequence-id"; + } + description + "The ACL entry sequence-id"; + } + } + output { + leaf result { + type string; + description + "The status of the clear operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-acl-knob.yang b/vendor/arrcus/arcos/v521/arcos-acl-knob.yang new file mode 100644 index 000000000..4d72497ab --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-acl-knob.yang @@ -0,0 +1,28 @@ +module arcos-acl-knob { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/acl/knob"; + prefix arc-acl-knb; + + container knob-acl { + description + "Top-level container for Global ACL knobs"; + + container limit-ingress-ip-qualifiers { + description + "limit port ip v4/v6 acls to 5-tuple qualifiers (source-address is always there by default)"; + + leaf destination-address { + type empty; + } + leaf protocol { + type empty; + } + leaf l4-ports { + type empty; + } + leaf range { + type empty; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-aft-types.yang b/vendor/arrcus/arcos/v521/arcos-aft-types.yang new file mode 100644 index 000000000..2d4ed7887 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-aft-types.yang @@ -0,0 +1,32 @@ +module arcos-aft-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/aft/types"; + prefix arc-aft-types; + + typedef dpal-nexthop-type { + type enumeration { + enum GLEAN { + value 1; + } + enum DROP { + value 2; + } + enum LOCAL { + value 3; + } + enum CONNECTED { + value 4; + } + enum MPLS_CONNECTED { + value 5; + } + enum PUNT_TO_CPU { + value 6; + } + enum VXLAN { + value 7; + } + } + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-aft.yang b/vendor/arrcus/arcos/v521/arcos-aft.yang new file mode 100644 index 000000000..9c97831e1 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-aft.yang @@ -0,0 +1,114 @@ +module arcos-aft { + + yang-version "1.1"; + + // namespace + namespace "http://yang.arrcus.com/arcos/aft"; + + prefix "arc-aft"; + + // import some basic types + import ietf-inet-types { prefix "inet"; } + + import arcos-aft-types { prefix "arc-aft-types"; } + import arcos-srv6-types { prefix "arc-srv6-types"; } + + organization "Arrcus, Inc"; + + contact + "Email: eng@arrcus.com"; + + description + "This module lists the aft related information"; + + revision "2020-02-22" { + description + "Initial version"; + } + + grouping aft-srv6-sids { + description + "SRv6 SID Information"; + + container srv6-sids { + description + "SRv6 SID Information"; + + list srv6-sid { + config false; + key "local-sid"; + + description + "List of SRv6 SID"; + + leaf local-sid { + type leafref { + path "../state/local-sid"; + } + description + "reference to the local-sid"; + } + + container state { + description + "Operational Data for SRv6 SID"; + + uses aft-srv6-sid-state; + } + } + } + } + + grouping aft-srv6-sid-state { + description + "SRv6 SID Info"; + + leaf local-sid { + description + "SRv6 Local SID"; + type inet:ipv6-prefix; + } + + leaf sid-type { + description + "SRv6 SID Type"; + type arc-srv6-types:srv6-sid-type; + } + + leaf function { + description + "SRv6 Function"; + type arc-srv6-types:srv6-endpoint-behavior-type; + } + + leaf nh-id { + description + "NH ID for End.DX/End.X"; + type uint32; + } + + leaf sid-vrf-id { + description + "HW VRF ID for End.DT/uDT"; + type uint32; + } + + leaf flags { + description + "SID specific flag"; + type uint32; + } + + leaf tunnel-terminator-id { + description + "SRv6 tunnel terminator HW ID"; + type uint32; + } + + leaf tunnel-terminator-priority { + description + "SRv6 tunnel terminator TCAM entry priority"; + type uint32; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-arp-nd-global.yang b/vendor/arrcus/arcos/v521/arcos-arp-nd-global.yang new file mode 100644 index 000000000..b34aef891 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-arp-nd-global.yang @@ -0,0 +1,17 @@ +module arcos-arp-nd-global { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/ip-neighbor"; + prefix arc-ip-nbr; + + container ip-neighbor { + description + "Global ARP and ND neighbor configuration"; + + leaf persistence { + type uint8 { + range "5..255"; + } + description "neighbor persistence sampling time in sec"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-bgp-auto-peer-group.yang b/vendor/arrcus/arcos/v521/arcos-bgp-auto-peer-group.yang new file mode 100644 index 000000000..3f48462d4 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-bgp-auto-peer-group.yang @@ -0,0 +1,300 @@ +module arcos-bgp-auto-peer-group { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/bgp/auto-peer-group"; + prefix arc-bgp-auto-peer-grp; + + import openconfig-types { + prefix oc-types; + } + + import ietf-inet-types { + prefix oc-inet; + } + + import arcos-bgp-types { + prefix arc-bgp-types; + } + + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + + import openconfig-interfaces { + prefix oc-if; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 408 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module defines Arrcus implemention + of the BGP auto-peer-group module. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-03-16 { + description + "Adding accumulative and periodic counters + for performance monitoring"; + } + + grouping auto-peer-group { + description + "Parameters related to a BGP group"; + leaf index { + type uint32; + description + "peer-group index"; + } + + leaf session-type { + type string; + description + "peer-group type"; + } + + leaf name { + type string; + description + "Name of the BGP peer-group"; + } + + leaf neighbor-count { + type uint32; + description + "Number of neighbors in peer-group"; + } + + leaf in-use { + type boolean; + description + "peer-group in use"; + } + + leaf route-reflector-client { + type boolean; + description + "peer-group is RR client"; + } + + leaf route-server-client { + type boolean; + description + "peer-group is route server client"; + } + + leaf as-type { + type arc-bgp-types:bgp-as-type; + description + "peer-group AS type."; + } + leaf local-as { + type oc-inet:as-number; + description + "peer-group local AS number"; + } + leaf add-paths { + type boolean; + description + "peer-group add-paths support."; + } + leaf add-paths-send { + type identityref { + base "arc-oc-bgp-types:ADD_PATHS_OPTIONS"; + } + description + "peer-group add-paths send option."; + } + leaf remove-private-as { + type boolean; + description + "peer-group remove-private-as support."; + } + leaf replace-private-as { + type boolean; + description + "peer-group replace-private-as support."; + } + leaf aigp { + type boolean; + description + "peer-group AIGP metric support."; + } + leaf graceful-shutdown-enable { + type boolean; + description + "peer-group graceful-shutdown enable support."; + } + leaf graceful-shutdown-local-preference { + type boolean; + description + "peer-group graceful-shutdown local preference support."; + } + leaf graceful-shutdown-med { + type boolean; + description + "peer-group graceful-shutdown MED support."; + } + leaf send-tracker-sid { + type boolean; + description + "The peer is designated for sending tracker-sid."; + } + leaf slow-peer { + type boolean; + description + "The peer is designated as slow peer."; + } + leaf version { + type uint32; + description + "peer-group version."; + } + leaf nlri-sent { + type uint32; + description + "peer-group prefix sent count."; + } + leaf unreach-nlri-sent { + type uint32; + description + "peer-group unreachable prefix sent count."; + } + leaf labels-sent { + type uint32; + description + "peer-group labels sent count."; + } + leaf export-policy { + type string; + description + "peer-group export policy."; + } + leaf-list neighbors { + type union { + type oc-inet:ip-address; + // type leafref { + // path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + // } + } + description + "Neighbors in this peer-group"; + } + leaf updates-sent { + type uint32; + description + "Total number of update messages sent."; + } + leaf pending-updates { + type uint32; + description + "Total number of outstanding update messages."; + } + leaf update-delays { + type uint32; + description + "Total number of delays due to too many outstanding updates."; + } + leaf extended-nexthop-encoding-capability { + type arc-bgp-types:bgp-capability-state; + description + "Extended Next Hop Encoding Capability state"; + } + leaf neighbor-type { + type identityref { + base "oc-types:ADDRESS_FAMILY"; + } + description + "Neighbor type i.e IPV4 or IPV6"; + } + leaf next-hop-type { + type arc-bgp-types:bgp-next-hop-type; + description + "peer-group next-hop type i.e SELF or UNCHANGED."; + } + + uses pg-stats-counters-group; + } + + grouping pg-stats-counters-group { + container accu-stats-counters { + description + "Accumulative stats counters for this peer-group."; + uses pg-stats-counters; + } + container peri-stats-counters { + description + "Periodic stats counters (reset every 30s) for this peer-group."; + uses pg-stats-counters; + } + } + + grouping pg-stats-counters { + leaf update-triggers { + type uint64; + description + "Number of update triggers."; + } + leaf update-runs { + type uint64; + description + "Number of update runs."; + } + leaf update-paths-processed { + type uint64; + description + "Number of update paths processed."; + } + leaf update-paths-sent { + type uint64; + description + "Number of update paths sent."; + } + leaf update-paths-wdn { + type uint64; + description + "Number of update paths withdrawn."; + } + leaf update-paths-skipped { + type uint64; + description + "Number of update paths skipped."; + } + leaf update-paths-deleted { + type uint64; + description + "Number of update paths deleted."; + } + leaf update-paths-relabeled { + type uint64; + description + "Number of update paths relabeled."; + } + } + + grouping bgp-auto-peer-group-list { + description + "The list of BGP peer groups"; + + container auto-peer-groups { + config false; + list auto-peer-group { + key "index session-type"; + description + "List of BGP peer-groups configured on the local system - + uniquely identified by peer-group name"; + + uses auto-peer-group; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-bgp-debug.yang b/vendor/arrcus/arcos/v521/arcos-bgp-debug.yang new file mode 100644 index 000000000..c601650ae --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-bgp-debug.yang @@ -0,0 +1,241 @@ +module arcos-bgp-debug { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/bgp/debug"; + prefix arc-bgp-dbg; + + import ietf-inet-types { + prefix oc-inet; + } + + import openconfig-interfaces { + prefix oc-if; + } + + typedef bgp-debug-state { + type enumeration { + enum off { + description + "Disable debug"; + } + enum on { + description + "Enable debug"; + } + } + } + + typedef bgp-debug-type { + type enumeration { + enum fsm { + description + "BGP FSM debugs"; + } + enum events { + description + "BGP Events debugs"; + } + enum updates { + description + "BGP Updates debugs"; + } + enum updates-in { + description + "BGP Updates In debugs"; + } + enum updates-out { + description + "BGP Updates Out debugs"; + } + enum prefix { + description + "BGP Prefix debugs"; + } + enum keepalives { + description + "BGP Keepalives debugs"; + } + enum rpol { + description + "BGP RPOL debugs"; + } + enum packets { + description + "BGP packets debugs"; + } + enum neighbors { + description + "BGP neighbors debugs"; + } + enum rib { + description + "BGP rib debugs"; + } + enum cleanup { + description + "BGP cleanup debugs"; + } + enum rtr { + description + "BGP rtr debugs"; + } + enum erpl { + description + "BGP eRPL debugs"; + } + enum erpl-lib { + description + "eRPL client library debugs"; + } + enum route-import { + description + "BGP route import debugs"; + } + enum route-export { + description + "BGP route export debugs"; + } + enum label { + description + "BGP label debugs"; + } + enum commands { + description + "BGP commands debugs"; + } + enum ha { + description + "BGP HA debugs"; + } + enum netlink { + description + "BGP netlink debugs"; + } + enum tunnel { + description + "BGP tunnel debugs"; + } + enum container-lib { + description + "BGP container library debugs"; + } + enum attrs { + description + "BGP attributes debugs"; + } + enum protection-trackers { + description + "BGP Protection tracker debugs"; + } + enum pfcp { + description + "BGP pfcp debugs"; + } + enum all { + description + "BGP All debugs"; + } + } + } + + container bgp-debug { + description + "BGP debug control"; + + action protocol { + input { + leaf debug { + type bgp-debug-type; + mandatory true; + description + "Debug to be controlled"; + } + + leaf op { + type bgp-debug-state; + mandatory true; + description + "Turn on/off operation"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + + action neighbor { + input { + leaf address { + type union { + type oc-inet:ip-address; + // type leafref { + // path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + // } + } + description + "Address of the BGP peer, either in IPv4 or IPv6, or un-numbered interface name"; + } + + leaf op { + type bgp-debug-state; + mandatory true; + description + "Turn on/off operation"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + } + + grouping bgp-debugs-state { + description + "BGP debugs information"; + + leaf debug-flag { + type bgp-debug-type; + description + "BGP Debug flags such as events, updates, fsm etc"; + } + + leaf enabled { + type boolean; + description + "Indicates whether the debug flag is enabled or not"; + } + } + + grouping bgp-show-debug-top { + container bgp-show-debugs { + description + "BGP show debugs information"; + + list bgp-debug { + key "debug-flag"; + + description + "BGP debugs information"; + + leaf debug-flag { + type leafref { + path "../state/debug-flag"; + } + description + "BGP Debug flags such as events, updates, fsm etc"; + } + + container state { + uses bgp-debugs-state; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-bgp-rnh.yang b/vendor/arrcus/arcos/v521/arcos-bgp-rnh.yang new file mode 100644 index 000000000..74aeb43aa --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-bgp-rnh.yang @@ -0,0 +1,125 @@ +module arcos-bgp-rnh { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/bgp/rnh"; + prefix arc-bgp-rnh; + + import ietf-inet-types { + prefix inet; + } + + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + + grouping rnh { + description + "Parameters related to a BGP group"; + leaf rnh-addr { + type inet:ip-prefix; + description + "The next-hop that is tracked"; + } + leaf interface-name { + type string; + description + "The interface of the next-hop"; + } + leaf rnh-type { + type string; + description + "The next-hop type"; + } + leaf path-count { + type uint32; + description + "The path count"; + } + leaf neighbor-count { + type uint32; + description + "The neighbor count"; + } + leaf total-reference-count { + type uint32; + description + "The total reference count"; + } + leaf metric { + type uint32; + description + "metric of IGP route"; + } + leaf per-nexthop-label { + type uint32; + description + "Per-nexthop label if allocated"; + } + leaf per-nexthop-sid { + type inet:ipv6-address; + description + "Per-nexthop segment ID if allocated"; + } + leaf local-next-hop { + type boolean; + description + "local nexthop"; + } + leaf interface-status { + type boolean; + description + "interface status"; + } + leaf link-local { + type boolean; + description + "link-local"; + } + leaf rfc5549-nexthop { + type boolean; + description + "rfc5549 nexthop"; + } + leaf stale-nexthop { + type boolean; + description + "The nexthop is stale due to RIB restart"; + } + leaf mpls-reachability { + type boolean; + description + "The nexthop is reachable via a labeled path"; + } + leaf srv6-nexthop { + type boolean; + description + "The nexthop represents remote SRv6 SID"; + } + leaf srv6-oam-state { + type identityref { + base arc-oc-bgp-types:SRV6_OAM_STATES; + } + description + "For SRv6 next-hop only: health state as reported by OAM"; + } + leaf srv6-oam-profile { + type string; + description + "For SRv6 next-hop only: profile used in OAM tracking"; + } + } + + grouping bgp-rnh-list { + description + "The list of BGP next hops"; + + container rnhs { + config false; + list rnh { + key "rnh-addr interface-name"; + description + "List of BGP next-hops tracked with RIB"; + uses rnh; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-bgp-types.yang b/vendor/arrcus/arcos/v521/arcos-bgp-types.yang new file mode 100644 index 000000000..af1e2c15f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-bgp-types.yang @@ -0,0 +1,169 @@ +module arcos-bgp-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/bgp/types"; + prefix arc-bgp-types; + + import ietf-inet-types { + prefix inet; + } + + import openconfig-interfaces { + prefix oc-if; + } + + organization + "Arrcus, Inc."; + + contact + "Email: yang-support@arrcus.com"; + + description + "ArcOS BGP Types Data Model"; + + revision 2019-08-20 { + description "ArcOS 3.3.1"; + } + + typedef bgp-route-refresh-type { + type enumeration { + enum in { + description + "BGP neighbor inbound route refresh"; + } + enum out { + description + "BGP neighbor outbound route refresh"; + } + } + } + + typedef bgp-next-hop-type { + type union { + type enumeration { + enum SELF { + description + "Special designation for local router's own address, + i.e next-hop-self"; + } + enum UNCHANGED { + description + "Special designation to not change the next-hop when + advertising to the remote-peer i.e next-hop-unchanged"; + } + } + } + description + "Type definition for specifying next-hop"; + } + + typedef bgp-capability-state { + type enumeration { + enum UNNEGOTIABLE { + description + "Capability sent but not received OR not sent but received"; + } + enum NEGOTIATED { + description + "Capability sent and received"; + } + } + } + + typedef srv6-tunnel-endpoint-type { + type enumeration { + enum INGRESS { + description + "SRv6 ingress tunnel endpoint"; + } + enum EGRESS { + description + "SRv6 egress tunnel endpoint"; + } + enum NONE { + description + "Neither an SRv6 ingress nor egress tunnel endpoint"; + } + } + } + + typedef bgp-as-type { + type enumeration { + enum ASN16 { + description + "2-byte (16-bit) AS number"; + } + enum ASN32 { + description + "4-byte (32-bit) AS number"; + } + } + } + + typedef bgp-interface-state { + type enumeration { + enum UP { + value 1; + description + "Ready to pass packets."; + } + enum DOWN { + value 2; + description + "The interface does not pass any packets."; + } + } + } + + typedef bgp-rib-origin-type { + type union { + type inet:ip-address-no-zone; + // type leafref { + // path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + // } + } + description + "The origin type represents either a no zone IP address, + or an interface name"; + } + + grouping bgp-adj-rib-attr-state { + description + "Path attributes that are not expected to be shared across + route entries, specific to Adj-RIB"; + + leaf path-id { + type uint64; + description + "When the BGP speaker supports advertisement of multiple + paths for a prefix, the path identifier is used to + uniquely identify a route based on the combination of the + prefix and path id."; + } + } + + grouping bgp-loc-rib-common-keys { + description + "Common references used in keys for IPv4 and IPv6 + LOC-RIB entries"; + + leaf origin { + type union { + type inet:ip-address; + // type leafref { + // path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + // } + } + description + "Indicates the origin of the route."; + } + + leaf path-id { + type uint64; + description + "When the BGP speaker supports advertisement of multiple + paths for a prefix, the path identifier is used to + uniquely identify a route based on the combination of the + prefix and path id."; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-bgp.yang b/vendor/arrcus/arcos/v521/arcos-bgp.yang new file mode 100644 index 000000000..706c25087 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-bgp.yang @@ -0,0 +1,182 @@ +module arcos-bgp { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/bgp"; + prefix arc-bgp; + + import arcos-common-types { + prefix arc-common-types; + } + + import arcos-bgp-types { + prefix arc-bgp-types; + } + + import openconfig-bgp-types { + prefix oc-bgp-types; + } + + import openconfig-network-instance { + prefix oc-ni; + } + + import ietf-inet-types { + prefix oc-inet; + } + + import openconfig-interfaces { + prefix oc-if; + } + + organization + "Arrcus, Inc."; + + contact + "Email: yang-support@arrcus.com"; + + description + "ArcOS BGP Data Model"; + + revision 2019-08-20 { + description "ArcOS 3.3.1"; + } + + + grouping network-instance-options { + leaf network-instance { + description + "ALL network-instances or the name or one network-instance"; + type union { + type enumeration { + enum ALL { + description + "All network-instances"; + } + } + // type leafref { + // path "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:name"; + // } + } + } + } + + grouping clear-bgp-options { + leaf soft { + type arc-bgp-types:bgp-route-refresh-type; + description + "BGP soft reset (route refresh)"; + } + + uses network-instance-options; + } + + rpc clear-bgp-neighbor { + description + "Clear one or all BGP neighbor sessions from one or all + network-instances. The clear command can be either hard + reset or route refresh"; + + input { + leaf address { + mandatory true; + description + "ALL BGP neighbors or the address of one BGP neighbor, + either in IPv4 or IPv6"; + type union { + type enumeration { + enum ALL { + description + "All BGP neighbors"; + } + } + type oc-inet:ip-address; + // type leafref { + // path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + // } + } + } + + uses clear-bgp-options; + } + + output { + uses arc-common-types:generic-rpc-response; + } + } + + rpc clear-bgp-afi-safi { + description + "Clear all BGP neighbor sessions with a particular AFI/SAFI in + one or all network-instances. The clear command can be either + hard reset or route refresh"; + + input { + leaf afi-safi-name { + type identityref { + base oc-bgp-types:AFI_SAFI_TYPE; + } + mandatory true; + description + "BGP AFI/SAFI name"; + } + + uses clear-bgp-options; + } + + output { + uses arc-common-types:generic-rpc-response; + } + } + + rpc clear-bgp-peer-group { + description + "Clear all BGP neighbor sessions in a peer-group. The clear command + can be either hard reset or route refresh"; + + input { + leaf peer-group-name { + type string; + mandatory true; + description + "Name of the peer-group"; + } + + uses clear-bgp-options; + } + + output { + uses arc-common-types:generic-rpc-response; + } + } + + rpc clear-bgp-timestamps { + description + "Clear BGP convergence timestamps for one or all network-instances"; + + input { + uses network-instance-options; + } + + output { + uses arc-common-types:generic-rpc-response; + } + } + + rpc request-erpl-server-connection { + description + "Request BGP to re-initiate connection to eRPL server"; + + output { + uses arc-common-types:generic-rpc-response; + } + } + + rpc request-bgp-malloc-trim { + description + "Invoke malloc_trim library function to release memory that + has already been freed"; + + output { + uses arc-common-types:generic-rpc-response; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-bridge-isolation-clear.yang b/vendor/arrcus/arcos/v521/arcos-bridge-isolation-clear.yang new file mode 100644 index 000000000..4a69db4f5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-bridge-isolation-clear.yang @@ -0,0 +1,37 @@ +module arcos-bridge-isolation-clear { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/bridge-isolation/clear"; + + prefix arc-brdg-isltn-clr; + + import openconfig-interfaces { + prefix oc-if; + } + + container bridge-isolation { + description + "Clear Interface Bridge Isolation drop statistics"; + + action counters { + description + "Clear bridge isolation drop counters for a specific interface"; + input { + leaf name { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + } + mandatory true; + description + "Interface name"; + } + } + output { + leaf result { + type string; + description + "The status of the clear operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-bridge-isolation.yang b/vendor/arrcus/arcos/v521/arcos-bridge-isolation.yang new file mode 100644 index 000000000..cc6f05da8 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-bridge-isolation.yang @@ -0,0 +1,62 @@ +module arcos-bridge-isolation { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/bridge-isolation"; + prefix arc-brdg-isltn; + + import iana-if-type { + prefix ianaift; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + + grouping bridge-isolation-top { + description + "Top-level grouping for layer 2 port bridge isolation feature"; + + container bridge-isolation { + description + "Bridge isolation feature for a layer 2 switch port"; + leaf isolation { + description + "Enable/Disable bridge isolation feature on a layer 2 switch port"; + type enumeration { + enum enable { + description + "Enable bridge isolation feature on a layer 2 switch port"; + } + enum disable { + description + "Disable bridge isolation feature on a layer 2 switch port"; + } + } + } + container state { + config false; + leaf isolation-drop-packets { + type oc-yang:counter64; + description + "egress packet drop count because of bridge isolation"; + } + leaf isolation-drop-octets { + type oc-yang:counter64; + description + "egress octet drop count because of bridge isolation"; + } + } + } + } + + augment "/oc-if:interfaces/oc-if:interface" { + uses bridge-isolation-top { + when "(current()/oc-if:name != 'ma1' and " + + "(current()/oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd'))"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-bridge.yang b/vendor/arrcus/arcos/v521/arcos-bridge.yang new file mode 100644 index 000000000..6baa25a8a --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-bridge.yang @@ -0,0 +1,102 @@ +module arcos-bridge { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/bridge"; + prefix arc-brdg; + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-vlan { + prefix oc-vlan; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS bridge domain. + + Copyright (c) 2016-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-09 { + description + "Support L2 sub-interface zero under 'interface' leaf for clear " + + "mac-address-table command"; + } + + revision 2023-01-06 { + description + "Move L2 subinterfaces under 'interface' leaf for clear " + + "mac-address-table command"; + } + + revision 2022-11-17 { + description + "Add L2 subinterface option to clear mac-address-table command"; + } + + rpc clear-mac-address-table { + description + "Request to flush the dynamically learned MAC addresses for a + specified VLAN and interface"; + + input { + /** + * VLAN ID can be entered as the first parameter, or if the given intf + * is a base intf name + */ + leaf vlan { + when 'not(../interface) or (/oc-if:interfaces' + + '/oc-if:interface[oc-if:name=current()/../interface] and ' + + 'count(/oc-if:interfaces/oc-if:interface[oc-if:name=current()/../interface]' + + '/oc-if:subinterfaces/oc-if:subinterface) < 1)'; + mandatory true; + type leafref { + path "/oc-vlan:vlans/oc-vlan:vlan/oc-vlan:config/oc-vlan:vlan-id"; + } + description + "VLAN ID of the MAC address table to clear"; + } + + /** + * Interface name must be 1 of two things: + * 1. A base L2 intf (exist in top level intf names with no subinterfaces) + * 2. A subinterface name with no VLAN ID parameter entered + */ + leaf interface { + type union { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + } + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-if:config/oc-if:name"; + } + } + must "(. = /oc-if:interfaces/oc-if:interface/oc-if:name and " + + "count(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]" + + "/oc-if:subinterfaces/oc-if:subinterface) = 0) or " + + "(. = /oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-if:config/oc-if:name and not(../vlan)) or " + + "(/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-if:config/oc-if:index = 0 and not(../vlan))" { + error-message "Interface must be a valid base interface or a layer-2 subinterface"; + } + description + "Interface name to clear the MAC addresses from"; + } + } + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-chassis.yang b/vendor/arrcus/arcos/v521/arcos-chassis.yang new file mode 100644 index 000000000..55ff8ac71 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-chassis.yang @@ -0,0 +1,306 @@ +module arcos-chassis { + namespace "http://yang.arrcus.com/arcos/chassis"; + + prefix "arc-chassis"; + + import arcos-platform { prefix arc-platform; } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "YANG data-model for Chassis details."; + + revision 2019-10-16 { + description "ArcOS release "; + } + + identity ARCOS_PLATFORM_TYPE { + description + "Base type for ARCOS platform"; + } + + identity COMPUTE_SERVER { + base ARCOS_PLATFORM_TYPE; + description + "Compute Server"; + } + identity X86_64_ACCTON_AS7926_40XKE_R0 { + base ARCOS_PLATFORM_TYPE; + description + "Accton sysid x86-64-accton-as7926-40xke-r0"; + } + identity X86_64_ACCTON_AS7926_40XKE_R0A { + base ARCOS_PLATFORM_TYPE; + description + "Accton sysid x86-64-accton-as7926-40xke-r0a"; + } + identity X86_64_ACCTON_AS7926_80XK_R0 { + base ARCOS_PLATFORM_TYPE; + description + "Accton sysid x86-64-accton-as7926-80xk-r0"; + } + identity VIRTUAL_CPS { + base ARCOS_PLATFORM_TYPE; + description + "Virtual Emulation of CPS"; + } + identity X86_64_ACCTON_AS9926_24D_R0 { + base ARCOS_PLATFORM_TYPE; + description + "Delta sysid x86-64-accton-as9926-24d-r0"; + } + identity X86_64_UFISPACE_S9705_48D_R7 { + base ARCOS_PLATFORM_TYPE; + description + "Ufispace sysid x86-64-ufispace-s9705-48d-r7"; + } + identity X86_64_UFISPACE_S9700_53DX_R9 { + base ARCOS_PLATFORM_TYPE; + description + "Ufispace sysid x86-64-ufispace-s9700-53dx-r9"; + } + identity X86_64_UFISPACE_S9710_76D_R0 { + base ARCOS_PLATFORM_TYPE; + description + "Ufispace sysid x86-64-ufispace-s9710-76d-r0"; + } + identity X86_64_CEL_REDSTONE_XP_R0 { + base ARCOS_PLATFORM_TYPE; + description + "Celestica sysid x86-64-cel-redstone-xp-r0"; + } + identity X86_64_QUANTA_IX8A_DNV_R0 { + base ARCOS_PLATFORM_TYPE; + description + "Quanta sysid x86-64-quanta-ix8a-dnv-r0"; + } + identity VIRTUAL_LC { + base ARCOS_PLATFORM_TYPE; + description + "VM emulation of LC"; + } + identity VIRTUAL_FC { + base ARCOS_PLATFORM_TYPE; + description + "VM emulation of FC"; + } + + identity STANDALONE_LC { + base ARCOS_PLATFORM_TYPE; + description + "Standalone line card platform"; + } + + identity ARCOS_NODE_TYPE { + description + "Base type for ARCOS node type"; + } + + identity LINE_CARD { + base ARCOS_NODE_TYPE; + description + "Linecard Id"; + } + identity FABRIC_CARD { + base ARCOS_NODE_TYPE; + description + "Fabric card"; + } + identity COMPUTE_CARD { + base ARCOS_NODE_TYPE; + description + "Compute card"; + } + identity CONNECTOR_CARD { + base ARCOS_NODE_TYPE; + description + "Connector card"; + } + + grouping chassis-node-config { + description + "Top-level Chassis Node configuration parameters"; + + leaf id { + type string { + length "1..128"; + } + mandatory true; + description "Node identification"; + } + + leaf slot-id { + type uint32; + mandatory true; + description "Node's Slot Id"; + } + + leaf platform-type { + type identityref { + base ARCOS_PLATFORM_TYPE; + } + mandatory true; + description "Nodes for platform type."; + } + + leaf enabled { + type boolean; + default "true"; + description + "This leaf contains the configured, desired state of the node"; + } + } + + grouping chassis-node-config-top { + description + "Structural grouping for Chassis slot configuration and + operational state data."; + + container nodes { + description + "Top level container for chassis nodes, including configuration."; + list node { + key "id"; + + description + "The list of named nodes on the chassis."; + + leaf id { + type leafref { + path "../config/id"; + } + description + "References the configured id of the node"; + + } + container config { + description + "Configurable items at the chassis node level"; + uses chassis-node-config; + + } + } + } + } + + grouping chassis-node-state { + description + "Top-level Chassis Node configuration parameters"; + + leaf id { + type string; + mandatory true; + description "Node Id"; + } + + leaf node-type { + type identityref { + base ARCOS_NODE_TYPE; + } + description "Node type"; + } + + leaf platform-type { + type identityref { + base ARCOS_PLATFORM_TYPE; + } + description "Slots platform type"; + } + + leaf slot-id { + type uint32; + description "Node's slot identification"; + } + + leaf admin-status { + type enumeration { + enum UP { + description + "Ready to participate in chassis."; + } + enum DOWN { + description + "Not ready to participate in chassis."; + } + } + description + "This leaf contains the desired state of the slot"; + } + + leaf oper-status { + type enumeration { + enum UP { + description + "Node is up and part of the chassis."; + } + enum DOWN { + description + "Node is down."; + } + enum UNCLAIMED { + description + "Node is not part of the chassis."; + } + } + description + "This leaf contains the present state of the slot"; + } + } + + grouping chassis-node-state-top { + container nodes { + config false; + description + "Top level container for chassis slots, including configuration + and state data."; + list node { + key "id"; + + description + "The list of named nodes on the chassis."; + + leaf id { + type leafref { + path "../state/id"; + } + description + "References the id of the node"; + } + + container state { + description + "Operational state data at the chassis node level."; + + uses chassis-node-state; + } + } + } + } + + grouping chassis-top { + description + "Structural grouping for Chassis configuration and + operational state data."; + container chassis { + description + "Top level container for chassis, including configuration + and state data."; + container config { + uses chassis-node-config-top; + } + container state { + when "/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED'"; + config false; + uses chassis-node-state-top; + } + } + } + + uses chassis-top { + description "Chassis slot configuration"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-classifier-filter-types.yang b/vendor/arrcus/arcos/v521/arcos-classifier-filter-types.yang new file mode 100644 index 000000000..8baf3c664 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-classifier-filter-types.yang @@ -0,0 +1,97 @@ +module arcos-classifier-filter-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/classifier/filter/types"; + prefix arc-cfr-fltr-types; + + identity LOGICAL_OPERATION_TYPE { + description + "Across the filter logical operation types: match-any, match-all"; + } + + identity MATCH_ANY_FILTER { + base LOGICAL_OPERATION_TYPE; + description + "Logical OR operation across filters in a given classifier"; + } + + identity MATCH_ALL_FILTER { + base LOGICAL_OPERATION_TYPE; + description + "Logical AND operation across filters in a given classifier"; + } + + identity FILTER_TYPE { + description + "This is an identity of base filter-type"; + } + + identity COS { + base FILTER_TYPE; + description + "Layer-2 802.1p Class of Service filter-type"; + } + + identity DSCP { + base FILTER_TYPE; + description + "Layer-3 IP Differentiated Service filter-type"; + } + + identity LOCAL_TC { + base FILTER_TYPE; + description + "Local Priority Traffic Class filter-type"; + } + + identity MPLS_TC { + base FILTER_TYPE; + description + "MPLS Traffic Class code-point filter-type"; + } + + identity ACL { + base FILTER_TYPE; + description + "Access Control List filter-type"; + } + + identity EXCEPTION { + base FILTER_TYPE; + description + "A filter-type that captures certain exceptions"; + } + + identity EXCEPTION_TYPE { + description + "This is an identity of base exception-type"; + } + + identity L3DESTMISS { + base EXCEPTION_TYPE; + description "An exception-type that captures packets that fail " + + "ip destination lookup in forwarding"; + } + + identity SELFIP { + base EXCEPTION_TYPE; + description "An exception-type that captures packets that match " + + "router address"; + } + + identity GLEAN { + base EXCEPTION_TYPE; + description "An exception-type that captures packets which does " + + "not have dest mac resolved"; + } + + identity ARP { + base EXCEPTION_TYPE; + description "An exception-type that captures special ARP packets"; + } + + identity MIRROR { + base EXCEPTION_TYPE; + description "An exception-type that captures packets which are " + + "mirror or sflow sampled packets"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-classifier-filter.yang b/vendor/arrcus/arcos/v521/arcos-classifier-filter.yang new file mode 100644 index 000000000..269fa5c40 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-classifier-filter.yang @@ -0,0 +1,155 @@ +module arcos-classifier-filter { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/classifier/filter"; + prefix arc-cfr-fltr; + + import arcos-classifier-filter-types { + prefix arc-cfr-fltr-types; + } + import openconfig-acl { + prefix oc-acl; + } + import ietf-inet-types { + prefix inet; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for classifier filters"; + + /* + * cos filter type + * + * Here we define cos parameters but do not directly use inside filter + * We will let app specific data-model decide which filter types to be + * included for app specific classifier container + */ + + grouping cos-top { + description + "Grouping for Layer-2 802.1p Class Of Service values"; + leaf-list cos-value { + type uint8 { + range "0..7"; + } + description + "List of Layer-2 802.1p Class Of Service values"; + } + } + + /* + * dscp filter type + * + * Here we define dscp parameters but do not directly use inside filter + * We will let app specific data-model decide which filter types to be + * included for app specific classifier container + */ + + grouping dscp-top { + description + "Grouping for Layer-3 IP DiffServ Code-Point values"; + leaf-list dscp-value { + type inet:dscp; + description + "List of Layer-3 IP DiffServ Code-Points"; + } + } + + /* + * local-tc filter type + * + * Here we define local-tc parameters but do not directly use inside filter + * We will let app specific data-model decide which filter types to be + * included for app specific classifier container + */ + + grouping local-tc-top { + description + "Grouping for local priority Traffic Class values"; + leaf-list local-tc-value { + type uint8 { + range "0..7"; + } + description + "List of local priority Traffic Classes"; + } + } + + /* + * mpls-tc filter type + * + * Here we define mpls-tc parameters but do not directly use inside filter + * We will let app specific data-model decide which filter types to be + * included for app specific classifier container + */ + + grouping mpls-tc-top { + description + "Grouping for MPLS Traffic Class values"; + leaf-list mpls-tc-value { + type uint8 { + range "0..7"; + } + description + "List of MPLS Traffic Class values"; + } + } + + /* + * acl filter type + * + * Here we just define this filter type but do not directly use in filter + * We will let app specific data-model decide which filter types to be + * included for app specific classifier container + */ + + grouping acl-top { + description + "Grouping for ACL reference"; + leaf acl-type { + type identityref { + base oc-acl:ACL_TYPE; + } + description + "family type of an ACL"; + } + + leaf acl-name { + mandatory true; + type leafref { + path "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set[oc-acl:type=current()/../acl-type]/oc-acl:config/oc-acl:name"; + } + description + "Reference to ACL name"; + } + } + + /* + * exception filter type + * + * Here we just define this filter type but do not directly use in filter + * We will let app specific data-model decide which filter types to be + * included for app specific classifier container + */ + + grouping exception-top { + description + "Grouping for Exception filter types"; + leaf exception-type { + type identityref { + base arc-cfr-fltr-types:EXCEPTION_TYPE; + } + mandatory true; + description + "Special type of packets punted to CPU"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-classifier.yang b/vendor/arrcus/arcos/v521/arcos-classifier.yang new file mode 100644 index 000000000..96f7997a2 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-classifier.yang @@ -0,0 +1,140 @@ +module arcos-classifier { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/classifier"; + prefix arc-cfr; + + import arcos-classifier-filter-types { + prefix arc-cfr-fltr-types; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for generic classifier definitions. + This is a base data model for classifier that different + apps can make use of. This base data model itself does + not expose container for classifier(For an example look + at arrcus-qos-classifier.yang)"; + + identity logical-operation-type { + description + "Across the filter logical operation types: match-any, match-all"; + } + + identity match-any-filter { + base logical-operation-type; + description + "Logical OR operation across filters in a given classifier"; + } + + identity match-all-filter { + base logical-operation-type; + description + "Logical AND operation across filters in a given classifier"; + } + + grouping filter-attributes { + description + "Filter attributes like filter type"; + leaf type { + type identityref { + base arc-cfr-fltr-types:FILTER_TYPE; + } + description + "This leaf defines type of a filter"; + } + } + + grouping filters-top { + description + "Grouping for a filter definition. A filter holds a filter specific attributes"; + container filters { + description + "Container for filter data-base in a specific classifier"; + list filter { + key "type"; + description + "List of filters in a specific classifier. Each filter is + defined by the grouping filter-attributes"; + leaf type { + type leafref { + path "../config/type"; + } + description + "unique type identifying filter"; + } + container config { + description + "Configuration parameters relating to filter"; + uses filter-attributes; + } + container state { + config false; + description + "Operational state parameters relating to filter"; + uses filter-attributes; + } + } + } + } + + grouping classifier-attributes { + description + "Grouping for classifier attributes like name, description, logical operation"; + leaf name { + type string { + length "1..79"; + } + description + "Name of a Classifier entry in a list of Classifiers"; + } + leaf description { + type string { + length "1..254"; + } + description + "Description of a Classifier entry in a list of Classifiers"; + } + } + + grouping classifiers-top { + description + "Grouping for generic definition of Classifiers"; + container classifiers { + description + "Container for classifier data-base"; + list classifier { + key "name"; + ordered-by user; + description + "A specific classifier in the classifier data-base"; + leaf name { + type leafref { + path "../config/name"; + } + description + "unique name identifying classifier "; + } + container config { + description + "Configuration parameters relating to classifier"; + uses classifier-attributes; + } + container state { + config false; + description + "Operational state parameters relating to classifier"; + uses classifier-attributes; + } + uses filters-top; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-common-types.yang b/vendor/arrcus/arcos/v521/arcos-common-types.yang new file mode 100644 index 000000000..7cc18e513 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-common-types.yang @@ -0,0 +1,45 @@ +module arcos-common-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/common/types"; + prefix arc-common-types; + + organization + "Arrcus, Inc."; + + contact + "Email: yang-support@arrcus.com"; + + description + "ArcOS Common Types Data Model"; + + revision 2019-08-20 { + description "ArcOS 3.3.1"; + } + + typedef generic-status-code { + type enumeration { + enum SUCCESS { + description + "Operation Successful"; + } + enum FAILURE { + description + "Operation Failed"; + } + } + } + + + grouping generic-rpc-response { + leaf status { + type generic-status-code; + description + "Result of the operation"; + } + leaf message { + type string; + description + "Description of the result of the operation"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-confd-hafw.yang b/vendor/arrcus/arcos/v521/arcos-confd-hafw.yang new file mode 100644 index 000000000..7a79dc017 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-confd-hafw.yang @@ -0,0 +1,90 @@ +module arcos-confd-hafw { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/confd-hafw"; + prefix arc-confd-hafw; + + import arcos-runtime { + prefix arc-runtime; + } + import ietf-inet-types { + prefix inet; + } + + organization "Arrcus, Inc"; + + contact + "Email: eng@arrcus.com"; + + description + "This module lists the confd high availability framework related information. + Copyright 2016-2022 by Arrcus, Inc. All rights reserved."; + + revision "2022-02-16" { + description + "Initial version"; + } + + grouping election-state { + container election { + description + "Confd high availability election state."; + leaf prefix { + type string; + description + "Confd high availability election prefix."; + } + leaf leader { + type string; + description + "Confd high availability election leader node name."; + } + leaf local-role { + type enumeration { + enum ACTIVE { + description + "Confd high availability election role is active."; + } + enum STANDBY { + description + "Confd high availability election role is stand-by."; + } + enum UNKNOWN { + description + "Confd high availability election role is unknown."; + } + } + } + } + } + + grouping confd-hafw-state { + leaf node-id { + type string; + description + "Confd high availability framework local node id."; + } + leaf service-address { + type inet:ipv4-address-no-zone; + description + "Confd service address."; + } + } + + grouping confd-hafw-top { + container confd-hafw { + description + "Arrcus confd high availability framework internals."; + + config false; + container state { + uses confd-hafw-state; + uses election-state; + } + } + } + + augment "/arc-runtime:runtime-instances" + + "/arc-runtime:runtime-instance" { + uses confd-hafw-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-copp-classifier.yang b/vendor/arrcus/arcos/v521/arcos-copp-classifier.yang new file mode 100644 index 000000000..43332302f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-copp-classifier.yang @@ -0,0 +1,91 @@ +module arcos-copp-classifier { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/copp/classifier"; + prefix arc-copp-cfr; + + import arcos-classifier { + prefix arc-cfr; + } + import arcos-classifier-filter { + prefix arc-cfr-fltr; + } + import arcos-classifier-filter-types { + prefix arc-cfr-fltr-types; + } + import arcos-copp { + prefix arc-copp; + } + import openconfig-acl { + prefix oc-acl; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos classifier definitions. + Expanded from the generic classifier data model (classifier.yang)"; + + augment "/arc-copp:copp/classifiers/classifier/filters/filter/config" { + uses arc-cfr-fltr:exception-top { + when "../type = 'arc-cfr-fltr-types:EXCEPTION'"; + } + } + + augment "/arc-copp:copp/classifiers/classifier/filters/filter/config" { + uses arc-cfr-fltr:acl-top { + when "../type = 'arc-cfr-fltr-types:ACL'"; + } + } + + augment "/arc-copp:copp/classifiers/classifier/filters/filter/state" { + uses arc-cfr-fltr:exception-top; + } + + augment "/arc-copp:copp/classifiers/classifier/filters/filter/state" { + uses arc-cfr-fltr:acl-top; + } + + augment "/arc-copp:copp/system-defined/classifiers/classifier/filters/filter/state" { + uses arc-cfr-fltr:exception-top { + when "./type = 'arc-cfr-fltr-types:EXCEPTION'"; + } + } + + augment "/arc-copp:copp/system-defined/classifiers/classifier/filters/filter/state" { + uses arc-cfr-fltr:acl-top; + } + + grouping copp-classifier-top { + description + "Top-level container for COPP specific classifier database"; + uses arc-cfr:classifiers-top { + refine "classifiers/classifier/filters/filter" { + min-elements 1; + max-elements 1; + } + refine "classifiers/classifier/filters/filter/type" { + must "current() = 'arc-cfr-fltr-types:ACL' or " + + "current() = 'arc-cfr-fltr-types:EXCEPTION'" { + error-message "filter type not supported copp"; + } + } + } + container system-defined { + config false; + description + "Display system defined copp-classifiers.These classifiers can not be modified"; + uses arc-cfr:classifiers-top; + } + } + + augment "/arc-copp:copp" { + uses copp-classifier-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-copp-policy-deviations.yang b/vendor/arrcus/arcos/v521/arcos-copp-policy-deviations.yang new file mode 100644 index 000000000..209c4667e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-copp-policy-deviations.yang @@ -0,0 +1,169 @@ +module arcos-copp-policy-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/copp/policy/deviations"; + prefix arc-copp-pol-dev; + + import arcos-copp { + prefix arc-copp; + } + import arcos-copp-classifier { + prefix arc-copp-cfr; + } + import arcos-copp-policy { + prefix arc-copp-pol; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for copp policy validations + Expanded from the copp policy data model"; + + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:config/arc-copp-pol:peak" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:state/arc-copp-pol:peak" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:config/arc-copp-pol:exceed" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:state/arc-copp-pol:exceed" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:config" + + "/arc-copp-pol:committed/arc-copp-pol:rate/arc-copp-pol:unit" { + deviate not-supported; + description + "bps rate is not relevant to copp, deviate it out. + default unit is pps"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:state" + + "/arc-copp-pol:committed/arc-copp-pol:rate/arc-copp-pol:unit" { + deviate not-supported; + description + "bps rate is not relevant to copp, deviate it out. + default unit is pps"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:config" + + "/arc-copp-pol:committed/arc-copp-pol:burst/arc-copp-pol:unit" { + deviate not-supported; + description + "bytes burst is not relevant to copp, deviate it out. + default unit is packets"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:state" + + "/arc-copp-pol:committed/arc-copp-pol:burst/arc-copp-pol:unit" { + deviate not-supported; + description + "bytes burst is not relevant to copp, deviate it out. + default unit is packets"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:config" + + "/arc-copp-pol:conform" { + deviate not-supported; + description + "specifying conform action-type not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:state" + + "/arc-copp-pol:conform" { + deviate not-supported; + description + "specifying conform action-type not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:config" + + "/arc-copp-pol:exceed" { + deviate not-supported; + description + "specifying exceed action-type not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:state" + + "/arc-copp-pol:exceed" { + deviate not-supported; + description + "specifying exceed action-type not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:config" + + "/arc-copp-pol:violate" { + deviate not-supported; + description + "specifying violate action-type not supported in this release"; + } + + deviation "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy" + + "/arc-copp-pol:classifiers/arc-copp-pol:classifier" + + "/arc-copp-pol:actions/arc-copp-pol:action" + + "/arc-copp-pol:police/arc-copp-pol:state" + + "/arc-copp-pol:violate" { + deviate not-supported; + description + "specifying violate action-type not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-copp-policy.yang b/vendor/arrcus/arcos/v521/arcos-copp-policy.yang new file mode 100644 index 000000000..dc3e2c5f3 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-copp-policy.yang @@ -0,0 +1,119 @@ +module arcos-copp-policy { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/copp/policy"; + prefix arc-copp-pol; + + import arcos-policy { + prefix arc-pol; + } + import arcos-policy-action { + prefix arc-pol-actn; + } + import arcos-policy-action-types { + prefix arc-pol-actn-types; + } + import arcos-copp { + prefix arc-copp; + } + import arcos-copp-classifier { + prefix arc-copp-cfr; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for COPP policy definitions."; + + /* + * Following augment list is what copp policy container supports + */ + + augment "/arc-copp:copp/policies/policy/classifiers/classifier/actions" + + "/action" { + uses arc-pol-actn:mark-top { + when "./type = 'arc-pol-actn-types:MARK'"; + } + } + + augment "/arc-copp:copp/policies/policy/classifiers/classifier/actions" + + "/action/mark" { + uses arc-pol-actn:mark-config; + } + augment "/arc-copp:copp/policies/policy/classifiers/classifier/actions" + + "/action/mark" { + uses arc-pol-actn:mark-state; + } + + augment "/arc-copp:copp/policies/policy/classifiers/classifier/actions" + + "/action/mark/config" { + uses arc-pol-actn:mark-local-tc-top; + } + + augment "/arc-copp:copp/policies/policy/classifiers/classifier/actions" + + "/action/mark/state" { + uses arc-pol-actn:mark-local-tc-top; + } + + augment "/arc-copp:copp/policies/policy/classifiers/classifier/actions" + + "/action" { + uses arc-pol-actn:police-top { + when "./type = 'arc-pol-actn-types:POLICE'"; + } + } + + augment "/arc-copp:copp/policies/policy/classifiers/classifier/actions" + + "/action/police" { + uses arc-pol-actn:police-config { + refine "config/committed/rate/value" { + mandatory true; + description + "rate value in the unit of pps"; + } + refine "config/committed/burst/value" { + description + "burst value in the unit of packets"; + } + refine "config/conform/action-type" { + must "current() = 'arc-pol-actn-types:TRANSMIT'" { + error-message "action type not supported for copp policer"; + } + } + refine "config/exceed/action-type" { + must "current() = 'arc-pol-actn-types:DROP'" { + error-message "action type not supported for copp policer"; + } + } + refine "config/violate/action-type" { + must "current() = 'arc-pol-actn-types:DROP'" { + error-message "action type not supported for copp policer"; + } + } + } + } + + grouping copp-policy-top { + uses arc-pol:policies-top { + refine "policies/policy/classifiers/classifier" { + min-elements 1; + } + refine "policies/policy/classifiers/classifier/actions/action/type" { + must "current() = 'arc-pol-actn-types:MARK' or " + + "current() = 'arc-pol-actn-types:DROP' or " + + "current() = 'arc-pol-actn-types:POLICE'" { + error-message "action type not supported for copp"; + } + } + } + } + + augment "/arc-copp:copp" { + uses copp-policy-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-copp-service-policy-deviations.yang b/vendor/arrcus/arcos/v521/arcos-copp-service-policy-deviations.yang new file mode 100644 index 000000000..28c043d76 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-copp-service-policy-deviations.yang @@ -0,0 +1,36 @@ +module arcos-copp-service-policy-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/copp/service-policy/deviations"; + prefix arc-copp-svc-pol-dev; + + import arcos-copp-service-policy { + prefix arc-copp-svc-pol; + } + import arcos-copp { + prefix arc-copp; + } + import arcos-copp-policy { + prefix arc-copp-pol; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for control plane service-policy deviations"; + + deviation "/arc-copp-svc-pol:control-plane/arc-copp-svc-pol:service-policies" + + "/arc-copp-svc-pol:service-policy/arc-copp-svc-pol:config/arc-copp-svc-pol:name" { + deviate replace { + type leafref { + path "/arc-copp:copp/arc-copp-pol:policies/arc-copp-pol:policy/arc-copp-pol:name"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-copp-service-policy.yang b/vendor/arrcus/arcos/v521/arcos-copp-service-policy.yang new file mode 100644 index 000000000..f98a08ae2 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-copp-service-policy.yang @@ -0,0 +1,94 @@ +module arcos-copp-service-policy { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/copp/service-policy"; + prefix arc-copp-svc-pol; + + import arcos-policy { + prefix arc-pol; + } + import arcos-service-policy { + prefix arc-svc-pol; + } + import arcos-policy-action { + prefix arc-pol-actn; + } + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for copp specific policy on control plane interface"; + + + grouping control-plane-service-policy-state { + container state { + config false; + + list service-policy { + key "direction"; + uses arc-svc-pol:service-policy-attributes; + } + } + description + "Grouping to define COPP policy instance state"; + } + + augment "/control-plane/service-policies" { + uses control-plane-service-policy-state; + } + + augment "/control-plane/service-policies/state/service-policy" { + uses arc-pol:policy-classifiers-state-top { + refine "classifiers" { + config false; + } + } + } + + augment "/control-plane/service-policies/state/service-policy" + + "/classifiers/classifier/actions/action" { + uses arc-pol-actn:mark-top; + } + + augment "/control-plane/service-policies/state/service-policy" + + "/classifiers/classifier/actions/action/mark/state" { + uses arc-pol-actn:mark-local-tc-top; + } + + augment "/control-plane/service-policies/state/service-policy" + + "/classifiers/classifier/actions/action" { + uses arc-pol-actn:police-top; + } + + augment "/control-plane/service-policies/state/service-policy" + + "/classifiers/classifier/actions/action/police/state" { + uses arc-pol-actn:police-stats-top; + } + + grouping control-plane-top { + container control-plane { + uses arc-svc-pol:service-policies-top; + description + "Target to enable COPP policy instance"; + } + description + "Grouping to define target for COPP policy instance"; + } + + uses control-plane-top { + refine "control-plane/service-policies/service-policy/direction" { + must "current() = 'INGRESS'" { + error-message "Egress policies not supported for copp"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-copp.yang b/vendor/arrcus/arcos/v521/arcos-copp.yang new file mode 100644 index 000000000..04000d78e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-copp.yang @@ -0,0 +1,46 @@ +module arcos-copp { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/copp"; + prefix arc-copp; + + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for top-level CoPP"; + + grouping copp-top { + description + "Top level grouping for CoPP"; + container copp { + description + "Control Plane Policer"; + action counters { + description + "Clear all CoPP statistics"; + output { + leaf result { + type string; + description + "The status of the clear operation"; + } + } + } + } + } + + uses copp-top { + when "(/arc-platform:platform/arc-platform:asic != 'arc-platform:X86_64') or " + + "(/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-corefile.yang b/vendor/arrcus/arcos/v521/arcos-corefile.yang new file mode 100644 index 000000000..8767d6820 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-corefile.yang @@ -0,0 +1,71 @@ +module arcos-corefile { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/corefile"; + prefix arc-corefile; + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines native ArcOS core file management commands + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-04-18 { + description "Added support for clean core"; + } + + container cores { + description + "ArcOS list of core files"; + config false; + + list core { + key "filename"; + + description + "Display system process generated coredump files"; + + config false; + + leaf filename { + type string; + description + "Name of the core file"; + } + + leaf time { + type string; + description + "Time and date when the coredump file was generated"; + } + } + } + + container core-clear { + description + "Clear core files"; + + action all { + description + "Clear all core files"; + + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-aft-common.yang b/vendor/arrcus/arcos/v521/arcos-datapath-aft-common.yang new file mode 100644 index 000000000..74d79cc4c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-aft-common.yang @@ -0,0 +1,78 @@ +submodule arcos-datapath-aft-common { + yang-version "1.1"; + + belongs-to "arcos-datapath-aft" { + prefix "arcos-dp-aft"; + } + + import ietf-inet-types { prefix "inet"; } + import ietf-yang-types { prefix "yang"; } + import openconfig-interfaces { prefix "oc-if"; } + import openconfig-mpls-types { prefix "oc-mplst"; } + import openconfig-policy-types { prefix "oc-pol-types"; } + import arcos-datapath-aft-types { prefix "arcos-dp-aft-types"; } + import arcos-datapath-nexthop { prefix "arcos-dp-nh"; } + import arcos-datapath-tunnel { prefix "arcos-dp-tnl"; } + + organization + "XXXX"; + + contact + "XXXX"; + + description + "Submodule containing definitions of groupings that are re-used + across multiple contexts within the AFT model."; + + + grouping aft-common-entry-state { + description + "Operational state parameters relating to a forwarding entry"; + + leaf packets-forwarded { + type yang:counter64; + description + "The number of packets which have matched, and been forwarded, + based on the AFT entry."; + } + + leaf octets-forwarded { + type yang:counter64; + description + "The number of octets which have matched, and been forwarded, + based on the AFT entry"; + } + + leaf next-hop-index { + type uint64; + description + "A reference to the next-hop-index that is in use for the entry"; + } + + leaf next-hop-type { + type arcos-dp-aft-types:dpal-nexthop-type; + description + "Forwarding type."; + } + + leaf srv6-locator-arg { + type inet:ip-address; + description + "Locator argument"; + } + } + + grouping aft-common-entry-flat-state { + description + "Operational state parameters relating to a forwarding entry"; + + uses aft-common-entry-state; + container next-hops { + description + "The abstract forwarding table flattened for next-hops."; + uses arcos-dp-nh:nexthop-state; + uses arcos-dp-nh:parent-nexthop-flat-state; + uses arcos-dp-tnl:tunnel-state-flat; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-aft-ipv4.yang b/vendor/arrcus/arcos/v521/arcos-datapath-aft-ipv4.yang new file mode 100644 index 000000000..5b975c9f9 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-aft-ipv4.yang @@ -0,0 +1,105 @@ +submodule arcos-datapath-aft-ipv4 { + yang-version "1.1"; + + belongs-to "arcos-datapath-aft" { + prefix "arcos-dp-aft"; + } + + import ietf-inet-types { prefix "inet"; } + + // Include common cross-AFT groupings from the common submodule. + include arcos-datapath-aft-common; + + organization + "XXXXX"; + + contact + "XXXXX"; + + description + "Submodule containing definitions of groupings for the abstract + forwarding tables for IPv4."; + + grouping aft-ipv4-unicast-flat-structural { + description + "Structural grouping defining the schema for the flattened IPv4 unicast + abstract forwarding table."; + + action v4-route { + description + "IPv4 route lookup"; + input { + leaf prefix { + type inet:ipv4-prefix; + mandatory true; + description + "The IPv4 address to be looked up from RIB"; + } + } + output { + leaf prefix { + type inet:ipv4-prefix; + description + "The IPv4 address to be looked up from RIB"; + } + uses aft-ipv4-unicast-entry-flat-state; + } + } + } + + grouping aft-ipv4-unicast-entry-flat-state { + description + "Operational state parameters for the IPv4 unicast entry."; + uses aft-common-entry-flat-state; + } + + grouping aft-ipv4-unicast-structural { + description + "Structural grouping defining the schema for the IPv4 unicast + abstract forwarding table."; + + list ipv4-entry { + key "prefix"; + + description + "List of the IPv4 unicast entries within the abstract + forwarding table. This list is keyed by the destination IPv4 + prefix."; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the IPv4 unicast destination prefix which + must be matched to utilise the AFT entry."; + } + + container state { + description + "Operational state parameters for the IPv4 unicast AFT + entry."; + uses aft-ipv4-unicast-entry-config; + uses aft-ipv4-unicast-entry-state; + } + } + } + + grouping aft-ipv4-unicast-entry-config { + description + "Configuration parameters for the IPv4 unicast entry."; + + leaf prefix { + type inet:ipv4-prefix; + description + "The IPv4 destination prefix that should be matched to + utilise the AFT entry."; + } + } + + grouping aft-ipv4-unicast-entry-state { + description + "Operational state parameters for the IPv4 unicast entry."; + uses aft-common-entry-state; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-aft-ipv6.yang b/vendor/arrcus/arcos/v521/arcos-datapath-aft-ipv6.yang new file mode 100644 index 000000000..c23608463 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-aft-ipv6.yang @@ -0,0 +1,106 @@ +submodule arcos-datapath-aft-ipv6 { + yang-version "1.1"; + + belongs-to "arcos-datapath-aft" { + prefix "arcos-dp-aft"; + } + + import ietf-inet-types { prefix "inet"; } + + // Include common cross-AFT groupings from the common submodule. + include arcos-datapath-aft-common; + + organization + "XXXXX"; + + contact + "XXXXX"; + + description + "Submodule containing definitions of groupings for the abstract + forwarding tables for IPv6."; + + grouping aft-ipv6-unicast-flat-structural { + description + "Structural grouping defining the schema for the flattened IPv6 unicast + abstract forwarding table."; + + action v6-route { + description + "IPv6 route lookup"; + input { + leaf prefix { + type inet:ipv6-prefix; + mandatory true; + description + "The IPv6 address to be looked up from RIB"; + } + } + output { + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 address to be looked up from RIB"; + } + uses aft-ipv6-unicast-entry-flat-state; + } + } + } + + grouping aft-ipv6-unicast-entry-flat-state { + description + "Operational state parameters for the IPv6 unicast entry."; + uses aft-common-entry-flat-state; + } + + grouping aft-ipv6-unicast-structural { + description + "Structural grouping defining the schema for the IPv6 unicast + abstract forwarding table."; + + list ipv6-entry { + key "prefix"; + + description + "List of the IPv6 unicast entries within the abstract + forwarding table. This list is keyed by the destination IPv6 + prefix."; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the IPv6 unicast destination prefix which + must be matched to utilise the AFT entry."; + } + + container state { + description + "Operational state parameters for the IPv6 unicast AFT + entry."; + uses aft-ipv6-unicast-entry-config; + uses aft-ipv6-unicast-entry-state; + } + + } + } + + grouping aft-ipv6-unicast-entry-config { + description + "Configuration parameters for the IPv6 unicast entry."; + + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 destination prefix that should be matched to + utilise the AFT entry."; + } + } + + grouping aft-ipv6-unicast-entry-state { + description + "Operational state parameters for the IPv6 unicast entry."; + uses aft-common-entry-state; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-aft-mac.yang b/vendor/arrcus/arcos/v521/arcos-datapath-aft-mac.yang new file mode 100644 index 000000000..276eb446c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-aft-mac.yang @@ -0,0 +1,122 @@ +submodule arcos-datapath-aft-mac { + yang-version "1.1"; + + belongs-to "arcos-datapath-aft" { + prefix "arcos-dp-aft"; + } + + import ietf-yang-types { prefix "yang"; } + + organization + "XXXXX"; + + contact + "XXXXX"; + + description + "Submodule containing definitions of groupings for the abstract + forwarding tables for L2NI."; + + revision "2023-03-30" { + description + "Initial version"; + } + + grouping aft-mac-structural { + description + "Structural grouping defining the schema for the flattened L2 + abstract forwarding table."; + + list mac-entry { + key "mac-address vlan"; + description + "Table of learned or statically configured MAC addresses and + corresponding VLANs in the bridge domain"; + + leaf mac-address { + type leafref { + path "../state/mac-address"; + } + description + "Reference to mac-address list key"; + } + + leaf vlan { + type leafref { + path "../state/vlan"; + } + description + "Reference to vlan list key"; + } + + container state { + description + "Operational state data for MAC table entries"; + + leaf mac-address { + type string; + description + "MAC address for the dynamic or static MAC table + entry"; + } + + leaf vlan { + type uint16; + description + "VLAN from which this MAC address was received"; + } + + leaf entry-type { + type enumeration { + enum STATIC { + description + "Statically programmed MAC table entry"; + } + enum DYNAMIC { + description + "Dynamically learned MAC table entry"; + } + } + description + "Indicates whether the entry was statically configured, or + dynamically learned."; + } + + leaf service-label { + type uint32; + description + "Overlay service label for remotely learnt mac address"; + } + + leaf nexthop-id { + type uint32; + description + "Underlay reachability for remotely learnt mac address"; + } + + leaf nexthop-type { + type enumeration { + enum SINGLE { + value 1; + } + enum ECMP { + value 2; + } + enum PROTECTED { + value 3; + } + enum VXLAN_NH { + value 4; + } + } + } + + leaf interface { + type string; + description + "Interface on which the mac is learnt"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-aft-mpls.yang b/vendor/arrcus/arcos/v521/arcos-datapath-aft-mpls.yang new file mode 100644 index 000000000..b86ef8332 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-aft-mpls.yang @@ -0,0 +1,79 @@ +submodule arcos-datapath-aft-mpls { + yang-version "1.1"; + + belongs-to "arcos-datapath-aft" { + prefix "arcos-dp-aft"; + } + + import openconfig-mpls-types { prefix "oc-mpls-types"; } + + // Include common cross-AFT groupings from the common submodule. + include arcos-datapath-aft-common; + + organization + "XXXXX"; + + contact + "XXXXX"; + + description + "Submodule containing definitions of groupings for the abstract + forwarding table for MPLS label forwarding."; + + grouping aft-mpls-structural { + description + "Structural grouping defining the schema for the MPLS + abstract forwarding table."; + + list label-entry { + key "label"; + + description + "List of the MPLS entries within the abstract + forwarding table. This list is keyed by the top-most MPLS + label."; + + leaf label { + type leafref { + path "../state/label"; + } + description + "Reference to the top-most MPLS label matched by the + entry."; + } + + container state { + config false; + description + "Operational state parameters for the MPLS AFT + entry."; + uses aft-mpls-entry-config; + uses aft-mpls-entry-state; + } + + } + } + + grouping aft-mpls-entry-config { + description + "Configuration parameters for the MPLS entry."; + + leaf label { + type oc-mpls-types:mpls-label; + description + "The top-most MPLS label that should be matched to + utilise the AFT entry."; + } + } + + grouping aft-mpls-entry-state { + description + "Operational state parameters for the MPLS entry."; + uses aft-common-entry-state; + leaf vrf { + type string; + description + "A reference to the VRF in use for the entry"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-aft-srv6.yang b/vendor/arrcus/arcos/v521/arcos-datapath-aft-srv6.yang new file mode 100644 index 000000000..23cb53c81 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-aft-srv6.yang @@ -0,0 +1,125 @@ +submodule arcos-datapath-aft-srv6 { + yang-version "1.1"; + + belongs-to "arcos-datapath-aft" { + prefix "arcos-dp-aft"; + } + + import ietf-inet-types { prefix "inet"; } + + import arcos-aft-types { prefix "arc-aft-types"; } + import arcos-srv6-types { prefix "arc-srv6-types"; } + + + // Include common cross-AFT groupings from the common submodule. + include arcos-datapath-aft-common; + + organization + "Arrcus, Inc"; + + contact + "Email: eng@arrcus.com"; + + description + "Submodule containing definitions of groupings for the abstract + forwarding table for SRv6 SID forwarding."; + + grouping aft-srv6-sid-structural { + description + "Structural grouping defining the schema for the SRv6 SID + abstract forwarding table."; + + list srv6-sid-entry { + key "local-sid"; + + description + "List of the SRv6 SID entries within the abstract + forwarding table. This list is keyed by the SRv6 Local + SID."; + + leaf local-sid { + type leafref { + path "../state/local-sid"; + } + description + "Reference to the local-sid matched by the + entry."; + } + + container state { + config false; + description + "Operational state parameters for the SRv6 SID AFT + entry."; + uses aft-srv6-sid-entry-config; + uses aft-srv6-sid-entry-state; + } + + } + } + + grouping aft-srv6-sid-entry-config { + description + "Configuration parameters for the SRv6 SID entry."; + + leaf local-sid { + description + "SRv6 Local SID"; + type inet:ipv6-prefix; + } + } + + grouping aft-srv6-sid-entry-state { + description + "Operational state parameters for the SRv6 SID entry."; + uses aft-common-entry-state; + + leaf sid-type { + description + "SRv6 SID Type"; + type arc-srv6-types:srv6-sid-type; + } + + leaf function { + description + "SRv6 Function"; + type arc-srv6-types:srv6-endpoint-behavior-type; + } + + leaf nh-id { + description + "NH ID for End.DX/End.X"; + type uint32; + } + + leaf sid-vrf-id { + description + "HW VRF ID for End.DT/uDT"; + type uint32; + } + + leaf sid-vrf-name { + description + "VRF name for End.DT/uDT"; + type string; + } + + leaf flags { + description + "SID specific flag"; + type uint32; + } + + leaf tunnel-terminator-id { + description + "SRv6 tunnel terminator HW ID"; + type uint32; + } + + leaf tunnel-terminator-priority { + description + "SRv6 tunnel terminator TCAM entry priority"; + type uint32; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-aft-types.yang b/vendor/arrcus/arcos/v521/arcos-datapath-aft-types.yang new file mode 100644 index 000000000..d5e0e440c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-aft-types.yang @@ -0,0 +1,123 @@ +module arcos-datapath-aft-types { + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/datapath/aft/types"; + prefix "arcos-dp-aft-types"; + + organization + "XXXX"; + + contact + "XXXX"; + + description + "Types related to the ArcOS datapath Abstract Forwarding + Table (AFT) model"; + + typedef encapsulation-header-type { + type enumeration { + enum GRE { + description + "The encapsulation header is a Generic Routing Encapsulation + header."; + value 5; + } + enum IPV4 { + description + "The encapsulation header is an IPv4 packet header"; + value 4; + } + enum IPV6 { + description + "The encapsulation header is an IPv6 packet header"; + value 6; + } + enum MPLS { + description + "The encapsulation header is one or more MPLS labels indicated + by the pushed and popped label stack lists."; + value 2; + } + enum VXLAN_T { + description + "The encapsulation header is a VXLAN header."; + value 1; + } + enum SRV6 { + description + "The encapsulation header is used for Segment Routing. + Destination IP comes from the top of the SID list (traverse order). + If reduced mode is on, packet might not have SRH."; + value 3; + } + } + description + "Types of tunnel encapsulation that are supported by systems as either + head- or tail-end. Keep in sync with tunnel.encap.enum."; + } + + typedef dpal-nexthop-action-type { + type enumeration { + enum GLEAN { + value 1; + } + enum DROP { + value 2; + } + enum LOCAL { + value 3; + } + enum CONNECTED { + value 4; + } + enum MPLS_CONNECTED { + value 5; + } + enum PUNT_TO_CPU { + value 6; + } + enum VXLAN { + value 7; + } + } + } + + typedef dpal-nexthop-type { + type enumeration { + enum SINGLE { + value 1; + } + enum ECMP { + value 2; + } + enum PROTECTED { + value 3; + } + enum VXLAN_NH { + value 4; + } + } + } + + typedef dpal-nexthop-protected-type { + type enumeration { + enum ACTIVE { + value 1; + } + enum BACKUP { + value 2; + } + } + } + + typedef dpal-nexthop-protected-state { + type enumeration { + enum ACTIVE { + value 1; + } + enum PASSIVE { + value 2; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-aft.yang b/vendor/arrcus/arcos/v521/arcos-datapath-aft.yang new file mode 100644 index 000000000..1e0df5cc3 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-aft.yang @@ -0,0 +1,159 @@ +module arcos-datapath-aft { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/datapath/aft"; + + prefix "arcos-dp-aft"; + + // Include IPv4 AFT submodule. + include arcos-datapath-aft-ipv4; + + // Include IPv6 AFT submodule. + include arcos-datapath-aft-ipv6; + + // Include MPLS AFT submodule. + include arcos-datapath-aft-mpls; + + // Include SRv6 SID submodule. + include arcos-datapath-aft-srv6; + + // Include the common cross-AFT entities. + include arcos-datapath-aft-common; + + //Include the mac-table submodule. + include arcos-datapath-aft-mac; + + organization + "XXXX - TBD - XXXX"; + + contact + "XXXX - TBD - XXXX"; + + description + "A model describing the forwarding entries installed in a datapath + instance. It is based on the Openconfig Abstract Forwarding Table (AFT) + mode. It should be noted that this model is not expected to + align 1:1 with the underlying structure used directly by a + forwarding element (e.g., linecard), but rather provide an + abstraction that can be consumed by an NMS to observe, and in some + cases manipulate, the internal forwarding database in a simplified + manner. Since the underlying model of the forwarding table is not + expected to align with this model, the structure described herein + is referred to as an Abstract Forwarding Table (AFT), rather than + the FIB."; + + revision "2023-03-29" { + description + "Added support of Mac fdb"; + } + + grouping aft-top { + description + "Top-level grouping allowing per-protocol instantiation of the + AFT."; + + container afts { + config false; + description + "The abstract forwarding tables (AFTs) that are associated + with the network instance. An AFT is instantiated per-protocol + running within the network-instance - such that one exists for + IPv4 Unicast, IPv6 Unicast, MPLS, L2 forwarding entries, etc. + A forwarding entry within the FIB has a set of next-hops, + which may be a reference to an entry within another table - + e.g., where a Layer 3 next-hop has an associated Layer 2 + forwarding entry."; + + container ipv4-unicast { + description + + "The abstract forwarding table for IPv4 unicast. Entries + within this table are uniquely keyed on the IPv4 unicast + destination prefix which is matched by ingress packets. + + The data set represented by the IPv4 Unicast AFT is the set + of entries from the IPv4 unicast RIB that have been selected + for installation into the FIB of the device exporting the + data structure."; + + uses aft-ipv4-unicast-structural; + } + + container ipv4-unicast-flat { + description + + "The abstract forwarding table for IPv4 unicast flattened. + Entries within this table are uniquely keyed on the IPv4 + unicast destination prefix which is matched by ingress packets. + + The data set represented by the IPv4 Unicast AFT is the set + of entries from the IPv4 unicast RIB that have been selected + for installation into the FIB of the device exporting the + data structure."; + + uses aft-ipv4-unicast-flat-structural; + } + + container ipv6-unicast { + description + "The abstract forwarding table for IPv6 unicast. Entries + within this table are uniquely keyed on the IPv6 unicast + destination prefix which is matched by ingress packets. + + The data set represented by the IPv6 Unicast AFTis the set + of entries within the IPv6 RIB that "; + + uses aft-ipv6-unicast-structural; + } + + container ipv6-unicast-flat { + description + "The abstract forwarding table for IPv6 unicast flattened. + Entries within this table are uniquely keyed on the IPv6 + unicast destination prefix which is matched by ingress packets. + + The data set represented by the IPv6 Unicast AFTis the set + of entries within the IPv6 RIB that "; + + uses aft-ipv6-unicast-flat-structural; + } + + container mpls { + description + "The abstract forwarding table for MPLS label based + forwarding entries. Entries within the table are keyed based + on the top-most MPLS label in the stack on the ingress + packet."; + + uses aft-mpls-structural; + } + + container srv6-sid { + description + "The abstract forwarding table for SRv6 SID based forwarding + entries. Entries within the table are keyed based on the + SRv6 Local SID which is matched by ingress packets"; + + uses aft-srv6-sid-structural; + } + + container mac-entries{ + description + "The abstract forwarding table for Mac based forwarding + entries."; + uses aft-mac-structural; + } +/* + container ethernet { + description + "The abstract forwarding table for Ethernet based forwarding + entries. Entries within the table are keyed based on the + destination MAC address on the ingress packet."; + + uses aft-ethernet-structural; + } +*/ + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-asic.yang b/vendor/arrcus/arcos/v521/arcos-datapath-asic.yang new file mode 100644 index 000000000..af5527e6e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-asic.yang @@ -0,0 +1,287 @@ +module arcos-datapath-asic { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/datapath/asic"; + prefix arcos-dp-asic; + + import arcos-platform { + prefix arc-platform; + } + + import arcos-features { + prefix arc-features; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + + description + "YANG data-model for counters read from ASIC. + + Copyright (c) 2022 by Arrcus, Inc. + All rights reserved."; + + revision "2022-03-01" { + description + "Initial version"; + reference "0.1.0"; + } + + grouping asic-pipeline-pkt-drops { + description + "Group for packet drop counters in ASIC pipeline"; + + container asic-packet-drops { + config false; + description + "Top level container for all packet drops in ASIC pipeline"; + + leaf queue-not-found { + type uint64; + description + "Packet drops due to queue not found"; + } + leaf sram-enqueue-reject { + type uint64; + description + "Packet drops due to SRAM enqueue rejected"; + } + leaf data-copy-errors { + type uint64; + description + "Packet drops due data copy failure in DRAM"; + } + leaf dram-crc-errors { + type uint64; + description + "Packet drops due DRAMC CRC error"; + } + leaf dram-crc-flipped-errors { + type uint64; + description + "Packet drops due DRAMC CRC flipped error"; + } + leaf pkt-crc-errors { + type uint64; + description + "Packet drops due packet CRC error"; + } + leaf tx-ucast-drops { + type uint64; + description + "Unicast Packet drops on egress pipeline"; + } + leaf tx-mcast-drops { + type uint64; + description + "Multicast Packet drops on egress pipeline"; + } + } + + container asic-cmic-packet-drops { + config false; + description + "Top level container for CMIC error counters"; + + leaf cmic-out-errors { + type uint64; + description + "Packet errors to ASIC from CMIC"; + } + leaf cmic-in-errors { + type uint64; + description + "Packet errors from ASIC to CMIC"; + } + } + } + + grouping asic-pipeline-pkt-count { + description + "Group for packet counters from ASIC pipeline"; + + container asic-packet-count { + config false; + description + "Top level container for all pipeline counters"; + + leaf rx-intf-packets { + type uint64; + description + "NIF interface stats"; + } + leaf rx-recycle-intf-packets { + type uint64; + description + "Recycle port stats"; + } + leaf cpu-injected-packets { + type uint64; + description + "CPU injected packets"; + } + leaf tx-total-packets { + type uint64; + description + "Total TX packets"; + } + leaf rx-total-packets { + type uint64; + description + "Total RX packets"; + } + leaf fabric-in-packets { + type uint64; + description + "Packets from fabric"; + } + leaf fabric-out-packets { + type uint64; + description + "Packets to fabric"; + } + } + + container asic-cmic-packet-count { + config false; + description + "Top level container for CMIC counters"; + + leaf cmic-out-packets { + type uint64; + description + "Packets to ASIC from CMIC"; + } + leaf cmic-in-packets { + type uint64; + description + "Packets from ASIC to CMIC"; + } + } + } + + grouping external-tcam-counter-group { + description + "Group for counters in external TCAM"; + + container external-tcam-interface-counters { + config false; + description + "Top level container for all external TCAM interface counters in ASIC pipeline"; + + leaf tx-pkt-counter { + type uint64; + description + "Packet sent to external TCAM"; + } + + leaf rx-pkt-counter { + type uint64; + description + "Packet received from external TCAM"; + } + + leaf tx-byte-counter { + type uint64; + description + "Bytes sent to external TCAM"; + } + + leaf rx-byte-counter { + type uint64; + description + "Bytes received from external TCAM"; + } + } + + container external-tcam-runtime-counters { + config false; + description + "Top level container for all external TCAM interface counters in ASIC pipeline"; + + leaf unresolved-errors { + type uint64; + description + "External TCAM errors that were not resolved"; + } + + leaf resolved-errors { + type uint64; + description + "External TCAM errors that were resolved"; + } + + leaf pkt-and-intf-errors { + type uint64; + description + "External TCAM packet or interface errors"; + } + + leaf device-uncorrectable-errors { + type uint64; + description + "External TCAM device level uncorrectable errors"; + } + + leaf device-uncorrectable-fcs-errors { + type uint64; + description + "External TCAM device level FCS uncorrectable errors"; + } + + leaf-list intf-unresolved-errors { + type uint64; + description + "KBP interface unresolved errors"; + } + + leaf-list intf-resolved-errors { + type uint64; + description + "KBP interface resolved errors"; + } + } + } + + grouping external-tcam-counter-top { + description + "Group for external TCAM counters"; + + container external-tcam-counters { + config false; + description + "Top level container for all external tcam counters"; + + when " ((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')) and " + + "(/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_EXTERNAL_TCAM']" + + "/arc-features:supported = 'true')"; + + uses external-tcam-counter-group; + } + } + + grouping asic-pkt-count { + description + "Group for ASIC packet count"; + + container asic-counters { + config false; + description + "Top level container for all pipeline counters and drops"; + + when " ((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED'))"; + + uses asic-pipeline-pkt-drops; + uses asic-pipeline-pkt-count; + } + } +} \ No newline at end of file diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-nexthop.yang b/vendor/arrcus/arcos/v521/arcos-datapath-nexthop.yang new file mode 100644 index 000000000..959ea83f2 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-nexthop.yang @@ -0,0 +1,312 @@ +module arcos-datapath-nexthop { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/datapath/nexthop"; + prefix arc-dp-nexthop; + + import ietf-inet-types { prefix "inet"; } + import openconfig-interfaces { prefix "oc-if"; } + import openconfig-yang-types { prefix "oc-yang"; } + import openconfig-mpls-types { prefix "oc-mplst"; } + import openconfig-policy-types { prefix "oc-pol-types"; } + import arcos-datapath-aft-types { prefix "arcos-dp-aft-types"; } + import arcos-datapath-tunnel { prefix "arcos-dp-tnl"; } + + grouping nexthop-top { + description + "Structural grouping describing a next-hop entry."; + + container next-hops { + config false; + description + "The list of next-hops that are to be used for entry within + the AFT table. The structure of each next-hop is address + family independent, such that it is possible to resolve fully + how the next-hop is treated. For example: + + - Where ingress IPv4 unicast packets are to be forwarded via + an MPLS LSP, the next-hop list should indicate the MPLS + label stack that is used to the next-hop. + - Where ingress MPLS labelled packets are to be forwarded to + an IPv6 nexthop (for example, a CE within a VPN, then the + popped label stack, and IPv6 next-hop address should be + indicated)."; + + list next-hop { + key "index type"; + + description + "A next-hop associated with the forwarding instance"; + + leaf index { + type leafref { + path "../state/index"; + } + description + "A unique index identifying the next-hop entry for the + entry"; + } + + leaf type { + type leafref { + path "../state/type"; + } + description + "A unique index identifying the next-hop entry for the + entry"; + } + + container state { + config false; + description + "Operational state parameters relating to the AFT + next-hop entry"; + + uses nexthop-state; + } + uses parent-nexthop-state; + } + } + } + + grouping parent-nexthop-flat-state-2 { + description + "Parameters relating to a next next-hops in forwarding chain"; + + leaf parent-index { + type uint64; + description + "A unique index identifying the next-hop entry for the + entry"; + } + + leaf parent-type { + type arcos-dp-aft-types:dpal-nexthop-type; + description + "A unique type identifying the next-hop entry for the + entry"; + } + container parent-next-hops { + description + "The list of next next-hops in forwarding chain"; + uses nexthop-state; + uses arcos-dp-tnl:tunnel-state-flat; + } + } + grouping parent-nexthop-flat-state { + description + "Parameters relating to a next next-hops in forwarding chain"; + + leaf parent-index { + type uint64; + description + "A unique index identifying the next-hop entry for the + entry"; + } + + leaf parent-type { + type arcos-dp-aft-types:dpal-nexthop-type; + description + "A unique type identifying the next-hop entry for the + entry"; + } + container parent-next-hops { + description + "The list of next next-hops in forwarding chain"; + uses nexthop-state; + uses parent-nexthop-flat-state-2; + uses arcos-dp-tnl:tunnel-state-flat; + } + } + + grouping parent-nexthop-state { + description + "Parameters relating to a next next-hops in forwarding chain"; + + container parent-next-hops { + description + "The list of next next-hops in forwarding chain"; + + list parent-next-hop { + key "parent-index parent-type"; + + description + "A next-hop associated with the forwarding instance"; + + leaf parent-index { + type leafref { + path "../state/parent-index"; + } + description + "A unique index identifying the next-hop entry for the + entry"; + } + + leaf parent-type { + type leafref { + path "../state/parent-type"; + } + description + "A unique type identifying the next-hop entry for the + entry"; + } + + container state { + config false; + description + "Operational state parameters relating to the AFT + next-hop entry"; + + leaf parent-index { + type leafref { + path "../../../../state/index"; + } + description + "A unique index identifying the next-hop entry for the + entry"; + } + leaf parent-type { + type leafref { + path "../../../../state/type"; + } + description + "A unique type identifying the next-hop entry for the + entry"; + } + } + } + } + } + + grouping nexthop-state { + description + "Parameters relating to a next-hop within the AFT entry"; + + leaf index { + type uint64; + description + "A unique index identifying the next-hop entry for the + entry"; + } + + leaf type { + type arcos-dp-aft-types:dpal-nexthop-type; + description + "Forwarding type."; + } + + leaf weight { + type uint32; + description + "The weight of the next-hop. Traffic is balanced according to + the ratio described by the relative weights of the next hops + that exist for the AFT entry. Note that all next-hops that are + specified are assumed to be active next-hops and therefore + eligible (and selected) to be installed in the FIB, and hence + used for packet forwarding."; + } + + leaf ip-address { + type inet:ip-address; + description + "The IP address of the next-hop system."; + } + + leaf mac-address { + type oc-yang:mac-address; + description + "The MAC address of the next-hop if resolved by the local + network instance."; + } + + leaf-list popped-mpls-label-stack { + type oc-mplst:mpls-label; + description + "The MPLS label stack to be popped from the packet when + switched by the system. The stack is encoded as a leaf-list + such that the first entry is the label that is outer-most (i.e., + furthest from the bottom of the stack) label + stack to be popped. + + If the local system pops the outer-most label 400, then the + value of this list is [400,]. If the local system removes two + labels, the outer-most being 500, and the second of which is + 400, then the value of the list is [500, 400]. + + A swap operation is reflected by entries in the + popped-mpls-label-stack and pushed-mpls-label-stack nodes."; + } + + leaf-list pushed-mpls-label-stack { + type oc-mplst:mpls-label; + ordered-by user; + description + "The MPLS label stack imposed when forwarding packets to the + next-hop + - the stack is encoded as a leaf list whereby the order of the + entries is such that the first entry in the list is the + label at the bottom of the stack to be pushed. + + To this end, a packet which is to forwarded to a device using + a service label of 42, and a transport label of 8072 will be + represented with a label stack list of [42, 8072]. + + The MPLS label stack list is ordered by the user, such that no + system re-ordering of leaves is permitted by the system. + + A swap operation is reflected by entries in the + popped-mpls-label-stack and pushed-mpls-label-stack nodes."; + + } + + leaf forwarding-action { + type arcos-dp-aft-types:dpal-nexthop-action-type; + description + "Forwarding action"; + } + + leaf interface { + type string; + description + "Reference to a base interface. If a reference to a + subinterface is required, this leaf must be specified + to indicate the base interface."; + } + + leaf subinterface { + type uint32; + description + "Reference to a subinterface -- this requires the base + interface to be specified using the interface leaf in + this container. If only a reference to a base interface + is requuired, this leaf should not be set."; + } + + leaf vni-id { + type uint32; + description + "Reference to VXLAN network identifier."; + } + + leaf tunnel-id { + type uint32; + description + "Reference to a tunnel encapsulation."; + } + leaf failover-id { + type int32; + description + "Reference to a failover id."; + } + leaf protected-nh-type { + type arcos-dp-aft-types:dpal-nexthop-protected-type; + description + "Type to identify if the protected next-hop is Active or Backup"; + } + leaf protected-nh-state { + type arcos-dp-aft-types:dpal-nexthop-protected-state; + description + "Type to identify if the protected next-hop path is Active or Passive in hardware"; + } + } + uses nexthop-top; +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-queues.yang b/vendor/arrcus/arcos/v521/arcos-datapath-queues.yang new file mode 100644 index 000000000..e96fd14d6 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-queues.yang @@ -0,0 +1,138 @@ +module arcos-datapath-queues { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/datapath/queues"; + prefix arcos-dp-queues; + + import openconfig-interfaces { prefix "oc-if"; } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: eng@arrcus.com"; + description + "YANG data-model for datapath queues"; + revision "2022-03-18" { + description + "Enable support for WRED drop counts"; + } + + grouping voq-top { + description + "Grouping of voq operational data per interface."; + + container queues { + config false; + description + "Enclosing container for the list of interface references."; + + list interface { + key "ifname"; + + description + "The list of interfaces with voqs associated"; + + leaf ifname { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description + "The interface name key for interface list"; + } + + container state { + config false; + description + "Operational state parameters relating to the voq + entries for an interface"; + + uses voq-interfaces-state; + } + } + } + } + + grouping voq-interfaces-state { + description + "Voq information for an interface"; + + container voqs { + config false; + description + "The list of voqs that are present on an interface."; + + list voq { + key "id"; + + description + "A voq associated with an interface on an instance"; + + leaf id { + type leafref { + path "../state/id"; + } + description + "A unique index identifying the voq entry"; + } + + container state { + config false; + description + "Operational state parameters relating to the voq"; + + uses voq-state; + } + } + } + } + + grouping queue-stats-top { + leaf queue-txcount { + type uint64; + description + "Number of packets successfully transmitted out of a queue"; + } + leaf queue-txbytes { + type uint64; + description + "Number of bytes successfully transmitted out of a queue"; + } + leaf queue-dropcount { + type uint64; + description + "Number of packets dropped from a queue. + Drops could be as a result of dropping descipline or + could be as a result of unavailabilty of buffers"; + } + leaf queue-dropbytes { + type uint64; + description + "Number of bytes dropped from a queue. + Drops could be as a result of dropping descipline or + could be as a result of unavailabilty of buffers"; + } + leaf wred-dropped-packets { + type uint64; + description + "Number of packets that were dropped by wred algorithm."; + } + } + + grouping voq-state { + description + "Parameters relating to a voq within the entry"; + + leaf id { + type uint64; + description + "A unique index identifying the voq."; + } + + uses queue-stats-top; + + } + uses voq-top; +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-tunnel.yang b/vendor/arrcus/arcos/v521/arcos-datapath-tunnel.yang new file mode 100644 index 000000000..3097f4b37 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-tunnel.yang @@ -0,0 +1,162 @@ +module arcos-datapath-tunnel { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/datapath/tunnel"; + prefix arc-dp-tunnel; + import arcos-datapath-aft-types { + prefix arcos-dp-aft-types; + } + import ietf-inet-types { + prefix inet; + } + + grouping tunnel-state { + description + "Parameters relating to a tunnel within the AFT entry"; + + leaf tunnel-type { + type arcos-dp-aft-types:encapsulation-header-type; + description + "Type of IP tunnel"; + } + + leaf src-ip-address { + type inet:ip-address; + description + "Source IP address of tunnel"; + } + + leaf dst-ip-address { + type inet:ip-address; + description + "Destination IP address of tunnel"; + } + + leaf-list sid-list { + type inet:ipv6-address-no-zone; + description + "The list of SIDs added to SRv6 tunnel header"; + } + + leaf-list hw-id-list { + type uint32; + description + "The list of ASIC specific IDs"; + } + + leaf ing-ucast-packets { + type uint64; + description + "Destination ingress packets of ucast"; + } + + leaf ing-mcast-packets { + type uint64; + description + "Destination ingress packets of mcast"; + } + + leaf ing-bcast-packets { + type uint64; + description + "Destination ingress packets of bcast"; + } + + leaf egr-ucast-packets { + type uint64; + description + "Destination egress packets of ucast"; + } + + leaf egr-mcast-packets { + type uint64; + description + "Destination egress packets of mcast"; + } + + leaf egr-bcast-packets { + type uint64; + description + "Destination egress packets of bcast"; + } + + leaf ing-ucast-bytes { + type uint64; + description + "Destination ingress bytes of ucast"; + } + + leaf ing-mcast-bytes { + type uint64; + description + "Destination ingress bytes of mcast"; + } + + leaf ing-bcast-bytes { + type uint64; + description + "Destination ingress bytes of bcast"; + } + + leaf egr-ucast-bytes { + type uint64; + description + "Destination egress bytes of ucast"; + } + + leaf egr-mcast-bytes { + type uint64; + description + "Destination egress bytes of mcast"; + } + + leaf egr-bcast-bytes { + type uint64; + description + "Destination egress bytes of bcast"; + } + } + + grouping tunnel-state-flat { + description + "Structural grouping describing a tunnel entry in HW."; + + container tunnel { + config false; + description + "The list of tunnels programmed into the ASIC."; + leaf tunnel-id { + type uint32; + description + "Tunnel identifier"; + } + uses tunnel-state; + } + } + + grouping tunnel-top { + description + "Structural grouping describing a tunnel entry in HW."; + + container tunnels { + config false; + description + "The list of tunnels programmed into the ASIC."; + list tunnel { + key tunnel-id; + description + "List of IP tunnels"; + + leaf tunnel-id { + type uint32; + description + "Tunnel identifier"; + } + + container state { + uses tunnel-state; + } + } + } + } + uses tunnel-top; +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath-types.yang b/vendor/arrcus/arcos/v521/arcos-datapath-types.yang new file mode 100644 index 000000000..4874e1091 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath-types.yang @@ -0,0 +1,35 @@ +module arcos-datapath-types { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/datapath/types"; + + prefix "arcos-dp-types"; + + organization + "XXXX - TBD - XXXX"; + + contact + "XXXX - TBD - XXXX"; + + description + "This model describes the various types used by the ArcOS datapath + model."; + + identity ARCOS_DATAPATH_TYPE { + description + "Base identity for datapath types."; + } + + identity ARCOS_DATAPATH_ASIC { + base ARCOS_DATAPATH_TYPE; + description + "ASIC datapath"; + } + + identity ARCOS_DATAPATH_SOFTWARE { + base ARCOS_DATAPATH_TYPE; + description + "Software datapath"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-datapath.yang b/vendor/arrcus/arcos/v521/arcos-datapath.yang new file mode 100644 index 000000000..8cee54b15 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-datapath.yang @@ -0,0 +1,139 @@ +module arcos-datapath { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/datapath"; + + prefix "arcos-dp"; + + import arcos-platform {prefix arc-platform;} + import arcos-datapath-types { prefix arcos-dp-types; } + import arcos-datapath-aft { prefix "arcos-aft"; } + import arcos-datapath-nexthop { prefix "arcos-nh"; } + import arcos-datapath-tunnel { prefix "arcos-tnl"; } + import arcos-datapath-queues { prefix "arcos-queues"; } + import arcos-datapath-asic { prefix "arcos-asic"; } + + organization + "XXXX - TBD - XXXX"; + + contact + "XXXX - TBD - XXXX"; + + description + "A model describing the various datapath instances in the system. A + datapath instance is an entity that deals with packet processing at + some level. Examples are network processors, application specific + integrated circuits (ASICs), software forwarding instances and so + on. Each datapath instance may be responsible for one more functions like + packet forwarding, packet filtering (ACLs), QoS, tunnel encapsulations + and so on. This model defines a datapath instance under which various + feature/function subtrees can be defined to represent read-only state."; + + grouping datapath-instance-state { + description + "Grouping for datapath instance state."; + + leaf name { + type string; + description + "Datapath instance name."; + } + + leaf type { + type identityref { + base arcos-dp-types:ARCOS_DATAPATH_TYPE; + } + description + "Type of datapath instance."; + } + } + + grouping forwarding-instance-state { + description + "This grouping describes forwarding state of a network instance"; + + leaf name { + type string; + description + "Network instance name."; + } + uses arcos-aft:aft-top; + } + + grouping datapath-forwarding { + description + "This grouping is used to add containers for datapath features under + a datapath instance."; + + container forwarding { + list network-instance { + key "name"; + description + "Network instances configured on the local system"; + + leaf name { + type leafref { + path "../state/name"; + } + description + "References the network instance name."; + } + container state { + description + "Operational forwarding state for a network instance"; + uses forwarding-instance-state; + } + } + uses arcos-nh:nexthop-top; + uses arcos-tnl:tunnel-top; + } + } + + grouping queues-top { + description + "Top-level grouping for queueing specific objects."; + uses arcos-queues:voq-top; + + } + + grouping datapath-top { + description + "Top-level grouping for datapath instances."; + + container datapath-instances { + config false; + description + "Top level container for all datapath instances."; + + list datapath-instance { + key "name"; + description + "List of datapath instances in the system keyed by name."; + + leaf name { + type leafref { + path "../state/name"; + } + description + "References the datapath instance name."; + } + container state { + description + "Operational state data for each datapath instance"; + uses datapath-instance-state; + } + uses datapath-forwarding; + + uses queues-top { + when " ((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED'))"; + } + + uses arcos-asic:asic-pkt-count; + uses arcos-asic:external-tcam-counter-top; + } + } + } + uses datapath-top; +} diff --git a/vendor/arrcus/arcos/v521/arcos-debug.yang b/vendor/arrcus/arcos/v521/arcos-debug.yang new file mode 100644 index 000000000..a4214ac9c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-debug.yang @@ -0,0 +1,348 @@ +module arcos-debug { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/debug"; + prefix arc-dbg; + + import ietf-inet-types { + prefix inet; + } + + import openconfig-policy-types { + prefix oc-pol-types; + } + + import openconfig-isis-types { + prefix oc-isis-types; + } + + grouping default-actions { + action enable { + description + "Enable debug"; + + input { + leaf item { + type leafref { + path "../../enable-items/item"; + } + default "all"; + } + } + output { + leaf response { + type string; + mandatory true; + } + } + } + + action disable { + description + "Disable debug"; + + input { + leaf item { + type leafref { + path "../../disable-items/item"; + } + default "all"; + } + } + output { + leaf response { + type string; + mandatory true; + } + } + } + list enable-items { + key "item"; + leaf item { + type string; + } + } + list disable-items { + key "item"; + leaf item { + type string; + } + } + } + + grouping debug-enable-action { + action enable { + description + "Enable the specific debug filter"; + + input { + leaf item { + type boolean; + default true; + } + } + output { + leaf response { + type string; + mandatory true; + } + } + } + } + + grouping debug-disable-action { + action disable { + description + "Disable the specific debug filter"; + + input { + leaf item { + type boolean; + default true; + } + } + output { + leaf response { + type string; + mandatory true; + } + } + } + } + + + grouping debug-default-actions { + uses arc-dbg:debug-enable-action; + uses arc-dbg:debug-disable-action; + } + + grouping debug-component-top { + list component-debug-items { + key "item-name"; + + leaf item-name { + type string; + } + + leaf enabled { + type boolean; + default false; + } + + uses arc-dbg:debug-default-actions; + } + } + + grouping ip-address-match-filter { + leaf-list ip-address-matches { + description + "Filter with one or more IP addresses to match"; + config false; + type inet:ip-address; + } + + action ip-address-match { + description + "One or more IP addresses to match"; + + input { + leaf-list addresses { + type inet:ip-address; + } + } + output { + leaf response { + type string; + mandatory true; + } + } + } + } + + grouping sysid-match-filter { + leaf-list system-id-matches { + description + "Filter with one or more System-Ids to match"; + config false; + type oc-isis-types:system-id; + } + + action system-id-match { + description + "One or more System-Ids to match"; + + input { + leaf-list system-ids { + type oc-isis-types:system-id; + } + } + output { + leaf response { + type string; + mandatory true; + } + } + } + } + + grouping ip-prefix-match-filter { + leaf-list ip-prefix-matches { + description + "Filter with one or more IP Prefixes to match"; + config false; + type inet:ip-prefix; + } + + action ip-prefix-match { + description + "One or more IP Prefixes to match"; + + input { + leaf-list prefixes { + type inet:ip-prefix; + } + } + output { + leaf response { + type string; + mandatory true; + } + } + } + } + + grouping intf-match-filter { + leaf-list interface-matches { + description + "Filter with one or more interfaces to match"; + config false; + type string; + } + + action interface-match { + description + "One or more interfaces to match"; + + input { + leaf-list interfaces { + type string; + } + } + output { + leaf response { + type string; + mandatory true; + } + } + } + } + + grouping arrcus-debug-protocols-top { + container protocols { + description + "The routing protocols that are enabled for this + network-instance."; + config false; + + list protocol { + key "identifier name"; + config false; + + description + "A process (instance) of a routing protocol. Some + systems may not support more than one instance of + a particular routing protocol"; + + leaf identifier { + description + "The protocol identifier for the instance"; + + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + } + + leaf name { + type string; + description + "A unique name for the protocol instance"; + } + } + } + } + + grouping debug-ni-attach-top { + list debug-attach-points { + key "component"; + + leaf component { + type string; + } + } + } + + grouping arrcus-debug-network-instances-top { + description + "Top-level grouping containing a list of network instances."; + + container network-instances { + description + "The L3 forwarding instances that are configured on the local system"; + config false; + + list network-instance { + key "name"; + min-elements 2; + max-elements 512; + config false; + + description + "Network instances configured on the local system"; + + leaf name { + type string; + description + "A unique name identifying the network instance"; + } + + uses debug-ni-attach-top; + uses arrcus-debug-protocols-top; + } + } + } + + grouping debug-global-attach-top { + list debug-attach-points { + key "component"; + + leaf component { + type string; + } + } + } + + grouping arrcus-debug-top { + container debug { + description + "Debug logging control"; + config false; + + list components { + description + "Debug the named component"; + + key "component"; + leaf component { + type string; + } + + uses default-actions; + } + + uses debug-global-attach-top; + uses arrcus-debug-network-instances-top; + + } + } + + uses arrcus-debug-top; +} diff --git a/vendor/arrcus/arcos/v521/arcos-dist-dpal.yang b/vendor/arrcus/arcos/v521/arcos-dist-dpal.yang new file mode 100644 index 000000000..ae17b5d1a --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-dist-dpal.yang @@ -0,0 +1,115 @@ +module arcos-dist-dpal { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/dist/dpal"; + prefix arc-dist-dpal; + + import arcos-runtime { + prefix arc-runtime; + } + + grouping dpal-common { + leaf object-state { + type string; + } + list internal { + key "attr-name attr-value"; + + leaf attr-name { + type string; + } + leaf attr-value { + type string; + } + } + } + + grouping dpal-stats { + container stats { + leaf total-creates { + type uint64; + } + leaf total-placeholders { + type uint64; + } + leaf total-deletes { + type uint64; + } + leaf total-updates { + type uint64; + } + leaf total-create-deferrals { + type uint64; + } + leaf total-update-deferrals { + type uint64; + } + leaf total-delete-deferrals { + type uint64; + } + } + } + + grouping dpal-top { + container dpal { + description + "Arrcus Data Plane Abstraction Layer (DPAL) internals"; + + list object-type { + key "type"; + + config false; + + leaf type { + type string; + } + + uses dpal-stats; + + container generic-entries { + list entry { + key "key"; + + leaf key { + type string; + } + + leaf key-octets { + type binary; + } + + uses dpal-common; + + list parent { + key "parent-type parent-key"; + + leaf parent-type { + type string; + } + + leaf parent-key { + type string; + } + } + + list pending-parent { + key "pending-parent-type pending-parent-key"; + + leaf pending-parent-type { + type string; + } + + leaf pending-parent-key { + type string; + } + } + } + } + } + } + } + + augment "/arc-runtime:runtime-instances" + + "/arc-runtime:runtime-instance" { + uses dpal-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-dist-fib.yang b/vendor/arrcus/arcos/v521/arcos-dist-fib.yang new file mode 100644 index 000000000..bf22025fb --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-dist-fib.yang @@ -0,0 +1,1143 @@ +module arcos-dist-fib { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/dist/fib"; + prefix arc-dist-fib; + + import openconfig-network-instance { + prefix oc-netinst; + } + import openconfig-yang-types { + prefix oc-yang; + } + import ietf-inet-types { + prefix inet; + } + import openconfig-mpls-types { + prefix oc-mplst; + } + import openconfig-types { + prefix oc-types; + } + import ietf-yang-types { + prefix yang; + } + import arcos-runtime { + prefix arc-runtime; + } + + typedef fib-path-type { + type enumeration { + enum "RECURSIVE" { + value 1; + } + enum "CONNECTED_V4" { + value 2; + } + enum "ADJ_RNH_V4" { + value 3; + } + enum "LOCAL_V4" { + value 4; + } + enum "GLEAN_V4" { + value 5; + } + enum "CONNECTED_V6" { + value 6; + } + enum "ADJ_RNH_V6" { + value 7; + } + enum "LOCAL_V6" { + value 8; + } + enum "GLEAN_V6" { + value 9; + } + enum "DROP" { + value 10; + } + enum "VXLAN_V4" { + value 11; + } + } + } + + grouping ipv4-nexthop-info { + container paths { + list path { + key "path-id"; + leaf path-id { + type uint32; + description + "ID of the Path"; + } + leaf path-type { + type fib-path-type; + description + "Type of the Path"; + } + leaf ip-address { + type inet:ip-address-no-zone; + description + "IP address of the Path"; + } + leaf-list push-label { + type oc-mplst:mpls-label; + description + "The MPLS label stack imposed when forwarding packets + to the nexthop "; + } + leaf nh-tunnel-id { + type uint32; + description + "VXLAN Tunnel id for the nexthop"; + } + leaf nh-tunnel-vni-id { + type uint32; + description + "VXLAN Tunnel vni id for the nexthop"; + } + leaf rtep-mac { + type oc-yang:mac-address; + description + "Remote tunnel-endpoint MAC address for a vxlan tunnel nexthop"; + } + leaf interface { + type string; + description + "Name of the interface for the connected nexthop type"; + } + leaf network-instance { + type string; + description + "Network Instance name"; + } + leaf num-coll-paths { + type uint32; + description + "Number of collapsed paths downloaded to hardware. + Applicable only if this path is a recursive path"; + } + leaf-list coll-path-id { + type uint32; + description + "List of collapsed Path ids downloaded to hardware"; + } + leaf-list igp-path-id { + type uint32; + description + "List of underlying igp path ids. Applicable only + if the path is a a recursive path"; + } + leaf igp-path-type { + type uint32; + description + "IGP path type pointed by this path. + Applicable only if this path is a recursive labelled path"; + } + } + } + } + + grouping ipv6-nexthop-info { + container paths { + list path { + key "path-id"; + leaf path-id { + type uint32; + description + "ID of the Path"; + } + leaf path-type { + type fib-path-type; + description + "Type of the Path"; + } + leaf ip-address { + type inet:ip-address-no-zone; + description + "IP address of the Path"; + } + leaf-list push-label { + type oc-mplst:mpls-label; + description + "The MPLS label stack imposed when forwarding packets + to the nexthop "; + } + leaf nh-tunnel-id { + type uint32; + description + "VXLAN Tunnel id for the nexthop"; + } + leaf nh-tunnel-vni-id { + type uint32; + description + "VXLAN Tunnel vni id for the nexthop"; + } + leaf rtep-mac { + type oc-yang:mac-address; + description + "Remote tunnel-endpoint MAC address for a vxlan tunnel nexthop"; + } + leaf interface { + type string; + description + "Name of the interface for the connected nexthop type"; + } + leaf network-instance { + type string; + description + "Network Instance name"; + } + leaf num-coll-paths { + type uint32; + description + "Number of collapsed paths downloaded to hardware. + Applicable only if this path is a recursive path"; + } + leaf-list coll-path-id { + type uint32; + description + "List of collapsed Path ids downloaded to hardware"; + } + leaf-list igp-path-id { + type uint32; + description + "List of underlying igp path ids. Applicable only + if the path is a a recursive path"; + } + leaf igp-path-type { + type uint32; + description + "IGP path type pointed by this path. + Applicable only if this path is a recursive labelled path"; + } + } + } + } + + grouping ipv4-adjacency-info { + container adjacencies { + list adjacency { + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "Layer 3 ip address"; + } + leaf mac-address { + type oc-yang:mac-address; + description + "Layer 2 address"; + } + leaf l2-ifindex { + type uint64; + description + "Layer 2 ifindex"; + } + } + } + } + + grouping ipv6-adjacency-info { + container adjacencies { + list adjacency { + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "Layer 3 ip address"; + } + leaf mac-address { + type oc-yang:mac-address; + description + "Layer 2 address"; + } + leaf l2-ifindex { + type uint64; + description + "Layer 2 ifindex"; + } + } + } + } + + grouping ipv4-nht-info { + container nhts { + list nht { + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "Layer 3 ip address"; + } + leaf path-id { + type uint32; + description + "The Path id corresponding to the tracked ip and interface "; + } + } + } + } + + grouping ipv6-nht-info { + container nhts { + list nht { + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "Layer 3 ip address"; + } + leaf path-id { + type uint32; + description + "The Path id corresponding to the tracked ip and interface "; + } + } + } + } + + grouping ipv4-nexthops { + container ipv4-nexthops { + config false; + list nexthop { + description + "List of Nexthops in the fib table"; + key "index"; + leaf index { + type uint32; + description + "Id of the nexthop (NHID)"; + } + leaf eos0-nexthop-index { + type uint32; + description + "Id of the eos0 nexthop (NHID)"; + } + leaf source-nexthop-index { + type uint32; + description + "Id of the source nexthop (NHID)"; + } + uses ipv4-nexthop-info; + } + } + } + + grouping ipv6-nexthops { + container ipv6-nexthops { + config false; + list nexthop { + description + "List of Nexthops in the fib table"; + key "index"; + leaf index { + type uint32; + description + "Id of the nexthop (NHID)"; + } + leaf eos0-nexthop-index { + type uint32; + description + "Id of the eos0 nexthop (NHID)"; + } + leaf source-nexthop-index { + type uint32; + description + "Id of the source nexthop (NHID)"; + } + uses ipv6-nexthop-info; + } + } + } + + grouping ipv4-interface-adjacencies { + container ipv4-interface-adjacencies { + config false; + list interface-adjacency { + description + "Adjacency information, IP to MAC binding"; + key "ifindex"; + leaf ifindex { + type uint64; + description + "Interface Index"; + } + leaf interface { + type string; + description + "Interface Name"; + } + leaf link-status { + type string; + description + "Interface status"; + } + leaf network-instance { + type oc-netinst:network-instance-ref; + description + "Reference to network instance that the interface belongs to"; + } + uses ipv4-adjacency-info; + uses ipv4-nht-info; + } + } + } + + grouping ipv6-interface-adjacencies { + container ipv6-interface-adjacencies { + config false; + list interface-adjacency { + description + "Adjacency information, IP to MAC binding"; + key "ifindex"; + leaf ifindex { + type uint64; + description + "Interface Index"; + } + leaf interface { + type string; + description + "Interface Name"; + } + leaf link-status { + type string; + description + "Interface status"; + } + leaf network-instance { + type oc-netinst:network-instance-ref; + description + "Reference to network instance that the interface belongs to"; + } + uses ipv6-adjacency-info; + uses ipv6-nht-info; + } + } + } + + grouping pub-info { + leaf nexthop-id { + type uint32; + } + leaf publish-id { + type uint32; + description + "Path/Nexthop ID published to forwarding layer"; + } + } + + grouping ipv4-prefix-entries { + container ipv4-prefix-entries { + list prefix-entry { + description + "List of prefix entries in the fib table"; + key "prefix"; + leaf prefix { + type inet:ip-prefix; + description + "The IP prefix corresponding to the route"; + } + leaf ack-required { + type boolean; + description + "Forwarding status ack was requested for this route"; + } + leaf forwarding-status-valid { + type boolean; + description + "The forwarding status reflects the status of the latest issued + operation"; + } + leaf forwarding-status { + type uint32; + description + "Last reported forwarding status"; + } + leaf cookie { + type uint64; + description + "Last received opaque cookie for this route"; + } + uses pub-info; + } + } + } + + grouping ipv6-prefix-entries { + container ipv6-prefix-entries { + list prefix-entry { + description + "List of prefix entries in the fib table"; + key "prefix"; + leaf prefix { + type inet:ip-prefix; + description + "The IP prefix corresponding to the route"; + } + leaf ack-required { + type boolean; + description + "Forwarding status ack was requested for this route"; + } + leaf forwarding-status-valid { + type boolean; + description + "The forwarding status reflects the status of the latest issued + operation"; + } + leaf forwarding-status { + type uint32; + description + "Last reported forwarding status"; + } + leaf cookie { + type uint64; + description + "Last received opaque cookie for this route"; + } + uses pub-info; + } + } + } + + grouping rnh-info { + leaf nexthop-id { + type uint32; + description + "Nexthop ID corresponding to rnh prefix given by rib"; + } + leaf rnh-res-state { + type string; + description + "RNH resolution state"; + } + leaf recur-level{ + type uint32; + description + "Recursion level if RNH is resolved"; + } + leaf num-ip-igp-paths { + type uint32; + description + "Number of underlay IP IGP paths"; + } + leaf-list ip-igp-path-id { + type uint32; + description + "List of IP IGP path IDs"; + } + leaf mpls-igp-id { + type uint32; + description + "Underlay MPLS ID"; + } + leaf mpls-igp-type { + type uint32; + description + "Underlay MPLS ID type"; + } + leaf srv6-igp-id { + type uint32; + description + "Underlay SRV6 ID"; + } + leaf srv6-igp-type { + type uint32; + description + "Underlay SRV6 ID type"; + } + } + + grouping ipv4-rnh-entries { + container ipv4-rnh-entries { + list rnh-entry { + description + "List of rnh entries"; + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "The IP address corresponding to the rnh"; + } + uses rnh-info; + } + } + } + + grouping ipv6-rnh-entries { + container ipv6-rnh-entries { + list rnh-entry { + description + "List of rnh entries"; + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "The IP address corresponding to the rnh"; + } + uses rnh-info; + } + } + } + + grouping ipv4-nht-entries { + container ipv4-nht-entries { + list nht-entry { + description + "List of Nexthop tracking requests in fib table"; + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "Address of the tracked Nexthop"; + } + leaf res-route { + type inet:ip-prefix; + description + "The prefix corresponding to the tracked nexthop"; + } + leaf-list client { + type string; + description + "List of clients tracking nexthop"; + } + } + } + } + + grouping ipv6-nht-entries { + container ipv6-nht-entries { + list nht-entry { + description + "List of Nexthop tracking requests in fib table"; + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "Address of the tracked Nexthop"; + } + leaf res-route { + type inet:ip-prefix; + description + "The prefix corresponding to the tracked nexthop"; + } + leaf-list client { + type string; + description + "List of clients tracking nexthop"; + } + } + } + } + + grouping ipv4-label-entries { + container ipv4-label-entries { + list label-entry { + description + "Label entries in the fib table"; + key "local-label"; + leaf local-label { + type uint32; + description + "The FEC Label entry (ILM) associated with the fib table"; + } + uses pub-info; + } + } + } + + grouping ipv6-label-entries { + container ipv6-label-entries { + list label-entry { + description + "Label entries in the fib table"; + key "local-label"; + leaf local-label { + type uint32; + description + "The FEC Label entry (ILM) associated with the fib table"; + } + uses pub-info; + } + } + } + + grouping total-stats { + container all-stats { + leaf total-count { + type yang:counter64; + description + "Total number of objects present in the fib table"; + } + leaf total-creates { + type yang:counter64; + description + "Total number of creates received for the object"; + } + leaf total-updates { + type yang:counter64; + description + "Total number of updates received for the object"; + } + leaf total-deletes { + type yang:counter64; + description + "Total number of deletes received for the object"; + } + leaf total-drop-suppress { + type yang:counter64; + } + leaf total-duplicate-updates { + type yang:counter64; + description + "Total number of duplicate updates received for the object"; + } + } + } + + grouping curr-ids { + container all-ids { + leaf id-count { + type yang:counter32; + description + "Total number of container IDs in use"; + } + } + } + + grouping txl-stats { + container txlist-stats { + leaf retry-count { + type yang:counter64; + description + "Total number of ipc retries"; + } + } + } + + grouping restart-stats { + container all-stats { + leaf stale-marks { + type yang:counter64; + description + "Total number of objects marked stale"; + } + leaf stale-refreshes { + type yang:counter64; + description + "Total number of objects refreshed"; + } + leaf stale-sweeps { + type yang:counter64; + description + "Total number of objects swept"; + } + leaf last-stale-marks { + type yang:counter64; + } + leaf last-stale-refreshes { + type yang:counter64; + } + leaf last-stale-sweeps { + type yang:counter64; + } + } + } + + grouping stats { + description + "Table specific counters"; + container routes { + description + "Number of Routes"; + uses total-stats; + } + container rnhs { + description + "Number of RNHs"; + uses total-stats; + } + container cross-af-rnhs { + description + "Number of Cross AF RNHs"; + uses total-stats; + } + container labels { + description + "Number of Labels"; + uses total-stats; + } + container adj-routes { + description + "Number of adj Routes"; + uses total-stats; + } + container nexthops { + description + "Number of Nexthops (nhids)"; + uses total-stats; + } + container paths { + description + "Number of Paths (path-ctx)"; + uses total-stats; + } + container tables { + description + "Number of Tables "; + uses total-stats; + } + container ids { + description + "Current Number of Containers Ids allocated "; + uses curr-ids; + } + container txlist { + description + "Txlist statistics"; + uses txl-stats; + } + } + + grouping rib-restart-stats { + description + "RIB restartability Table specific counters"; + container routes { + description + "Number of Routes"; + uses restart-stats; + } + container rnhs { + description + "Number of RNHs"; + uses restart-stats; + } + container labels { + description + "Number of Labels"; + uses restart-stats; + } + container nexthops-recursive { + description + "Number of Recursive Nexthops (nhids)"; + uses restart-stats; + } + container nexthops-non-recursive { + description + "Number of Non-Recursive Nexthops (nhids)"; + uses restart-stats; + } + } + + grouping ipv4-stats-entries { + description + "grouping for FIB statistics"; + container ipv4-stats-entries { + config false; + description + "container for FIB stats"; + uses stats; + } + container ipv4-rib-restart-stats { + config false; + description + "FIB Counters related to RIB restartability "; + uses rib-restart-stats; + } + } + + grouping ipv6-stats-entries { + description + "grouping for FIB statistics"; + container ipv6-stats-entries { + config false; + description + "container for FIB stats"; + uses stats; + } + container ipv6-rib-restart-stats { + config false; + description + "FIB Counters related to RIB restartability "; + uses rib-restart-stats; + } + } + + grouping path-ctx-cmn { + description + "Path information"; + leaf path-type { + type fib-path-type; + description + " Indicates Path type "; + } + leaf nh-tableid { + type uint32; + } + leaf ip-address { + type inet:ip-address-no-zone; + description + "The nexthop IP address that is to be used for the route"; + } + leaf ifindex { + type uint64; + } + leaf flags { + type uint32; + } + leaf reference-count { + type uint32; + description + "Indicates number of nexthops using this path"; + } + } + + grouping ipv4-path-ctx { + container ipv4-path-ctx { + config false; + list path { + description + "List of Paths present in fib table"; + key "path-id"; + leaf path-id { + type uint32; + description + "Indicates the ID of the path"; + } + uses path-ctx-cmn; + } + } + } + + grouping ipv6-path-ctx { + container ipv6-path-ctx { + config false; + list path { + description + "List of Paths present in fib table"; + key "path-id"; + leaf path-id { + type uint32; + description + "Indicates the ID of the path"; + } + uses path-ctx-cmn; + } + } + } + + grouping ids-cmn { + description + "Container ID information"; + leaf id-type { + type string; + description + "Specifies if the ID allocated is for path or NH "; + } + leaf reference-count { + type uint32; + description + "Refcount for the ID"; + } + leaf path-type { + type fib-path-type; + description + "Indicates Path type if the ID corresponds to a path"; + } + leaf-list pathid { + type uint32; + } + leaf ip-address { + type inet:ip-address-no-zone; + description + "Specifies the NH address corresponding to the path + if applicable"; + } + } + + grouping ipv4-container-ids { + container ipv4-container-ids { + config false; + list container-id { + description + "Container ID Information for FIB table"; + key "id"; + leaf id { + type uint32; + description + "Container ID allocated by FIB"; + } + uses ids-cmn; + } + } + } + + grouping ipv6-container-ids { + container ipv6-container-ids { + config false; + list container-id { + description + "Container ID Information for FIB table"; + key "id"; + leaf id { + type uint32; + description + "Container ID allocated by FIB"; + } + uses ids-cmn; + } + } + } + + grouping ipv4-tunnels { + description + "Grouping for tunnel entries by lookup keys"; + container tunnels { + config false; + list tunnel { + key "tunnel-id"; + description + "tunnel-id used for lookup"; + leaf tunnel-id { + type uint32; + description + "tunnel-ID associated with this tunnel"; + } + leaf ltep-ip-address { + type inet:ip-address-no-zone; + description + "local tunnel-endpoint ip address"; + } + leaf rtep-ip-address { + type inet:ip-address-no-zone; + description + "remote tunnel-endpoint ip address"; + } + leaf tunnel-table-id { + type uint32; + description + "underlay table-id for this tunnel"; + } + leaf port { + type uint16; + description + "UDP port for this tunnel"; + } + leaf tunnel-encap { + type enumeration { + enum "VXLAN" { + description + "VXLAN tunnel encapsulation"; + } + } + description + "tunnel encapsulation"; + } + uses pub-info; + } + } + } + + grouping fib-top { + description + "Top level grouping for fib control plane routes"; + container fib { + config false; + + container network-instances { + list network-instance { + key "name"; + description + "The L3 forwarding instances that are configured on the local system"; + + leaf name { + type oc-netinst:network-instance-ref; + description + "A unique name identifying the network-instance"; + } + + container address-families { + list address-family { + key "address-family"; + description + "The forwarding table associated with an address family."; + + leaf address-family { + type identityref { + base oc-types:ADDRESS_FAMILY; + } + mandatory true; + } + uses ipv4-prefix-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-rnh-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-nht-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-nexthops { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-label-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-interface-adjacencies { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-path-ctx { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-container-ids { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-tunnels { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-stats-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv6-prefix-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-rnh-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-nht-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-nexthops { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-label-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-interface-adjacencies { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-path-ctx { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-container-ids { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-stats-entries { + when "address-family = 'oc-types:IPV6'"; + } + } + } + } + } + } + } + + augment "/arc-runtime:runtime-instances" + + "/arc-runtime:runtime-instance" { + uses fib-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-dpal.yang b/vendor/arrcus/arcos/v521/arcos-dpal.yang new file mode 100644 index 000000000..06b371c93 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-dpal.yang @@ -0,0 +1,122 @@ +module arcos-dpal { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/dpal"; + prefix arc-dpal; + + grouping dpal-common { + leaf state { + type string; + } + list internal { + key "attr-name attr-value"; + + leaf attr-name { + type string; + } + leaf attr-value { + type string; + } + } + } + + grouping dpal-stats { + container stats { + leaf total-creates { + type uint64; + } + leaf total-placeholders { + type uint64; + } + leaf total-deletes { + type uint64; + } + leaf total-updates { + type uint64; + } + leaf total-create-deferrals { + type uint64; + } + leaf total-update-deferrals { + type uint64; + } + leaf total-delete-deferrals { + type uint64; + } + leaf total-create-failures { + type uint64; + } + leaf total-update-failures { + type uint64; + } + leaf total-delete-failures { + type uint64; + } + leaf total-retries { + type uint64; + } + leaf total-in-retry-q { + type uint64; + } + leaf total-in-slow-retry-q { + type uint64; + } + } + } + + container dpal { + description + "Arrcus Data Plane Adaptation Layer - DPAL (tm) - internals"; + + list object-type { + key "object-type"; + + config false; + + leaf object-type { + type string; + } + + uses dpal-stats; + + container generic-entries { + list entry { + key "key"; + + leaf key { + type string; + } + + leaf key-octets { + type binary; + } + + uses dpal-common; + + list parent { + key "parent-type parent-key"; + + leaf parent-type { + type string; + } + + leaf parent-key { + type string; + } + } + + list pending-parent { + key "pending-parent-type pending-parent-key"; + + leaf pending-parent-type { + type string; + } + + leaf pending-parent-key { + type string; + } + } + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-event.yang b/vendor/arrcus/arcos/v521/arcos-event.yang new file mode 100644 index 000000000..8c3fe30a4 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-event.yang @@ -0,0 +1,192 @@ +module arcos-event { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/event"; + prefix arc-evt; + + identity EVENT_TYPE { + description + "Base identity for types of EVENT sets"; + } + + identity ON_BOOT { + base EVENT_TYPE; + description + "on start event"; + } + + identity ON_ARCOS_START { + base EVENT_TYPE; + description + "on arcos start"; + } + + identity ON_CONFIG_START { + base EVENT_TYPE; + description + "on config start"; + } + + grouping action-config { + description + "Config of action type"; + + leaf execute { + type string; + mandatory true; + description + "Specifies the action"; + } + } + + grouping action-top { + description + "EVENT action type top level container"; + + container actions { + description + "Enclosing container for list of EVENT actions associated + with an entry"; + + container config { + description + "Config data for EVENT actions"; + + uses action-config; + } + + container state { + config false; + description + "State information for EVENT actions"; + + uses action-config; + } + } + } + + grouping event-list-entries-config { + description + "Event List Entries config."; + + leaf sequence-id { + type uint32; + description + "The sequence id determines the order in which EVENT entries + are applied. The sequence id must be unique for each entry + the relying only on order in the list."; + } + + leaf execute { + type string; + mandatory true; + description + "Specifies the action"; + } + } + + grouping event-list-entries-top { + description + "Event list entries to level container"; + + container event-entries { + description + "Event list entries container"; + + list event-entry { + key "sequence-id"; + max-elements 4; + min-elements 1; + description + "List of EVENT entries comprising an Event set"; + + leaf sequence-id { + type leafref { + path "../config/sequence-id"; + } + description + "references the list key"; + } + + container config { + description + "Event list entries config"; + uses event-list-entries-config; + } + + container state { + config false; + description + "State information for EVENT entries"; + uses event-list-entries-config; + } + } + } + } + + grouping event-set-config { + description + "Event Control List config"; + + leaf description { + type string; + description + "Description, or comment, for the EVENT set"; + } + } + + grouping event-set-top { + description + "Event list entries variables top level container"; + + container event-sets { + description + "Event list entries variables enclosing container"; + + list event { + key "type"; + description + "List of EVENT sets, each comprising of a list of EVENT + entries"; + + leaf type { + type identityref { + base EVENT_TYPE; + } + description + "Reference to the type list key"; + } + + container config { + description + "Event list config"; + uses event-set-config; + } + + container state { + config false; + description + "Event list state information"; + + uses event-set-config; + } + uses event-list-entries-top; + } + } + } + + grouping event-top { + description + "Top level grouping for EVENT data and structure"; + + container event { + description + "Top level enclosing container for EVENT model config + and operational state data"; + + uses event-set-top; + } + } + + uses event-top; +} + diff --git a/vendor/arrcus/arcos/v521/arcos-evpn.yang b/vendor/arrcus/arcos/v521/arcos-evpn.yang new file mode 100644 index 000000000..f3adae6f8 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-evpn.yang @@ -0,0 +1,511 @@ +module arcos-evpn { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/evpn"; + prefix arc-evpn; + + import ietf-yang-types { + prefix yang; + } + import ietf-inet-types { + prefix inet; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-network-instance { + prefix oc-netinst; + } + import openconfig-network-instance-types { + prefix oc-ni-types; + } + import arcos-openconfig-network-instance-types { + prefix arc-oc-ni-types; + } + import openconfig-yang-types { + prefix oc-yang; + } + import iana-if-type { + prefix ianaift; + } + import openconfig-if-ip { + prefix oc-ip; + } + import arcos-vxlan { + prefix arc-overlay; + } + import openconfig-vlan-types { + prefix oc-vlan-types; + } + import openconfig-vlan { + prefix oc-vlan; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS EVPN domain. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-03-18 { + description "Updated to support MPLS"; + } + + revision 2019-10-31 { + description "Initial version"; + } + + grouping evpn-global-config { + description + "EVPN related global configuration parameters"; + + leaf anycast-gateway-mac { + type yang:mac-address; + description + "MAC address to use for EVPN anycast L3 gateway interfaces"; + } + leaf df-election-time { + type uint32 { + range "1 .. 3600"; + } + units seconds; + description + "How long (in seconds) before performing Designated Forwarder election"; + } + } + + grouping duplicate-mac-config { + description + "Configuration data for duplicate MAC detection"; + + leaf window { + type uint32 { + range "5 .. 600"; + } + units seconds; + description + "Time window (in seconds) for detecting duplicate MACs"; + } + leaf threshold { + type uint32 { + range "2 .. 100"; + } + description + "Number of moves within the detection window time to be considered a duplicate"; + } + leaf auto-recovery-time { + type uint32 { + range "0 .. 360"; + } + units minutes; + description + "How long (in minutes) before the duplicate MAC state for an + address is cleared. Setting to zero disables auto-recovery"; + } + } + + grouping duplicate-mac-global-top { + description + "Top-level grouping for duplicate MAC detection data at global level"; + + container duplicate-mac-detection { + description + "Parameters related to detecting duplicate MAC addresses"; + + container config { + description + "Configuration data for the duplicate MAC detection"; + + uses duplicate-mac-config; + } + + container state { + config false; + description + "Operational state data for duplicate MAC detection"; + + uses duplicate-mac-config; + } + } + } + + grouping esi-pruned-counters { + description + "Split horizon group filtered ESI pruned stats"; + + leaf esi-pruned-pkts { + type oc-yang:counter64; + description + "Number of Split horizon group filtered ESI pruned packets"; + } + + leaf esi-pruned-octets { + type oc-yang:counter64; + description + "Number of Split horizon group filtered ESI pruned bytes"; + } + } + + grouping esi-info { + description + "Grouping for EVPN ESI Information"; + + container esi-info { + description + "EVPN ESI information"; + config false; + + container counters { + description + "Split horizon group filtered ESI pruned stats"; + config false; + + uses esi-pruned-counters; + } + + list esi { + key "entry-esi"; + description + "ESI used for lookup"; + + leaf entry-esi { + type yang:hex-string; + description + "Ethernet Segment Identifier"; + } + leaf local-interface { + type oc-if:interface-id; + description + "Local Interface for this ESI"; + } + leaf oper-status { + type enumeration { + enum UP { + value 1; + description + "Operationally Up"; + } + enum DOWN { + value 2; + description + "Operationally Down"; + } + } + } + leaf lacp-status { + type enumeration { + enum ACTIVE { + value 1; + description + "LACP PDUs are being actively received"; + } + enum INACTIVE { + value 2; + description + "LACP PDUs are not being received"; + } + } + } + leaf-list ordered-pe-list { + type inet:ip-address-no-zone; + description "Ordered list of PEs participating in DF election, including ourselves"; + } + leaf our-ordinal { + type uint32; + description "Our ordinal value in the ordered list of PEs"; + } + list network-instance { + key "entry-network-instance"; + description + "Layer 2 Network Instance for lookup"; + + leaf entry-network-instance { + type oc-netinst:network-instance-ref; + description "Layer 2 Network Instance"; + } + leaf designated-forwarder { + type inet:ip-address-no-zone; + description + "IP Address of Designated Fowarder for this network instance"; + } + } + } + } + } + + grouping arp-nd-supression-counters { + container arp-nd-supression-counters { + + description + "Number of ARP/ND packets supressed"; + config false; + + leaf arp-supression-counters { + type uint64; + description + "Number of ARP broadcast packets supressed"; + } + + leaf nd-supression-counters { + type uint64; + description + "Number of Neighbor solicitation packets supressed"; + } + } + } + + grouping evpn-global-top { + description + "Top-level grouping for global EVPN data"; + + container config { + description + "Global Configuration data for EVPN"; + uses evpn-global-config; + } + container state { + config false; + description + "Global Operational state data for EVPN"; + uses evpn-global-config; + } + + uses esi-info; + uses duplicate-mac-global-top; + uses arp-nd-supression-counters; + } + + grouping evpn-top { + description + "Top-level grouping for EVPN configuration and opstate data."; + + container evpn { + description + "EVPN related parameters"; + + uses evpn-global-top; + } + } + + uses evpn-top; + + grouping vpws-service-id-config { + description + "Configuration data for EVPN VPWS Service IDs"; + + leaf local { + type uint32 { + range "1 .. 16777214"; + } + mandatory true; + description + "Unique local VPWS service instance identifier"; + } + leaf remote { + type uint32 { + range "1 .. 16777214"; + } + mandatory true; + description + "Unique remote VPWS service instance identifier"; + } + } + + grouping vpws-interface-top { + description + "Interface grouping for EVPN VPWS configuration and opstate data."; + + container vpws-service-id { + description + "EVPN VPWS interface related parameters"; + + container config { + description + "VPWS Interface configuration"; + uses vpws-service-id-config; + } + container state { + config false; + description + "VPWS Interface state"; + uses vpws-service-id-config; + } + } + } + + grouping evi-ni-top { + + description + "Network-instance level grouping for EVPN EVI configuration and + opstate data."; + + list evi { + key "evi-id"; + max-elements 1; + description "EVPN Instance ID"; + must "(boolean(current()/../../arc-overlay:vni) != 'true')" { + error-message "An EVPN network-instance can only be either VXLAN or MPLS"; + } + + leaf evi-id { + type uint32 { + range "1 .. 65534"; + } + description "EVPN Instance ID"; + must "count(/oc-if:interfaces/oc-if:interface[oc-if:name=current()" + + "/../../oc-netinst:name]" + + "/oc-if:subinterfaces/oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses" + + "/oc-ip:address/oc-ip:vrrp/oc-ip:vrrp-group) = 0" { + error-message "VRRP may not be configured on EVPN MPLS enabled VLANs"; + } + must "count(/oc-if:interfaces/oc-if:interface[oc-if:name=current()" + + "/../../oc-netinst:name]" + + "/oc-if:subinterfaces/oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses" + + "/oc-ip:address/oc-ip:vrrp/oc-ip:vrrp-group) = 0" { + error-message "VRRP may not be configured on EVPN MPLS enabled VLANs"; + } + } + + leaf arp-nd-suppression { + when "../../oc-netinst:type != 'arc-oc-ni-types:L2P2P_EVPN' and " + + "../../oc-netinst:type != 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + description + "ARP/ND Suppression setting for an L2VLAN network instance"; + } + type boolean; + default true; + description "Controls ARP and ND Suppression"; + } + + leaf centralized-evpn-routing { + when "../../oc-netinst:type != 'arc-oc-ni-types:L2P2P_EVPN' and " + + "../../oc-netinst:type != 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + description + "Control centralized EVPN routing when + a network instance is a Layer 2 instance"; + } + type boolean; + default false; + description + "Enables centralized EVPN routing with the SVI configured on this L2 VNI"; + } + + container vlan-ids { + when "../../../oc-netinst:config/" + + "oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + description + "VLAN IDs for a VLAN-Aware Bundle network instance"; + } + list vlan-id { + key "vlan-id"; + description "VLANs associated with EVI under VLAN Aware Bundle"; + leaf vlan-id { + type leafref { + path "/oc-vlan:vlans/oc-vlan:vlan/oc-vlan:vlan-id"; + } + } + } + } + } + } + + grouping evpn-ni-top { + + description "Network-instance level grouping for EVPN configuration data."; + + leaf arp-nd-suppression { + type boolean; + default true; + description + "Controls ARP and ND Suppression for L2 VNIs with a L3 subinterface"; + } + + leaf centralized-evpn-routing { + type boolean; + default false; + description + "Enables centralized EVPN routing with the SVI configured on this NI"; + } + } + + grouping evpn-interface-config { + description + "EVPN configuration for interface"; + + leaf esi { + type string { + pattern "00(:[0-9a-fA-F]{2}){9}"; + } + must "starts-with(current(), '00')" { + error-message "Invalid entry: ESI type must be 0"; + } + must "current() != '00:00:00:00:00:00:00:00:00:00'" { + error-message "Invalid entry: ESI 0 is reserved"; + } + + description + "Ethernet Segment Identifier"; + } + } + + grouping evpn-interface-top { + description + "Top-level grouping for configuration of interface EVPN parameters"; + + container evpn { + description + "Container for EVPN interface configuration on interfaces"; + + container config { + description + "EVPN Configuration parameters"; + uses evpn-interface-config; + } + + container state { + config false; + description + "EVPN state information"; + uses evpn-interface-config; + } + } + } + + augment "/oc-if:interfaces/oc-if:interface" { + when "oc-if:config/oc-if:type = 'ianaift:ieee8023adLag'" { + description "Active when the interface is set to type LAG"; + } + uses evpn-interface-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:interfaces/oc-netinst:interface" { + when "../../oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2P2P_EVPN'"; + uses vpws-interface-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:config" { + when "(oc-netinst:type = 'arc-oc-ni-types:L2P2P_EVPN') or " + + "(oc-netinst:type = 'oc-ni-types:L2VLAN') or " + + "(oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE')"; + uses evi-ni-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:config" { + when "oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'"; + uses evpn-ni-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-features.yang b/vendor/arrcus/arcos/v521/arcos-features.yang new file mode 100644 index 000000000..00113b48d --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-features.yang @@ -0,0 +1,138 @@ +module arcos-features { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/features"; + prefix arc-features; + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: eng@arrcus.com"; + + description + "YANG data-model for feature name definitions + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision "2022-03-17" { + description + "Add feature name for WRED"; + } + + identity ARCOS_FEATURE { + description + "Base type for ARCOS features"; + } + + identity ARCOS_MPLS { + base ARCOS_FEATURE; + description + "ArcOS implementation of MPLS"; + } + + identity ARCOS_QoS { + base ARCOS_FEATURE; + description + "ArcOS implementation of QoS"; + } + + identity ARCOS_SUBIF { + base ARCOS_FEATURE; + description + "ArcOS implementation of Subinterfaces"; + } + + identity ARCOS_SFLOW { + base ARCOS_FEATURE; + description + "ArcOS implementation of Sflow"; + } + + identity ARCOS_RIOT { + base ARCOS_FEATURE; + description + "ArcOS implementation of RIOT"; + } + + identity ARCOS_ICMP_SRC_REWRITE { + base ARCOS_FEATURE; + description + "ArcOS implementation of ICMP source address rewrite"; + } + + identity ARCOS_MONITOR { + base ARCOS_FEATURE; + description + "ArcOS implementation of Mirroring"; + } + + identity ARCOS_QOS_WRED { + base ARCOS_FEATURE; + description + "ArcOS implementation of WRED for QoS"; + } + + identity ARCOS_FRONT_PANEL_ZTP { + base ARCOS_FEATURE; + description + "ArcOS implementation of ZTP via Front Panel Intefaces."; + } + + identity ARCOS_EXTERNAL_TCAM { + base ARCOS_FEATURE; + description + "ArcOS implementation of external TCAM"; + } + + identity ARCOS_SRV6_EXT_TNL { + base ARCOS_FEATURE; + description + "ArcOS implementation of optimization for high tunnel scale"; + } + + identity ARCOS_PTP_TRANSPARENT_CLOCK { + base ARCOS_FEATURE; + description + "ArcOS implementation of ptp transparent clock"; + } + + identity ARCOS_PTP_BOUNDARY_CLOCK { + base ARCOS_FEATURE; + description + "ArcOS implementation of ptp boundary clock"; + } + + identity ARCOS_MUP1 { + base ARCOS_FEATURE; + description + "ArcOS implementation of MUP1"; + } + + container features { + list feature { + key "name"; + description + "List of features"; + min-elements 1; + + leaf name { + type identityref { + base ARCOS_FEATURE; + } + description + "Name of feature"; + } + + leaf supported { + type boolean; + mandatory true; + description + "Whether feature is supported or not"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-fib.yang b/vendor/arrcus/arcos/v521/arcos-fib.yang new file mode 100644 index 000000000..8421931c7 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-fib.yang @@ -0,0 +1,1551 @@ +module arcos-fib { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/fib"; + prefix arc-fib; + + import openconfig-network-instance { + prefix oc-netinst; + } + import openconfig-network-instance-types { + prefix oc-ni-types; + } + import openconfig-yang-types { + prefix oc-yang; + } + import ietf-inet-types { + prefix inet; + } + import openconfig-mpls-types { + prefix oc-mplst; + } + import openconfig-types { + prefix oc-types; + } + import ietf-yang-types { + prefix yang; + } + + import arcos-srv6-types { + prefix arc-srv6-types; + } + + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place, + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module lists the FIB related information. + Copyright 2019-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-12-12 { + description + "* Add flood-and-learn attribute to support static vxlan."; + } + + revision 2021-11-11 { + description + "* Add ifindex to label entry."; + } + + typedef fib-path-type { + type enumeration { + enum "RECURSIVE" { + value 1; + } + enum "CONNECTED_V4" { + value 2; + } + enum "ADJ_RNH_V4" { + value 3; + } + enum "LOCAL_V4" { + value 4; + } + enum "GLEAN_V4" { + value 5; + } + enum "CONNECTED_V6" { + value 6; + } + enum "ADJ_RNH_V6" { + value 7; + } + enum "LOCAL_V6" { + value 8; + } + enum "GLEAN_V6" { + value 9; + } + enum "DROP" { + value 10; + } + enum "VXLAN_V4" { + value 11; + } + enum "VXLAN_V6" { + value 12; + } + } + } + + grouping loc-args { + container locator-args { + leaf loc-arg { + type inet:ip-address-no-zone; + description + "The mobile gateway locator address"; + } + leaf loc-len { + type uint32; + description + "Length in bits of the locator portion of the address"; + } + } + } + + grouping v4-next-hop-info { + container paths { + list ipv4-path { + key "path-id"; + leaf path-id { + type uint32; + description + "ID of the Path"; + } + leaf path-type { + type fib-path-type; + description + "Type of the Path"; + } + leaf ip-address { + type inet:ip-address-no-zone; + description + "IP address of the Path"; + } + leaf-list push-label { + type oc-mplst:mpls-label; + description + "The MPLS label stack imposed when forwarding packets + to the next-hop "; + } + leaf nh-tunnel-id { + type uint32; + description + "VXLAN Tunnel id for the nexthop"; + } + leaf nh-tunnel-vni-id { + type uint32; + description + "VXLAN Tunnel vni id for the nexthop"; + } + leaf rtep-mac { + type oc-yang:mac-address; + description + "Remote tunnel-endpoint MAC address for a vxlan tunnel next-hop"; + } + leaf interface { + type string; + description + "Name of the interface for the connected nexthop type"; + } + leaf network-instance { + type string; + description + "Network Instance name"; + } + leaf num-coll-paths { + type uint32; + description + "Number of collapsed paths downloaded to hardware. + Applicable only if this path is a recursive path"; + } + leaf-list igp-path-id { + type uint32; + description + "List of underlying igp path ids. Applicable only + if the path is a a recursive path"; + } + leaf igp-path-type { + type uint32; + description + "IGP path type pointed by this path. + Applicable only if this path is a recursive labelled path"; + } + leaf backup { + type boolean; + description + "Path is backup"; + } + } + } + } + + grouping v6-next-hop-info { + container paths { + list ipv6-path { + key "path-id"; + leaf path-id { + type uint32; + description + "ID of the Path"; + } + leaf path-type { + type fib-path-type; + description + "Type of the Path"; + } + leaf ip-address { + type inet:ip-address-no-zone; + description + "IP address of the Path"; + } + leaf-list push-label { + type oc-mplst:mpls-label; + description + "The MPLS label stack imposed when forwarding packets + to the next-hop "; + } + leaf nh-tunnel-id { + type uint32; + description + "VXLAN Tunnel id for the nexthop"; + } + leaf nh-tunnel-vni-id { + type uint32; + description + "VXLAN Tunnel vni id for the nexthop"; + } + leaf rtep-mac { + type oc-yang:mac-address; + description + "remote tunnel-endpoint MAC address for a vxlan tunnel next-hop"; + } + leaf interface { + type string; + description + "Name of the interface for the connected nexthop type"; + } + leaf network-instance { + type string; + description + "Network Instance name"; + } + leaf num-coll-paths { + type uint32; + description + "Number of collapsed paths downloaded to hardware. + Applicable only if this path is a recursive path"; + } + leaf-list coll-path-id { + type uint32; + description + "List of collapsed Path ids downloaded to hardware"; + } + leaf-list igp-path-id { + type uint32; + description + "List of underlying igp path ids. Applicable only + if the path is a a recursive path"; + } + leaf igp-path-type { + type uint32; + description + "IGP path type pointed by this path. + Applicable only if this path is a recursive labelled path"; + } + leaf backup { + type boolean; + description + "Path is backup"; + } + } + } + } + + grouping v6-adj-info { + container adjs { + list ipv6-adj-entry { + key "ipaddr"; + leaf ipaddr { + type inet:ip-address-no-zone; + description + "Layer 3 ip address"; + } + leaf hwaddr { + type oc-yang:mac-address; + description + "Layer 2 address"; + } + leaf l2ifindex { + type uint64; + description + "Layer 2 ifindex"; + } + } + } + } + + grouping v6-nht-info { + container nhts { + list ipv6-nht-entry { + key "nht-ip"; + leaf nht-ip { + type inet:ipv6-address-no-zone; + description + "Layer 3 ip address"; + } + leaf path-id { + type uint32; + description + "The Path id corresponding to the tracked ip and interface "; + } + } + } + } + + grouping v4-adj-info { + container adjs { + list ipv4-adj-entry { + key "ipaddr"; + leaf ipaddr { + type inet:ip-address-no-zone; + description + "Layer 3 ip address"; + } + leaf hwaddr { + type oc-yang:mac-address; + description + "Layer 2 address"; + } + leaf l2ifindex { + type uint64; + description + "Layer 2 ifindex"; + } + } + } + } + + grouping v4-nht-info { + container nhts { + list ipv4-nht-entry { + key "nht-ip"; + leaf nht-ip { + type inet:ip-address-no-zone; + description + "Layer 3 ip address"; + } + leaf path-id { + type uint32; + description + "The Path id corresponding to the tracked ip and interface "; + } + } + } + } + + grouping ipv4-next-hops { + container ipv4-next-hops { + config false; + list ipv4-nexthop-entry { + description + "List of Nexthops in the IPV4 fib table"; + key "index"; + leaf index { + type uint32; + description + "Id of the nexthop (NHID)"; + } + leaf eos0-nexthop-index { + type uint32; + description + "Id of the eos0 nexthop (NHID)"; + } + leaf source-nexthop-index { + type uint32; + description + "Id of the source nexthop (NHID)"; + } + leaf level { + type uint32; + description + "Level of the nexthop"; + } + leaf flags { + type uint32; + description + "Nexthop flags"; + } + leaf protection-tracker-id { + type uint64; + description + "Protection tracker pointed by this path"; + } + uses v4-next-hop-info; + } + } + } + + grouping ipv6-next-hops { + container ipv6-next-hops { + config false; + list ipv6-nexthop-entry { + description + "List of Nexthops in the IPV6 fib table"; + key "index"; + leaf index { + type uint32; + description + "Id of the nexthop (NHID)"; + } + leaf eos0-nexthop-index { + type uint32; + description + "Id of the eos0 nexthop (NHID)"; + } + leaf source-nexthop-index { + type uint32; + description + "Id of the source nexthop (NHID)"; + } + leaf level { + type uint32; + description + "Level of the nexthop"; + } + leaf flags { + type uint32; + description + "Nexthop flags"; + } + leaf protection-tracker-id { + type uint64; + description + "Protection tracker pointed by this path"; + } + uses v6-next-hop-info; + } + } + } + + grouping ipv4-adj { + container ipv4-adj { + config false; + list ipv4-adjacency { + description + "IPV4 adjacency information, IP to MAC binding"; + key "if-index"; + leaf if-index { + type uint64; + description + "Interface Index"; + } + leaf interface { + type string; + description + "Interface Name"; + } + leaf link-status { + type string; + description + "Interface status"; + } + leaf vrf-id { + type uint32; + description + "VRF id which the interface belongs to"; + } + uses v4-adj-info; + uses v4-nht-info; + } + } + } + + grouping ipv6-adj { + container ipv6-adj { + config false; + list ipv6-adjacency { + description + "IPV6 adjacency information, IP to MAC binding"; + key "if-index"; + leaf if-index { + type uint64; + description + "Interface Index"; + } + leaf interface { + type string; + description + "Interface Name"; + } + leaf link-status { + type string; + description + "Interface status"; + } + leaf vrf-id { + type uint32; + description + "VRF id which the interface belongs to"; + } + uses v6-adj-info; + uses v6-nht-info; + } + } + } + + grouping pub-info { + leaf next-hop-id { + type uint32; + } + leaf publish-id { + type uint32; + description + "Path/Nexthop ID published to forwarding layer"; + } + } + + grouping ipv4-entries { + container ipv4-entries { + list ipv4-prefix-entry { + description + "List of IPV4 prefix entries in the fib table"; + key "prefix"; + leaf prefix { + type inet:ipv4-prefix; + description + "The IPv4 prefix corresponding to the route"; + } + leaf ack-required { + type boolean; + description + "Forwarding status ack was requested for this route"; + } + leaf forwarding-status-valid { + type boolean; + description + "The forwarding status reflects the status of the latest issued + operation"; + } + leaf forwarding-status { + type uint32; + description + "Last reported forwarding status"; + } + leaf cookie { + type uint64; + description + "Last received opaque cookie for this route"; + } + uses pub-info; + uses loc-args; + } + } + } + + grouping rnh-info { + leaf next-hop-id { + type uint32; + description + "Nexthop ID corresponding to rnh prefix given by rib"; + } + leaf rnh-res-state { + type string; + description + "RNH resolution state"; + } + leaf recur-level{ + type uint32; + description + "Recursion level if RNH is resolved"; + } + leaf num-ip-igp-paths { + type uint32; + description + "Number of underlay IP IGP paths"; + } + leaf-list ip-igp-path-id { + type uint32; + description + "List of IP IGP path IDs"; + } + leaf mpls-igp-id { + type uint32; + description + "Underlay MPLS ID"; + } + leaf mpls-igp-type { + type uint32; + description + "Underlay MPLS ID type"; + } + leaf srv6-igp-id { + type uint32; + description + "Underlay SRV6 ID"; + } + leaf srv6-igp-type { + type uint32; + description + "Underlay SRV6 ID type"; + } + } + + grouping ipv4-rnh-entries { + container ipv4-rnh-entries { + list ipv4-rnh-entry { + description + "List of IPV4 rnh entries"; + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "The IP address corresponding to the rnh"; + } + uses rnh-info; + } + } + } + + grouping ipv4-nht-entries { + container ipv4-nht-entries { + list ipv4-nht-entry { + description + "List of Nexthop tracking requests in IPV4 fib table"; + key "nht"; + leaf nht { + type inet:ip-address-no-zone; + description + "IPV4 address of the tracked Nexthop "; + } + leaf res-route { + type inet:ipv4-prefix; + description + "The IPv4 prefix corresponding to the tracked nexthop "; + } + leaf mpls-reachable { + type boolean; + description + "Whether this prefix is reachable via labeled path"; + } + leaf-list clients { + type string; + description + "List of clients tracking nexthop"; + } + } + } + } + + grouping ipv4-label-entries { + container ipv4-label-entries { + list ipv4-label-entry { + description + "Label entries in the IPV4 fib table"; + key "local-label"; + leaf local-label { + type uint32; + description + "The FEC Label entry (ILM) associated with the IPV4 fib table"; + } + leaf vpn-table-id { + type uint32; + description + "VPN table id associated with the label"; + } + leaf ifindex { + type uint64; + description + "Interface index associated with the label"; + } + uses pub-info; + } + } + } + + grouping ipv6-entries { + container ipv6-entries { + list ipv6-prefix-entry { + description + "List of IPV6 prefix entries in the fib table"; + key "prefix"; + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 prefix corresponding to the route"; + } + leaf ack-required { + type boolean; + description + "Forwarding status ack was requested for this route"; + } + leaf forwarding-status-valid { + type boolean; + description + "The forwarding status reflects the status of the latest issued + operation"; + } + leaf forwarding-status { + type uint32; + description + "Last reported forwarding status"; + } + leaf cookie { + type uint64; + description + "Last received opaque cookie for this route"; + } + uses pub-info; + uses loc-args; + } + } + } + + grouping ipv6-rnh-entries { + container ipv6-rnh-entries { + list ipv6-rnh-entry { + description + "List of IPV6 RNH entries"; + key "ip-address"; + leaf ip-address { + type inet:ip-address-no-zone; + description + "The IP address corresponding to the RNH"; + } + uses rnh-info; + } + } + } + + grouping ipv6-nht-entries { + container ipv6-nht-entries { + list ipv6-nht-entry { + description + "List of Nexthop tracking requests in IPV6 fib table"; + key "nht"; + leaf nht { + type inet:ipv6-address-no-zone; + description + "IPV6 address of the Tracked Nexthop "; + } + leaf res-route { + type inet:ipv6-prefix; + description + "The IPv6 prefix corresponding to the tracked nexthop "; + } + leaf mpls-reachable { + type boolean; + description + "Whether this RNH is reachable via labeled path"; + } + leaf-list clients { + type string; + description + "List of clients tracking nexthop"; + } + } + } + } + + grouping ipv6-label-entries { + container ipv6-label-entries { + list ipv6-label-entry { + description + "Label entries in the IPV6 fib table"; + key "local-label"; + leaf local-label { + type uint32; + description + "The FEC Label entry (ILM) associated with the ipv6 prefix"; + } + leaf vpn-table-id { + type uint32; + description + "VPN table id associated with the label"; + } + uses pub-info; + } + } + } + + grouping ipv6-sid-entries { + container ipv6-sid-entries { + list ipv6-sid-entry { + description + "SID entries in the fib table"; + key "sid"; + leaf sid { + type inet:ipv6-prefix; + description + "The sid value "; + } + leaf micro-segment-behaviour-unode { + type boolean; + description + "This designates sid as usid"; + } + leaf function { + type arc-srv6-types:srv6-endpoint-behavior-type; + } + + leaf locator-name { + type string ; + description + "locator name"; + } + leaf sid-table-id { + type uint32; + description + "Table id corresponding END.T or END.DT variants"; + } + leaf network-instance { + type string; + description + "Network Instance name"; + } + uses pub-info; + } + } + } + + grouping ipv6-tunnel-termination-entries { + container ipv6-tunnel-termination-entries { + list ipv6-tunnel-termination-entry { + description + "Tunnel termination entries in the fib table"; + key "ip"; + leaf ip { + type inet:ipv6-prefix; + description + "Tunnel termination ip "; + } + leaf ip-addr-family { + type identityref { + base oc-types:ADDRESS_FAMILY; + } + description + "This designates sid as usid"; + } + leaf function { + type arc-srv6-types:srv6-endpoint-behavior-type; + } + + leaf inner-vrf-id{ + type uint32 ; + description + "Inner vrf id corresponding END.T or END.DT variants"; + } + leaf binding-sid { + type inet:ipv6-prefix; + description + "Nexthop binding sid"; + } + leaf gtp-source-prefix { + type inet:ipv6-prefix; + description + "GTP source prefix in case of GTP4.D function"; + } + leaf sid { + type inet:ipv6-address; + description + "DT4/DT6 SID"; + } + leaf network-instance { + type string; + description + "Network Instance name"; + } + } + } + } + + grouping total-stats { + container all-stats { + leaf total-count { + type yang:counter64; + description + "Total number of objects present in the fib table"; + } + leaf total-creates { + type yang:counter64; + description + "Total number of creates received for the object"; + } + leaf total-updates { + type yang:counter64; + description + "Total number of updates received for the object"; + } + leaf total-deletes { + type yang:counter64; + description + "Total number of deletes received for the object"; + } + leaf total-drop-suppress { + type yang:counter64; + } + leaf total-duplicate-updates { + type yang:counter64; + description + "Total number of duplicate updates received for the object"; + } + leaf total-skip-publish { + type yang:counter64; + } + } + } + + grouping curr-ids { + container all-ids { + leaf id-count { + type yang:counter32; + description + "Total number of container IDs in use"; + } + } + } + + grouping txl-stats { + container txlist-stats { + leaf retry-count { + type yang:counter64; + description + "Total number of ipc retries"; + } + } + } + + grouping restart-stats { + container all-stats { + leaf stale-marks { + type yang:counter64; + description + "Total number of objects marked stale"; + } + leaf stale-refreshes { + type yang:counter64; + description + "Total number of objects refreshed"; + } + leaf stale-sweeps { + type yang:counter64; + description + "Total number of objects swept"; + } + leaf last-stale-marks { + type yang:counter64; + } + leaf last-stale-refreshes { + type yang:counter64; + } + leaf last-stale-sweeps { + type yang:counter64; + } + } + } + + grouping stats { + description + "Table specific counters"; + + container routes { + description + "Number of Routes"; + uses total-stats; + } + container rnhs { + description + "Number of RNHs"; + uses total-stats; + } + container cross-af-rnhs { + description + "Number of Cross AF RNHs"; + uses total-stats; + } + container labels { + description + "Number of Labels"; + uses total-stats; + } + container sids { + description + "Number of Sids"; + uses total-stats; + } + container adj-routes { + description + "Number of adj Routes"; + uses total-stats; + } + container nexthops { + description + "Number of Nexthops (nhids)"; + uses total-stats; + } + container paths { + description + "Number of Paths (path-ctx)"; + uses total-stats; + } + container tables { + description + "Number of Tables "; + uses total-stats; + } + container ids { + description + "Current Number of Containers Ids allocated "; + uses curr-ids; + } + container txlist { + description + "Txlist statistics"; + uses txl-stats; + } + } + + grouping rib-restart-stats { + description + "RIB restartability Table specific counters"; + + container routes { + description + "Number of Routes"; + uses restart-stats; + } + container rnhs { + description + "Number of RNHs"; + uses restart-stats; + } + container labels { + description + "Number of Labels"; + uses restart-stats; + } + container sids { + description + "Number of Sids"; + uses restart-stats; + } + container nexthops-recursive { + description + "Number of Recursive Nexthops (nhids)"; + uses restart-stats; + } + container nexthops-non-recursive { + description + "Number of Non-Recursive Nexthops (nhids)"; + uses restart-stats; + } + } + + grouping stats-entries { + description + "grouping for FIB statistics"; + + container stats-entries { + config false; + description + "container for FIB stats"; + uses stats; + } + container rib-restart-stats { + config false; + description + "FIB Counters related to RIB restartability "; + uses rib-restart-stats; + } + } + + grouping path-ctx-cmn { + description + "Path information"; + + leaf path-type { + type fib-path-type; + description + " Indicates Path type "; + } + + leaf nh-tableid { + type uint32; + } + leaf next-hop { + type inet:ip-address-no-zone; + description + "The next-hop that is to be used for the route + - this may be specified as an IP address, an interface + or a pre-defined next-hop type - for instance, DROP."; + } + + leaf ifindex { + type uint64; + } + leaf tunnel-id { + type uint32; + description + "Next-hop Tunnel ID"; + } + leaf flags { + type uint32; + } + leaf backup { + type boolean; + description + "Path is backup"; + } + leaf refcount { + type uint32; + description + "Indicates number of nexthops using this path"; + } + leaf level { + type uint32; + description + "level of the path"; + } + leaf network-instance { + type string; + description + "Network Instance name"; + } + } + + grouping ipv4-path-ctx { + container ipv4-path-ctx { + config false; + list ipv4-path { + description + "List of Paths present in IPV4 fib table"; + key "path-id"; + leaf path-id { + type uint32; + description + "Indicates the ID of the path"; + } + uses path-ctx-cmn; + } + } + } + + grouping ipv6-path-ctx { + container ipv6-path-ctx { + config false; + list ipv6-path { + description + "List of Paths present in IPV6 fib table"; + key "path-id"; + leaf path-id { + type uint32; + description + "Indicates the ID of the path"; + } + uses path-ctx-cmn; + } + } + } + + grouping ids-cmn { + description + "Container ID information"; + + leaf id-type { + type string; + description + "Specifies if the ID allocated is for path or NH "; + } + leaf refcount { + type uint32; + description + "Refcount for the ID"; + } + leaf path-type { + type fib-path-type; + description + "Indicates Path type if the ID corresponds to a path"; + } + leaf-list pathids { + type uint32; + } + leaf nh-addr { + type inet:ip-address-no-zone; + description + "Specifies the NH address corresponding to the path + if applicable"; + } + } + + grouping ipv4-ids { + container ipv4-id-list { + config false; + list ipv4-container-id { + description + "Container ID Information for IPV4 FIB table"; + key "id"; + leaf id { + type uint32; + description + "Container ID allocated by FIB"; + } + uses ids-cmn; + } + } + } + + grouping ipv6-ids { + container ipv6-id-list { + config false; + list ipv6-container-id { + description + "Container ID Information for IPV6 FIB table"; + key "id"; + leaf id { + type uint32; + description + "Container ID allocated by FIB"; + } + uses ids-cmn; + } + } + } + + grouping fib-lpm-top { + container fib-lpm { + description + "Perform a Longest Prefix Match lookup in the FIB"; + + action v4-route { + input { + leaf address { + type inet:ipv4-address; + mandatory true; + description + "The IPv4 address to be looked from FIB"; + } + } + output { + leaf prefix { + type inet:ipv4-prefix; + description + "The IPv4 prefix corresponding to the route"; + } + uses pub-info; + } + } + + action v6-route { + input { + leaf address { + type inet:ipv6-address; + mandatory true; + description + "The IPv6 address to be looked from FIB"; + } + } + output { + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 prefix corresponding to the route"; + } + uses pub-info; + } + } + } + } + + grouping ipv4-tunnels { + description + "Grouping for tunnel entries by lookup keys"; + + container ipv4-tunnels { + config false; + list entry { + key "tunnel-id"; + description + "tunnel-id used for lookup"; + leaf tunnel-id { + type uint32; + description + "tunnel-ID associated with this tunnel"; + } + leaf ltep-ip { + type inet:ipv4-address-no-zone; + description + "local tunnel-endpoint ipv4 address"; + } + leaf rtep-ip { + type inet:ipv4-address-no-zone; + description + "remote tunnel-endpoint ipv4 address"; + } + leaf tunnel-table-id { + type uint32; + description + "underlay table-id for this tunnel"; + } + leaf l4port { + type uint32; + description + "UDP port for this tunnel"; + } + leaf flood-and-learn { + type boolean; + description + "If set to true for the tunnel, mac-learning happens through flooding and not via EVPN."; + } + leaf tunnel-encap { + type enumeration { + enum "VXLAN" { + description + "VXLAN tunnel encapsulation"; + } + } + description + "tunnel encapsulation"; + } + uses pub-info; + } + } + } + + grouping ipv6-tunnels { + description + "Grouping for tunnel entries by lookup keys"; + + container ipv6-tunnels { + config false; + list entry { + key "tunnel-id"; + description + "tunnel-id used for lookup"; + leaf tunnel-id { + type uint32; + description + "tunnel-ID associated with this tunnel"; + } + leaf ltep-ip { + type inet:ipv6-address-no-zone; + description + "local tunnel-endpoint ipv6 address"; + } + leaf rtep-ip { + type inet:ipv6-address-no-zone; + description + "remote tunnel-endpoint ipv6 address"; + } + leaf tunnel-table-id { + type uint32; + description + "underlay table-id for this tunnel"; + } + leaf tunnel-encap { + type enumeration { + enum "SRV6" { + description + "SRV6 tunnel encapsulation"; + } + } + description + "tunnel encapsulation"; + } + leaf function { + type arc-srv6-types:srv6-endpoint-behavior-type; + } + leaf-list sid-list { + type inet:ipv6-address-no-zone; + description + "The list of SIDs added to SRv6 tunnel header"; + } + uses pub-info; + uses loc-args; + } + } + } + + grouping protectiontrackers { + description + "Parameters for protection tracking in FIB"; + leaf interface { + type string; + description + "Name of the interface"; + } + leaf next-hop { + type inet:ip-address-no-zone; + description + "Next-hop address"; + } + leaf network-instance { + type string; + description + "Next hop network instance"; + } + leaf bfd-source { + type inet:ip-address-no-zone; + description + "BFD source address"; + } + leaf bfd-destination { + type inet:ip-address-no-zone; + description + "BFD destination address"; + } + leaf bfd-session-id { + type uint64; + description + "BFD session ID"; + } + leaf backup-in-use { + type boolean; + description + "Backup is in use"; + } + } + grouping ipv4-protection-trackers { + description + "Grouping for protection tracker entries"; + container ipv4-protection-trackers { + list entry { + key "tracker-id"; + description + "Protection tracker ID"; + leaf tracker-id { + type uint64; + description + "Protection tracker ID"; + } + uses protectiontrackers; + } + } + } + + grouping ipv6-protection-trackers { + description + "Grouping for protection tracker entries"; + container ipv6-protection-trackers { + list entry { + key "tracker-id"; + description + "Protection tracker ID"; + leaf tracker-id { + type uint64; + description + "Protection tracker ID"; + } + uses protectiontrackers; + } + } + } + + grouping fib-top { + description + "Top level grouping for fib control plane routes"; + + list fib { + key "address-family"; + config false; + description + "The Control plane Forwarding table associated with an address family."; + + leaf address-family { + type identityref { + base oc-types:ADDRESS_FAMILY; + } + mandatory true; + config false; + } + uses ipv4-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-rnh-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-nht-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-next-hops { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-label-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-adj { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-path-ctx { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-ids { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-tunnels { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-protection-trackers { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv6-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-rnh-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-nht-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-next-hops { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-label-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-adj { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-path-ctx { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-ids { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-sid-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-tunnel-termination-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-tunnels { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-protection-trackers { + when "address-family = 'oc-types:IPV6'"; + } + uses stats-entries; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + uses fib-top { + when "./oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and " + + "/arc-platform:platform/arc-platform:deployment-type != 'arc-platform:DISTRIBUTED'"; + } + uses fib-lpm-top { + when "./oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and " + + "/arc-platform:platform/arc-platform:deployment-type != 'arc-platform:DISTRIBUTED'"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-common.yang b/vendor/arrcus/arcos/v521/arcos-hardware-common.yang new file mode 100644 index 000000000..7217c8e85 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-common.yang @@ -0,0 +1,25 @@ +submodule arcos-hardware-common { + yang-version 1.1; + + belongs-to arcos-hardware { + prefix arc-hw; + } + + include arcos-hardware-ecmp; + include arcos-hardware-scale; + + grouping hardware-common { + description + "Common hardware configuration"; + + container ecmp { + uses hardware-ecmp; + description "ECMP configuration"; + } + + container scale { + uses hardware-scale; + description "HW scale profile"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-deviations.yang b/vendor/arrcus/arcos/v521/arcos-hardware-deviations.yang new file mode 100644 index 000000000..1ff9b529b --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-deviations.yang @@ -0,0 +1,23 @@ +module arcos-hardware-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/hardware/deviations"; + prefix arc-hw-dev; + + import arcos-hardware { + prefix arc-hw; + } + + import arcos-runtime { + prefix arc-runtime; + } + + deviation "/arc-runtime:runtime-instances/arc-runtime:runtime-instance" + + "/arc-hw:hardware/arc-hw:config" { + deviate not-supported; + } + + deviation "/arc-runtime:runtime-instances/arc-runtime:runtime-instance" + + "/arc-hw:hardware/arc-hw:state" { + deviate not-supported; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-ecmp.yang b/vendor/arrcus/arcos/v521/arcos-hardware-ecmp.yang new file mode 100644 index 000000000..5ea1f240b --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-ecmp.yang @@ -0,0 +1,128 @@ +submodule arcos-hardware-ecmp { + yang-version 1.1; + + belongs-to arcos-hardware { + prefix arc-hw; + } + + import arcos-platform { + prefix arc-platform; + } + + grouping hardware-ecmp { + description "Controls for tuning ECMP hashing behavior"; + leaf hash-seed-value { + type uint32; + description "ECMP hash seed value"; + must "current() >= 0 and current() <= 65535 or" + + " /arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS'" { + error-message "ECMP hash seed value should be in the range of 0..65535, for Broadcom DNX devices"; + } + } + + leaf hash-offset { + type uint8; + description "ECMP Hash offset value"; + must "current() >= 0 and current() <= 15 or" + + " /arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS'" { + error-message "ECMP hash offset should be in the range of 0..15, for Broadcom DNX devices"; + } + must "current() >= 0 and current() <= 199 or" + + " (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or" + + " (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX_JPLUS')" { + error-message "ECMP hash offset should be in the range of 0..199, for Broadcom XGS devices"; + } + } + + leaf hash-function-polynomial { + type uint8; + description "ECMP hash polynomial"; + must "current() >= 1 and current() <= 13 or" + + " (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or" + + " (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX_JPLUS')" { + error-message "ECMP hash polynomial should be in the range of 1..13, for Broadcom XGS devices"; + } + must "current() >= 22 and current() <= 27 or" + + " /arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS'" { + error-message "ECMP hash polynomial should be in the range of 22..27, for Broadcom DNX devices"; + } + } + + container hash-fields-ipv4 { + description "ECMP IPv4 header fields"; + leaf src-ip { + type boolean; + default true; + description "Use source ip address for hash computation"; + } + leaf dst-ip { + type boolean; + default true; + description "Use destination ip address for hash computation"; + } + leaf src-port { + type boolean; + default true; + description "Use source L4 port for hash computation"; + } + leaf dst-port { + type boolean; + default true; + description "Use destination L4 port for hash computation"; + } + leaf proto { + type boolean; + default true; + description "Use IP protocol for hash computation"; + } + } + + container hash-fields-ipv6 { + description "ECMP IPv6 header fields"; + leaf src-ip { + type boolean; + default true; + description "Use source ip address for hash computation"; + } + leaf dst-ip { + type boolean; + default true; + description "Use destination ip address for hash computation"; + } + leaf src-port { + type boolean; + default true; + description "Use source L4 port for hash computation"; + } + leaf dst-port { + type boolean; + default true; + description "Use destination L4 port for hash computation"; + } + } + + container hash-fields-l2 { + description "ECMP L2 header fields"; + leaf vlan { + type boolean; + default true; + description "Use vlan ID for hash computation"; + } + leaf eth-type { + type boolean; + default true; + description "Use ethertype for hash computation"; + } + leaf src-mac { + type boolean; + default true; + description "Use source MAC address for hash computation"; + } + leaf dst-mac { + type boolean; + default true; + description "Use destination MAC address for hash computation"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-platform-dnx.yang b/vendor/arrcus/arcos/v521/arcos-hardware-platform-dnx.yang new file mode 100644 index 000000000..0abb4a94e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-platform-dnx.yang @@ -0,0 +1,26 @@ +module arcos-hardware-platform-dnx { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/hardware/platform/dnx"; + prefix arc-hw-platform-dnx; + + + grouping linkscan-interval { + leaf interval { + description "Time interval in millseconds between each linkscan polling. Default 250 milliseconds"; + type uint32 { + range "10..250"; + } + units milliseconds; + default 250; + } + } + + grouping dnx-linkscan-interval { + description "Controls for tuning device specific load balancing configuration"; + + container linkscan { + description "Polling interval for Linkscan"; + uses linkscan-interval; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-platform-interface.yang b/vendor/arrcus/arcos/v521/arcos-hardware-platform-interface.yang new file mode 100644 index 000000000..ce322400a --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-platform-interface.yang @@ -0,0 +1,39 @@ +module arcos-hardware-platform-interface { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/hardware/platform/interface"; + prefix arc-hw-platform-if; + + import iana-if-type { + prefix ianaift; + } + import openconfig-interfaces { + prefix oc-if; + } + import arcos-platform { + prefix arc-platform; + } + import arcos-hardware-platform-xgs-interface { + prefix arc-hw-platform-xgs-if; + } + import arcos-features { + prefix arf; + } + + grouping platform-interface { + container platform { + uses arc-hw-platform-xgs-if:xgs-intf-mmu-profile; + } + } + + augment "/oc-if:interfaces/oc-if:interface" { + uses platform-interface { + when "(((current()/oc-if:name != 'ma1') and " + + "(current()/oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd')) and " + + "((/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT3') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT4') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK')))"; + } + description + "Platform MMU queue profile"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-platform-types.yang b/vendor/arrcus/arcos/v521/arcos-hardware-platform-types.yang new file mode 100644 index 000000000..dc29039b4 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-platform-types.yang @@ -0,0 +1,71 @@ +module arcos-hardware-platform-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/hardware/platform/types"; + prefix arc-hw-platform-types; + + typedef MMU_QUEUE_ALPHA_VALUE { + type enumeration { + enum 1/128; + enum 1/64; + enum 1/32; + enum 1/16; + enum 1/8; + enum 1/4; + enum 1/2; + enum 1; + enum 2; + enum 4; + enum 8; + } + } + + identity SWITCH_FORWARDING_MODE { + description "Base type for switch forwarding modes"; + } + + identity STORE_AND_FORWARD { + base SWITCH_FORWARDING_MODE; + description "Store and forward mode"; + } + + identity CUT_THROUGH { + base SWITCH_FORWARDING_MODE; + description "Cut through forwarding mode"; + } + + identity BUFFER_STATS_MODE { + description "Base type for buffer stats modes"; + } + + identity BUFFER_STATS_MODE_NONE { + base BUFFER_STATS_MODE; + description "Buffer stats collection is disabled"; + } + + identity BUFFER_STATS_MODE_PEAK { + base BUFFER_STATS_MODE; + description "Buffer stats collected reflect peak usage"; + } + + identity BUFFER_STATS_MODE_PEAK_RESET { + base BUFFER_STATS_MODE; + description "Buffer stats collected reflect peak usage and reset the stats after every show"; + } + + typedef ECMP_MODE { + type enumeration { + enum RESILIENT_MODE { + value 1; + } + enum DLB_MODE { + value 2; + } + } + } + + typedef inact-int-uint32 { + type uint32 { + range "16..32767"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-platform-xgs-interface.yang b/vendor/arrcus/arcos/v521/arcos-hardware-platform-xgs-interface.yang new file mode 100644 index 000000000..93c8e2891 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-platform-xgs-interface.yang @@ -0,0 +1,115 @@ +module arcos-hardware-platform-xgs-interface { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/hardware/platform/xgs/interface"; + prefix arc-hw-platform-xgs-if; + + import arcos-hardware { + prefix arc-hw; + } + + import arcos-hardware-platform-types { + prefix arc-hw-platform-types; + } + + grouping mmu-queue-attrs { + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + description "Dynamic threshold value setting for queue"; + } + leaf rsvd-buf { + type uint32; + description "Reserved buffer space for queue in bytes"; + } + leaf instantaneous-buf-occupancy { + type uint32; + description "Buffer utilization for queue in bytes"; + } + } + + grouping xgs-intf-mmu-profile { + list mmu { + description "Interface level MMU configuration options"; + key "direction"; + + leaf direction { + description "Direction of traffic on this interface to bind the queue profile to"; + type enumeration { + enum EGRESS; + } + } + + container queue { + + container config { + leaf profile { + description "MMU queue profile applied to interface"; + type leafref { + path "/arc-hw:hardware/arc-hw:config/arc-hw:platform" + + "/arc-hw:mmu/arc-hw:config/arc-hw:queue" + + "/arc-hw:profile/arc-hw:name"; + } + } + } + + container state { + config false; + + leaf profile { + type string { + length "0..64"; + } + description "Name of MMU queue profile"; + } + container ucast-queue-0 { + uses mmu-queue-attrs; + } + container ucast-queue-1 { + uses mmu-queue-attrs; + } + container ucast-queue-2 { + uses mmu-queue-attrs; + } + container ucast-queue-3 { + uses mmu-queue-attrs; + } + container ucast-queue-4 { + uses mmu-queue-attrs; + } + container ucast-queue-5 { + uses mmu-queue-attrs; + } + container ucast-queue-6 { + uses mmu-queue-attrs; + } + container ucast-queue-7 { + uses mmu-queue-attrs; + } + container mcast-queue-0 { + uses mmu-queue-attrs; + } + container mcast-queue-1 { + uses mmu-queue-attrs; + } + container mcast-queue-2 { + uses mmu-queue-attrs; + } + container mcast-queue-3 { + uses mmu-queue-attrs; + } + container mcast-queue-4 { + uses mmu-queue-attrs; + } + container mcast-queue-5 { + uses mmu-queue-attrs; + } + container mcast-queue-6 { + uses mmu-queue-attrs; + } + container mcast-queue-7 { + uses mmu-queue-attrs; + } + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-platform-xgs.yang b/vendor/arrcus/arcos/v521/arcos-hardware-platform-xgs.yang new file mode 100644 index 000000000..22d81af40 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-platform-xgs.yang @@ -0,0 +1,550 @@ +module arcos-hardware-platform-xgs { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/hardware/platform/xgs"; + prefix arc-hw-platform-xgs; + + import arcos-hardware-platform-types { + prefix arc-hw-platform-types; + } + + import ietf-yang-types { + prefix yang; + } + + import arcos-platform { + prefix arc-platform; + } + + grouping xgs-profile { + leaf name { + type string { + length "0..64"; + } + description "Name of MMU queue profile"; + } + container ucast-queue-0 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for unicast queue 0 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for unicast queue 0"; + } + } + container ucast-queue-1 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for unicast queue 1 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for unicast queue 1"; + } + } + container ucast-queue-2 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for unicast queue 2 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for unicast queue 2"; + } + } + container ucast-queue-3 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for unicast queue 3 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for unicast queue 3"; + } + } + container ucast-queue-4 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for unicast queue 4 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for unicast queue 4"; + } + } + container ucast-queue-5 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for unicast queue 5 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for unicast queue 5"; + } + } + container ucast-queue-6 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for unicast queue 6 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for unicast queue 6"; + } + } + container ucast-queue-7 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for unicast queue 7 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for unicast queue 7"; + } + } + container mcast-queue-0 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for multicast queue 0 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for multicast queue 0"; + } + } + container mcast-queue-1 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for multicast queue 1 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for multicast queue 1"; + } + } + container mcast-queue-2 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for multicast queue 2 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for multicast queue 2"; + } + } + container mcast-queue-3 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for multicast queue 3 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for multicast queue 3"; + } + } + container mcast-queue-4 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for multicast queue 4 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for multicast queue 4"; + } + } + container mcast-queue-5 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for multicast queue 5 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for multicast queue 5"; + } + } + container mcast-queue-6 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for multicast queue 6 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for multicast queue 6"; + } + } + container mcast-queue-7 { + leaf reserved { + type uint32; + default 0; + description "Reserved buffer space for multicast queue 7 in bytes"; + } + leaf threshold { + type arc-hw-platform-types:MMU_QUEUE_ALPHA_VALUE; + default 2; + description "Dynamic threshold value setting for multicast queue 7"; + } + } + } + + grouping queue-profile { + container queue { + description "MMU queue specific configuration/state"; + list profile { + description "Queue profile configuration"; + key "name"; + + leaf name { + description "Name of MMU queue profile"; + type leafref { + path ../config/name; + } + } + + container config { + uses xgs-profile; + } + } + + leaf apply-profile { + description "Global knob to allow an MMU queue profile to be attached to all ports"; + type leafref { + path "../profile/name"; + } + } + } + } + + grouping shared-pool-stats { + leaf sp-0 { + description "Usage count in cells for shared pool-0"; + type uint64; + } + leaf sp-1 { + description "Usage count in cells for shared pool-1"; + type uint64; + } + leaf sp-2 { + description "Usage count in cells for shared pool-2"; + type uint64; + } + leaf sp-3 { + description "Usage count in cells for shared pool-3"; + type uint64; + } + } + + grouping per-cosq-stats { + leaf queue-0 { + description "Usage count in cells for queue-0"; + type uint64; + } + leaf queue-1 { + description "Usage count in cells for queue-1"; + type uint64; + } + leaf queue-2 { + description "Usage count in cells for queue-2"; + type uint64; + } + leaf queue-3 { + description "Usage count in cells for queue-3"; + type uint64; + } + leaf queue-4 { + description "Usage count in cells for queue-4"; + type uint64; + } + leaf queue-5 { + description "Usage count in cells for queue-5"; + type uint64; + } + leaf queue-6 { + description "Usage count in cells for queue-6"; + type uint64; + } + leaf queue-7 { + description "Usage count in cells for queue-7"; + type uint64; + } + } + + grouping per-pg-stats { + leaf pg-0 { + description "Usage count in cells for pg-0"; + type uint64; + } + leaf pg-1 { + description "Usage count in cells for pg-1"; + type uint64; + } + leaf pg-2 { + description "Usage count in cells for pg-2"; + type uint64; + } + leaf pg-3 { + description "Usage count in cells for pg-3"; + type uint64; + } + leaf pg-4 { + description "Usage count in cells for pg-4"; + type uint64; + } + leaf pg-5 { + description "Usage count in cells for pg-5"; + type uint64; + } + leaf pg-6 { + description "Usage count in cells for pg-6"; + type uint64; + } + leaf pg-7 { + description "Usage count in cells for pg-7"; + type uint64; + } + } + + + grouping xgs-buffer-stats { + description "Aggregate list of buffer related statistics"; + + leaf last-clear-time { + description "Time buffer stats counters were last cleared"; + type yang:date-and-time; + } + + container global { + description "Buffer relates statistics for device wide resources. Stats are reported in cells (256 bytes approx.)"; + + container ing-shared-pool { + description "Usage count in cells for ingress shared pools"; + uses shared-pool-stats; + } + + container ing-glbl-hdrm { + description "Usage count in cells for ingress global headroom pools"; + uses shared-pool-stats; + } + + container egr-shared-pool { + description "Usage count in cells for egress shared pools"; + uses shared-pool-stats; + } + } + + container per-interface { + config false; + description "Buffer related statistics for interface specific resources. Stats are reported in cells (256 bytes approx.)"; + + container ing-pg-min { + description "Usage count in cells for ingress port PG min"; + + list interface { + key "name"; + leaf "name" { + type string; + } + uses per-pg-stats; + } + } + container ing-port-shared-pool { + description "Usage count in cells for ingress port shared pool"; + + list interface { + key "name"; + leaf "name" { + type string; + } + uses shared-pool-stats; + } + } + container ing-pg-hdrm { + description "Usage count in cells for ingress port PG Headroom"; + + list interface { + key "name"; + leaf "name" { + type string; + } + uses per-pg-stats; + } + } + container egr-uc-queue { + description "Usage count in cells for egress UC queue min"; + + list interface { + key "name"; + leaf "name" { + type string; + } + uses per-cosq-stats; + } + } + container egr-uc-shared-pool { + description "Usage count in cells for egress UC shared pool"; + + list interface { + key "name"; + leaf "name" { + type string; + } + uses shared-pool-stats; + } + } + container egr-mc-queue { + description "Usage count in cells for egress MC queue min"; + + list interface { + key "name"; + leaf "name" { + type string; + } + uses per-cosq-stats; + } + } + container egr-mc-shared-pool { + description "Usage count in cells for egress MC shared pool"; + + list interface { + key "name"; + leaf "name" { + type string; + } + uses shared-pool-stats; + } + } + } + } + + grouping xgs-buffer-stats-config { + container buffer-stats { + description "Global control to enable/disable buffer statistics"; + leaf tracking-mode { + type identityref { + base arc-hw-platform-types:BUFFER_STATS_MODE; + } + default arc-hw-platform-types:BUFFER_STATS_MODE_PEAK; + } + } + } + + grouping xgs-buffer-stats-state { + container buffer-stats { + description "Global control to enable/disable buffer statistics"; + + leaf tracking-mode { + description "Buffer statistics collection mode"; + type identityref { + base arc-hw-platform-types:BUFFER_STATS_MODE; + } + } + leaf refresh-interval { + description "Time interval in seconds between successive refreshes of stats"; + type uint32; + units seconds; + } + leaf cell-size { + description "Cell size in bytes"; + type uint32; + units bytes; + } + uses xgs-buffer-stats; + } + } + + grouping xgs-queue-profile { + description "Controls for tuning device specific queue configuration"; + container mmu { + description "MMU configuration/state"; + + container config { + uses queue-profile; + uses xgs-buffer-stats-config { + when "((/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT3') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT4'))"; + } + } + + container state { + config false; + uses xgs-buffer-stats-state { + when "((/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT3') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT4'))"; + } + } + } + } + + grouping inactive-duration { + leaf inactivity-duration { + type arc-hw-platform-types:inact-int-uint32; + description "Inactivity duration for Dynamic loadbalancing in microseconds"; + } + } + + grouping ecmp-loadbalancing { + description + "Configure ecmp loadbalancing mode and parameters"; + + leaf mode { + type enumeration { + enum RESILIENT { + description + "Resilient mode"; + } + enum DYNAMIC { + description + "Dynamic mode"; + } + } + description "Loadbalancing mode for ECMP. Config will be applied to hardware after restart" ; + default RESILIENT; + } + + uses inactive-duration { + when "mode = 'DYNAMIC'" { + description "Inactivity duration should be configured only if DLB mode is enabled"; + } + } + } + + grouping xgs-load-balancing { + description "Controls for tuning device specific load balancing configuration"; + + container ecmp { + description "IP ECMP load balancing"; + uses ecmp-loadbalancing; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-platform.yang b/vendor/arrcus/arcos/v521/arcos-hardware-platform.yang new file mode 100644 index 000000000..de818406b --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-platform.yang @@ -0,0 +1,257 @@ +submodule arcos-hardware-platform { + yang-version 1.1; + + belongs-to arcos-hardware { + prefix arc-hw; + } + + import arcos-platform { + prefix arc-platform; + } + + import arcos-hardware-platform-xgs { + prefix arc-hw-platform-xgs; + } + + import arcos-hardware-platform-dnx { + prefix arc-hw-platform-dnx; + } + + import arcos-hardware-platform-types { + prefix arc-hw-platform-types; + } + + import arcos-features { + prefix arc-features; + } + + import openconfig-vlan-types { + prefix oc-vlan-types; + } + + typedef hw-pltf-fwd-profile { + type enumeration { + enum P1 { + value 1; + description + "Profile 1"; + } + enum P2 { + description + "Profile 2"; + } + enum P3 { + description + "Profile 3"; + } + enum P4 { + description + "Profile 4"; + } + enum P5 { + description + "Profile 5"; + } + } + } + + grouping sys-rsvd-vlans { + description "Vlans used for system internal purposes"; + + leaf sys-rsvd-vlan-min { + description "Lower bound for system reserved internal vlan range"; + type oc-vlan-types:vlan-id; + } + + leaf sys-rsvd-vlan-max { + description "Upper bound for system reserved internal vlan range"; + type oc-vlan-types:vlan-id; + } + } + + grouping hardware-platform { + description "Platform specific configuration"; + + container config { + leaf forwarding-mode { + description "Configuration of switch forwarding mode"; + when "/arc-platform:platform/arc-platform:asic != 'arc-platform:BROADCOM_HELIX4'"; + + type identityref { + base arc-hw-platform-types:SWITCH_FORWARDING_MODE; + } + + must "current() = 'arc-hw-platform-types:STORE_AND_FORWARD' or " + + "/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS'" { + error-message "Cut through mode not supported on this platform"; + } + } + + container forwarding-scale { + leaf fwd-profile { + type hw-pltf-fwd-profile; + description + "HW Forwarding Scale profile"; + } + leaf overlay-nexthop-profile { + when "/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_RIOT']" + + "/arc-features:supported = 'true'" { + description + "HW overlay nexthop profile"; + } + type hw-pltf-fwd-profile; + } + } + + container buffer-fairness { + leaf enable { + description "Enable fair distribution of traffic credits based on ingress traffic rate"; + when "/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHO2'"; + + type boolean; + default false; + } + leaf scan-interval { + description "Interval (in ms) at which hardware is polled"; + when "/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHO2'"; + + type uint32; + default 1000; + } + leaf dampening-percent { + description "Percent of delta to dampen while measuring weights"; + when "/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHO2'"; + + type uint32; + default 0; + } + } + + uses sys-rsvd-vlans { + description "System internal reserved vlan range specification"; + when "/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS'"; + refine sys-rsvd-vlan-min { + default 3966; + } + refine sys-rsvd-vlan-max { + default 4094; + } + } + } + + container state { + config false; + + leaf forwarding-mode { + description "Configuration of switch forwarding mode"; + type identityref { + base arc-hw-platform-types:SWITCH_FORWARDING_MODE; + } + } + + container forwarding-scale { + leaf fwd-profile { + type hw-pltf-fwd-profile; + description + "HW Forwarding Scale profile"; + } + leaf L2-entries { + type uint32; + description + "Number of L2 entries in Forwarding Scale profile"; + } + leaf Host-entries { + type uint32; + description + "Number of Host entries in Forwarding Scale profile"; + } + leaf LPM-entries { + type uint32; + description + "Number of LPM entries in Forwarding Scale profile"; + } + leaf overlay-nexthop-profile { + when "/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_RIOT']" + + "/arc-features:supported = 'true'" { + description + "HW overlay nexthop profile"; + } + type hw-pltf-fwd-profile; + } + } + + container buffer-fairness { + description "Buffer fairness hardware state"; + + leaf enabled { + description "Fair distribution of traffic credits based on ingress traffic rate"; + when "/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHO2'"; + + type boolean; + } + + leaf scan-interval { + description "Fair distribution of traffic credits based on ingress traffic rate"; + when "/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHO2'"; + + type uint32; + } + + leaf dampening-percent { + description "Fair distribution of traffic credits based on ingress traffic rate"; + when "/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHO2'"; + + type uint32; + } + + list port-state { + description "Buffer fairness state per port"; + when "/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHO2'"; + + key "ifname"; + leaf ifname { + description "Port name"; + type string; + } + + list hardware-q-weights { + description "Port buffer fairness ratio for all ingress nodes"; + key "qnum"; + leaf qnum { + description "Queue number"; + type uint32; + } + leaf q_weights { + description "Per queue weights"; + type string; + } + } + } + } + + uses sys-rsvd-vlans { + when "/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS'"; + description "System internal reserved vlan range specification"; + } + } + + uses arc-hw-platform-xgs:xgs-queue-profile { + when "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT3') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT4')"; + description "Device specific queue profile configuration"; + } + + uses arc-hw-platform-xgs:xgs-load-balancing { + when "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT3') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT4')"; + description "Device specific load balancing configuration"; + } + + uses arc-hw-platform-dnx:dnx-linkscan-interval { + when "(/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or" + + " (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX_JPLUS')"; + description "Device specific linkscan interval configuration"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-scale.yang b/vendor/arrcus/arcos/v521/arcos-hardware-scale.yang new file mode 100644 index 000000000..f4d796737 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-scale.yang @@ -0,0 +1,25 @@ +submodule arcos-hardware-scale { + yang-version 1.1; + + belongs-to arcos-hardware { + prefix arc-hw; + } + + import arcos-platform { + prefix arc-platform; + } + + grouping hardware-scale { + description "HW Scale profile"; + leaf scale-profile { + type enumeration { + enum L3; + enum L2; + enum Balanced; + enum Balanced-Exem; + } + description "Scale profile name"; + when "/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX'"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware-units.yang b/vendor/arrcus/arcos/v521/arcos-hardware-units.yang new file mode 100644 index 000000000..5f50a02cc --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware-units.yang @@ -0,0 +1,153 @@ +submodule arcos-hardware-units { + yang-version 1.1; + + belongs-to arcos-hardware { + prefix arc-hw; + } + + import ietf-yang-types { + prefix yang; + } + + grouping hardware-units { + description + "View hardware resources"; + + list unit-entry { + config false; + description + "List of forwarding units"; + + key "unit-id"; + + leaf unit-id { + type uint32; + description "Forwarding unit id"; + } + + leaf unit-descr { + type string; + description "Forwarding unit description"; + } + + container resources { + config false; + description + "List of resources in a forwarding init. A resource has + a maximum number of entries and may be shared by one or + more features"; + + list resource-entry { + description + "A resource entry"; + key "name"; + + leaf name { + type string; + description "Name of the resource"; + } + + leaf raw-used { + type uint64; + description "Number of raw resource entries in use"; + } + + leaf raw-free { + type uint64; + description "Number of raw resource entries free"; + } + + container feature { + list feature-entry { + key "name"; + + leaf name { + type string; + description "Feature name"; + } + + leaf objects-allocated { + type uint64; + description "Number of objects allocated by this feature. + An object may use one or more raw resource + entries. For some features this is a best effort estimate"; + } + + leaf objects-failed { + type yang:zero-based-counter64; + description "Number of objects that have failed due to + unavailable hardware resources. An object may use one or more + hardware resource entry."; + } + + leaf high-watermark { + type uint64; + description "High watermark of the number of objects allocated + by this feature"; + } + + leaf high-watermark-time { + type yang:date-and-time; + description "Date and time the high watermark was hit"; + } + + leaf estimated-free { + type uint64; + description "Number of objects that can be allocated by this + feature until it runs out of resources. In the case where the + the resource is shared between one or more features, this + number may go up or down if another feature uses up resource + entries. For some features this is a best effort estimate"; + } + + leaf errors { + type uint64; + description "Count of the number of times that the feature + failed to allocate a logical entry"; + } + } + } + } + } + + container indexers { + config false; + list indexer-entry { + config false; + + key "name"; + + leaf name { + type string; + description "Indexer name"; + } + + leaf type { + type string; + description "Type of the indexer"; + } + + leaf start-index { + type uint32; + description "Starting index"; + } + + leaf count { + type uint32; + description "Maximum number of entries "; + } + + leaf used { + type uint32; + description "Number of entries in use"; + } + + leaf hold-count { + type uint32; + description "Hold count"; + } + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-hardware.yang b/vendor/arrcus/arcos/v521/arcos-hardware.yang new file mode 100644 index 000000000..fabb66b16 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-hardware.yang @@ -0,0 +1,63 @@ +module arcos-hardware { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/hardware"; + prefix arc-hw; + + include arcos-hardware-units; + include arcos-hardware-common; + include arcos-hardware-platform; + include arcos-hardware-ecmp; + include arcos-hardware-scale; + + import arcos-runtime { + prefix arc-runtime; + } + + grouping hardware-config { + description + "hardware configuration parameters"; + + container common { + uses hardware-common; + } + + container platform { + uses hardware-platform; + } + } + + grouping hardware-state { + description + "Operational state data for harware"; + } + + grouping hardware-top { + description + "Top-level grouping for hardware configuration"; + container hardware { + description + "Configure and view hardware resources"; + container config { + description + "Configuration for hardware"; + uses hardware-config; + } + container state { + config false; + + uses hardware-config; + uses hardware-state; + } + container units { + config false; + uses hardware-units; + } + } + } + uses hardware-top; + + augment "/arc-runtime:runtime-instances" + + "/arc-runtime:runtime-instance" { + uses hardware-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-icmp-types.yang b/vendor/arrcus/arcos/v521/arcos-icmp-types.yang new file mode 100644 index 000000000..78c76c29a --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-icmp-types.yang @@ -0,0 +1,449 @@ +module arcos-icmp-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/icmp/types"; + prefix arc-icmp-types; + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines Internet Control Message Protocol (ICMP) message + types and codes for use in models requiring data definitions related + to ICMP."; + + + identity ICMP_TYPE { + description + "Base identity for ICMP message type values used in ICMP packet header. + The deprecated, reserved and experimental types are not defined in this + identity."; + reference + "RFC 792"; + } + + identity ICMP_ECHO_REPLY { + base ICMP_TYPE; + description + "Echo Reply (0)"; + } + + identity ICMP_DST_UNREACH { + base ICMP_TYPE; + description + "Destination Unreachable (3)"; + } + + identity ICMP_REDIRECT { + base ICMP_TYPE; + description + "Redirect Message (5)"; + } + + identity ICMP_ECHO_REQUEST { + base ICMP_TYPE; + description + "Echo Request (8)"; + } + + identity ICMP_ROUTER_ADVERT { + base ICMP_TYPE; + description + "Router Advertisement (9)"; + } + + identity ICMP_ROUTER_SOLICIT { + base ICMP_TYPE; + description + "Router Solicitation (10)"; + } + + identity ICMP_TIME_EXCEEDED { + base ICMP_TYPE; + description + "Time Exceeded (11)"; + } + + identity ICMP_PARAM_PROBLEM { + base ICMP_TYPE; + description + "Paramter Problem: Bad IP header (12)"; + } + + identity ICMP_TIMESTAMP { + base ICMP_TYPE; + description + "Timestamp (13)"; + } + + identity ICMP_TIMESTAMP_REPLY { + base ICMP_TYPE; + description + "Timestamp Reply (14)"; + } + + + identity ICMP_DST_UNREACH_CODE { + description + "Base identity for ICMP message code values for type Destination + Unreachable used in ICMP packet header."; + reference + "RFC 792"; + } + + identity ICMP_NET_UNREACH { + base ICMP_DST_UNREACH_CODE; + description + "Net Unreachable (0)"; + } + + identity ICMP_HOST_UNREACH { + base ICMP_DST_UNREACH_CODE; + description + "Host Unreachable (1)"; + } + + identity ICMP_PROTO_UNREACH { + base ICMP_DST_UNREACH_CODE; + description + "Protocol Unreachable (2)"; + } + + identity ICMP_PORT_UNREACH { + base ICMP_DST_UNREACH_CODE; + description + "Port Unreachable (3)"; + } + + identity ICMP_FRAGMENT { + base ICMP_DST_UNREACH_CODE; + description + "Fragmentation Needed and Don't Fragment was Set (4)"; + } + + identity ICMP_SRC_ROUTE_FAIL { + base ICMP_DST_UNREACH_CODE; + description + "Source Route Failed (5)"; + } + + identity ICMP_DST_NET_UNKNOWN { + base ICMP_DST_UNREACH_CODE; + description + "Destination Network Unknown (6)"; + } + + identity ICMP_DST_HOST_UNKNOWN { + base ICMP_DST_UNREACH_CODE; + description + "Destination Host Unknown (7)"; + } + + identity ICMP_SRC_HOST_UNKNOWN { + base ICMP_DST_UNREACH_CODE; + description + "Source Host Unknown (8)"; + } + + identity ICMP_NET_PROHIBITED { + base ICMP_DST_UNREACH_CODE; + description + "Communication with Destination Network is Administratively + Prohibited (9)"; + } + + identity ICMP_HOST_PROHIBITED { + base ICMP_DST_UNREACH_CODE; + description + "Communication with Destination HOST is Administratively + Prohibited (10)"; + } + + identity ICMP_NET_UNREACH_TOS { + base ICMP_DST_UNREACH_CODE; + description + "Destination Network Unreachable for Type of Service (11)"; + } + + identity ICMP_HOST_UNREACH_TOS { + base ICMP_DST_UNREACH_CODE; + description + "Destination HOST Unreachable for Type of Service (12)"; + } + + identity ICMP_COMM_PROHIBITED { + base ICMP_DST_UNREACH_CODE; + description + "Communication Administratively Prohibited (13)"; + } + + identity ICMP_PRECEDENCE_VIOLATE { + base ICMP_DST_UNREACH_CODE; + description + "Host Precedence Violation (14)"; + } + + identity ICMP_PRECEDENCE_CUTOFF { + base ICMP_DST_UNREACH_CODE; + description + "Precedence Cutoff in Effect (15)"; + } + + + identity ICMP_REDIRECT_CODE { + description + "Base identity for ICMP message code values for type Redirect + used in ICMP packet header."; + reference + "RFC 792"; + } + + identity ICMP_REDIRECT_NETWORK { + base ICMP_REDIRECT_CODE; + description + "Redirect Datagram for the Network (0)"; + } + + identity ICMP_REDIRECT_HOST { + base ICMP_REDIRECT_CODE; + description + "Redirect Datagram for the Host (1)"; + } + + identity ICMP_REDIRECT_TOS_NETWORK { + base ICMP_REDIRECT_CODE; + description + "Redirect Datagram for the Type of Service and Network (2)"; + } + + identity ICMP_REDIRECT_TOS_HOST { + base ICMP_REDIRECT_CODE; + description + "Redirect Datagram for the Type of Service and Host (3)"; + } + + + identity ICMP_ROUTER_ADVERT_CODE { + description + "Base identity for ICMP message code values for type Router + Advertisement used in ICMP packet header."; + reference + "RFC 1256"; + } + + identity ICMP_NORMAL_ADVERT { + base ICMP_ROUTER_ADVERT_CODE; + description + "Normal Router Advertisement (0)"; + } + + identity ICMP_NO_COMMON_TRAFFIC { + base ICMP_ROUTER_ADVERT_CODE; + description + "Does not route common traffic (16)"; + } + + + identity ICMP_TIME_EXCEEDED_CODE { + description + "Base identity for ICMP message code values for type Time + Exceeded used in ICMP packet header."; + reference + "RFC 792"; + } + + identity ICMP_TTL_EXCEEDED { + base ICMP_TIME_EXCEEDED_CODE; + description + "Time to Live Exceeded in Transit (0)"; + } + + identity ICMP_REASSEMBLY_TIME_EXCEEDED { + base ICMP_TIME_EXCEEDED_CODE; + description + "Fragment Reassembly Time Exceeded (1)"; + } + + + identity ICMP_PARAM_PROB_CODE { + description + "Base identity for ICMP message code values for type Parameter + Problem used in ICMP packet header."; + reference + "RFC 792"; + } + + identity ICMP_POINTER_ERR { + base ICMP_PARAM_PROB_CODE; + description + "Pointer Indicates the Error (0)"; + } + + identity ICMP_MISS_OPTION { + base ICMP_PARAM_PROB_CODE; + description + "Missing a Required Option (1)"; + } + + identity ICMP_BAD_LENGTH { + base ICMP_PARAM_PROB_CODE; + description + "Bad Length (2)"; + } + + + typedef icmp-type { + type union { + type uint8 { + range 0..255; + } + type identityref { + base ICMP_TYPE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '(2[0-5][0-5]|[0-1]?[0-9]?[0-9]?)\.\.(2[0-5][0-5]|[0-1]?' + + * '[0-9]?[0-9]?)'; + */ + pattern '2[0-5][0-5]|[0-1]?[0-9]?[0-9]?'; + } + } + description + "The ICMP message type value(s) may be represented as a single + valid number (integer [0, 255]), using a type defined by the + ICMP_TYPE identity."; + } + + typedef icmp-dst-unreach-code { + type union { + type uint8 { + range 0..15; + } + type identityref { + base ICMP_DST_UNREACH_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '(1[0-5]|[0-9])\.\.(1[0-5]|[0-9])'; + */ + pattern '1[0-5]|[0-9]'; + } + } + description + /* "The ICMP Destination Unreachable code value(s) may be represented + as a single valid number (integer [0, 15]), using a type defined by + the ICMP_DST_UNREACH_CODE identity, or using a string to indicate a + range of code as ..."; */ + "The ICMP Destination Unreachable code value(s) may be represented + as a single valid number (integer [0, 15]) or using a type defined by + the ICMP_DST_UNREACH_CODE identity."; + } + + typedef icmp-redirect-code { + type union { + type uint8 { + range 0..3; + } + type identityref { + base ICMP_REDIRECT_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '([0-3])\.\.([0-3])'; + */ + pattern '[0-3]'; + } + } + description + /* "The ICMP REDIRECT code value(s) may be represented as a + single valid number (integer [0, 3]), using a type defined + by the ICMP_REDIRECT_CODE identity, or using a string to + indicate a range of codes as ..."; */ + "The ICMP REDIRECT code value(s) may be represented as a + single valid number (integer [0, 3]) or using a type defined + by the ICMP_REDIRECT_CODE identity."; + } + + typedef icmp-router-advert-code { + type union { + type uint8 { + range 0..16; + } + type identityref { + base ICMP_ROUTER_ADVERT_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '(1[0-6]|[0-9])\.\.(1[0-6]|[0-9])'; + */ + pattern '1[0-6]|[0-9]'; + } + } + description + /* "The ICMP Router Advertisement code value(s) may be represented + as a single valid number (integer 0 or 16), using a type defined + by the ICMP_ROUTER_ADVERT_CODE identity, or using a string to + indicate a range of codes as ..."; */ + "The ICMP Router Advertisement code value(s) may be represented + as a single valid number (integer 0 or 16) or using a type defined + by the ICMP_ROUTER_ADVERT_CODE identity."; + } + + typedef icmp-time-exceeded-code { + type union { + type uint8 { + range 0..1; + } + type identityref { + base ICMP_TIME_EXCEEDED_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '(0|1)\.\.(0|1)'; + */ + pattern '0|1'; + } + } + description + /* "The ICMP Time Exceeded code value(s) may be represented as + a single valid number (integer 0 or 1), using a type defined + by the ICMP_TIME_EXCEEDED_CODE identity, or using a string to + indicate a range of codes as ..."; */ + "The ICMP Time Exceeded code value(s) may be represented as + a single valid number (integer 0 or 1) or using a type defined + by the ICMP_TIME_EXCEEDED_CODE identity."; + } + + typedef icmp-param-problem-code { + type union { + type uint8 { + range 0..2; + } + type identityref { + base ICMP_PARAM_PROB_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '([0-2])\.\.([0-2])'; + */ + pattern '[0-2]'; + } + } + description + /* "The ICMP Parameter Problem code value(s) may be represented + as a single valid number (integer [0, 2]), using a type defined + by the ICMP_PARAM_PROB_CODE identity, or using a string to + indicate a range of codes as ..."; */ + "The ICMP Parameter Problem code value(s) may be represented + as a single valid number (integer [0, 2]) or using a type defined + by the ICMP_PARAM_PROB_CODE identity."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-icmpv6-types.yang b/vendor/arrcus/arcos/v521/arcos-icmpv6-types.yang new file mode 100644 index 000000000..e5400e061 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-icmpv6-types.yang @@ -0,0 +1,594 @@ +module arcos-icmpv6-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/icmpv6/types"; + prefix arc-icmpv6-types; + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines Internet Control Message Protocol version 6 + (ICMPv6) message types and codes for use in models requiring data + definitions related to ICMPv6."; + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + + revision "2017-09-21" { + description + "Initial revision."; + + reference "1.0.0"; + } + + + identity ICMPV6_TYPE { + description + "Base identity for ICMPv6 message type values used in ICMPv6 packet + header. The reserved and experimental types are not defined in this + identity."; + reference + "RFC 4443"; + } + + identity ICMPV6_DST_UNREACH { + base ICMPV6_TYPE; + description + "Destination Unreachable (1)"; + } + + identity ICMPV6_PKT_TOO_BIG { + base ICMPV6_TYPE; + description + "Packet Too Big (2)"; + } + + identity ICMPV6_TIME_EXCEEDED { + base ICMPV6_TYPE; + description + "Time Exceeded (3)"; + } + + identity ICMPV6_PARAM_PROBLEM { + base ICMPV6_TYPE; + description + "Parameter Problem (4)"; + } + + identity ICMPV6_ECHO_REQUEST { + base ICMPV6_TYPE; + description + "Echo Request (128)"; + } + + identity ICMPV6_ECHO_REPLY { + base ICMPV6_TYPE; + description + "Echo Reply (129)"; + } + + identity ICMPV6_MCAST_LISTENER_QUERY { + base ICMPV6_TYPE; + description + "Multicast Listener Query (130)"; + } + + identity ICMPV6_MCAST_LISTENER_REPORT { + base ICMPV6_TYPE; + description + "Multicast Listener Report (131)"; + } + + identity ICMPV6_MCAST_LISTENER_DONE { + base ICMPV6_TYPE; + description + "Multicast Listener Done (132)"; + } + + identity ICMPV6_ROUTER_SOLICIT { + base ICMPV6_TYPE; + description + "Router Solicitation (133)"; + } + + identity ICMPV6_ROUTER_ADVERT { + base ICMPV6_TYPE; + description + "Router Advertisement (134)"; + } + + identity ICMPV6_NEIGHBOR_SOLICIT { + base ICMPV6_TYPE; + description + "Neighbor Solicitation (135)"; + } + + identity ICMPV6_NEIGHBOR_ADVERT { + base ICMPV6_TYPE; + description + "Neighbor Advertisement (136)"; + } + + identity ICMPV6_REDIRECT { + base ICMPV6_TYPE; + description + "Redirect Message (137)"; + } + + identity ICMPV6_ROUTER_RENUMBER { + base ICMPV6_TYPE; + description + "Router Renumbering (138)"; + } + + identity ICMPV6_NODE_INFO_QUERY { + base ICMPV6_TYPE; + description + "ICMP Node Information Query (139)"; + } + + identity ICMPV6_NODE_INFO_RESPONSE { + base ICMPV6_TYPE; + description + "ICMP Node Information Response (140)"; + } + + identity ICMPV6_INVERSE_ND_SOLICIT { + base ICMPV6_TYPE; + description + "Inverse Neighbor Discovery Solicitation Message (141)"; + } + + identity ICMPV6_INVERSE_ND_ADVERT { + base ICMPV6_TYPE; + description + "Inverse Neighbor Discovery Advertisement Message (142)"; + } + + identity ICMPV6_MCAST_LISTENER_DISCOVERY_REPORT { + base ICMPV6_TYPE; + description + "Multicast Listener Discovery Reports (143)"; + } + + identity ICMPV6_HOME_AGENT_AD_REQUEST { + base ICMPV6_TYPE; + description + "Home Agent Address Discovery Request Message (144)"; + } + + identity ICMPV6_HOME_AGENT_AD_REPLY { + base ICMPV6_TYPE; + description + "Home Agent Address Discovery Reply Message (145)"; + } + + identity ICMPV6_MOBILE_PREFIX_SOLICIT { + base ICMPV6_TYPE; + description + "Mobile Prefix Solicitation (146)"; + } + + identity ICMPV6_MOBILE_PREFIX_ADVERT { + base ICMPV6_TYPE; + description + "Mobile Prefix Advertisement (147)"; + } + + identity ICMPV6_CERTIFICATION_PATH_SOLICIT { + base ICMPV6_TYPE; + description + "Certification Path Solicitation (148)"; + } + + identity ICMPV6_CERTIFICATION_PATH_ADVERT { + base ICMPV6_TYPE; + description + "Certification Path Advertisement (149)"; + } + + identity ICMPV6_MCAST_ROUTER_ADVERT { + base ICMPV6_TYPE; + description + "Multicast Router Advertisement (151)"; + } + + identity ICMPV6_MCAST_ROUTER_SOLICIT { + base ICMPV6_TYPE; + description + "Multicast Router Solicitation (152)"; + } + + identity ICMPV6_MCAST_ROUTER_TERMINATION { + base ICMPV6_TYPE; + description + "Multicast Router Termination (153)"; + } + + identity ICMPV6_RPL_CONTROL { + base ICMPV6_TYPE; + description + "RPL Control Message (155)"; + } + + + identity ICMPV6_DST_UNREACH_CODE { + description + "Base identity for ICMPv6 message code values for type + Destination Unreachable used in ICMPv6 packet header."; + reference + "RFC 4443"; + } + + identity ICMPV6_NO_ROUTE_TO_DST { + base ICMPV6_DST_UNREACH_CODE; + description + "No Route to Destination (0)"; + } + + identity ICMPV6_COMM_PROHIBITED { + base ICMPV6_DST_UNREACH_CODE; + description + "Communication with Destination Administratively Prohibited (1)"; + } + + identity ICMPV6_BEYOND_SCOPE { + base ICMPV6_DST_UNREACH_CODE; + description + "Beyond Scope of Source Address (2)"; + } + + identity ICMPV6_ADDRESS_UNREACH { + base ICMPV6_DST_UNREACH_CODE; + description + "Address Unreachable (3)"; + } + + identity ICMPV6_PORT_UNREACH { + base ICMPV6_DST_UNREACH_CODE; + description + "Port Unreachable (4)"; + } + + identity ICMPV6_SRC_ADDRESS_FAIL { + base ICMPV6_DST_UNREACH_CODE; + description + "Source Address Failed Ingress/Egress Policy (5)"; + } + + identity ICMPV6_REJECT_ROUTE { + base ICMPV6_DST_UNREACH_CODE; + description + "Reject Route to Destination (6)"; + } + + identity ICMPV6_ERR_IN_SR_HEADER { + base ICMPV6_DST_UNREACH_CODE; + description + "Error in Source Routing Header (7)"; + } + + + // ICMPv6 codes for type Time Exceeded (Type 3) + identity ICMPV6_TIME_EXCEEDED_CODE { + description + "Base identity for ICMPv6 message code values for type + Time Exceeded used in ICMPv6 packet header."; + reference + "RFC 4443"; + } + + identity ICMPV6_HOP_LIMIT_EXCEEDED { + base ICMPV6_TIME_EXCEEDED_CODE; + description + "Hop Limit Exceeded in Transit (0)"; + } + + identity ICMPV6_REASSEMBLY_TIME_EXCEEDED { + base ICMPV6_TIME_EXCEEDED_CODE; + description + "Fragment Reassembly Time Exceeded (1)"; + } + + + identity ICMPV6_PARAM_PROB_CODE { + description + "Base identity for ICMPv6 message code values for type + Parameter Problem used in ICMPv6 packet header."; + reference + "RFC 4443"; + } + + identity ICMPV6_ERR_HEADER_FIELD { + base ICMPV6_PARAM_PROB_CODE; + description + "Erroneous Header Field Encountered (0)"; + } + + identity ICMPV6_UNRECOGNIZED_NEXT_HEADER_TYPE { + base ICMPV6_PARAM_PROB_CODE; + description + "Unrecognized Next Header Type Encountered (1)"; + } + + identity ICMPV6_UNRECOGNIZED_IPV6_OPTION { + base ICMPV6_PARAM_PROB_CODE; + description + "Unrecognized IPv6 Option Encountered (2)"; + } + + + identity ICMPV6_ROUTER_RENUMBER_CODE { + description + "Base identity for ICMPv6 message code values for type + Router Renumbering used in ICMPv6 packet header."; + reference + "N/A"; + } + + identity ICMPV6_ROUTER_RENUMBER_COMMAND { + base ICMPV6_ROUTER_RENUMBER_CODE; + description + "Router Renumbering Command (0)"; + } + + identity ICMPV6_ROUTER_RENUMBER_RESULT { + base ICMPV6_ROUTER_RENUMBER_CODE; + description + "Router Renumbering Result (1)"; + } + + identity ICMPV6_SEQUENCE_NUMBER_RESET { + base ICMPV6_ROUTER_RENUMBER_CODE; + description + "Sequence Number Reset (255)"; + } + + + identity ICMPV6_NODE_INFO_QUERY_CODE { + description + "Base identity for ICMPv6 message code values for type + ICMP Node Information Query used in ICMPv6 packet header."; + reference + "RFC 4620"; + } + + identity ICMPV6_QUERY_SUBJECT_IPV6_ADDRESS { + base ICMPV6_NODE_INFO_QUERY_CODE; + description + "The Data field contains an IPv6 address which is the Subject of + this Query (0)"; + } + + identity ICMPV6_QUERY_SUBJECT_NAME { + base ICMPV6_NODE_INFO_QUERY_CODE; + description + "The Data field contains a name which is the Subject of this Query, + or is empty, as in the case of a NOOP (1)"; + } + + identity ICMPV6_QUERY_SUBJECT_IPV4_ADDRESS { + base ICMPV6_NODE_INFO_QUERY_CODE; + description + "The Data field contains an IPv4 address which is the Subject of + this Query (2)"; + } + + identity ICMPV6_NODE_INFO_RESPONSE_CODE { + description + "Base identity for ICMPv6 message code values for type + ICMP Node Information Response used in ICMPv6 packet header."; + reference + "RFC 4620"; + } + + identity ICMPV6_SUCCESSFUL_REPLY { + base ICMPV6_NODE_INFO_RESPONSE_CODE; + description + "A successful reply. The Reply Data field may or may not be empty (1)"; + } + + identity ICMPV6_ANSWER_REFUSED { + base ICMPV6_NODE_INFO_RESPONSE_CODE; + description + "The Responder refuses to supply the answer. The Reply Data field + will be empty (1)"; + } + + identity ICMPV6_QTYPE_UNKNOWN { + base ICMPV6_NODE_INFO_RESPONSE_CODE; + description + "The Qtype of the Query is unknown to the Responder. The Reply Data + field will be empty (2)"; + } + + + typedef icmpv6-type { + type union { + type uint8 { + range 0..255; + } + type identityref { + base ICMPV6_TYPE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '(2[0-5][0-5]|[0-1]?[0-9]?[0-9]?)\.\.(2[0-5][0-5]|[0-1]?' + + * '[0-9]?[0-9]?)'; + */ + pattern '2[0-5][0-5]|[0-1]?[0-9]?[0-9]?'; + } + } + description + "The ICMPv6 message type value(s) may be represented as a single + valid number (integer [0, 255]), using a type defined by the + ICMPV6_TYPE identity."; + } + + typedef icmpv6-dst-unreach-code { + type union { + type uint8 { + range 0..7; + } + type identityref { + base ICMPV6_DST_UNREACH_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '([0-7])\.\.([0-7])'; + */ + pattern '[0-7]'; + } + } + description + /* "The ICMPv6 Destination Unreachable code value(s) may be represented + as a single valid number (integer [0, 7]), using a type defined by + the ICMPV6_DST_UNREACH_CODE identity, or using a string to indicate a + range of code as ..."; */ + "The ICMPv6 Destination Unreachable code value(s) may be represented + as a single valid number (integer [0, 7]) or using a type defined by + the ICMPV6_DST_UNREACH_CODE identity."; + } + + typedef icmpv6-time-exceeded-code { + type union { + type uint8 { + range 0..1; + } + type identityref { + base ICMPV6_TIME_EXCEEDED_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '(0|1)\.\.(0|1)'; + */ + pattern '0|1'; + } + } + description + /* "The ICMPv6 Time Exceeded code value(s) may be represented as + a single valid number (integer 0 or 1), using a type defined + by the ICMPV6_TIME_EXCEEDED_CODE identity, or using a string + to indicate a range of codes as ..."; */ + "The ICMPv6 Time Exceeded code value(s) may be represented as + a single valid number (integer 0 or 1) or using a type defined + by the ICMPV6_TIME_EXCEEDED_CODE identity."; + } + + typedef icmpv6-param-problem-code { + type union { + type uint8 { + range 0..2; + } + type identityref { + base ICMPV6_PARAM_PROB_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '([0-2])\.\.([0-2])'; + */ + pattern '[0-2]'; + } + } + description + /* "The ICMPv6 Parameter Problem code value(s) may be represented + as a single valid number (integer [0, 2]), using a type defined + by the ICMPV6_PARAM_PROB_CODE identity, or using a string to + indicate a range of codes as ..."; */ + "The ICMPv6 Parameter Problem code value(s) may be represented + as a single valid number (integer [0, 2]) or using a type defined + by the ICMPV6_PARAM_PROB_CODE identity."; + + } + + typedef icmpv6-router-renumber-code { + type union { + type uint8 { + range "0..1 | 255"; + } + type identityref { + base ICMPV6_ROUTER_RENUMBER_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '(0|1)\.\.(0|1|255)'; + */ + pattern '0|1|255'; + } + } + description + /* "The ICMPv6 Router Renumbering code value(s) may be represented + as a single valid number (integer 0, 1 or 255), using a type + defined by the ICMPV6_ROUTER_RENUMBER_CODE identity, or using a + string to indicate a range of codes as ..."; */ + "The ICMPv6 Router Renumbering code value(s) may be represented + as a single valid number (integer 0, 1 or 255) or using a type + defined by the ICMPV6_ROUTER_RENUMBER_CODE identity."; + } + + typedef icmpv6-node-info-query-code { + type union { + type uint8 { + range 0..2; + } + type identityref { + base ICMPV6_NODE_INFO_QUERY_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '([0-2])\.\.([0-2])'; + */ + pattern '[0-2]'; + } + } + description + /* "The ICMPv6 Note Information Query code value(s) may be + represented as a single valid number (integer [0, 2]), + using a type defined by the ICMPV6_NODE_INFO_QUERY_CODE + identity, or using a string to indicate a range of codes + as ..."; */ + "The ICMPv6 Note Information Query code value(s) may be + represented as a single valid number (integer [0, 2]) or + using a type defined by the ICMPV6_NODE_INFO_QUERY_CODE + identity."; + } + + typedef icmpv6-node-info-response-code { + type union { + type uint8 { + range 0..2; + } + type identityref { + base ICMPV6_NODE_INFO_RESPONSE_CODE; + } + type string { + /* + * Range not supported yet in BCM + * pattern '([0-2])\.\.([0-2])'; + */ + pattern '[0-2]'; + } + } + description + /* "The ICMPv6 Note Information RESPONSE code value(s) may be + represented as a single valid number (integer [0, 2]), + using a type defined by the ICMPV6_NODE_INFO_RESPONSE_CODE + identity, or using a string to indicate a range of codes + as ..."; */ + "The ICMPv6 Note Information RESPONSE code value(s) may be + represented as a single valid number (integer [0, 2]) or + using a type defined by the ICMPV6_NODE_INFO_RESPONSE_CODE + identity."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ietf-ptp-augments.yang b/vendor/arrcus/arcos/v521/arcos-ietf-ptp-augments.yang new file mode 100644 index 000000000..0f0fd863f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ietf-ptp-augments.yang @@ -0,0 +1,646 @@ +/** + * Filename: arcos-ietf-ptp-augments.yang + * + * Description: + * YANG data-model for Arcos PTP augments + * + * Copyright 2022-2022 by Arrcus, Inc. + * All rights reserved. + */ + +module arcos-ietf-ptp-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/ietf/ptp/augments"; + prefix arc-ietf-ptp-aug; + + import ietf-ptp { + prefix ptp; + } + + import ietf-inet-types { + prefix inet; + } + + import arcos-ietf-ptp-types { + prefix arc-ptp-types; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import ietf-yang-types { + prefix yang; + } + + import arcos-features { + prefix arc-features; + } + + import tailf-common { + prefix tailf; + } + + organization + "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module lists arrcus ptp augments related information. + Copyright (c) 2022-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-04-11 { + description + "Added 4 leaf (interface-name, esmc-status, is-selected-source, ql-received) + to global-sync-e"; + } + + revision 2023-03-15 { + description + "Add subinterface support to portDS underlying-interface"; + } + + revision 2023-03-12 { + description + "Add SyncE operational state information."; + } + revision 2023-03-07 { + description + "Add servo algorithm mode configuration"; + } + + revision 2023-02-20 { + description + "Add port-ds-list transport and master address config options"; + } + + revision 2023-02-09 { + description + "Add defaultDS.localPriority, portDS.localPriority, and " + + "defaultDS.maxStepsRemoved leaves"; + } + + revision 2023-01-30 { + description + "Added time-of-day leaf to time-properties-ds. + Added clock-profile leaf to clock-info"; + } + + revision 2022-11-18 { + description + "Initial revision."; + + reference + "RFC 8575: YANG Data Model for the Precision Time Protocol (PTP)"; + } + + augment "/ptp:ptp/ptp:instance-list" { + leaf clock-profile { + type arc-ptp-types:arc-clock-profile-type; + // default default_profile; + description + "PTP clock profile type g8275.1/g8275.2/default."; + } + leaf servo-alg { + type arc-ptp-types:arc-servo-algo-type; + default default-algorithm; + description + "PTP servo algorithm type."; + } + + uses default-ref-defaults; + } + + augment "/ptp:ptp/ptp:instance-list/ptp:default-ds" { + leaf local-priority { + type uint8; + tailf:default-ref "../../default-ds-defaults/local-priority-def"; + description + "The localPriority attribute of local clock"; + } + leaf max-steps-removed { + type uint8; + tailf:default-ref "../../default-ds-defaults/max-steps-removed-def"; + description + "The maxStepsRemoved attribute of local clock"; + } + } + + augment "/ptp:ptp/ptp:instance-list/ptp:port-ds-list" { + leaf master-only { + type boolean; + default false; + description + "PTP master only mode on the clock port."; + } + leaf local-priority { + type uint8; + tailf:default-ref "../../port-ds-defaults/local-priority-def"; + description + "The localPriority attribute of local clock port"; + } + leaf transport { + when "../../arc-ietf-ptp-aug:clock-profile = 'G8275.2'"; + type arc-ptp-types:arc-transport-type; + description + "The IP protocol to use for G.8275.2 unicast messages"; + } + leaf grant-duration { + when "../../arc-ietf-ptp-aug:clock-profile = 'G8275.2'"; + type uint16; + tailf:default-ref "../../port-ds-defaults/grant-duration-def"; + description + "The unicast grant duration value of local clock port"; + } + + uses underlying-interface; + uses master-address; + } + + grouping underlying-interface { + description + "PTP port underlying interface configuration"; + container underlying-interface { + description + "Reference to the underlying interface and subinterface"; + uses oc-if:interface-ref; + } + } + + grouping default-ref-defaults { + description + "Default values for default-ds and port-ds-list"; + container default-ds-defaults { + tailf:hidden "ptp-internal"; + leaf local-priority-def { + type uint8; + } + leaf max-steps-removed-def { + type uint8; + } + } + container port-ds-defaults { + tailf:hidden "ptp-internal"; + leaf local-priority-def { + type uint8; + } + leaf grant-duration-def { + type uint16; + } + } + } + + grouping master-address { + container master { + description + "PTP port master address configuration"; + when "../../arc-ietf-ptp-aug:clock-profile = 'G8275.2'"; + + container ipv4 { + when "not(../ipv6/address)"; + leaf address { + must "../../../arc-ietf-ptp-aug:transport = 'ipv4' or not(.)" { + error-message "Master address family must match port transport"; + } + type inet:ipv4-address; + description + "IPv4 address of master port"; + } + } + container ipv6 { + when "not(../ipv4/address)"; + leaf address { + must "../../../arc-ietf-ptp-aug:transport = 'ipv6' or not(.)" { + error-message "Master address family must match port transport"; + } + type inet:ipv6-address; + description + "IPv6 address of master port"; + } + } + } + } + + /* + Note: This leaf is state info but intended to be config:true, + to fit style of counterparts in the time-properties-ds container. + However, Removing config:false on an "augment" seems to cause the +` show-operational-state cli to not retrieve data for this leaf. + */ + augment "/ptp:ptp/ptp:instance-list/ptp:time-properties-ds" { + leaf time-of-day { + type yang:date-and-time; + config false; + description + "Date and time of day"; + } + } + + grouping ptp-version-top { + description + "PTP version information."; + + container version { + config false; + description + "Operational state for PTP version data."; + + leaf client-version { + type string; + description + "Client Version."; + } + leaf server-version { + type string; + description + "Server Version."; + } + leaf ptp-service-version { + type string; + description + "Service Version."; + } + leaf ptp-protocol-version { + type string; + description + "PTP protocol version."; + } + leaf algorithm-version { + type string; + description + "Algorithm version."; + } + leaf cpld-version { + type string; + description + "CPLD firmware verson."; + } + leaf fpga-version { + type string; + description + "FPGA firmware Version."; + } + leaf hardware-version { + type string; + description + "Hardware version."; + } + leaf dpll-version { + type string; + description + "DPLL Version."; + } + } + } + + grouping ptp-servo-top { + container servo { + config false; + description + "Operational state information for PTP servo"; + leaf configuration { + type string; + description + "Frequency correction"; + } + leaf state { + type enumeration { + enum ACQUIRING; + enum FREQ_LOCKED; + enum PHASE_LOCKED; + enum HOLDOVER; + enum REF_FAILED; + enum NO_ACTIVE_SERVER; + enum UNKNOWN; + enum MANUAL_FREERUN; + enum MANUAL_HOLDOVER; + enum MANUAL_SERVO_HOLDOVER; + enum HOLDOVER_IN_SPEC; + enum HOLDOVER_OUT_OF_SPEC; + } + description + "Servo state."; + } + leaf state-duration { + type string; + description + "Servo status duration."; + } + leaf lock-status { + description + "Servo lock status."; + type enumeration { + enum UNLOCKED; + enum LOCKED; + } + } + leaf frequency-correction { + type int32; + units ppt; + description + "Average frequency offset"; + } + leaf phase-correction { + type uint32; + units nsec; + description + "Phase Offset"; + } + leaf offset-from-master { + type int64; + units nsec; + description + "The current value of the time difference between + a master and a slave clock as computed by the slave."; + + } + leaf mean-path-delay { + type int64; + units nsec; + description + "The current value of the mean propagation time between + a master and a slave clock as computed by the slave."; + } + leaf sync-packet-rate { + type yang:gauge32; + description + "Forward path packet rate of the server."; + } + leaf delay-packet-rate { + type yang:gauge32; + description + "Reverse path packet rate of the server."; + } + } + } + + grouping ptp-clock-stats-top { + container stats { + config false; + description + "PTP clock statistics"; + leaf packets-sent { + type yang:zero-based-counter32; + description + "Total PTP packets sent."; + } + leaf packets-received { + type yang:zero-based-counter32; + description + "Total PTP packets received."; + } + leaf packets-discarded { + type yang:zero-based-counter32; + description + "Total PTP packets discarded."; + } + leaf ipv4-ptp-packets-received { + type yang:zero-based-counter32; + description + "IPv4 PTP packets received."; + } + leaf ipv6-ptp-packets-received{ + type yang:zero-based-counter32; + description + "IPv6 PTP packets received."; + } + leaf l2-ptp-packets-received { + type yang:zero-based-counter32; + description + "L2 PTP packets received."; + } + leaf rx-queue-overflows { + type yang:zero-based-counter32; + description + "A count of the instances of receives queue overflows."; + } + action counters { + output { + leaf result { + type string; + description + "Result of operation."; + } + } + } + } + } + + grouping ptp-port-stats-top { + container port-stats { + config false; + description + "PTP statistics for a given port"; + leaf packets-received { + type yang:zero-based-counter32; + description + "PTP packets received."; + } + leaf packets-sent { + type yang:zero-based-counter32; + description + "PTP packets sent."; + } + leaf packets-discarded { + type yang:zero-based-counter32; + description + "PTP packets discarded."; + } + } + } + + grouping ptp-clock-info-top { + container clock-info { + config false; + description + "PTP Clock Information for the local clock"; + + leaf clock-identity { + type tailf:hex-list; + description + "Identity of local clock."; + } + leaf clock-profile { + type arc-ptp-types:arc-clock-profile-type; + description "Clock profile"; + } + leaf clock-type { + type enumeration { + enum GRANDMASTER { + value 1; + } + enum BOUNDARY_CLOCK { + value 2; + } + enum TRANSPARENT_CLOCK { + value 3; + } + } + description + "Clock type"; + } + leaf number-of-ports { + type uint32; + description + "Number of ports on the local clock."; + } + leaf clock-class { + type uint8; + description + "Denotes the traceablility of the time or frequency + distributed by the clock."; + } + leaf domain-number { + type uint32; + description + "The domain number of the current syntonization + domain."; + } + leaf scaled-log-variance { + type uint32; + description + "The precision of the timestamps included in messages issued by + the clock when it is not synchronized to another clock."; + } + leaf priority1 { + type uint32; + description + "The priority1 attribute of the local clock."; + } + leaf priority2 { + type uint32; + description + "The priority2 attribute of the local clock."; + } + leaf slave-only { + type boolean; + description + "When set to true, the clock is a slave-only clock."; + } + leaf two-step { + type boolean; + description + "When set to true, the clock is a two-step clock; + otherwise,the clock is a one-step clock."; + } + leaf announce-receipt-timeout-min { + type uint32; + description + "The minimum value of announce receipt timeout interval."; + } + leaf announce-receipt-timeout-def { + type uint32; + description + "The default value of announce receipt timeout interval."; + } + leaf announce-receipt-timeout-max { + type uint32; + description + "The maximum value of announce receipt timeout interval."; + } + leaf log-announce-interval-min { + type int32; + description + "The minimum value of log announce interval."; + } + leaf log-announce-interval-def { + type int32; + description + "The default value of log announce interval."; + } + leaf log-announce-interval-max { + type int32; + description + "The maximum value of log announce interval."; + } + leaf log-sync-interval-min { + type int32; + description + "The minimum value of log sync interval."; + } + leaf log-sync-interval-def { + type int32; + description + "The default value of log sync interval."; + } + leaf log-sync-interval-max { + type int32; + description + "The maximum value of log sync interval."; + } + leaf log-min-delay-req-interval-min { + type int32; + description + "The minimum permitted mean time interval between Delay_Req messages."; + } + leaf log-min-delay-req-interval-def { + type int32; + description + "The default permitted mean time interval between Delay_Req messages."; + } + leaf log-min-delay-req-interval-max { + type int32; + description + "The maxmimum permitted mean time interval between Delay_Req messages."; + } + leaf domain-num-min { + type int32; + description + "The minimum of domain number."; + } + leaf domain-num-def { + type int32; + description + "The default of domain number."; + } + leaf domain-num-max { + type int32; + description + "The maximum of domain number."; + } + leaf priority2-min { + type int32; + description + "The minimum of priority2."; + } + leaf priority2-def { + type int32; + description + "The default of priority2."; + } + leaf priority2-max { + type int32; + description + "The maximum of priority2."; + } + leaf local-priority { + type int32; + description + "The local priority attribute of the local clock."; + } + } + } + + augment "/ptp:ptp" { + when "/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_PTP_BOUNDARY_CLOCK']/arc-features:supported = 'true'"; + uses ptp-version-top; + } + + augment "/ptp:ptp/ptp:instance-list" { + when "/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_PTP_BOUNDARY_CLOCK']/arc-features:supported = 'true'"; + uses ptp-servo-top; + uses ptp-clock-stats-top; + uses ptp-clock-info-top; + } + + augment "/ptp:ptp/ptp:instance-list/ptp:port-ds-list" { + uses ptp-port-stats-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ietf-ptp-deviations.yang b/vendor/arrcus/arcos/v521/arcos-ietf-ptp-deviations.yang new file mode 100644 index 000000000..f80271b65 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ietf-ptp-deviations.yang @@ -0,0 +1,182 @@ +/** + * Filename: arcos-ietf-ptp-deviations.yang + * + * Description: + * YANG data-model for Arcos PTP deviations + * + * Copyright 2022-2022 by Arrcus, Inc. + * All rights reserved. + */ + +module arcos-ietf-ptp-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/ietf/ptp/deviations"; + prefix arc-ietf-ptp-dev; + + import ietf-ptp { + prefix ptp; + } + + import arcos-ietf-ptp-types { + prefix arc-ptp-types; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import tailf-common { + prefix tailf; + } + + + organization + "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module lists arrcus ptp deviation related information. + Copyright (c) 2022-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-15 { + description + "Add subinterface support to portDS underlying-interface"; + } + + revision 2023-02-20 { + description + "Deviate slave-only default false as according to IEEE-1588"; + } + + revision 2023-01-30 { + description + "Deviate time-source for readability. Moves from type uint8 to an enum + based on IEEE-1588"; + } + + revision 2022-11-18 { + description + "Enabled profile, BC and GM support"; + + reference + "RFC 8575: YANG Data Model for the Precision Time Protocol (PTP)"; + } + + revision 2022-08-08 { + description + "Initial revision."; + + reference + "RFC 8575: YANG Data Model for the Precision Time Protocol (PTP)"; + } + + deviation "/ptp:ptp/ptp:transparent-clock-port-ds-list" { + deviate not-supported; + description "Not Supported in this release"; + } + + + deviation "/ptp:ptp/ptp:transparent-clock-default-ds/ptp:number-ports" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/ptp:ptp/ptp:transparent-clock-default-ds/ptp:primary-domain" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/ptp:ptp/ptp:transparent-clock-default-ds/ptp:delay-mechanism" { + deviate replace { + type arc-ptp-types:arc-dm-enum; + } + } + + deviation "/ptp:ptp/ptp:instance-list/ptp:port-ds-list/ptp:underlying-interface" { + deviate not-supported; + description "Replaced within arcos-ietf-ptp-augments"; + } + + deviation "/ptp:ptp/ptp:instance-list/ptp:default-ds/ptp:clock-identity" { + deviate replace { + type tailf:hex-list; + } + } + deviation "/ptp:ptp/ptp:instance-list/ptp:parent-ds/ptp:parent-port-identity/ptp:clock-identity" { + deviate replace { + type tailf:hex-list; + } + } + deviation "/ptp:ptp/ptp:instance-list/ptp:parent-ds/ptp:grandmaster-identity" { + deviate replace { + type tailf:hex-list; + } + } + deviation "/ptp:ptp/ptp:transparent-clock-default-ds/ptp:clock-identity" { + deviate replace { + type tailf:hex-list; + } + } + deviation "/ptp:ptp/ptp:instance-list/ptp:default-ds/ptp:clock-identity" { + deviate replace { + type tailf:hex-list; + } + } + + /* Time Source Types. Enum is defined accordance to values in IEEE-1588 */ + deviation "/ptp:ptp/ptp:instance-list/ptp:time-properties-ds/ptp:time-source" { + deviate replace { + type enumeration { + enum ATOMIC_CLOCK { + value 16; + } + enum GPS { + value 32; + } + enum TERRESTRIAL_RADIO { + value 48; + } + enum PTP { + value 64; + } + enum NTP { + value 80; + } + enum HAND_SET { + value 96; + } + enum OTHER { + value 144; + } + enum INTERNAL_OSCILLATOR { + value 160; + } + } + } + } + + deviation "/ptp:ptp/ptp:instance-list" { + deviate add { + max-elements 1; + } + description "MAX one profile is supported."; + } + + deviation "/ptp:ptp/ptp:instance-list/ptp:default-ds/ptp:two-step-flag" { + deviate add { + default false; + } + } + deviation "/ptp:ptp/ptp:instance-list/ptp:default-ds/ptp:slave-only" { + deviate add { + default false; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ietf-ptp-types.yang b/vendor/arrcus/arcos/v521/arcos-ietf-ptp-types.yang new file mode 100644 index 000000000..657912c0c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ietf-ptp-types.yang @@ -0,0 +1,143 @@ +/** + * Filename: arcos-ietf-ptp-types.yang + * + * Description: + * YANG data-model for Arcos PTP types + * + * Copyright 2022-2022 by Arrcus, Inc. + * All rights reserved. + */ + +module arcos-ietf-ptp-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/ietf/ptp/types"; + prefix arc-ietf-ptp-types; + + organization + "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module list arrcus implemenation of PTP types related information. + Copyright (c) 2022-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-07 { + description + "Add servo algorithm mode configuration"; + } + + revision 2023-02-20 { + description + "Add G.8275.2 profile"; + } + + revision 2023-01-30 { + description + "Change arc-clock-profile type enum g_8275_1_profile --> G8275.1"; + } + + revision 2022-08-08 { + description + "Initial revision."; + + reference + "RFC 8575: YANG Data Model for the Precision Time Protocol (PTP)"; + } + + + typedef arc-dm-enum { + type enumeration { + enum e2e { + value 1; + } + enum disabled { + value 254; + } + } + } + + typedef arc-clock-profile-type { + type enumeration { + /* + enum default_profile { + value 1; + description + "IEEE 1588 default profile"; + } + */ + enum G8275.1 { + value 2; + description + "g8275.1 profile."; + } + enum G8275.2 { + value 3; + description + "G8275.2 profile"; + } + } + } + + typedef arc-servo-algo-type { + type enumeration { + enum default-algorithm { + value 0; + description + "Default servo algorithm as determined by service."; + } + enum full { + value 1; + description + "Full On-Path Support for G.8275.1 and G.8275.2 profiles."; + } + enum full-synce { + value 2; + description + "Full On-Path Support with SyncE for G.8275.1 profile."; + } + enum partial { + value 3; + description + "Partial On-Path Support for G.8275.2 and Default profiles."; + } + enum partial-synce { + value 4; + description + "Partial On-Path Support with SyncE for G.8275.2 and Default " + + "profiles."; + } + enum partial-low-pdv { + value 6; + description + "Partial On-Path Support with low PDV for G.8275.2 profile."; + } + enum partial-high-pdv { + value 7; + description + "Partial On-Path Support with high PDV for G.8275.2 profile."; + } + } + } + + typedef arc-transport-type { + type enumeration { + enum ipv4 { + value 1; + description + "IPv4 protocol"; + } + enum ipv6 { + value 2; + description + "IPv6 protocol"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-if-qos-service-policy-deviations.yang b/vendor/arrcus/arcos/v521/arcos-if-qos-service-policy-deviations.yang new file mode 100644 index 000000000..9f0590a1c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-if-qos-service-policy-deviations.yang @@ -0,0 +1,54 @@ +module arcos-if-qos-service-policy-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/interface/qos/service-policy/deviations"; + prefix arc-if-qos-svc-pol-dev; + + import arcos-if-qos { + prefix arc-if-qos; + } + import openconfig-interfaces { + prefix oc-if; + } + import arcos-qos { + prefix arc-qos; + } + import arcos-qos-policy { + prefix arc-qos-pol; + } + import arcos-if-qos-service-policy { + prefix arc-if-qos-svc-pol; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos service policy annotation"; + + deviation "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/arc-if-qos-svc-pol:service-policies" + + "/arc-if-qos-svc-pol:service-policy" + + "/arc-if-qos-svc-pol:config/arc-if-qos-svc-pol:name" { + deviate replace { + type leafref { + path "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy/arc-qos-pol:name"; + } + } + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" + + "/arc-if-qos:qos/arc-if-qos-svc-pol:service-policies" + + "/arc-if-qos-svc-pol:service-policy" + + "/arc-if-qos-svc-pol:config/arc-if-qos-svc-pol:name" { + deviate replace { + type leafref { + path "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy/arc-qos-pol:name"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-if-qos-service-policy.yang b/vendor/arrcus/arcos/v521/arcos-if-qos-service-policy.yang new file mode 100644 index 000000000..702ceb4c3 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-if-qos-service-policy.yang @@ -0,0 +1,220 @@ +module arcos-if-qos-service-policy { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/interface/qos/service-policy"; + prefix arc-if-qos-svc-pol; + + import arcos-policy { + prefix arc-pol; + } + import arcos-policy-action { + prefix arc-pol-actn; + } + import arcos-service-policy { + prefix arc-svc-pol; + } + import arcos-qos { + prefix arc-qos; + } + import arcos-qos-policy { + prefix arc-qos-pol; + } + import arcos-qos-random-detect { + prefix arc-qos-red; + } + import arcos-if-qos { + prefix arc-if-qos; + } + import iana-if-type { + prefix ianaift; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-if-ethernet { + prefix oc-eth; + } + import openconfig-if-aggregate { + prefix oc-lag; + } + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos specific policy instance on interfaces"; + + grouping queue-stats-top { + leaf queue-txcount { + type uint64; + description + "Number of packets successfully transmitted out of a queue"; + } + leaf queue-txbytes { + type uint64; + description + "Number of bytes successfully transmitted out of a queue"; + } + leaf queue-dropcount { + type uint64; + description + "Number of packets dropped from a queue. + Drops could be as a result of dropping descipline or + could be as a result of unavailabilty of buffers"; + } + leaf queue-dropbytes { + type uint64; + description + "Number of bytes dropped from a queue. + Drops could be as a result of dropping descipline or + could be as a result of unavailabilty of buffers"; + } + } + + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy" { + uses arc-pol:policy-classifiers-state-top; + } + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" + + "/arc-if-qos:qos/service-policies/service-policy" { + uses arc-pol:policy-classifiers-state-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-qos-pol:rate-min-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-qos-pol:rate-max-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-qos-pol:rate-excess-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-qos-pol:priority-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/state" { + uses queue-stats-top; + } + + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-pol-actn:mark-top; + } + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-pol-actn:mark-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action/mark/state" { + uses arc-pol-actn:mark-local-tc-top; + } + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action/mark/state" { + uses arc-pol-actn:mark-local-tc-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action/mark/state" { + uses arc-pol-actn:mark-local-tc-drop-precedence-top; + } + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action/mark/state" { + uses arc-pol-actn:mark-local-tc-drop-precedence-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-pol-actn:police-top; + } + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-pol-actn:police-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action/police/state" { + uses arc-pol-actn:police-stats-top; + } + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action/police/state" { + uses arc-pol-actn:police-stats-top; + } + + augment "/oc-if:interfaces/oc-if:interface" + + "/arc-if-qos:qos/service-policies/service-policy/classifiers/classifier" + + "/actions/action" { + uses arc-qos-red:random-detect-instance-top; + } + + augment "/oc-if:interfaces/oc-if:interface/arc-if-qos:qos" { + uses arc-svc-pol:service-policies-top { + when "((current()/../oc-if:name != 'ma1') and " + + "((current()/../oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') or " + + "((current()/../oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') and " + + "(boolean(current()/../oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true'))))"; + + refine "service-policies/service-policy/direction" { + must "(current() = 'EGRESS') or " + + "(/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + "(/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS') or " + + "(/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')" { + error-message "Ingress qos policies not supported"; + } + } + } + + description + "Augmenting policy service instance list under an interface"; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/arc-if-qos:qos" { + uses arc-svc-pol:service-policies-top { + when "((current()/../../../oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') or " + + " ((current()/../../../oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') and (boolean(current()/../../../oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true')))"; + + refine "service-policies/service-policy/direction" { + must "(current() = 'INGRESS') and " + + "((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED'))" { + error-message "Ingress qos policies not supported"; + } + } + } + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-if-qos-service-tablemap.yang b/vendor/arrcus/arcos/v521/arcos-if-qos-service-tablemap.yang new file mode 100644 index 000000000..cc58f4efe --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-if-qos-service-tablemap.yang @@ -0,0 +1,132 @@ +module arcos-if-qos-service-tablemap { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/interface/qos/service-tablemap"; + prefix arc-if-qos-svc-tbl; + + import arcos-qos { + prefix arc-qos; + } + import arcos-qos-tablemap { + prefix arc-qos-tbl; + } + import arcos-if-qos { + prefix arc-if-qos; + } + import iana-if-type { + prefix ianaift; + } + import openconfig-system { + prefix oc-sys; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-if-ethernet { + prefix oc-eth; + } + import openconfig-if-aggregate { + prefix oc-lag; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos specific tablemap instance on interfaces"; + + grouping service-tablemap-attributes { + description + "Grouping that defines service instance of a tablemap"; + leaf direction { + type enumeration { + enum INGRESS { + description + "for incoming traffic"; + } + enum EGRESS { + description + "for outgoing traffic"; + } + } + description + "direction of traffic this service-tablemap takes effect on"; + } + leaf name { + type leafref { + path "/arc-qos:qos/arc-qos-tbl:tablemaps/arc-qos-tbl:tablemap/arc-qos-tbl:name"; + } + mandatory true; + description + "Name of a tablemap to be instantiated"; + } + } + + grouping service-tablemaps-top { + description + "Main top-level grouping for generic definition of tablemap service instances"; + container service-tablemaps { + description + "Set of tablemap service instances configured"; + list service-tablemap { + key "direction"; + description + "A specific tablemap service instance"; + leaf direction { + type leafref { + path "../config/direction"; + } + description + "direction of traffic, service instance applicable to"; + } + container config { + description + "Configuration parameters relating to tablemap service instance"; + uses service-tablemap-attributes; + } + container state { + config false; + description + "Operational state parameters relating to tablemap service instance"; + uses service-tablemap-attributes; + } + } + } + } + + augment "/oc-if:interfaces/oc-if:interface/arc-if-qos:qos" { + uses service-tablemaps-top { + when "((current()/../oc-if:name != 'ma1') and " + + " ((current()/../oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') or " + + " ((current()/../oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') and (boolean(current()/../oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true'))))"; + } + description + "Augmenting tablemap service instance list under an interface"; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/arc-if-qos:qos" { + uses service-tablemaps-top { + when "((current()/../../../oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') or " + + " ((current()/../../../oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') and (boolean(current()/../../../oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true')))"; + } + } + + grouping system-qos-top { + description + "Top level grouping for system-based QoS"; + container qos { + description + "Quality of Service"; + uses service-tablemaps-top; + } + } + + augment "/oc-sys:system" { + uses system-qos-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-if-qos.yang b/vendor/arrcus/arcos/v521/arcos-if-qos.yang new file mode 100644 index 000000000..cd3819fdc --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-if-qos.yang @@ -0,0 +1,46 @@ +module arcos-if-qos { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/interface/qos"; + prefix arc-if-qos; + + import openconfig-interfaces { + prefix oc-if; + } + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos features on interfaces"; + + grouping if-qos-top { + description + "Top level grouping for interface-based QoS"; + container qos { + description + "Quality of Service"; + } + } + + augment "/oc-if:interfaces/oc-if:interface" { + uses if-qos-top { + when "(/arc-platform:platform/arc-platform:asic != 'arc-platform:X86_64') or " + + "(/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" { + uses if-qos-top { + when "(/arc-platform:platform/arc-platform:asic != 'arc-platform:X86_64')"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-igp-types.yang b/vendor/arrcus/arcos/v521/arcos-igp-types.yang new file mode 100644 index 000000000..35f6c8e49 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-igp-types.yang @@ -0,0 +1,177 @@ +module arcos-igp-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/igp-types"; + prefix arc-igp-types; + + import openconfig-routing-policy { + prefix oc-rpol; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS IGP domain. + + Copyright (c) 2016-2020 by Arrcus, Inc. + All rights reserved."; + + revision 2020-06-23 { + description "Initial version"; + } + + /* + * IGP Algorithm Types identity. + */ + identity IGP_ALGORITHM_TYPE { + description + "Base identity for IGP algorithms."; + } + + identity SPF { + base "IGP_ALGORITHM_TYPE"; + description + "Shortest Path First (SPF) algorithm based on link metric. This + algorithm is advertised as numeric value 0."; + reference + "RFC8665: OSPF Extensions for Segment Routing section 8.5"; + } + + identity STRICT_SPF { + base "IGP_ALGORITHM_TYPE"; + description + "Strict shortest Path First (SPF) algorithm based on link metric. + This algorithm is advertised as numeric value 1."; + reference + "RFC8665: OSPF Extensions for Segment Routing section 8.5"; + } + + typedef igp-algorithm-type { + type union { + type identityref { + base "IGP_ALGORITHM_TYPE"; + } + type uint8; + } + description + "Type definition for IGP Algorithm Types. Unknown types are + represented as a numeric value."; + reference + "RFC8665: OSPF Extensions for Segment Routing section 8.5"; + } + + /* + * IGP MSD Types identity. + */ + identity MSD_TYPE { + description "Base identity for Maximum SIDs Depth (MSD) type"; + } + + identity SRV6_MAX_SEGMENTS_LEFT { + base MSD_TYPE; + description + "The maximum value of 'SL' field in the SRH of a + received packet. Value 41."; + } + + identity SRV6_MAX_END_POP { + base MSD_TYPE; + description + "The maximum number of SIDS in the top SRH in an SRH + stack to which the router can apply 'PSP' or 'USP'. Value 42."; + } + +/* + identity SRV6_MAX_T_INSERT { + base MSD_TYPE; + description + "The maximum number of SIDs can be inserted as port of + the 'T.insert' behavior."; + } +*/ + + identity SRV6_MAX_H_ENCAPS { + base MSD_TYPE; + description + "The maximum number of SIDs can be included as part of + the 'H.Encaps' behavior. Value 44."; + } + + identity SRV6_MAX_END_D { + base MSD_TYPE; + description + "The maximum number of SIDs in an SRH when performing + decapsulation associated with 'End.Dx' functions + (e.g., 'End.DX6' and 'End.DT6'). Value 45."; + } + + typedef msd-type { + type union { + type identityref { + base MSD_TYPE; + } + type uint8; + } + } + + grouping default-information-originate-config { + leaf enabled { + type boolean; + description + "Enable advertisement of default route"; + } + + leaf always { + type boolean; + description + "Always advertise default route regardless of RIB state"; + } + + uses oc-rpol:apply-policy-export-config; + } + + grouping default-information-originate-config-top { + container config { + description + "Configuration parameters relating to default-information originate"; + uses default-information-originate-config; + } + } + + grouping default-information-originate-state-top { + container state { + config false; + description + "State information relating to default-information originate"; + uses default-information-originate-config; + + leaf advertised { + type boolean; + description + "This boolean being set to true indicates that default route is advertised"; + } + } + } + + grouping default-information-top { + container default-information { + description + "IGP default-information parameters"; + container originate { + description + "IGP default-information parameters"; + uses default-information-originate-config-top; + uses default-information-originate-state-top; + } + } + } +} \ No newline at end of file diff --git a/vendor/arrcus/arcos/v521/arcos-interfaces-breakout.yang b/vendor/arrcus/arcos/v521/arcos-interfaces-breakout.yang new file mode 100644 index 000000000..d62808397 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-interfaces-breakout.yang @@ -0,0 +1,62 @@ +module arcos-interfaces-breakout { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/interfaces/breakout"; + prefix arc-if-brkout; + + container break-out { + description + "Configure physical port break-out"; + list slot { + key "slot-id"; + description "List of slots configured for breakout"; + leaf slot-id { + type uint32; + description "slot number"; + } + list ports { + description "port number to break-out"; + key "port"; + leaf port { + type uint16; + description "port number"; + } + leaf mode { + type enumeration { + enum 10gx4 { + value 1; + } + enum 25gx4 { + value 2; + } + enum 40gx2 { + value 3; + } + enum 50gx2 { + value 4; + } + enum 10gx8 { + value 5; + } + enum 25gx8 { + value 6; + } + enum 50gx4 { + value 7; + } + enum 100gx4 { + value 8; + } + enum 100gx2 { + value 9; + } + enum 200gx2 { + value 10; + } + } + mandatory true; + description "breakout type(speed x number of ports)"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-interfaces-cache.yang b/vendor/arrcus/arcos/v521/arcos-interfaces-cache.yang new file mode 100644 index 000000000..c5b57ca66 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-interfaces-cache.yang @@ -0,0 +1,43 @@ +module arcos-interfaces-cache { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/interfaces/cache"; + prefix arc-if-cache; + + container ifcache-entries { + description + "ifcache table entries"; + + config false; + + list ifcache-entry { + description + "Interface of entry"; + + key "ifname"; + + leaf ifname { + type string; + description + "Interface name"; + } + + leaf actor-flags { + type uint8; + description + "Actor LACP flags"; + } + + leaf partner-flags { + type uint16; + description + "Partner LACP flags"; + } + + leaf slave-state { + type uint8; + description + "Slave state in case of LACP member"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-interfaces-clear.yang b/vendor/arrcus/arcos/v521/arcos-interfaces-clear.yang new file mode 100644 index 000000000..767eb7735 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-interfaces-clear.yang @@ -0,0 +1,32 @@ +module arcos-interfaces-clear { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/interfaces/clear"; + prefix arc-if-clr; + + container if-clear { + description + "Clear Interface statistics"; + + action counters { + description + "Clear Interface statistic counters"; + + input { + leaf name { + type string; + mandatory true; + description + "The interface name whose counters needs to be cleared. + Use 'all' for all interfaces"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-interfaces-debug.yang b/vendor/arrcus/arcos/v521/arcos-interfaces-debug.yang new file mode 100644 index 000000000..1d9273aec --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-interfaces-debug.yang @@ -0,0 +1,56 @@ +module arcos-interfaces-debug { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/interfaces/debug"; + prefix arc-if-dbg; + + typedef ifmgr-debug-state { + type enumeration { + enum on { + description + "Enable debug"; + } + enum off { + description + "Disable debug"; + } + } + } + + typedef ifmgr-debug-type { + type enumeration { + enum control { + description + "Control processing debugs"; + } + } + } + + container ifmgr-debug { + description + "Interface Manager debug control"; + + action debug { + input { + leaf type { + type ifmgr-debug-type; + mandatory true; + description + "Debug to be controlled"; + } + leaf op { + type ifmgr-debug-state; + mandatory true; + description + "Turn on/off operation"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-isis-debug.yang b/vendor/arrcus/arcos/v521/arcos-isis-debug.yang new file mode 100644 index 000000000..e0ce7a86d --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-isis-debug.yang @@ -0,0 +1,64 @@ +module arcos-isis-debug { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/isis/debug"; + prefix arc-isis-dbg; + + import openconfig-policy-types { + prefix oc-pol-types; + } + + import arcos-debug { + prefix arc-dbg; + } + + grouping isis-debug-filters { + uses arc-dbg:sysid-match-filter { + when "item-name = 'adjacency'" + + " or item-name = 'lsp'" + + " or item-name = 'snp'"; + } + + uses arc-dbg:intf-match-filter { + when "item-name = 'adjacency'" + + " or item-name = 'iih'" + + " or item-name = 'interface'" + + " or item-name = 'packet'" + + " or item-name = 'bfd'"; + } + + uses arc-dbg:ip-prefix-match-filter { + when "item-name = 'rib'" + + " or item-name = 'redist-rib'"; + } + } + + grouping isis-debug-top { + container isis { + description + "This container defines instance-specific ISIS debug information."; + config false; + + uses arc-dbg:debug-component-top; + } + } + + augment "/arc-dbg:debug/arc-dbg:network-instances/arc-dbg:network-instance" + + "/arc-dbg:protocols/arc-dbg:protocol" { + + uses isis-debug-top { + when "arc-dbg:identifier = 'oc-pol-types:ISIS'" { + description + "Include IS-IS debug information when the protocol is of type + IS-IS"; + } + description + "Debug information related to a specific instance of IS-IS."; + } + } + + augment "/arc-dbg:debug/arc-dbg:network-instances/arc-dbg:network-instance" + + "/arc-dbg:protocols/arc-dbg:protocol/arc-isis-dbg:isis" + + "/arc-isis-dbg:component-debug-items" { + uses isis-debug-filters; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-isis-types.yang b/vendor/arrcus/arcos/v521/arcos-isis-types.yang new file mode 100644 index 000000000..520739dc1 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-isis-types.yang @@ -0,0 +1,89 @@ +module arcos-isis-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/isis/types"; + prefix arc-isis-types; + + identity level-bits { + description "Base identitfy type for level-bits."; + } + + identity LEVEL_NONE { + base level-bits; + description "Identitfy for no level-bits set."; + } + + identity LEVEL_1 { + base level-bits; + description "Identitfy for level 1 bit set."; + } + + identity LEVEL_2 { + base level-bits; + description "Identitfy for level 2 bit set."; + } + + identity LEVEL_1_2 { + base level-bits; + description "Identitfy for level 1 and 2 bits set."; + } + + typedef network-type { + type enumeration { + enum UNKNOWN { + description "This enum describes a unknown interface."; + } + enum LOOPBACK { + description "This enum describes a loopback interface."; + } + enum POINT_TO_POINT { + description "This enum describes a point-to-point interface."; + } + enum BROADCAST { + description "This enum describes a broadcast interface."; + } + } + description + "This type defines ISIS interface network types."; + } + + typedef node-id { + type string { + pattern + '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9][0-9]'; + } + description + "This type defines ISIS node ID. ISIS node ID type should be in + the form of xxxx.xxxx.xxxx.xx. It is used to represent LAN ID + and circuit ID"; + } + + typedef system-name { + type string { + pattern '.*'; + } + description + "This type defines ISIS node name. ISIS system ID type should be in + the form of , where is either a hostname or in the + format 'XXXX.XXXX.XXXX'."; + } + + typedef node-name { + type string { + pattern '.*\.[0-9A-Fa-f]{2}'; + } + description + "This type defines ISIS node name. ISIS node ID type should be in + the form of .xx, where is either a hostname or in the + format 'XXXX.XXXX.XXXX'. It is used to represent LAN ID and circuit ID"; + } + + typedef lsp-name { + type string { + pattern '.*\.[0-9A-Fa-f]{2}-[0-9A-Fa-f]{2}'; + } + description + "This type defines ISIS LSP name. ISIS LSP name type should be in + the form of .xx-xx, where is either a hostname or in the + format 'XXXX.XXXX.XXXX'."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-l2rib.yang b/vendor/arrcus/arcos/v521/arcos-l2rib.yang new file mode 100644 index 000000000..0e78c1d94 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-l2rib.yang @@ -0,0 +1,1687 @@ +module arcos-l2rib { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/l2rib"; + prefix arc-l2rib; + + import openconfig-network-instance { + prefix oc-ni; + } + + import openconfig-network-instance-types { + prefix oc-ni-types; + } + + import arcos-openconfig-network-instance-types { + prefix arc-oc-ni-types; + } + + import arcos-openconfig-network-instance-augments { + prefix arc-oc-netinst-aug; + } + + import ietf-inet-types { + prefix inet; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-types { + prefix oc-types; + } + + import ietf-yang-types { + prefix yang; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS Layer 2 RIB domain. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-29 { + description "Add l2ni state for mac-limit, pkt-action, + l2ni mac-valid and mac-on-hold counters + and mac entry state to indicate + if mac is in hold state"; + } + + revision 2022-12-14 { + description "Static VXLAN REMOTE Producer"; + } + + revision 2022-03-31 { + description "Support for EVPN MPLS underlay"; + } + + revision 2019-10-31 { + description "Initial version"; + } + + + identity L2RIB_PRODUCER_CONSUMER_TYPE { + description + "Base type for entities which can either install routes into or + receive routes from the L2 RIB"; + } + + identity NONE { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "No Protocol"; + } + + identity BGP { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Border Gateway Protocol"; + } + + identity STATIC { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Locally configured static route"; + } + + identity LOCAL { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Locally learned/gleaned route"; + } + + identity REMOTE { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Remote learned/gleaned route"; + } + + identity INTERNAL_LOCAL { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "marked Local internally"; + } + + identity BGP_DERIVED { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Route derived from a different type of BGP route"; + } + + identity RIB { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Layer 3 Routing Information Base"; + } + + identity RIB_V4 { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Layer 3 Routing Information Base for IPv4"; + } + + identity RIB_V6 { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Layer 3 Routing Information Basefor IPv6"; + } + + identity FIB { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Forwarding Information Base"; + } + + identity FIB_V4 { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Forwarding Information Base for IPv4"; + } + + identity FIB_V6 { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Forwarding Information Base for IPv6"; + } + + identity DPAL { + base L2RIB_PRODUCER_CONSUMER_TYPE; + description "Data Plane Adaptation Layer"; + } + + + /* + * L2RIB Table Type + */ + identity L2RIB_TABLE_TYPE { + description + "L2RIB L2NI Table Type"; + } + + identity TABLE_TYPE_NONE { + base L2RIB_TABLE_TYPE; + description "Invalid type"; + } + + identity TABLE_TYPE_INTERFACE { + base L2RIB_TABLE_TYPE; + description "Interface"; + } + + identity TABLE_TYPE_VLAN { + base L2RIB_TABLE_TYPE; + description "VLAN"; + } + + identity TABLE_TYPE_EVPN_VPWS { + base L2RIB_TABLE_TYPE; + description "EVPN VPWS"; + } + + identity TABLE_TYPE_VLAN_AWARE_BUNDLE { + base L2RIB_TABLE_TYPE; + description "VLAN Aware Bundle"; + } + + /* + * L2RIB Egress Type + */ + identity L2RIB_EGRESS_TYPE { + description + "Base identity to represent the egress type of L2RIB path or nexthop."; + } + + identity EGRESS_NONE { + base "L2RIB_EGRESS_TYPE"; + description + "No egress information available."; + } + + identity EGRESS_TUNNEL { + base "L2RIB_EGRESS_TYPE"; + description + "A tunnel."; + } + + identity EGRESS_PATH { + base "L2RIB_EGRESS_TYPE"; + description + "A single path."; + } + + identity EGRESS_ECMP { + base "L2RIB_EGRESS_TYPE"; + description + "Underlay ECMP paths."; + } + + identity EGRESS_OVERLAY_ECMP { + base "L2RIB_EGRESS_TYPE"; + description + "Overlay ECMP paths."; + } + + identity EGRESS_IFINDEX { + base "L2RIB_EGRESS_TYPE"; + description + "Interface ifindex."; + } + + /* + * L2RIB L2NI State + */ + grouping l2ni-state { + description + "Grouping for L2RIB L2NI state"; + + container l2ni-state { + description + "L2NI state"; + + leaf id { + type uint32; + description + "L2NI ID"; + } + + leaf name { + type string; + description + "L2NI Name"; + } + + leaf type { + type identityref { + base "L2RIB_TABLE_TYPE"; + } + description + "L2NI Type"; + } + + leaf vni { + type uint32; + description + "VNI"; + } + + leaf parent-ifindex { + type uint32; + description + "Parent interface-index"; + } + + leaf l3-ifindex { + type uint32; + description + "Layer3 interface-index"; + } + + leaf parent-vlan-aware-bundle-id { + type uint32; + description + "The ID of the parent VLAN Aware Bundle L2NI"; + } + + leaf bundle-vlan-count { + type uint32; + description + "Number of VLAN IDs in this VLAN Aware Bundle L2NI"; + } + + leaf-list bundle-vlan-ids { + type uint16; + description + "List of VLAN IDs in this VLAN Aware Bundle L2NI"; + } + + leaf advertise-mac-routes { + type boolean; + description + "Advertise EVPN MAC routes"; + } + + leaf maximum-mac-entries { + type uint32; + description + "Maximum number of mac-entries that can be programmed on this L2NI."; + } + + leaf pkt-action { + type identityref { + base "arc-oc-netinst-aug:MAC_LIMIT_PACKET_ACTION_TYPE"; + } + description + "Packet action when number of macs on this L2ni exceeds + the configured maximum value."; + } + + leaf mac-limit-state { + type boolean; + description + "Indicates if the L2NI is in a state of mac limit violation."; + } + + leaf flags { + type yang:hex-string; + description + "Opaque flags"; + } + } + } + + grouping path-full { + description + "Parameters relating to a next-hop within the L2 RIB entry"; + + leaf resolved { + type boolean; + description + "True if the path is fully resolved"; + } + leaf esi-resolved { + type boolean; + description + "True if the route contains an ESI and there is a + corresponding ESI route with the same path"; + } + leaf af { + type identityref { + base "oc-types:ADDRESS_FAMILY"; + } + } + leaf next-hop { + type inet:ip-address-no-zone; + description + "The next-hop that is to be used for the route + - this may be an IPv4 or IPv6 address"; + } + leaf encap-type { + type enumeration { + enum VXLAN { + description "VXLAN tunnel encapsulation"; + } + enum MPLS { + description "MPLS encapsulation"; + } + } + } + leaf l2-label { + type uint32; + description + "VNI for VXLAN Encap, MPLS Label for MPLS Encap"; + } + leaf nh-ni-name { + type string; + description + "Name of Network Instance the next-hop IP is within"; + } + leaf path-type { + type identityref { + base L2RIB_EGRESS_TYPE; + } + description + "Path type"; + } + leaf path-id { + type uint64; + description + "Internal Path id allocated to path"; + } + } + + grouping path-brief { + description + "Brief parameters relating to a next-hop within the L2 RIB entry"; + + leaf next-hop { + type inet:ip-address-no-zone; + description + "The next-hop that is to be used for the route + - this may be an IPv4 or IPv6 address"; + } + leaf encap-type { + type enumeration { + enum VXLAN { + description "VXLAN tunnel encapsulation"; + } + enum MPLS { + description "MPLS encapsulation"; + } + } + } + leaf l2-label { + type uint32; + description + "VNI for VXLAN Encap, MPLS Label for MPLS Encap"; + } + leaf nh-ni-name { + type string; + description + "Name of Network Instance the next-hop IP is within"; + } + leaf resolved { + type boolean; + description + "True if the path is fully resolved"; + } + } + + grouping mac-origin-full { + description + "Parameters related to a route producer for a MAC route"; + + list origin { + key "origin-protocol"; + + leaf origin-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "The protocol from which the L2 RIB entry was learned."; + } + leaf local-interface { + type oc-if:interface-id; + description + "Interface the MAC was learned on, if locally learned"; + } + leaf esi { + type yang:hex-string; + description + "Ethernet Segment Identifier"; + } + leaf seq-num { + type uint32; + description + "Route sequence number"; + } + leaf sticky { + type boolean; + description + "True if this mac is currently marked sticky"; + } + leaf local-vni { + type uint32; + description + "Local VXLAN VNI"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was updated"; + } + leaf flags { + type string; + description + "This can be used to show internal state eg. stale etc"; + } + leaf next-hop-type { + type identityref { + base L2RIB_EGRESS_TYPE; + } + description + "Next-hop type"; + } + leaf next-hop-id { + type uint64; + description + "Next hop id allocated to set of paths"; + } + leaf next-hop-path-count { + type uint32; + description + "Number of overlay egress paths in use"; + } + leaf next-hop-aliasing-path-count { + type uint32; + description + "Number of aliasing overlay egress paths in use"; + } + list paths { + description + "Paths for this MAC route"; + uses path-full; + } + } + } + + grouping mac-origin-brief { + description + "Brief Parameters related to a route producer for a MAC route"; + + leaf local-interface { + type oc-if:interface-id; + description + "Interface the MAC was learned on, if locally learned"; + } + leaf esi { + type yang:hex-string; + description + "Ethernet Segment Identifier"; + } + leaf origin-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "The protocol from which the L2 RIB entry was learned."; + } + leaf seq-num { + type uint32; + description + "Route sequence number"; + } + leaf sticky { + type boolean; + description + "True if this mac is currently marked sticky"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was updated"; + } + list paths { + description + "Paths for this MAC route"; + uses path-brief; + } + } + + grouping mac-entries-full { + description + "Grouping for full MAC route entries"; + + container mac-entries-full { + description + "Full MAC entry listing"; + + list entry { + key "mac-address"; + description + "MAC Address used for lookup"; + + leaf mac-address { + type yang:mac-address; + description + "The MAC Address corresponding to the route"; + } + leaf best-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + leaf duplicate-move-count { + type uint32; + description + "Number of mac moves for this mac within the duplicate detection window"; + } + leaf duplicate-start-time { + type yang:date-and-time; + description + "Indicates start time for duplicat detection window"; + } + leaf duplicate { + type boolean; + description + "True if this mac is currently marked duplicate"; + } + leaf total-move-count { + type uint64; + description + "Total number of mac moves for this mac"; + } + leaf on-hold { + type boolean; + description + "True if this mac is currently on hold because of mac limit violation on L2NI"; + } + uses mac-origin-full; + } + } + } + + grouping mac-entries-brief { + description + "Grouping for brief MAC route entries"; + + container mac-entries { + description + "Brief MAC entry listing"; + + list entry { + key "mac-address"; + description + "MAC Address used for lookup"; + + leaf mac-address { + type yang:mac-address; + description + "The MAC Address corresponding to the route"; + } + uses mac-origin-brief; + } + } + } + + grouping mac-ip-origin-full { + description + "Grouping for route producer information"; + + list origin { + key "origin-protocol"; + + leaf origin-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "The protocol from which the L2 RIB entry was learned."; + } + leaf mac-address { + type yang:mac-address; + description + "The MAC Address corresponding to the route"; + } + leaf l3-local-interface { + type oc-if:interface-id; + description + "Local layer 3 interface this host IP is reachable through "; + } + leaf ip-vrf-id { + type uint32; + description + "Local layer 3 interface IP VRF ID"; + } + leaf l2-local-interface { + type oc-if:interface-id; + description + "Local layer 2 interface the MAC address is reachable through "; + } + leaf esi { + type yang:hex-string; + description + "Ethernet Segment Identifier"; + } + leaf seq-num { + type uint32; + description + "Route sequence number"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was updated"; + } + leaf flags { + type string; + description + "This can be used to show internal state eg. stale etc"; + } + leaf current-retry-count { + type uint32; + description + "current retry count for an object currently in retry"; + } + leaf total-retries { + type uint32; + description + "total retry count for an object over its lifetime"; + } + leaf next-hop-type { + type identityref { + base L2RIB_EGRESS_TYPE; + } + description + "Next-hop type"; + } + leaf next-hop-id { + type uint64; + description + "Next-hop id allocated to set of paths"; + } + list paths { + description + "Paths for this MAC route"; + uses path-full; + } + } + } + + grouping mac-ip-origin-brief { + description + "Grouping for route producer brief information"; + + leaf mac-address { + type yang:mac-address; + description + "The MAC Address corresponding to the route"; + } + leaf l3-local-interface { + type oc-if:interface-id; + description + "Local layer 3 interface this host IP is reachable through "; + } + leaf l2-local-interface { + type oc-if:interface-id; + description + "Local layer 2 interface the MAC address is reachable through "; + } + leaf esi { + type yang:hex-string; + description + "Ethernet Segment Identifier"; + } + leaf origin-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "The protocol from which the L2 RIB entry was learned."; + } + leaf seq-num { + type uint32; + description + "Route sequence number"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was updated"; + } + list paths { + description + "Paths for this MAC route."; + uses path-brief; + } + } + + grouping inclusive-multicast-ipv4-origin { + description + "Grouping for route producer information"; + + leaf origin-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "The protocol from which the L2 RIB entry was learned."; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was updated"; + } + leaf next-hop-type { + type identityref { + base L2RIB_EGRESS_TYPE; + } + description + "Next-hop type"; + } + leaf next-id { + type uint64; + description + "Internal tunnel or path id for this route"; + } + leaf flags { + type yang:hex-string; + description + "Opaque flags"; + } + + uses path-full; + } + + grouping mac-ipv4-entries-full { + description + "Grouping for forwarding entries by lookup keys"; + + container mac-ipv4-entries-full { + description + "Full IPv4 MAC-IP entry listing"; + + list entry { + key "ipv4-address"; + description + "IPv4 host address used for lookup"; + + leaf ipv4-address { + type inet:ipv4-address-no-zone; + description + "IPv4 Host Address"; + } + leaf best-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + uses mac-ip-origin-full; + } + } + } + + grouping mac-ipv4-entries-brief { + description + "Grouping for forwarding entries by lookup keys"; + + container mac-ipv4-entries { + description + "Brief IPv4 MAC-IP entry listing"; + + list entry { + key "ipv4-address"; + description + "IPv4 host address used for lookup"; + + leaf ipv4-address { + type inet:ipv4-address-no-zone; + description + "IPv4 Host Address"; + } + uses mac-ip-origin-brief; + } + } + } + + grouping mac-ipv6-entries-full { + description + "Grouping for forwarding entries by lookup keys"; + + container mac-ipv6-entries-full { + description + "Full IPv6 MAC-IP entry listing"; + + list entry { + key "ipv6-address"; + description + "IPv6 Host address used for lookup"; + + leaf ipv6-address { + type inet:ipv6-address-no-zone; + description + "IPv6 Host Address"; + } + leaf best-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + uses mac-ip-origin-full; + } + } + } + + grouping mac-ipv6-entries-brief { + description + "Grouping for brief IPv6 MAC-IP routes"; + + container mac-ipv6-entries { + description + "Brief IPv6 MAC-IP entry listing"; + + list entry { + key "ipv6-address"; + description + "IPv6 Host address used for lookup"; + + leaf ipv6-address { + type inet:ipv6-address-no-zone; + description + "IPv6 Host Address"; + } + uses mac-ip-origin-brief; + } + } + } + + grouping inclusive-multicast-entries { + description + "Grouping for inclusive mutlicast entry"; + + container inclusive-multicast-entries { + description + "Inclusive Multicast entry listing"; + + list entry { + key "ipv4-address"; + description + "IPv4 peer address used for lookup"; + + leaf ipv4-address { + type inet:ipv4-address-no-zone; + description + "IPv4 Peer Address"; + } + uses inclusive-multicast-ipv4-origin; + } + } + } + + grouping evi-esi-entries { + description + "Grouping for brief EVI-ESI routes"; + + container evi-esi-entries { + description + "Brief EVI-ESI Route entry listing"; + + list entry { + key "esi"; + description + "Ethernet Segment Identifier used for lookup"; + + leaf esi { + type yang:hex-string; + description + "Ethernet Segment Identifier"; + } + leaf flags { + type yang:hex-string; + description + "Opaque flags"; + } + leaf next-hop-type { + type identityref { + base L2RIB_EGRESS_TYPE; + } + description + "Next-hop type"; + } + leaf next-hop-id { + type uint64; + description + "Next-hop id allocated to set of paths"; + } + leaf next-hop-path-count { + type uint32; + description + "Number of overlay egress paths in use"; + } + list paths { + description + "Paths for this MAC route"; + + uses path-full; + } + } + } + } + + grouping vpws-evi-entries { + description + "Grouping for VPWS EVI routes"; + + container vpws-evi-entries { + description + "VPWS EVI Route entry listing"; + + list entry { + key "local-interface"; + description + "Local Interface Identifier used for lookup"; + + leaf local-interface { + type oc-if:interface-id; + description + "Local Interface for this VPWS Route"; + } + leaf local-sid { + type uint32; + description + "Local VPWS service instance identifier"; + } + leaf remote-sid { + type uint32; + description + "Remote VPWS service instance identifier"; + } + leaf ingress-label { + type uint32; + description + "Ingress MPLS Label"; + } + leaf esi { + type yang:hex-string; + description + "Ethernet Segment Identifier"; + } + leaf overlay-ecmp-nhid { + type uint64; + description + "Next-hop id allocated to set of paths for overlay ECMP"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was updated"; + } + list paths { + description + "Paths for this route"; + uses path-full; + } + } + } + } + + grouping memory-stats { + description + "L2 RIB memory stats counters"; + + leaf global-alloc { + type yang:counter64; + description + "Number of global allocs"; + } + leaf global-free { + type yang:counter64; + description + "Number of global frees"; + } + leaf l2ni-alloc { + type yang:counter64; + description + "Number of L2NI object allocs"; + } + leaf l2ni-free { + type yang:counter64; + description + "Number of L2NI object frees"; + } + leaf mac-entry-alloc { + type yang:counter64; + description + "Number of mac entry object allocs"; + } + leaf mac-entry-free { + type yang:counter64; + description + "Number of mac entry object frees"; + } + leaf mac-route-alloc { + type yang:counter64; + description + "Number of mac route object allocs"; + } + leaf mac-route-free { + type yang:counter64; + description + "Number of mac route object frees"; + } + leaf mac-ip-entry-alloc { + type yang:counter64; + description + "Number of mac-ipv4 entry object allocs"; + } + leaf mac-ip-entry-free { + type yang:counter64; + description + "Number of mac-ipv4 entry object frees"; + } + leaf mac-ip-route-alloc { + type yang:counter64; + description + "Number of mac-ipv4 route object allocs"; + } + leaf mac-ip-route-free { + type yang:counter64; + description + "Number of mac-ipv4 route object frees"; + } + leaf ir-route-alloc { + type yang:counter64; + description + "Number of ingress-replication route object allocs"; + } + leaf ir-route-free { + type yang:counter64; + description + "Number of ingress-replication route object frees"; + } + } + + grouping mobility-stats { + description + "L2 RIB mobility stats counters"; + + leaf mac-moves { + type yang:counter64; + description + "Number of MAC moves"; + } + leaf duplicate-macs { + type yang:counter64; + description + "Number of duplicate MACs at any given time"; + } + leaf duplicate-mac-events { + type yang:counter64; + description + "Total number of duplicate MAC events"; + } + leaf duplicate-mac-recovery-events { + type yang:counter64; + description + "Total number of duplicate MAC recovery events"; + } + } + + grouping producer-stats { + description + "L2 RIB producer stats counters"; + + leaf mac-routes { + type yang:counter32; + description + "Number of MAC Routes"; + } + leaf mac-ipv4-routes { + type yang:counter32; + description + "Number of MAC-IPv4 Routes"; + } + leaf mac-ipv6-routes { + type yang:counter32; + description + "Number of MAC-IPv6 Routes"; + } + leaf inclusive-multicast-routes { + type yang:counter32; + description + "Number of EVPN Inclusive Multicast Routes"; + } + leaf esi-routes { + type yang:counter32; + description + "Number of Ethernet A-D per ES Routes"; + } + leaf evi-esi-routes { + type yang:counter32; + description + "Number of Ethernet A-D per EVI Routes"; + } + leaf vpws-evi-routes { + type yang:counter32; + description + "Number of VPWS Ethernet A-D per EVI Routes"; + } + leaf mac-route-add-msg { + type yang:counter64; + description + "Number of MAC Route Add msgs rcvd"; + } + leaf mac-ipv4-route-add-msg { + type yang:counter64; + description + "Number of MAC-IPv4 Route Add msgs rcvd"; + } + leaf mac-ipv6-route-add-msg { + type yang:counter64; + description + "Number of MAC-IPv6 Route Add msgs rcvd"; + } + leaf inclusive-multicast-add-msg { + type yang:counter64; + description + "Number of Inclusive Multicast Route Add msgs rcvd"; + } + leaf esi-route-add-msg { + type yang:counter64; + description + "Number of Ethernet A-D per ES Route Add msgs rcvd"; + } + leaf evi-esi-route-add-msg { + type yang:counter64; + description + "Number of Ethernet A-D per EVI Route Add msgs rcvd"; + } + leaf vpws-evi-route-add-msg { + type yang:counter64; + description + "Number of VPWS Ethernet A-D per EVI Route Add msgs rcvd"; + } + leaf mac-route-update-msg { + type yang:counter64; + description + "Number of MAC Route Update msgs rcvd"; + } + leaf mac-ipv4-route-update-msg { + type yang:counter64; + description + "Number of MAC-IPv4 Route Update msgs rcvd"; + } + leaf mac-ipv6-route-update-msg { + type yang:counter64; + description + "Number of MAC-IPv6 Route Update msgs rcvd"; + } + leaf inclusive-multicast-update-msg { + type yang:counter64; + description + "Number of Inclusive Multicast Route Update msgs rcvd"; + } + leaf esi-route-update-msg { + type yang:counter64; + description + "Number of Ethernet A-D per ES Route Update msgs rcvd"; + } + leaf evi-esi-route-update-msg { + type yang:counter64; + description + "Number of Ethernet A-D per EVI Route Update msgs rcvd"; + } + leaf vpws-evi-route-update-msg { + type yang:counter64; + description + "Number of VPWS Ethernet A-D per EVI Route Update msgs rcvd"; + } + leaf mac-route-delete-msg { + type yang:counter64; + description + "Number of MAC Route Delete msgs rcvd"; + } + leaf mac-ipv4-route-delete-msg { + type yang:counter64; + description + "Number of MAC-IPv4 Route Delete msgs rcvd"; + } + leaf mac-ipv6-route-delete-msg { + type yang:counter64; + description + "Number of MAC-IPv6 Route Delete msgs rcvd"; + } + leaf inclusive-multicast-delete-msg { + type yang:counter64; + description + "Number of Inclusive Multicast Route Update msgs rcvd"; + } + leaf esi-route-delete-msg { + type yang:counter64; + description + "Number of Ethernet A-D per ES Route Delete msgs rcvd"; + } + leaf evi-esi-route-delete-msg { + type yang:counter64; + description + "Number of Ethernet A-D per EVI Route Delete msgs rcvd"; + } + leaf vpws-evi-route-delete-msg { + type yang:counter64; + description + "Number of VPWS Ethernet A-D per EVI Route Delete msgs rcvd"; + } + leaf mac-add-drops { + type yang:counter64; + description + "Number of MAC Route Adds dropped"; + } + leaf mac-update-drops { + type yang:counter64; + description + "Number of MAC Route Adds dropped"; + } + } + + grouping consumer-stats { + description + "L2 RIB consumer stats counters"; + + leaf mac-route-update-msg { + type yang:counter64; + description + "Number of MAC Route Update msgs sent"; + } + leaf mac-ipv4-route-update-msg { + type yang:counter64; + description + "Number of MAC-IPv4 Route Update msgs sent"; + } + leaf mac-ipv6-route-update-msg { + type yang:counter64; + description + "Number of MAC-IPv6 Route Update msgs sent"; + } + leaf inclusive-multicast-update-msg { + type yang:counter64; + description + "Number of Inclusive Multicast Route Update msgs sent"; + } + leaf next-hop-id-add-msg { + type yang:counter64; + description + "Number of next-hop-id Add msgs sent"; + } + leaf nht-req-update-msg { + type yang:counter64; + description + "Number of Next Hop Tracking Request update msgs sent"; + } + leaf vpws-evi-update-msg { + type yang:counter64; + description + "Number of VPWS EVI update msgs sent"; + } + leaf next-hop-id-delete-msg { + type yang:counter64; + description + "Number of next-hop-id Delete msgs sent"; + } + leaf mac-route-delete-msg { + type yang:counter64; + description + "Number of MAC Route Delete msgs sent"; + } + leaf mac-ipv4-route-delete-msg { + type yang:counter64; + description + "Number of MAC-IPv4 Route Delete msgs sent"; + } + leaf mac-ipv6-route-delete-msg { + type yang:counter64; + description + "Number of MAC-IPv6 Route Delete msgs sent"; + } + leaf inclusive-multicast-delete-msg { + type yang:counter64; + description + "Number of Inclusive Multicast Route Delete msgs sent"; + } + leaf nht-req-delete-msg { + type yang:counter64; + description + "Number of Next Hop Tracking Request Delete msgs sent"; + } + leaf vpws-evi-delete-msg { + type yang:counter64; + description + "Number of VPWS EVI Delete msgs sent"; + } + leaf send-retries { + type yang:counter64; + description + "Number of times sending was blocked, requiring a retry to send"; + } + } + + grouping stats-entries { + description + "grouping for L2 RIB statistics"; + + container stats-entries { + description + "L2 RIB statistics"; + + container memory { + description + "global memory statistics"; + + uses memory-stats; + } + + container mobility { + description + "network-instance mac mobility statistics"; + + uses mobility-stats; + } + container current-total { + description + "network-instance total statistics"; + + leaf num-macs { + type yang:counter32; + description + "Total Number of MAC Routes (local + dynamic) currently programmed in FDB."; + } + leaf num-macs-valid { + type yang:counter32; + description + "Number of MAC Routes valid and programmed"; + } + leaf num-macs-on-hold { + type yang:counter32; + description + "Number of MAC Routes on hold because of mac limit exceeded condition"; + } + } + + container producer-totals { + description + "Total statistics for all producers"; + + uses producer-stats; + } + + container consumer-totals { + description + "Total statistics for all consumers"; + + uses consumer-stats; + } + + list producers { + key "name"; + description + "L2 RIB producer application"; + + leaf name { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "Name of L2 RIB producer"; + } + uses producer-stats; + } + + list consumers { + key "name"; + description + "L2 RIB consumer application"; + + leaf name { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "Name of L2 RIB consumer"; + } + uses consumer-stats; + } + } + } + + grouping esi-entries { + description + "Both local and remote ESIs"; + + container esi-entries { + description + "Ethernet Segment Identifier Routes"; + + list entry { + key "esi"; + description + "Ethernet Segment Identifier used for lookup"; + + leaf esi { + type yang:hex-string; + description + "Ethernet Segment Identifier"; + } + leaf local-interface { + type oc-if:interface-id; + description + "Local Interface for this ESI, if any"; + } + leaf flags { + type string; + description + "This can be used to show internal state eg. local, remote etc"; + } + leaf vlan-count { + type uint32; + description + "Number of VLAN IDs for this ESI"; + } + leaf-list vlan-ids { + type uint16; + description + "List of VLAN IDs for this ESI"; + } + list paths { + description + "Paths for this ESI, if remote"; + uses path-brief; + leaf path-id { + type uint32; + description + "Internal Path id allocated to path"; + } + } + } + } + } + grouping ids-cmn { + description + "Next Hop ID information"; + + leaf refcount { + type uint32; + description "Refcount for the ID"; + } + list paths { + description + "Path information for NHID container"; + key "path-id"; + leaf path-id { + type uint32; + description + "Path egress ID"; + } + leaf path-type { + type identityref { + base L2RIB_EGRESS_TYPE; + } + description + "Type of path"; + } + leaf label { + type uint32; + description + "MPLS label, if applicable"; + } + } + } + + grouping container-id-entries { + container container-id-entries { + list entry { + description + "Container ID Information for L2RIB table"; + key "id"; + leaf id { + type uint32; + description "Container ID allocated by L2RIB"; + } + uses ids-cmn; + } + } + } + + grouping ipv4-neighbors { + description + "Grouping for L2RIB IPv4 neighbors"; + + container ipv4-neighbors { + description + "IPv4 neighbor entry listing"; + + list entry { + key "ifname ipv4-address"; + description + "Interface name and IPv4 neighbor address used for lookup"; + + leaf ifname { + type string; + description "Interface the neighbor is associated with"; + } + leaf ipv4-address { + type inet:ipv4-address-no-zone; + description + "Neighbor IPv4 Address"; + } + leaf mac-address { + type yang:mac-address; + description + "The MAC Address of the neighbor"; + } + leaf origin-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "Originator of this neighbor entry"; + } + } + } + } + + grouping ipv6-neighbors { + description + "Grouping for L2RIB IPv6 neighbors"; + + container ipv6-neighbors { + description + "IPv6 neighbor entry listing"; + + list entry { + key "ifname ipv6-address"; + description + "Interface name and IPv6 neighbor address used for lookup"; + + leaf ifname { + type string; + description "Interface the neighbor is associated with"; + } + leaf ipv6-address { + type inet:ipv6-address-no-zone; + description + "Neighbor IPv6 Address"; + } + leaf mac-address { + type yang:mac-address; + description + "The MAC Address of the neighbor"; + } + leaf origin-protocol { + type identityref { + base "L2RIB_PRODUCER_CONSUMER_TYPE"; + } + description + "Originator of this neighbor entry"; + } + } + } + } + + grouping l2rib-top { + description + "Top-level grouping for L2 RIB"; + + container l2rib { + description + "Global level state for the Layer 2 Routing Information Base"; + + config false; + uses esi-entries; + uses container-id-entries; + uses ipv4-neighbors; + uses ipv6-neighbors; + uses stats-entries; + } + } + + grouping l2rib-ni-top { + description + "Top-level grouping for L2 RIB under Network Interface"; + + container l2rib { + description + "Layer 2 Routing Information Base state information"; + + config false; + + uses l2ni-state; + uses mac-entries-brief; + uses mac-entries-full; + uses mac-ipv4-entries-brief; + uses mac-ipv4-entries-full; + uses mac-ipv6-entries-brief; + uses mac-ipv6-entries-full; + uses inclusive-multicast-entries; + uses evi-esi-entries; + uses vpws-evi-entries; + uses stats-entries; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" { + uses l2rib-ni-top { + when "./oc-ni:config/oc-ni:type = 'oc-ni-types:L2VLAN' or " + + "./oc-ni:config/oc-ni:type = 'arc-oc-ni-types:L2P2P_EVPN' or " + + "./oc-ni:config/oc-ni:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + } + } + } + + uses l2rib-top; + +} diff --git a/vendor/arrcus/arcos/v521/arcos-l3fm-debug.yang b/vendor/arrcus/arcos/v521/arcos-l3fm-debug.yang new file mode 100644 index 000000000..ec05d09fa --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-l3fm-debug.yang @@ -0,0 +1,88 @@ +module arcos-l3fm-debug { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/l3fm/debug"; + prefix arc-l3fm-dbg; + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS L3FM Debug domain. + + Note: This module is under deprecation and + will be migrated to another module. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + revision 2019-10-31 { + description "Initial version"; + } + + typedef l3fm-debug-state { + type enumeration { + enum off { + description + "Disable debug"; + } + enum on { + description + "Enable debug"; + } + } + } + + typedef l3fm-debug-type { + type enumeration { + enum all { + description + "L3FM All debugs"; + } + enum event { + description + "L3FM Event debugs"; + } + enum ui { + description + "L3FM UI debugs"; + } + } + } + + container l3fm-debug { + description + "L3FM debug control"; + action process { + input { + leaf debug { + type l3fm-debug-type; + mandatory true; + description + "Debug to be controlled"; + } + leaf op { + type l3fm-debug-state; + mandatory true; + description + "turn on/off operation"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ldp-debug.yang b/vendor/arrcus/arcos/v521/arcos-ldp-debug.yang new file mode 100644 index 000000000..115a9ec61 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ldp-debug.yang @@ -0,0 +1,94 @@ +/** + * Filename: arcos-ldp-debug.yang + * + * Description: + * YANG data-model for LDP Debugs Action + * + * Copyright 2019 by Arrcus, Inc. + * All rights reserved. + */ + +module arcos-ldp-debug { + namespace "http://yang.arrcus.com/arcos/ldp/debug"; + + prefix arc-ldp-debug; + + import ietf-inet-types { prefix inet; } + import openconfig-types { prefix "oc-types"; } + import ietf-interfaces { prefix ietf-if; } + import tailf-common { prefix tailf; } + + organization + "Arrcus, Inc."; + + contact + "Lalit"; + + description + "YANG data-model for LDP Debugs definitions."; + + typedef ldp-debug-state { + type enumeration { + enum on { + description + "Enable debug"; + } + enum off { + description + "Disable debug"; + } + } + } + + typedef ldp-debug-type { + type enumeration { + enum ldp { + description + "Control ldp debugs"; + } + enum ldp-engine { + description + "Control ldp-engine debugs"; + } + enum session { + description + "Control ldp session debugs"; + } + enum all { + description + "Control All debugs"; + } + } + } + + container ldp-debug { + description + "LDP debug control"; + tailf:action debug { + tailf:cli-operational-mode; + tailf:cli-mount-point "tech-support"; + tailf:actionpoint ldp-debug-point; + input { + leaf type { + type ldp-debug-type; + mandatory true; + description + "Debug to be controlled"; + } + leaf op { + type ldp-debug-state; + mandatory true; + description + "turn on/off operation"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-license.yang b/vendor/arrcus/arcos/v521/arcos-license.yang new file mode 100644 index 000000000..babdb2189 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-license.yang @@ -0,0 +1,105 @@ +module arcos-license { + yang-version "1.1"; + namespace "http://yang.arrcus.com/arcos/license"; + prefix arc-lic; + + import ietf-yang-types { + prefix yang; + } + + import arcos-common-types { + prefix arc-common-types; + } + + grouping license-state { + description + "Global operational state data for Licenses"; + + leaf license-key { + type string { + length 25..56; + } + description + "License key"; + } + + leaf product-id { + type string { + length 1..32; + } + + description + "Product ID/SKU"; + } + + leaf expiration-date { + type union { + type enumeration { + enum PERPETUAL; + } + + type yang:date-and-time; + } + description + "License expiration date"; + } + } + + grouping license-rpc-input-params { + leaf license-key { + type string { + length 25..56; + } + mandatory true; + description + "License key"; + } + } + + grouping license-top { + description + "Top level grouping for license data and structure"; + + container licenses { + config false; + description + "Top level enclosing container for license operational state data"; + + list license { + description + "Global operational state data for licenses"; + + key "license-key"; + uses license-state; + } + } + } + + uses license-top; + + rpc request-license-add { + description + "Add license key"; + + input { + uses license-rpc-input-params; + } + + output { + uses arc-common-types:generic-rpc-response; + } + } + + rpc request-license-remove { + description + "Remove license key"; + + input { + uses license-rpc-input-params; + } + + output { + uses arc-common-types:generic-rpc-response; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-mbroker.yang b/vendor/arrcus/arcos/v521/arcos-mbroker.yang new file mode 100644 index 000000000..48ba77ce5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-mbroker.yang @@ -0,0 +1,718 @@ +module arcos-mbroker { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/mbroker"; + prefix "arc-mbroker"; + + typedef mbroker-type { + type enumeration { + enum "MPROXY" { + value 1; + } + enum "MPS" { + value 2; + } + } + } + + typedef mbroker-ep-type { + type enumeration { + enum "SOURCE" { + value 1; + } + enum "DRAIN" { + value 2; + } + enum "PUBLISHER" { + value 3; + } + enum "SUBSCRIBER" { + value 4; + } + } + } + + typedef mbroker-state { + type enumeration { + enum "INVALID" { + value 0; + } + enum "UP" { + value 1; + } + enum "DOWN" { + value 2; + } + enum "MARK_SWEEP_TIMER" { + value 3; + } + } + } + + typedef mbroker-mode { + type enumeration { + enum "ACTIVE" { + value 1; + } + enum "STANDBY" { + value 2; + } + enum "ACTIVE-TO-STANDBY" { + value 3; + } + enum "STANDBY-TO-ACTIVE" { + value 4; + } + enum "UNKNOWN" { + value 5; + } + } + } + + grouping mb-ep-state { + description "End-point state"; + leaf status { + type mbroker-state; + description + "End point current status"; + } + leaf reset-count { + type uint16; + description + "Connection reset count"; + } + } + + grouping mb-ep-tbl-state { + description "End-point consolidated state info"; + leaf total-tables { + type uint16; + description + "Total table count"; + } + leaf total-entries { + type uint64; + description + "Total sum of entries across all tables"; + } + leaf total-msg-add { + type uint64; + description + "Total add message count"; + } + leaf total-msg-upd { + type uint64; + description + "Total update message count"; + } + leaf total-msg-del { + type uint64; + description + "Total delete message count"; + } + } + + grouping mb-tbl-state { + description "Table state info"; + leaf msg-add { + type uint64; + description + "Add message count"; + } + leaf msg-upd { + type uint64; + description + "Update message count"; + } + leaf msg-del { + type uint64; + description + "Delete message count"; + } + } + + grouping mb-bind-client-tables { + container table { + description "Bind clinet per table info"; + list table { + key "table-id"; + description "Table id"; + leaf table-id { + type uint32; + description + "Table ID"; + } + leaf table-size { + type uint64; + description + "Table size"; + } + uses mb-tbl-state; + } + } + } + + grouping mb-ep-events { + description "End-point last event"; + leaf ep-events { + type string; + description + "End Point events"; + } + } + + grouping mb-bind-clients { + container bind-client { + description "Bind client for source end-point"; + list bind-client { + key "bind-client-name"; + description + "Bind client to server end-point name"; + leaf bind-client-name { + type string; + description + "End point name"; + } + uses mb-ep-state; + uses mb-ep-tbl-state; + uses mb-bind-client-tables; + uses mb-ep-events; + } + } + } + + grouping mb-ep-source { + container sources { + list source { + key "ep-name"; + description + "Source end point"; + leaf ep-name { + type string; + description + "End point name"; + } + leaf ep-type { + type mbroker-ep-type; + description + "End point type"; + } + leaf uri { + type string; + description "Source End point URI protocol://ip-address:port"; + } + leaf service { + type string; + description "Source service name"; + } + uses mb-ep-state; + uses mb-ep-tbl-state; + uses mb-bind-clients; + uses mb-ep-events; + } + } + } + + grouping mb-ep-drain { + container drains { + list drain { + key "ep-name"; + description + "Drain end point"; + leaf ep-name { + type string; + description + "End point name"; + } + leaf ep-type { + type mbroker-ep-type; + description + "End point type"; + } + leaf uri { + type string; + description "Drain End point URI protocol://ip-address:port"; + } + leaf service { + type string; + description "Drain service name"; + } + leaf total-msg-left { + type uint64; + description "Drain service name"; + } + leaf total-msg-sent { + type uint64; + description + "Total sum of entries across all tables"; + } + leaf total-msg-add { + type uint64; + description + "Total add message count"; + } + leaf total-msg-upd { + type uint64; + description + "Total update message count"; + } + leaf total-msg-del { + type uint64; + description + "Total delete message count"; + } + uses mb-ep-state; + uses mb-ep-events; + } + } + } + + grouping mps-tbl-pubs { + container publishers { + description "Publisher tables information"; + list publisher { + key "pub-id"; + description "Publisher ID"; + leaf pub-id { + type string; + description + "Publisher ID"; + } + leaf total-messages-added { + type uint64; + description + "Total add message count"; + } + leaf total-messages-updated { + type uint64; + description + "Total update message count"; + } + leaf total-messages-deleted { + type uint64; + description + "Total delete message count"; + } + } + } + } + + grouping mps-tbl-subs { + container subscribers { + description "Subscriber tables information"; + list subscriber { + key "sub-id"; + description "Subscriber ID"; + leaf sub-id { + type string; + description + "Publisher ID"; + } + leaf total-messages-remaining { + type uint64; + description "Messages yet to receive"; + } + leaf total-messages-added { + type uint64; + description + "Total add message count"; + } + leaf total-messages-updated { + type uint64; + description + "Total update message count"; + } + leaf total-messages-deleted { + type uint64; + description + "Total delete message count"; + } + } + } + } + + grouping mb-mps-tbls { + container tables { + description "MPS tables info"; + list table { + key "table-id"; + description "Table id"; + leaf table-id { + type string; + description + "Table ID"; + } + leaf table-size { + type uint64; + description + "Table size"; + } + leaf snapshot { + type uint8; + description + "Table snapshot"; + } + uses mb-tbl-state; + uses mps-tbl-pubs; + uses mps-tbl-subs; + } + } + } + + grouping sub-tables { + container tables { + description "Subscriber tables information"; + list table { + key "table-id"; + description "Table id"; + leaf table-id { + type string; + description + "Table ID"; + } + leaf table-size { + type uint64; + description + "Table size"; + } + leaf total-messages-remaining { + type uint64; + description "message yet to receive"; + } + leaf total-messages-added { + type uint64; + description + "Total add message count"; + } + leaf total-messages-updated { + type uint64; + description + "Total update message count"; + } + leaf total-messages-deleted { + type uint64; + description + "Total delete message count"; + } + } + } + } + + grouping mb-sub-tbl-info { + description "Subscriber consolidated table info"; + leaf total-tables { + type uint16; + description + "Total table count"; + } + leaf total-entries { + type uint64; + description + "Total sum of entries across all tables"; + } + leaf total-messages-added { + type uint64; + description + "Total add messages rx"; + } + leaf total-messages-updated { + type uint64; + description + "Total update message rx"; + } + leaf total-messages-deleted { + type uint64; + description + "Total delete message rx"; + } + } + + grouping mb-mps-sub { + container subscribers { + list subscriber { + key "name"; + description + "Subscriber handle"; + leaf name { + type string; + description + "Subscriber name"; + } + leaf ep-type { + type mbroker-ep-type; + description + "End point type"; + } + leaf uri { + type string; + description "Subscriber URI protocol://ip-address:port"; + } + leaf service { + type string; + description "Subscriber service name"; + } + uses mb-ep-state; + uses mb-sub-tbl-info; + uses sub-tables; + uses mb-ep-events; + } + } + } + + grouping mb-pub-tbl-info { + description "Publisher consolidated tables info"; + leaf total-tables { + type uint16; + description + "Total table count"; + } + leaf total-entries { + type uint64; + description + "Total sum of entries across all tables"; + } + leaf total-messages-added { + type uint64; + description + "Total add message count"; + } + leaf total-messages-updated { + type uint64; + description + "Total update message count"; + } + leaf total-messages-deleted { + type uint64; + description + "Total delete message count"; + } + } + + grouping pub-tables { + container tables { + description "publisher tables information"; + list table { + key "table-id"; + description "Table id"; + leaf table-id { + type string; + description + "Table ID"; + } + leaf table-size { + type uint64; + description + "Table size"; + } + uses mb-tbl-state; + } + } + } + + grouping mb-mps-pub { + container publishers { + list publisher { + key "name"; + description + "Publisher handle"; + leaf name { + type string; + description + "Publisher handle"; + } + leaf ep-type { + type mbroker-ep-type; + description + "End point type"; + } + leaf uri { + type string; + description "Publisher URI protocol://ip-address:port"; + } + leaf service { + type string; + description "Publisher service name"; + } + uses mb-ep-state; + uses mb-pub-tbl-info; + uses pub-tables; + uses mb-ep-events; + } + } + } + + grouping mb-mpsc-pub { + container mpsc-publishers { + list publisher { + key "name"; + description + "Publisher handle"; + leaf name { + type string; + description + "Publisher handle"; + } + uses mb-ep-state; + uses mb-mpsc-tbls; + uses mb-ep-events; + } + } + } + + grouping mb-mpsc-sub { + container mpsc-subscribers { + list subscriber { + key "name"; + description + "Subscriber handle"; + leaf name { + type string; + description + "Subscriber name"; + } + uses mb-ep-state; + uses mb-mpsc-tbls; + uses mb-ep-events; + } + } + } + + grouping mb-mpsc-tbls { + container mpsc-tables { + description "MPS tables info"; + list table { + key "table-id"; + description "Table id"; + leaf table-id { + type string; + description + "Table ID"; + } + leaf table-messages { + type uint64; + description + "Table size"; + } + leaf total-messages-added { + type uint64; + description + "Total add message count"; + } + leaf total-messages-updated { + type uint64; + description + "Total update message count"; + } + leaf total-messages-deleted { + type uint64; + description + "Total delete message count"; + } + } + } + } + + grouping mb-mpsc-client { + container mpsc-client { + list mpsc { + key "name"; + description + "MPSC client handle"; + leaf name { + type string; + description + "MPSC client handle"; + } + uses mb-ep-state; + uses mb-mpsc-pub; + uses mb-mpsc-sub; + } + } + } + + grouping mb-mps { + description "Message PubSub Service [MPS]"; + container summary { + leaf instance-mode { + type mbroker-mode; + description "MPS instance mode"; + } + leaf ctrl-uri { + type string; + description "Publisher URI protocol://ip-address:port"; + } + leaf-list data-uri { + type string; + description "Publisher service name"; + } + leaf total-clients { + type uint32; + description "Total number of MPS clients"; + } + leaf total-publishers { + type uint32; + description "Total number of publishers"; + } + leaf total-subscribers { + type uint32; + description "Total number of subscribers"; + } + leaf total-tables { + type uint32; + description "Total number of tables"; + } + leaf disk-path { + type string; + description "MPS file persistence directory"; + } + leaf instance-directory { + type string; + description "MPS file persistence directory for this instance"; + } + uses mb-ep-state; + } + uses mb-mpsc-client; + } + + grouping mbroker-base { + container mbroker { + description + "mbroker top level base"; + config false; + list instances { + key "instance"; + max-elements 64; + description + "Message broker instances"; + leaf instance { + type string; + description + "Instance name"; + } + leaf instance-type { + type mbroker-type; + description + "Instance type"; + } + uses mb-ep-source { + when "instance-type = 'MPROXY'"; + } + uses mb-ep-drain{ + when "instance-type = 'MPROXY'"; + } + uses mb-mps { + when "instance-type = 'MPS'"; + } + uses mb-mps-pub { + when "instance-type = 'MPS'"; + } + uses mb-mps-sub { + when "instance-type = 'MPS'"; + } + uses mb-mps-tbls { + when "instance-type = 'MPS'"; + } + } + } + } + uses mbroker-base; +} diff --git a/vendor/arrcus/arcos/v521/arcos-mmu-clear.yang b/vendor/arrcus/arcos/v521/arcos-mmu-clear.yang new file mode 100644 index 000000000..2e04ed2e3 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-mmu-clear.yang @@ -0,0 +1,23 @@ +module arcos-mmu-clear { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/mmu/clear"; + prefix arc-mmu-clr; + + container mmu-buffer-stats { + description + "Clear MMU buffer statistics"; + + action all { + description + "Clear all MMU buffer statistics"; + + output { + leaf result { + type string; + description + "The status of the Clear operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-monitor.yang b/vendor/arrcus/arcos/v521/arcos-monitor.yang new file mode 100644 index 000000000..b34f19601 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-monitor.yang @@ -0,0 +1,313 @@ +module arcos-monitor { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/monitor"; + prefix arc-mon; + + import iana-if-type { + prefix ianaift; + } + import ietf-inet-types { + prefix inet; + } + import openconfig-yang-types { + prefix yang; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-if-ethernet { + prefix oc-eth; + } + import openconfig-vlan { + prefix oc-vlan; + } + import openconfig-if-aggregate { + prefix oc-lag; + } + import openconfig-acl { + prefix oc-acl; + } + import arcos-platform { + prefix arc-platform; + } + + import arcos-features { + prefix arc-features; + } + + + grouping monitor-session-acl-config { + leaf acl-type { + type identityref { + base oc-acl:ACL_TYPE; + } + + description + "Reference to the acl type, list key"; + } + + leaf acl-name { + type leafref { + path "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set[oc-acl:type=current()/../acl-type]/oc-acl:config/oc-acl:name"; + } + + description + "Reference to the acl name, list key"; + } + } + + grouping monitor-session-acl-top { + description + "Grouping that defines reference to set of ACLs for a monitoring session"; + + list acl { + key "acl-type acl-name"; + description + "List of ACL references"; + + leaf acl-type { + type leafref { + path "../config/acl-type"; + } + + description + "Reference to the acl type, list key"; + } + + leaf acl-name { + type leafref { + path "../config/acl-name"; + } + + description + "Reference to the acl name, list key"; + } + + container config { + uses monitor-session-acl-config; + description + "Parameters for acl enabled under monitored source"; + } + + container state { + config false; + + uses monitor-session-acl-config; + description + "Parameters for acl enabled under monitored source"; + } + } + } + + + grouping monitor-session-destination-config { + leaf ifname { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description + "Destination interface monitored traffic mirrored to"; + + must "((current() != 'ma1') and " + + "(((/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') and (boolean(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-lag:aggregation/oc-vlan:switched-vlan/oc-vlan:config/oc-vlan:interface-mode) != 'true')) or " + + "((/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') and (boolean(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true') and (boolean(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-eth:ethernet/oc-vlan:switched-vlan/oc-vlan:config/oc-vlan:interface-mode) != 'true'))) and " + + "(count(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:subinterfaces/oc-if:subinterface) = 0))" { + error-message "only swp and bond interfaces supported, as a destination, without any l2 and l3 configurations"; + } + } + } + + grouping monitor-session-destination-cpu { + leaf cpu { + type empty; + description + "Punt mirror traffic to the CPU"; + } + } + + grouping monitor-session-destination-cpu-top { + container config { + uses monitor-session-destination-cpu; + } + container state { + config false; + uses monitor-session-destination-cpu; + } + } + + grouping monitor-session-destination-top { + container destination { + description + "Destination interface monitored traffic mirrored to"; + + list interface { + key "ifname"; + + leaf ifname { + type leafref { + path "../config/ifname"; + } + + description + "Destination interface monitored traffic mirrored to"; + } + + container config { + description + "Parameters for monitoring session destination"; + + uses monitor-session-destination-config; + } + + container state { + config false; + description + "Parameters for monitoring session destination"; + + uses monitor-session-destination-config; + } + } + + uses monitor-session-destination-cpu-top; + } + } + + grouping monitor-session-source-config { + leaf ifname { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description + "Source interface for which traffic is monitored for"; + + must "((current() != 'ma1') and " + + "((/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') or " + + "(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:config/oc-if:type = 'ianaift:l3ipvlan' and ../direction = 'INGRESS') or " + + "((/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') and (boolean(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true'))))" { + error-message "only swp, bond and svi supported as a source interface"; + } + } + + leaf direction { + type enumeration { + enum INGRESS { + description "Incoming traffic to be monitored"; + } + enum EGRESS { + description "Outgoing traffic to be monitored"; + } + } + description + "Direction of the traffic to be monitored"; + } + } + + + grouping monitor-session-source-top { + container source { + list interface { + key "ifname direction"; + max-elements 255; + description + "List of source interface for which traffic is monitored for"; + + leaf ifname { + type leafref { + path "../config/ifname"; + } + + description + "Source interface for which traffic is monitored for"; + } + + leaf direction { + type leafref { + path "../config/direction"; + } + + description + "Direction of the traffic to be monitored"; + } + + container config { + description + "Parameters for monitoring session source"; + + uses monitor-session-source-config; + } + + container state { + config false; + description + "Parameters for monitoring session source"; + + uses monitor-session-source-config; + } + + uses monitor-session-acl-top { + when "(current()/direction = 'INGRESS')"; + } + } + } + } + + + grouping monitor-session-top { + leaf session-name { + type string { + length "0..79"; + } + description + "Name of the monitoring session"; + } + + leaf enable { + type boolean; + default false; + description + "By default keep monitoring profile disabled"; + } + } + + grouping monitor-top { + list monitor-session { + key "session-name"; + description + "List of monitoring sessions (enabled only when atleast one destination configured)"; + + leaf session-name { + type leafref { + path "../config/session-name"; + } + + description + "Name of the session"; + } + + container config { + description + "Parameters for monitoring session"; + + uses monitor-session-top; + } + + container state { + config false; + description + "Parameters for monitoring session"; + + uses monitor-session-top; + } + + uses monitor-session-destination-top; + uses monitor-session-source-top; + } + } + + + uses monitor-top { + when "not(boolean(/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_MONITOR']))" + + "or /arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_MONITOR']" + + "/arc-features:supported = 'true'"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-mpls-ldp.yang b/vendor/arrcus/arcos/v521/arcos-mpls-ldp.yang new file mode 100644 index 000000000..114b68191 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-mpls-ldp.yang @@ -0,0 +1,852 @@ +module arcos-mpls-ldp { + + yang-version "1.1"; + + // namespace + namespace "http://yang.arrcus.com/arcos/mpls/ldp"; + + prefix "arc-mpls-ldp"; + + // import some basic types + import ietf-inet-types { prefix "inet"; } + import openconfig-routing-policy { prefix "oc-rpol"; } + import openconfig-interfaces { prefix "oc-if"; } + import openconfig-mpls-ldp {prefix "oc-ldp"; } + import arcos-common-types { prefix arc-common-types; } + import ietf-yang-types { + prefix "yang"; + } + + organization "Arrcus, Inc"; + + contact + "Email: eng@arrcus.com"; + + description + "This module lists the ldp related information"; + + revision 2022-09-16 { + description + "Add reset count to hello adjacency and session state"; + } + + revision 2022-09-14 { + description + "Add uptime to hello adjacency and session state"; + } + + revision "2019-08-21" { + description + "Initial version"; + } + + grouping mpls-ldp-max-local-binding-config { + description + "Grouping containing maximum number of local binding configuration"; + + container max-local-binding { + description + "Maximum number of local binding"; + + container config { + description + "Configuration for maximum number of local binding"; + + uses mpls-ldp-max-local-binding; + } + + container state { + config false; + description + "Operation data for the maximum number of local binding"; + + uses mpls-ldp-max-local-binding; + } + } + } + + grouping mpls-ldp-max-local-binding { + description + "Grouping containing maximum number of local binding"; + + leaf maximum-local-binding { + type uint32 { + range "0..max"; + } + description + "Define the maximum number of local binding"; + } + } + + grouping mpls-ldp-max-remote-binding-config { + description + "Grouping containing maximum number of remote binding configuration"; + + container max-remote-binding { + description + "Maximum number of remote binding"; + + container config { + description + "Configuration for maximum number of remote binding"; + + uses mpls-ldp-max-remote-binding; + } + + container state { + config false; + description + "Operation data for the maximum number of remote binding"; + + uses mpls-ldp-max-remote-binding; + } + } + } + + grouping mpls-ldp-max-remote-binding { + description + "Grouping containing maximum number of remote binding"; + + leaf maximum-remote-binding { + type uint32 { + range "0..max"; + } + description + "Define the maximum number of remote binding"; + } + } + + grouping mpls-ldp-transport-address-config { + description + "Grouping containing interface-related attributes + that can be configured for LDP."; + + container transport-address { + description + "Transport address configuration."; + + container config { + description + "Configuration for the transport address"; + + uses mpls-ldp-transport-addresses; + } + + container state { + config false; + description + "Operation data for the tranport address."; + + uses mpls-ldp-transport-addresses; + } + } + } + + grouping mpls-ldp-transport-addresses { + description + "Grouping containing transport address configuration."; + + leaf ipv4 { + type inet:ip-address; + description + "Defines the transport address for Hello message and session + on this interface."; + } + + leaf ipv6 { + type inet:ipv6-address; + description + "Defines the transport ipv6 address for Hello message and session + on this interface."; + } + } + + grouping mpls-ldp-fec-filter { + description + "LDP FEC filtering"; + + container fec-filter { + description + "LDP FEC filtering"; + + container config { + description + "Configuration for FEC filtering"; + + uses oc-rpol:apply-policy-export-config; + } + + container state { + config false; + description + "Operation data for FEC filtering"; + uses oc-rpol:apply-policy-export-config; + } + } + } + + grouping mpls-ldp-sessions { + description + "LDP session information"; + + container sessions { + description + "LDP Sessions"; + + container ipv4 { + config false; + description + "IPv4 LDP session information"; + + uses mpls-ldp-sessions-v4; + } + + container ipv6 { + config false; + description + "IPv6 LDP session information"; + + uses mpls-ldp-sessions-v6; + } + } + } + + grouping mpls-ldp-sessions-v4 { + description + "IPv4 LDP session information"; + + list session { + config false; + key "peer-address"; + + description + "List of IPv4 LDP sessions"; + + leaf peer-address { + type leafref { + path "../state/peer-address"; + } + description + "reference to the peer-address data"; + } + + container state { + description + "Operational data for LDP session"; + + uses mpls-ldp-session-state; + } + } + } + + grouping mpls-ldp-sessions-v6 { + description + "IPv6 LDP session information"; + + list session { + config false; + key "peer-address"; + + description + "List of IPv6 LDP sessions"; + + leaf peer-address { + type leafref { + path "../state/peer-address"; + } + description + "reference to the peer-address data"; + } + + container state { + description + "Operational data for LDP session"; + + uses mpls-ldp-session-state-v6; + } + } + } + + grouping mpls-ldp-label-mapping { + description + "LDP Label Mapping"; + + container label-mappings { + description + "LDP Label Mapping"; + + container ipv4 { + config false; + description + "IPv4 LDP Label Mapping"; + + uses mpls-ldp-label-mapping-v4; + } + + container ipv6 { + config false; + description + "IPv6 LDP Label Mapping"; + + uses mpls-ldp-label-mapping-v6; + } + } + } + + grouping mpls-ldp-label-mapping-v4 { + description + "LDP Label Mapping"; + + list label-mapping { + config false; + key "peer-address fec"; + + description + "List of Label Mapping"; + + leaf peer-address { + type leafref { + path "../state/peer-address"; + } + description + "reference to the peer-address data"; + } + + leaf fec { + type leafref { + path "../state/fec"; + } + description + "reference to the fec data"; + } + + container state { + description + "Operational data of Label Mapping"; + + uses mpls-ldp-label-mapping-state; + } + } + } + + grouping mpls-ldp-label-mapping-v6 { + description + "LDP Label Mapping"; + + list label-mapping { + config false; + key "peer-address fec"; + + description + "List of Label Mapping"; + + leaf peer-address { + type leafref { + path "../state/peer-address"; + } + description + "reference to the peer-address data"; + } + + leaf fec { + type leafref { + path "../state/fec"; + } + description + "reference to the fec data"; + } + + container state { + description + "Operational data of Label Mapping"; + + uses mpls-ldp-label-mapping-state-v6; + } + } + } + + grouping mpls-ldp-hello-adjacency { + description + "LDP Hello Adjacency"; + + container hello-adjacencies { + description + "LDP Hello Adjacency"; + + container ipv4 { + config false; + description + "IPv4 LDP hHello Adjacency"; + + uses mpls-ldp-hello-adjacency-v4; + } + + container ipv6 { + config false; + description + "IPv6 LDP hHello Adjacency"; + + uses mpls-ldp-hello-adjacency-v6; + } + } + } + + grouping mpls-ldp-hello-adjacency-v4 { + description + "LDP Hello Adjacency"; + + list hello-adjacency { + config false; + key "peer-address"; + + description + "list of Hello Adjacency"; + + leaf peer-address { + type leafref { + path "../state/peer-address"; + } + description + "reference to the peer-address data"; + } + + container state { + description + "Operational Data of Hello Adjacency"; + + uses mpls-ldp-hello-adjacency-state; + } + } + } + + grouping mpls-ldp-hello-adjacency-v6 { + description + "LDP Hello Adjacency"; + + list hello-adjacency { + config false; + key "peer-address"; + + description + "list of Hello Adjacency"; + + leaf peer-address { + type leafref { + path "../state/peer-address"; + } + description + "reference to the peer-address data"; + } + + container state { + description + "Operational Data of Hello Adjacency"; + + uses mpls-ldp-hello-adjacency-state-v6; + } + } + } + + grouping mpls-ldp-session-state { + description + "Set of LDP session related state attribute"; + + leaf peer-address { + description + "Peer address for a particular LDP session"; + type inet:ip-address; + } + + leaf local-address { + description + "Local address for a particular LDP session"; + type inet:ip-address; + } + + leaf session-state { + description + "Current state for a particular LDP session"; + type string; + } + + leaf session-role { + description + "Session role for a particular LDP session"; + type string; + } + + leaf keepalive-timeout { + description + "Keepalive timeout for a particular LDP session"; + type uint16; + } + + leaf keepalive-interval { + description + "Keepalive interval for a particular LDP session"; + type uint16; + } + + leaf local-lsr-id { + description + "Local LSR-ID for a particular LDP session"; + type inet:ip-address; + } + + leaf local-label-space-id { + description + "Local Label Space ID for a particular LDP session"; + type uint16; + } + + leaf remote-lsr-id { + description + "Remote LSR-ID for a particular LDP session"; + type inet:ip-address; + } + + leaf remote-label-space-id { + description + "Remote Label Space ID for a particular LDP session"; + type uint16; + } + + leaf uptime { + type string; + description + "Length of time since a particular session was established in " + + "ddd:hh:mm:ss format"; + } + + leaf reset-count { + type yang:zero-based-counter32; + description + "Number of times a particular session has transitioned from an " + + "established state to the non existent state"; + } + } + + grouping mpls-ldp-session-state-v6 { + description + "Set of LDP session related state attribute"; + + leaf peer-address { + description + "Peer address for a particular LDP session"; + type inet:ipv6-address; + } + + leaf local-address { + description + "Local address for a particular LDP session"; + type inet:ipv6-address; + } + + leaf session-state { + description + "Current state for a particular LDP session"; + type string; + } + + leaf session-role { + description + "Session role for a particular LDP session"; + type string; + } + + leaf keepalive-timeout { + description + "Keepalive timeout for a particular LDP session"; + type uint16; + } + + leaf keepalive-interval { + description + "Keepalive interval for a particular LDP session"; + type uint16; + } + + leaf local-lsr-id { + description + "Local LSR-ID for a particular LDP session"; + type inet:ip-address; + } + + leaf local-label-space-id { + description + "Local Label Space ID for a particular LDP session"; + type uint16; + } + + leaf remote-lsr-id { + description + "Remote LSR-ID for a particular LDP session"; + type inet:ip-address; + } + + leaf remote-label-space-id { + description + "Remote Label Space ID for a particular LDP session"; + type uint16; + } + + leaf uptime { + type string; + description + "Length of time since a particular session was established in " + + "ddd:hh:mm:ss format"; + } + + leaf reset-count { + type yang:zero-based-counter32; + description + "Number of times a particular session has transitioned from an " + + "established state to the non existent state"; + } + } + + grouping mpls-ldp-label-mapping-state { + description + "Set of LDP Label Mapping related state attribute"; + + leaf peer-address { + description + "Peer address for a particular LDP session"; + type inet:ip-address; + } + + leaf fec { + description + "FEC"; + type inet:ip-prefix; + } + + leaf upstream-binding { + description + "Upstream label binding for a particular FEC"; + type uint32; + } + + leaf downstream-binding { + description + "Downstream label binding for a particular FEC"; + type uint32; + } + } + + grouping mpls-ldp-label-mapping-state-v6 { + description + "Set of LDP Label Mapping related state attribute"; + + leaf peer-address { + description + "Peer address for a particular LDP session"; + type inet:ipv6-address; + } + + leaf fec { + description + "FEC"; + type inet:ipv6-prefix; + } + + leaf upstream-binding { + description + "Upstream label binding for a particular FEC"; + type uint32; + } + + leaf downstream-binding { + description + "Downstream label binding for a particular FEC"; + type uint32; + } + } + + grouping mpls-ldp-hello-adjacency-state { + description + "Set of hello-adjacency related state attribute"; + + leaf peer-address { + description + "LDP Peer address"; + type inet:ip-address; + } + + leaf version { + description + "LDP version"; + type uint16; + } + + leaf lsr-id { + description + "LDP Peer LSR ID"; + type inet:ip-address; + } + + leaf label-space-id { + description + "LDP Peer Label Space ID"; + type uint16; + } + + leaf transport-address { + description + "LDP Hello Transport Address"; + type inet:ip-address; + } + + leaf source-address { + description + "LDP Hello Srouce Address"; + type inet:ip-address; + } + + leaf holdtime { + description + "LDP Hello Holdtime"; + type uint32; + } + + leaf interface { + description + "Interface on this hello adjacency"; + type string; + } + + leaf uptime { + type string; + description + "Length of time since the hello adjacency was established in " + + "ddd:hh:mm:ss format"; + } + + leaf reset-count { + type yang:zero-based-counter32; + description + "Number of times this hello adjacency has been recreated after " + + "initial discovery"; + } + } + + grouping mpls-ldp-hello-adjacency-state-v6 { + description + "Set of hello-adjacency related state attribute"; + + leaf peer-address { + description + "LDP Peer address"; + type inet:ipv6-address; + } + + leaf version { + description + "LDP version"; + type uint16; + } + + leaf lsr-id { + description + "LDP Peer LSR ID"; + type inet:ip-address; + } + + leaf label-space-id { + description + "LDP Peer Label Space ID"; + type uint16; + } + + leaf transport-address { + description + "LDP Hello Transport Address"; + type inet:ipv6-address; + } + + leaf source-address { + description + "LDP Hello Srouce Address"; + type inet:ipv6-address; + } + + leaf holdtime { + description + "LDP Hello Holdtime"; + type uint32; + } + + leaf interface { + description + "Interface on this hello adjacency"; + type string; + } + + leaf uptime { + type string; + description + "Length of time since the hello adjacency was established in " + + "ddd:hh:mm:ss format"; + } + + leaf reset-count { + type yang:zero-based-counter32; + description + "Number of times this hello adjacency has been recreated after " + + "initial discovery"; + } + } + + rpc clear-ldp-neighbor { + description + "Clear one or all LDP sessions."; + + input { + leaf address-family { + mandatory true; + description + "Address family"; + + type oc-ldp:mpls-ldp-afi; + } + + leaf address { + mandatory true; + description + "All LDP sessions or the address of one LDP session."; + type union { + type enumeration { + enum ALL { + description + "All LDP sessions"; + } + } + type inet:ip-address; + } + } + } + } + + rpc clear-ldp-adjacency { + description + "Clear one or all LDP adjacencies."; + + input { + leaf interface { + mandatory true; + description + "LDP adjacencies on all interfaces or LDP adjacency on a specific interface."; + type union { + type enumeration { + enum ALL { + description + "All LDP adjacencies"; + } + } + type oc-if:interface-id; + } + } + } + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-mplsoam-debug.yang b/vendor/arrcus/arcos/v521/arcos-mplsoam-debug.yang new file mode 100644 index 000000000..3cbff1a50 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-mplsoam-debug.yang @@ -0,0 +1,60 @@ +/** + * Filename: arcos-mpls-oam-debug.yang + * + * Description: + * YANG data-model for MPLS-OAM Debugs Action + * + * Copyright 2020 by Arrcus, Inc. + * All rights reserved. + */ + +module arcos-mplsoam-debug { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/mplsoam/debug"; + prefix arc-mplsoam-debug; + + organization + "Arrcus, Inc."; + + contact + "Lalit"; + + description + "YANG data-model for MPLSOAM Debugs definitions."; + + typedef mplsoam-debug-op { + type enumeration { + enum off { + description + "Disable debug"; + } + enum on { + description + "Enable debug"; + } + } + } + + container mplsoam-debug { + description + "MPLSOAM debug control"; + + action all { + input { + leaf op { + type mplsoam-debug-op; + mandatory true; + description + "Turn debug ON/OFF"; + } + } + output { + leaf result { + type string; + description + "The result of operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-mpsc.yang b/vendor/arrcus/arcos/v521/arcos-mpsc.yang new file mode 100644 index 000000000..4e4e3fc6b --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-mpsc.yang @@ -0,0 +1,705 @@ +module arcos-mpsc { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/mpsc"; + prefix "arc-mpsc"; + + grouping ctrl-msg-counters { + description "control message counters"; + container ctrl-msg-counters { + leaf client-reg { + type uint64; + description + "MPS ctrl msg client register counter"; + } + leaf client-dereg { + type uint64; + description + "MPS ctrl msg client deregister counter"; + } + leaf pub-reg { + type uint64; + description + "MPS ctrl msg publisher register counter"; + } + leaf pub-dereg { + type uint64; + description + "MPS ctrl msg publisher deregister counter"; + } + leaf sub-reg { + type uint64; + description + "MPS ctrl msg subscriber register counter"; + } + leaf sub-dereg { + type uint64; + description + "MPS ctrl msg subscriber deregister counter"; + } + leaf tbl-create { + type uint64; + description + "MPS ctrl msg table create counter"; + } + leaf tbl-delete { + type uint64; + description + "MPS ctrl msg table delete counter"; + } + leaf tbl-subscribe { + type uint64; + description + "MPS ctrl msg table subscribe counter"; + } + leaf tbl-desubscribe { + type uint64; + description + "MPS ctrl msg table desubscribe counter"; + } + leaf tbl-subscribe-dp-ready { + type uint64; + description + "MPS ctrl msg table subscribe DP ready counter"; + } + } + } + + grouping pub-register-error-counters { + description "MPSC publisher register error counters"; + container pub-register-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + } + } + + grouping sub-register-error-counters { + description "MPSC subscriber register error counters"; + container sub-register-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + } + } + + grouping pub-tbl-create-error-counters { + description "MPSC publisher table create error counters"; + container pub-tbl-create-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + } + } + + grouping sub-tbl-subscribe-error-counters { + description "MPSC subcriber tabel subcriber error counters"; + container sub-tbl-subscribe-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + } + } + + grouping pub-dereg-error-counters { + description "MPSC publisher deregister blocking error counters"; + container pub-dereg-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf pub-not-found { + type uint64; + description + "publisher not found"; + } + leaf already-admin-down { + type uint64; + description + "publisher already admin down"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + leaf timeout { + type uint64; + description + "publisher deregister timeout"; + } + } + } + + grouping pub-tbl-del-error-counters { + description "MPSC publisher table delete blocking error counters"; + container pub-tbl-del-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf pub-not-found { + type uint64; + description + "publisher not found"; + } + leaf tbl-not-found { + type uint64; + description + "publisher table not found"; + } + leaf already-admin-down { + type uint64; + description + "publisher table already admin down"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + leaf timeout { + type uint64; + description + "publisher table delete timeout"; + } + } + } + + grouping sub-dereg-error-counters { + description "MPSC subscriber deregister blocking error counters"; + container sub-dereg-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf sub-not-found { + type uint64; + description + "subscriber not found"; + } + leaf already-admin-down { + type uint64; + description + "subscriber already admin down"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + leaf timeout { + type uint64; + description + "subscriber deregister timeout"; + } + } + } + + grouping sub-tbl-desubscribe-error-counters { + description "MPSC subscriber table desubscribe blocking error counters"; + container sub-tbl-desubscribe-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf sub-not-found { + type uint64; + description + "subscriber not found"; + } + leaf tbl-not-found { + type uint64; + description + "subscriber table not found"; + } + leaf already-admin-down { + type uint64; + description + "subscriber table already admin down"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + leaf timeout { + type uint64; + description + "subscriber table desubscribe timeout"; + } + } + } + + grouping client-dereg-error-counters { + description "MPSC client deregister blocking error counters"; + container client-dereg-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf already-admin-down { + type uint64; + description + "MPSC already in delete pending state"; + } + leaf data-deinit { + type uint64; + description + "MPSC data deinit failed"; + } + leaf ctrl-deinit { + type uint64; + description + "MPSC ctrl deinit failed"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl tx queue error counter"; + } + leaf timeout { + type uint64; + description + "client deregister timeout"; + } + } + } + + grouping ctrl-init-error-counters { + description "control init error counters"; + container ctrl-init-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl sync queue error counter"; + } + uses pub-register-error-counters; + uses sub-register-error-counters; + uses pub-tbl-create-error-counters; + uses sub-tbl-subscribe-error-counters; + } + } + + grouping ctrl-deinit-error-counters { + description "control init error counters"; + container ctrl-deinit-error-counters { + leaf client-handle { + type uint64; + description + "Invalid client handle error counter"; + } + leaf already-admin-down { + type uint64; + description + "MPSC already in delete pending state"; + } + leaf bq-enqueue { + type uint64; + description + "Failed to enqueue to ctrl sync queue error counter"; + } + leaf timeout { + type uint64; + description + "client deregister timeout"; + } + uses pub-dereg-error-counters; + uses pub-tbl-del-error-counters; + uses sub-dereg-error-counters; + uses sub-tbl-desubscribe-error-counters; + uses client-dereg-error-counters; + } + } + + grouping ctrl-error-counters { + description "control error counters"; + container ctrl-error-counters { + uses ctrl-init-error-counters; + uses ctrl-deinit-error-counters; + } + } + + grouping ctrl { + description "control counters"; + container ctrl{ + leaf tx_q-size { + type uint64; + description + "ctrl tx_q size"; + } + leaf ack_q-size { + type uint64; + description + "ctrl ack_q size"; + } + leaf syn_q-size { + type uint64; + description + "ctrl syn_q size"; + } + leaf sync_ack_list-size { + type uint64; + description + "ctrl sync_ack_list size"; + } + uses ctrl-msg-counters; + uses ctrl-error-counters; + } + } + + grouping tbl-flags { + description "MPSC table flags"; + container table-flags { + leaf stat { + type boolean; + description + "stat flag for mpsc_tbl_t"; + } + leaf dp-tx-up { + type boolean; + description + "dp_tx_up flag for mpsc_tbl_t"; + } + leaf dp-rx-up { + type boolean; + description + "dp_rx_up flag for mpsc_tbl_t"; + } + leaf mps-tbl-up { + type boolean; + description + "mps_tbl_up flag for mpsc_tbl_t"; + } + leaf wc-sub { + type boolean; + description + "wc_sub flag for mpsc_tbl_t"; + } + } + } + + grouping mpsc-sub-tbls { + container tables { + description "MPSC tables info"; + list table { + key "table-id"; + description "Table id"; + leaf table-id { + type string; + description + "Table ID"; + } + leaf admin-down { + type boolean; + description + "MPSC subscriber table admin-down flag"; + } + leaf total-messages { + type uint64; + description + "Table size"; + } + leaf total-messages-added { + type uint64; + description + "Table add message count"; + } + leaf total-messages-updated { + type uint64; + description + "Table update message count"; + } + leaf total-messages-deleted { + type uint64; + description + "Table delete message count"; + } + leaf rx-bq-size { + type uint64; + description + "rx-bq size"; + } + leaf cache-add { + type uint64; + description + "cache add"; + } + leaf cache-upd { + type uint64; + description + "cache update"; + } + leaf cache-delete { + type uint64; + description + "cache delete"; + } + leaf app-context { + type uint64; + description + "App context not set error counter"; + } + leaf tbl { + type uint64; + description + "tbl not found error counter"; + } + leaf rx-dp { + type uint64; + description + "rx-dp not found error counter"; + } + leaf msg-enqueue { + type uint64; + description + "msg enqueue failed error counter"; + } + leaf sub-tbl-admin-down { + type uint64; + description + "sub tbl admin down error counter"; + } + leaf dp-not-created { + type uint64; + description + "data path not created"; + } + uses tbl-flags; + } + } + } + + grouping mpsc-sub { + container subscribers { + list subscriber { + key "name"; + description + "Subscriber handle"; + leaf name { + type string; + description + "Subscriber handle"; + } + leaf admin-down { + type boolean; + description + "MPSC Subscriber admin-down flag"; + } + uses mpsc-sub-tbls; + } + } + } + + grouping ml-send-error-counters { + description "ml send error counters"; + container ml-send-error { + leaf eagain { + type uint64; + description + "eagain error counter"; + } + leaf unreachable { + type uint64; + description + "unreachable error counter"; + } + } + } + + grouping mpsc-pub-tbls { + container tables { + description "MPSC tables info"; + list table { + key "table-id"; + description "Table id"; + leaf table-id { + type string; + description + "Table ID"; + } + leaf admin-down { + type boolean; + description + "MPSC Publisher table admin-down flag"; + } + leaf total-messages { + type uint64; + description + "Table size"; + } + leaf total-messages-added { + type uint64; + description + "Table add message count"; + } + leaf total-messages-updated { + type uint64; + description + "Table update message count"; + } + leaf total-messages-deleted { + type uint64; + description + "Table delete message count"; + } + leaf tx-ring-capacity { + type uint64; + description + "tx ring capacity"; + } + leaf tx-ring-size { + type uint64; + description + "tx ring size"; + } + leaf sync-ring-capacity { + type uint64; + description + "sync ring capacity"; + } + leaf sync-ring-size { + type uint64; + description + "sync ring size"; + } + leaf cache-add { + type uint64; + description + "cache add"; + } + leaf cache-upd { + type uint64; + description + "cache update"; + } + leaf cache-delete { + type uint64; + description + "cache delete"; + } + leaf invalid-args { + type uint64; + description + "Invalid arguments error counter"; + } + leaf pub-id { + type uint64; + description + "Unknow pub id error counter"; + } + leaf ep-tbl { + type uint64; + description + "Unknow ep tbl error counter"; + } + leaf tbl-admin-down { + type uint64; + description + "tbl admin down error counter"; + } + leaf tbl-not-acked { + type uint64; + description + "tbl not acked error counter"; + } + leaf pub-tbl-admin-down { + type uint64; + description + "pub tbl admin down error counter"; + } + uses tbl-flags; + uses ml-send-error-counters; + } + } + } + + grouping mpsc-pub { + container publishers { + list publisher { + key "name"; + description + "Publisher handle"; + leaf name { + type string; + description + "Publisher handle"; + } + leaf admin-down { + type boolean; + description + "MPSC Publisher admin-down flag"; + } + uses mpsc-pub-tbls; + //uses mpsc-pub-error-counters; + } + } + } + + grouping mpsc-client { + container mpsc-client { + config false; + list clients { + key "client"; + description + "MPSC clients name"; + leaf client { + type string; + description + "MPSC client handle"; + } + leaf client-up { + type boolean; + description + "MPSC CLIENT_UP flag"; + } + leaf admin-down { + type boolean; + description + "MPSC admin-down flag"; + } + uses mpsc-pub; + uses mpsc-sub; + uses ctrl; + } + } + } + uses mpsc-client; +} diff --git a/vendor/arrcus/arcos/v521/arcos-neighbor-types.yang b/vendor/arrcus/arcos/v521/arcos-neighbor-types.yang new file mode 100644 index 000000000..1a461be0f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-neighbor-types.yang @@ -0,0 +1,51 @@ +module arcos-neighbor-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/neighbor/types"; + prefix arc-nbr-types; + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines native ArcOS neighbor + types. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + + revision 2019-10-29 { + description "Initial version"; + } + + typedef adj-debug-state { + type enumeration { + enum on { + description + "Enable debug"; + } + enum off { + description + "Disable debug"; + } + } + } + + typedef adj-debug-type { + type enumeration { + enum control { + description + "Control processing debugs"; + } + } + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-neighbor.yang b/vendor/arrcus/arcos/v521/arcos-neighbor.yang new file mode 100644 index 000000000..7eac4dbe5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-neighbor.yang @@ -0,0 +1,328 @@ +module arcos-neighbor { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/neighbor"; + prefix arc-nbr; + + import arcos-neighbor-types { + prefix arc-nbr-types; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import ietf-yang-types { + prefix yang; + } + + import ietf-inet-types { + prefix inet; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS neighbor domain. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + + revision 2019-10-29 { + description "Initial version"; + } + + + container arp-entries { + description + "Address Resolution Protocol (ARP) table entries"; + + config false; + + list arp-entry { + key "ip ifname"; + + description + "IP Address and Interface of entry"; + + leaf ip { + type inet:ipv4-address-no-zone; + description + "Layer 3 IPv4 Address"; + } + + leaf ifname { + type string; + description + "Interface over which ARP learned"; + } + + leaf hwaddr { + mandatory true; + type oc-yang:mac-address; + description + "Layer 2 address"; + } + + leaf last-updated { + type yang:date-and-time; + description + "Last update time"; + } + + leaf age { + type string; + description + "Time Elapsed since last change"; + } + } + } + + container arp-clear { + description + "Clear ARP entries"; + + action all { + description + "Clear all ARP entries"; + + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + + action arp { + description + "Clear specific ARP entries"; + + input { + leaf ip { + mandatory true; + type inet:ipv4-address-no-zone; + description + "The IPv4 address to be cleared"; + } + } + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + + action interface { + description + "Clear interface specific ARP entries"; + + input { + leaf name { + mandatory true; + type string; + description + "Interface to be cleared"; + } + } + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + + } + + container ndp-entries { + description + "IPv6 Neighbor Discovery Protocol (NDP) table entries"; + + config false; + + list ndp-entry { + key "ip ifname"; + + description + "IP Address and Interface of entry"; + + leaf ip { + type inet:ipv6-address-no-zone; + description + "Layer 3 IPv6 Address"; + } + + leaf ifname { + type string; + description + "Interface over which NDP learned"; + } + + leaf hwaddr { + mandatory true; + type oc-yang:mac-address; + description + "Layer 2 address"; + } + + leaf last-updated { + type yang:date-and-time; + description + "Last update time"; + } + + leaf age { + type string; + description + "Time Elapsed since last change"; + } + } + } + + container ndp-clear { + description + "Clear NDP entries"; + + action all { + description + "Clear NDP entries for all interfaces"; + + input { + leaf global-only { + default true; + type boolean; + description + "If only the ipv6 global addresses need to be cleared. + Both global and link-local address entries are cleared when set to false."; + } + } + + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + + action ndp { + description + "Clear specific NDP entries"; + + input { + leaf ipv6 { + mandatory true; + type inet:ipv6-address-no-zone; + description + "The IPv6 address to be cleared"; + } + } + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + action interface { + description + "Clear interface specific NDP entries"; + + input { + leaf global-only { + default true; + type boolean; + description + "If only the ipv6 global addresses need to be cleared. + Both global and link-local address entries are cleared when set to false."; + } + leaf name { + mandatory true; + type string; + description + "Interface to be cleared"; + } + } + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + } + + container adj-debug { + description + "Adjacency manager debug control"; + + action ipv4 { + input { + leaf debug { + mandatory true; + type arc-nbr-types:adj-debug-type; + description + "Debug to be controlled"; + } + + leaf op { + mandatory true; + type arc-nbr-types:adj-debug-state; + description + "Turn on/off operation"; + } + } + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + + action ipv6 { + input { + leaf debug { + mandatory true; + type arc-nbr-types:adj-debug-type; + description + "Debug to be controlled"; + } + + leaf op { + mandatory true; + type arc-nbr-types:adj-debug-state; + description + "Turn on/off operation"; + } + } + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-network-instance-global.yang b/vendor/arrcus/arcos/v521/arcos-network-instance-global.yang new file mode 100644 index 000000000..db7b6ca97 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-network-instance-global.yang @@ -0,0 +1,23 @@ +module arcos-network-instance-global { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/network-instance-global"; + prefix arc-ni-gbl; + + + container network-instance-global { + description + "Global parameters related to any network-instance"; + + container fdb { + description + "Global MAC FDB configuration"; + leaf mac-aging-time { + type uint16; + units seconds; + description + "The number of seconds of inactivity after which the entry + in any FDB is timed out."; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-oam-types.yang b/vendor/arrcus/arcos/v521/arcos-oam-types.yang new file mode 100644 index 000000000..8aae138d6 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-oam-types.yang @@ -0,0 +1,152 @@ +module arcos-oam-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/oam/types"; + prefix arc-oam-types; + + import iana-crypt-hash { + prefix ianach; + } + + import tailf-common { + prefix tailf; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines native ArcOS system + types. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + + revision 2019-10-01 { + description "Initial version"; + } + + identity OAM_MONITOR_INTERVAL_TYPE { + description + "Base identity for OAM endpoint type."; + } + identity OAM_MONITOR_INTERVAL_10s { + base OAM_MONITOR_INTERVAL_TYPE; + description + "OAM monitor interval of 10 seconds."; + } + identity OAM_MONITOR_INTERVAL_30s { + base OAM_MONITOR_INTERVAL_TYPE; + description + "OAM monitor interval of 30 seconds."; + } + identity OAM_MONITOR_INTERVAL_60s { + base OAM_MONITOR_INTERVAL_TYPE; + description + "OAM monitor interval of 60 seconds."; + } + identity OAM_MONITOR_INTERVAL_300s { + base OAM_MONITOR_INTERVAL_TYPE; + description + "OAM monitor interval of 300 seconds."; + } + identity OAM_ENDPOINT_TYPE { + description + "Base identity for OAM endpoint type."; + } + identity OAM_ENDPOINT_SID { + base OAM_ENDPOINT_TYPE; + description + "OAM endpoint type SID."; + } + identity OAM_HISTORY_DURATION { + description + "Base identity for OAM history duration."; + } + identity HOUR { + base OAM_HISTORY_DURATION; + description + "an hour of hisory."; + } + identity DAY { + base OAM_HISTORY_DURATION; + description + "a day of hisory."; + } + identity WEEK { + base OAM_HISTORY_DURATION; + description + "a week of hisory."; + } + identity OAM_ENDPOINT_STATE { + description + "Base identity for OAM endpoint state."; + } + identity NOT_TRACKED { + base OAM_ENDPOINT_STATE; + description + "OAM endpoint state not tracked."; + } + identity ELIGIBLE { + base OAM_ENDPOINT_STATE; + description + "OAM endpoint state eligible."; + } + identity INELIGIBLE { + base OAM_ENDPOINT_STATE; + description + "OAM endpoint state ineligible."; + } + identity OAM_INELIGIBILITY_REASON_TYPE { + description + "Base identity for OAM endpoint ineligibility state."; + } + identity LATENCY_VIOLATION { + base OAM_INELIGIBILITY_REASON_TYPE; + description + "OAM endpoint state ineligible because latency criterion was violated."; + } + identity LONG_LATENCY_VIOLATION { + base OAM_INELIGIBILITY_REASON_TYPE; + description + "OAM endpoint state ineligible because long latency criterion was violated."; + } + identity LATENCY_THRESHOLD { + base OAM_INELIGIBILITY_REASON_TYPE; + description + "OAM endpoint state ineligible because latency threshold criterion was violated."; + } + identity PKT_LOSS_PERCENT_VIOLATION { + base OAM_INELIGIBILITY_REASON_TYPE; + description + "OAM endpoint state ineligible because pkt_loss_percent criterion was violated."; + } + identity CONSECUTIVE_PKT_LOSS_VIOLATION { + base OAM_INELIGIBILITY_REASON_TYPE; + description + "OAM endpoint state ineligible because maximum pkt loss criterion was violated."; + } + identity OAM_STAT_TYPE { + description + "Base identity for OAM stat type."; + } + identity RAW { + base OAM_STAT_TYPE; + description + "OAM raw stats."; + } + identity AVG { + base OAM_STAT_TYPE; + description + "OAM averaged stats."; + } +} + diff --git a/vendor/arrcus/arcos/v521/arcos-oam.yang b/vendor/arrcus/arcos/v521/arcos-oam.yang new file mode 100644 index 000000000..89e760180 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-oam.yang @@ -0,0 +1,610 @@ +module arcos-oam { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/oam"; + prefix arc-oam; + + + import ietf-yang-types { + prefix yang; + } + + import ietf-inet-types { + prefix inet; + } + + import openconfig-network-instance { + prefix oc-netinst; + } + + import arcos-oam-types { + prefix arc-oam-types; + } + + import openconfig-policy-types { prefix "oc-pol-types"; } + + grouping oam-endpoint-events { + description + "historical events for the endpoint"; + container events { + config false; + list event { + key "timestamp"; + description + "list of historical event for this endpoint."; + + leaf timestamp { + type yang:date-and-time; + description + "Indicates the time the event was recorded."; + } + leaf event-description { + type string; + description + "event details."; + } + } + } + } + + grouping oam-endpoint-common-stats { + leaf avg-latency { + type decimal64 { + fraction-digits 1; + } + description + "Average latency value."; + } + leaf avg-long-latency { + type decimal64 { + fraction-digits 2; + } + description + "Average long latency value."; + } + leaf latency-ratio-percent { + type decimal64 { + fraction-digits 1; + } + description + "Percentage change of short latency value over long latency value."; + } + leaf avg-pkt-loss-percent { + type decimal64 { + fraction-digits 1; + } + description + "avg percent pkts lost."; + } + leaf num-consecutive-pkt-loss { + type yang:counter64; + description + "number of consecutive pkts lost."; + } + } + + grouping oam-endpoint-stats { + leaf num-state-chg { + type yang:counter32; + description + "number of state changes."; + } + leaf probe-requests-sent { + type yang:counter64; + description + "Number of probe requests sent."; + } + leaf probe-replies-received { + type yang:counter64; + description + "Number of probe replies received."; + } + leaf max-latency { + type decimal64 { + fraction-digits 1; + } + description + "Maximum latency value."; + } + leaf min-latency { + type decimal64 { + fraction-digits 1; + } + description + "Minumum latency value."; + } + uses oam-endpoint-common-stats; + } + + grouping oam-history-stats-common { + list entries { + leaf timestamp { + type yang:date-and-time; + description + "Indicates the time the metric was recorded."; + } + uses oam-endpoint-common-stats; + } + } + + grouping oam-endpoint-history-stats { + list stats { + key "type"; + description + "list of historical raw stats for this endpoint."; + + leaf type { + type identityref { + base arc-oam-types:OAM_STAT_TYPE; + } + description + "Indicates the type of the history statistics (raw/average)"; + } + uses oam-history-stats-common; + } + } + + + grouping oam-endpoint-state { + description + "endpoint specific state and counters"; + + leaf network-instance { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:name"; + } + description + "OAM endpoint network instance"; + } + leaf destination { + type string; + description + "OAM-endpoint destination value"; + } + leaf source { + type string; + description + "OAM-endpoint source value"; + } + leaf profile-name { + type string { + length "1..79"; + } + description + "OAM profile attached to this endpoint."; + } + + leaf-list clients { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "OAM clients monitoring this endpoint."; + } + leaf oam-state { + type identityref { + base arc-oam-types:OAM_ENDPOINT_STATE; + } + description + "Current eligibility state of the endpoint."; + } + leaf-list ineligibility-reason { + type identityref { + base arc-oam-types:OAM_INELIGIBILITY_REASON_TYPE; + } + description + "Reason this endpoint is marked ineligible if applicable."; + } + leaf last-state-change-time { + type yang:date-and-time; + description + "Indicates the last time the endpoint state was updated."; + } + uses oam-endpoint-stats; + } + + grouping oam-endpoint-top { + container endpoints { + config false; + list endpoint { + key "network-instance destination source"; + description + "The list of OAM endpoints."; + + leaf network-instance { + type leafref { + path "../state/network-instance"; + } + description + "type of OAM endpoint"; + } + leaf destination { + type leafref { + path "../state/destination"; + } + description + "Destination Value of OAM endpoint"; + } + leaf source { + type leafref { + path "../state/source"; + } + description + "Source Value of OAM endpoint"; + } + container state { + uses oam-endpoint-state; + } + } + } + } + + grouping oam-endpoint-history-top { + container endpoint-history { + config false; + list endpoint { + key "network-instance destination source"; + description + "The list of OAM endpoints."; + + leaf network-instance { + type leafref { + path "../../../endpoints/endpoint/state/network-instance"; + } + description + "type of OAM endpoint"; + } + leaf destination { + type leafref { + path "../../../endpoints/endpoint/state/destination"; + } + description + "Destination Value of OAM endpoint"; + } + leaf source { + type leafref { + path "../../../endpoints/endpoint/state/source"; + } + description + "Source Value of OAM endpoint"; + } + uses oam-endpoint-history-stats; + } + } + } + + grouping oam-stats { + leaf total-number-of-endpoints { + type yang:counter32; + description + "total number of endpoints being monitored"; + } + leaf eligible-endpoints { + type yang:counter32; + description + "number of endpoints in eligible or healthy state as per the profile"; + } + leaf ineligible-endpoints { + type yang:counter32; + description + "number of endpoints in ineligible or unhealthy state as per the profile"; + } + } + + grouping oam-profile-state { + description + "grouping for oam-profile state"; + leaf enabled { + type boolean; + description + "State Enabled/Disabled."; + } + leaf probe-interval { + type uint16; + description + "monitor interval value in seconds"; + } + } + + grouping oam-profile-config { + description + "grouping for oam-profile config"; + + leaf name { + type string; + description + "Name of oam-profile"; + } + leaf enable { + type boolean; + default true; + description + "Enables the OAM profile."; + } + leaf monitor-interval { + type identityref { + base arc-oam-types:OAM_MONITOR_INTERVAL_TYPE; + } + default arc-oam-types:OAM_MONITOR_INTERVAL_60s; + description + "monitor interval value in seconds"; + } + leaf latency { + type decimal64 { + fraction-digits 1; + } + description + "Maximum tolerable measured latency value in milli-seconds"; + } + leaf latency-threshold { + type decimal64 { + fraction-digits 1; + } + default 15; + description + "This metric indicates maximum tolerated ratio of latency(small_window)/latency(long_window) in percentage."; + } + leaf baseline-latency-window-multiplier { + type uint8; + default 5; + description + "Long sliding window duration value as specified by multiples of monitoring interval. This interval will be used to create + a running average of latency for the “long latency” statistics."; + } + leaf pkt-loss-percent { + type decimal64 { + fraction-digits 1; + range "0.1..100"; + } + description + "Maximum tolerable measured packet loss as percentage"; + } + leaf dampening-multiplier { + type uint8; + default 3; + description + "number of probe intervals in affected state before flagging and notifying the clients"; + } + leaf maximum-consecutive-pkt-loss { + type uint16; + description + "maximum number of consecutive packet loss tolerated."; + } + } + + grouping oam-client-state { + leaf name { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "Name of oam-profile client"; + } + uses oam-stats; + } + + grouping oam-client-top { + container clients { + config false; + list client { + key "name"; + description + "The list of OAM profile clients."; + + leaf name { + type leafref { + path "../state/name"; + } + description + "Name of OAM profile client"; + } + container state { + uses oam-client-state; + } + } + } + } + + grouping oam-profile-top { + container profiles { + description + "OAM profile related config"; + list profile { + key "name"; + leaf name { + type leafref { + path "../config/name"; + } + description + "Name of OAM profile"; + } + container config { + uses oam-profile-config; + } + + container state { + config false; + uses oam-profile-config; + uses oam-profile-state; + uses oam-stats; + } + } + } + } + + grouping oam-monitor-top { + container monitor { + description + "Monitor specific endpoint."; + action start { + description + "Monitor endpoint"; + + input { + leaf network-instance { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:name"; + } + description + "OAM-endpoint ni"; + } + leaf endpoint { + type string; + description + "Endpoint destination value."; + } + leaf from { + type string; + description + "Endpoint source value."; + } + leaf profile { + type leafref { + path "/arc-oam:oam/arc-oam:profiles/arc-oam:profile/arc-oam:name"; + } + description + "Associated profile for this endpoint monitoring."; + } + } + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + action stop { + description + "Monitor endpoint"; + + input { + leaf network-instance { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:name"; + } + description + "OAM-endpoint ni"; + } + leaf endpoint { + type string; + description + "Endpoint value."; + } + leaf from { + type string; + description + "Endpoint source value."; + } + } + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + } + } + grouping oam-config { + description + "Global configuration data for OAMs"; + } + + container oam { + description + "Top level enclosing container for OAM model config + and operational state data"; + + container config { + description + "Global config data for OAM config"; + + uses oam-config; + } + + container state { + config false; + leaf num-profiles { + type yang:counter32; + description + "number of profiles"; + } + uses oam-stats; + uses oam-client-top; + } + uses oam-profile-top; + uses oam-endpoint-top; + uses oam-endpoint-history-top; + uses oam-monitor-top; + } + + + container oam-clear { + action all { + description + "Clear all endpoint state and history"; + + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + action state { + description + "Clear all endpoint state"; + + input { + leaf endpoint { + type string; + description + "The endpoint whose state is to be cleared."; + } + leaf all { + type boolean; + description + "if all endpoint state is to be cleared."; + } + } + + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + action history { + description + "Clear all endpoint history"; + + input { + leaf endpoint { + type string; + description + "The endpoint whose history is to be cleared"; + } + leaf all { + type boolean; + description + "if all endpoint state is to be cleared."; + } + } + + output { + leaf result { + type string; + description + "The status of the operation"; + } + } + } + } + } diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-aaa-types.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-aaa-types.yang new file mode 100644 index 000000000..6dd06b27a --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-aaa-types.yang @@ -0,0 +1,34 @@ +module arcos-openconfig-aaa-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/aaa/types"; + prefix arc-oc-aaa-types; + + import openconfig-aaa-types { + prefix oc-aaa-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines additional types/identities + that base off of OpenConfig AAA types. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + identity SYSTEM_ROLE_OPERATOR { + base oc-aaa-types:SYSTEM_DEFINED_ROLES; + description + "Built-in role that limits user access to operational commands + on the device."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-acl-augments-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-acl-augments-deviations.yang new file mode 100644 index 000000000..cb18cd9f5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-acl-augments-deviations.yang @@ -0,0 +1,139 @@ +module arcos-openconfig-acl-augments-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/acl/augments/deviations"; + prefix arc-oc-acl-aug-dev; + + import openconfig-acl { + prefix oc-acl; + } + + import arcos-openconfig-acl-augments { + prefix arc-oc-acl-aug; + } + + import openconfig-interfaces { + prefix oc-if; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:input-interface" { + deviate not-supported; + description "Do not support input-interface in this release"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:input-interface" { + deviate not-supported; + description "Do not support input-interface in this release"; + } + + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:config" + + "/arc-oc-acl-aug:sequence-id" { + deviate replace { + type uint64; + } + description "increase to uint64 from uint32"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:state" + + "/arc-oc-acl-aug:sequence-id" { + deviate replace { + type uint64; + } + description "increase to uint64 from uint32"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:config" + + "/arc-oc-acl-aug:sequence-id" { + deviate replace { + type uint64; + } + description "increase to uint64 from uint32"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:state" + + "/arc-oc-acl-aug:sequence-id" { + deviate replace { + type uint64; + } + description "increase to uint64 from uint32"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:transport/arc-oc-acl-aug:config" { + deviate not-supported; + description "Deviate out config container from flowspec"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:ipv6/arc-oc-acl-aug:config" { + deviate not-supported; + description "Deviate out config container from flowspec"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:ipv4/arc-oc-acl-aug:config" { + deviate not-supported; + description "Deviate out config container from flowspec"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:l2/arc-oc-acl-aug:config" { + deviate not-supported; + description "Deviate out config container from flowspec"; + } + + + + + deviation "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:transport/arc-oc-acl-aug:config" { + deviate not-supported; + description "Deviate out config container from system-defined"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:ipv6/arc-oc-acl-aug:config" { + deviate not-supported; + description "Deviate out config container from system-defined"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:ipv4/arc-oc-acl-aug:config" { + deviate not-supported; + description "Deviate out config container from system-defined"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:l2/arc-oc-acl-aug:config" { + deviate not-supported; + description "Deviate out config container from system-defined"; + } + + /* + * For now block co-existence of main-interface and sub-interface ACLs + */ + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/arc-oc-acl-aug:acl-service-policies" { + deviate add { + must "(boolean(current()/../../../arc-oc-acl-aug:acl-service-policies) != 'true')" { + error-message "co-existence of interface and subinterface ACL, under same interface, not supported"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-acl-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-acl-augments.yang new file mode 100644 index 000000000..a52a0dd8c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-acl-augments.yang @@ -0,0 +1,448 @@ +module arcos-openconfig-acl-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/acl/augments"; + prefix arc-oc-acl-aug; + + import openconfig-acl { + prefix oc-acl; + } + + import iana-if-type { + prefix ianaift; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import ietf-inet-types { + prefix ietf-inet; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-if-ethernet { + prefix oc-eth; + } + + import openconfig-if-aggregate { + prefix oc-lag; + } + + import openconfig-network-instance { + prefix oc-ni; + } + + import arcos-copp-service-policy { + prefix arc-copp-svc-pol; + } + + identity REDIRECT { + base oc-acl:FORWARDING_ACTION; + description + "Redirect the packet"; + } + + grouping ipv4-redirect-config { + description + "Config of IPv4 redirect action"; + + leaf network-instance { + type oc-ni:network-instance-ref; + description + "redirect packet to specified network-instance"; + } + + leaf next-hop { + type ietf-inet:ipv4-address-no-zone; + description + "redirect packet to specified ipv4 nexthop address"; + } + } + + grouping ipv4-redirect-state { + description + "State information of IPv4 redirect action"; + } + + grouping ipv4-redirect-action-top { + description + "Grouping for parameters related to ipv4 redirect forwarding action"; + + container ipv4-redirect { + description + "Container holding parameters related to ipv4 redirect forwarding action"; + + container config { + description + "Config data"; + uses ipv4-redirect-config; + } + + container state { + config false; + description + "State information"; + uses ipv4-redirect-config; + uses ipv4-redirect-state; + } + } + } + + + grouping ipv6-redirect-config { + description + "Config of IPv6 redirect action"; + + leaf network-instance { + type oc-ni:network-instance-ref; + description + "redirect packet to specified network-instance"; + } + + leaf next-hop { + type ietf-inet:ipv6-address-no-zone; + description + "redirect packet to specified ipv6 nexthop address"; + } + } + + grouping ipv6-redirect-state { + description + "State information of IPv6 redirect action"; + } + + + grouping ipv6-redirect-action-top { + description + "Grouping for parameters related to ipv6 redirect forwarding action"; + + container ipv6-redirect { + description + "Container holding parameters related to ipv6 redirect forwarding action"; + + container config { + description + "Config data"; + uses ipv6-redirect-config; + } + + container state { + config false; + description + "State information"; + uses ipv6-redirect-config; + uses ipv6-redirect-state; + } + } + } + + + grouping interface-acl-sets-top { + description + "Top-level grouping for per-interface per-direction ACL data"; + + list acl-set { + key "type"; + description + "List of per-direction ACLs on the interface"; + + leaf type { + type identityref { + base oc-acl:ACL_TYPE; + } + description + "Reference to the ACL set type (ACL_IPV4, ACL_IPV6 or ACL_L2) + applied on the interface direction."; + } + + leaf set-name { + type leafref { + path "/oc-acl:acl/oc-acl:acl-sets" + + "/oc-acl:acl-set[oc-acl:type=current()/../type]/oc-acl:config" + + "/oc-acl:name"; + } + mandatory true; + description + "Reference to the ACL set name applied on interface direction"; + } + } + } + + grouping acl-service-policies-top { + description + "Top-level grouping for per-interface ACL data"; + + list acl-service-policies { + key "direction"; + description + "Direction of traffic the ACL polices take effect on"; + + leaf direction { + type enumeration { + enum ingress-acl-sets { + description + "ACL per-interface policies for incoming traffic"; + } + enum egress-acl-sets { + description + "ACL per-interface policies for outgoing traffic"; + } + } + } + uses interface-acl-sets-top; + + container state { + config false; + uses interface-acl-sets-top; + } + } + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set" { + container interfaces { + config false; + list interface { + key "id direction"; + description + "Interfaces on which a given ACL is applied"; + leaf id { + type leafref { + path "../state/id"; + } + } + + leaf direction { + type leafref { + path "../state/direction"; + } + } + + container state { + leaf id { + type string; + description + "User defined identifier for interface and subinterface"; + } + + leaf direction { + type enumeration { + enum ingress-acl { + description + "ACL per-interface policies for incoming traffic"; + } + enum egress-acl { + description + "ACL per-interface policies for outgoing traffic"; + } + } + } + } + } + } + } + + augment "/oc-if:interfaces/oc-if:interface" { + uses acl-service-policies-top { + when "((current()/oc-if:config/oc-if:type = 'ianaift:softwareLoopback') or " + + " (current()/oc-if:config/oc-if:type = 'ianaift:l3ipvlan') or " + + " (current()/oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') or " + + " ((current()/oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') and (boolean(current()/oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true')))"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" { + uses acl-service-policies-top { + when "((current()/../../oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') or " + + " ((current()/../../oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') and (boolean(current()/../../oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true')))"; + refine "acl-service-policies/direction" { + must "current() = 'ingress-acl-sets'" { + error-message "Egress ACL not supported under subinterfaces"; + } + } + } + } + + augment "/arc-copp-svc-pol:control-plane" { + uses acl-service-policies-top; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:state" { + leaf matched-ingress-packets { + type oc-yang:counter64; + description + "Aggregate count of the number of packets matching the current ACL + entry on ingress direction accross all interfaces."; + } + leaf matched-egress-packets { + type oc-yang:counter64; + description + "Aggregate count of the number of packets matching the current ACL + entry on egress direction accross all interfaces."; + } + leaf matched-ingress-octets { + type oc-yang:counter64; + description + "Aggregate count of the number of octets (bytes) matching the current + ACL entry on ingress direction accross all interfaces."; + } + leaf matched-egress-octets { + type oc-yang:counter64; + description + "Aggregate count of the number of octets (bytes) matching the current + ACL entry on ingress direction accross all interfaces."; + } + } + + augment "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:state" { + leaf matched-ingress-packets { + type oc-yang:counter64; + description + "Aggregate count of the number of packets matching the current ACL + entry on ingress direction accross all interfaces."; + } + leaf matched-egress-packets { + type oc-yang:counter64; + description + "Aggregate count of the number of packets matching the current ACL + entry on egress direction accross all interfaces."; + } + leaf matched-ingress-octets { + type oc-yang:counter64; + description + "Aggregate count of the number of octets (bytes) matching the current + ACL entry on ingress direction accross all interfaces."; + } + leaf matched-egress-octets { + type oc-yang:counter64; + description + "Aggregate count of the number of octets (bytes) matching the current + ACL entry on ingress direction accross all interfaces."; + } + } + + augment "/oc-acl:acl" { + container system-defined { + config false; + description + "Display system defined ACLs.These ACLs can not be re-used or modified"; + list acl-set { + key "name type"; + description + "List of ACL sets, each comprising of a list of ACL + entries"; + + uses oc-acl:acl-set-config; + uses oc-acl:access-list-entries-top; + } + } + } + + augment "/oc-acl:acl" { + container bgp-flowspec { + config false; + description + "Display bgp flowspec defined ACLs.These ACLs can not be re-used or modified"; + list acl-set { + key "name type"; + description + "List of ACL sets, each comprising of a list of ACL + entries"; + + uses oc-acl:acl-set-config; + uses oc-acl:access-list-entries-top; + } + } + } + + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:actions" { + uses ipv4-redirect-action-top { + when "((current()/oc-acl:config/oc-acl:forwarding-action='arc-oc-acl-aug:REDIRECT')" + + " and (current()/../../../oc-acl:type = 'oc-acl:ACL_IPV4'))"; + } + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:actions" { + uses ipv6-redirect-action-top { + when "((current()/oc-acl:config/oc-acl:forwarding-action='arc-oc-acl-aug:REDIRECT')" + + " and (current()/../../../oc-acl:type = 'oc-acl:ACL_IPV6'))"; + } + } + + + augment "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:actions" { + uses ipv4-redirect-action-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:actions" { + uses ipv6-redirect-action-top; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set" + + "/oc-acl:acl-entries/oc-acl:acl-entry/oc-acl:state" { + leaf priority { + type uint32; + } + description "Add priority field for configured aces"; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:state" { + leaf priority { + type uint32; + } + description "Add priority field for system-defined aces"; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:state" { + leaf priority { + type uint32; + } + description "Add priority field for bgp-flowspec aces"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:ipv4/arc-oc-acl-aug:state/arc-oc-acl-aug:source-address" { + deviate replace { + type ietf-inet:ipv4-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:ipv4/arc-oc-acl-aug:state/arc-oc-acl-aug:destination-address" { + deviate replace { + type ietf-inet:ipv4-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:ipv6/arc-oc-acl-aug:state/arc-oc-acl-aug:source-address" { + deviate replace { + type ietf-inet:ipv6-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + deviation "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry" + + "/arc-oc-acl-aug:ipv6/arc-oc-acl-aug:state/arc-oc-acl-aug:destination-address" { + deviate replace { + type ietf-inet:ipv6-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-acl-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-acl-deviations.yang new file mode 100644 index 000000000..ad4ea1307 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-acl-deviations.yang @@ -0,0 +1,367 @@ +module arcos-openconfig-acl-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/acl/deviations"; + prefix arc-oc-acl-dev; + + import openconfig-acl { + prefix oc-acl; + } + + import ietf-inet-types { + prefix ietf-inet; + } + + import openconfig-inet-types { + prefix oc-inet; + } + + import openconfig-packet-match-types { + prefix oc-pkt-match-types; + } + + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set" + + "/oc-acl:config/oc-acl:name" { + deviate replace { + type string { + length "0..79"; + } + } + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set" + + "/oc-acl:config/oc-acl:description" { + deviate replace { + type string { + length "0..79"; + } + } + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set" + + "/oc-acl:acl-entries/oc-acl:acl-entry/oc-acl:config" + + "/oc-acl:description" { + deviate replace { + type string { + length "0..79"; + } + } + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:config/oc-acl:sequence-id" { + deviate replace { + type uint64 { + range "1..65534"; + } + } + description "increase to uint64 from uint32"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:state/oc-acl:sequence-id" { + deviate replace { + type uint64; + } + description "increase to uint64 from uint32"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:actions/oc-acl:config/oc-acl:forwarding-action" { + deviate replace { + mandatory false; + } + description "action is not a mandatory configuration"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:config" + + "/oc-acl:source-address" { + deviate replace { + type ietf-inet:ipv4-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:state" + + "/oc-acl:source-address" { + deviate replace { + type ietf-inet:ipv4-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:config" + + "/oc-acl:destination-address" { + deviate replace { + type ietf-inet:ipv4-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:state" + + "/oc-acl:destination-address" { + deviate replace { + type ietf-inet:ipv4-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:config" + + "/oc-acl:source-address" { + deviate replace { + type ietf-inet:ipv6-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:state" + + "/oc-acl:source-address" { + deviate replace { + type ietf-inet:ipv6-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:config" + + "/oc-acl:destination-address" { + deviate replace { + type ietf-inet:ipv6-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:state" + + "/oc-acl:destination-address" { + deviate replace { + type ietf-inet:ipv6-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:transport/oc-acl:config" + + "/oc-acl:source-port" { + deviate replace { + type union { + type string { + pattern '(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?[0-9]?' + + '[0-9]?)\.\.(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?' + + '[0-9]?[0-9]?)'; + } + type oc-inet:port-number; + type enumeration { + enum ANY { + description + "Indicates any valid port number (e.g., wildcard)"; + } + } + } + } + description "Fix the pattern of union member port-num-range string by + removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:transport/oc-acl:config" + + "/oc-acl:destination-port" { + deviate replace { + type union { + type string { + pattern '(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?[0-9]?' + + '[0-9]?)\.\.(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?' + + '[0-9]?[0-9]?)'; + } + type oc-inet:port-number; + type enumeration { + enum ANY { + description + "Indicates any valid port number (e.g., wildcard)"; + } + } + } + } + description "Fix the pattern of union member port-num-range string by + removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:transport/oc-acl:state" + + "/oc-acl:source-port" { + deviate replace { + type union { + type string { + pattern '(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?[0-9]?' + + '[0-9]?)\.\.(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?' + + '[0-9]?[0-9]?)'; + } + type oc-inet:port-number; + type enumeration { + enum ANY { + description + "Indicates any valid port number (e.g., wildcard)"; + } + } + } + } + description "Fix the pattern of union member port-num-range string by + removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:transport/oc-acl:state" + + "/oc-acl:destination-port" { + deviate replace { + type union { + type string { + pattern '(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?[0-9]?' + + '[0-9]?)\.\.(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?' + + '[0-9]?[0-9]?)'; + } + type oc-inet:port-number; + type enumeration { + enum ANY { + description + "Indicates any valid port number (e.g., wildcard)"; + } + } + } + } + description "Fix the pattern of union member port-num-range string by + removing ^ and $."; + } + + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:config" + + "/oc-acl:destination-flow-label" { + deviate not-supported; + description "Do not support ipv6 destination-flow-label in this release"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:state" + + "/oc-acl:destination-flow-label" { + deviate not-supported; + description "Do not support ipv6 destination-flow-label in this release"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:input-interface" { + deviate not-supported; + description "Do not support input-interface in this release"; + } + + deviation /oc-acl:acl/oc-acl:interfaces { + deviate not-supported; + description "ACL targets shall be configured under interfaces directly"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:config/oc-acl:source-mac" { + deviate replace { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + } + description "Fix the pattern of mac-address by removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:state/oc-acl:source-mac" { + deviate replace { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + } + description "Fix the pattern of mac-address by removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:config" + + "/oc-acl:source-mac-mask" { + deviate replace { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + } + description "Fix the pattern of mac-address by removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:state" + + "/oc-acl:source-mac-mask" { + deviate replace { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + } + description "Fix the pattern of mac-address by removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:config" + + "/oc-acl:destination-mac" { + deviate replace { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + } + description "Fix the pattern of mac-address by removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:state" + + "/oc-acl:destination-mac" { + deviate replace { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + } + description "Fix the pattern of mac-address by removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:config" + + "/oc-acl:destination-mac-mask" { + deviate replace { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + } + description "Fix the pattern of mac-address by removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:state" + + "/oc-acl:destination-mac-mask" { + deviate replace { + type string { + pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'; + } + } + description "Fix the pattern of mac-address by removing ^ and $."; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:state/oc-acl:matched-packets" { + deviate not-supported; + description "Replaced with matched-ingress-packets and + matched-egress-packet"; + } + + deviation "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:state/oc-acl:matched-octets" { + deviate not-supported; + description "Replaced with matched-ingress-octets and + matched-egress-octets"; + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-aft-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-aft-augments.yang new file mode 100644 index 000000000..02aa291fa --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-aft-augments.yang @@ -0,0 +1,148 @@ +module arcos-openconfig-aft-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/aft/augments"; + prefix arc-oc-aft-aug; + + import openconfig-network-instance { + prefix oc-ni; + } + + import arcos-openconfig-network-instance-augments { + prefix arc-oc-netinst-aug; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import arcos-aft-types { + prefix arc-aft-types; + } + + import arcos-aft { + prefix arc-aft; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines augmentation for Arrcus + implemention of the openconfig aft module."; + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:afts/oc-ni:ipv4-unicast/oc-ni:ipv4-entry/oc-ni:next-hops/oc-ni:next-hop" + + "/oc-ni:state" { + leaf nexthop-type { + type arc-aft-types:dpal-nexthop-type; + description + "nexthop type"; + } + leaf nexthop-tunnel-id { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance/" + + "arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels/" + + "arc-oc-netinst-aug:tunnel-id"; + } + description + "ID of tunnel that nexthop recurses over"; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:afts-units/oc-ni:aft-unit-entry/oc-ni:afts" + + "/oc-ni:ipv4-unicast/oc-ni:ipv4-entry/oc-ni:next-hops/oc-ni:next-hop" + + "/oc-ni:state" { + leaf nexthop-type { + type arc-aft-types:dpal-nexthop-type; + description + "nexthop type"; + } + leaf nexthop-tunnel-id { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance/" + + "arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels/" + + "arc-oc-netinst-aug:tunnel-id"; + } + description + "ID of tunnel that nexthop recurses over"; + } + } + + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:afts/oc-ni:ipv6-unicast/oc-ni:ipv6-entry/oc-ni:next-hops/oc-ni:next-hop" + + "/oc-ni:state" { + leaf nexthop-type { + type arc-aft-types:dpal-nexthop-type; + description + "nexthop type"; + } + leaf nexthop-tunnel-id { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance/" + + "arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels/" + + "arc-oc-netinst-aug:tunnel-id"; + } + description + "ID of tunnel that nexthop recurses over"; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:afts-units/oc-ni:aft-unit-entry/oc-ni:afts" + + "/oc-ni:ipv6-unicast/oc-ni:ipv6-entry/oc-ni:next-hops/oc-ni:next-hop" + + "/oc-ni:state" { + leaf nexthop-type { + type arc-aft-types:dpal-nexthop-type; + description + "nexthop type"; + } + leaf nexthop-tunnel-id { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance/" + + "arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels/" + + "arc-oc-netinst-aug:tunnel-id"; + } + description + "ID of tunnel that nexthop recurses over"; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:afts/oc-ni:mpls/oc-ni:label-entry/oc-ni:next-hops/oc-ni:next-hop" + + "/oc-ni:state" { + leaf nexthop-type { + type arc-aft-types:dpal-nexthop-type; + description + "nexthop type"; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:afts-units/oc-ni:aft-unit-entry/oc-ni:afts" + + "/oc-ni:mpls/oc-ni:label-entry/oc-ni:next-hops/oc-ni:next-hop" + + "/oc-ni:state" { + leaf nexthop-type { + type arc-aft-types:dpal-nexthop-type; + description + "nexthop type"; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:afts" { + uses arc-aft:aft-srv6-sids; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-aft.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-aft.yang new file mode 100644 index 000000000..af6646023 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-aft.yang @@ -0,0 +1,37 @@ +module arcos-openconfig-aft { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/aft"; + prefix arc-oc-aft; + + import openconfig-aft { + prefix oc-aft; + } + + grouping afts-units-top { + description + "Top-level grouping allowing per-protocol instantiation + of the AFT. Extends the AFT to multiple forwarding + units"; + + container afts-units { + config false; + + description + "Extends the AFT to multiple forwarding units."; + + list aft-unit-entry { + key "unit-id"; + description + "List of forwarding units"; + + leaf unit-id { + type uint32; + description + "Uniquely identifies a forwarding unit"; + } + + uses oc-aft:aft-top; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-alarms-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-alarms-deviations.yang new file mode 100644 index 000000000..5d9dff9f5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-alarms-deviations.yang @@ -0,0 +1,47 @@ +module arcos-openconfig-alarms-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/alarms/deviations"; + prefix arc-oc-alarms-dev; + + import openconfig-alarms { + prefix oc-alarms; + } + + import openconfig-platform { + prefix oc-platform; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines deviations to the openconfig alarms model. + + Copyright (c) 2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-11-08 { + description + "Initial revision"; + } + + deviation "/oc-platform:components/oc-platform:component/" + + "oc-platform:state/oc-alarms:equipment-failure" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-platform:components/oc-platform:component/" + + "oc-platform:state/oc-alarms:equipment-mismatch" { + deviate not-supported; + description "Not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bfd-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bfd-augments.yang new file mode 100644 index 000000000..6400e0efd --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bfd-augments.yang @@ -0,0 +1,129 @@ +module arcos-openconfig-bfd-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bfd/augments"; + prefix arc-oc-bfd-aug; + + import openconfig-bfd { + prefix oc-bfd; + } + import ietf-inet-types { + prefix inet; + } + import openconfig-interfaces { + prefix oc-if; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines augmentation for Arrcus + implementation of the openconfig BFD module."; + + revision 2018-11-14 { + description + "Initial Revision + "; + } + + grouping bfd-peer-state-top { + leaf hw-offload-status { + type boolean; + description + "Hardware offload status."; + } + leaf interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + } + description "Micro BFD interface"; + } + leaf parent-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + } + description "Micro BFD Parent interface"; + } + leaf hw-endpoint-id { + type int32; + description + "Hardware Endpoint ID."; + } + leaf network-instance { + type string; + description + "Network Instance Name."; + } + } + + grouping bfd-micro-remote-address-top { + container remote-address { + leaf ipv4 { + type inet:ipv4-address-no-zone; + description "Destination IPV4 address for the micro BFD sessions"; + } + leaf ipv6 { + type inet:ipv6-address-no-zone; + description "Destination IPV6 address for the micro BFD sessions"; + } + } + } + grouping bfd-micro-intf-config { + uses bfd-micro-remote-address-top; + leaf enabled { + type boolean; + description "Enable Micro BFD sessions"; + } + } + augment "/oc-if:interfaces/oc-if:interface" { + when "current()/oc-if:config/oc-if:type = 'ianaift:ieee8023adLag'" { + description "Micro BFD configs for LAG interface"; + } + + container bfd { + description "BFD interface specific configurations"; + container micro { + description "Micro BFD interface specific configurations"; + container config { + description "Micro BFD interface configurations"; + uses bfd-micro-intf-config; + } + container state { + description "Micro BFD interface sessions states"; + config false; + uses bfd-micro-intf-config; + } + } + } + } + + augment "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers" + + "/oc-bfd:peer/oc-bfd:state" { + uses bfd-peer-state-top; + } + + augment "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:config" { + leaf v4-hw-offload { + type boolean; + description "BFDv4 Hardware offload"; + } + leaf v6-hw-offload { + type boolean; + description "BFDv6 Hardware offload"; + } + } + + augment "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:state" { + leaf v4-hw-offload { + type boolean; + description "BFDv4 Hardware offload"; + } + leaf v6-hw-offload { + type boolean; + description "BFDv6 Hardware offload"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bfd-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bfd-deviations.yang new file mode 100644 index 000000000..50adb9796 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bfd-deviations.yang @@ -0,0 +1,120 @@ +module arcos-openconfig-bfd-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bfd/deviations"; + + prefix arc-oc-bfd-dev; + + import openconfig-bfd { + prefix oc-bfd; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implementation of the openconfig bfd module."; + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + + revision 2017-09-07 { + description + "Initial Revision"; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:config/oc-bfd:desired-minimum-tx-interval" { + deviate add { + mandatory true; + } + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:config/oc-bfd:required-minimum-receive" { + deviate add { + mandatory true; + } + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:config/oc-bfd:detection-multiplier" { + deviate add { + mandatory true; + } + } + + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:config/oc-bfd:local-address" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:state/oc-bfd:local-address" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:micro-bfd-sessions" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:config/oc-bfd:enable-per-member-link" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:state/oc-bfd:enable-per-member-link" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:interface-ref" { + deviate not-supported; + description "Not supported in this release"; + } + /* Temporary*/ + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:echo" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:last-failure-time" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:failure-transitions" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:local-diagnostic-code" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:remote-diagnostic-code" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:demand-mode-requested" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:remote-authentication-enabled" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:remote-control-plane-independent" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:async/oc-bfd:last-packet-transmitted" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:async/oc-bfd:last-packet-received" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-bfd:bfd/oc-bfd:interfaces/oc-bfd:interface/oc-bfd:peers/oc-bfd:peer/oc-bfd:state/oc-bfd:async/oc-bfd:up-transitions" { + deviate not-supported; + description "Not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments-arcrr-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments-arcrr-deviations.yang new file mode 100644 index 000000000..3d0813a23 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments-arcrr-deviations.yang @@ -0,0 +1,25 @@ +module arcos-openconfig-bgp-augments-arcrr-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bgp/augments/arcrr/deviations"; + prefix arc-oc-bgp-aug-arcrr-dev; + + import openconfig-network-instance { + prefix oc-ni; + } + + import arcos-openconfig-bgp-augments { + prefix arc-oc-bgp-aug; + } + + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global/oc-ni:config" + + "/arc-oc-bgp-aug:disable-rib-install" { + deviate add { + default true; + } + description "Disable BGP route installation in RIB."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments-deviations.yang new file mode 100644 index 000000000..7fe88b132 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments-deviations.yang @@ -0,0 +1,490 @@ +module arcos-openconfig-bgp-augments-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bgp/augments/deviations"; + prefix arc-oc-bgp-aug-dev; + + import openconfig-network-instance { + prefix oc-ni; + } + + import ietf-inet-types { + prefix inet; + } + + import arcos-openconfig-bgp-augments { + prefix arc-oc-bgp-aug; + } + + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:aggregate-addresses/arc-oc-bgp-aug:aggregate-address" + + "/arc-oc-bgp-aug:config/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:aggregate-addresses/arc-oc-bgp-aug:aggregate-address" + + "/arc-oc-bgp-aug:state/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:aggregate-addresses/arc-oc-bgp-aug:aggregate-address" + + "/arc-oc-bgp-aug:config/arc-oc-bgp-aug:export-policy" { + deviate add { + max-elements 1; + } + description "Only support one policy in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast" + + "/arc-oc-bgp-aug:networks/arc-oc-bgp-aug:network" + + "/arc-oc-bgp-aug:config/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast" + + "/arc-oc-bgp-aug:networks/arc-oc-bgp-aug:network" + + "/arc-oc-bgp-aug:state/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast" + + "/arc-oc-bgp-aug:networks/arc-oc-bgp-aug:network" + + "/arc-oc-bgp-aug:config/arc-oc-bgp-aug:export-policy" { + deviate add { + max-elements 1; + } + description "Only support one policy in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast" + + "/arc-oc-bgp-aug:networks/arc-oc-bgp-aug:network" + + "/arc-oc-bgp-aug:config/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast" + + "/arc-oc-bgp-aug:networks/arc-oc-bgp-aug:network" + + "/arc-oc-bgp-aug:state/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast" + + "/arc-oc-bgp-aug:networks/arc-oc-bgp-aug:network" + + "/arc-oc-bgp-aug:config/arc-oc-bgp-aug:export-policy" { + deviate add { + max-elements 1; + } + description "Only support one policy in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:rt-afi-safis/arc-oc-bgp-aug:rt-afi-safi" + + "/arc-oc-bgp-aug:config/arc-oc-bgp-aug:rt-afi-safi-name" { + deviate add { + must "(boolean(/oc-ni:network-instances" + + "/oc-ni:network-instance[oc-ni:name='default']" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:global/oc-ni:afi-safis" + + "/oc-ni:afi-safi[oc-ni:afi-safi-name=current()]" + + "/oc-ni:config/oc-ni:afi-safi-name))" { + error-message "BGP global AF must be configured first."; + } + } + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:config/arc-oc-bgp-aug:ttl-security-hops" { + deviate add { + must ". > 0" { + error-message "TTL cannot be set to 0"; + } + } + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/arc-oc-bgp-aug:ebgp-local-as/arc-oc-bgp-aug:config" { + deviate add { + must "boolean(arc-oc-bgp-aug:local-as) or " + + "(boolean(arc-oc-bgp-aug:no-prepend) != 'true' and" + + " boolean(arc-oc-bgp-aug:replace-as) != 'true' and" + + " boolean(arc-oc-bgp-aug:dual-as) != 'true')" { + error-message "'local-as' must be configured if 'no-prepend', + 'replace-as' and/or 'dual-as' is set."; + } + } + + deviate add { + must "boolean(arc-oc-bgp-aug:local-as) != 'true' or " + + "(arc-oc-bgp-aug:local-as !=" + + "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:global/oc-ni:config/oc-ni:as)" { + error-message "'local-as' must not be the same as global AS number."; + } + } + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:peer-groups/oc-ni:peer-group" + + "/arc-oc-bgp-aug:ebgp-local-as/arc-oc-bgp-aug:config" { + deviate add { + must "boolean(arc-oc-bgp-aug:local-as) or " + + "(boolean(arc-oc-bgp-aug:no-prepend) != 'true' and" + + " boolean(arc-oc-bgp-aug:replace-as) != 'true' and" + + " boolean(arc-oc-bgp-aug:dual-as) != 'true')" { + error-message "'local-as' must be configured if 'no-prepend', + 'replace-as' and/or 'dual-as' is set."; + } + } + + deviate add { + must "boolean(arc-oc-bgp-aug:local-as) != 'true' or " + + "(arc-oc-bgp-aug:local-as !=" + + "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:global/oc-ni:config/oc-ni:as)" { + error-message "'local-as' must not be the same as global AS number."; + } + } + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:graceful-restart/arc-oc-bgp-aug:state/arc-oc-bgp-aug:stale-routes-time" { + deviate replace { + type uint16; + } + description "Neighbor graceful-restart stale-time type changed"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:transport/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:remote-address" { + deviate replace { + type inet:ip-address; + } + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:transport/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:local-address" { + deviate replace { + type union { + type inet:ip-address; + type string; + } + } + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement: + option 1: IP address + option 2: String representing interface name (swp1, swp1.1, loopback0 etc.)"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:route-reflector/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:route-reflector-cluster-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:state/arc-oc-bgp-aug:route-flap-damping" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:afi-safis/arc-oc-bgp-aug:afi-safi/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:prefixes/arc-oc-bgp-aug:installed" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:afi-safis/arc-oc-bgp-aug:afi-safi" + + "/arc-oc-bgp-aug:default-originate/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:default-originate/arc-oc-bgp-aug:config" + + "/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:default-originate/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:peer-groups/oc-ni:peer-group" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:default-originate/arc-oc-bgp-aug:config" + + "/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:peer-groups/oc-ni:peer-group" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:default-originate/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:default-originate/arc-oc-bgp-aug:config" + + "/arc-oc-bgp-aug:export-policy" { + deviate add { + max-elements 1; + } + description "Only support one policy in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:peer-groups/oc-ni:peer-group" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-bgp-aug:default-originate/arc-oc-bgp-aug:config" + + "/arc-oc-bgp-aug:export-policy" { + deviate add { + max-elements 1; + } + description "Only support one policy in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global/oc-ni:afi-safis" + + "/oc-ni:afi-safi/arc-oc-bgp-aug:apply-policy" + + "/arc-oc-bgp-aug:config" + + "/arc-oc-bgp-aug:import-policy" { + deviate add { + max-elements 8; + } + description "Only support one policy in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global/oc-ni:afi-safis" + + "/oc-ni:afi-safi/arc-oc-bgp-aug:apply-policy" + + "/arc-oc-bgp-aug:config" + + "/arc-oc-bgp-aug:export-policy" { + deviate add { + max-elements 8; + } + description "Only support one policy in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global/oc-ni:afi-safis" + + "/oc-ni:afi-safi/arc-oc-bgp-aug:apply-policy" + + "/arc-oc-bgp-aug:config" + + "/arc-oc-bgp-aug:default-import-policy" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:global/oc-ni:afi-safis" + + "/oc-ni:afi-safi/arc-oc-bgp-aug:apply-policy" + + "/arc-oc-bgp-aug:config" + + "/arc-oc-bgp-aug:default-export-policy" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:session-state" { + deviate replace { + type enumeration { + enum IDLE { + description + "neighbor is down, and in the Idle state of the + FSM"; + } + enum CONNECT { + description + "neighbor is down, and the session is waiting for + the underlying transport session to be established"; + } + enum ACTIVE { + description + "neighbor is down, and the local system is awaiting + a conncetion from the remote peer"; + } + enum OPENSENT { + description + "neighbor is in the process of being established. + The local system has sent an Open message"; + } + enum OPENCONFIRM { + description + "neighbor is in the process of being established. + The local system is awaiting a Notification or + Keepalive message"; + } + enum ESTABLISHED { + description + "neighbor is up - the BGP session with the peer is + established"; + } + enum CLOSING { + description + "neighbor is down - the BGP session with the peer is + is in Closing state trying to free up resources"; + } + enum DELETING { + description + "neighbor is down - the BGP session with the peer is + is in Deleting state trying to delete session"; + } + enum INCOMPLETE { + description + "neighbor is down - the BGP session with the peer is + is in Incomplete mandatory config state"; + } + enum SHUTDOWN { + description + "neighbor is down - the BGP session with the peer is + in Shutdown state"; + } + } + } + description "BGP session state with updated types"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:last-established" { + deviate replace { + type string; + } + description "Change last established to a human readbale format"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments.yang new file mode 100644 index 000000000..61e7542e8 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-augments.yang @@ -0,0 +1,5115 @@ +module arcos-openconfig-bgp-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bgp/augments"; + prefix arc-oc-bgp-aug; + + import openconfig-bgp { + prefix oc-bgp; + } + import openconfig-bgp-types { + prefix oc-bgp-types; + } + + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import ietf-yang-types { + prefix yang; + } + + import ietf-inet-types { + prefix inet; + } + + import openconfig-inet-types { + prefix oc-inet; + } + + import arcos-bgp-auto-peer-group { + prefix arc-bgp-auto-peer-grp; + } + + import arcos-bgp-rnh { + prefix arc-bgp-rnh; + } + + import openconfig-routing-policy { + prefix oc-rpol; + } + + import openconfig-network-instance { + prefix oc-netinst; + } + + import openconfig-mpls { + prefix oc-mpls; + } + + import openconfig-network-instance-types { + prefix oc-netinst-types; + } + + import arcos-openconfig-network-instance-types { + prefix arc-oc-ni-types; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import arcos-bgp-types { + prefix arc-bgp-types; + } + + import arcos-srv6 { + prefix arc-srv6; + } + + import arcos-srv6-types { + prefix arc-srv6-types; + } + + import arcos-oam { + prefix arc-oam; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module defines augmentation for Arrcus + implementation of the openconfig BGP module. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-02-19 { + description + "Use type identityref directly instead of leafref for afi-safi-name + in all-neighbor, since all-neighbor represents only oper state."; + } + + revision 2022-11-30 { + description + "Adding peer-as-range knob"; + } + + revision 2022-10-19 { + description + "Adding strict common afi-safi check knob for session formation"; + } + + revision 2022-10-05 { + description + "Added global compatibility suppress-nexthop-attribute setting + to optionally suppress sending NEXT_HOP attribute in MP_REACH updates."; + } + + revision 2022-08-10 { + description "Added MUP SAFI support"; + } + + revision 2022-06-13 { + description + "* Add counters for configured and dynamic neighbors in + shutdown and established state. + * Change counters type from uint32 to gauge32 for global-neighbor-stats."; + } + + revision 2022-04-19 { + description + "* Added auto-inbound-soft-reconfiguation to afi-safi oper state."; + } + + revision 2022-03-16 { + description + "Adding accumulative and periodic counters + for performance monitoring"; + } + + revision 2022-02-15 { + description + "* Unblock route-target command in model for L2P2P_EVPN network instance. + * Add EVPN IMET label."; + } + + revision 2018-08-14 { + description + "ArcOS release 2.2.1"; + } + + revision 2017-05-31 { + description + "Initial Revision + * Add global/config/cluster-id. + * Add global/state/cluster-id. + * Add neighbor/add-paths/config/send. + * Add neighbor/add-paths/state/send. + * Add global/afi-safis/afi-safi//networks. + * Add global/afi-safis/afi-safi/state/versions. + * Add global/afi-safis/afi-safi/state/total-route-reflector-clients. + * Add neighbor/graceful-restart/state/restart-timer-expire and + stale-routes-timer-expire + * Add global/route-selection-options/config/selection-deferral-time. + * Add global/route-selection-options/state/selection-deferral-time. + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + grouping global-update-wait-data-plane-config { + leaf update-wait-data-plane { + type boolean; + description + "Defer BGP update generation till routes are installed in data plane"; + } + } + + grouping route-target-retain-config { + leaf retain-route-target-all { + type boolean; + description + "Retain VPN routes with all route-targets"; + } + } + + grouping global-disable-rib-config { + leaf disable-rib-install { + type boolean; + description + "Enable/Disable BGP route installation in RIB"; + } + } + + grouping global-cluster-id-config { + leaf cluster-id { + type oc-yang:dotted-quad; + description + "route-reflector cluster id to use when local router is + configured as a route reflector. Commonly set at the group + level, but allows a different cluster + id to be set for each neighbor."; + } + } + + grouping global-shutdown-protocol-config { + leaf shutdown-protocol { + type boolean; + description + "Shutdown all BGP protocol"; + } + } + + grouping global-shutdown-all-config { + leaf shutdown-all-sessions { + type boolean; + description + "Shutdown all BGP sessions"; + } + } + + grouping global-update-gen-stats { + leaf total-pending-updates { + type uint32; + description + "Total number of outstanding update messages."; + } + leaf total-update-delays { + type uint32; + description + "Total number of deplays due to too many outstanding updates."; + } + } + + grouping global-neighbor-stats { + leaf total-configured-neighbors { + type yang:gauge32; + description + "Total number of configured BGP neighbors."; + } + leaf total-established-neighbors { + type yang:gauge32; + description + "Total number of established BGP neighbors."; + } + leaf total-dynamic-neighbor-prefixes { + type yang:gauge32; + description + "Total number of configured BGP dynamic neighbor prefixes."; + } + leaf total-dynamic-neighbor-instances { + type yang:gauge32; + description + "Total number of BGP dynamic neighbor instances."; + } + leaf established-configured-neighbors { + type yang:gauge32; + description + "Number of established BGP neighbors."; + } + leaf established-dynamic-neighbors { + type yang:gauge32; + description + "Number of established BGP dynamic neighbors."; + } + leaf shutdown-configured-neighbors { + type yang:gauge32; + description + "Number of shutdown BGP neighbors."; + } + leaf shutdown-dynamic-neighbors { + type yang:gauge32; + description + "Number of shutdown BGP dynamic neighbors."; + } + } + + grouping global-errors-group { + container global-error-counts { + description + "Accumulated counts for various BGP processing errors"; + + leaf total-netlink-local-address-errors { + type uint64; + description + "Aggregate count of error messages in netlink local-addr handling area"; + } + leaf total-netlink-duplicate-address-errors { + type uint64; + description + "Aggregate count of error count for netlink updates with duplicate + interface address"; + } + leaf total-network-instance-errors { + type uint64; + description + "Aggregate count of error messages in network instance (vrf) area"; + } + leaf total-bufferevent-api-errors { + type uint64; + description + "Aggregate count of error messages in APIs to bufferevent"; + } + leaf total-socket-api-errors { + type uint64; + description + "Aggregate count of error messages in APIs to socket/bind/sockopt"; + } + leaf total-bfd-api-errors { + type uint64; + description + "Aggregate count of error messages in APIs to BFD"; + } + } + } + + grouping selection-policy-config { + leaf-list selection-policy { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:name"; + } + ordered-by user; + max-elements 1; + description + "RPOL to select eligible paths. Match/accept only."; + } + } + + grouping add-paths-select-config { + leaf-list eligible-prefix-policy { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:name"; + } + ordered-by user; + max-elements 1; + description + "RPOL to select add-path eligible paths. Match/accept only."; + } + } + + grouping add-paths-calculate-config { + leaf calculate { + type identityref { + base arc-oc-bgp-types:ADD_PATHS_OPTIONS; + } + description + "To calculate specified options in best-path calculations. " + + "ALL means calculating all available options."; + } + } + + grouping add-paths-install-config { + leaf install-backup { + type boolean; + description + "To install backup path in RIB."; + } + } + + grouping add-paths-options { + container config { + description + "Network-instance afi-safi add-paths option configs"; + uses add-paths-select-config; + uses add-paths-calculate-config; + uses add-paths-install-config; + } + container state { + config false; + description + "Network-instance afi-safi add-paths option states"; + uses add-paths-select-config; + uses add-paths-calculate-config; + uses add-paths-install-config; + } + } + + grouping global-add-paths-top { + container add-paths { + description + "Network-instance afi-safi add-paths parameters"; + uses add-paths-options; + } + } + + grouping advertise-best-external-config { + leaf advertise-best-external { + type boolean; + description + "Advertise best-external path instead of best path"; + } + } + + grouping srv6-oam-nexthop-health-config { + leaf profile { + type leafref { + path "/arc-oam:oam/arc-oam:profiles/arc-oam:profile/arc-oam:name"; + } + description + "Track next-hop health status with OAM profile"; + } + leaf-list selection-policy { + when "../profile != ''" { + description + "Select alternate tracking profile based on next-hop"; + } + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:name"; + } + ordered-by user; + max-elements 1; + } + } + + grouping srv6-oam-options { + container config { + description + "Network-instance afi-safi srv6-oam option configs"; + uses srv6-oam-nexthop-health-config; + } + container state { + config false; + description + "Network-instance afi-safi srv6-oam option states"; + uses srv6-oam-nexthop-health-config; + } + } + + grouping global-srv6-oam-top { + container srv6-oam { + description + "Network-instance afi-safi srv6-oam parameters"; + uses srv6-oam-options; + } + } + + grouping hold-timer-expiration-state { + leaf hold-timer-expire { + type decimal64 { + fraction-digits 2; + } + + description + "This timestamp indicates the time that the + BGP session hold timer value. + The value is time remaining in seconds."; + } + } + + grouping keepalive-timer-expiration-state { + leaf keepalive-timer-expire { + type decimal64 { + fraction-digits 2; + } + + description + "This timestamp indicates the time that the + BGP session keepalive timer value. + The value is time remaining in seconds."; + } + } + + grouping remote-router-id-state { + leaf remote-router-id { + type oc-yang:dotted-quad; + description + "Remote Router id of the router - an unsigned 32-bit integer + expressed in dotted quad notation."; + reference + "RFC4271 - A Border Gateway Protocol 4 (BGP-4), + Section 4.2"; + } + } + + grouping neighbor-bfd { + leaf enable { + type boolean; + description + "BFD Support for the neighbor."; + } + container strict { + description + "Parameters for bfd strict mode"; + leaf static { + type boolean; + description + "BFD is mandatory for BGP neighbor peering. This implementation + is a simplified version in that no bgp capability negotiation + is needed. Hence named strict - static."; + } + reference + "draft-merciaz-idr-bgp-bfd-strict-mode-02"; + } + } + + grouping bfd-config { + container config { + description "Configuration data for BFD."; + uses neighbor-bfd; + } + } + + grouping bfd-state { + container state { + config false; + description "Operational data for BFD."; + uses neighbor-bfd; + } + } + + grouping bfd-top { + container bfd { + description + "Configuration parameters related to bfd"; + uses bfd-config; + uses bfd-state; + } + } + + + /* + * Egress Peer Engineering augments. + */ + grouping labeled-unicast-epe-common { + leaf enable { + type boolean; + description + "Enable/Disable BGP LU based Egress Traffic Engineering under the specified + BGP neighbour."; + } + } + grouping labeled-unicast-epe-config { + container config { + description "Configuration Information for BGP LU based Egress Traffic Engineering."; + uses labeled-unicast-epe-common; + } + } + + grouping labeled-unicast-epe-next-hop-state { + description + "Grouping for BGP LU based Egress Traffic Engineering First-hop infomation."; + + list next-hop { + key "ifindex"; + + description + "Egress TE Peer next-hop list."; + + leaf ifindex { + type uint64; + description + "Interface index of the Egress-TE neighbor link"; + } + + leaf next-hop-address { + type inet:ip-address; + description + "The next hop address."; + } + + leaf label { + type uint32; + description + "Egress TE label for this Egress-TE link"; + } + } + } + + grouping labeled-unicast-epe-state { + container state { + config false; + description "Operational Information for BGP LU based Egress Traffic Engineering."; + uses labeled-unicast-epe-common; + } + } + + grouping labeled-unicast-epe-top { + container labeled-unicast { + description + "Configuration parameters related to BGP LU based Egress Traffic Engineering"; + uses labeled-unicast-epe-config; + uses labeled-unicast-epe-state; + } + } + + grouping epe-top { + container egress-peer-engineering { + description + "Container for Egress Peer Engineering feature config/state"; + uses labeled-unicast-epe-top; + } + } + + grouping ttl-security-hops-config { + leaf ttl-security-hops { + type uint8; + must "not(../../oc-netinst:ebgp-multihop/oc-netinst:config" + + "/oc-netinst:multihop-ttl)" { + error-message "Please unconfigure multihop config first"; + } + description + "Max number of ttl-hops to the BGP neighbor"; + } + } + + grouping ttl-security-hops-state { + leaf ttl-security-hops { + type uint8; + description + "Max number of ttl-hops to the BGP neighbor"; + } + } + + grouping shutdown-config { + leaf shutdown { + type boolean; + description + "BGP Support for the neighbor shutdown."; + } + } + + grouping shutdown-reason-top { + leaf shutdown-reason { + type string; + description + "Reason for neighbor shutdown."; + } + } + + grouping disable-fast-deactivation-config { + leaf disable-fast-deactivation { + type boolean; + description + "Disable peer fast deactivation."; + } + } + + grouping session-last-reset-state { + leaf last-reset-by-neighbor { + type boolean; + description + "Last time the session was reset locally or by the neighbor."; + } + leaf last-reset-reason { + type string; + description + "The reason for session being reset last time."; + } + } + + grouping nbr-srv6-config { + leaf tunnel-endpoint { + type arc-bgp-types:srv6-tunnel-endpoint-type; + description + "SRv6 global table ingress or egress tunnel endpoint"; + } + } + + grouping nbr-srv6-config-top { + container config { + description + "Configuration for SRv6 per neighbor."; + uses nbr-srv6-config; + } + } + + grouping nbr-srv6-state-top { + container state { + config false; + description + "Operational data for SRv6 per neighbor."; + uses nbr-srv6-config; + } + } + + grouping nbr-srv6-top { + container srv6 { + description + "SRv6 configuration per neighbor"; + + when "../../../../../../oc-netinst:name = 'default'" { + description + "Allow SRv6 tunnel endpoint configuration in + network-instance default only"; + } + + uses nbr-srv6-config-top; + uses nbr-srv6-state-top; + } + } + + grouping dscp-config { + leaf dscp { + type oc-inet:dscp; + description + "The value of Differentiated Services Code Point (DSCP) + for BGP packets"; + reference + "RFC 2474 Definition of the Differentiated Services Field + (DS Field) in the IPv4 and IPv6 Headers"; + } + } + + grouping neighbor-index-state { + leaf neighbor-index { + type uint32; + description + "Locally assigned neighbor-index for neighbor."; + } + } + + grouping enforce-first-as-config { + leaf enforce-first-as { + type boolean; + description + "Enable/Disable enforce first AS."; + } + } + + grouping received-peer-as-state { + leaf received-peer-as { + type oc-inet:as-number; + description + "AS number of peer"; + } + } + + grouping route-server-config { + leaf route-server-client { + type boolean; + description + "Configure the neighbor as a route server client"; + } + } + + grouping route-server-top { + container route-server { + description "Route server parameters"; + + container config { + description + "Configuration parameters relating to route server"; + uses route-server-config; + } + + container state { + config false; + description + "State information relating to route server"; + uses route-server-config; + } + } + } + + grouping nbr-af-add-paths-config { + leaf send { + type identityref { + base arc-oc-bgp-types:ADD_PATHS_OPTIONS; + } + description + "Enable capability negotiation to send additional paths + advertisements for an NLRI from the neighbor or group"; + reference + "RFC 7911 - Advertisement of Multiple Paths in BGP"; + } + + leaf receive { + type boolean; + description + "Enable capability negotiation to receive multiple path + advertisements for an NLRI from the neighbor or group"; + reference + "RFC 7911 - Advertisement of Multiple Paths in BGP"; + } + } + + grouping nbr-af-add-paths-receive-state { + leaf peer-receive { + type boolean; + description + "Is the neighbor capable of receiving add-paths."; + } + + leaf peer-send { + type boolean; + description + "Is the neighbor capable of sending add-paths."; + } + } + + grouping nbr-af-add-paths-config-top { + container config { + description + "Configuration parameters relating to ADD_PATHS"; + + uses nbr-af-add-paths-config; + } + } + + grouping nbr-af-add-paths-state-top { + container state { + config false; + description + "State information relating to ADD_PATHS"; + + uses nbr-af-add-paths-config; + uses nbr-af-add-paths-receive-state; + } + } + + grouping nbr-af-add-paths-top { + container add-paths { + description + "Parameters relating to the advertisement and receipt of + multiple paths for a single NLRI (add-paths)"; + + uses nbr-af-add-paths-config-top; + uses nbr-af-add-paths-state-top; + } + } + + grouping nbr-af-aigp-config { + leaf enable { + type boolean; + description + "Enable send and receive AIGP metric attribute"; + } + } + + grouping bgp-aigp-config { + container config { + description "Configurations for AIGP metric."; + uses nbr-af-aigp-config; + } + } + + grouping bgp-aigp-state { + container state { + config false; + description "Operational data for AIGP metric."; + uses nbr-af-aigp-config; + } + } + + grouping bgp-aigp-top { + container aigp { + description + "Neighbor AFI/SAFI AIGP metric configurations and states"; + + uses bgp-aigp-config; + uses bgp-aigp-state; + } + } + + grouping nbr-af-next-hop-top { + leaf next-hop { + type arc-bgp-types:bgp-next-hop-type; + description + "Configure next-hop type"; + } + } + + grouping nbr-af-send-tracker-sid-top { + leaf send-tracker-sid { + type boolean; + description + "Configure send-tracker-sid"; + } + } + + grouping nbr-af-extended-nexthop-config { + leaf enable { + type boolean; + description + "Enable/Disable extended nexthop encoding capability negotiation"; + reference + "RFC 5549 - Advertising IPv4 Network Layer Reachability Information + with an IPv6 Next Hop"; + } + } + + grouping nbr-af-extended-nexthop-send-receive-state { + leaf extended-nexthop-sent { + type boolean; + description + "Is Extended Nexthop Encoding Capability sent"; + } + + leaf extended-nexthop-received { + type boolean; + description + "Is Extended Nexthop Encoding Capability received"; + } + } + + grouping nbr-af-extended-nexthop-config-top { + container config { + description + "Configuration parameters relating to + extended nexthop encoding capability"; + uses nbr-af-extended-nexthop-config; + } + } + + grouping nbr-af-extended-nexthop-state-top { + container state { + config false; + description + "State information relating to extended nexthop encoding capability"; + uses nbr-af-extended-nexthop-config; + uses nbr-af-extended-nexthop-send-receive-state; + } + } + + grouping nbr-af-extended-nexthop-top { + container extended-nexthop { + description + "Enable extended nexthop encoding capability negotiation"; + + uses nbr-af-extended-nexthop-config-top; + uses nbr-af-extended-nexthop-state-top; + } + } + + grouping default-originate-config { + leaf enabled { + type boolean; + description + "Enable advertisement of default route regardless of RIB state"; + } + + uses oc-rpol:apply-policy-export-config; + } + + grouping default-originate-config-top { + container config { + description + "Configuration parameters relating to default-originate"; + uses default-originate-config; + } + } + + grouping default-originate-state-top { + container state { + config false; + description + "State information relating to default-originate"; + uses default-originate-config; + + leaf advertised { + type boolean; + description + "Boolean to indicate whether default route is advertised"; + } + } + } + + grouping default-originate-top { + container default-originate { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST' " + + "or ../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'" { + description + "Only allow default-originate to be configured + when the address-family is IPv4 or IPv6 Unicast"; + } + description + "BGP default-originate parameters"; + uses default-originate-config-top; + uses default-originate-state-top; + } + } + + grouping soft-reconfig-config-top { + leaf inbound-soft-reconfiguration { + when "../../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST' or + ../../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'" { + description + "Inbound soft-reconfiguration"; + } + type boolean; + description + "Configure inbound soft-reconfiguration"; + } + } + + grouping soft-reconfig-state-top { + leaf inbound-soft-reconfiguration { + type boolean; + description + "Inbound soft-reconfiguration state"; + } + } + + grouping nbr-af-prefixes-top { + leaf total-received { + type uint64; + description + "The total number of prefixes received from the neighbor"; + } + leaf total-sent { + type uint64; + description + "The total number of prefixes advertised to the neighbor"; + } + leaf withdrawn { + type uint32; + description + "The number of prefixes withdrawn from the neighbor"; + } + leaf deleted { + type uint32; + description + "The number of prefixes withdrawn by the neighbor or locally deleted"; + } + leaf deletion-pending { + type uint32; + description + "The number of prefixes from the neighbor with deletion pending"; + } + leaf denied { + type uint32; + description + "The number of prefixes denied from the neighbor"; + } + leaf adj-rib-in-pre-only { + type uint32; + description + "The number of prefixes denied from the neighbor but retained + when inbound soft-recofiguration is enabled"; + } + leaf invalid { + type uint64; + description + "The total number of prefixes received + from the neighbor which are considered invalid"; + } + } + + grouping maximum-paths-config { + leaf maximum-paths { + type uint32 { + range 1..128; + } + default 1; + description + "Maximum number of parallel paths to consider when using + BGP multipath. The default is use a single path."; + } + } + + grouping use-maximum-paths-config { + container ebgp { + description + "Multipath parameters for eBGP"; + uses maximum-paths-config; + } + container ibgp { + description + "Multipath parameters for iBGP"; + uses maximum-paths-config; + } + container eibgp { + description + "Multipath parameters for eiBGP"; + uses maximum-paths-config; + } + } + + grouping common-maximum-paths { + description + "Common grouping used for both global and groups which provides + configuration and state parameters relating to use of multiple + paths"; + + container use-maximum-paths { + description + "Parameters related to the use of multiple paths for the + same NLRI"; + + container config { + description + "Configuration parameters relating to multipath"; + uses use-maximum-paths-config; + } + container state { + config false; + description + "State parameters relating to multipath"; + uses use-maximum-paths-config; + } + } + } + + grouping aggregate-address-config { + description + "Configuration data for aggregate-address"; + leaf prefix { + type inet:ip-prefix; + description + "The prefix for the IPv4 network."; + } + + leaf summary-only { + type boolean; + description + "filter more specific routes from update"; + } + + uses selection-policy-config; + uses oc-rpol:apply-policy-export-config; + } + + grouping aggregate-address-top { + container aggregate-addresses { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST' " + + "or ../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'" { + description + "Only allow aggregate addresses to be configured + when the address-family is IPv4 or IPv6 Unicast"; + } + description "List of aggregate-addresses"; + list aggregate-address { + key "prefix"; + description "aggregate-address"; + leaf prefix { + type leafref { + path "../config/prefix"; + } + description "Reference to prefix key."; + } + + container config { + description "Configuration data for aggregate-address."; + uses aggregate-address-config; + } + + container state { + config false; + description "Operational data for network."; + uses aggregate-address-config; + } + } + } + } + + grouping ipv4-network-config { + description + "Configuration data for IPv4 network."; + leaf prefix { + type string; + description + "The normalized IPv4 network prefix, e.g., 10.9.0.0/16."; + } + + uses oc-rpol:apply-policy-export-config; + } + + grouping ipv4-network-top { + container networks { + description "List of networks"; + list network { + key "prefix"; + description "Originate a local IPv4 network prefix"; + + leaf prefix { + type leafref { + path "../config/prefix"; + } + description "Reference to prefix key."; + } + + container config { + description "Configuration data for network."; + uses ipv4-network-config; + } + + container state { + config false; + description "Operational data for network."; + uses ipv4-network-config; + } + } + } + } + + grouping ipv6-network-config { + description + "Configuration data for IPv6 network."; + leaf prefix { + type string; + description + "The normalized IPv6 network prefix, e.g., 2a00::9d:0/112."; + } + + uses oc-rpol:apply-policy-export-config; + } + + grouping ipv6-network-top { + container networks { + description "List of networks"; + list network { + key "prefix"; + description "Originate a local IPv6 network prefix"; + + leaf prefix { + type leafref { + path "../config/prefix"; + } + description "Reference to prefix key."; + } + + container config { + description "Configuration data for network."; + uses ipv6-network-config; + } + + container state { + config false; + description "Operational data for network."; + uses ipv6-network-config; + } + } + } + } + + grouping rtfilter-network-config { + description + "Network configuration for RTFILTER address family"; + + leaf prefix { + description "The RTFILTER prefix"; + + type arc-oc-bgp-types:rtfilter-prefix; + } + } + + grouping rtfilter-network-top { + description + "Top-level grouping for configuring RTFILTER networks"; + + container networks { + description "Container for list of RTFILTER networks"; + + list network { + key "prefix"; + description "Network entries for RTFILTER address family"; + + when "../../../oc-netinst:afi-safi-name = 'arc-oc-bgp-types:RTFILTER' "; + + leaf prefix { + type leafref { + path "../config/prefix"; + } + description "Reference to prefix key"; + } + + container config { + description "Configuration data for RTFILTER network entries"; + + uses rtfilter-network-config; + } + + container state { + config false; + description "Operational state data for RTFILTER network entries"; + + uses rtfilter-network-config; + } + } + } + } + + grouping default-information-originate-config { + leaf enabled { + type boolean; + description + "Enable/Disable default-information originate"; + } + } + + grouping default-information-originate-top { + container default-information { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST' " + + "or ../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'" { + description + "Only allow default-information originate to be configured + when the address-family is IPv4 or IPv6 Unicast"; + } + description + "BGP support for default-information originate + to allow default route to be installed from source + routing protocol into BGP on redistribution"; + + container originate { + description + "BGP support for default-information originate + to allow default route to be installed from source + routing protocol into BGP on redistribution"; + + container config { + description + "Configuration parameters relating to default-information originate"; + uses default-information-originate-config; + } + + container state { + config false; + description + "State information relating to default information originate"; + uses default-information-originate-config; + } + } + } + } + + grouping af-version-top { + container versions { + description "AFI/SAFI version numbers"; + leaf path-version { + type uint64; + description + "Path version"; + } + leaf label-path-version { + type uint64; + description + "Label path version"; + } + leaf best-path-version { + type uint64; + description + "Besh path version"; + } + leaf rib-path-version { + type uint64; + description + "RIB path version"; + } + leaf update-path-version { + type uint64; + description + "Update path version"; + } + } + } + + grouping af-errors-group { + container af-error-counts { + description + "Accumulated counts for various BGP AF processing errors"; + + leaf total-update-gen-errors { + type uint64; + description + "Aggregate count of error messages in update gen area"; + } + leaf total-label-mgr-api-errors { + type uint64; + description + "Aggregate count of error messages in APIs to label mgr"; + } + leaf total-rib-api-errors { + type uint64; + description + "Aggregate count of error messages in APIs to rib"; + } + leaf total-l2rib-api-errors { + type uint64; + description + "Aggregate count of error messages in APIs to l2rib"; + } + leaf total-brib-add-del-errors { + type uint64; + description + "Aggregate count of error messages in BRIB path add/delete area"; + } + } + } + + grouping af-stats-counters { + leaf nlris-added { + type uint64; + description "NLRIs added into BGP"; + } + leaf nlris-dropped { + type uint64; + description "NLRIs dropped as invalid in BGP"; + } + leaf nlris-denied { + type uint64; + description "NLRIs denied in BGP"; + } + leaf nlris-deleted { + type uint64; + description "NLRIs deleted in BGP"; + } + leaf paths-added { + type uint64; + description "Paths added into BGP"; + } + leaf paths-updated { + type uint64; + description "Paths updated in BGP"; + } + leaf paths-mark_delete { + type uint64; + description "Paths marked for deletion in BGP"; + } + leaf paths-deleted { + type uint64; + description "Paths deleted in BGP"; + } + leaf paths-delete-failed { + type uint64; + description "Paths failed to delete in BGP"; + } + leaf inbound-rpol-called { + type uint64; + description "Inbound RPOL called"; + } + leaf inbound-rpol-cached { + type uint64; + description "Inbound RPOL cached"; + } + leaf outbound-rpol-called { + type uint64; + description "Outbound RPOL called"; + } + leaf outbound-rpol-cached { + type uint64; + description "Outbound RPOL cached"; + } + leaf vpn-import-rpol-called { + type uint64; + description "VPN import RPOL called"; + } + leaf vpn-import-rpol-cached { + type uint64; + description "VPN import RPOL cached"; + } + leaf vrf-import-rpol-called { + type uint64; + description "VRF import RPOL called"; + } + leaf vrf-import-rpol-cached { + type uint64; + description "VRF import RPOL cached"; + } + leaf vrf-export-rpol-called { + type uint64; + description "VRF export RPOL called"; + } + leaf vrf-export-rpol-cached { + type uint64; + description "VRF export RPOL cached"; + } + leaf label-path-triggers { + type uint64; + description "Label path processing triggers"; + } + leaf label-path-runs { + type uint64; + description "Label path processing runs"; + } + leaf label-paths-processed { + type uint64; + description "Label paths processed"; + } + leaf best-path-triggers { + type uint64; + description "Best path processing triggers"; + } + leaf best-path-runs { + type uint64; + description "Best path processing runs"; + } + leaf best-paths-processed { + type uint64; + description "Best paths processed"; + } + leaf impexp-paths-processed { + type uint64; + description "Import/Export paths processed"; + } + leaf rib-nlris-processed { + type uint64; + description "RIB NLRIs processed"; + } + leaf rib-runs { + type uint64; + description "RIB processing runs"; + } + leaf upd-paths-queued { + type uint64; + description "Paths queued into update paths processing"; + } + leaf upd-paths-requeued { + type uint64; + description "Paths requeued into update paths after processing"; + } + leaf upd-triggers { + type uint64; + description "Update paths processing triggers"; + } + leaf upd-paths-refresh-triggers { + type uint64; + description "Update paths refresh processing triggers"; + } + } + + grouping af-stats-counters-group { + container af-stats-accu-counters { + description + "Accumulative stats counters for this AF."; + uses af-stats-counters; + } + container af-stats-peri-counters { + description + "Periodic stats counters (reset every 30s) for this AF."; + uses af-stats-counters; + } + } + + grouping af-state-top { + leaf total-route-reflector-clients { + type uint32; + description + "Number of route-reflector client"; + } + leaf time-since-first-best-path { + type string; + description + "Elapsed time since the first best-path calculation of the afi/safi"; + } + leaf time-since-last-best-path { + type string; + description + "Elapsed time since the last best-path calculation of the afi/safi"; + } + leaf first-path-received { + type string; + description + "Timestamp for the first path received of the address-family"; + } + leaf last-path-received { + type string; + description + "Timestamp for the last path received of the address-family"; + } + leaf last-update-sent { + type string; + description + "Timestamp for last update sent of the address-family"; + } + leaf last-rib-update { + type string; + description + "Timestamp for last RIB update of the address-family"; + } + leaf rib-install-eagain { + type uint32; + description + "Number of EAGAINs (due to queue full) upon downloading + routes to RIB"; + } + leaf paths-received { + type uint64; + description + "Aggregate of the actual paths received"; + } + leaf paths-sent { + type uint64; + description + "Aggregate of the actual paths sent"; + } + leaf paths-imported { + type uint64; + description + "Aggregate of the actual paths imported from VPN AF"; + } + leaf paths-exported { + type uint64; + description + "Aggregate of the actual paths exported to VPN AF"; + } + leaf per-nexthop-labels-allocated { + type uint64; + description + "Aggregate of the per-nexthop labels allocated"; + } + leaf per-prefix-labels-allocated { + type uint64; + description + "Aggregate of the per-prefix labels allocated"; + } + leaf total-paths-received { + type uint64; + description + "Aggregate of the total number of paths received"; + } + leaf total-paths-sent { + type uint64; + description + "Aggregate of the total number of paths sent"; + } + leaf total-paths-withdrawn { + type uint64; + description + "Aggregate of the total number of paths withdrawn"; + } + leaf total-paths-skipped { + type uint64; + description + "Aggregate of the total number of paths skipped (msg too big)"; + } + leaf total-rib-installs { + type uint64; + description + "Aggregate of the total number of prefixes installed to rib"; + } + leaf total-rib-updates { + type uint64; + description + "Aggregate of the total number of prefixes updated/modified in rib"; + } + leaf total-rib-withdrawls { + type uint64; + description + "Aggregate of the total number of prefixes withdrawn from rib"; + } + leaf rib-install-prefixes { + type uint64; + description + "Number of prefixes installed in rib"; + } + leaf total-evpn-route-type-2-installs { + type uint64; + description + "Aggregate of the total number of type-2 prefixes installed to l2rib"; + } + leaf total-evpn-route-type-2-updates { + type uint64; + description + "Aggregate of the total number of type-2 prefixes updated/modified in l2rib"; + } + leaf total-evpn-route-type-2-withdrawls { + type uint64; + description + "Aggregate of the total number of type-2 prefixes withdrawn from l2rib"; + } + leaf evpn-route-type-2-install-prefixes { + type uint64; + description + "Number of type-2 prefixes installed in l2rib"; + } + leaf total-evpn-route-type-3-installs { + type uint64; + description + "Aggregate of the total number of type-3 prefixes installed to l2rib"; + } + leaf total-evpn-route-type-3-updates { + type uint64; + description + "Aggregate of the total number of type-3 prefixes updated/modified in l2rib"; + } + leaf total-evpn-route-type-3-withdrawls { + type uint64; + description + "Aggregate of the total number of type-3 prefixes withdrawn from l2rib"; + } + leaf evpn-route-type-3-install-prefixes { + type uint64; + description + "Number of type-3 prefixes installed in l2rib"; + } + leaf auto-inbound-soft-reconfiguration { + type boolean; + description + "Auto inbound soft reconfiguration status"; + } + uses af-errors-group; + uses af-stats-counters-group; + } + + grouping nbr-af-version-top { + container versions { + description "Neighbor AFI/SAFI version numbers"; + leaf path-version { + type uint64; + description + "Path version"; + } + leaf refresh-path-version { + type uint64; + description + "Refresh path version"; + } + leaf update-marker-path-version { + type uint64; + description + "Update marker path version"; + } + } + } + + grouping nbr-af-update-gen-stats { + leaf updates-sent { + type uint32; + description + "Number of update messages sent."; + } + leaf pending-updates { + type uint32; + description + "Number of outstanding update messages."; + } + leaf update-delays { + type uint32; + description + "Number of deplays due to too many outstanding updates."; + } + } + + grouping session-elapsed-time-state { + leaf session-elapsed-time { + type string; + description + "Elapsed time since the time the BGP session last transitioned + in or out of the Established state"; + } + } + + grouping restart-timer-expire-state { + leaf restart-timer-expire { + type uint16; + description + "This time value indicates the remaining time on BGP GR + restart timer in seconds"; + } + } + + grouping stale-routes-timer-expire-state { + leaf stale-routes-timer-expire { + type uint16; + description + "This time value indicates the remaining time on BGP GR + stale-routes timer in seconds"; + } + } + + grouping bestpath-selection-top { + leaf selection-deferral-time { + type uint16 { + range 1..3600; + } + default 300; + description + "An upper-bound on the time (in seconds) that the best-path + selection is deferred"; + } + leaf med-missing-as-worst { + type boolean; + description + "A route without MED is treated as with highest MED value"; + } + leaf multipath-as-path-relax { + type boolean; + default true; + description + "Paths with different AS-Path but of same length can form ECMP"; + } + leaf multipath-nexthop-relax { + type boolean; + default false; + description + "Enable BGP multi-path for paths with same next-hop"; + } + } + + grouping selection-deferral-time-expire-state { + leaf selection-deferral-time-expire { + type uint16; + description + "This time value indicates the remaining time on BGP best-path + selection deferral timer in seconds"; + } + } + + grouping neighbor-local-as { + leaf local-as { + type oc-inet:as-number; + description + "The local autonomous system number that is to be used + when establishing sessions with the remote peer or peer + group, if this differs from the global BGP router + autonomous system number."; + } + + leaf no-prepend { + type boolean; + description + "This boolean being set to true indicates that the local AS number + shall not be prepended to the AS path of the prefix received from + the BGP neighbor."; + } + + leaf replace-as { + type boolean; + description + "This boolean being set to true indicates that only the local AS + number shall be prepended to the AS path of the prefix sent to the + BGP neighbor."; + } + + leaf dual-as { + type boolean; + description + "This boolean being set to true indicates that either the configured + local AS number or the global AS number can be used to connected with + the BGP neighbor."; + } + } + + grouping ebgp-local-as-cfg { + container config { + description "Configuration data for local AS."; + uses neighbor-local-as; + } + } + + grouping ebgp-local-as-state { + container state { + config false; + description "Operational data for local AS."; + uses neighbor-local-as; + } + } + + grouping ebgp-local-as-top { + container ebgp-local-as { + description "BGP neighbor local AS number."; + uses ebgp-local-as-cfg; + uses ebgp-local-as-state; + } + } + + grouping telemetry-routing-policy-top { + leaf-list prefix-filter-policy { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:name"; + } + ordered-by user; + max-elements 1; + description + "A policy can be specified for prefixes filtering"; + } + } + + grouping af-telemetry-config { + leaf neighbor-stream-enabled { + type boolean; + description + "Enable streaming the state of BGP neighbors with this AFI/SAFI + via telemetry"; + } + + leaf prefix-stream-enabled { + type boolean; + description + "Enable streaming BGP path information via telemetry"; + } + + uses telemetry-routing-policy-top { + when "arc-oc-bgp-aug:prefix-stream-enabled = 'true'" { + description + "It is optional to specify a routing-policy for filtering + if telemetry for paths is enabled"; + } + } + } + + grouping global-telemetry-config { + leaf neighbor-stream-enabled { + type boolean; + description + "Enable streaming the state of BGP neighbors in all + network-instances via telemetry"; + } + + leaf prefix-stream-enabled { + type boolean; + description + "Enable streaming BGP path information in all + network-instances via telemetry"; + } + } + + grouping global-telemetry-top { + container telemetry { + description + "BGP-specific telemetry parameters"; + + container config { + description + "Global telemetry configuration parameters"; + uses global-telemetry-config; + } + container state { + config false; + description + "Global telemetry state information"; + uses global-telemetry-config; + } + } + } + + grouping af-telemetry-top { + container telemetry { + description + "BGP-specific telemetry parameters"; + + container config { + description + "Telemetry configuration parameters"; + uses af-telemetry-config; + } + container state { + config false; + description + "Telemetry state information"; + uses af-telemetry-config; + + leaf prefixes-streamed { + type uint32; + description + "Count for unique prefixes that have been streamed out"; + } + + leaf prefixes-updated { + type uint32; + description + "Count for existing prefixes that have been updated"; + } + + leaf prefixes-withdrawn { + type uint32; + description + "Count for prefixes that have been streamed out and withdrawn"; + } + } + } + } + + grouping rtr-server-config-top { + leaf server-name { + type string { + length "1..50"; + } + description + "Name of the RTR server"; + } + leaf address { + type oc-yang:dotted-quad; + mandatory true; + description + "IPv4 address of the RTR server"; + } + leaf port { + type uint16; + mandatory true; + description + "TCP port the RTR server listens to"; + } + leaf preference { + type uint8 { + range "0..254"; + } + mandatory true; + description + "Preference of the RTR server; the server with lower value + is more preferred"; + } + } + + grouping rtr-server-state-top { + leaf server-connected { + type boolean; + description + "This boolean indicates if connection to the configured RTR server + is successful"; + } + } + + grouping bgp-rtr-server-base { + description + "Parameters related to a RTR server"; + + container config { + description + "Configuration parameters relating to the RTR server"; + + uses rtr-server-config-top; + } + + container state { + config false; + description + "State information relating to the RTR server"; + uses rtr-server-config-top; + uses rtr-server-state-top; + } + } + + grouping bgp-rtr-server-list { + description + "The list of RPKI to router protocol server information"; + + list rtr-server { + key server-name; + max-elements 5; + unique "config/address config/port"; + unique "config/preference"; + description + "List of configured RTR servers"; + + leaf server-name { + type leafref { + path "../config/server-name"; + } + description + "Reference to the RTR server name used as a key in the + RTR server list"; + } + + uses bgp-rtr-server-base; + } + } + + grouping global-segment-routing-config { + description + "Configuration parameters relating to segment routing within an + IGP."; + + leaf enabled { + type boolean; + description + "When this leaf is set to true, the segment routing extensions are + utilised within the BGP."; + } + + leaf srgb { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srgbs/oc-netinst:srgb" + + "/oc-netinst:config/oc-netinst:local-id"; + } + description + "A reference to the Segment Routing Global Block (SRGB) that is + to be used by this BGP instance."; + } + } + + grouping graceful-shutdown-config { + leaf enable { + type boolean; + description + "Enable graceful shutdown."; + } + leaf set-local-preference-zero { + type boolean; + description + "Set local preference to minimum (0), which will be sent to iBGP neighbor."; + } + leaf set-med-maximum { + type boolean; + description + "Set med value to maximum (2147483647)."; + } + } + + grouping graceful-shutdown-top { + container graceful-shutdown { + description "BGP support for graceful shutdown."; + + container config { + description + "Configuration parameters relating to graceful shutdown."; + must "(enable = 'true') or " + + "(boolean(set-local-preference-zero) != 'true' and " + + " boolean(set-med-maximum) != 'true')" { + error-message "Graceful shutdown must be enabled if local preference + or MED is configured."; + } + uses graceful-shutdown-config; + } + + container state { + config false; + description + "State information relating to graceful shutdown."; + uses graceful-shutdown-config; + } + } + } + + grouping global-sr-policy-config { + leaf sr-policy { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:name"; + } + } + } + + grouping nl-intf-info { + description + "BGP Netlink information"; + + leaf interface-name { + type string; + description + "Name of the interface"; + } + + leaf network-instance-name { + type string; + description + "Network instance name"; + } + + leaf network-instance-id { + type uint32; + description + "Network instance identifier"; + } + + leaf-list addresses { + type inet:ip-address; + description + "IP addresses on the interface"; + } + + leaf interface-state { + type arc-bgp-types:bgp-interface-state; + description + "State of the interface"; + } + } + + grouping nl-v4-pfx-info { + description + "BGP Netlink IPv4 prefix information"; + + leaf address { + type inet:ip-address; + description + "IP address on the entry"; + } + + leaf key-length { + type uint16; + description + "Length for NL key"; + } + + leaf interface-name { + type string; + description + "Name of the interface"; + } + + leaf interface-state { + type arc-bgp-types:bgp-interface-state; + description + "State of the interface"; + } + } + + grouping nl-v6-pfx-info { + description + "BGP Netlink IPv6 prefix information"; + + leaf address { + type inet:ipv6-address; + description + "IP address on the entry"; + } + + leaf key-length { + type uint16; + description + "Length for NL key"; + } + + leaf interface-name { + type string; + description + "Name of the interface"; + } + + leaf interface-state { + type arc-bgp-types:bgp-interface-state; + description + "State of the interface"; + } + } + + grouping nl-intf-group { + description + "BGP Netlink information"; + + list nl-intf-entry { + config false; + key "interface-name"; + description + "List of BGP Netlink entries"; + uses nl-intf-info; + } + } + + grouping nl-v4-pfx-group { + list nl-v4-pfx-entry { + config false; + key "address key-length"; + description + "List of BGP Netlink IPV4 prefix entries"; + uses nl-v4-pfx-info; + } + } + + grouping nl-v6-pfx-group { + list nl-v6-pfx-entry { + config false; + key "address key-length"; + description + "List of BGP Netlink IPV6 prefix entries"; + uses nl-v6-pfx-info; + } + } + + grouping nl-info-top { + description + "BGP Netlink information"; + + container nl-intf-entries { + description + "List of BGP netlink entries from interfaces"; + uses nl-intf-group; + } + + container nl-v4-pfx-entries { + description + "List of BGP Netlink IPV4 prefix entries"; + uses nl-v4-pfx-group; + } + + container nl-v6-pfx-entries { + description + "List of BGP Netlink IPV6 prefix entries"; + uses nl-v6-pfx-group; + } + } + + grouping tunnel-details { + description + "BGP tunnel operational state"; + + leaf tunnel-id { + type uint32; + + description + "Tunnel-id"; + } + + leaf tunnel-source { + type inet:ip-address; + + description + "Source ip address of the tunnel"; + } + + leaf tunnel-destination { + type inet:ip-address; + + description + "Destination address of the tunnel"; + } + + leaf loc-len { + type uint32; + + description + "platform locator length"; + } + + leaf tunnel-type { + type string; + + description + "Tunnel-type (IPV4 or IPV6)"; + } + + leaf tunnel-endpoint { + type inet:ip-address; + + description + "Endpoint address of the tunnel"; + } + + leaf endpoint-behavior { + description + "SRv6 endpoint behavior for the tunnel destination"; + type identityref { + base arc-srv6-types:SRV6_ENDPOINT_BEHAVIOR_TYPE; + } + } + + leaf srv6-oam-state { + type identityref { + base arc-oc-bgp-types:SRV6_OAM_STATES; + } + description + "For SRv6 Tunnel only: health state as reported by OAM"; + } + + leaf srv6-oam-profile { + type string; + description + "For SRv6 Tunnel only: profile used in OAM tracking"; + } + + leaf refcount { + type uint32; + + description + "Number of routes pointing to this tunnel"; + } + } + + grouping tunnels-top { + description + "BGP tunnels"; + + container state { + config false; + description + "Container for tunnel states created by BGP"; + + list tunnel { + + key "tunnel-id"; + + description + "List of tunnels"; + + uses tunnel-details; + } + } + + container stats { + config false; + description + "Statistics for tunnel allocations by BGP"; + leaf count { + type uint32; + description + "Total tunnel count"; + } + leaf highest-tunnel-count { + type uint32; + description + "Historically highest tunnel count reached"; + } + leaf highest-tunnel-id { + type uint32; + description + "Historically highest tunnel id allocated"; + } + } + } + + grouping rtfilter-af-config { + description + "Grouping for VPN Address Family Route Target Filter Configuration"; + + container rtfilter { + description + "Parameters relating to Route Target filtering"; + + leaf enabled { + description "Enable Route Target filtering"; + + type boolean; + } + } + } + + grouping rtfilter-af-config-top { + description "VPN address family configuration for route target filtering"; + + container rtfilter { + description + "Container for VPN address family route target filter configuration"; + + container config { + description + "Configuration for VPN address family route target filter configuration"; + + uses rtfilter-af-config; + } + + container state { + config false; + + description + "Operational state data for VPN address family route target filtering"; + + uses rtfilter-af-config; + } + } + } + + grouping rtfilter-global-config { + description "Grouping for global RTFILTER configuration"; + + leaf vpn-update-delay { + description + "Delay sending VPN updates for at most this many seconds + waiting for End-of-Rib in RTFILTER Address Family"; + + type uint32 { + range 0..600; + } + units seconds; + default 60; + } + } + + grouping rtfilter-global-config-top { + description "Top-level grouping for global RTFILTER configuration"; + + container rtfilter-global { + description + "Container for RTFILTER global configuration"; + + container config { + description + "Configuration data for global RTFILTER address family"; + + uses rtfilter-global-config; + } + + container state { + config false; + + description + "Operational state data for global RTFILTER address family"; + + uses rtfilter-global-config; + } + } + } + + grouping nbr-af-rtfilter-top { + description "Top-level grouping for neighbor RTFILTER data"; + + container rtfilter { + description + "Parameters relating to RTFILTER address family neighbor configuration"; + + when "../oc-netinst:afi-safi-name = 'arc-oc-bgp-types:RTFILTER' "; + uses oc-bgp:bgp-common-mp-ipv4-ipv6-unicast-common; + } + } + + grouping rib-acks { + leaf pending-rib-acks { + type uint32; + description + "Number of prefixes that are waiting for RIB ACK"; + } + leaf initial-rib-acks { + type uint32; + description + "Number of initial RIB ACKs"; + } + leaf queued-rib-acks { + type uint32; + description + "Number of queued RIB ACKs"; + } + } + + grouping disable-rib-resolution-config { + leaf disable-rib-resolution { + type boolean; + description + "Enable/Disable BGP route resolution in RIB"; + } + } + + grouping global-import-export-readiness-top { + leaf l3vpn-ipv4-export-readiness { + type string; + description + "Export readiness of this network-instance"; + } + leaf l3vpn-ipv4-import-readiness { + type string; + description + "Import readiness of this network-instance"; + } + leaf l3vpn-ipv6-export-readiness { + type string; + description + "Export readiness of this network-instance"; + } + leaf l3vpn-ipv6-import-readiness { + type string; + description + "Import readiness of this network-instance"; + } + leaf evpn-export-readiness { + type string; + description + "Export readiness of this network-instance"; + } + leaf evpn-import-readiness { + type string; + description + "Import readiness of this network-instance"; + } + } + + grouping deagg-label-top { + leaf deaggregation-label { + type uint32; + description + "Deaggreation label if allocated"; + } + } + + grouping imet-label-top { + leaf imet-label { + type uint32; + description + "IMET label if allocated"; + } + } + + grouping instance-sid-top { + leaf instance-sid { + type inet:ipv6-address; + description + "Locally allocated per-instance segment ID"; + } + } + + grouping global-config { + leaf route-distinguisher { + type oc-netinst-types:route-distinguisher; + description + "The route distinguisher that should be used for the local + VRF or VSI instance when it is signalled via BGP."; + } + } + + grouping global-allocation-config { + leaf label-allocation-mode { + type identityref { + base oc-netinst-types:LABEL_ALLOCATION_MODE; + } + must "not(../sid-allocation-mode)" { + error-message + "label-allocation-mode and sid-allocation-mode cannot " + + "co-exist"; + } + must "not(../../srv6/mobile/encapsulation/config/locator) or " + + "(../../srv6/mobile/decapsulations/decapsulation/config" + + "/locator) or " + + "(../../srv6/config/locator) or " + + "(/oc-netinst:network-instances" + + "/oc-netinst:network-instance[oc-netinst:name='default']" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global/srv6/config/locator)" { + error-message + "SRv6 configurations must be removed first"; + } + description + "The label allocation mode to be used for L3 entries + in the network instance"; + } + + leaf sid-allocation-mode { + type identityref { + base arc-oc-bgp-types:SID_ALLOCATION_MODE; + } + must "not(../label-allocation-mode)" { + error-message "label-allocation-mode and " + + "sid-allocation-mode cannot co-exist"; + } + must "(../../srv6/mobile/encapsulation/config/locator) or " + + "(../../srv6/mobile/decapsulations/decapsulation/config" + + "/locator) or " + + "(../../srv6/config/locator) or " + + "(/oc-netinst:network-instances" + + "/oc-netinst:network-instance[oc-netinst:name='default']" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global/srv6/config/locator)" { + error-message "SRv6 locator name must be configured"; + } + description + "The segment ID allocation mode to be used for L3 entries + in the network instance"; + } + } + + grouping srv6-locator-top { + leaf locator-registered { + type boolean; + description + "Locator name is registered"; + } + + leaf micro-segment-enabled { + type boolean; + description + "Locator has enabled micro-segment behavior"; + } + } + + grouping srv6-mobile-encapsulation-locator-config-top { + leaf locator { + description + "Reference to SRv6 locator key"; + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/arc-srv6:srv6/arc-srv6:locator/arc-srv6:name"; + } + } + + leaf function { + type arc-srv6-types:srv6-mobile-function-type; + must "boolean(current()/../locator)" { + error-message "SRv6 Mobile Locator name must be configured"; + } + } + + leaf network-instance { + description + "Reference to network-instance"; + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:name"; + } + must "boolean(current()/../locator)" { + error-message "SRv6 Mobile Locator name must be configured"; + } + } + + leaf policy-color { + description + "4 byte SRTE Policy Color"; + type uint32 { + range "1..4294967295"; + } + } + + leaf source-address { + description + "GTP source IP address"; + type inet:ipv4-address; + } + + leaf source-position { + description + "Bit position of GTP source IP address"; + type uint8; + } + } + + grouping srv6-mobile-decapsulation-locator-config-top { + leaf id { + description + "SRv6 mobile decapsulation entry id"; + type uint16 { + range "1..100"; + } + } + leaf locator { + description + "Reference to SRv6 locator key"; + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/arc-srv6:srv6/arc-srv6:locator/arc-srv6:name"; + } + } + + leaf function { + type arc-srv6-types:srv6-mobile-function-type; + must "boolean(current()/../locator)" { + error-message "SRv6 Mobile Locator name must be configured"; + } + } + + leaf network-instance { + description + "Reference to network-instance"; + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:name"; + } + must "boolean(current()/../locator)" { + error-message "SRv6 Mobile Locator name must be configured"; + } + } + + leaf policy-color { + description + "4 byte SRTE Policy Color"; + type uint32 { + range "1..4294967295"; + } + } + } + + grouping srv6-mobile-encapsulation-locator-top { + container config { + uses srv6-mobile-encapsulation-locator-config-top; + } + + container state { + config false; + uses srv6-mobile-encapsulation-locator-config-top; + uses srv6-locator-top; + } + } + + grouping srv6-mobile-decapsulation-locator-top { + container config { + uses srv6-mobile-decapsulation-locator-config-top; + } + + container state { + config false; + uses srv6-mobile-decapsulation-locator-config-top; + uses srv6-locator-top; + } + } + + grouping srv6-locator-config-top { + leaf locator { + description + "Reference to SRv6 locator key"; + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/arc-srv6:srv6/arc-srv6:locator/arc-srv6:name"; + } + when "not(/oc-netinst:network-instances" + + "/oc-netinst:network-instance[oc-netinst:name=current()/../../../../../oc-netinst:name]" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global" + + "/srv6/mobile/encapsulation/config/locator | + /oc-netinst:network-instances" + + "/oc-netinst:network-instance[oc-netinst:name=current()/../../../../../oc-netinst:name]" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global" + + "/srv6/mobile/decapsulations/decapsulation)" { + description "SRv6 Mobile and L3VPN configurations cannot coexist on same network-instance"; + } + } + } + + grouping srv6-mobile-encapsulation-n4-network-instance-config-top { + leaf routing-policy { + description + "Reference to routing-policy"; + type leafref { + path "/oc-rpol:routing-policy/" + + "oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:name"; + } + must "boolean(current()/../access)" { + error-message "SRv6 Mobile access instance name must be configured"; + } + } + + leaf access { + description + "Access instance"; + type string; + } + } + + grouping srv6-mobile-decapsulation-n4-network-instance-config-top { + leaf core { + description + "Core instance"; + type string; + } + } + + grouping srv6-mobile-encapsulation-n4-network-instance-top { + container n4-network-instance { + container config { + uses srv6-mobile-encapsulation-n4-network-instance-config-top; + } + + container state { + config false; + uses srv6-mobile-encapsulation-n4-network-instance-config-top; + } + } + } + + grouping srv6-mobile-decapsulation-n4-network-instance-top { + container n4-network-instance { + container config { + uses srv6-mobile-decapsulation-n4-network-instance-config-top; + } + container state { + config false; + uses srv6-mobile-decapsulation-n4-network-instance-config-top; + } + } + } + + grouping srv6-mobile-decapsulation-source-prefix { + leaf decapsulation-source-prefix { + description + "IPv6 prefix for GTP source address"; + type inet:ipv6-prefix; + } + + } + + grouping srv6-mobile-top { + container mobile { + container encapsulation { + uses srv6-mobile-encapsulation-locator-top; + uses srv6-mobile-encapsulation-n4-network-instance-top; + } + + container decapsulations { + description + "SRv6 mobile decapsulation config"; + + list decapsulation { + key "id"; + + description + "SRv6 mobile Decapsulation config"; + + leaf id { + type leafref { + path "../config/id"; + } + description + "Entry ID"; + } + container config { + uses srv6-mobile-decapsulation-locator-config-top; + } + + container state { + config false; + uses srv6-mobile-decapsulation-locator-config-top; + uses srv6-locator-top; + } + uses srv6-mobile-decapsulation-n4-network-instance-top; + uses srv6-mobile-extended-community-list-top; + } + } + + container config { + uses srv6-mobile-decapsulation-source-prefix; + } + + container state { + config false; + uses srv6-mobile-decapsulation-source-prefix; + } + + when "not(/oc-netinst:network-instances" + + "/oc-netinst:network-instance[oc-netinst:name=current()/../../../../oc-netinst:name]" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global" + + "/srv6/config/locator)" { + description "SRv6 Mobile and L3VPN configurations cannot coexist on same network-instance"; + } + } + } + + grouping srv6-top { + container srv6 { + description + "Global SRv6 configuration and state information"; + + container config { + description + "Global SRv6 config information"; + uses srv6-locator-config-top; + } + + container state { + description + "Global SRv6 state information"; + + config false; + leaf enabled { + type boolean; + description + "SRv6 is currently enabled or disabled"; + } + + leaf sid-manager-connected { + type boolean; + description + "Connection with segment ID manager is active"; + } + + uses srv6-locator-config-top; + uses srv6-locator-top; + } + + //uses srv6-mobile-top { + // when "../../../../../oc-netinst:name != 'default'" { + // description + // "Allow SRv6 mobile locator configs in non-default network-instance"; + // } + //} + uses srv6-mobile-top; + } + } + + grouping global-compatibility-config { + leaf suppress-nexthop-attribute { + type boolean; + default false; + description + "Do not send NEXT_HOP attribute in multi-protocol updates"; + } + + leaf strict-common-afi-safi-check { + type boolean; + default false; + description + "Enable/Disable BGP strict common afi-safi peers"; + } + } + + grouping srv6-mobile-segment-key-top { + leaf segment-type { + type identityref { + base arc-oc-bgp-types:MUP_SEGMENT_TYPE; + } + } + } + + grouping srv6-mobile-interwork-entry-top { + leaf prefix { + type union { + type inet:ip-prefix; + // type leafref { + // path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + // } + } + description + "option 1: IP address + option 2: String representing local interface name (swp1, swp1.1 etc.)"; + } + } + + grouping srv6-mobile-interwork-entries-top { + container entries { + list entry { + key "prefix"; + leaf prefix { + type leafref { + path "../config/prefix"; + } + } + container config { + uses srv6-mobile-interwork-entry-top; + } + container state { + config false; + uses srv6-mobile-interwork-entry-top; + } + description + "ISD Entry"; + } + } + } + + grouping srv6-mup-locator-config-top { + leaf locator { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/arc-srv6:srv6/arc-srv6:locator/arc-srv6:name"; + } + description + "Reference to SRv6 locator key"; + } + } + + grouping srv6-mobile-interwork-top { + container interwork { + container config { + uses srv6-mup-locator-config-top; + } + container state { + config false; + uses srv6-mup-locator-config-top; + } + uses srv6-mobile-interwork-entries-top; + } + } + + grouping srv6-mobile-extended-community-top { + leaf community-value { + type arc-oc-bgp-types:bgp-mup-ext-community-type; + description + "Extended MUP community attributes"; + } + } + + grouping srv6-mobile-extended-community-list-top { + container mup-ext-comms { + list mup-ext-comm { + key "community-value"; + leaf community-value { + type leafref { + path "../config/community-value"; + } + } + container config { + uses srv6-mobile-extended-community-top; + } + container state { + config false; + uses srv6-mobile-extended-community-top; + } + } + } + } + + grouping srv6-mobile-direct-entry-top { + leaf address { + type union { + type inet:ip-address; + type enumeration { + enum "router-id"; + } + } + description + "Direct Segemnt Entry address"; + } + } + + grouping srv6-mobile-direct-entries-top { + container entries { + list entry { + key "address"; + max-elements 1; + leaf address { + type leafref { + path "../config/address"; + } + } + container config { + uses srv6-mobile-direct-entry-top; + } + container state { + config false; + uses srv6-mobile-direct-entry-top; + } + description + "DSD Entry"; + } + } + } + grouping srv6-mobile-direct-top { + container direct { + uses srv6-mobile-direct-entries-top; + uses srv6-mobile-extended-community-list-top; + } + } + + grouping srv6-mobile-segment-top { + container segments { + list segment { + key "segment-type"; + max-elements 1; + description + "MUP Segment Type"; + leaf segment-type { + type leafref { + path "../config/segment-type"; + } + } + container config { + uses srv6-mobile-segment-key-top; + } + container state { + config false; + uses srv6-mobile-segment-key-top; + } + uses srv6-mobile-direct-top { + when "segment-type = 'arc-oc-bgp-types:DIRECT'"; + } + uses srv6-mobile-interwork-top { + when "segment-type = 'arc-oc-bgp-types:INTERWORK'"; + } + } + } + } + + grouping global-compatibility-top { + description + "Grouping for BGP options useful for interop with other vendor implementations"; + + container compatibility { + description + "BGP compatibility options"; + + container config { + description + "BGP compatibility configuration"; + uses global-compatibility-config; + } + + container state { + config false; + description + "BGP compatibility state"; + uses global-compatibility-config; + } + + when "../../../../../oc-netinst:config/oc-netinst:name = 'default'"; + } + } + + grouping peer-as-range-inline { + leaf-list ranges { + type arc-oc-bgp-types:peer-as-range; + max-elements 16; + description + "List of Peer AS number"; + } + } + + grouping peer-as-range-inline-top-config { + container config { + uses peer-as-range-inline; + description + "Peer AS inline config"; + } + } + + grouping peer-as-range-inline-top-state { + container state { + config false; + uses peer-as-range-inline; + description + "Peer AS inline state"; + } + } + + grouping peer-as-range-inline-top { + container inline { + description + "Peer AS range inline configuration and state"; + + uses peer-as-range-inline-top-config; + uses peer-as-range-inline-top-state; + } + } + + grouping peer-as-range-top { + container peer-as-range { + uses peer-as-range-inline-top; + description + "Peer AS range configuration"; + } + } + + grouping global-network-instance-id { + leaf network-instance-id { + type uint32; + description + "Network-instance ID assigned by the system"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:bgp" + + "/oc-netinst:global" { + uses global-compatibility-top; + } + + /* + * Augmentations for BGP commands + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" { + container netlink { + uses nl-info-top; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global" { + container tunnels { + uses tunnels-top; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:config" { + uses global-cluster-id-config; + uses global-disable-rib-config; + uses global-shutdown-all-config; + container segment-routing { + uses global-segment-routing-config; + } + uses global-shutdown-protocol-config { + when "../../../../../oc-netinst:config/oc-netinst:name = 'default'"; + } + uses global-sr-policy-config { + when "../../../../../oc-netinst:config/oc-netinst:name = 'default'"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global" { + uses graceful-shutdown-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:state" { + uses global-update-wait-data-plane-config; + uses advertise-best-external-config; + uses route-target-retain-config { + when "oc-netinst:afi-safi-name = 'oc-bgp-types:L2VPN_EVPN' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:L3VPN_IPV4_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:L3VPN_IPV6_UNICAST' " + + "or oc-netinst:afi-safi-name = 'arc-oc-bgp-types:IPV4_MUP' " + + "or oc-netinst:afi-safi-name = 'arc-oc-bgp-types:IPV6_MUP' " { + description + "Retain VPN routes with all route-targets"; + } + } + + uses rib-acks; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:state" { + uses oc-mpls:mpls-global_config; + uses disable-rib-resolution-config; + uses deagg-label-top; + uses imet-label-top; + uses instance-sid-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:state" { + uses global-cluster-id-config; + uses global-disable-rib-config; + uses global-shutdown-all-config; + uses global-neighbor-stats; + uses global-errors-group; + uses global-config; + uses global-network-instance-id; + uses global-import-export-readiness-top; + uses global-allocation-config; + uses global-update-gen-stats; + container segment-routing { + uses global-segment-routing-config; + } + + leaf local-tunnel-ip { + type inet:ip-address; + description + "Local tunnel ip for this network-instance"; + } + + leaf router-mac { + type string; + description + "Router-Mac to be used for this network-instance"; + } + + leaf vni { + type uint32; + description + "VNI associated to the network-instance"; + } + + leaf v4-deaggregation-labels-allocated { + type uint32; + description + "Deaggregation labels allocated for all network-instsances in IPv4"; + } + + leaf v6-deaggregation-labels-allocated { + type uint32; + description + "Deaggregation labels allocated for all network-instsances in IPv6"; + } + + leaf v4-per-nexthop-labels-allocated { + type uint32; + description + "Per-nexthop labels allocated for all network-instsances in IPv4"; + } + + leaf v6-per-nexthop-labels-allocated { + type uint32; + description + "Per-nexthop labels allocated for all network-instsances in IPv6"; + } + + leaf v4-per-prefix-labels-allocated { + type uint32; + description + "Per-prefix labels allocated for all network-instsances in IPv4"; + } + + leaf v6-per-prefix-labels-allocated { + type uint32; + description + "Per-prefix labels allocated for all network-instsances in IPv6"; + } + + leaf network-instances-present { + type uint32; + description + "Number of netwrok-instances present in BGP"; + } + + leaf platform-locator-length { + type uint32; + description + "Platform locator length to be used for External TCAM"; + } + + uses route-targets-state; + uses global-shutdown-protocol-config { + when "../../../../../oc-netinst:config/oc-netinst:name = 'default'"; + } + uses global-sr-policy-config { + when "../../../../../oc-netinst:config/oc-netinst:name = 'default'"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses common-maximum-paths; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses aggregate-address-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses rtfilter-global-config-top { + when "oc-netinst:afi-safi-name = 'arc-oc-bgp-types:RTFILTER' "; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses rtfilter-af-config-top { + when "oc-netinst:afi-safi-name = 'oc-bgp-types:L3VPN_IPV4_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:L3VPN_IPV6_UNICAST'" + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:L2VPN_EVPN'"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses default-information-originate-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global" { + uses srv6-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv4-unicast"{ + uses ipv4-network-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv6-unicast"{ + uses ipv6-network-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/arc-oc-bgp-aug:rtfilter-global"{ + uses rtfilter-network-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:state" { + uses af-version-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:state" { + uses af-state-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:state" { + uses arc-bgp-auto-peer-grp:bgp-auto-peer-group-list; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:state" { + uses arc-bgp-rnh:bgp-rnh-list; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:config" { + uses bestpath-selection-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:state" { + uses bestpath-selection-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:state" { + uses selection-deferral-time-expire-state; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses af-telemetry-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global" { + uses global-telemetry-top { + when "../../../../oc-netinst:name = 'default'" { + description + "Allow global telemetry configs in network-instance default only"; + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:config" { + uses route-target-retain-config { + when "oc-netinst:afi-safi-name = 'oc-bgp-types:L2VPN_EVPN' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:L3VPN_IPV4_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:L3VPN_IPV6_UNICAST' " + + "or oc-netinst:afi-safi-name = 'arc-oc-bgp-types:IPV4_MUP' " + + "or oc-netinst:afi-safi-name = 'arc-oc-bgp-types:IPV6_MUP' " { + description + "Retain VPN routes with all route-targets"; + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:config" { + uses advertise-best-external-config; + uses global-update-wait-data-plane-config { + when "oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'" { + description + "Defer BGP update generation under specific AFI/SAFI"; + } + } + } + + /* + * Augmenetations for neighbor. + */ + grouping bgp-neighbor-configs-top { + uses disable-fast-deactivation-config; + uses ttl-security-hops-config; + uses shutdown-config; + uses dscp-config; + uses enforce-first-as-config; + } + + grouping bgp-neighbor-states-top { + uses hold-timer-expiration-state; + uses keepalive-timer-expiration-state; + uses remote-router-id-state; + uses received-peer-as-state; + uses neighbor-index-state; + uses disable-fast-deactivation-config; + uses ttl-security-hops-state; + uses shutdown-config; + uses shutdown-reason-top; + uses session-last-reset-state; + uses session-elapsed-time-state; + uses dscp-config; + uses enforce-first-as-config; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:config" { + uses bgp-neighbor-configs-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:state" { + uses bgp-neighbor-states-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" { + uses ebgp-local-as-top; + uses graceful-shutdown-top; + uses bfd-top; + uses epe-top; + uses nbr-srv6-top; + uses route-server-top; + uses peer-as-range-top; + } + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/arc-oc-bgp-aug:egress-peer-engineering" + + "/arc-oc-bgp-aug:labeled-unicast/arc-oc-bgp-aug:state" { + uses labeled-unicast-epe-next-hop-state; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:graceful-restart/oc-netinst:state" { + uses restart-timer-expire-state; + uses stale-routes-timer-expire-state; + } + + + /* + * Augmentations for neighbor AF. + */ + grouping nbr-af-config-top { + uses nbr-af-next-hop-top; + uses nbr-af-send-tracker-sid-top; + uses soft-reconfig-config-top; + } + + grouping nbr-af-state-top { + uses nbr-af-next-hop-top; + uses nbr-af-send-tracker-sid-top; + uses soft-reconfig-state-top; + uses nbr-af-version-top; + uses nbr-af-update-gen-stats; + leaf end-of-rib-received { + type boolean; + description + "End-of-RIB marker has been received from the neighbor + for the address-family"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:config" { + uses nbr-af-config-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:state" { + uses nbr-af-state-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:state/oc-netinst:prefixes" { + uses nbr-af-prefixes-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:config" { + uses oc-mpls:mpls-global_config { + when "oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_LABELED_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_LABELED_UNICAST'" { + description + "Explicit/Implicit null configuration under specific AFI/SAFI"; + } + } + uses disable-rib-resolution-config { + when "oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_LABELED_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_LABELED_UNICAST'" { + description + "Enable/Disable BGP route resolution in RIB under specific AFI/SAFI"; + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses nbr-af-add-paths-top; + uses nbr-af-extended-nexthop-top; + uses bgp-aigp-top; + uses default-originate-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses nbr-af-rtfilter-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses nbr-af-rtfilter-top; + } + + grouping route-targets-state { + leaf evpn-l2-import-route-targets { + type string; + description + "import route-targets for this network-instance"; + } + + leaf evpn-v4-import-route-targets { + type string; + description + "import route-targets for this network-instance"; + } + + leaf evpn-v6-import-route-targets { + type string; + description + "import route-targets for this network-instance"; + } + + leaf vpn-v4-import-route-targets { + type string; + description + "import route-targets for this network-instance"; + } + + leaf vpn-v6-import-route-targets { + type string; + description + "import route-targets for this network-instance"; + } + + leaf evpn-l2-export-route-targets { + type string; + description + "export route-targets for this network-instance"; + } + + leaf evpn-v4-export-route-targets { + type string; + description + "export route-targets for this network-instance"; + } + + leaf evpn-v6-export-route-targets { + type string; + description + "export route-targets for this network-instance"; + } + + leaf vpn-v4-export-route-targets { + type string; + description + "export route-targets for this network-instance"; + } + + leaf vpn-v6-export-route-targets { + type string; + description + "export route-targets for this network-instance"; + } + } + + grouping route-target-config { + + description + "Configuration data for route-targets"; + leaf route-target { + type oc-netinst-types:route-target; + description + "A Route Target is an 8-octet BGP extended community + initially identifying a set of sites in a BGP VPN + (RFC 4364). However, it has since taken on a more general + role in BGP route filtering. A Route Target consists of two + or three fields: a 2-octet Type field, an administrator + field, and, optionally, an assigned number field. + + According to the data formats for types 0, 1, 2, and 6 as + defined in RFC 4360, RFC 5668, and RFC 7432, the encoding + pattern is defined as: + + 0:2-octet-asn:4-octet-number + 1:4-octet-ipv4addr:2-octet-number + 2:4-octet-asn:2-octet-number + 6:6-octet-mac-address + + Additionally, a generic pattern is defined for future + Route Target types: + + 2-octet-other-hex-number:6-octet-hex-number + + Some valid examples are 0:100:100, 1:1.1.1.1:100, + 2:1234567890:203, and 6:26:00:08:92:78:00."; + } + + leaf route-target-type { + description + "Route Target type."; + type oc-netinst-types:route-target-type; + } + } + + grouping route-targets-top { + + description + "Top level grouping for route-targets of a network-instance"; + + container route-targets { + description + "route-targets for a network-instance"; + + list route-target { + key "route-target route-target-type"; + + description + "List of route-targets"; + + leaf route-target { + description + "Reference to route-target key"; + type leafref { + path "../config/route-target"; + } + } + + leaf route-target-type { + description + "Reference to route-target type"; + type leafref { + path "../config/route-target-type"; + } + } + + container config { + description + "Configuration data for route-targets"; + uses route-target-config; + } + + container state { + description + "Operational data for route-target configuration"; + config false; + uses route-target-config; + } + } + } + } + + grouping rt-afi-safis-config { + description + "Configuration for address-family"; + + leaf rt-afi-safi-name { + type identityref { + base oc-bgp-types:AFI_SAFI_TYPE; + } + + must ". = 'oc-bgp-types:L2VPN_EVPN' or " + + ". = 'oc-bgp-types:L3VPN_IPV4_UNICAST' or " + + ". = 'oc-bgp-types:L3VPN_IPV6_UNICAST' or " + + ". = 'arc-oc-bgp-types:IPV4_MUP' or " + + ". = 'arc-oc-bgp-types:IPV6_MUP'" { + error-message + "only L2VPN_EVPN, VPN_IPV4/IPV6_UNICAST and IPV4/IPV6_MUP are supported"; + } + + description "AFI,SAFI"; + } + } + + grouping rt-afi-safis-top { + container rt-afi-safis { + description + "Enclosing container for address family list"; + + list rt-afi-safi { + key "rt-afi-safi-name"; + description + "list of afi-safi types"; + + leaf rt-afi-safi-name { + type leafref { + path "../config/rt-afi-safi-name"; + } + description + "Reference to the list key"; + } + + container config { + description + "Operational state data for the BGP list"; + + uses rt-afi-safis-config; + } + + container state { + config false; + description + "Operational state data for the BGP list"; + + uses rt-afi-safis-config; + } + + uses route-targets-top; + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:config" { + uses global-config { + when "../../../../../oc-netinst:name != 'default'" { + description + "Allow SRv6 global configs in network-instance default only"; + } + } + uses global-allocation-config; + } + + /* + * l2 route-targets + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" { + uses route-targets-top { + when "../../../oc-netinst:config/oc-netinst:type = 'oc-netinst-types:L2VLAN' or " + + "../../../oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2P2P_EVPN' or " + + "../../../oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + description + "L2 route-taregst only supported for L2 network-instance"; + } + } + } + + /* + * l3 route-targets + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses rt-afi-safis-top { + when "../../../../../.." + + "/oc-netinst:config/oc-netinst:type = 'oc-netinst-types:L3VRF' and " + + "(oc-netinst:config/oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST' or " + + "oc-netinst:config/oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST' or " + + "oc-netinst:config/oc-netinst:afi-safi-name = 'arc-oc-bgp-types:IPV4_MUP' or " + + "oc-netinst:config/oc-netinst:afi-safi-name = 'arc-oc-bgp-types:IPV6_MUP')" { + description + "route-targets only supported for IPV4/IPV6_UNICAST or IPV4/IPV6_MUP."; + } + } + uses srv6-mobile-segment-top { + when "../../../../../../oc-netinst:name != 'default' and " + + "../../../../../.." + + "/oc-netinst:config/oc-netinst:type = 'oc-netinst-types:L3VRF' and " + + "(oc-netinst:config/oc-netinst:afi-safi-name = 'arc-oc-bgp-types:IPV4_MUP' or " + + "oc-netinst:config/oc-netinst:afi-safi-name = 'arc-oc-bgp-types:IPV6_MUP')" { + description + "MUP segments are supported only for IPV4 IPV6 MUP SAFI"; + } + } + } + + /* + * Augmentations for peer-group commands + */ + grouping peer-group-members-state { + leaf neighbor-count { + type uint32; + description + "Number of neigbors in this peer-group"; + } + leaf-list neighbors { + type string; + description + "List of neighbors in the peer-group"; + } + leaf dynamic-neighbor-count { + type uint32; + description + "Number of neigbors in this peer-group"; + } + leaf-list dynamic-neighbors { + type string; + description + "List of neighbors in the peer-group"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:state" { + uses peer-group-members-state; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:config" { + uses bgp-neighbor-configs-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:state" { + uses bgp-neighbor-configs-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" { + uses ebgp-local-as-top; + uses graceful-shutdown-top; + uses bfd-top; + uses epe-top; + uses nbr-srv6-top; + uses route-server-top; + uses peer-as-range-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:config" { + uses nbr-af-config-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:state" { + uses nbr-af-config-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses nbr-af-add-paths-top; + uses bgp-aigp-top; + uses nbr-af-extended-nexthop-top; + uses default-originate-top; + } + + /* + * Dynamic neighbor prefixes. + */ + grouping bgp-dynamic-neighbor-config { + description + "Configuration parameters relating to an individual prefix from + which dynamic neighbors are accepted."; + + leaf prefix { + type inet:ip-prefix; + description + "The IP prefix within which the source address of the remote + BGP speaker must fall to be considered eligible to the + dynamically configured."; + } + + leaf neighbor-limit { + type uint32 { + range "1..5000"; + } + description + "Maximum number of dynamic neighbors allowed under this prefix"; + } + + leaf peer-group { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:config/oc-netinst:peer-group-name"; + } + description + "The peer-group within which the dynamic neighbor will be + configured. The configuration parameters used for the dynamic + neighbor are those specified within the referenced peer + group."; + } + } + + grouping dynamic-neighbor-states { + description + "State data for dynamic-neighbors"; + leaf local-address-set { + type boolean; + description + "Is the listener active for this prefix."; + } + leaf neighbor-count { + type uint16; + description + "Number of neighbor instances under this prefix."; + } + leaf-list neighbors { + type inet:ip-address; + description + "Dyanmic neighbor instances."; + } + } + + grouping dynamic-neighbor-prefixes-top { + container dynamic-neighbor-prefixes { + description + "A list of IP prefixes from which the system should: + - Accept connections to the BGP daemon + - Dynamically configure a BGP neighbor corresponding to the + source address of the remote system, using the parameters + of the specified peer-group. + For such neighbors, an entry within the neighbor list should + be created, indicating that the peer was dynamically + configured, and referencing the peer-group from which the + configuration was derived."; + + list dynamic-neighbor-prefix { + key "prefix"; + description + "An individual prefix from which dynamic neighbor + connections are allowed."; + + leaf prefix { + type leafref { + path "../config/prefix"; + } + description + "Reference to the IP prefix from which source connections + are allowed for the dynamic neighbor group."; + } + + container config { + description + "Configuration parameters relating to the source prefix + for the dynamic BGP neighbor connections."; + + uses bgp-dynamic-neighbor-config; + } + + container state { + config false; + description + "Operational state parameters relating to the source + prefix for the dynamic BGP neighbor connections."; + + uses bgp-dynamic-neighbor-config; + uses dynamic-neighbor-states; + } + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" { + uses dynamic-neighbor-prefixes-top; + } + + /* + * Augmentations for BGP all-neighbors subtree that is state-only, i.e., + * structurally identical to the bgp neighbor structure in OC but with + * only the "state" containers and leafs. + */ + grouping bgp-common-mp-afi-safi-config { + description + "Configuration parameters used for all BGP AFI-SAFIs"; + + leaf afi-safi-name { + type identityref { + base oc-bgp-types:AFI_SAFI_TYPE; + } + description "AFI,SAFI"; + } + + leaf enabled { + type boolean; + description + "This leaf indicates whether the IPv4 Unicast AFI,SAFI is + enabled for the neighbour or group"; + } + } + + grouping bgp-neighbor-afi-safi-state { + description + "Operational state parameters relating to an individual AFI, + SAFI for a neighbor"; + + leaf active { + type boolean; + description + "This value indicates whether a particular AFI-SAFI has + been succesfully negotiated with the peer. An AFI-SAFI + may be enabled in the current running configuration, but a + session restart may be required in order to negotiate the new + capability."; + } + + container prefixes { + description "Prefix counters for the BGP session"; + leaf received { + type uint32; + description + "The number of prefixes received from the neighbor"; + } + + leaf sent { + type uint32; + description + "The number of prefixes advertised to the neighbor"; + } + + leaf installed { + type uint32; + description + "The number of advertised prefixes installed in the + Loc-RIB"; + } + } + } + + grouping bgp-common-mp-all-afi-safi-common { + description + "Grouping for configuration common to all AFI,SAFI"; + + container prefix-limit { + description + "Configure the maximum number of prefixes that will be + accepted from a peer"; + + container state { + description + "State information relating to the prefix-limit for the + AFI-SAFI"; + uses oc-bgp:bgp-common-mp-all-afi-safi-common-prefix-limit-config; + } + } + } + + grouping bgp-common-mp-ipv4-ipv6-unicast-common { + description + "Common configuration that is applicable for IPv4 and IPv6 + unicast"; + + // include common afi-safi options. + uses bgp-common-mp-all-afi-safi-common; + + container state { + description + "State information for common IPv4 and IPv6 unicast + parameters"; + uses oc-bgp:bgp-common-mp-ipv4-ipv6-unicast-common-config; + } + } + + grouping all-neighbors-top { + container all-neighbors { + config false; + description + "A list of all bgp neighbor state info, used for show commands"; + + list all-neighbor { + key "neighbor-address"; + description + "A list of BGP peers and their config/oper states"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "option 1: IP address + option 2: String representing local interface name (swp1, swp1.1 etc.)"; + } + + container state { + description + "BGP dynamic neighbor instance states"; + + leaf neighbor-address { + type union { + type inet:ip-address; + // type leafref { + // path "/oc-if:interfaces/oc-if:interface/oc-if:name"; + // } + } + description + "option 1: IP address + option 2: String representing local interface name (swp1, swp1.1 etc.)"; + } + + leaf peer-group { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:peer-group-name"; + } + description + "The peer-group with which this neighbor is associated"; + } + + leaf enabled { + type boolean; + description + "Whether the BGP peer is enabled."; + } + + uses oc-bgp:bgp-common-neighbor-group-config; + uses oc-bgp:bgp-neighbor-state; + uses bgp-neighbor-states-top; + } + + container timers { + description + "Timers related to a BGP neighbor"; + container state { + config false; + description + "State information relating to the timers used for the BGP + neighbor"; + uses oc-bgp:bgp-common-neighbor-group-timers-config; + uses oc-bgp:bgp-neighbor-timers-state; + } + } + + container transport { + description + "Transport session parameters for the BGP neighbor"; + container state { + description + "State information relating to the transport session(s) + used for the BGP neighbor"; + uses oc-bgp:bgp-common-neighbor-group-transport-config; + uses oc-bgp:bgp-neighbor-transport-state; + } + } + + container graceful-restart { + description + "Parameters relating the graceful restart mechanism for BGP"; + container state { + description + "State information associated with graceful-restart"; + uses oc-bgp:bgp-common-graceful-restart-config; + uses oc-bgp:bgp-neighbor-graceful-restart-state; + } + } + + container graceful-shutdown { + description + "Parameters relating to graceful shutdown for BGP"; + container state { + description + "State information relating to graceful shutdown"; + uses graceful-shutdown-config; + } + } + + container ebgp-multihop { + description + "eBGP multi-hop parameters"; + container state { + description + "State information for eBGP multihop, for the BGP neighbor + or group"; + uses oc-bgp:bgp-common-neighbor-group-multihop-config; + } + } + + container route-reflector { + description + "Route reflector parameters"; + container state { + description + "State information relating to route reflection for the + BGP group"; + uses oc-bgp:bgp-common-neighbor-group-route-reflector-config; + } + } + + container route-server { + description + "Route server parameters"; + container state { + description + "State information relating to route server for the + BGP neighbor or group"; + uses route-server-config; + } + } + + container as-path-options { + description + "AS_PATH manipulation parameters for the BGP neighbor or + group"; + container state { + description + "State information relating to the AS_PATH manipulation + mechanisms for the BGP peer or group"; + + leaf allow-own-as { + type uint8; + description + "Specify the number of occurrences of the local BGP speaker's + AS that can occur within the AS_PATH before it is rejected."; + } + } + } + + container afi-safis { + description + "Per-address-family configuration parameters associated with + the neighbor"; + + list afi-safi { + key "afi-safi-name"; + + description + "AFI,SAFI configuration available for the + neighbor or group"; + + leaf afi-safi-name { + type identityref { + base oc-bgp-types:AFI_SAFI_TYPE; + } + description + "AFI,SAFI"; + } + + container state { + description + "State information relating to the AFI-SAFI"; + uses bgp-common-mp-afi-safi-config; + uses bgp-neighbor-afi-safi-state; + uses nbr-af-state-top; + } + + container graceful-restart { + description + "Parameters relating to BGP graceful-restart"; + container state { + description + "State information for BGP graceful-restart"; + uses oc-bgp:bgp-common-mp-afi-safi-graceful-restart-config; + uses oc-bgp:bgp-neighbor-afi-safi-graceful-restart-state; + } + } + + container apply-policy { + description + "Anchor point for routing policies in the model. + Import and export policies are with respect to the local + routing table, i.e., export (send) and import (receive), + depending on the context."; + + container state { + description + "Operational state for routing policy"; + uses oc-rpol:apply-policy-config; + uses oc-rpol:apply-policy-state; + } + } + + container ipv4-unicast { + when "../afi-safi-name = 'oc-bgp-types:IPV4_UNICAST'" { + description + "Include this container for IPv4 Unicast specific + configuration"; + } + + description "IPv4 unicast configuration options"; + + // include common IPv[46] unicast options + uses bgp-common-mp-ipv4-ipv6-unicast-common; + + // placeholder for IPv4 unicast specific configuration + } + + container ipv6-unicast { + when "../afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'" { + description + "Include this container for IPv6 Unicast specific + configuration"; + } + + description "IPv6 unicast configuration options"; + + // include common IPv[46] unicast options + uses bgp-common-mp-ipv4-ipv6-unicast-common; + + // placeholder for IPv6 unicast specific configuration + } + + container ipv4-labeled-unicast { + when "../afi-safi-name = 'oc-bgp-types:IPV4_LABELED_UNICAST'" { + description + "Include this container for IPv4 Labeled Unicast specific + configuration"; + } + + description "IPv4 Labeled unicast configuration options"; + + uses bgp-common-mp-all-afi-safi-common; + + // placeholder for IPv4 Labeled unicast specific configuration + } + + container ipv6-labeled-unicast { + when "../afi-safi-name = 'oc-bgp-types:IPV6_LABELED_UNICAST'" { + description + "Include this container for IPv6 Labeled Unicast specific + configuration"; + } + + description "IPv6 Labeled unicast configuration options"; + + uses bgp-common-mp-all-afi-safi-common; + + // placeholder for IPv6 Labeled unicast specific configuration + } + + container l3vpn-ipv4-unicast { + when "../afi-safi-name = 'oc-bgp-types:L3VPN_IPV4_UNICAST'" { + description + "Include this container for L3VPN IPv4 Unicast specific + configuration"; + } + + description "L3VPN IPv4 unicast configuration options"; + + uses bgp-common-mp-all-afi-safi-common; + + // placeholder for L3VPN IPv4 unicast specific configuration + } + + container l3vpn-ipv6-unicast { + when "../afi-safi-name = 'oc-bgp-types:L3VPN_IPV6_UNICAST'" { + description + "Include this container for L3VPN IPv6 Unicast specific + configuration"; + } + + description "L3VPN IPv6 unicast configuration options"; + + uses bgp-common-mp-all-afi-safi-common; + + // placeholder for L3VPN IPv6 unicast specific configuration + } + + container l3vpn-ipv4-multicast { + when "../afi-safi-name = 'oc-bgp-types:L3VPN_IPV4_MULTICAST'" { + description + "Include this container for L3VPN IPv4 Multicast specific + configuration"; + } + + description "L3VPN IPv4 multicast configuration options"; + + uses bgp-common-mp-all-afi-safi-common; + + // placeholder for L3VPN IPV4 multicast specific configuration + } + + container l3vpn-ipv6-multicast { + when "../afi-safi-name = 'oc-bgp-types:L3VPN_IPV6_MULTICAST'" { + description + "Include this container for L3VPN IPv6 Multicast specific + configuration"; + } + + description "L3VPN IPv6 multicast configuration options"; + + uses bgp-common-mp-all-afi-safi-common; + + // placeholder for L3VPN IPv6 Multicast specific configuration + } + + container l2vpn-evpn { + when "../afi-safi-name = 'oc-bgp-types:L2VPN_EVPN'" { + description + "Include this container for L2VPN EVPN specific + configuration"; + } + + description "L2VPN EVPN configuration options"; + + uses bgp-common-mp-all-afi-safi-common; + + // placeholder for L2VPN EVPN specific configuration + } + + container rtfilter { + when "../afi-safi-name = 'arc-oc-bgp-types:RTFILTER'" { + description + "Include this container for RTFILTER specific + configuration"; + } + + description "RTFILTER configuration options"; + + uses bgp-common-mp-ipv4-ipv6-unicast-common; + } + + // uses oc-bgp:bgp-neighbor-use-multiple-paths; --- not supported + } + } + } // list all-neighbor + } // container all-neighbors + } // all-neighbors-top + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" { + uses all-neighbors-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/arc-oc-bgp-aug:all-neighbors" + + "/arc-oc-bgp-aug:all-neighbor" { + container ebgp-local-as { + description "Operational data for local AS."; + + uses ebgp-local-as-state; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/arc-oc-bgp-aug:all-neighbors" + + "/arc-oc-bgp-aug:all-neighbor" { + container bfd { + description "Operational data for BFD."; + + uses bfd-state; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/arc-oc-bgp-aug:all-neighbors" + + "/arc-oc-bgp-aug:all-neighbor" { + container srv6 { + description "Operational data for SRv6."; + + when "../../../../../../oc-netinst:name = 'default'" { + description + "SRv6 tunnel endpoint in network-instance default only"; + } + uses nbr-srv6-state-top; + } + container peer-as-range { + description "Operational data for peer-as-range."; + container inline { + description "Operational data for inline peer-as-range"; + uses peer-as-range-inline-top-state; + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:graceful-restart/arc-oc-bgp-aug:state" { + uses restart-timer-expire-state; + uses stale-routes-timer-expire-state; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:afi-safis/arc-oc-bgp-aug:afi-safi/arc-oc-bgp-aug:state" + + "/arc-oc-bgp-aug:prefixes" { + uses nbr-af-prefixes-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:afi-safis/arc-oc-bgp-aug:afi-safi" { + container add-paths { + description + "Parameters relating to the advertisement and receipt of + multiple paths for a single NLRI (add-paths)"; + + uses nbr-af-add-paths-state-top; + } + + container aigp { + description + "Neighbor AFI/SAFI AIGP metric states"; + + uses bgp-aigp-state; + } + + container extended-nexthop { + description + "Parameters relating to extended nexthop encoding capability"; + uses nbr-af-extended-nexthop-state-top; + } + + container default-originate { + description + "Parameters relating to default route origination"; + uses default-originate-state-top; + } + } + + /* + * RTR server augments. + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" { + container rtr-servers { + when "../../../../oc-netinst:name = 'default'" { + description + "Allow rtr-server configs in network-instance default only"; + } + description + "Configuration for RTR servers"; + + uses bgp-rtr-server-list; + } + } + + + /* + * eRPL server augments. + */ + grouping erpl-server-config-top { + leaf server-name { + type string { + length "1..50"; + } + description + "Name of the eRPL server"; + } + leaf address { + type inet:ip-address; + mandatory true; + description + "IP address of the eRPL server"; + } + leaf port { + type uint16; + mandatory true; + description + "TCP port the eRPL server listens to"; + } + leaf preference { + type uint8 { + range "0..254"; + } + mandatory true; + description + "Preference of the eRPL server; the server with lower value + is more preferred"; + } + } + + grouping erpl-server-state-top { + leaf server-connected { + type boolean; + description + "This boolean indicates if connection to the configured eRPL server + is successful"; + } + } + + grouping bgp-erpl-server-base { + description + "Parameters related to a eRPL server"; + + container config { + description + "Configuration parameters relating to the eRPL server"; + + uses erpl-server-config-top; + } + + container state { + config false; + description + "State information relating to the eRPL server"; + uses erpl-server-config-top; + uses erpl-server-state-top; + } + } + + grouping bgp-erpl-server-list { + description + "The list of External Routing Polocy Language server information"; + + list server { + key server-name; + max-elements 5; + unique "config/address config/port"; + unique "config/preference"; + description + "List of configured eRPL servers"; + + leaf server-name { + type leafref { + path "../config/server-name"; + } + description + "Reference to the eRPL server name used as a key in the + eRPL server list"; + } + + uses bgp-erpl-server-base; + } + } + + grouping erpl-generic-config-top { + leaf connection-wait-time { + type uint16; + default 5; + description + "Maximum time in seconds for establishing connection to a server"; + } + leaf server-restart-time { + type uint16; + default 60; + description + "Maximum time in seconds for waiting for eRPL server to reconnect"; + } + leaf reset-connection-on-error { + type boolean; + description + "BGP shall reset the connection to eRPL server for error handling"; + } + } + + grouping erpl-generic-state-top { + leaf server-protocol-version { + type string; + description + "The version of the protocol being suppored by eRPL server"; + } + leaf client-protocol-version { + type string; + description + "The version of the protocol being suppored by BGP"; + } + leaf path-order-enforced { + type boolean; + description + "eRPL server will send export path results back to + BGP in the same order the server receives them"; + } + leaf server-restart-timer-expire { + type uint16; + description + "This time value indicates the remaining time on eRPL + server restart timer in seconds"; + } + } + + grouping bgp-erpl-generic-top { + description + "Generic eRPL configuration and state"; + + container config { + description + "Generic eRPL configuration parameters"; + + uses erpl-generic-config-top; + } + container state { + config false; + description + "Generic eRPL state information"; + + uses erpl-generic-config-top; + uses erpl-generic-state-top; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" { + container erpl { + when "../../../../oc-netinst:name = 'default'" { + description + "Allow eRPL server configs in network-instance default only"; + } + description + "Configuration for eRPL servers"; + + uses bgp-erpl-generic-top; + + container servers { + description + "Configuration for eRPL servers"; + + uses bgp-erpl-server-list; + } + } + } + + grouping nbr-af-erpl-config { + leaf import-erpl { + type string { + length "1..50"; + } + description + "Enable/Disable import eRPL under neighbor AFI/SAFI"; + } + } + + grouping nbr-af-erpl-config-top { + container config { + description + "Configuration parameters relating to eRPL under neighbor AFI/SAFI"; + + uses nbr-af-erpl-config; + } + } + + grouping nbr-af-erpl-state-top { + container state { + config false; + description + "State information relating to eRPL under neighbor AFI/SAFI"; + + uses nbr-af-erpl-config; + } + } + + grouping nbr-af-erpl-top { + container apply-erpl { + description + "Enable external routing policy language capability"; + + uses nbr-af-erpl-config-top; + uses nbr-af-erpl-state-top; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses nbr-af-erpl-top { + when "oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST' or + oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses nbr-af-erpl-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/arc-oc-bgp-aug:all-neighbors/arc-oc-bgp-aug:all-neighbor" + + "/arc-oc-bgp-aug:afi-safis/arc-oc-bgp-aug:afi-safi" { + container apply-erpl { + description + "Parameters relating to eRPL configuration for a neighbor AFI/SAFI"; + uses nbr-af-erpl-state-top; + } + } + + + /* + * global afi-safi add-paths + import/export policies + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses global-add-paths-top; + uses oc-rpol:apply-policy-group; + } + + /* + * global afi-safi srv6-oam + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" { + uses global-srv6-oam-top { + when "oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:L3VPN_IPV4_UNICAST' " + + "or oc-netinst:afi-safi-name = 'oc-bgp-types:L3VPN_IPV6_UNICAST' " { + description + "SRv6 OAM related configurataions"; + } + } + } + + /* + * For test only, route injection + */ + grouping test-route-inject-config { + leaf route-base { + type inet:ip-address; + description + "First route of the batch to be injected"; + must "boolean(../count) = 'true'" { + error-message + "'count' must be configured also"; + } + } + leaf count { + type uint32; + description + "Number of routes to be injected starting from the route-base"; + must "boolean(../route-base) = 'true'" { + error-message + "route-base must be configured also"; + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:config" { + container test-route-injection-len32 { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST'"; + description + "Inject v4 /32 prefixes for test purpose."; + uses test-route-inject-config; + } + + container test-route-injection-len24 { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST'"; + description + "Inject v4 /24 prefixes for test purpose."; + uses test-route-inject-config; + } + + container test-route-injection-len16 { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV4_UNICAST'"; + description + "Inject v4 /16 prefixes for test purpose."; + uses test-route-inject-config; + } + + container test-route-injection-len128 { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'"; + description + "Inject v6 /128 prefixes for test purpose."; + uses test-route-inject-config; + } + + container test-route-injection-len96 { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'"; + description + "Inject v6 /96 prefixes for test purpose."; + uses test-route-inject-config; + } + + container test-route-injection-len64 { + when "../oc-netinst:afi-safi-name = 'oc-bgp-types:IPV6_UNICAST'"; + description + "Inject v6 /64 prefixes for test purpose."; + uses test-route-inject-config; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-deviations.yang new file mode 100644 index 000000000..a1e1a7a86 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-deviations.yang @@ -0,0 +1,15 @@ +module arcos-openconfig-bgp-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bgp/deviations"; + prefix arc-oc-bgp-dev; + + import openconfig-bgp { + prefix oc-bgp; + } + + deviation "/oc-bgp:bgp" { + deviate not-supported; + description "BGP configuration is allowed under network instance, + and is not supported at root level."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-augments-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-augments-deviations.yang new file mode 100644 index 000000000..1dc107ff4 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-augments-deviations.yang @@ -0,0 +1,121 @@ +module arcos-openconfig-bgp-policy-augments-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bgp-policy/augments/deviations"; + prefix arc-oc-bgp-pol-aug-dev; + + import openconfig-bgp-types { + prefix oc-bgp-types; + } + import openconfig-routing-policy { + prefix oc-rpol; + } + import openconfig-bgp-policy { + prefix oc-bgp-pol; + } + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + + import arcos-openconfig-bgp-policy-augments { + prefix arc-oc-bgp-pol-aug; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "This module defines deviations to augmentation for Arrcus + implemention of the openconfig bgp-policy module."; + + revision 2021-06-09 { + description + "Initial Revision + * bgp set additional community definition deviations + "; + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/arc-oc-bgp-pol-aug:set-community-additional" + + "/arc-oc-bgp-pol-aug:inline/arc-oc-bgp-pol-aug:config" + + "/arc-oc-bgp-pol-aug:communities" { + deviate replace { + type union { + + /* + * Exclude 0x00000000 - 0x0000FFFF and 0xFFFF0000 - 0xFFFFFFFF + * in string. Allow full range of uint32 for vendor compatibility + */ + type uint32; + type string { + pattern '(6553[0-4]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[1-9]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type oc-bgp-types:bgp-well-known-community-type; + } + } + description + "Replacement of type due to OpenConfig non-compliance with YANG + 1.0/1.1 pattern statement"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/arc-oc-bgp-pol-aug:set-community-additional" + + "/arc-oc-bgp-pol-aug:inline/arc-oc-bgp-pol-aug:config" + + "/arc-oc-bgp-pol-aug:communities" { + deviate add { + max-elements 32; + } + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/arc-oc-bgp-pol-aug:set-ext-community-additional" + + "/arc-oc-bgp-pol-aug:inline/arc-oc-bgp-pol-aug:config" + + "/arc-oc-bgp-pol-aug:ext-communities" { + deviate replace { + type arc-oc-bgp-types:bgp-extcomm-type; + } + description "Use bgp-extcomm-type."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/arc-oc-bgp-pol-aug:set-ext-community-additional" + + "/arc-oc-bgp-pol-aug:inline/arc-oc-bgp-pol-aug:config" + + "/arc-oc-bgp-pol-aug:ext-communities" { + deviate add { + max-elements 32; + } + description "Up to 32 members only."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/arc-oc-bgp-pol-aug:large-community-sets" + + "/arc-oc-bgp-pol-aug:large-community-set/arc-oc-bgp-pol-aug:config" + + "/arc-oc-bgp-pol-aug:large-community-set-name" { + deviate replace { + type string { + length "1..79"; + } + } + description "Limit size to 79 characters."; + } +} + diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-augments.yang new file mode 100644 index 000000000..23fc1134a --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-augments.yang @@ -0,0 +1,834 @@ +module arcos-openconfig-bgp-policy-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bgp-policy/augments"; + prefix arc-oc-bgp-pol-aug; + + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + import openconfig-routing-policy { + prefix oc-rpol; + } + import openconfig-bgp-policy { + prefix oc-bgp-pol; + } + import openconfig-bgp-types { + prefix oc-bgp-types; + } + import arcos-rov-types { + prefix arc-rov-types; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 408 884-1965 + E-mail: yang-support@arrcus.com"; + description + "This module defines augmentation for Arrcus + implemention of the openconfig bgp-policy module. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-04-22 { + description + "Add adjust-local-pref and adjust-med to bgp actions"; + } + revision 2018-06-14 { + description + "Initial Revision + * Add bgp large community + "; + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + grouping match-large-community-config { + description + "Configuration data for match conditions on large communities"; + leaf large-community-set { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/arc-oc-bgp-pol-aug:large-community-sets/" + + "arc-oc-bgp-pol-aug:large-community-set/arc-oc-bgp-pol-aug:large-community-set-name"; + } + description + "References a defined large community set"; + } + uses oc-rpol:match-set-options-group; + } + + grouping match-large-community-state { + description + "Operational state data for match conditions on large communities"; + } + + grouping match-large-community-top { + description + "Top-level grouping for match conditions on large communities"; + container match-large-community-set { + description + "Top-level container for match conditions on large communities. + Match a referenced large-community-set according to the logic + defined in the match-set-options leaf"; + container config { + description + "Configuration data for match conditions on large communities"; + uses match-large-community-config; + } + container state { + config false; + description + "Operational state data "; + uses match-large-community-config; + uses match-large-community-state; + } + } + } + + grouping community-set-reference-config { + description + "Configuration data for BGP community member set references for community-sets"; + leaf-list community-set-reference { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:community-sets/" + + "oc-bgp-pol:community-set/oc-bgp-pol:community-set-name"; + } + max-elements 32; + description + "References to defined community sets that are included in current one"; + } + } + + grouping ext-community-set-reference-config { + description + "Configuration data for BGP ext-community member set references for ext-community-sets"; + leaf-list ext-community-set-reference { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:ext-community-sets/" + + "oc-bgp-pol:ext-community-set/oc-bgp-pol:ext-community-set-name"; + } + max-elements 32; + description + "References to defined ext-community sets that are included in current one"; + } + } + + grouping large-community-set-config { + description + "Configuration data for BGP large community sets"; + leaf large-community-set-name { + type string; + mandatory true; + description + "name / label of the large community set -- this is used to + reference the set in match conditions"; + } + leaf-list large-community-member { + type union { + type arc-oc-bgp-types:bgp-std-large-community-type; + type arc-oc-bgp-types:bgp-large-community-regexp-type; + } + max-elements 32; + description + "members of the large community set"; + } + + leaf-list large-community-set-reference { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/arc-oc-bgp-pol-aug:large-community-sets/" + + "arc-oc-bgp-pol-aug:large-community-set/arc-oc-bgp-pol-aug:large-community-set-name"; + } + max-elements 32; + description + "References to defined large community sets that are included in current one"; + } + } + + grouping large-community-set-state { + description + "Operational state data for BGP large community sets"; + } + + grouping large-community-set-top { + description + "Top-level grouping for BGP large community sets"; + container large-community-sets { + description + "Enclosing container for list of defined BGP large community sets"; + list large-community-set { + key "large-community-set-name"; + description + "List of defined BGP large community sets"; + leaf large-community-set-name { + type leafref { + path "../config/large-community-set-name"; + } + description + "Reference to list key"; + } + container config { + description + "Configuration data for BGP large community sets"; + uses large-community-set-config; + } + container state { + config false; + description + "Operational state data for BGP large community sets"; + uses large-community-set-config; + uses large-community-set-state; + } + } + } + } + + grouping set-large-community-inline-config { + description + "Configuration data for inline specification of + set-large-community action"; + /* + * ARCOS + */ + leaf-list large-communities { + type arc-oc-bgp-types:bgp-std-large-community-type; + max-elements 32; + description + "Set the large community values for the update inline + with a list."; + } + } + + grouping set-large-community-inline-state { + description + "Operational state data or inline specification of + set-large-community action"; + } + + grouping set-large-community-inline-top { + description + "Top-level grouping or inline specification of set-large-community + action"; + container inline { + /* + * ARCOS + */ + when "../config/method = 'INLINE'" { + description + "Active only when the set-community method is INLINE"; + } + description + "Set the extended community values for the action inline with + a list."; + container config { + description + "Configuration data or inline specification of + set-large-community action"; + uses set-large-community-inline-config; + } + container state { + config false; + description + "Operational state data or inline specification of + set-large-community action"; + uses set-large-community-inline-config; + uses set-large-community-inline-state; + } + } + } + + grouping set-large-community-reference-config { + description + "Configuration data for referening a large community-set + in the set-large-community action"; + leaf large-community-set-ref { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/" + + "arc-oc-bgp-pol-aug:large-community-sets/" + + "arc-oc-bgp-pol-aug:large-community-set/" + + "arc-oc-bgp-pol-aug:large-community-set-name"; + } + description + "References a defined large community set by + name"; + } + } + + grouping set-large-community-reference-state { + description + "Operational state data for referening an large + community-set in the set-large-community action"; + } + + grouping set-large-community-reference-top { + description + "Top-level grouping for referening an large community-set + in the set-community action"; + container reference { + /* + * ARCOS + */ + when "../config/method = 'REFERENCE'" { + description + "Active only when the set-community method is REFERENCE"; + } + description + "Provide a reference to an large community set for the + set-large-community action"; + container config { + description + "Configuration data for referening an large + community-set in the set-large-community action"; + uses set-large-community-reference-config; + } + container state { + config false; + description + "Operational state data for referening an large + community-set in the set-large-community action"; + uses set-large-community-reference-config; + uses set-large-community-reference-state; + } + } + } + + grouping set-large-community-action-config { + description + "Configuration data for the set-large-community action"; + uses oc-bgp-pol:set-community-action-common; + } + + grouping set-large-community-action-state { + description + "Operational state data for the set-large-community action"; + } + + grouping set-large-community-action-top { + description + "Top-level grouping for the set-large-community action"; + container set-large-community { + description + "Action to set the large community attributes of the + route, along with options to modify how the community is + modified. large communities may be set using an inline + list OR a reference to an existing defined set (but not + both)."; + container config { + description + "Configuration data for the set-large-community action"; + uses set-large-community-action-config; + } + container state { + config false; + description + "Operational state data for the set-large-community action"; + uses set-large-community-action-config; + uses set-large-community-action-state; + } + uses set-large-community-inline-top; + uses set-large-community-reference-top; + } + } + + grouping set-community-additional-action-top { + description + "Top-level grouping for the set-community-additional action. + This allows for adding and deleting communities in the same + statement when used together with set-community. The two + actions are functionally equivalent."; + + container set-community-additional { + description + "Action to add or remove community attributes of the + route, along with options to modify how the community is + modified. Communities may be set using an inline + list OR a reference to an existing defined set (but not + both). When used together with set-community, allows for + adding and deleting communities in the same statement."; + + container config { + description + "Configuration data for the set-community-additional action"; + + uses oc-bgp-pol:set-community-action-config; + } + + container state { + + config false; + + description + "Operational state data for the set-community action"; + + uses oc-bgp-pol:set-community-action-config; + uses oc-bgp-pol:set-community-action-state; + } + uses oc-bgp-pol:set-community-inline-top; + uses oc-bgp-pol:set-community-reference-top; + } + } + + grouping set-ext-community-additional-action-top { + description + "Top-level grouping for the set-ext-community-additional action. + This allows for adding and deleting ext-communities in the same + statement when used together with set-ext-community. The two + actions are functionally equivalent."; + + container set-ext-community-additional { + description + "Action to add or remove ext-community attributes of the + route, along with options to modify how the community is + modified. Ext-communities may be set using an inline + list OR a reference to an existing defined set (but not + both). When used together with set-ext-community, allows for + adding and deleting ext-communities in the same statement."; + + container config { + description + "Configuration data for the set-ext-community action"; + + uses oc-bgp-pol:set-ext-community-action-config; + } + + container state { + + config false; + + description + "Operational state data for the set-ext-community action"; + + uses oc-bgp-pol:set-ext-community-action-config; + uses oc-bgp-pol:set-ext-community-action-state; + } + uses oc-bgp-pol:set-ext-community-inline-top; + uses oc-bgp-pol:set-ext-community-reference-top; + } + } + + grouping set-large-community-additional-action-top { + description + "Top-level grouping for the set-large-community-additional action. + This allows for adding and deleting large-communities in the same + statement when used together with set-large-community. The two + actions are functionally equivalent."; + + container set-large-community-additional { + description + "Action to add or remove Large community attributes of the + route, along with options to modify how the community is + modified. Large communities may be set using an inline + list OR a reference to an existing defined set (but not + both). When used together with set-large-community, allows for + adding and deleting large communities in the same statement."; + + container config { + description + "Configuration data for the set-large-community action"; + + uses set-large-community-action-config; + } + + container state { + + config false; + + description + "Operational state data for the set-large-community action"; + + uses set-large-community-action-config; + uses set-large-community-action-state; + } + uses set-large-community-inline-top; + uses set-large-community-reference-top; + } + } + + grouping as-path-set-reference-config { + description + "Configuration data for BGP as-path-set member set references for as-path-sets"; + leaf-list as-path-set-reference { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:as-path-sets/" + + "oc-bgp-pol:as-path-set/oc-bgp-pol:as-path-set-name"; + } + max-elements 32; + description + "References to defined as-path-sets that are included in current one"; + } + } + + /* augment statements */ + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets/oc-bgp-pol:bgp-defined-sets" { + description + "adds BGP large communities set to bgp-defined-set container"; + uses large-community-set-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions/oc-bgp-pol:bgp-conditions" { + description + "adds BGP large community set to bgp-match-conditions"; + uses match-large-community-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions" { + description + "adds BGP large community set to bgp-actions"; + uses set-large-community-action-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions" { + description "adds BGP large community set to bgp-actions"; + + uses set-community-additional-action-top; + uses set-ext-community-additional-action-top; + uses set-large-community-additional-action-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:community-sets" + + "/oc-bgp-pol:community-set/oc-bgp-pol:config" { + + uses community-set-reference-config; + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:community-sets" + + "/oc-bgp-pol:community-set/oc-bgp-pol:state" { + + uses community-set-reference-config; + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:ext-community-sets" + + "/oc-bgp-pol:ext-community-set/oc-bgp-pol:config" { + + uses ext-community-set-reference-config; + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:ext-community-sets" + + "/oc-bgp-pol:ext-community-set/oc-bgp-pol:state" { + + uses ext-community-set-reference-config; + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:as-path-sets" + + "/oc-bgp-pol:as-path-set/oc-bgp-pol:config" { + + uses as-path-set-reference-config; + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:as-path-sets" + + "/oc-bgp-pol:as-path-set/oc-bgp-pol:state" { + + uses as-path-set-reference-config; + } + + typedef bgp-set-aigp-type { + type union { + type uint32; + type enumeration { + enum IGP { + description + "set the AIGP metric value to the IGP cost toward the + next hop for the route"; + } + } + } + description + "Type definition for specifying how the BGP AIGP can + be set in BGP policy actions. The two choices are to set + the value directly and set it to the IGP cost (predefined value)."; + } + + grouping set-aigp-top { + leaf set-aigp { + type bgp-set-aigp-type; + description + "set the AIGP metric"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions/oc-bgp-pol:config" { + description + "BGP AIGP metric set in bgp-actions"; + uses set-aigp-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions/oc-bgp-pol:state" { + description + "BGP AIGP metric set in bgp-actions"; + uses set-aigp-top; + } + + grouping set-srindex-top { + leaf set-prefix-sid-index { + type uint32 { + range "0..1048575"; + } + description + "set the prefix-sid-index"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions/oc-bgp-pol:config" { + description + "BGP Segment routing prefix-sid index set in bgp-actions"; + uses set-srindex-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions/oc-bgp-pol:state" { + description + "BGP Segment routing prefix-sid index set in bgp-actions"; + uses set-srindex-top; + } + + grouping test-afi-safi-top { + leaf-list afi-safi-eq { + type identityref { + base oc-bgp-types:AFI_SAFI_TYPE; + } + max-elements 1; + description + "List of address families which the NLRI needs to be in"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions/oc-bgp-pol:bgp-conditions/oc-bgp-pol:config" { + description "BGP AFI SAFI test in bgp-conditions"; + + uses test-afi-safi-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions/oc-bgp-pol:bgp-conditions/oc-bgp-pol:state" { + description "BGP AFI SAFI test in bgp-conditions"; + + uses test-afi-safi-top; + } + + grouping set-afi-safi-top { + leaf-list afi-safi { + type identityref { + base oc-bgp-types:AFI_SAFI_TYPE; + } + max-elements 1; + description + "List of address families which the NLRI may be redistributed"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions/oc-bgp-pol:config" { + description "BGP AFI SAFI set in bgp-actions"; + + uses set-afi-safi-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions/oc-bgp-pol:state" { + description "BGP AFI SAFI set in bgp-actions"; + + uses set-afi-safi-top; + } + + grouping attr-code-eq-top { + description + "Configuration data for filtering attr-code"; + leaf-list attr-code-eq { + type uint8 { + range "1..max"; + } + max-elements 8; + description + "attribute code to filter"; + } + } + + grouping add-path-flag-eq-top { + description + "Configuration data for selecting paths based on path flags"; + leaf add-path-flag-eq { + type identityref { + base arc-oc-bgp-types:ADD_PATHS_OPTIONS; + } + description + "Select for add-path if path flags contains this flag"; + } + } + + grouping rov-state-eq-top { + description + "Configuration data for filtering based on ROV state"; + leaf rov-state-eq { + type identityref { + base arc-rov-types:ROV_STATE; + } + description + "ROV state to filter"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions/oc-bgp-pol:bgp-conditions/oc-bgp-pol:config" { + description + "Select BGP path attribute codes from list; Select based on add-path flag"; + uses attr-code-eq-top; + uses add-path-flag-eq-top; + uses rov-state-eq-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions/oc-bgp-pol:bgp-conditions/oc-bgp-pol:state" { + description + "Select BGP path attribute codes from list; Select based on add-path flag"; + uses attr-code-eq-top; + uses add-path-flag-eq-top; + uses rov-state-eq-top; + } + + grouping adjustment-params { + description + "Adjustment params: offset, maximum, minimum, and default for uint32 range"; + leaf offset { + type int64 { + range "-42949672295..4294967295"; + } + description + "Offset value for the adjustment. This is int64 but the adjustment + result is capped by maximum and minimum, which are uint32"; + } + leaf maximum { + type uint32; + must "not(../minimum) or (current() > ../minimum)" { + error-message "Value for maximum must be larger than value of minimum"; + } + description + "Maximum result value after the offset is applied. Results higher than + this value will be changed to the configured value"; + } + leaf minimum { + type uint32; + must "not(../maximum) or (current() < ../maximum)" { + error-message "Value for minimum must be smaller than value of maximum"; + } + description + "Minimum result value after the offset is applied. Results lower than + this value will be changed to the configured value"; + } + leaf default { + type uint32; + description + "Default value if not previously set. This value will be used before + the offset is applied. If not specified, offset adjustment will not + occur if value not previously set."; + } + } + + grouping adjustment-config-and-state { + description + "Adjustment configs and states"; + container config { + must "boolean(offset) or (not(maximum) and not(minimum) and not(default))" { + error-message "Please configure offset first."; + } + description + "Adjust configs with specified offset, limits, and default"; + uses adjustment-params; + } + container state { + config false; + description + "Adjust states with specified offset, limits, and default"; + uses adjustment-params; + } + } + + grouping set-adjust-med-top { + container adjust-med { + description + "Adjust MED with specified offset, limits, and default"; + uses adjustment-config-and-state; + } + } + + grouping set-adjust-local-pref-top { + container adjust-local-pref { + description + "Adjust Local Pref with specified offset, limits, and default"; + uses adjustment-config-and-state; + } + } + + grouping set-drop-attr-top { + leaf-list drop-attr { + type uint8 { + range "4..13 | 16..max"; + } + max-elements 8; + description + "drop attributes with specified attr code"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions/oc-bgp-pol:config" { + description + "BGP drop attribute in bgp-actions"; + uses set-drop-attr-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions/oc-bgp-pol:state" { + description + "BGP drop attribute in bgp-actions"; + uses set-drop-attr-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-bgp-pol:bgp-actions" { + description + "BGP adjust MED and Local Pref values in bgp-actions"; + uses set-adjust-med-top; + uses set-adjust-local-pref-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-deviations.yang new file mode 100644 index 000000000..7e7e5e9ea --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-policy-deviations.yang @@ -0,0 +1,281 @@ +module arcos-openconfig-bgp-policy-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bgp-policy/deviations"; + prefix arc-oc-bgp-pol-dev; + + import openconfig-routing-policy { + prefix oc-rpol; + } + + import openconfig-bgp-policy { + prefix oc-bgp-pol; + } + + import openconfig-bgp-types { + prefix oc-bgp-types; + } + + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig BGP policy module."; + + revision 2022-07-07 { + description + "Support bgp route-type LOCAL/INTERNAL/EXTERNAL"; + } + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + revision 2017-05-31 { + description + "Initial Revision + * Limit community-set to a maximum of 16 members. + * Limit ext-community-set to a maximum of 16 members. + * Limit as-path-set to a maximum of 16 members. + * Limit community-set name to 79 characters. + * Limit ext-community-set name to 79 characters. + * Limit as-path-set name to 79 characters. + * Do not support route-type. + * Do not support next-hop-in. + * Do not support afi-safi-in. + * Do not support community-count. + * Fix set-community inline pattern. + * Replace supported set-med type. + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:community-sets" + + "/oc-bgp-pol:community-set/oc-bgp-pol:config" + + "/oc-bgp-pol:community-member" { + deviate add { + max-elements 32; + } + description "Only support up to 32 members in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:ext-community-sets" + + "/oc-bgp-pol:ext-community-set/oc-bgp-pol:config" + + "/oc-bgp-pol:ext-community-member" { + deviate replace { + type union { + type arc-oc-bgp-types:bgp-extcomm-type; + type oc-bgp-types:bgp-community-regexp-type; + } + } + description "Use bgp-extcomm-type."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:ext-community-sets" + + "/oc-bgp-pol:ext-community-set/oc-bgp-pol:config" + + "/oc-bgp-pol:ext-community-member" { + deviate add { + max-elements 32; + } + description "Only support up to 32 members in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:as-path-sets" + + "/oc-bgp-pol:as-path-set/oc-bgp-pol:config" + + "/oc-bgp-pol:as-path-set-member" { + deviate add { + max-elements 32; + } + description "Only support up to 32 members in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:community-sets" + + "/oc-bgp-pol:community-set/oc-bgp-pol:config" + + "/oc-bgp-pol:community-set-name" { + deviate replace { + type string { + length "1..79"; + } + } + description "Limit size to 79 characters."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:ext-community-sets" + + "/oc-bgp-pol:ext-community-set/oc-bgp-pol:config" + + "/oc-bgp-pol:ext-community-set-name" { + deviate replace { + type string { + length "1..79"; + } + } + description "Limit size to 79 characters."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:as-path-sets" + + "/oc-bgp-pol:as-path-set/oc-bgp-pol:config" + + "/oc-bgp-pol:as-path-set-name" { + deviate replace { + type string { + length "1..79"; + } + } + description "Limit size to 79 characters."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-bgp-pol:bgp-conditions/oc-bgp-pol:config" + + "/oc-bgp-pol:route-type" { + deviate replace { + type arc-oc-bgp-types:bgp-route-type; + } + description "Use bgp-route-type (local/internal/external)"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-bgp-pol:bgp-conditions/oc-bgp-pol:state" + + "/oc-bgp-pol:route-type" { + deviate replace { + type arc-oc-bgp-types:bgp-route-type; + } + description "Use bgp-route-type (local/internal/external)"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-bgp-pol:bgp-conditions/oc-bgp-pol:config" + + "/oc-bgp-pol:next-hop-in" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-bgp-pol:bgp-conditions/oc-bgp-pol:state" + + "/oc-bgp-pol:next-hop-in" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-bgp-pol:bgp-conditions/oc-bgp-pol:config" + + "/oc-bgp-pol:afi-safi-in" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-bgp-pol:bgp-conditions/oc-bgp-pol:state" + + "/oc-bgp-pol:afi-safi-in" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-bgp-pol:bgp-conditions/oc-bgp-pol:community-count" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/oc-bgp-pol:set-ext-community" + + "/oc-bgp-pol:inline/oc-bgp-pol:config" + + "/oc-bgp-pol:ext-communities" { + deviate replace { + type arc-oc-bgp-types:bgp-extcomm-type; + } + description "Use bgp-extcomm-type."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/oc-bgp-pol:set-ext-community" + + "/oc-bgp-pol:inline/oc-bgp-pol:config" + + "/oc-bgp-pol:ext-communities" { + deviate add { + max-elements 32; + } + description "Up to 32 members of bgp-extcomm-type."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/oc-bgp-pol:set-community" + + "/oc-bgp-pol:inline/oc-bgp-pol:config" + + "/oc-bgp-pol:communities" { + deviate replace { + type union { + + /* + * Exclude 0x00000000 - 0x0000FFFF and 0xFFFF0000 - 0xFFFFFFFF + * in string. Allow full range of uint32 for vendor compatibility + */ + type uint32; + type string { + pattern '(6553[0-4]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[1-9]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type oc-bgp-types:bgp-well-known-community-type; + } + } + description + "Replacement of type due to OpenConfig non-compliance with YANG + 1.0/1.1 pattern statement"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/oc-bgp-pol:set-community" + + "/oc-bgp-pol:inline/oc-bgp-pol:config" + + "/oc-bgp-pol:communities" { + deviate add { + max-elements 32; + } + description "Up to 32 members only"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-bgp-pol:bgp-actions/oc-bgp-pol:config/oc-bgp-pol:set-med" { + deviate replace { + type uint32; + } + description "Replace the supported set-med type."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-types.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-types.yang new file mode 100644 index 000000000..83f99755d --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-bgp-types.yang @@ -0,0 +1,635 @@ +module arcos-openconfig-bgp-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/bgp/types"; + + prefix arc-oc-bgp-types; + + import openconfig-types { + prefix oc-types; + } + + import openconfig-bgp-types { + prefix oc-bgp-types; + } + + import openconfig-inet-types { + prefix oc-inet; + } + + import ietf-inet-types { + prefix inet; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module defines augmentation for Arrcus + implementation of the openconfig BGP types module."; + + revision 2022-12-06 { + description "Added peer-as-range type"; + } + + revision 2022-08-10 { + description "* Added MUP SAFI support + * Added raw extended community"; + } + + revision 2022-07-07 { + description + "Add bgp route type - local/internal/external"; + } + + revision 2018-06-14 { + description + "Initial Revision + * Add bgp large community + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + identity ADD_PATHS_OPTIONS { + description + "Base identity for add-paths options"; + } + + identity ALL { + base ADD_PATHS_OPTIONS; + description + "Advertise all paths"; + } + + identity SECOND_BEST { + base ADD_PATHS_OPTIONS; + description + "Advertise second-best path - may be a multipath"; + } + + identity BACKUP { + base ADD_PATHS_OPTIONS; + description + "Advertise backup path - excluding multipaths"; + } + + identity BEST_EXTERNAL { + base ADD_PATHS_OPTIONS; + description + "Advertise best-external path"; + } + + identity MULTIPATHS { + base ADD_PATHS_OPTIONS; + description + "Advertise paths that are selected by multipath selection algorithm"; + } + + identity SRV6_OAM_STATES { + description + "Base identity for SRv6 OAM states"; + } + + identity OAM_NOT_REPORTED { + base SRV6_OAM_STATES; + description + "OAM has not reported state, we assume it is good"; + } + + identity OAM_ELIGIBLE { + base SRV6_OAM_STATES; + description + "OAM reported state is ELIGIBLE"; + } + + identity OAM_INELIGIBLE { + base SRV6_OAM_STATES; + description + "OAM reported state is INELIGIBLE"; + } + + identity EXTENDED_NEXTHOP_ENCODING { + base oc-bgp-types:BGP_CAPABILITY; + description + "Extended Next Hop Encoding functionality"; + } + + identity RTFILTER { + base oc-bgp-types:AFI_SAFI_TYPE; + description + "Route Target Filter (AFI,SAFI = 1,132)"; + reference "RFC4684"; + } + + typedef rtfilter-prefix { + type union { + type string { + // (4-octet ASN):(2-octet global value):(4-octet local value)[/length] + pattern + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])(|/(9[0-6]|[1-8][0-9]|[0-9]))'; + } + type string { + // (4-octet ASN):(IPv4 address):(2-octet local value)[/length] + pattern + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + + '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + + '2[0-4][0-9]|25[0-5]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])' + + '(|/(9[0-6]|[1-8][0-9]|[0-9]))'; + } + type string { + // (4-octet ASN):(4-octet global value):(2-octet local value)[/length] + pattern + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])' + + '(|/(9[0-6]|[1-8][0-9]|[0-9]))'; + } + } + description + "RTFILTER prefix consists of a 4-octet originating ASN followed by an + 8-octet Route Target Extended Community. It is specified as + ::."; + reference "RFC4684"; + } + + typedef bgp-std-large-community-type { + /* + * rfc8092#section-5 + * (4 byte global):(4 byte local 1):(4 byte local 2) + */ + type string { + pattern '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])'; + } + description + "Type definition for standard large community attribute represented as + string of the form X:Y:Z where + X = Global Administrator: A four-octet namespace identifier. + Y = Local Data Part 1: A four-octet operator-defined value. + Z = Local Data Part 2: A four-octet operator-defined value."; + reference "RFC 8092 - BGP Large Communities Attribute"; + } + + typedef bgp-large-community-regexp-type { + type oc-types:std-regexp; + description + "Type definition for communities specified as regular + expression patterns"; + } + + typedef bgp-large-community-type { + /* + * rfc8092#section-5 + * (4 byte global):(4 byte local 1):(4 byte local 2) + */ + type string { + pattern '^(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])$'; + } + description + "Type definition for standard large community attribute represented as + string of the form X:Y:Z where + X = Global Administrator: A four-octet namespace identifier. + Y = Local Data Part 1: A four-octet operator-defined value. + Z = Local Data Part 2: A four-octet operator-defined value."; + reference "RFC 8092 - BGP Large Communities Attribute"; + } + + typedef bgp-route-type { + type enumeration { + enum INTERNAL { + description "route type is internal"; + } + enum EXTERNAL { + description "route type is external"; + } + enum LOCAL { + description "route type is local"; + } + } + } + + typedef session-state-type { + type enumeration { + enum IDLE { + description + "neighbor is down, and in the Idle state of the + FSM"; + } + enum CONNECT { + description + "neighbor is down, and the session is waiting for + the underlying transport session to be established"; + } + enum ACTIVE { + description + "neighbor is down, and the local system is awaiting + a conncetion from the remote peer"; + } + enum OPENSENT { + description + "neighbor is in the process of being established. + The local system has sent an Open message"; + } + enum OPENCONFIRM { + description + "neighbor is in the process of being established. + The local system is awaiting a Notification or + Keepalive message"; + } + enum ESTABLISHED { + description + "neighbor is up - the BGP session with the peer is + established"; + } + enum CLOSING { + description + "neighbor is down - the BGP session with the peer is + is in Closing state trying to free up resources"; + } + enum DELETING { + description + "neighbor is down - the BGP session with the peer is + is in Deleting state trying to delete session"; + } + enum INCOMPLETE { + description + "neighbor is down - the BGP session with the peer is + is in Incomplete mandatory config state"; + } + enum SHUTDOWN { + description + "neighbor is down - the BGP session with the peer is + in Shutdown state"; + } + } + } + + identity IPV4_FLOWSPEC { + base oc-bgp-types:AFI_SAFI_TYPE; + description + "IPv4 dissemination of flow specification rules (AFI,SAFI = 1,133)"; + reference "RFC5575"; + } + + identity IPV6_FLOWSPEC { + base oc-bgp-types:AFI_SAFI_TYPE; + description + "IPv6 dissemination of flow specification rules (AFI,SAFI = 2,133)"; + reference "RFC5575"; + } + + identity IPV4_MUP { + base oc-bgp-types:AFI_SAFI_TYPE; + description + "IPv4 Mobile User Plane (MUP) (AFI,SAFI = 1,85)"; + reference "draft-mpmz-bess-mup-safi-01.txt"; + } + + identity IPV6_MUP { + base oc-bgp-types:AFI_SAFI_TYPE; + description + "IPv6 Mobile User Plane (MUP) (AFI,SAFI = 2,85)"; + reference "draft-mpmz-bess-mup-safi-01.txt"; + } + + typedef bgp-afi-safi-type { + type identityref { + base oc-bgp-types:AFI_SAFI_TYPE; + } + } + + typedef bgp-prefix-type { + type union { + type inet:ip-prefix; + type string; + } + } + + /* + * Similar to oc-netinst-type:LABEL_ALLOCATION_MODE + */ + identity SID_ALLOCATION_MODE { + description + "Base identity to be used to express types of SRv6 segment ID + allocation strategies to be used within a network instance"; + } + + identity PER_NEXTHOP { + base SID_ALLOCATION_MODE; + description + "A segment ID is to be allocated per nexthop entry in the RIB for + the network instance"; + } + + identity INSTANCE_SID { + base SID_ALLOCATION_MODE; + description + "A single segment ID is to be used for the instance"; + } + + identity PER_NEXTHOP_NO_TRANSPOSITION { + base SID_ALLOCATION_MODE; + description + "A segment ID is to be allocated per nexthop entry in the RIB for + the network instance"; + } + + identity INSTANCE_SID_NO_TRANSPOSITION { + base SID_ALLOCATION_MODE; + description + "A single segment ID is to be used for the instance"; + } + + // We use this to replace the openconfig's bgp-ext-community-type + typedef bgp-extcomm-type { + type union { + type string { + // bandwidth with Type 1 + // bandwidth:(ASN):(4-bytes) + pattern 'bandwidth:' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])'; + } + type string { + // cost:(type):(4-bytes) + pattern 'cost:' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])'; + } + type string { + // rmac:xxxx.xxxx.xxxx + pattern 'rmac:' + + '[0-9a-f]{4}(.[0-9a-f]{4}){2}'; + } + type string { + // route-target with Type 1 + // route-target:(ASN):(local-part) + pattern 'route\-target:' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])'; + } + type string { + // route-target with Type 2 + // route-target:(IPv4):(local-part) + pattern 'route\-target:' + + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + + '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + + '2[0-4][0-9]|25[0-5]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type string { + // 4-byte AS Type 1 route-target + pattern 'route\-target:' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type string { + // route-origin with Type 1 + pattern 'route\-origin:' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])'; + } + type string { + // route-origin with Type 2 + pattern 'route\-origin:' + + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + + '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + + '2[0-4][0-9]|25[0-5]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type string { + // 4-byte AS Type 1 route-origin + pattern 'route\-origin:' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type string { + // Extended Color Community + pattern 'color:' + + '[0-1]{2}:' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])'; + } + type string { + // (ASN):(local-part) + pattern 'mup:' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])'; + } + type string { + // (IPv4):(local-part) + pattern 'mup:' + + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + + '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + + '2[0-4][0-9]|25[0-5]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type string { + // (4-byte AS):(local-part) + pattern 'mup:' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type string { + // Extended Community in raw format + pattern 'raw:' + + '([0-9A-F][0-9A-F]:){7}[0-9A-F][0-9A-F]'; + } + } + description + "Type definition for extended community attributes. In the case that + common communities are utilised, they are represented as a string + of the form: + - bandwidth:<2b AS>:<4b value> per draft-ietf-idr-link-bandwidth-07 section 2 + - cost:<2b type>:<4b value> per draft-ietf-idr-custom-decision-08 section 3 + - color:<2b flags>:<4b value> per RFC9012 section 4.3 + - raw:XX:XX:XX:XX:XX:XX:XX:XX per draft-ietf-idr-bgp-model-14 section 7.2 + - rmac: where in the format of xxxx.xxxx.xxxx, x:0-9a-f + - route-target:<2b AS>:<4b value> per RFC4360 section 4 + - route-target:<4b AS>:<2b value> per RFC4360 section 4 + - route-target:<4b IPv4>:<2b value> per RFC4360 section 4 + - route-origin:<2b ASN>:<4b value> per RFC4360 section 5 + - route-origin:<4b ASN>:<2b value> per RFC4360 section 5 + - route-origin:<4b IPv4>:<2b value> per RFC4360 section 5 + - mup:<2b ASN>:<4b value> + - mup:<4b IPv4>:<2b value> + - mup:<4b ASN>:<2b value>"; + reference + "RFC 4360 - BGP Extended Communities Attribute + RFC 5668 - 4-Octet AS Specific BGP Extended Community + draft-ietf-idr-segment-routing-te-policy + RFC 9012 - The BGP Tunnel Encapsulation Attribute + draft-mpmz-bess-mup-safi-01"; + } + + + typedef peer-as-range { + type union { + type oc-inet:as-number; + type arc-oc-bgp-types:as-range; + } + description + "Type definition representing peer as range configuartion + Peer AS number + Peer AS number in range"; + } + + typedef as-range { + type string { + // range specified as [lower]..[upper] + pattern '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[0-1][0-9]{8}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[1-9])\.\.' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[0-1][0-9]{8}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[1-9])'; + } + description + "Type definition representing a range of peer-as that + BGP can form session with. Range is specified as x..y + where x and y are valid AS number (1 <= peer-as <= 4294967295). + The range is assumed to be inclusive, such that any peer-as matching + x <= peer-as <= y falls within the range."; + } + + + identity MUP_SEGMENT_TYPE { + description + "Mobile user plane network segment type"; + } + identity DIRECT { + base MUP_SEGMENT_TYPE; + description + "Direct segment type"; + } + identity INTERWORK { + base MUP_SEGMENT_TYPE; + description + "Interwork segment type"; + } + + typedef bgp-mup-ext-community-type { + type union { + type string { + // (ASN):(local-part) + pattern '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])'; + } + type string { + // (IPv4):(local-part) + pattern '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + + '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + + '2[0-4][0-9]|25[0-5]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + type string { + // (4-byte AS):(local-part) + pattern '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9]):' + + '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])'; + } + } + description + "A type definition utilised to define the extended community + in routes of mobile user plane SAFI"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-defined-sets-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-defined-sets-deviations.yang new file mode 100644 index 000000000..7fa24fc13 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-defined-sets-deviations.yang @@ -0,0 +1,47 @@ +module arcos-openconfig-defined-sets-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/defined-sets/deviations"; + prefix arc-oc-sets-dev; + + import openconfig-defined-sets { + prefix oc-sets; + } + + import ietf-inet-types { + prefix ietf-inet; + } + + deviation "/oc-sets:defined-sets/oc-sets:ipv4-prefix-sets/oc-sets:ipv4-prefix-set" + + "/oc-sets:config/oc-sets:prefix" { + deviate replace { + type ietf-inet:ipv4-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-sets:defined-sets/oc-sets:ipv4-prefix-sets/oc-sets:ipv4-prefix-set" + + "/oc-sets:state/oc-sets:prefix" { + deviate replace { + type ietf-inet:ipv4-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-sets:defined-sets/oc-sets:ipv6-prefix-sets/oc-sets:ipv6-prefix-set" + + "/oc-sets:config/oc-sets:prefix" { + deviate replace { + type ietf-inet:ipv6-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } + + deviation "/oc-sets:defined-sets/oc-sets:ipv6-prefix-sets/oc-sets:ipv6-prefix-set" + + "/oc-sets:state/oc-sets:prefix" { + deviate replace { + type ietf-inet:ipv6-prefix; + } + description "Use ietf-inet types instead of oc-inet"; + } +} + + diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-if-aggregate-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-if-aggregate-augments.yang new file mode 100644 index 000000000..7b6fdda50 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-if-aggregate-augments.yang @@ -0,0 +1,264 @@ +module arcos-openconfig-if-aggregate-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/interfaces/aggregate/augments"; + prefix arc-oc-if-agg-aug; + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-if-ethernet { + prefix oc-eth; + } + + import iana-if-type { + prefix ianaift; + } + + import openconfig-types { + prefix oc-types; + } + + import openconfig-if-aggregate { + prefix oc-lag; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "Ths module defines augments for managing aggregated (aka bundle, LAG) + interfaces. + + Copyright (c) 2016-2020 by Arrcus, Inc. + All rights reserved."; + + revision "2020-06-19" { + description "Initial version"; + } + + + typedef fallback-type { + type enumeration { + enum INDIVIDUAL { + value 1; + description + "All LAG members will be forwarding when all the members stop + receiving LACP PDUs"; + } + } + description + "Type to define the LACP fallback type"; + } + + grouping lacp-fallback-config { + description + "Configuration data for LACP fallback"; + + leaf mode { + type fallback-type; + description + "LACP fallback type"; + } + + leaf timeout { + type uint16 { + range 3..600; + } + default 3; + units seconds; + description + "Amoount of time in seconds to wait before entering fallback mode"; + } + + leaf primary-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description + "The member interface of the aggregate which acts as primary + interface when the fallback mode is active"; + must '/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id = ../../../../../oc-if:config/oc-if:name' { + error-message "Interface is not a member of the aggregate"; + } + } + } + + grouping lacp-fallback-state { + description + "Operational data for LACP fallback"; + + leaf active { + type boolean; + description + "Fallback active state of the aggregate"; + } + } + + grouping lacp-fallback-top { + description + "LACP fallback data"; + + container fallback { + description + "LACP fallback configuration"; + + container config { + description + "Configuration variables for LACP fallback"; + + uses lacp-fallback-config; + } + + container state { + config false; + description + "Operational state variables for LACP fallback"; + + uses lacp-fallback-config; + uses lacp-fallback-state; + } + } + } + + grouping aggregation-lacp-top { + description + "Configuration data for aggregation LACP"; + + container lacp { + description + "LACP configuration"; + + uses lacp-fallback-top; + } + } + + // grouping statements + + grouping agg-members-top { + description + "Top-level grouping for aggregate members list"; + + container members { + description + "Enclosing container for the list of members interfaces of + the aggregate. This list is considered operational state + only so is labeled config false and has no config container"; + + list member { + key "member-name"; + description + "List of member interfaces and their associated status for + a LACP-controlled aggregate interface. Member list is not + configurable here -- each interface indicates items + its participation in the LAG."; + + leaf member-name { + type leafref { + path "../state/member-name"; + } + } + + container state { + + description + "Operational state data for aggregate members"; + + leaf member-name { + type oc-if:base-interface-ref; + description + "Reference to aggregate member interface"; + + must "(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]" + + "/oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd')" { + error-message "Invalid interface type"; + } + } + + leaf active { + type boolean; + description + "Active state"; + } + + container counters { + description + "Counters which describe the percentage distribution values + for the various categories of packets"; + leaf in-unicast { + type string; + description + "Percentage of unicast packets recieved on this member interface"; + } + + leaf out-unicast { + type string; + description + "Percentage of unicast packets transmitted from this member interface"; + } + + leaf in-multicast { + type string; + description + "Percentage of multicast packets recieved on this member interface"; + } + + leaf out-multicast { + type string; + description + "Percentage of multicast packets transmitted from this member interface"; + } + + leaf in-broadcast { + type string; + description + "Percentage of broadcast packets recieved on this member interface"; + } + + leaf out-broadcast { + type string; + description + "Percentage of broadcast packets transmitted from this member interface"; + } + } + } + } + } + } + + grouping aggregation-load-balance-top { + description + "Top level operational data containers for aggregated interfaces data"; + + container load-balance { + config false; + description + "Packet statistics for the member links of aggregate interfaces"; + uses agg-members-top; + } + } + // data definition statements + + // augment statements + augment "/oc-if:interfaces/oc-if:interface/oc-lag:aggregation" { + uses aggregation-load-balance-top; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-lag:aggregation" { + when "./oc-lag:config/oc-lag:lag-type = 'LACP'" { + description "active when the interface aggregation is set to type LACP"; + } + description "Adds LAG fallback configuration to the interface module"; + + uses aggregation-lacp-top; + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-if-aggregate-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-if-aggregate-deviations.yang new file mode 100644 index 000000000..d48445ad8 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-if-aggregate-deviations.yang @@ -0,0 +1,26 @@ +module arcos-openconfig-if-aggregate-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/interfaces/aggregate/deviations"; + prefix arc-oc-lag-dev; + + import openconfig-if-aggregate { + prefix oc-lag; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-lacp { + prefix oc-lacp; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-lag:aggregation" + + "/oc-lag:config/oc-lag:lag-type" { + deviate add { + default LACP; + must "(current() != 'LACP') or " + + "(/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface[oc-lacp:name=current()/../../../oc-if:name])" { + error-message "aggregation lag-type needs to be changed to STATIC under interface config"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-if-ethernet-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-if-ethernet-augments.yang new file mode 100644 index 000000000..501cfc85c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-if-ethernet-augments.yang @@ -0,0 +1,42 @@ +module arcos-openconfig-if-ethernet-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/if/ethernet/augments"; + prefix arc-oc-if-eth-aug; + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-if-ethernet { + prefix oc-eth; + } + + import arcos-openconfig-interfaces-augments { + prefix arc-oc-int; + } + + + grouping interface-ethernet-common { + leaf-list advertise-fec { + type arc-oc-int:fec-types; + description + "Forward error correction type to advertise use for this ethernet interface"; + } + + leaf-list advertise-speed { + type identityref { + base oc-eth:ETHERNET_SPEED; + } + description + "Speeds advertise for this ethernet interface"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet/oc-eth:state" { + uses interface-ethernet-common; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet/oc-eth:config" { + uses interface-ethernet-common; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-if-ethernet-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-if-ethernet-deviations.yang new file mode 100644 index 000000000..cfb8999fb --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-if-ethernet-deviations.yang @@ -0,0 +1,47 @@ +module arcos-openconfig-if-ethernet-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/interfaces/ethernet/deviations"; + prefix arc-oc-eth-dev; + + import openconfig-if-ethernet { + prefix oc-eth; + } + import openconfig-interfaces { + prefix oc-if; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet" + + "/oc-eth:config/oc-eth:mac-address" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet" + + "/oc-eth:config/oc-eth:auto-negotiate" { + deviate delete { + default true; + } + deviate add { + must "(boolean(current() = 'true') != 'true') or not(../oc-eth:port-speed)" { + error-message "If auto_neg is True, speed must not be set"; + } + } + } + deviation "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet" + + "/oc-eth:config/oc-eth:port-speed" { + deviate add { + must "not(current()) or (boolean(../oc-eth:auto-negotiate = 'true') != 'true')" { + error-message "If speed is set, auto-negotiate must not be set"; + } + } + } + deviation "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet" + + "/oc-eth:config/oc-eth:duplex-mode" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet" + + "/oc-eth:config/oc-eth:enable-flow-control" { + deviate not-supported; + description "Not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-if-ip-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-if-ip-augments.yang new file mode 100644 index 000000000..7780d5371 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-if-ip-augments.yang @@ -0,0 +1,409 @@ +module arcos-openconfig-if-ip-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/interfaces/ip/augments"; + prefix arc-oc-ip-aug; + + import openconfig-if-ip { + prefix oc-ip; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import ietf-inet-types { + prefix inet; + } + + revision 2022-09-13 { + description + "Add mac-learning for L2 sub interfaces"; + } + + typedef vrrp-proto-version { + type enumeration { + enum VRRP_V2 { + description "VRRP protocol version 2."; + } + enum VRRP_V3 { + description "VRRP protocol version 3."; + } + enum VRRP_V2_V3 { + description "VRRP protocol version 2 and 3."; + } + } + } + grouping ipv6-ra-config { + description + "Configuration parameters for IPv6 router advertisements."; + + leaf interval { + type uint32 { + range "4..1800"; + } + default 600; + units seconds; + description + "The interval between periodic router advertisement neighbor + discovery messages sent on this interface expressed in + seconds."; + } + + leaf lifetime { + type uint32 { + range "0..9000"; + } + units seconds; + must 'current() = 0 or current() > ../interval' { + error-message "If lifetime is not 0, it must be greater than interval"; + } + description + "The lifetime advertised in RA messages sent on this interface + (in seconds), value 0 means don't use as default router."; + } + + leaf suppress { + type boolean; + default false; + description + "When set to true, router advertisement neighbor discovery + messages are not transmitted on this interface."; + } + + leaf virtual-router-only { + type boolean; + default false; + description + "When set to true, router advertisement neighbor discovery + messages are only sent for VRRP virtual-routers on this interface."; + } + + leaf managed-config-flag { + type boolean; + default false; + description + "When set to true, router advertisement neighbor discovery + messages are sent with the Managed address configuration flag set."; + } + + leaf other-config-flag { + type boolean; + default false; + description + "When set to true, router advertisement neighbor discovery + messages are sent with the Other configuration flag set."; + } + } + + grouping ipv6-ra-top { + description + "Top-level grouping for IPv6 router advertisements "; + + container router-advertisement { + description + "Configuration and operational state parameters relating to + router advertisements."; + + container config { + description + "Configuration parameters relating to router advertisements + for IPv6."; + uses ipv6-ra-config; + } + + container state { + config false; + description + "Operational state parameters relating to router + advertisements for IPv6."; + uses ipv6-ra-config; + } + } + } + + grouping ipv6-ra-addr-config { + description + "Per IPv6 address prefix configuration parameters for router advertisements."; + + leaf auto-config-flag { + type boolean; + default false; + description + "When set to true, router advertisement neighbor discovery + messages for this address prefix are sent with the autonomous + configurationflag set."; + } + } + + grouping ipv6-ra-addr-top { + description + "Top-level grouping for IPv6 per address prefix router advertisements"; + + container router-advertisement { + description + "Configuration and operational state parameters relating to + per address prefix router advertisements"; + + container config { + description + "Configuration parameters relating to per address prefix + router advertisements for IPv6."; + uses ipv6-ra-addr-config; + } + + container state { + config false; + description + "Operational state parameters relating to per address prefix + router advertisements for IPv6."; + uses ipv6-ra-addr-config; + } + } + } + + grouping vrrp-group-ag-state-top { + description + "Additional leafs for VRRP Group State "; + + leaf virtual-router-mode { + type enumeration { + enum MASTER { + description "Virtual Router is in MASTER mode."; + } + enum BACKUP { + description "Virtual Router is in BACKUP mode."; + } + } + description + "The mode of this specific Virtual Group + on the current Virtual Router"; + } + + leaf advertisement-sent { + type uint64; + description + "Number of VRRP advertisements sent for this VRRP group"; + } + + leaf advertisement-received { + type uint64; + description + "Number of VRRP advertisements received for this VRRP group"; + } + + leaf advertisement-dropped { + type uint64; + description + "Number of VRRP advertisements dropped for this VRRP group"; + } + + leaf virtual-mac-address { + type oc-yang:mac-address; + description + "VRRP virtual mac address. It is in the format 00-00-5E-00-01-{VRID} + where VRID is the Virtual Router ID"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv6" { + uses ipv6-ra-top; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address" { + uses ipv6-ra-addr-top; + } + + grouping neighbor-config { + description + "Configuration parameters for neighbors."; + leaf neighbor-timeout { + description + "neighbor time out in seconds."; + type uint32 { + range "60..65535"; + } + units seconds; + default 14400; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv4/oc-ip:config" { + uses neighbor-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv4/oc-ip:state" { + uses neighbor-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv6/oc-ip:config" { + uses neighbor-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv6/oc-ip:state" { + uses neighbor-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address" + + "/oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:config" { + leaf vrrp-version { + description + "Version of VRRP version to be enabled for this VRRP group."; + type vrrp-proto-version; + default "VRRP_V3"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address" + + "/oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:state" { + leaf vrrp-version { + description + "Version of VRRP version to be enabled for this VRRP group."; + type vrrp-proto-version; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address" + + "/oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:state" { + uses vrrp-group-ag-state-top; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address" + + "/oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:state" { + uses vrrp-group-ag-state-top; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address/oc-ip:config" { + leaf label-index { + type uint32; + description + "Label index - Parameter related to Segment Routing"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address/oc-ip:state" { + leaf label-index { + type uint32; + description + "Label index - Parameter related to Segment Routing"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/oc-ip:config" { + leaf label-index { + type uint32; + description + "Label index - Parameter related to Segment Routing"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/oc-ip:state" { + leaf label-index { + type uint32; + description + "Label index - Parameter related to Segment Routing"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address/oc-ip:config" { + leaf secondary { + type empty; + must "(count(/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address) > 1)" { + error-message "Cannot delete the primary IP address from interface as the secondary IP config exists"; + } + description "Indicates whether the IP address is a primary or a secondary IP address"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address/oc-ip:state" { + leaf secondary { + type empty; + description "Indicates whether the IP address is a primary or a secondary IP address"; + } + } + + grouping ipv6-link-local-address { + description + "IPv6 link-local address for the interface."; + + leaf ipv6-link-local { + type inet:ipv6-address-no-zone; + description + "[adapted from IETF IP model RFC 7277] + + The IPv6 link-local address on the + interface."; + } + } + + grouping dynamic-address-top { + description + "Subinterface data for logical interfaces + associated with a physical interface."; + + container dynamic { + config false; + description + "Enclosing container for the list of subinterfaces + associated with a physical interface."; + uses ipv6-link-local-address; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-if:state" { + uses dynamic-address-top; + } + + grouping subinterface-config { + leaf mac-learning { + type boolean; + default true; + when "current()/../../oc-ip:ipv4/oc-ip:config/oc-ip:enabled = 'false' and " + + "current()/../../oc-ip:ipv6/oc-ip:config/oc-ip:enabled = 'false'"; + description + "When this leaf is set to true, MAC learning is enabled for + the subinterface, such that MAC addresses are learned + from ingress frames and added to the FDB."; + } + } + + grouping subinterface-state { + leaf mac-learning { + type boolean; + when "current()/../../oc-ip:ipv4/oc-ip:config/oc-ip:enabled = 'false' and " + + "current()/../../oc-ip:ipv6/oc-ip:config/oc-ip:enabled = 'false'"; + description + "Operation value of mac learning for this subinterface"; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-if:config" { + uses subinterface-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-if:state" { + uses subinterface-state; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-if-ip-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-if-ip-deviations.yang new file mode 100644 index 000000000..8179c1ebe --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-if-ip-deviations.yang @@ -0,0 +1,147 @@ +module arcos-openconfig-if-ip-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/interface/ip/deviations"; + prefix arc-oc-ip-dev; + + import openconfig-if-ip { + prefix oc-ip; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-vlan { + prefix oc-vlan; + } + + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:config/oc-ip:mtu" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:unnumbered" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address" { + deviate add { + max-elements 2; + } + description "Only support two IP addresses (one primary and the other secondary) in this release"; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address" { + deviate add { + max-elements 2; + } + description "Only support two address(one global, one link local) in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" + + "oc-ip:ipv4/oc-ip:neighbors" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" + + "oc-ip:ipv4/oc-ip:unnumbered" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:config/oc-ip:mtu" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:unnumbered" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" + + "oc-ip:ipv6/oc-ip:neighbors" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" + + "oc-ip:ipv6/oc-ip:unnumbered" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:config/" + + "oc-ip:dup-addr-detect-transmits" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address/" + + "oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:config/" + + "oc-ip:preempt" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address/" + + "oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:config/" + + "oc-ip:preempt-delay" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/" + + "oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:config/" + + "oc-ip:preempt" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/" + + "oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:config/" + + "oc-ip:preempt-delay" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address/" + + "oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:interface-tracking" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/" + + "oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:interface-tracking" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address/" + + "oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:config/" + + "oc-ip:accept-mode" { + deviate replace { + type boolean; + default true; + } + description + "Configure whether packets destined for + virtual addresses are accepted even when the virtual + address is not owned by the router interface. Enabled + by default."; + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/" + + "oc-ip:vrrp/oc-ip:vrrp-group/oc-ip:config/" + + "oc-ip:accept-mode" { + deviate replace { + type boolean; + default true; + } + description + "Configure whether packets destined for + virtual addresses are accepted even when the virtual + address is not owned by the router interface. Enabled + by default."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-interfaces-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-interfaces-augments.yang new file mode 100644 index 000000000..903508aee --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-interfaces-augments.yang @@ -0,0 +1,534 @@ +module arcos-openconfig-interfaces-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/interfaces/augments"; + prefix arc-oc-if-aug; + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import openconfig-network-instance { + prefix oc-ni; + } + + import openconfig-if-ethernet { + prefix oc-eth; + } + + import openconfig-vlan { + prefix oc-vlan; + } + + import ietf-yang-types { + prefix yang; + } + + import ietf-inet-types { + prefix inet; + } + + import iana-if-type { + prefix ianaift; + } + + import tailf-common { + prefix tailf; + } + + import arcos-features { + prefix arc-features; + } + + import arcos-platform { + prefix arc-platform; + } + import arcos-portsec { + prefix arc-portsec; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS Port Sec feature. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-02-08 { + description + "Interface debounce timer support"; + } + + revision 2022-09-13 { + description + "Added mac-learning"; + } + + revision 2022-05-09 { + description + "portsec fixes"; + } + + typedef fec-types { + type enumeration { + enum fec-none { + value 1; + } + enum base-r { + value 2; + } + enum rs { + value 3; + } + enum rs-108 { + value 4; + } + enum rs-206 { + value 5; + } + enum rs-272 { + value 6; + } + enum rs-304 { + value 7; + } + enum rs-544 { + value 8; + } + enum rs-545 { + value 9; + } + enum rs-272-2xn { + value 10; + } + enum rs-544-2xn { + value 11; + } + } + } + + grouping dynamic-ipv4-address { + description + "Per IPv4 address configuration data for the + interface."; + + leaf ip { + type inet:ipv4-address-no-zone; + description + "[adapted from IETF IP model RFC 7277] + + The IPv4 address on the interface."; + } + leaf prefix-length { + type uint8 { + range "0..32"; + } + description + "[adapted from IETF IP model RFC 7277] + + The length of the subnet prefix."; + } + } + + grouping dynamic-ipv6-address { + description + "Per IPv6 address configuration data for the + interface."; + + leaf ipv6 { + type inet:ipv6-address-no-zone; + description + "[adapted from IETF IP model RFC 7277] + + The IPv6 address on the interface."; + } + leaf ipv6-prefix-length { + type uint8 { + range "0..128"; + } + description + "[adapted from IETF IP model RFC 7277] + + The length of the subnet prefix."; + } + } + + grouping dynamic-address-top { + description + "Subinterface data for logical interfaces + associated with a physical interface."; + + container dynamic { + config false; + description + "Enclosing container for the list of subinterfaces + associated with a physical interface."; + + uses dynamic-ipv4-address; + uses dynamic-ipv6-address; + } + } + + grouping subinterface-config { + leaf network-instance { + type string; + description + "The L3 network-instance that this subinterface is associated + with. When this leaf is unspecified, the subinterface is + associated with the default network instance."; + } + } + + grouping if-error-counters { + description + "Error counters"; + + leaf fcs-error { + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'" { + description + "FCS Error count"; + } + type yang:counter64; + } + leaf align-error { + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'" { + description + "Alignment Error count"; + } + type yang:counter64; + } + leaf symbol-error { + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'" { + description + "Symbol Error count"; + } + type yang:counter64; + } + leaf runt-pkts { + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'" { + description + "Undersize pkt count"; + } + type yang:counter64; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-if:config" { + uses subinterface-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-if:state" { + leaf network-instance { + type oc-ni:network-instance-ref; + description + "The L3 network-instance that this subinterface is associated with. + When this leaf is unspecified, subinterface is associated with the + the default network instance."; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:state/oc-if:counters" { + leaf in-bits-rate { + type yang:counter64; + description + "input rate in bits"; + } + leaf in-bits-rate-brief { + type string; + description + "input rate in bits in string format"; + } + leaf in-pkts-rate { + type yang:counter64; + description + "input pkts rate"; + } + leaf out-bits-rate { + type yang:counter64; + description + "output rate in bits"; + } + leaf out-bits-rate-brief { + type string; + description + "output rate in bits in string format"; + } + leaf out-bits-rate-unit { + type string; + description + "output rate unit"; + } + leaf out-pkts-rate { + type yang:counter64; + description + "output pkts rate"; + } + leaf queue-drop-pkts { + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd' and " + + "/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_QoS']" + + "/arc-features:supported = 'true'" { + description + "Count of Queue Drop Packets"; + } + type yang:counter64; + } + container errors { + config false; + description + "Error counters"; + uses if-error-counters; + } + leaf in-ipv4-discards { + type oc-yang:counter64; + description + "input ipv4 discards packets"; + } + leaf in-stp-discards { + type oc-yang:counter64; + description + "input stp discards packets"; + } + leaf in-vlan-discards { + type oc-yang:counter64; + description + "input vlan discards packets"; + } + leaf in-tcam-discards { + type oc-yang:counter64; + description + "input tcam discards packets"; + } + leaf in-policy-discards { + type oc-yang:counter64; + description + "input policy discards packets"; + } + leaf carrier-transitions { + type oc-yang:counter64; + description + "Number of times the interface state has transitioned between up and + down since the time the device restarted or the last-clear time, + whichever is most recent"; + } + leaf giant-pkts { + type yang:counter64; + description + "Oversize pkt count"; + } + + leaf in-mtu-exceeded-discards { + type oc-yang:counter64; + description + "Input MTU exceeded discards packets"; + } + } + + grouping port-security-top { + container port-security { + leaf profile { + type leafref { + path "/arc-portsec:port-security/arc-portsec:profiles/arc-portsec:" + + "profile/arc-portsec:name"; + } + description + "Port security profile"; + } + leaf enable { + type boolean; + description + "Enable or disable security profile"; + } + leaf-list static-mac-list { + type yang:mac-address; + description + "Configured list of static macs"; + } + } + } + + grouping interface-config { + leaf fec { + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'"; + description + "Forward error correction type to use for this ethernet interface"; + type fec-types; + } + + leaf autostate { + type boolean; + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:l3ipvlan'"; + description + "Enable/disable interface state management on this interface"; + } + + leaf mac-learning { + type boolean; + default true; + when "derived-from-or-self(current()/../oc-if:type, 'ianaift:ethernetCsmacd') or " + + "derived-from-or-self(current()/../oc-if:type, 'ianaift:ieee8023adLag')"; + description + "When this leaf is set to true, MAC learning is enabled for + the interface, such that MAC addresses are learned + from ingress frames and added to the FDB."; + } + + leaf load-interval { + type uint16 { + range 5..300; + } + description "Interface counter load interval in seconds"; + } + + uses port-security-top { + when "../oc-eth:ethernet/" + + "oc-vlan:switched-vlan/oc-vlan:config/oc-vlan:interface-mode = 'ACCESS'" { + description "Port security enabled only on ACCESS interfaces"; + } + } + } + + grouping interface-state { + leaf load-interval { + type uint16; + description + "Interface counter load interval in seconds"; + } + + leaf media-type { + type string; + description + "Media type of the interface"; + } + + leaf module-type { + type string; + description + "Module type of the interface"; + } + + leaf fec { + type fec-types; + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'"; + description + "Operational value of forward error correction type in use for this interface"; + } + + leaf fec-corrected-errors { + type uint64; + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'"; + description + "Count of FEC corrected errors"; + } + + leaf fec-uncorrected-errors { + type uint64; + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'"; + description + "Count of FEC uncorrected errors"; + } + + leaf speed-group { + type uint8; + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:ethernetCsmacd'"; + description + "Speed group that this interface belongs to"; + } + + leaf autostate { + type boolean; + when "/oc-if:interfaces/oc-if:interface/oc-if:config/" + + "oc-if:type = 'ianaift:l3ipvlan'"; + description + "Operation value of interface state management used for this interface"; + } + + leaf mac-learning { + type boolean; + when "derived-from-or-self(current()/../oc-if:type, 'ianaift:ethernetCsmacd') or " + + "derived-from-or-self(current()/../oc-if:type, 'ianaift:ieee8023adLag')"; + description + "Operation value of mac learning for this interface"; + } + + leaf errDisable { + type string; + description + "Interface disable reason"; + } + leaf time-elapsed-since-last-change { + type string; + description + "Time Elapsed since last state change"; + } + uses dynamic-address-top; + } + + grouping debounce-info { + description + "Configuration and State data for interface debounce"; + + leaf up { + type uint32 { + range 1..30000; + } + units "milliseconds"; + description "Interface debounce (from DOWN to UP) interval in milliseconds"; + } + + leaf down { + type uint32 { + range 1..30000; + } + units "milliseconds"; + description "Interface debounce (from UP to DOWN) interval in milliseconds"; + } + } + + grouping debounce-logical-top { + description "Top-level data definitions for interface debounce"; + + container debounce-interval { + description + "Configuration and State for interface debounce interval"; + + uses debounce-info; + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:config" { + uses interface-config; + uses debounce-logical-top; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:state" { + uses interface-state; + uses debounce-logical-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-interfaces-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-interfaces-deviations.yang new file mode 100644 index 000000000..f0b1177b5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-interfaces-deviations.yang @@ -0,0 +1,176 @@ +module arcos-openconfig-interfaces-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/interfaces/deviations"; + prefix arc-oc-if-dev; + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-if-ethernet { + prefix oc-eth; + } + + import openconfig-vlan { + prefix oc-vlan; + } + + import openconfig-vlan-types { + prefix oc-vlan-types; + } + + import openconfig-if-aggregate { + prefix oc-lag; + } + + import ietf-yang-types { + prefix yang; + } + + import iana-if-type { + prefix ianaift; + } + + import arcos-features { + prefix arc-features; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + description + "This module defines deviations statements for the + for OpenConfig interfaces module. + Copyright (c) 2016-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-13 { + description + "enable interface index range to 9999"; + } + + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" { + deviate add { + max-elements 2000; + } + description + "restricted to user configurable max vlans"; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface" { + deviate add { + must "index = 0 or " + + "/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_SUBIF']" + + "/arc-features:supported = 'true'" { + error-message "Tagged sub-interfaces not suported on this platform"; + } + } + description + "restricted to physical l3 interface"; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:hold-time" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:enabled" { + deviate replace { + default "false"; + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:config" + + "/oc-if:description" { + deviate replace { + type string { + length "1..254"; + } + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:state" + + "/oc-if:description" { + deviate replace { + type string { + length "1..254"; + } + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-if:config/oc-if:description" { + deviate replace { + type string { + length "1..254"; + } + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces" + + "/oc-if:subinterface/oc-if:state/oc-if:description" { + deviate replace { + type string { + length "1..254"; + } + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:mtu" { + deviate add { + must "current()/../oc-if:type != 'ianaift:l3ipvlan'" { + error-message "MTU Not supported on SVI in this release"; + } + } + + deviate replace { + type uint16 { + range "1280..9214"; + } + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-if:config/oc-if:index" { + deviate replace { + type uint32 { + range "0..9999"; + } + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-if:config/oc-if:enabled" { + deviate add { + must "current()/../index != 0 or current() = 'true'" { + error-message "Disabling of subinterface 0 must be controlled via the main interface"; + } + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:state/oc-if:last-change" { + deviate replace { + type yang:date-and-time; + } + description + "Date and time of the last state change of the interface + (e.g., up-to-down transition)"; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + + "oc-if:subinterface/oc-if:state/oc-if:last-change" { + deviate replace { + type yang:date-and-time; + } + description + "Date and time of the last state change of the interface + (e.g., up-to-down transition)"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-isis-augments-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-isis-augments-deviations.yang new file mode 100644 index 000000000..41e5b9b52 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-isis-augments-deviations.yang @@ -0,0 +1,127 @@ +module arcos-openconfig-isis-augments-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/isis/augments/deviations"; + prefix arc-oc-isis-aug-dev; + + import openconfig-network-instance { + prefix oc-ni; + } + + import arcos-openconfig-isis-augments { + prefix arc-oc-isis-aug; + } + + import arcos-system-types { + prefix arc-sys-types; + } + + import openconfig-keychain-types { + prefix oc-keychain-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place, + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module defines annotations for Arrcus + implemention of the openconfig ISIS module. + Copyright (c) 2019-2022 by Arrcus, Inc. + All rights reserved."; + + revision "2022-12-20" { + description + "Changes for authentication support: + * Use encrypted password string for global hello authentication + * Default auth-type to SIMPLE_KEY"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" + + "/oc-ni:afi-safi/oc-ni:af/arc-oc-isis-aug:default-information" + + "/arc-oc-isis-aug:originate/arc-oc-isis-aug:config" + + "/arc-oc-isis-aug:export-policy" { + deviate add { + max-elements 1; + } + description + "Only support one policy in this release."; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" + + "/oc-ni:afi-safi/oc-ni:af/arc-oc-isis-aug:default-information" + + "/arc-oc-isis-aug:originate/arc-oc-isis-aug:config" + + "/arc-oc-isis-aug:default-export-policy" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" + + "/oc-ni:afi-safi/oc-ni:af/arc-oc-isis-aug:default-information" + + "/arc-oc-isis-aug:originate/arc-oc-isis-aug:state" + + "/arc-oc-isis-aug:default-export-policy" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:global/arc-oc-isis-aug:hello-authentication" + + "/arc-oc-isis-aug:key/arc-oc-isis-aug:config" + + "/arc-oc-isis-aug:auth-password" { + deviate replace { + type arc-sys-types:encrypted-string; + } + description "Prevent storage of clear-text strings in the configuration database"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:global/arc-oc-isis-aug:hello-authentication" + + "/arc-oc-isis-aug:config/arc-oc-isis-aug:auth-type" { + deviate add { + default oc-keychain-types:SIMPLE_KEY; + } + description "Default auth type to use key-based auth"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:levels/oc-ni:level" + + "/oc-ni:authentication/oc-ni:config/oc-ni:auth-type" { + deviate add { + default oc-keychain-types:SIMPLE_KEY; + } + description "Default auth type to use key-based auth"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:interfaces/oc-ni:interface" + + "/oc-ni:authentication/oc-ni:config/oc-ni:auth-type" { + deviate add { + default oc-keychain-types:SIMPLE_KEY; + } + description "Default auth type to use key-based auth"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:interfaces/oc-ni:interface" + + "/oc-ni:levels/oc-ni:level" + + "/oc-ni:hello-authentication/oc-ni:config/oc-ni:auth-type" { + deviate add { + default oc-keychain-types:SIMPLE_KEY; + } + description "Default auth type to use key-based auth"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-isis-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-isis-augments.yang new file mode 100644 index 000000000..bfd8d6972 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-isis-augments.yang @@ -0,0 +1,4253 @@ +module arcos-openconfig-isis-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/isis/augments"; + prefix arc-oc-isis-aug; + + import ietf-inet-types { + prefix inet; + } + + import ietf-yang-types { + prefix yang; + } + + import openconfig-network-instance { + prefix oc-ni; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-policy-types { + prefix oc-pol-types; + } + + import openconfig-isis { + prefix oc-isis; + } + + import openconfig-isis-types { + prefix oc-isis-types; + } + + import openconfig-isis-lsdb-types { + prefix oc-isis-lsdb-types; + } + + import arcos-isis-types { + prefix arc-isis-types; + } + + import openconfig-mpls-types { + prefix oc-mpls-types; + } + + import arcos-srv6 { + prefix arc-srv6; + } + + import arcos-srv6-types { + prefix arc-srv6-types; + } + + import arcos-igp-types { + prefix arc-igp-types; + } + + import arcos-te { + prefix arc-te; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module defines augmentation for Arrcus + implemention of the openconfig ISIS module. + Copyright (c) 2018-2022 by Arrcus, Inc. + All rights reserved."; + + revision "2023-03-26" { + description + "ASLA subTLVs for IS Reachability"; + } + + revision "2023-01-22" { + description + "Add per address family microloop avoidance config option for mpls"; + } + + revision "2022-12-30" { + description + "Add mpls config option for fast re-route ti-lfa"; + } + + revision "2022-12-20" { + description + "Add global hello authentication configuration"; + } + + revision "2022-11-03" { + description + "Add network-instance table ID to global state"; + } + + revision "2022-06-18" { + description + "Updated to add support for IP Fast Reroute (RFC 5286)"; + } + + revision "2018-10-20" { + description + "Initial Revision + * Add global/state/is-type. + * Add global/af/routes. + * Add global/af/redistribute-routes. + * Add global/af/prefix-trackings. + * Add level/authentication/key/[config|state]/crypto-algorithm. + * Add level/link-state-database/lsp/state/[srm-count|ssn-count]. + * Add level/link-state-database/lsp/state/[srm-set|ssn-set]. + * Add level/link-state-database/lsp/state/[overload-bit|attached-bit]. + * Add level/link-state-database/lsp/state/[is-type]. + * Add level/link-state-database/lsp/state/received-remaining-lifetime. + * Add level/link-state-database/lsp/state/last-update-ifindex. + * Add level/link-state-database/lsp/state/last-update-time. + * Add level/link-state-database/.../neighbor/state/two-way-connectivity. + * Add interface/[config|state]/network-type. + * Add interface/state/circuit-id. + * Add interface/state/protocol-up. + * Add interface/state/mtu. + * Add interface/state/update-index. + * Add interface/state/ifindex. + * Add interface/state/next-lsp-transmission. + * Add interface/state/next-lsp-retransmission. + * Add interface/state/snpa. + * Add interface/authentication/crypto-algorithm. + * Add interface/level/adjacency/state/neighbor-lan-id. + * Add interface/level/adjacency/state/usable. + * Add interface/level/adjacency/bfd/[...] + * Add interface/level/[config|state]/metric. + * Add interface/level/state/lan-id. + * Add interface/level/packet-counters/lsp/state/no-memory. + * Add interface/level/hello-authentication/key/[config|state] + * /crypto-algorithm. + * Add interface/timers/[hello-interval|hello-multiplier]. + * Add circuit-counters to interface/level. + * Add global/spf-log. + * Add level/state/next-spf. + "; + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + /* + * Route flag identity. + */ + identity route-flag { + description "Base identity for route flag."; + } + + identity connected { + base route-flag; + description "Connected route."; + } + + identity remote { + base route-flag; + description "Remote route."; + } + + identity srv6-locator { + base route-flag; + description "SRv6 locator route."; + } + + identity redistribute { + base route-flag; + description "Redistributed route."; + } + + identity distribute { + base route-flag; + description "Distributed route."; + } + + identity default-information { + base route-flag; + description "Default-information originate route."; + } + + identity down { + base route-flag; + description "Down bit set."; + } + + identity summary { + base route-flag; + description "Summary route."; + } + + identity suppressed { + base route-flag; + description "Suppressed by a summary route."; + } + + identity best { + base route-flag; + description "Best route."; + } + + identity prefix-tracking-flag { + description "Base identity for prefix tracking flag."; + } + + identity conditional { + base prefix-tracking-flag; + description "Conditional prefix tracking."; + } + + identity routing-policy { + base prefix-tracking-flag; + description "Routing policy prefix tracking."; + } + + identity pending { + base prefix-tracking-flag; + description "Pending prefix tracking."; + } + + identity stale { + base prefix-tracking-flag; + description "Stale prefix tracking."; + } + + /* + * Crypto type identity. + */ + identity CRYPTO_TYPE { + description "Base identity for crypto-algorithm."; + } + + identity MD5 { + base CRYPTO_TYPE; + description "The MD5 algorithm."; + } + + typedef node-id { + type string { + pattern + '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9][0-9]'; + } + description + "This type defines ISIS node ID. ISIS node ID type should be in + the form of xxxx.xxxx.xxxx.xx. It is used to represent LAN ID + and circuit ID"; + } + + grouping global-tracker-top { + description + "Protection tracker information"; + leaf id { + type leafref { + path "../state/id"; + } + description + "Unique identifier for specific tunnel"; + } + container state { + leaf id { + type uint64; + description + "Unique identifier for protection tracker"; + } + leaf reference-count { + type uint32; + description + "Count of nexthops refers to this protection tracker"; + } + leaf interface { + type oc-if:interface-id; + description + "The outgoing interface."; + } + leaf system-id { + type arc-isis-types:system-name; + description + "Neighbor system-id this protection tracks"; + } + leaf bfd-source { + type inet:ip-address; + description + "BFD Source address"; + } + leaf bfd-destination { + type inet:ip-address; + description + "BFD Destination address"; + } + leaf bfd-session-id { + type uint64; + description + "BFD Session ID"; + } + } + } + + grouping global-trackers-top { + description + "This grouping defines protection trackers used by ISIS nexthops"; + container protection-trackers { + config false; + description + "This container defines tunnels used by nexthop"; + list protection-tracker { + description + "Protection tracker information"; + key "id"; + uses global-tracker-top; + } + } + } + + identity TUNNEL_USER { + description "Base identity for tunnel user type"; + } + identity TI_LFA_TUNNEL { + base TUNNEL_USER; + description "Used by TI-LFA."; + } + identity MICRO_LOOP_AVOID_TUNNEL { + base TUNNEL_USER; + description "Used by Micro-loop avoidance."; + } + + grouping srv6-tunnel-top { + description + "SRv6 tunnel information"; + container srv6-tunnel { + description + "SRv6 tunnel information"; + leaf source { + type inet:ip-address; + description + "SRv6 tunnel source"; + } + leaf destination { + type inet:ip-address; + description + "SRv6 tunnel destination"; + } + leaf num-sids { + type uint32; + description + "Number of SIDs"; + } + leaf-list sids { + type inet:ipv6-address; + description + "SID List information"; + } + } + } + + grouping global-tunnel-top { + description + "Tunnel informaiton"; + leaf id { + type leafref { + path "../state/id"; + } + } + container state { + leaf id { + type uint64; + description + "Unique identifier for specific tunnel"; + } + leaf nexthop-address { + description "Nexthop address"; + type inet:ip-address; + } + leaf nexthop-interface { + description "Nexthop interface"; + type string; + } + leaf-list users { + type identityref { + base TUNNEL_USER; + } + description "Users of this tunnel."; + } + leaf tunnel-type { + type enumeration { + enum SRV6_TUNNEL { + description + "SRv6 tunnel type"; + } + } + } + leaf reference-count { + type uint32; + description + "Number of nexthops that uses this tunnel"; + } + uses srv6-tunnel-top; + } + } + + grouping global-tunnels-top { + description + "This grouping defines tunnels used by ISIS nexthops"; + container tunnels { + config false; + description + "This container defines tunnels used by nexthop"; + list tunnel { + description + "Tunnel information"; + key "id"; + uses global-tunnel-top; + } + } + } + + identity PROTECTION_TYPE { + description "Base identity for protection type"; + } + identity LINK_PROTECTION { + base PROTECTION_TYPE; + description "Link protection"; + } + identity NODE_PROTECTION { + base PROTECTION_TYPE; + description "Node protection"; + } + + identity SRV6_LFA_FLAG { + description "Base identity for SRv6 Flag"; + } + + identity PQ_IS_ADJACENT { + base SRV6_LFA_FLAG; + description "PQ Node is adjacent"; + } + + identity P_AND_Q_ARE_ADJACENT { + base SRV6_LFA_FLAG; + description "P and Q nodes are adjacent"; + } + + identity PQ_IS_REMOTE { + base SRV6_LFA_FLAG; + description "PQ node is remote"; + } + + typedef node-sid-type { + type union { + type inet:ipv6-address; + type uint32; + } + description + "Type definition for NODE SID"; + } + + grouping global-srv6-node-info { + container state { + leaf system-id { + type oc-isis-types:system-id; + description + "Node system ID"; + } + leaf sid { + type node-sid-type; + description + "Node SID representing the P/Q/PQ Node"; + } + leaf endpoint-func { + type arc-srv6-types:srv6-endpoint-behavior-type; + description + "Endpoint function"; + } + leaf sid-type { + type arc-srv6-types:srv6-sid-type; + description + "SID Type"; + } + } + } + + grouping global-fast-reroute-top { + description + "Protection information"; + + container levels { + description + "This container defines ISIS level specific route information."; + + list level { + key "level-number"; + + description + "List of ISIS level specific route information."; + + leaf level-number { + type leafref { + path "../state/level-number"; + } + description + "Reference to ISIS level-number."; + } + container state { + leaf level-number { + type oc-isis-types:level-number; + description + "ISIS level number (level-1, level-2)."; + } + leaf reroute-type { + type enumeration { + enum MICRO_LOOP_AVOIDANCE { + description "Micro-loop avoidance"; + } + enum TI_LFA { + description "Topology independant loop free alternate"; + } + enum IP_FRR { + description "IP Fast Reroute Loop Free Alternate"; + } + } + description "Fast reroute type"; + } + leaf-list protection-types { + description "Protection types"; + type identityref { + base PROTECTION_TYPE; + } + } + leaf origin-system-id { + type arc-isis-types:system-name; + description + "Route origin system ID"; + } + leaf metric { + description "Metric to reach the node"; + type uint32; + } + leaf nexthop-address { + description "Nexthop address"; + type inet:ip-address; + } + leaf nexthop-interface { + description "Nexthop interface"; + type string; + } + leaf-list flags { + description "Fast-reroute flags"; + type identityref { + base SRV6_LFA_FLAG; + } + } + } + container p-node { + uses global-srv6-node-info; + description "P node information"; + } + container q-node { + uses global-srv6-node-info; + description "Q node information"; + } + container pq-node { + uses global-srv6-node-info; + description "PQ node information"; + } + } + } + } + + /* + * Multi-topology pre-defined topology IDs + */ + identity ISIS_MT_TOPO_ID { + description "Base identity for multi-topology ID."; + + reference "RFC 5120: Multi Topology (MT) Routing in Intermediate + System to Intermediate Systems (IS-ISs)."; + } + + identity ISIS_MT_ID0_STANDARD { + base ISIS_MT_TOPO_ID; + description "Topology ID #0 defined for 'standard' topology."; + } + + identity ISIS_MT_ID2_IPV6_UNICAST { + base ISIS_MT_TOPO_ID; + description "Topology ID #2 defined for 'IPv6 routing' topology."; + } + + /* + * Multi-Topology topology ID + */ + typedef isis-multi-topology-id { + type union { + type uint16 { + range "0..4095"; + } + + type identityref { + base ISIS_MT_TOPO_ID; + } + } + + description + "ISIS multi-topology identifier."; + } + + /* + * Nexthops + */ + grouping global-nexthops-top { + description + "This grouping defines ISIS nexthop paths sets."; + + container next-hop-sets { + config false; + description + "This container defines a set of ISIS nexthop path information."; + + list next-hop-set { + key "id"; + + description + "List of ISIS next-hop path set information."; + + leaf id { + type leafref { + path "../state/id"; + } + description + "Unique Identfier for the specific set of Next-hops."; + } + + container state { + description + "This container defines ISIS next-hop path information."; + + leaf id { + type uint64; + description + "Unique Identfier for the specific set of Next-hops."; + } + + leaf next-hop-count { + type uint32; + description + "Number of path information to be found in the next-hop-set."; + } + + leaf reference-count { + type uint32; + description + "Number of routes referring to this next-hop-set."; + } + + leaf protection-tracker-id { + type uint64; + description + "Protection tracker identifier"; + } + } + + container next-hops { + config false; + description + "This container defines a specific individual next-hop path information."; + + list next-hop { + key "outgoing-interface next-hop-address"; + description + "List ISIS level specific route next hop information."; + + leaf outgoing-interface { + type leafref { + path "../state/outgoing-interface"; + } + description + "Reference to ISIS interface."; + } + + leaf next-hop-address { + type leafref { + path "../state/next-hop-address"; + } + description + "Reference to ISIS next hop address."; + } + + container state { + description + "This container defines ISIS level specific route next hops + state information."; + + leaf outgoing-interface { + type oc-if:interface-id; + description + "The outgoing interface."; + } + + leaf outgoing-ifindex { + type uint32; + description + "The outgoing interface index."; + } + + leaf next-hop-address { + type inet:ip-address; + description + "The next hop address."; + } + + leaf tunnel-id { + type uint64; + description + "The next hop tunnel identifier."; + } + + leaf backup { + type boolean; + description + "The next hop used as backup."; + } + } + } + } + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" { + uses global-nexthops-top; + uses global-tunnels-top; + uses global-trackers-top; + } + + grouping global-state-top { + leaf is-type { + type identityref { + base arc-isis-types:level-bits; + } + description + "ISIS is-type."; + } + leaf table-id { + type uint32; + description + "System table ID of this network-instance."; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" + + "/oc-ni:state" { + uses global-state-top; + } + + identity FLEX_ALGO_METRIC_TYPE { + description + "Base identity for metric-type in flexible algorithm"; + } + identity LINK_DELAY { + base FLEX_ALGO_METRIC_TYPE; + description + "Link delay metric"; + } + identity TE_METRIC { + base FLEX_ALGO_METRIC_TYPE; + description "Traffic-engineering metric"; + } + identity IGP_METRIC { + base FLEX_ALGO_METRIC_TYPE; + description "IGP metric"; + } + + grouping flexible-algorithms-top { + container flexible-algorithms { + list flexible-algorithm { + key "id"; + leaf id { + type leafref { + path "../config/id"; + } + description + "Flexible algorithm identifier"; + } + container config { + uses flexible-algorithm-config-top; + } + container state { + config false; + uses flexible-algorithm-config-top; + container selected-definitions { + list selected-definition { + key "level-number"; + + leaf level-number { + type leafref { + path "../state/level-number"; + } + description + "Reference to ISIS level-number."; + } + + container state { + uses flexible-algorithm-state-top; + } + } + } + } + } + } + } + + grouping flexible-algorithm-definition-common { + leaf id { + type uint8 { + range "128..255"; + } + description "Flexible algorithm identifier"; + } + leaf priority { + type uint8; + default 128; + description "Flexible algorithm priority"; + } + leaf metric-type { + type identityref { + base FLEX_ALGO_METRIC_TYPE; + } + default IGP_METRIC; + description + "Metric-type for flexible algorithm"; + } + } + + grouping flexible-algorithm-definition-config-top { + uses flexible-algorithm-definition-common; + + container admin-groups { + leaf-list exclude-any { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-te:te/arc-te:admin-groups/arc-te:admin-group" + + "/arc-te:config/arc-te:name"; + } + description + "list of admin-groups that are to be excluded + in this algorithm"; + } + leaf-list include-any { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-te:te/arc-te:admin-groups/arc-te:admin-group" + + "/arc-te:config/arc-te:name"; + } + description + "list of admin-groups that are to be included + in this algorithm"; + } + leaf-list include-all { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-te:te/arc-te:admin-groups/arc-te:admin-group" + + "/arc-te:config/arc-te:name"; + } + description + "list of admin-groups that must be included + in this algorithm"; + } + } + } + + grouping flexible-algorithm-definition-state-top { + uses flexible-algorithm-definition-common; + + container admin-groups { + leaf-list exclude-any { + type union { + type string; + type uint32; + } + description + "list of admin-groups that are to be excluded + in this algorithm"; + } + leaf-list include-any { + type union { + type string; + type uint32; + } + description + "list of admin-groups that are to be included + in this algorithm"; + } + leaf-list include-all { + type union { + type string; + type uint32; + } + description + "list of admin-groups that must be included + in this algorithm"; + } + } + } + + grouping flexible-algorithm-config-top { + container advertise-definition { + leaf enabled { + type boolean; + default false; + description + "Advertisement of algorithm definition"; + } + } + uses flexible-algorithm-definition-config-top; + } + + grouping flexible-algorithm-state-top { + leaf level-number { + type oc-isis-types:level-number; + description + "ISIS level number (level-1, level-2)."; + } + leaf system-id { + type arc-isis-types:system-name; + description "Describes the system ID whose + flexible-algorithm was selected."; + } + uses flexible-algorithm-definition-state-top; + } + + grouping flexible-algorithm-interface-top { + container flexible-algorithm { + container config { + uses flexible-algorithm-affinity-top; + description + "Flexible algorithm interface configuration"; + } + container state { + config false; + uses flexible-algorithm-affinity-top; + description + "Flexible algorithm interface state"; + } + description + "Flexible algorithm interface configuration"; + } + } + + grouping flexible-algorithm-affinity-top { + leaf-list admin-groups { + type leafref { + path "../../../../../../../../arc-te:te/arc-te:admin-groups" + + "/arc-te:admin-group/arc-te:config/arc-te:name"; + } + } + } + + grouping te-config-top { + container traffic-engineering { + description + "This container defines ISIS TE."; + + container config { + description + "This container defines ISIS TE configuration."; + + uses oc-isis:isis-te-config; + } + + container state { + config false; + description + "This container defines ISIS TE state information."; + + uses oc-isis:isis-te-config; + } + } + } + + grouping srv6-config { + description + "SRV6 Configuration."; + + leaf enabled { + description + "Enable SRV6."; + + type boolean; + } + } + + grouping srv6-locator-config { + description + "SRV6 Locator Configuration."; + + list locator { + key "name"; + + description + "List of locators advertised by ISIS."; + + leaf name { + description + "Reference to SRV6 locator name."; + + type leafref { + path "../../../../../../../../../arc-srv6:srv6/arc-srv6:locator/arc-srv6:name"; + } + } + } + } + + grouping srv6-locator-state { + description + "SRV6 Locator Configuration."; + + list locator { + key "name"; + + description + "List of locators advertised by ISIS."; + + leaf name { + description + "Reference to SRV6 locator name."; + + type leafref { + path "../../../../../../../../../arc-srv6:srv6/arc-srv6:locator/arc-srv6:name"; + } + } + + leaf prefix { + type inet:ipv6-prefix; + description + "SRv6 locator prefix"; + } + + leaf node-length { + type uint8; + description + "SRv6 locator prefix node length in bits"; + } + + leaf algorithm { + type uint8; + description + "SRv6 algorithm ID"; + } + + leaf micro-sid { + type boolean; + description + "SRv6 locator is micro-SID"; + } + + leaf registered { + type boolean; + description + "SRv6 locator is registered with SIDmgr"; + } + + leaf valid { + type boolean; + description + "SRv6 locator notification was received from SIDmgr"; + } + } + } + + grouping srv6-locator-top { + description + "Top-level SRV6 Locator Configuration."; + + container locators { + description + "SRV6 Locator."; + + container config { + uses srv6-locator-config; + } + + container state { + config false; + uses srv6-locator-state; + } + } + } + + grouping srv6-config-top { + description + "Top-level SRV6 Configuration."; + + container srv6 { + description + "SRV6 Configuration."; + + container config { + uses srv6-config; + } + + container state { + config false; + uses srv6-config; + } + + uses srv6-locator-top; + } + } + + grouping fast-reroute-ti-lfa-config { + leaf srv6-enabled { + type boolean; + description + "TI-LFA using SRv6"; + } + } + + grouping fast-reroute-tilfa { + container ti-lfa { + description + "TI-LFA Configuration"; + container config { + uses fast-reroute-ti-lfa-config; + } + container state { + config false; + uses fast-reroute-ti-lfa-config; + } + } + } + + grouping fast-reroute-top { + description + "Top fast-reroute configuration."; + container fast-reroute { + description + "Fast reroute configuration"; + uses fast-reroute-tilfa; + } + } + + grouping micro-loop-avoidance-config { + description + "Micro-loop avoidance configuration"; + leaf srv6-enabled { + type boolean; + description + "micro-loop-avoidance SRv6 configuration"; + } + leaf rib-update-delay { + type uint16 { + range "1..60000"; + } + default 5000; + description + "RIB update delay configuration"; + } + } + + grouping micro-loop-avoidance-top { + description + "Micro-loop avoidance configuration."; + container micro-loop-avoidance { + description + "Micro-loop avoidance Configuration"; + container config { + uses micro-loop-avoidance-config; + } + container state { + config false; + uses micro-loop-avoidance-config; + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" { + uses srv6-config-top; + uses te-config-top; + uses micro-loop-avoidance-top; + uses flexible-algorithms-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface" { + uses fast-reroute-top; + uses flexible-algorithm-interface-top; + } + + grouping route-state-top { + description + "This grouping defines ISIS route."; + + leaf prefix { + type inet:ip-prefix; + description + "ISIS route prefix."; + } + leaf best-level-number { + type oc-isis-types:level-number; + description + "Indicate which level contributes the best route."; + } + } + + grouping route-levels-top { + description + "This grouping defines ISIS route levels."; + + container levels { + description + "This container defines ISIS level specific route information."; + + list level { + key "level-number"; + + description + "List of ISIS level specific route information."; + + leaf level-number { + type leafref { + path "../state/level-number"; + } + description + "Reference to ISIS level-number."; + } + + container state { + description + "This container defines ISIS level specific route state + information."; + + leaf level-number { + type oc-isis-types:level-number; + description + "ISIS level number (level-1, level-2)."; + } + + leaf in-label { + type oc-mpls-types:mpls-label; + description + "Indicates the In-label of SR LSP."; + } + + leaf-list out-labels { + type oc-mpls-types:mpls-label; + description + "Indicates the out-label list for the SR LSP paths"; + } + + leaf metric { + type uint32; + description + "ISIS route metric."; + } + + leaf-list flags { + type identityref { + base route-flag; + } + description + "ISIS route flags."; + } + + leaf next-hop-id { + type uint64; + description + "Unique Identfier for the specific set of Next-hop paths."; + } + + leaf prefix-origin-count { + type uint32; + description + "Number of prefix originators found in Link-state-database."; + } + } + + container next-hops { + description + "This container defines ISIS level specific route next hops + information."; + + list next-hop { + key "outgoing-interface next-hop-address"; + description + "List ISIS level specific route next hop information."; + + leaf outgoing-interface { + type leafref { + path "../state/outgoing-interface"; + } + description + "Reference to ISIS interface."; + } + + leaf next-hop-address { + type leafref { + path "../state/next-hop-address"; + } + description + "Reference to ISIS next hop address."; + } + container state { + description + "This container defines ISIS level specific route next hops + state information."; + + leaf outgoing-interface { + type oc-if:interface-id; + description + "The outgoing interface."; + } + + leaf next-hop-address { + type inet:ip-address; + description + "The next hop address."; + } + + leaf tunnel-id { + type uint64; + description + "Tunnel identifier referred by this next hop."; + } + + leaf backup { + type boolean; + description + "This next hop is used as backup."; + } + } + } + } + } + } + } + + grouping global-spf-logs-top { + description "Grouping for spf-log events."; + + container spf-log { + description + "This container lists the SPF computation events."; + config false; + + list event { + key id; + description + "List of computation events - implemented as a + wrapping buffer."; + + leaf id { + type uint32; + description + "Event identifier - purely internal value."; + } + + leaf spf-type { + type enumeration { + enum full { + description "Full SPF computation."; + } + enum route-only { + description + "Route reachability only SPF computation"; + } + } + description "Type of SPF computation performed."; + } + + leaf level { + type oc-isis-types:level-number; + description + "IS-IS level number for SPF computation"; + } + + leaf topology-id { + type isis-multi-topology-id; + description + "IS-IS multi-topology ID for SPF computation"; + } + + leaf algorithm { + type uint8; + description + "IGP Algorithm Type"; + } + + leaf schedule-time { + type yang:date-and-time; + description + "Time when the SPF computation was + scheduled."; + } + + leaf delay { + type uint64; + description + "Delay in micro-seconds applied for this SPF event."; + } + + leaf start-time { + type yang:date-and-time; + description + "Time when the SPF computation started."; + } + + leaf end-time { + type yang:date-and-time; + description + "Time when the SPF computation ended."; + } + + leaf duration { + type uint64; + description + "Time taken in micro-seconds to execute the SPF computations."; + } + + leaf node-count { + type uint64; + description + "Number of nodes involved in the SPF computations."; + } + + leaf prefix-count { + type uint64; + description + "Number of prefixes involved in the SPF computations."; + } + + leaf route-download-count { + type uint64; + description + "Number of routes updated in the SPF computations."; + } + + list trigger-lsp { + key "id"; + description + "This list includes the LSPs that triggered the + SPF computation."; + + leaf id { + type uint32; + description + "Trigger identifier - purely internal value."; + } + + leaf lsp-id { + type oc-isis-types:lsp-id; + description + "LSPID of the LSP triggering SPF computation."; + } + + leaf sequence { + type uint32; + description + "Sequence number of the LSP triggering SPF + computation"; + } + + leaf trigger-time { + type yang:date-and-time; + description + "Time when the trigger event was recorded."; + } + } + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" { + uses global-spf-logs-top; + } + + grouping level-spf-top { + description "Grouping for per-level spf details."; + + leaf next-spf { + type uint64; + description "Time in microseconds left before next SPF computations."; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:state" { + uses level-spf-top; + } + + grouping global-af-fast-reroute-top { + container fast-reroutes { + config false; + description + "Routes with fast re-route."; + + list fast-reroute { + key "prefix"; + description + "Routes with fast re-route."; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Route prefix."; + } + + container state { + leaf prefix { + type inet:ip-prefix; + description + "ISIS route prefix."; + } + } + uses global-fast-reroute-top; + } + } + } + + grouping global-af-routes-top { + container routes { + config false; + description + "This container defines ISIS routes."; + + list route { + key "prefix"; + + description + "List of the local system's ISIS routes information learned + and calculated."; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix of the ISIS route."; + } + + container state { + description + "Operational state relating to the ISIS routes information + learned and calculated."; + + uses route-state-top; + } + uses route-levels-top; + } + } + } + + grouping global-af-flexalgo-routes-top { + container flexible-algorithms { + config false; + description + "This container defines ISIS AF flexible algorithm information."; + + list flexible-algorithm { + key "id"; + + description + "List of flexible algorithm information for this AF."; + + leaf id { + type leafref { + path "../state/id"; + } + description + "Reference to the flexible algorithm ID."; + } + + container state { + description + "Operational state of flexible algorithm for this AF."; + + leaf id { + type uint8; + + description + "Flexible algorithm ID."; + } + } + + uses global-af-routes-top; + uses global-af-fast-reroute-top; + } + } + } + + grouping redist-route-levels-top { + description + "This grouping defines ISIS redistribute route levels."; + + container levels { + description + "This container defines ISIS redistribute route level information."; + + list level { + key "level-number"; + + description + "List of ISIS level specific route information."; + + leaf level-number { + type leafref { + path "../state/level-number"; + } + description + "Reference to ISIS level-number."; + } + + container state { + description + "This container defines ISIS level specific route state + information."; + + leaf level-number { + type oc-isis-types:level-number; + description + "ISIS level number (level-1, level-2)."; + } + + leaf metric { + type uint32; + description + "ISIS route metric."; + } + + leaf srv6-locator-metric { + type uint32; + description + "ISIS SRv6 locator route metric."; + } + + leaf-list flags { + type identityref { + base route-flag; + } + description + "ISIS redistribute route flags."; + } + } + + container source { + container state { + leaf identifier { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "The protocol identifier for the instance"; + } + + leaf name { + type string; + description + "A unique name for the protocol instance"; + } + + leaf level-number { + type oc-isis-types:level-number; + description + "Level number."; + } + } + description + "Source information for redistributed route."; + } + } + } + } + + grouping redist-route-state-top { + description + "This grouping defines ISIS redistribute route."; + + leaf prefix { + type inet:ip-prefix; + description + "ISIS route prefix."; + } + } + + grouping global-af-redist-routes-top { + container redistribute-routes { + config false; + description + "This container defines ISIS redistribute routes."; + + list redistribute-route { + key "prefix"; + + description + "List of the local system's ISIS redistributed routes + information."; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix of the ISIS redistribute route."; + } + + container state { + description + "Operational state relating to the ISIS redistributed routes + information"; + + uses redist-route-state-top; + } + uses redist-route-levels-top; + } + } + } + + grouping prefix-tracking-state-top { + description + "Operational state data for prefix tracking information"; + + leaf prefix { + type inet:ip-prefix; + description + "The prefix key"; + } + + leaf masklength-range { + type string { + pattern '(([0-9]|[1-9][0-9]|1[0-2][0-8])\.\.([0-9]|[1-9][0-9]' + + '|1[0-2][0-8]))|exact'; + } + description + "The range for the masklength, or 'exact' if + the prefix has an exact length"; + } + + leaf-list flags { + type identityref { + base prefix-tracking-flag; + } + description + "Prefix tracking flags."; + } + + leaf resolved { + type boolean; + description + "Indicate if the prefix tracking is resolved"; + } + + leaf match-prefix { + type inet:ip-prefix; + description + "The prefix that match the prefix tracking"; + } + } + + grouping global-af-prefix-trackings-top { + container prefix-trackings { + config false; + description + "This container defines ISIS prefix tracking."; + + list prefix-tracking { + key "prefix masklength-range"; + + description + "List of the local system's ISIS prefix tracking information"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix of the ISIS prefix tracking information"; + } + + leaf masklength-range { + type leafref { + path "../state/masklength-range"; + } + description + "Reference to the masklength-range of the ISIS prefix tracking information"; + } + + container state { + description + "Operational state relating to the ISIS prefix trackings + information"; + + uses prefix-tracking-state-top; + } + + container source { + container state { + leaf identifier { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "The protocol identifier for the instance"; + } + + leaf name { + type string; + description + "A unique name for the protocol instance"; + } + } + description + "Source information for matching prefix."; + } + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" + + "/oc-ni:afi-safi/oc-ni:af" { + uses global-af-routes-top; + uses global-af-flexalgo-routes-top; + uses global-af-redist-routes-top; + uses global-af-prefix-trackings-top; + uses arc-igp-types:default-information-top; + uses global-af-fast-reroute-top; + } + + grouping lsp-state-top { + leaf overload-bit { + type boolean; + description + "LSDB overload bit."; + } + + leaf attached-bit { + type boolean; + description + "LSDB attached bit."; + } + + leaf is-type { + type identityref { + base arc-isis-types:level-bits; + } + description + "IS type."; + } + + leaf received-remaining-lifetime { + type uint16; + description + "The received remaining lifetime."; + } + + leaf last-update-ifindex { + type uint32; + description + "The ifindex of the index this LSP is last received from."; + } + + leaf last-update-time { + type yang:date-and-time; + description + "Last time this LSP is updated."; + } + + leaf srm-count { + type uint32; + description + "Number of SRM bits set."; + } + + leaf-list srm-set { + type uint16; + description + "The SRM set."; + } + + leaf ssn-count { + type uint32; + description + "Number of SSN bits set."; + } + + leaf-list ssn-set { + type uint16; + description + "The SSN set."; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:levels/oc-ni:level/oc-ni:link-state-database" + + "/oc-ni:lsp/oc-ni:state" { + uses lsp-state-top; + } + + grouping lsp-extended-is-reachability-neighbor-state-top { + leaf two-way-connectivity { + type boolean; + description + "The ISIS node the fulfill the two way connectivity check."; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:levels/oc-ni:level/oc-ni:link-state-database" + + "/oc-ni:lsp/oc-ni:tlvs/oc-ni:tlv/oc-ni:extended-is-reachability" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:state" { + uses lsp-extended-is-reachability-neighbor-state-top; + } + + grouping lsp-is-neighbor-instance-state-top { + leaf two-way-connectivity { + type boolean; + description + "Indicates if ISIS neighbor instance fulfils the + two way connectivity check."; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:levels/oc-ni:level/oc-ni:link-state-database" + + "/oc-ni:lsp/oc-ni:tlvs/oc-ni:tlv/oc-ni:mt-isn" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:instances/oc-ni:instance/oc-ni:state" { + uses lsp-is-neighbor-instance-state-top; + } + + identity ROUTER_CAPABILITY_IPV6_TE_ROUTER_ID { + base "oc-isis-lsdb-types:ROUTER_CAPABILITY_SUBTLVS_TYPE"; + description + "sub-TLV 12. IPv6 TE router ID."; + reference + "RFC5316 ISIS Extensions in Support of Inter-Autonomous System (AS) + MPLS and GMPLS Traffic Engineering."; + } + + identity ROUTER_CAPABILITY_SRLB { + base "oc-isis-lsdb-types:ROUTER_CAPABILITY_SUBTLVS_TYPE"; + description + "sub-TLV 22. SRLB."; + reference + "RFC8667 IS-IS Extensions for Segment Routing."; + } + + identity ROUTER_CAPABILITY_NODE_MSD { + base "oc-isis-lsdb-types:ROUTER_CAPABILITY_SUBTLVS_TYPE"; + description + "sub-TLV 23. Node MSD."; + reference + "RFC8491 Signaling Maximum SID Depth (MSD) Using IS-IS."; + } + + identity ROUTER_CAPABILITY_SRV6_CAPABILITY { + base "oc-isis-lsdb-types:ROUTER_CAPABILITY_SUBTLVS_TYPE"; + description + "sub-TLV 25. SRv6 Capability."; + reference + "draft-bashandy-isis-srv6-extensions."; + } + + identity ROUTER_CAPABILITY_FLEX_ALGO_DEFINITION { + base "oc-isis-lsdb-types:ROUTER_CAPABILITY_SUBTLVS_TYPE"; + description + "sub-TLV 26. IS-IS Flexible Algorithm Definition."; + reference + "draft-ietf-lsr-flex-algo."; + } + + grouping lsp-ipv6-te-router-id-top { + description + "IPV6 TE router ID grouping."; + container ipv6-te-router-id { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:ROUTER_CAPABILITY_IPV6_TE_ROUTER_ID'" { + description + "Only include IPv6 TE router ID when the sub-TLV is type 12."; + } + description + "IPv6 TE router ID."; + container state { + description + "State parameter of IPv6 TE router ID."; + leaf router-id { + type inet:ipv6-address; + } + } + } + } + + grouping lsp-node-msd-top { + description + "Means to advertise to advertise node/link specific + values for Maxium Sid Depths(MSD) of various types"; + container node-msds { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:ROUTER_CAPABILITY_NODE_MSD'" { + description + "Only include node MSD when the sub-TLV is type 23."; + } + description + "Maximum SRv6 SID Depths."; + list msd { + key "type"; + leaf type { + type leafref { + path "../state/type"; + } + description + "Reference to the MSD type being described."; + } + container state { + description + "State parameter of MSD."; + leaf type { + description + "The MSD type."; + type arc-igp-types:msd-type; + } + leaf value { + description + "The MSD value."; + type uint8; + } + } + } + } + } + + /* + * SRv6 capability flags identity. + */ + identity SRV6_CAPABILITY_FLAG { + description "Base identity for SRv6 Capability flag."; + } + + identity O_BIT { + base SRV6_CAPABILITY_FLAG; + description + "If set, then the router is able to + use of the O-bit in the Segment Routing Header(SRH) + as defined in [draft-ietf-6man-segment-routing-header]."; + } + + typedef srv6-capability-flag { + type union { + type identityref { + base SRV6_CAPABILITY_FLAG; + } + type uint8; + } + } + + grouping lsp-srv6-capability-top { + description + "SRV6 capability grouping."; + container srv6-capability { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:ROUTER_CAPABILITY_SRV6_CAPABILITY'" { + description + "Only include node MSD when the sub-TLV is type 25."; + } + description + "SRv6 capability."; + container state { + description + "State parameter of SRv6 Capability."; + leaf-list flags { + type srv6-capability-flag; + description + "Flags."; + } + } + } + } + + grouping lsp-node-srlb-top { + description + "Node SRLB grouping."; + container node-srlb { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:ROUTER_CAPABILITY_SRLB'" { + description + "Only include node SRLB when the sub-TLV is type 22."; + } + description + "Node SRLB Info."; + container state { + description + "State parameter of SRLB."; + leaf range { + type uint32; + description + "Number of SRLB elements. The range value MUST be higher than 0. "; + } + leaf label { + type uint32; + description + "The first value of the SRLB."; + } + } + } + } + + grouping lsp-flex-algo-definition-top { + description + "Flexible algorithm definition grouping."; + container flex-algo-definitions { + description + "Container for flex algo definitions announced in an LSP"; + + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:ROUTER_CAPABILITY_FLEX_ALGO_DEFINITION'" { + description + "Only include flex-algo-definitions when the sub-TLV is type 26."; + } + + list flex-algo-definition { + description + "Flex algo definition"; + key "id"; + leaf id { + type leafref { + path "../state/id"; + } + } + container state { + uses flexible-algorithm-definition-state-top; + } + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:levels/oc-ni:level/oc-ni:link-state-database" + + "/oc-ni:lsp/oc-ni:tlvs/oc-ni:tlv/oc-ni:router-capabilities" + + "/oc-ni:capability/oc-ni:subtlvs/oc-ni:subtlvs" { + uses lsp-ipv6-te-router-id-top; + uses lsp-node-msd-top; + uses lsp-srv6-capability-top; + uses lsp-node-srlb-top; + uses lsp-flex-algo-definition-top; + } + + grouping auth-key-top { + leaf crypto-algorithm { + type identityref { + base CRYPTO_TYPE; + } + description + "Authentication key cryptographic algorithm to be used + for key encryption."; + } + } + + grouping instance-authentication-top { + container hello-authentication { + description + "Global IS-IS Hello authentication"; + + uses oc-isis:isis-hello-authentication-group; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" { + uses instance-authentication-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" + + "/arc-oc-isis-aug:hello-authentication/arc-oc-isis-aug:key" + + "/arc-oc-isis-aug:config" { + uses auth-key-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" + + "/arc-oc-isis-aug:hello-authentication/arc-oc-isis-aug:key" + + "/arc-oc-isis-aug:state" { + uses auth-key-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:levels/oc-ni:level" + + "/oc-ni:authentication/oc-ni:key/oc-ni:config" { + uses auth-key-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:levels/oc-ni:level" + + "/oc-ni:authentication/oc-ni:key/oc-ni:state" { + uses auth-key-top; + } + + /* + * Information common for all type of interfaces for both config and oper. + */ + grouping interface-common-top { + } + + /* + * Information only valid for state but not config for loopback interface. + */ + grouping interface-no-config-loopback-top { + leaf network-type { + type arc-isis-types:network-type; + description + "ISIS interface network type."; + } + } + + grouping isis-interface-ldp-igp-config { + description + "This grouping defines ISIS/LDP Synchronization configuration for + and IS-IS interface."; + + leaf enabled { + type boolean; + default true; + description + "When set to true, rely on IGP/LDP synchronization. IGP cost for + link is maintained at max until LDP adjacencies are established "; + reference "RFC5443: LDP IGP Synchronization."; + } + } + + grouping interface-mpls { + container mpls { + description + "Configuration and operational state relating to MPLS-related + features in IS-IS"; + + container igp-ldp-sync { + description + "Configuration and operational state relating to synchronisation + between the LDP and IS-IS"; + container config { + description + "This container defines ISIS/IGP configuration."; + + uses isis-interface-ldp-igp-config; + } + + container state { + config false; + description + "This container defines state information for ISIS/LDP Sync."; + + uses isis-interface-ldp-igp-config; + } + } + } + } + + grouping interface-state-top { + leaf circuit-id { + type arc-isis-types:node-name; + description + "ISIS interface circuit ID."; + } + + leaf protocol-up { + type boolean; + description + "ISIS interface protocol up."; + } + + leaf snpa { + type oc-isis-types:snpa; + description + "ISIS interface SNPA."; + } + + leaf mtu { + type uint32; + description + "ISIS interface MTU."; + } + + leaf ifindex { + type uint32; + description + "The ifindex of the interface."; + } + + leaf update-index { + type uint16; + description + "ISIS interface update index."; + } + + leaf next-lsp-transmission { + type uint64; + units milliseconds; + description + "Next LSP transmission due."; + } + + leaf next-lsp-retransmission { + type uint64; + units milliseconds; + description + "Next LSP retransmission due."; + } + + leaf speed { + type uint32; + units "Gbps"; + description + "Speed of the interface in Gbps"; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface" { + uses interface-mpls; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:config" { + uses interface-no-config-loopback-top { + when "not(starts-with(../oc-ni:interface-id, 'loopback'))"; + } + uses interface-common-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:state" { + uses interface-no-config-loopback-top; + uses interface-common-top; + uses interface-state-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:timers/oc-ni:config" { + uses oc-isis:isis-hello-timers-config; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:timers/oc-ni:state" { + uses oc-isis:isis-hello-timers-config; + } + + grouping interface-level-cfg-top { + leaf metric { + type oc-isis-types:wide-metric; + description "ISIS metric value for this interface level."; + } + container flexible-algorithm { + leaf te-metric { + type oc-isis-types:wide-metric; + description "ISIS TE metric value used by flex algorithm."; + } + leaf delay-metric { + type oc-isis-types:wide-metric; + description "ISIS Delay metric value used by flex algorithm in microseconds."; + } + } + } + + grouping interface-level-state-top { + leaf lan-id { + type arc-isis-types:node-name; + description + "ISIS LAN ID for this interface level."; + } + } + + grouping interface-level-lsp-counters-state-top { + leaf no-memory { + type uint32; + description + "The number of the LSP PDU received on the interface " + + "that cannot be stored."; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:levels/oc-ni:level" { + container circuit-counters { + description + "This container defines state information for ISIS circuit counters."; + + uses oc-isis:circuit-counters-structural; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:levels/oc-ni:level/oc-ni:packet-counters" + + "/oc-ni:lsp/oc-ni:state" { + uses interface-level-lsp-counters-state-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:levels/oc-ni:level/oc-ni:config" { + uses interface-level-cfg-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:levels/oc-ni:level/oc-ni:state" { + uses interface-level-cfg-top; + uses interface-level-state-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:authentication/oc-ni:key/oc-ni:config" { + uses auth-key-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:authentication/oc-ni:key/oc-ni:state" { + uses auth-key-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:levels/oc-ni:level" + + "/oc-ni:hello-authentication/oc-ni:key/oc-ni:config" { + uses auth-key-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:interfaces" + + "/oc-ni:interface/oc-ni:levels/oc-ni:level" + + "/oc-ni:hello-authentication/oc-ni:key/oc-ni:state" { + uses auth-key-top; + } + + grouping adjacency-state-top { + leaf neighbor-lan-id { + type arc-isis-types:node-name; + description + "ISIS neighbor LAN ID."; + } + leaf usable { + type boolean; + description + "ISIS neighbor usable"; + } + leaf restarting-neighbor-id { + type arc-isis-types:system-name; + description + "ISIS Restarting Neighbor System ID. + When an ISIS router that supports graceful restart receives + the restart TLV in the IIH of a neighbor with the RR flag set + and the receiving router had an adjacency to this restarting + neighbor at the same level in UP state before, then the + receiving router sends IIH to that neighbor containing the + restart TLV with RA set and places the system-ID of that + neighbor in the 'Restarting Neighbor ID' field"; + + } + leaf restart-ack { + type boolean; + description + "If TRUE, then we received a restart TLV with the RA + flag set"; + } + leaf restart-request { + type boolean; + description + "If TRUE, then we received a restart TLV with the RR + flag set"; + } + leaf restart-remaining-time { + type uint16; + description + "The 'remaining time' field value of the restart TLV."; + } + + leaf-list received-multi-topology-ids { + type isis-multi-topology-id; + description + "List of Topology IDs advertised by neighbor."; + } + + leaf-list active-multi-topology-ids { + type isis-multi-topology-id; + description + "List of Topology IDs active on this adjacency i.e. common + to both local system and the neighbor."; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:interfaces/oc-ni:interface" + + "/oc-ni:levels/oc-ni:level/oc-ni:adjacencies" + + "/oc-ni:adjacency/oc-ni:state" { + uses adjacency-state-top; + } + + grouping adjacency-bfd-topo-state { + leaf mt-id { + type isis-multi-topology-id; + description + "Multitopology Identifier."; + } + leaf ipv4-bfd-required { + type boolean; + description + "ISIS neighbor topology IPV4 BFD required"; + } + leaf ipv6-bfd-required { + type boolean; + description + "ISIS neighbor topology IPV6 BFD required"; + } + leaf bfd-required { + type boolean; + description + "ISIS neighbor topology BFD required"; + } + leaf ipv4-bfd-up { + type boolean; + description + "ISIS neighbor topology IPV4 BFD up"; + } + leaf ipv6-bfd-up { + type boolean; + description + "ISIS neighbor topology IPV6 BFD up"; + } + leaf ipv4-up { + type boolean; + description + "ISIS neighbor topology IPV4 up"; + } + leaf ipv6-up { + type boolean; + description + "ISIS neighbor topology IPV6 up"; + } + leaf usable { + type boolean; + description + "ISIS neighbor topology usable"; + } + } + + grouping adjacency-bfd-top { + container bfd { + container topologies { + list topology { + key "mt-id"; + + leaf mt-id { + type leafref { + path "../state/mt-id"; + } + description + "A reference to a MT ID"; + } + container state { + uses adjacency-bfd-topo-state; + } + } + } + container state { + leaf bfd-required { + type boolean; + description + "ISIS neighbor BFD required"; + } + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:interfaces/oc-ni:interface" + + "/oc-ni:levels/oc-ni:level/oc-ni:adjacencies" + + "/oc-ni:adjacency" { + uses adjacency-bfd-top; + } + + identity SRV6_LOCATOR { + base "oc-isis-lsdb-types:ISIS_TLV_TYPE"; + description + "ISIS TLV 27. An SRV6 locator is a form of summary address for the set + of topology/algorithm specific SIDs instantiated at the node."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + identity SRV6_LOCATOR_SUBTLV_TYPE { + base "oc-isis-lsdb-types:ISIS_SUBTLV_TYPE"; + description + "Base identity for an ISIS SRV6 LOCATOR SUB-TLV type."; + } + + identity SRV6_LOCATOR_END_SID { + base "SRV6_LOCATOR_SUBTLV_TYPE"; + description + "Sub-TLV 5. SRv6 End SID."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + identity ISIS_SUBSUBTLV_TYPE { + description + "Base identity for an ISIS SUB-SUB-TLV type."; + } + + identity SRV6_SID_SUBSUBTLV_TYPE { + base "ISIS_SUBSUBTLV_TYPE"; + description + "Base identity for an SRV6 END SID SUB-SUB-TLV type."; + } + + identity SRV6_SID_STRUCTURE { + base "SRV6_SID_SUBSUBTLV_TYPE"; + description + "SID sub-sub-TLV 1. SRv6 SID Structure."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + identity EXTENDED_ADMIN_GROUP_TYPE { + base "ISIS_SUBSUBTLV_TYPE"; + description + "Extended Admin-group"; + reference + "Defined in RFC-7308 and used in RFC-8919"; + } + + identity TE_DEFAULT_METRIC_TYPE { + base "ISIS_SUBSUBTLV_TYPE"; + description + "Default TE Metric"; + reference + "Defined in RFC-5305 and used in RFC-8919"; + } + + identity MIN_MAX_DELAY_METRIC_TYPE { + base "ISIS_SUBSUBTLV_TYPE"; + description + "Min/Max Unidirectional Link Delay Sub-TLV"; + reference + "Defined in RFC-8570 and used in RFC-8919"; + } + + grouping isis-lsdb-subtlv-type-state { + description + "Per-subTLV type operational state parameters for ISIS."; + + leaf type { + type identityref { + base oc-isis-lsdb-types:ISIS_SUBTLV_TYPE; + } + description + "The type of subTLV being described. The type of subTLV is + expressed as a canonical name."; + } + } + + grouping isis-lsdb-subsubtlv-type-state { + description + "Per-subsubTLV type operational state parameters for ISIS."; + + leaf type { + type identityref { + base ISIS_SUBSUBTLV_TYPE; + } + description + "The type of subsubTLV being described. The type of subsubTLV is + expressed as a canonical name."; + } + } + + grouping undefined-subsubtlv-state { + description + "Generic grouping defining an unknown sub-sub-TLV."; + + uses oc-isis:isis-lsdb-generic-tlv; + } + + grouping isis-lsdb-undefined-subsubtlv { + description + "Grouping for unknown Sub-sub-TLVs in the IS-IS LSDB."; + + container undefined-subsubtlvs { + description + "This container describes undefined ISIS Sub-sub-TLVs."; + + list undefined-subsubtlv { + key "type"; + + description + "Sub-sub-TLVs that are not defined in the model or not recognised by + system."; + + leaf type { + type leafref { + path "../state/type"; + } + description + "A reference to a subsubTLV"; + } + + container state { + description + "State parameters of the undefined Sub-sub-TLV."; + + uses undefined-subsubtlv-state; + } + } + } + } + + grouping srv6-sid-structure-subsubtlv { + container srv6-sid-structure { + when "../state/type = " + + "'arc-oc-isis-aug:SRV6_SID_STRUCTURE'"; + + description + "Sub-sub TLV for End, End.X and LAN End.X SIDs to describe + the length of each part LB:LN:Func:Arg of the SID."; + + container state { + description + "State parameters of SRV6 SID structure sub-sub-TLV."; + + leaf lb-length { + type uint8; + } + + leaf ln-length { + type uint8; + } + + leaf fun-length { + type uint8; + } + + leaf arg-length { + type uint8; + } + } + } + } + + grouping locator-subsubtlv-top { + container subsubtlvs { + description + "This container describes SRV6 locator sub-sub-TLVs."; + + list subsubtlv { + key "type"; + + description + "List of subsubTLV types in the LSDB for the SRV6 Locator TLV."; + + leaf type { + type leafref { + path "../state/type"; + } + description + "A reference for the TLV type being described within the LSDB"; + } + + container state { + uses isis-lsdb-subsubtlv-type-state; + } + + uses srv6-sid-structure-subsubtlv; + } + } + } + + identity ISIS_PREFIX_ATTRIBUTES_FLAG { + description + "Base identity for ISIS sub-TLV 4 of TLVs 27, 135, 235, 236, and 237"; + reference + "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6 + Reachability. sub-TLV 4."; + } + + identity ISIS_PREFIX_EXTERNAL_FLAG { + base "ISIS_PREFIX_ATTRIBUTES_FLAG"; + description + "External prefix flag. Set if the prefix has been + redistributed from another protocol. This includes the case + where multiple virtual routers are supported and the source of + the redistributed prefix is another IS-IS instance."; + reference + "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6 + Reachability. sub-TLV 4."; + } + + identity ISIS_PREFIX_READVERTISEMENT_FLAG { + base "ISIS_PREFIX_ATTRIBUTES_FLAG"; + description + "Readvertisement flag. Set when the prefix has been leaked + from one level to another (upwards or downwards)."; + reference + "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6 + Reachability. sub-TLV 4."; + } + + identity ISIS_PREFIX_NODE_FLAG { + base "ISIS_PREFIX_ATTRIBUTES_FLAG"; + description + "Node flag. Set when the prefix identifies the advertising + router, i.e., the prefix is a host prefix advertising a + globally reachable address typically associated with a + loopback address."; + reference + "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6 + Reachability. sub-TLV 4."; + } + + identity ISIS_PREFIX_ANYCAST_FLAG { + base "ISIS_PREFIX_ATTRIBUTES_FLAG"; + description + "When the prefix/SRv6 locator is configured as anycast, the ANYCAST + flag SHOULD be set. Otherwise, this flag MUST be clear."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + typedef isis-prefix-attributes-flags-type { + type union { + type identityref { + base "ISIS_PREFIX_ATTRIBUTES_FLAG"; + } + type uint8 { + range "0..7"; + } + } + description + "Type definition for ISIS prefix attributes flags. Unknown + flags are represented as an integer describing the bit position + of the flag."; + reference + "RFC7794: Section 2.1 IPv4/IPv6 Extended Reachability Attribute Flags"; + } + + grouping prefix-attributes-subtlv { + container prefix-attribute-flags { + when "../state/type = " + + "'oc-isis-lsdb-types:TLV135_PREFIX_FLAGS'"; + + description + "This container defines sub-TLV 4."; + + container state { + description + "State parameters of sub-TLV 4."; + + leaf-list flags { + type isis-prefix-attributes-flags-type; + + description + "Prefix reachability flags."; + + reference + "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6 + Reachability. sub-TLV 4."; + } + } + } + } + + identity ISIS_SRV6_END_SID_FLAG { + description + "Base identity for ISIS End SID sub-TLV 5 flags."; + } + + typedef isis-srv6-end-sid-flags-type { + type union { + type identityref { + base "ISIS_SRV6_END_SID_FLAG"; + } + type uint8 { + range "0..7"; + } + } + description + "Type definition for ISIS End SID sub-TLV 5 flags. Unknown + flags are represented as an integer describing the bit position + of the flag."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + grouping end-sid-subtlv { + container srv6-end-sids { + when "../state/type = " + + "'arc-oc-isis-aug:SRV6_LOCATOR_END_SID'"; + + description + "This container defines SRV6 Locator sub-TLV 5."; + + list end-sid { + key "sid"; + + leaf sid { + type leafref { + path "../state/sid"; + } + } + + container state { + leaf sid { + type inet:ipv6-address; + } + + leaf-list flags { + type isis-srv6-end-sid-flags-type; + } + + leaf endpoint-func { + type arc-srv6-types:srv6-endpoint-behavior-type; + } + } + + uses locator-subsubtlv-top; + + uses isis-lsdb-undefined-subsubtlv; + } + } + } + + grouping ipv4-source-router-id-subtlv { + container ipv4-source-router-id { + when "../state/type = " + + "'oc-isis-lsdb-types:TLV135_IPV4_ROUTER_ID'"; + + description + "This container defines sub-TLV 11 of + ISIS TLVs 27, 135, 235, 236, 237."; + + container state { + description + "State parameters of sub-TLV 11."; + + leaf ipv4-source-router-id { + type inet:ipv4-address-no-zone; + description + "IPv4 Source router ID address. In cases where the advertisement + is an identifier for the advertising router (e.g., with the + N-flag set in the Prefix Attribute Flags sub-TLV), it may be + useful for other routers to know the source of the + advertisement. When reachability advertisement is leaked from + one level to another, Router ID advertised is always the Router + ID of the IS-IS instance that originated the advertisement. + This would be true even if the prefix had been learned from + another protocol."; + reference + "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6 + Reachability. sub-TLV 11"; + } + } + } + } + + grouping ipv6-source-router-id-subtlv { + container ipv6-source-router-id { + when "../state/type = " + + "'oc-isis-lsdb-types:TLV135_IPV6_ROUTER_ID'"; + + description + "This container defines sub-TLV 12 of + ISIS TLVs 27, 135, 235, 236, 237."; + + container state { + description + "State parameters of sub-TLV 12."; + + leaf ipv6-source-router-id { + type inet:ipv6-address; + description + "IPv6 Source router ID address. In cases where the advertisement + is an identifier for the advertising router (e.g., with the + N-flag set in the Prefix Attribute Flags sub-TLV), it may be + useful for other routers to know the source of the + advertisement. When reachability advertisement is leaked from + one level to another, Router ID advertised is always the Router + ID of the IS-IS instance that originated the advertisement. + This would be true even if the prefix had been learned from + another protocol."; + reference + "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6 + Reachability. sub-TLV 12."; + } + } + } + } + + grouping locator-subtlv-top { + container subtlvs { + description + "This container describes SRV6 locator sub-TLVs."; + + list subtlv { + key "type"; + + description + "List of subTLV types in the LSDB for the SRV6 Locator TLV."; + + leaf type { + type leafref { + path "../state/type"; + } + description + "A reference for the TLV type being described within the LSDB"; + } + + container state { + uses isis-lsdb-subtlv-type-state; + } + + uses prefix-attributes-subtlv; + uses end-sid-subtlv; + uses ipv4-source-router-id-subtlv; + uses ipv6-source-router-id-subtlv; + } + } + } + + identity ISIS_SRV6_LOCATOR_FLAG { + description + "Base identity for ISIS SRV6 Locator TLV 27 flags."; + } + + identity ISIS_SRV6_LOCATOR_DOWN_FLAG { + base "ISIS_SRV6_LOCATOR_FLAG"; + description + "When the Locator is leaked from level-2 to level-1, the DOWN + flag MUST be set. Otherwise, this bit MUST be clear. Locators + with the DOWN flag set MUST NOT be leaked from level-1 to level-2. + This is to prevent looping."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + typedef isis-srv6-locator-flags-type { + type union { + type identityref { + base "ISIS_SRV6_LOCATOR_FLAG"; + } + type uint8 { + range "0..7"; + } + } + description + "Type definition for ISIS SRV6 Locator TLV 27 flags. Unknown + flags are represented as an integer describing the bit position + of the flag."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + grouping locators-tlv { + list locator { + key "mt-id locator"; + + description + "The SRV6 Locator is a form of summary address for the set of + topology/algorithm specific SIDs instantiated at the node."; + + reference + "draft-ietf-lsr-isis-srv6-extensions"; + + leaf mt-id { + type leafref { + path "../state/mt-id"; + } + } + + leaf locator { + type leafref { + path "../state/locator"; + } + } + + container state { + description + "State parameters of ISIS Locator TLV 27."; + + leaf mt-id { + type uint16; + description + "Multitopology Identifier."; + reference + "RFC5120: Multi Topology (MT) Routing in ISIS."; + } + + leaf locator { + type inet:ipv6-prefix; + description + "SRv6 Locator Address."; + } + + leaf metric { + type uint32; + description + "Metric."; + reference + "RFC5305: IS-IS Extensions for Traffic Engineering"; + } + + leaf-list flags { + type isis-srv6-locator-flags-type; + } + + leaf algorithm { + type arc-igp-types:igp-algorithm-type; + description + "Algorithm associated with this locator."; + } + } + + uses locator-subtlv-top; + + uses oc-isis:isis-lsdb-undefined-subtlv; + } + } + + grouping locator-tlv-top { + description + "This grouping describes the ISIS SRV6 Locators TLV."; + + container srv6-locators { + config false; + description + "This container defines a set of ISIS SRV6 Locators."; + + when "../oc-ni:state/oc-ni:type = 'arc-oc-isis-aug:SRV6_LOCATOR'" { + description + "Only include SRV6 Locator TLV attributes when the TLV type is 27."; + } + + uses locators-tlv; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:levels/oc-ni:level/oc-ni:link-state-database" + + "/oc-ni:lsp/oc-ni:tlvs/oc-ni:tlv" { + uses locator-tlv-top; + } + + identity ISIS_SRV6_END_X_SID_FLAG { + description + "Base identity for ISIS SRV6 End.X SID flag."; + } + + identity END_X_SID_B_FLAG { + base "ISIS_SRV6_END_X_SID_FLAG"; + description + "Backup flag. If set, the End.X SID is eligible for protection."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + identity END_X_SID_S_FLAG { + base "ISIS_SRV6_END_X_SID_FLAG"; + description + "Set flag. When set, the S-Flag indicates that the End.X SID + refers to a set of adjacencies (and therefore MAY be assigned to + other adjacencies as well)."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + identity END_X_SID_P_FLAG { + base "ISIS_SRV6_END_X_SID_FLAG"; + description + "Persistent flag. When set, the P-Flag indicates that the End.X SID + is persistently allocated, i.e., the End.X SID value remains consistent + across router restart and/or interface flap."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + typedef isis-srv6-end-x-flags-type { + type union { + type identityref { + base "ISIS_SRV6_END_X_SID_FLAG"; + } + type uint8 { + range "0..7"; + } + } + description + "Type definition for ISIS SRV6 End.X SID flags. Unknown + flags are represented as an integer describing the bit position + of the flag."; + reference + "draft-ietf-lsr-isis-srv6-extensions"; + } + + grouping end-x-sid-subsubtlv-top { + container subsubtlvs { + description + "This container describes SRV6 End.X SID sub-sub-TLVs."; + + list subsubtlv { + key "type"; + + description + "List of subsubTLV types in the LSDB for the SRV6 End.X SID sub-TLV."; + + leaf type { + type leafref { + path "../state/type"; + } + description + "A reference for the TLV type being described within the LSDB"; + } + + container state { + uses isis-lsdb-subsubtlv-type-state; + } + + uses srv6-sid-structure-subsubtlv; + } + } + } + + identity IP_REACHABILITY_PREFIX_SID_SUBTLV_TYPE { + base "oc-isis-lsdb-types:ISIS_SUBTLV_TYPE"; + description + "ISIS IP REACHBILITY PREFIX SID SUBTLV."; + } + + identity EXTENDED_IS_REACH_ADJACENCY_SID_SUBTLV_TYPE { + base "oc-isis-lsdb-types:ISIS_SUBTLV_TYPE"; + description + "ISIS EXTENDED IS REACHBILITY ADJACENCY SID SUBTLV."; + } + + identity SRV6_END_X_SID { + base "oc-isis-lsdb-types:ISIS_SUBTLV_TYPE"; + description + "ISIS SRV6 End.X SID SUB-TLV type."; + } + + identity SRV6_LAN_END_X_SID { + base "oc-isis-lsdb-types:ISIS_SUBTLV_TYPE"; + description + "ISIS SRV6 LAN End.X SID SUB-TLV type."; + } + + identity SRV6_LINK_MSD { + base "oc-isis-lsdb-types:ISIS_SUBTLV_TYPE"; + description + "ISIS SRV6 LINK MSD SUB-TLV type."; + } + + identity ASLA { + base "oc-isis-lsdb-types:ISIS_SUBTLV_TYPE"; + description + "ISIS ASLA SUB-TLV type."; + } + + grouping end-x-sid-common { + leaf sid { + type inet:ipv6-address; + description "The SRv6 SID address."; + } + + leaf-list flags { + type isis-srv6-end-x-flags-type; + description "Flags associated with this End.X SID."; + } + + leaf algorithm { + type arc-igp-types:igp-algorithm-type; + description "Associated IGP algorithm."; + } + + leaf weight { + type uint8; + description "Load balancing factor for parallel adjacencies."; + } + + leaf endpoint-func { + type arc-srv6-types:srv6-endpoint-behavior-type; + description "Endpoint behavior for End.X SID."; + } + } + + grouping end-x-sid-subtlv { + container end-x-sids { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:SRV6_END_X_SID'"; + + description + "This container describes ISIS SRV6 End.X SID."; + + list end-x-sid { + key "sid"; + + leaf sid { + type leafref { + path "../state/sid"; + } + } + + container state { + uses end-x-sid-common; + } + + uses end-x-sid-subsubtlv-top; + + uses isis-lsdb-undefined-subsubtlv; + } + } + } + + grouping lan-end-x-sid-subtlv { + container lan-end-x-sids { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:SRV6_LAN_END_X_SID'"; + + description + "This container describes ISIS SRV6 LAN End.X SID."; + + list lan-end-x-sid { + key "sid"; + + leaf sid { + type leafref { + path "../state/sid"; + } + } + + container state { + leaf system-id { + type arc-isis-types:system-name; + description "Describes the system ID of the neighbor + associated with the SID value."; + } + + uses end-x-sid-common; + } + + uses end-x-sid-subsubtlv-top; + + uses isis-lsdb-undefined-subsubtlv; + } + } + } + + grouping link-msd-subtlv { + description + "Means to advertise to advertise link specific + values for Maxium Sid Depths(MSD) of various types"; + container link-msds { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:SRV6_LINK_MSD'" { + description + "Only include node MSD when the sub-TLV is type 15."; + } + description + "Maximum SRv6 SID Depths."; + list msd { + key "type"; + leaf type { + type leafref { + path "../state/type"; + } + description + "Reference to the MSD type being described."; + } + container state { + description + "State parameter of MSD."; + leaf type { + description + "The MSD type."; + type arc-igp-types:msd-type; + } + leaf value { + description + "The MSD value."; + type uint8; + } + } + } + } + } + + grouping is-reachability-srv6-subtlv-top { + uses end-x-sid-subtlv; + uses lan-end-x-sid-subtlv; + uses link-msd-subtlv; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:extended-is-reachability" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:subTLVs/oc-ni:subTLVs" { + uses is-reachability-srv6-subtlv-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:mt-isn" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:instances/oc-ni:instance" + + "/oc-ni:subTLVs/oc-ni:subTLVs" { + uses is-reachability-srv6-subtlv-top; + } + + grouping is-reach-asla-ext-admin-group-subsubtlv-top { + container extended-admin-groups { + when "../type = 'arc-oc-isis-aug:EXTENDED_ADMIN_GROUP_TYPE'"; + container state { + leaf-list extended-admin-group { + type union { + type uint32; + type string; + } + description + "Extended admin-group bit positions"; + } + } + } + } + + grouping is-reach-asla-te-metric-subsubtlv-top { + container te-default-metric { + when "../type = 'arc-oc-isis-aug:TE_DEFAULT_METRIC_TYPE'"; + container state { + leaf metric { + type uint32; + description + "Default metric for Traffic-engineering"; + } + } + } + } + + grouping is-reach-asla-min-max-delay-subsubtlv-top { + container min-max-delay { + when "../type = 'arc-oc-isis-aug:MIN_MAX_DELAY_METRIC_TYPE'"; + container state { + leaf min-delay { + type uint32; + description + "Minimum measured link delay value (in microseconds)"; + } + leaf max-delay { + type uint32; + description + "Maximum measured link delay value (in microseconds)"; + } + } + } + } + + grouping is-reach-asla-subsubtlvs-top { + container subsubtlvs { + description + "This container describes SRV6 End.X SID sub-sub-TLVs."; + + list subsubtlv { + key "type"; + + description + "List of subsubTLV types in the LSDB for the SRV6 End.X SID sub-TLV."; + + leaf type { + type leafref { + path "../state/type"; + } + description + "A reference for the TLV type being described within the LSDB"; + } + + container state { + uses isis-lsdb-subsubtlv-type-state; + } + + uses is-reach-asla-ext-admin-group-subsubtlv-top; + uses is-reach-asla-te-metric-subsubtlv-top; + uses is-reach-asla-min-max-delay-subsubtlv-top; + } + } + } + + grouping is-reachability-asla-subtlv-attr-top { + leaf standard-applications { + type bits { + bit rsvp-te { + position 0; + } + bit sr-policy { + position 1; + } + bit lfa { + position 2; + } + bit flexible-algorithm { + position 4; + } + } + } + leaf user-defined-applicaions { + type bits { + bit flexible-algorithm { + position 4; + } + } + } + } + + grouping is-reachability-asla-subtlv-top { + container aslas { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:ASLA'" { + description + "Only include ASLA when the sub-TLV is type 26."; + } + list asla { + key "standard-applications user-defined-applicaions"; + leaf standard-applications { + type leafref { + path "../state/standard-applications"; + } + } + leaf user-defined-applicaions { + type leafref { + path "../state/user-defined-applicaions"; + } + } + container state { + uses is-reachability-asla-subtlv-attr-top; + } + uses is-reach-asla-subsubtlvs-top; + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:extended-is-reachability" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:subTLVs/oc-ni:subTLVs" { + uses is-reachability-asla-subtlv-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:mt-isn" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:instances/oc-ni:instance" + + "/oc-ni:subTLVs/oc-ni:subTLVs" { + uses is-reachability-asla-subtlv-top; + } + + identity ADJ_NEIGHBOR_TYPE { + description + "Identity for base neighbor type"; + } + + identity POINT_TO_POINT { + base "ADJ_NEIGHBOR_TYPE"; + description + "POINT TO POINT neighbor type"; + } + + typedef adj-sid-neighbor-type { + type union { + type identityref { + base "ADJ_NEIGHBOR_TYPE"; + } + type inet:ip-address; + } + description + "Type definition for ADJ SID neighbor type (P2P identity/Neighbor IP)"; + } + + grouping sr-igp-adjacency-sid-config { + description + "Configuraton parameters relating to the AdjSID."; + + leaf neighbor { + type adj-sid-neighbor-type; + description + "The remote system on the interface with which the Adj-SID is + associated.(POINT_TO_POINT identity for p2p)"; + } + + leaf sid-type { + mandatory true; + type enumeration { + enum INDEX { + description + "SID is of index type"; + } + enum ABSOLUTE { + description + "SID is of absolute index type"; + } + } + description + "Describes the type of the SID value. + INDEX type indicates that configured + SID is index value from the SRLB Block. + ABSOLUTE type indicates that configured + value is the actual label value from SRLB block."; + reference + "RFC 8667 - Section 2.2.1"; + } + + leaf value { + type uint32; + description + "IGP ADJ-SID value(Index/Value based on SID-TYPE)."; + } + } + + grouping sr-igp-adjacency-sid-config-top { + description + "This grouping defines ISIS Adjacency SID."; + container adjacency-sids { + description + "Configuration relating to the advertisement of a + segment routing adjacency SID for this interface."; + + list adjacency-sid { + key "neighbor"; + + description + "An Adjacency SID to be advertised for the specified interface. + The Adj-SID's identifier (the SID ID) must be unique, with flags + specified indicating the parameters that should be set for the SID. + Where a SID value is specified that is allocated from the SRLB, the + global flag must be set by the system."; + + leaf neighbor { + type leafref { + path "../config/neighbor"; + } + description + "Reference to the neighbor ip with which the Adjacency SID is + associated(USE POINT_TO_POINT for P2P link)."; + } + container config { + description + "Configuraton parameters relating to the AdjSID."; + + uses sr-igp-adjacency-sid-config; + } + } + } + } + + grouping sr-igp-prefix-sid-config { + description + "Configuration parameters relating to an IGP prefix SID advertisement"; + + leaf algorithm { + type arc-igp-types:igp-algorithm-type; + description + "Prefix-SID algorithm to be used for path computation."; + } + + leaf sid-type { + mandatory true; + type enumeration { + enum INDEX { + description + "SID is of index type"; + } + enum ABSOLUTE { + description + "SID is of absolute index type"; + } + } + description + "Describes the type of the SID value. + INDEX type indicates that configured + SID is index value from the SRGB Block. + ABSOLUTE type indicates that configured + value is the actual label value from SRGB block."; + reference + "RFC 8667 - Section 2.1.1"; + } + + leaf value { + type uint32; + description + "IGP Prefix-SID value(Index/Value based on SID-TYPE)."; + } + + leaf clear-n-flag { + type boolean; + description + "Setting this clear-n-flag clears the NODE flag of the prefix SID."; + } + + leaf label-option { + type enumeration { + enum NO_PHP { + description + "When this value is specified, the penultimate hop must not pop + the Prefix-SID label before forwarding it to the local system."; + } + enum EXPLICIT_NULL { + description + "When set, the penultimate hop must swap the prefix SID for the + relevant explicit null label before forwarding the packet."; + } + } + description + "The options associated with the IGP prefix SID for MPLS. The value + of this leaf specifies the option that the SID should be advertised + into the IGP with."; + } + } + + grouping sr-igp-prefix-sid-config-top { + description + "This grouping defines ISIS Prefix SID."; + + container prefix-sids { + description + "This container defines segment routing extensions for + prefixes."; + reference + "draft-ietf-isis-segment-routing-extensions. sub-TLV 3: TLV + 135, 235, 236, 237."; + + list prefix-sid { + key "algorithm"; + + description + "Prefix Segment-ID list. IGP-Prefix Segment is an IGP segment + attached to an IGP prefix. An IGP-Prefix Segment is global + (unless explicitly advertised otherwise) within the SR/IGP + domain."; + + leaf algorithm { + type leafref { + path "../config/algorithm"; + } + description + "Reference to the value of the prefix SID algo(SPF/STRICT_SPF/128-255)."; + } + + container config { + description + "Config parameters for Prefix-SID."; + + uses sr-igp-prefix-sid-config; + } + } + } + } + + grouping isis-lsdb-adjacency-sid-state { + description + "State parameters of Adjacency-SID."; + + leaf value { + type uint32; + description + "Adjacency-SID value."; + } + + leaf-list flags { + type enumeration { + enum ADDRESS_FAMILY { + description + "Address-family flag. When unset, the Adj-SID refers to an + adjacency with outgoing IPv4 encapsulation. If set then the + Adj-SID refers to an adjacency with outgoing IPv6 + encapsulation."; + } + enum BACKUP { + description + "Backup flag. When set, the Adj-SID refers to an adjacency + being protected (e.g.: using IPFRR or MPLS-FRR)."; + } + enum SET { + description + "Set flag. When set, the S-Flag indicates that the Adj-SID + refers to a set of adjacencies."; + } + enum PERSISTENT { + description + "Persistent flag. When set, the P-Flag indicates the ADJ-SID + is persistent across restarts."; + } + enum VALUE { + description + "Value flag. When set, the SID carries a value (instead of an + index). By default the flag is SET."; + } + enum LOCAL { + description + "Local flag. When set, the value/index carried by the SID has + local significance. By default the flag is SET."; + } + } + description + "Flags associated with Adj-Segment-ID."; + } + + leaf weight { + type uint8; + description + "Value that represents the weight of the Adj-SID for the purpose + of load balancing."; + } + } + + grouping isis-lsdb-adjacency-sid-state-top { + description + "This grouping defines ISIS Adjacency SID state."; + container adjacency-sids { + when "../oc-ni:state/oc-ni:subtlv-type =" + + "'arc-oc-isis-aug:EXTENDED_IS_REACH_ADJACENCY_SID_SUBTLV_TYPE'" { + description + "Only include the Adjacency SID container when + the sub-TLV is type 31."; + } + list adjacency-sid { + key "sid"; + + description + "Adjacency Segment-ID list. Adjacency Segment is an IGP segment + attached to an IGP Adjacency. An IGP-Adjacency Segment is global + (unless explicitly advertised otherwise) within the SR/IGP + domain."; + + leaf sid { + type leafref { + path "../state/value"; + } + description + "Reference to the value of the Adjacency SID."; + } + container state { + description + "State parameters of Adjacency-SID."; + + uses isis-lsdb-adjacency-sid-state; + } + } + } + } + + grouping isis-lsdb-prefix-sid-state { + description + "State parameters for Prefix-SID."; + + leaf algorithm { + type arc-igp-types:igp-algorithm-type; + description + "Prefix-SID algorithm to be used for path computation."; + } + + leaf sid { + type uint32; + description + "IGP Prefix-SID value."; + } + + leaf-list flags { + type enumeration { + enum NO_PHP { + description + "When this value is specified, the penultimate hop must not pop + the Prefix-SID label before forwarding it to the local system."; + } + enum EXPLICIT_NULL { + description + "When set, the penultimate hop must swap the prefix SID for the + relevant explicit null label before forwarding the packet."; + } + enum READVERTISEMENT { + description + "Readvertisment flag. When set, the prefix to which this + Prefix-SID is attached, has been propagated by the router + either from another level or from redistribution."; + } + enum NODE { + description + "Node flag. When set, the Prefix-SID refers to the + router identified by the prefix. Typically, the + N-Flag is set on Prefix-SIDs attached to a router + loopback address."; + } + enum VALUE { + description + "Value flag. When set, the Prefix-SID carries a value (instead + of an index). By default the flag is UNSET."; + } + enum LOCAL { + description + "Local flag. When set, the value/index carried by the + Prefix-SID has local significance. By default the flag is + UNSET."; + } + } + description + "The options associated with the IGP prefix SID for MPLS. The value + of this leaf specifies the option that the SID should be advertised + into the IGP with."; + } + } + + grouping isis-lsdb-prefix-sid-state-top { + description + "This grouping defines ISIS Prefix SID."; + + container prefix-sids { + when "../oc-ni:state/oc-ni:subtlv-type = " + + "'arc-oc-isis-aug:IP_REACHABILITY_PREFIX_SID_SUBTLV_TYPE'" { + description + "Only include the Prefix SID container when + the sub-TLV is type 3."; + } + description + "This container defines segment routing extensions for + prefixes."; + + reference + "draft-ietf-isis-segment-routing-extensions. sub-TLV 3: TLV + 135, 235, 236, 237."; + + list prefix-sid { + key "algorithm"; + + description + "Prefix Segment-ID list. IGP-Prefix Segment is an IGP segment + attached to an IGP prefix. An IGP-Prefix Segment is global + (unless explicitly advertised otherwise) within the SR/IGP + domain."; + + leaf algorithm { + type leafref { + path "../state/algorithm"; + } + description + "Reference to the value of the prefix SID Algo(SPF/STRICT_SPF/128-255)."; + + } + + container state { + description + "State parameters for Prefix-SID."; + + uses isis-lsdb-prefix-sid-state; + } + } + } + } + + grouping fast-reroute-itf-af-config-top { + description + "IS-IS interface AFI/SAFI fast reroute configuration."; + + container fast-reroute { + description + "Fast reroute configuration"; + + container ip { + description + "IP Fast Reroute"; + + container config { + description + "IP Fast Reroute Configuration"; + + leaf enabled { + description + "IP FRR Enabled"; + + type boolean; + + must "not(../../../../../../../fast-reroute/ti-lfa/config/srv6-enabled) and " + + "not(../../../../../../oc-ni:af/oc-ni:config/fast-reroute/ti-lfa/config/srv6/enabled)" { + error-message "Cannot enable both TI-LFA and IP-FRR on the same interface"; + } + } + } + } + + container ti-lfa { + description + "TI-LFA Fast Reroute"; + + container config { + description + "TI-LFA Fast Reroute Configuration"; + + container srv6 { + description + "TI-LFA using SRv6"; + + leaf enabled { + description + "Enables TI-LFA fast reroute over SRv6"; + + type boolean; + + must "not(../../../../../../../oc-ni:af/oc-ni:config" + + "/fast-reroute/ti-lfa/config/sr-mpls/enabled)" { + error-message "Cannot enable both TI-LFA SR-MPLS and" + + "SRv6 on the same interface"; + } + + must "not(../../../../../../../oc-ni:af/oc-ni:config" + + "/fast-reroute/ip/config/enabled)" { + error-message "Cannot enable both TI-LFA and" + + "IP-FRR on the same interface"; + } + + must "not(../../../../../../../../fast-reroute" + + "/ti-lfa/config/srv6-enabled)" { + error-message "Cannot configure TI-LFA at interface level and AF level"; + } + } + + when "derived-from-or-self(../../../../oc-ni:afi-name, 'oc-isis-types:IPV6') and " + + "derived-from-or-self(../../../../oc-ni:safi-name, 'oc-isis-types:UNICAST')"; + } + + container sr-mpls { + description + "TI-LFA using SR MPLS"; + + leaf enabled { + description + "Enables TI-LFA fast reroute over SRv6"; + + type boolean; + + must "not(../../../../../../../oc-ni:af/oc-ni:config" + + "/fast-reroute/ti-lfa/config/srv6/enabled)" { + error-message "Cannot enable both TI-LFA SR-MPLS and SRv6 on the same interface"; + } + + must "not(../../../../../../../oc-ni:af/oc-ni:config" + + "/fast-reroute/ip/config/enabled)" { + error-message "Cannot enable both TI-LFA and IP-FRR on the same interface"; + } + + must "not(../../../../../../../../fast-reroute" + + "/ti-lfa/config/srv6-enabled)" { + error-message "Cannot configure TI-LFA at interface level and AF level"; + } + } + } + } + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:interfaces/oc-ni:interface/oc-ni:afi-safi" + + "/oc-ni:af/oc-ni:config" { + uses sr-igp-prefix-sid-config-top; + uses sr-igp-adjacency-sid-config-top; + uses fast-reroute-itf-af-config-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis" + + "/oc-ni:interfaces/oc-ni:interface/oc-ni:afi-safi" + + "/oc-ni:af/oc-ni:state" { + uses fast-reroute-itf-af-config-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:extended-ipv4-reachability" + + "/oc-ni:prefixes/oc-ni:prefix/oc-ni:subTLVs/oc-ni:subTLVs" { + uses isis-lsdb-prefix-sid-state-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:ipv6-reachability" + + "/oc-ni:prefixes/oc-ni:prefix/oc-ni:subTLVs/oc-ni:subTLVs" { + uses isis-lsdb-prefix-sid-state-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:mt-ipv6-reachability" + + "/oc-ni:prefixes/oc-ni:prefix/oc-ni:subTLVs/oc-ni:subTLVs" { + uses isis-lsdb-prefix-sid-state-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:extended-is-reachability" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:subTLVs/oc-ni:subTLVs" { + uses isis-lsdb-adjacency-sid-state-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:mt-isn" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:instances/oc-ni:instance" + + "/oc-ni:subTLVs/oc-ni:subTLVs" { + uses isis-lsdb-adjacency-sid-state-top; + } + + grouping isis-af-mt-config { + description + "This grouping defines ISIS address-family level multi-topology + config."; + + leaf enabled { + type boolean; + description + "Indicates whether multi-topology is enabled for this + address-family."; + } + } + + grouping isis-af-mt { + description + "This grouping defines ISIS address-family level multi-topology."; + + container multi-topology { + description + "This container defines ISIS address-family multi-topology + config and state."; + + + container config { + description + "Address-family multi-topology config."; + + uses isis-af-mt-config; + } + + container state { + config false; + description + "Address-family multi-topology state."; + + uses isis-af-mt-config; + } + } + } + + grouping micro-loop-af-avoidance { + description + "Micro-loop avoidance configuration"; + leaf sr-mpls-enabled { + type boolean; + default false; + description + "micro-loop-avoidance SR MPLS configuration"; + } + } + + grouping micro-loop-af-avoidance-top { + description + "Micro-loop avoidance configuration per af."; + container micro-loop-avoidance { + description + "Micro-loop avoidance Configuration per address family"; + container config { + uses micro-loop-af-avoidance; + } + container state { + config false; + uses micro-loop-af-avoidance; + } + } + } + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:global" + + "/oc-ni:afi-safi/oc-ni:af" { + uses isis-af-mt { + when "oc-ni:config/oc-ni:afi-name = 'oc-isis-types:IPV6' and " + + "oc-ni:config/oc-ni:safi-name = 'oc-isis-types:UNICAST'" { + description + "Applicable only for IPV6 UNICAST address-family."; + } + } + uses micro-loop-af-avoidance-top; + //TBD make this exclusive to global/micro-loop-avoidance/srv6_enabled config + } + + grouping isis-lsdb-mt-tlv-flags { + leaf overload-bit { + type boolean; + description + "OVERLOAD bit."; + } + + leaf attached-bit { + type boolean; + description + "ATTACH bit."; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol/oc-ni:isis/oc-ni:levels" + + "/oc-ni:level/oc-ni:link-state-database/oc-ni:lsp" + + "/oc-ni:tlvs/oc-ni:tlv/oc-ni:multi-topology" + + "/oc-ni:topologies/oc-ni:topology" + + "/oc-ni:state" { + uses isis-lsdb-mt-tlv-flags; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-isis-policy-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-isis-policy-deviations.yang new file mode 100644 index 000000000..080c4928e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-isis-policy-deviations.yang @@ -0,0 +1,22 @@ +module arcos-openconfig-isis-policy-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/isis-policy/deviations"; + prefix arc-oc-isis-pol-dev; + + import openconfig-routing-policy { + prefix oc-rpol; + } + + import openconfig-isis-policy { + prefix oc-isis-pol; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions/oc-rpol:igp-actions" + + "/oc-isis-pol:isis-actions/oc-isis-pol:config" + + "/oc-isis-pol:set-metric-type" { + deviate not-supported; + description "Not supported in this release."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-keychain-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-keychain-augments.yang new file mode 100644 index 000000000..0e86c7200 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-keychain-augments.yang @@ -0,0 +1,97 @@ +module arcos-openconfig-keychain-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/keychain/augments"; + prefix arc-oc-kc-aug; + + import openconfig-keychain { + prefix oc-kc; + } + + import openconfig-keychain-types { + prefix oc-kc-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module defines augmentation for Arrcus + implemention of the openconfig keychain module. + Copyright (c) 2022-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2022-12-15 { + description + "Initial Revision"; + } + + identity HMAC_SHA_224 { + base oc-kc-types:CRYPTO_TYPE; + description + "HMAC-SHA-224 keyed hash algorithm constructed from SHA-224 hash + function and used as a HMAC."; + } + + identity HMAC_SHA_384 { + base oc-kc-types:CRYPTO_TYPE; + description + "HMAC-SHA-384 keyed hash algorithm constructed from SHA-384 hash + function and used as a HMAC."; + } + + identity HMAC_SHA_512 { + base oc-kc-types:CRYPTO_TYPE; + description + "HMAC-SHA-512 keyed hash algorithm constructed from SHA-512 hash + function and used as a HMAC."; + } + + grouping key-lifetime-always { + leaf always { + type boolean; + description + "Indicates key lifetime is always valid."; + } + } + + augment "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key" + + "/oc-kc:send-lifetime/oc-kc:config" { + uses key-lifetime-always; + } + + augment "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key" + + "/oc-kc:send-lifetime/oc-kc:state" { + uses key-lifetime-always; + } + + grouping key-active-status { + leaf send-active { + type boolean; + description + "Indicates this key is active for sending + authentication information."; + } + + leaf receive-active { + type boolean; + description + "Indicates this key is active for validating received + authentication information."; + } + } + + augment "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key" + + "/oc-kc:state" { + uses key-active-status; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-keychain-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-keychain-deviations.yang new file mode 100644 index 000000000..df58bb7bc --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-keychain-deviations.yang @@ -0,0 +1,153 @@ +module arcos-openconfig-keychain-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/keychain/deviations"; + prefix arc-oc-kc-dev; + + import openconfig-keychain { + prefix oc-kc; + } + + import openconfig-keychain-types { + prefix oc-kc-types; + } + + import ietf-yang-types { + prefix yang; + } + + import arcos-system-types { + prefix arc-sys-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig keychain module. + Copyright (c) 2022-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2022-12-15 { + description + "Initial Revision"; + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:send-lifetime/oc-kc:config" + + "/oc-kc:start-time" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:send-lifetime/oc-kc:state" + + "/oc-kc:start-time" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:send-lifetime/oc-kc:config" + + "/oc-kc:end-time" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:send-lifetime/oc-kc:state" + + "/oc-kc:end-time" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:receive-lifetime/oc-kc:config" + + "/oc-kc:start-time" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:receive-lifetime/oc-kc:state" + + "/oc-kc:start-time" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:receive-lifetime/oc-kc:config" + + "/oc-kc:end-time" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:receive-lifetime/oc-kc:state" + + "/oc-kc:end-time" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:config/oc-kc:crypto-algorithm" { + deviate add { + must "current() != 'oc-kc-types:MD5' and " + + "current() != 'oc-kc-types:CRYPTO_NONE' and " + + "current() != 'oc-kc-types:SHA_1' and " + + "current() != 'oc-kc-types:HMAC_SHA_1_12' and " + + "current() != 'oc-kc-types:HMAC_SHA_1_20' and " + + "current() != 'oc-kc-types:HMAC_SHA_1_96' and " + + "current() != 'oc-kc-types:AES_28_CMAC_96'" { + error-message "crypto-algorithm is not supported"; + } + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:config/oc-kc:secret-key" { + deviate replace { + type arc-sys-types:encrypted-string; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:state/oc-kc:secret-key" { + deviate replace { + type arc-sys-types:encrypted-string; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:config/oc-kc:tolerance" { + deviate replace { + type uint32; + } + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key/oc-kc:receive-lifetime" { + deviate not-supported; + } + + deviation "/oc-kc:keychains/oc-kc:keychain" + + "/oc-kc:keys/oc-kc:key" + + "/oc-kc:send-lifetime/oc-kc:config/oc-kc:send-and-receive" { + deviate not-supported; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-lacp-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-lacp-deviations.yang new file mode 100644 index 000000000..fc47ba63f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-lacp-deviations.yang @@ -0,0 +1,84 @@ +module arcos-openconfig-lacp-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/lacp/deviations"; + prefix arc-oc-lacp-dev; + + import openconfig-lacp { + prefix oc-lacp; + } + + import openconfig-interfaces { + prefix oc-if; + } + + deviation "/oc-lacp:lacp/oc-lacp:config" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:state" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:config/oc-lacp:lacp-mode" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:config/oc-lacp:interval" { + deviate replace { + default FAST; + } + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:config/oc-lacp:system-priority" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:state/oc-lacp:lacp-mode" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:state/oc-lacp:system-priority" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:members/oc-lacp:member/oc-lacp:state" + + "/oc-lacp:activity" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:members/oc-lacp:member/oc-lacp:state" + + "/oc-lacp:system-id" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:members/oc-lacp:member/oc-lacp:state" + + "/oc-lacp:oper-key" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:members/oc-lacp:member/oc-lacp:state" + + "/oc-lacp:partner-id" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:members/oc-lacp:member/oc-lacp:state" + + "/oc-lacp:partner-key" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-lacp:lacp/oc-lacp:interfaces/oc-lacp:interface" + + "/oc-lacp:members/oc-lacp:member/oc-lacp:state" + + "/oc-lacp:counters" { + deviate not-supported; + description "Not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-lldp-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-lldp-augments.yang new file mode 100644 index 000000000..3a1b45fca --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-lldp-augments.yang @@ -0,0 +1,34 @@ +module arcos-openconfig-lldp-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/lldp/augments"; + prefix arc-oc-lldp-aug; + + import openconfig-lldp { + prefix oc-lldp; + } + + grouping lldp-l2-management-address { + leaf management-address { + type string; + description + "The Management Address is a mandatory TLV which identifies a + network address associated with the local LLDP agent, which + can be used to reach the agent on the port identified in the + Port ID TLV."; + } + + leaf management-address-type { + type string; + description + "The enumerated value for the network address type + identified in this TLV. This enumeration is defined in the + 'Assigned Numbers' RFC [RFC3232] and the + ianaAddressFamilyNumbers object."; + } + } + + augment "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface" + + "/oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:state" { + uses lldp-l2-management-address; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-lldp-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-lldp-deviations.yang new file mode 100644 index 000000000..5625eea87 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-lldp-deviations.yang @@ -0,0 +1,173 @@ +module arcos-openconfig-lldp-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/lldp/deviations"; + prefix arc-oc-lldp-dev; + + import openconfig-lldp { + prefix oc-lldp; + } + + import openconfig-lldp-types { + prefix oc-lldp-types; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import ietf-inet-types { + prefix inet; + } + + deviation "/oc-lldp:lldp/oc-lldp:config/oc-lldp:enabled" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:config/oc-lldp:chassis-id" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:config/oc-lldp:chassis-id-type" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:state/oc-lldp:chassis-id" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:state/oc-lldp:chassis-id-type" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:config/oc-lldp:suppress-tlv-advertisement" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:state/oc-lldp:enabled" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:state/oc-lldp:suppress-tlv-advertisement" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:state/" + + "oc-lldp:age" { + deviate replace { + type string; + } + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:state/" + + "oc-lldp:last-update" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:config" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:type" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:oui" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:oui-subtype" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:config" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:state" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:state/oc-lldp:type" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:state/oc-lldp:oui" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:state/oc-lldp:oui-subtype" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:custom-tlvs/" + + "oc-lldp:tlv/oc-lldp:state/oc-lldp:value" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:interfaces/oc-lldp:interface/" + + "oc-lldp:neighbors/oc-lldp:neighbor/oc-lldp:capabilities/" + + "oc-lldp:capability/oc-lldp:config" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-lldp:lldp/oc-lldp:config/oc-lldp:hello-timer" { + deviate replace { + type uint64 { + range "5..65534"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-local-routing-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-local-routing-augments.yang new file mode 100644 index 000000000..473fb08fc --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-local-routing-augments.yang @@ -0,0 +1,167 @@ +module arcos-openconfig-local-routing-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/local-routing/augments"; + prefix arc-oc-loc-rt-aug; + + import openconfig-network-instance { + prefix oc-netinst; + } + + import openconfig-local-routing { + prefix oc-loc-rt; + } + + import ietf-inet-types { + prefix inet; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module defines augment statements for Arrcus + implemention of the openconfig local-routing module. + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-06-20 { + description + "Static Route next-hop next-network-instance added"; + } + + revision 2019-06-11 { + description + " + * Static route next-hop implicit null label added; + "; + } + + revision 2017-06-11 { + description + "Initial Revision + * Static route next-hop preference added; + * Static route next-hop optional link local address added; + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + + // identity statements + + identity SPECIAL_MPLS_LABEL { + description + "A base identity type of reserved label types"; + } + + identity IMPLICIT-NULL { + base SPECIAL_MPLS_LABEL; + description + "Implicit Null Label"; + } + + // typedef statements + + typedef special-next-hop-label { + type identityref { + base SPECIAL_MPLS_LABEL; + } + description + "Special remote label to be used in the nexthop for locally generated + routes"; + } + + grouping static-route-config { + leaf description { + type string; + description + "An optional textual description for the route."; + } + + leaf preference { + type uint32; + description + "Specify the preference (or administrative distance) for the + configured static route when it is injected into RIB."; + } + + leaf local-label-index { + type uint32 { + range 0..1048575; + } + description + "Specify local label index for the configured static route; The label + is then assigned based on the configured label range and index."; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:static-routes" + + "/oc-netinst:static/oc-netinst:config" { + uses static-route-config; + } + + grouping link-local-addr-config { + leaf link-local-address { + type inet:ipv6-address; + description + "Specify the link-local address as next-hop if LOCAL_LINK type + has been configured."; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:static-routes/oc-netinst:static/oc-netinst:next-hops" + + "/oc-netinst:next-hop/oc-netinst:config" { + when "oc-netinst:next-hop = 'oc-loc-rt:LOCAL_LINK'"; + uses link-local-addr-config; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:static-routes/oc-netinst:static/oc-netinst:next-hops" + + "/oc-netinst:next-hop/oc-netinst:config" { + + leaf next-network-instance-name { + description + "Reference to network-instance."; + type oc-netinst:network-instance-ref; + } + } + + grouping remote-label-stack-config { + leaf-list remote-label-stack { + max-elements 3; + ordered-by user; + type union { + type uint32 { + range 0..1048575; + } + type special-next-hop-label; + } + must "boolean(../../oc-netinst:interface-ref/oc-netinst:config/oc-netinst:interface)" { + error-message "Interface must be configured."; + } + description + "Specify a stack of up-to 3 outgoing labels per-next-hop."; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:static-routes/oc-netinst:static/oc-netinst:next-hops" + + "/oc-netinst:next-hop/oc-netinst:config" { + uses remote-label-stack-config; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-messages-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-messages-deviations.yang new file mode 100644 index 000000000..fd061fb98 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-messages-deviations.yang @@ -0,0 +1,14 @@ +module arcos-openconfig-messages-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/messages/deviations"; + prefix arc-oc-messages-dev; + + import openconfig-messages { + prefix oc-messages; + } + + deviation "/oc-messages:messages" { + deviate not-supported; + description "Not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-mpls-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-mpls-augments.yang new file mode 100644 index 000000000..539c03218 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-mpls-augments.yang @@ -0,0 +1,135 @@ +module arcos-openconfig-mpls-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/mpls/augments"; + + prefix arc-oc-mpls-aug; + + /* + * Import basic things + */ + import openconfig-network-instance { prefix oc-netinst; } + + revision 2023-01-13 { + description + "* Add evpn, evpn-imet and evpn-esi label-blocks."; + } + + revision 2018-10-20 { + description + "Initial Revision + * Add index field to the state MPLS reserved label block + "; + reference + "RFC 7950: The YANG 1.1 Data Modeling Language"; + } + + /* + * Add index field to MPLS reserved block + * This is because reserved blocks are maintained in an array + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:global/oc-netinst:reserved-label-blocks" + + "/oc-netinst:reserved-label-block/oc-netinst:state" { + leaf index { + type uint32; + config false; + description + "For speed we maintain label blocks in an array and each SRGB + just stores the indeces of the blocks which it uses. So to + ease debugging we want to display that index when showing a + reserved block"; + } + + leaf allocated-by { + type string; + description "Application which use this block"; + } + } + + grouping dynamic-label-block-used-labels { + leaf-list used-labels { + type uint32; + description + "List of labels that have already been allocated by protocols + referencing the dynamic label block."; + } + } + + grouping label-block-list { + leaf-list mpls-label-blocks { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:global/oc-netinst:reserved-label-blocks" + + "/oc-netinst:reserved-label-block/oc-netinst:config/oc-netinst:local-id"; + } + description + "A list of references to the label blocks that are used to make + up dynamic label block."; + } + } + + grouping dynamic-label-block-top { + description "Configuration and state parameters relating to + Dynamic Label Blocks."; + + container config { + description "Configuration parameters relating to Dynamic Label Blocks."; + + uses label-block-list; + } + + container state { + config false; + description "State parameters relating to Dynamic Label Blocks."; + + uses label-block-list; + + leaf total-reserved-labels { + type uint32; + description + "The total number of labels that are available for dynamic label block."; + } + + leaf total-used-labels { + type uint32; + description + "The total number of labels that have already been allocated by + protocols referencing the dynamic label block."; + } + + uses dynamic-label-block-used-labels; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls" { + container dynamic-label { + description "Configuration and operational parameters relating to + Dynamic Label Blocks."; + uses dynamic-label-block-top; + } + container evpn-label { + description "Configuration and operational parameters relating to + EVPN common Label Blocks."; + uses dynamic-label-block-top; + } + container evpn-imet-label { + description "Configuration and operational parameters relating to + EVPN IMET Label Blocks."; + uses dynamic-label-block-top { + refine "config/mpls-label-blocks" { + max-elements 1; + } + } + } + container evpn-esi-label { + description "Configuration and operational parameters relating to + EVPN ESI Label Blocks."; + uses dynamic-label-block-top { + refine "config/mpls-label-blocks" { + max-elements 1; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-augments-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-augments-deviations.yang new file mode 100644 index 000000000..270c90eb5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-augments-deviations.yang @@ -0,0 +1,224 @@ +module arcos-openconfig-network-instance-augments-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/network-instance/augments/deviations"; + prefix arc-oc-netinst-aug-dev; + + import openconfig-network-instance { + prefix oc-ni; + } + + import arcos-openconfig-network-instance-augments { + prefix arc-oc-netinst-aug; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig network instance module."; + + revision 2019-01-05 { + description + "Initial Revision"; + + reference + "RFC 7950: The YANG 1.1 Data Modeling Language"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:index" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:weight" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:decapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:encapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:popped-mpls-label-stack" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:origin-protocol" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:interface-ref/arc-oc-netinst-aug:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:fdb/arc-oc-netinst-aug:mac-table-state" + + "/arc-oc-netinst-aug:entries/arc-oc-netinst-aug:entry" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:age" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels-units" + + "/arc-oc-netinst-aug:ip-tunnel-unit-entry/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:index" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:fdb/arc-oc-netinst-aug:mac-table-state" + + "/arc-oc-netinst-aug:entries/arc-oc-netinst-aug:entry" + + "/arc-oc-netinst-aug:interface/arc-oc-netinst-aug:interface-ref" + + "/arc-oc-netinst-aug:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels-units" + + "/arc-oc-netinst-aug:ip-tunnel-unit-entry/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:weight" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:fdb/arc-oc-netinst-aug:mac-table-state" + + "/arc-oc-netinst-aug:entries/arc-oc-netinst-aug:entry" + + "/arc-oc-netinst-aug:interface/arc-oc-netinst-aug:interface-ref" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:subinterface" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels-units" + + "/arc-oc-netinst-aug:ip-tunnel-unit-entry/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:decapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:fdb-units/arc-oc-netinst-aug:fdb-unit-entry" + + "/arc-oc-netinst-aug:mac-table-state/arc-oc-netinst-aug:entries" + + "/arc-oc-netinst-aug:entry/arc-oc-netinst-aug:state/arc-oc-netinst-aug:age" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels-units" + + "/arc-oc-netinst-aug:ip-tunnel-unit-entry/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:encapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:fdb-units/arc-oc-netinst-aug:fdb-unit-entry" + + "/arc-oc-netinst-aug:mac-table-state/arc-oc-netinst-aug:entries" + + "/arc-oc-netinst-aug:entry/arc-oc-netinst-aug:interface" + + "/arc-oc-netinst-aug:interface-ref/arc-oc-netinst-aug:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels-units" + + "/arc-oc-netinst-aug:ip-tunnel-unit-entry/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:popped-mpls-label-stack" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:fdb-units/arc-oc-netinst-aug:fdb-unit-entry" + + "/arc-oc-netinst-aug:mac-table-state/arc-oc-netinst-aug:entries" + + "/arc-oc-netinst-aug:entry/arc-oc-netinst-aug:interface" + + "/arc-oc-netinst-aug:interface-ref/arc-oc-netinst-aug:state" + + "/arc-oc-netinst-aug:subinterface" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels-units" + + "/arc-oc-netinst-aug:ip-tunnel-unit-entry/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state/arc-oc-netinst-aug:origin-protocol" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels-units" + + "/arc-oc-netinst-aug:ip-tunnel-unit-entry/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:interface-ref/arc-oc-netinst-aug:config" { + deviate not-supported; + description + "Not supported in this release"; + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-augments.yang new file mode 100644 index 000000000..60e7eea8d --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-augments.yang @@ -0,0 +1,420 @@ +module arcos-openconfig-network-instance-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/network-instance/augments"; + prefix arc-oc-netinst-aug; + + import openconfig-network-instance { + prefix oc-netinst; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-aft { + prefix oc-aft; + } + + import openconfig-aft-types { + prefix oc-aftt; + } + + import arcos-aft-types { + prefix arc-aft-types; + } + + import ietf-inet-types { + prefix inet; + } + + import arcos-mpls-ldp { + prefix arc-mpls-ldp; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + ArcOS Network instance augments. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-29 { + description "Add l2ni config for mac-limit, pkt-action"; + } + + grouping ip-tunnel-state { + description + "Operational state parameters for IP tunnels"; + list tunnels { + key tunnel-id; + description + "List of IP tunnels"; + + leaf tunnel-id { + type uint32; + description + "Tunnel identifier"; + } + + container state { + leaf tunnel-type { + type oc-aftt:encapsulation-header-type; + description + "Type of IP tunnel"; + } + + leaf src-ip-address { + type inet:ip-address; + description + "Source IP address of tunnel"; + } + + leaf dst-ip-address { + type inet:ip-address; + description + "Destination IP address of tunnel"; + } + + leaf-list sid-list { + type inet:ipv6-address-no-zone; + description + "The list of SIDs added to SRv6 tunnel header"; + } + + leaf-list hw-id-list { + type uint32; + description + "The list of ASIC specific IDs"; + } + + leaf ing-ucast-packets { + type uint64; + description + "Destination ingress packets of ucast"; + } + + leaf ing-mcast-packets { + type uint64; + description + "Destination ingress packets of mcast"; + } + + leaf ing-bcast-packets { + type uint64; + description + "Destination ingress packets of bcast"; + } + + leaf egr-ucast-packets { + type uint64; + description + "Destination egress packets of ucast"; + } + + leaf egr-mcast-packets { + type uint64; + description + "Destination egress packets of mcast"; + } + + leaf egr-bcast-packets { + type uint64; + description + "Destination egress packets of bcast"; + } + + leaf ing-ucast-bytes { + type uint64; + description + "Destination ingress bytes of ucast"; + } + + leaf ing-mcast-bytes { + type uint64; + description + "Destination ingress bytes of mcast"; + } + + leaf ing-bcast-bytes { + type uint64; + description + "Destination ingress bytes of bcast"; + } + + leaf egr-ucast-bytes { + type uint64; + description + "Destination egress bytes of ucast"; + } + + leaf egr-mcast-bytes { + type uint64; + description + "Destination egress bytes of mcast"; + } + + leaf egr-bcast-bytes { + type uint64; + description + "Destination egress bytes of bcast"; + } + } + + uses oc-aft:aft-common-nhop-structural; + } + } + + grouping ip-tunnel-state-units { + description + "Per forwarding unit view of ip tunnels"; + + container ip-tunnels-units { + config false; + description + "Per forwarding unit view of ip tunnels"; + + list ip-tunnel-unit-entry { + key "unit-id"; + description + "List of forwarding units"; + + leaf unit-id { + type uint32; + description + "Uniquely identifies a forwarding unit"; + } + + uses ip-tunnel-state; + } + } + } + + grouping l2ni-mac-table-state-top { + description + "Top-level grouping for MAC table state list"; + + + container mac-table-state { + config false; + + description + "Table of learned or statically configured MAC addresses and + corresponding VLANs in the bridge domain"; + + container entries { + description + "Enclosing container for list of MAC table entries"; + + list entry { + key "mac-address"; + description + "List of learned MAC addresses"; + + leaf mac-address { + type leafref { + path "../state/mac-address"; + } + description + "Reference to mac-address list key"; + } + + container state { + + + description + "Operational state data for MAC table entries"; + + uses oc-netinst:l2ni-mac-table-config; + uses oc-netinst:l2ni-mac-table-state; + leaf nexthop-ecmp-id { + type uint32; + description + "Ecmp id of the nexthop"; + } + leaf nexthop-tunnel-id { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance/" + + "arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels/" + + "arc-oc-netinst-aug:tunnel-id"; + } + description + "ID of tunnel that nexthop recurses over"; + } + } + container interface { + description + "Reference to the base and/or subinterface for the + MAC table entry"; + + uses oc-if:interface-ref; + } + } + } + } + } + + grouping fdb-units-top { + description + "Top-level grouping for MAC table state list per unit"; + + + container fdb-units { + config false; + + description + "Table of learned or statically configured MAC addresses and + corresponding VLANs in the bridge domain per asic unit"; + + list fdb-unit-entry { + key "unit-id"; + description + "List of learned MAC addresses"; + + leaf unit-id { + type uint32; + description + "Device unit number"; + } + uses l2ni-mac-table-state-top; + } + } + } + identity MAC_LIMIT_PACKET_ACTION_TYPE { + description "Base identity for Mac limit packet action type."; + } + + identity FLOOD_ACTION { + base MAC_LIMIT_PACKET_ACTION_TYPE; + description "Flood unknown Destination Mac packets."; + } + + identity DROP_ACTION { + base MAC_LIMIT_PACKET_ACTION_TYPE; + description "Drop all packets."; + } + + grouping l2ni-fdb-mac-config { + description + "Parameters relating to FDB behaviour relating to MAC + addresses"; + + leaf maximum-entries { + type uint16 { + range 1..65535; + } + default 65535; + description + "The maximum number of MAC address entries that should be + accepted into the FDB"; + } + leaf packet-action { + type identityref { + base MAC_LIMIT_PACKET_ACTION_TYPE; + } + default FLOOD_ACTION; + description + "Packet action when number of learnt mac entries exceed the configured limit"; + } + } + + grouping l2ni-fdb-mac-top { + container config { + description + "Configuration parameters relating to the FDB"; + uses l2ni-fdb-mac-config; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + container ip-tunnels { + config false; + description + "Operation state parameters for IP tunnels"; + uses ip-tunnel-state; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + uses ip-tunnel-state-units; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state" { + leaf nexthop-type { + type arc-aft-types:dpal-nexthop-type; + description + "nexthop type"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/arc-oc-netinst-aug:ip-tunnels-units" + + "/arc-oc-netinst-aug:ip-tunnel-unit-entry/arc-oc-netinst-aug:tunnels" + + "/arc-oc-netinst-aug:next-hops/arc-oc-netinst-aug:next-hop" + + "/arc-oc-netinst-aug:state" { + leaf nexthop-type { + type arc-aft-types:dpal-nexthop-type; + description + "nexthop type"; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:fdb" { + uses l2ni-fdb-mac-top; + uses l2ni-mac-table-state-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + uses fdb-units-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:global" { + uses arc-mpls-ldp:mpls-ldp-fec-filter; + uses arc-mpls-ldp:mpls-ldp-transport-address-config; + uses arc-mpls-ldp:mpls-ldp-max-local-binding-config; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" { + uses arc-mpls-ldp:mpls-ldp-max-remote-binding-config; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" { + uses arc-mpls-ldp:mpls-ldp-sessions; + uses arc-mpls-ldp:mpls-ldp-label-mapping; + uses arc-mpls-ldp:mpls-ldp-hello-adjacency; + } + + grouping mpls-icmp-tunnelling { + description + "Enable/disable ICMP Tunnelling"; + + leaf icmp-tunnelling { + type boolean; + default true; + description + "Enable/Disable ICMP Tunnelling."; + } + } + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:global/oc-netinst:config" { + uses mpls-icmp-tunnelling; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-deviations.yang new file mode 100644 index 000000000..464bc7ee4 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-deviations.yang @@ -0,0 +1,4960 @@ +module arcos-openconfig-network-instance-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/network-instance/deviations"; + prefix arc-oc-netinst-dev; + + import openconfig-isis-types { + prefix oc-isis-types; + } + import openconfig-local-routing { + prefix oc-loc-rt; + } + import openconfig-network-instance { + prefix oc-netinst; + } + import openconfig-network-instance-types { + prefix oc-ni-types; + } + import arcos-openconfig-network-instance-types { + prefix arc-oc-ni-types; + } + import openconfig-if-ip { + prefix oc-ip; + } + import openconfig-policy-types { + prefix oc-pol-types; + } + import openconfig-types { + prefix oc-types; + } + import ietf-inet-types { + prefix inet; + } + import arcos-isis-types { + prefix arc-isis-types; + } + import openconfig-ospf-types { + prefix oc-ospf-types; + } + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + import arcos-system-types { + prefix arc-sys-types; + } + + organization + "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place, + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module defines deviate statements for Arrcus + implemention of the openconfig network-instance module. + Copyright (c) 2016-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2023-04-27 { + description + "Remove must statment that restricts interface to one network-instance"; + } + + revision 2023-03-31 { + description + "Limit the network-instance name length to 15"; + } + revision 2022-10-28 { + description + "Change LDP authentication keys to be encrypted strings."; + } + + revision 2022-09-26 { + description + "Remove the deviate not-supported of mac-table entry subinterface"; + } + + revision 2022-06-20 { + description + "Replaced Static route next-hop must statement with validation point"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:config/oc-netinst:name" { + deviate replace { + type string { + length 1..15; + } + } + } + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:ospfv2" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:config/oc-netinst:route-distinguisher" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:state/oc-netinst:route-distinguisher" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:config/oc-netinst:enabled" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:state/oc-netinst:enabled" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:config/oc-netinst:enabled" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:protocols" + + "/oc-netinst:protocol/oc-netinst:state/oc-netinst:enabled" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:interfaces" + + "/oc-netinst:interface" { + deviate add { + max-elements 1024; + } + description + "Restrict L2 sub interface to a single network instance"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:state/oc-netinst:associated-address-families" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:config/oc-netinst:associated-address-families" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:config/oc-netinst:router-id" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:state/oc-netinst:router-id" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:inter-instance-policies" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:connection-points" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:table-connections/oc-netinst:table-connection" + + "/oc-netinst:config/oc-netinst:src-protocol" { + deviate replace { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + } + deviate add { + must "current() != 'oc-pol-types:LOCAL_AGGREGATE'" { + error-message "src-protocol not supported yet"; + } + } + description + "Do not go through network-instance/table."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:table-connections/oc-netinst:table-connection" + + "/oc-netinst:config/oc-netinst:address-family" { + deviate replace { + type identityref { + base oc-types:ADDRESS_FAMILY; + } + } + deviate add { + must "current() = 'oc-types:IPV4' or " + + "current() = 'oc-types:IPV6'" { + error-message "address-family not supported yet"; + } + } + description + "Do not go through network-instance/table."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:table-connections/oc-netinst:table-connection" + + "/oc-netinst:config/oc-netinst:dst-protocol" { + deviate replace { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + } + deviate add { + must "current() = 'oc-pol-types:BGP' or " + + "current() = 'oc-pol-types:ISIS' or " + + "current() = 'oc-pol-types:OSPF' or " + + "current() = 'oc-pol-types:OSPF3'" { + error-message "dest-protocol not supported yet"; + } + must 'current() != ../oc-netinst:src-protocol' { + error-message "dest-protocol must be different then src-protocol"; + } + } + description + "Do not go through network-instance/table."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:table-connections/oc-netinst:table-connection" + + "/oc-netinst:config/oc-netinst:import-policy" { + deviate add { + max-elements 1; + } + description + "Only support one policy in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:table-connections/oc-netinst:table-connection" + + "/oc-netinst:config/oc-netinst:default-import-policy" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:table-connections/oc-netinst:table-connection" + + "/oc-netinst:state/oc-netinst:default-import-policy" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:encapsulation" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:config/oc-netinst:type" { + deviate add { + must "current() = 'oc-ni-types:L2VLAN' or current() = 'oc-ni-types:L3VRF' or current() = 'arc-oc-ni-types:L2P2P_EVPN'" + + "or current() = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + error-message "Unsupported network-instance type"; + } + } + } + + /* + * Deviations for static routes + */ + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:local-aggregates" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:static-routes" + + "/oc-netinst:static/oc-netinst:next-hops/oc-netinst:next-hop" + + "/oc-netinst:config/oc-netinst:recurse" { + deviate not-supported; + description + "Resursive next-hop not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:static-routes" + + "/oc-netinst:static/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:static-routes" + + "/oc-netinst:static/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:static-routes" + + "/oc-netinst:static/oc-netinst:next-hops/oc-netinst:next-hop" + + "/oc-netinst:interface-ref/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:static-routes" + + "/oc-netinst:static/oc-netinst:next-hops/oc-netinst:next-hop" { + deviate add { + must "(boolean(oc-netinst:interface-ref/config/interface) != 'true') or (boolean(oc-netinst:config/oc-netinst:next-hop) != 'true') or (oc-netinst:config/oc-netinst:next-hop != 'oc-loc-rt:DROP')" { + error-message "Next-hop must not be DROP if interface is specified."; + } + } + } + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:static-routes" + + "/oc-netinst:static/oc-netinst:next-hops" { + deviate add { + must 'boolean(oc-netinst:next-hop)' { + error-message "Static route has no path/next-hop."; + } + must "(count(oc-netinst:next-hop[oc-netinst:config/oc-netinst:next-hop = 'oc-loc-rt:DROP']) < 2)" { + error-message "Only one next-hop can be configured to DROP."; + } + must "(count(oc-netinst:next-hop[oc-netinst:interface-ref/config/interface]) = 0) or " + + "((count(oc-netinst:next-hop[oc-netinst:interface-ref/config/interface]) + " + + "count(oc-netinst:next-hop[oc-netinst:config/oc-netinst:next-hop = 'oc-loc-rt:DROP'])) = " + + "count(oc-netinst:next-hop))" { + error-message "All paths must be configured with interface / next-hop as DROP, or without interface."; + } + } + } + + /* + * Add this deviation of "unique" statement to enfornce unique + * protocol identifiers per network-instance. This is needed + * for single-instance protocol components including STATIC and + * BGP. A separate solution is under investigation in order to + * allow multiple instances per network-instance for IGPs like + * IS-IS and OSPF. + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" { + deviate add { + unique "oc-netinst:identifier"; + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:policy-forwarding" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:index" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:weight" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:decapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:encapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:popped-mpls-label-stack" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:origin-protocol" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:interface-ref" + + "/oc-netinst:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:index" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:weight" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:decapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:encapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:popped-mpls-label-stack" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:origin-protocol" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:interface-ref" + + "/oc-netinst:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:index" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:weight" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:decapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:encapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:origin-protocol" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:interface-ref" + + "/oc-netinst:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:policy-forwarding" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:index" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:weight" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:decapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:encapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:popped-mpls-label-stack" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:origin-protocol" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv4-unicast/oc-netinst:ipv4-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:interface-ref" + + "/oc-netinst:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:index" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:weight" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:decapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:encapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:popped-mpls-label-stack" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:origin-protocol" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:ipv6-unicast/oc-netinst:ipv6-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:interface-ref" + + "/oc-netinst:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:index" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:weight" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:decapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:encapsulate-header" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:state/oc-netinst:origin-protocol" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:afts-units/oc-netinst:aft-unit-entry" + + "/oc-netinst:afts/oc-netinst:mpls/oc-netinst:label-entry" + + "/oc-netinst:next-hops/oc-netinst:next-hop/oc-netinst:interface-ref" + + "/oc-netinst:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + /* + * Deviation for ISIS. + */ + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:config/oc-netinst:authentication-check" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:state/oc-netinst:authentication-check" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:config/oc-netinst:instance" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:config/oc-netinst:net" { + deviate add { + max-elements 3; + } + description + "Only suppport three area-address in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:config/oc-netinst:maximum-area-addresses" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:config/oc-netinst:poi-tlv" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:config/oc-netinst:iid-tlv" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:config/oc-netinst:fast-flooding" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:lsp-bit/oc-netinst:overload-bit/oc-netinst:reset-triggers" + + "/oc-netinst:reset-trigger/oc-netinst:config/oc-netinst:reset-trigger" { + deviate add { + must "(not (current() = 'oc-isis-types:WAIT_FOR_SYSTEM'))" { + error-message "WAIT_FOR_SYSTEM not supported yet"; + } + } + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:timers/oc-netinst:lsp-generation" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:inter-level-propagation-policies" + + "/oc-netinst:level1-to-level2" + + "/oc-netinst:config/oc-netinst:import-policy" { + deviate add { + max-elements 1; + } + description + "Only support one policy in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:inter-level-propagation-policies" + + "/oc-netinst:level2-to-level1" + + "/oc-netinst:config/oc-netinst:import-policy" { + deviate add { + max-elements 1; + } + description + "Only support one policy in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:inter-level-propagation-policies" + + "/oc-netinst:level1-to-level2" + + "/oc-netinst:config/oc-netinst:default-import-policy" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:inter-level-propagation-policies" + + "/oc-netinst:level2-to-level1" + + "/oc-netinst:config/oc-netinst:default-import-policy" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:nsr" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:mpls/oc-netinst:igp-ldp-sync/oc-netinst:config" + + "/oc-netinst:post-session-up-delay" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:mpls/oc-netinst:igp-ldp-sync/oc-netinst:config" + + "/oc-netinst:enabled" { + deviate replace { + default false; + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:igp-shortcuts" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:afi-safi/oc-netinst:af/oc-netinst:config/oc-netinst:metric" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:afi-safi/oc-netinst:af/oc-netinst:state/oc-netinst:metric" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:afi-safi/oc-netinst:af/oc-netinst:config/oc-netinst:safi-name" { + deviate add { + must "current() = 'oc-isis-types:UNICAST'" { + error-message "SAFI not supported yet"; + } + } + description + "Do not support multicast SAFI in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:afi-safi/oc-netinst:af/oc-netinst:multi-topology" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:timers/oc-netinst:spf/oc-netinst:config" + + "/oc-netinst:spf-hold-interval" { + deviate replace { + type uint64 { + range "1..120000"; + } + } + description + "Add range for spf-hold-interval limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:timers/oc-netinst:spf/oc-netinst:config" + + "/oc-netinst:spf-first-interval" { + deviate replace { + type uint64 { + range "1..120000"; + } + } + description + "Add range and default for spf-first-interval limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:transport/oc-netinst:config/oc-netinst:lsp-mtu-size" { + deviate replace { + type uint16 { + range "128..65535"; + } + } + description + "Add range for lsp-mtu-size"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:timers/oc-netinst:spf/oc-netinst:config" + + "/oc-netinst:spf-second-interval" { + deviate replace { + type uint64 { + range "1..120000"; + } + } + description + "Add range and default for spf-second-interval limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" + + "/oc-netinst:reference-bandwidth/oc-netinst:config/oc-netinst:reference-bandwidth" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description + "Add range for IS-IS reference-bandwidth"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:config/oc-netinst:authentication-check" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:state/oc-netinst:authentication-check" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:config/oc-netinst:metric-style" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:state/oc-netinst:lsp-id" { + deviate replace { + type arc-isis-types:lsp-name; + } + description + "Support use of name"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:ipv4-te-router-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:ipv6-te-router-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:instance-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:ipv4-srlg" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:ipv6-srlg" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:purge-oi" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:is-reachability" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:state/oc-netinst:system-id" { + deviate replace { + type arc-isis-types:node-name; + } + description + "Fix incorrect use of System-Id as the key and support use of name."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:state/oc-netinst:system-id" { + deviate replace { + type arc-isis-types:node-name; + } + description + "Fix incorrect use of System-Id as the key and support use of name."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:ipv4-internal-reachability" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:ipv4-external-reachability" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:adjacency-sid" { + deviate not-supported; + description + "Correct adjacency SID is implemented in augmentation."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:admin-group" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:available-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:bandwidth-constraints" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:extended-admin-group" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:ipv4-interface-address" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:ipv4-neighbor-address" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:ipv6-interface-address" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:ipv6-neighbor-address" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:lan-adjacency-sid" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-attributes" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-delay" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-delay-variation" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-loss" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-protection-type" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:max-link-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:max-reservable-link-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:min-max-link-delay" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:residual-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:te-default-metric" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:unconstrained-lsp" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:unreserved-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-is-reachability" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:utilized-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:adjacency-sid" { + deviate not-supported; + description + "Correct adjacency SID is implemented in augmentation."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:admin-group" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:available-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:bandwidth-constraints" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:extended-admin-group" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:ipv4-interface-address" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:ipv4-neighbor-address" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:ipv6-interface-address" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:ipv6-neighbor-address" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:lan-adjacency-sid" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-attributes" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-delay" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-delay-variation" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-loss" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:link-protection-type" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:max-link-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:max-reservable-link-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:min-max-link-delay" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:residual-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:te-default-metric" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:unconstrained-lsp" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:unreserved-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-isn" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:instances/oc-netinst:instance/oc-netinst:subTLVs" + + "/oc-netinst:subTLVs/oc-netinst:utilized-bandwidth" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-ipv4-reachability" + + "/oc-netinst:prefixes/oc-netinst:prefix/oc-netinst:subTLVs/oc-netinst:subTLVs" + + "/oc-netinst:ipv4-source-router-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:extended-ipv4-reachability" + + "/oc-netinst:prefixes/oc-netinst:prefix/oc-netinst:subTLVs/oc-netinst:subTLVs" + + "/oc-netinst:ipv6-source-router-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:ipv6-reachability" + + "/oc-netinst:prefixes/oc-netinst:prefix/oc-netinst:subTLVs/oc-netinst:subTLVs" + + "/oc-netinst:ipv4-source-router-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:ipv6-reachability" + + "/oc-netinst:prefixes/oc-netinst:prefix/oc-netinst:subTLVs/oc-netinst:subTLVs" + + "/oc-netinst:ipv6-source-router-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-ipv6-reachability" + + "/oc-netinst:prefixes/oc-netinst:prefix/oc-netinst:subTLVs/oc-netinst:subTLVs" + + "/oc-netinst:ipv4-source-router-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:mt-ipv6-reachability" + + "/oc-netinst:prefixes/oc-netinst:prefix/oc-netinst:subTLVs/oc-netinst:subTLVs" + + "/oc-netinst:ipv6-source-router-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:isis-neighbor-attribute" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:isis-alias-id" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp" + + "/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:multi-topology" + + "/oc-netinst:topologies/oc-netinst:topology" + + "/oc-netinst:state/oc-netinst:attributes" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:traffic-engineering" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:route-preference" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:afi-safi/oc-netinst:af/oc-netinst:safi-name" { + deviate add { + must "current() = 'oc-isis-types:UNICAST'" { + error-message "SAFI not supported yet"; + } + } + description + "Do not support multicast SAFI in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:levels/oc-netinst:level" + + "/oc-netinst:afi-safi/oc-netinst:af/oc-netinst:config/oc-netinst:metric" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:levels/oc-netinst:level" + + "/oc-netinst:afi-safi/oc-netinst:af/oc-netinst:state/oc-netinst:metric" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:levels/oc-netinst:level" + + "/oc-netinst:afi-safi/oc-netinst:af/oc-netinst:segment-routing" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:levels/oc-netinst:level" + + "/oc-netinst:afi-safi" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:levels/oc-netinst:level" + + "/oc-netinst:config/oc-netinst:passive" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:levels/oc-netinst:level" + + "/oc-netinst:state/oc-netinst:passive" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:levels/oc-netinst:level" + + "/oc-netinst:packet-counters/oc-netinst:esh" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:levels/oc-netinst:level" + + "/oc-netinst:packet-counters/oc-netinst:ish" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:config/oc-netinst:hello-padding" { + deviate not-supported; + description + "Not supported in this release"; + } + + /* + * Make circuit-type to be operation state only and change the + * type to the level-bits which is more accurate based on protocol + * specificiation. + */ + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:config/oc-netinst:circuit-type" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:interfaces" + + "/oc-netinst:interface/oc-netinst:state/oc-netinst:circuit-type" { + deviate replace { + type identityref { + base arc-isis-types:level-bits; + } + } + description + "Fix incorrect use of the term circuit-type."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:fdb/oc-netinst:config" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:fdb/oc-netinst:state" { + deviate not-supported; + description "Not supported in this release"; + } + + /* no support for per-mac vlan or multiple vlans in an l2ni */ + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:fdb/oc-netinst:mac-table/oc-netinst:entries/oc-netinst:entry/oc-netinst:state"{ + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:fdb/oc-netinst:mac-table/oc-netinst:entries/oc-netinst:entry/oc-netinst:interface" + + "/oc-netinst:interface-ref/oc-netinst:state" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:fdb/oc-netinst:mac-table/oc-netinst:entries/oc-netinst:entry/oc-netinst:config" + + "/oc-netinst:vlan" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:fdb/oc-netinst:mac-table/oc-netinst:entries/oc-netinst:entry/oc-netinst:interface" + + "/oc-netinst:interface-ref/oc-netinst:state/oc-netinst:subinterface" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:fdb/oc-netinst:mac-table/oc-netinst:entries/oc-netinst:entry" + + "/oc-netinst:state/oc-netinst:age" { + deviate not-supported; + description "Not supported in this release"; + } + + /* protocol and table-conn supported for L3VRF only */ + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:config/oc-netinst:identifier" { + deviate add { + must "(../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF') or " + + "(../identifier = 'oc-pol-types:BGP' and " + + "((../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L2VLAN') or " + + "(../../../../oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2P2P_EVPN') or " + + "(../../../../oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE')))" { + error-message "Cannot configure protocol instance in this mode"; + } + } + description + "protocol only supported on l3 network instance"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:table-connections/oc-netinst:table-connection" { + deviate add { + must "../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF'" { + error-message "table-connection may only be configured for default or mamagement L3VRF network instance type"; + } + } + description + "table-connection only supported on l3 network instance"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:fdb/oc-netinst:mac-table/oc-netinst:entries/oc-netinst:entry" { + deviate add { + must "../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L2VLAN' and ../../../../oc-netinst:config/oc-netinst:vlan" { + error-message "mac entry may only be configured in L2VLAN network instance with a valid vlan-id"; + } + } + description + "mac entry may only be configured in L2VLAN network instance with a valid vlan-id"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:config/oc-netinst:type" { + deviate add { + default "oc-ni-types:L3VRF"; + } + } + + /* + * We do not want RSVP + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:te-global-attributes" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:te-interface-attributes" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:rsvp-te" { + deviate not-supported; + description "Not supported in this release"; + } + + /* + * WE do not want lsps + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:lsps" { + deviate not-supported; + description "Not supported in this release"; + } + + /* + * We do not want to have configured MPLS attributes per interface + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:global/oc-netinst:interface-attributes" { + deviate not-supported; + description "Not supported in this release"; + } + + /* + * Limit the number of reserved blocks to 32 + * NOTE: + * This number MUST match "LBLMGR_RESERVED_BLOCK_NUM_MAX" + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:global/oc-netinst:reserved-label-blocks" + + "/oc-netinst:reserved-label-block" { + deviate add { + max-elements 32; + } + description "Only up to 32 reserved-blocks."; + } + + + /* + * the yang model has segment routing as a signalling protocol + * It has two things + * - per SID (and even per EXP bits value) counter + * - Some per interface counters for SIDs + * - Some segment routing enablement per interface + * We do not support per-route or per-label counters + * We do not have per interface SR enable,ent + * So I will deviate segment-routing as an MPLS signaling protocol + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:segment-routing" { + deviate not-supported; + description "Not supported in this release"; + } + + /* + * For this release, we will NOT support SRLB + * If you add this deviation, make sure that you deviate + * SRLB configuration and state under ISIS + * If you only deviate config but not state or vice versa, you will + * get a build error + */ + /* deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srlbs" { + deviate not-supported; + description "Not supported in this release"; + } */ + + /* + * For this release we only support SR-MPLS + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srgbs/oc-netinst:srgb/oc-netinst:config/oc-netinst:dataplane-type" { + deviate add { + must "current() = 'MPLS'" { + error-message "MPLS dataplane-type is the only supported SR configuration in this release"; + } + } + description "Only supporting SR-MPLS in this release"; + } + + /* + * Only support up to 28 reserved blocks per SRGB + * The number 28 came from the SR-capability sub-TLV in ISIS. All + * blocks used by an ISIS process MUST fit into a 255 byte sub-TLV + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srgbs/oc-netinst:srgb/oc-netinst:config" + + "/oc-netinst:mpls-label-blocks" { + deviate add { + max-elements 28; + } + description "Only support maximum of 28 blocks per SRGB."; + } + + /* + * Only support up to 8 SRGBs + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srgbs/oc-netinst:srgb" { + deviate add { + max-elements 8; + } + description "Only support maximum of 8 SRGBs."; + } + + /* + * LDP supports only default VRF. + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:global/oc-netinst:config/oc-netinst:lsr-id" { + deviate add { + must "../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + deviate replace { + type inet:ip-address; + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:global/oc-netinst:authentication/oc-netinst:config/oc-netinst:enable" { + deviate add { + must "../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:global/oc-netinst:authentication/oc-netinst:config/oc-netinst:authentication-key" { + deviate add { + must "../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:global/oc-netinst:attributes/oc-netinst:config/oc-netinst:php-type" { + deviate add { + must "../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:global/oc-netinst:attributes/oc-netinst:config/oc-netinst:php-enable" { + deviate add { + must "../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:global/oc-netinst:attributes/oc-netinst:config/oc-netinst:label-distribution-mode" { + deviate add { + must "../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:interface-attributes/oc-netinst:config/oc-netinst:hello-holdtime" { + deviate add { + must "../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:interface-attributes/oc-netinst:config/oc-netinst:hello-interval" { + deviate add { + must "../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:interface-attributes/oc-netinst:config/oc-netinst:link-hello" { + deviate add { + must "../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:interface-attributes/oc-netinst:interfaces/oc-netinst:interface" { + deviate add { + must "../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:neighbors/oc-netinst:neighbor" { + deviate add { + must "../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + +/* + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp"+ + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config/oc-netinst:lsr-id" { + deviate add { + must "../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config/oc-netinst:label-space-id" { + deviate add { + must "../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:authentication/oc-netinst:config/oc-netinst:enable" { + deviate add { + must "../../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:authentication/oc-netinst:config/oc-netinst:authentication-key" { + deviate add { + must "../../../../../../../../oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' and + ../../../../../../../../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } + } + description "MPLS LDP signaling-protocols configuration is only valid with the default network instance."; + } +*/ + +/* + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls" { + deviate add { + must "../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "MPLS configuration is only valid with the default network instance."; + } + } + description "MPLS configuration is only valid with the default network instance."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing" { + deviate add { + must "../oc-netinst:config/oc-netinst:name = 'default'" { + error-message "Segment routing configuration is only valid with the default network instance."; + } + } + description "Segment routing configuration is only valid with the default network instance."; + } +*/ + + /********************** + * Deviations for BGP * + **********************/ + // Global BGP Commands modified. + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:config/oc-netinst:as" { + // deviate replace { + // mandatory false; + // } + deviate add { + must "../../../../../../oc-netinst:name = 'default'" { + error-message "BGP global AS number must be configured in network-instance default only."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:config" + + "/oc-netinst:default-metric" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:ebgp-multihop/oc-netinst:config/oc-netinst:enabled" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:apply-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:as-path-options/oc-netinst:config" + + "/oc-netinst:replace-peer-as" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:as-path-options/oc-netinst:config" + + "/oc-netinst:disable-peer-as-filter" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:as-path-options/oc-netinst:state" + + "/oc-netinst:replace-peer-as" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:as-path-options/oc-netinst:state" + + "/oc-netinst:disable-peer-as-filter" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:config/oc-netinst:local-as" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:config/oc-netinst:import-policy" { + deviate add { + max-elements 8; + } + description "Only support eight policies in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:config" + + "/oc-netinst:default-import-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:state" + + "/oc-netinst:default-import-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:config/oc-netinst:export-policy" { + deviate add { + max-elements 8; + } + description "Only support eight policies in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:config" + + "/oc-netinst:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:state" + + "/oc-netinst:default-export-policy" { + deviate not-supported; + description "not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:ebgp-multihop/oc-netinst:config/oc-netinst:multihop-ttl" { + deviate add { + must ". > 0" { + error-message "TTL cannot be set to 0"; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:config/oc-netinst:afi-safi-name" { + deviate add { + must "(boolean(/oc-netinst:network-instances" + + "/oc-netinst:network-instance[name=current()/../../../../../../../../../config/name]" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi[afi-safi-name=current()]/oc-netinst:config/oc-netinst:afi-safi-name))" { + error-message "BGP global AF must be configured first."; + } + } + description "Not supported in this release"; + } + + // Global BGP Commands not supported. + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" + + "/oc-netinst:config/oc-netinst:receive" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" + + "/oc-netinst:config/oc-netinst:send" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" + + "/oc-netinst:config/oc-netinst:send-max" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" + + "/oc-netinst:state/oc-netinst:receive" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" + + "/oc-netinst:state/oc-netinst:send" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" + + "/oc-netinst:state/oc-netinst:send-max" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:confederation" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:use-multiple-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:default-route-distance" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:dynamic-neighbor-prefixes" { + deviate not-supported; + description "Not supported in this release"; + } + + // Global route-selection knobs not supported + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:config/oc-netinst:always-compare-med" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:state/oc-netinst:always-compare-med" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:config/oc-netinst:ignore-as-path-length" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:state/oc-netinst:ignore-as-path-length" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:config/oc-netinst:external-compare-router-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:state/oc-netinst:external-compare-router-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:config/oc-netinst:advertise-inactive-routes" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:state/oc-netinst:advertise-inactive-routes" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:config/oc-netinst:enable-aigp" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:route-selection-options" + + "/oc-netinst:state/oc-netinst:enable-aigp" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:route-selection-options" { + deviate not-supported; + description "Not supported in this release"; + } + + // Global BGP AF Commands not supported. + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:config/oc-netinst:enabled" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:use-multiple-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv4-unicast/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv4-unicast/oc-netinst:config/oc-netinst:send-default-route" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv6-unicast/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv6-unicast/oc-netinst:config/oc-netinst:send-default-route" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv4-labeled-unicast/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv6-labeled-unicast/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:l3vpn-ipv4-unicast/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:l3vpn-ipv6-unicast/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:l3vpn-ipv4-multicast/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:l3vpn-ipv6-multicast/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:l2vpn-vpls/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:l2vpn-evpn/oc-netinst:prefix-limit" { + deviate not-supported; + description "Not supported in this release"; + } + + // Global BGP Neighbor Commands not supported. + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config" + + "/oc-netinst:enabled" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:state" + + "/oc-netinst:session-state" { + deviate replace { + type arc-oc-bgp-types:session-state-type; + } + description "BGP session state with updated types"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config" + + "/oc-netinst:peer-type" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config" + + "/oc-netinst:route-flap-damping" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:state" + + "/oc-netinst:route-flap-damping" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config" + + "/oc-netinst:send-community" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:timers" + + "/oc-netinst:config/oc-netinst:minimum-advertisement-interval" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:timers" + + "/oc-netinst:config/oc-netinst:hold-time" { + deviate replace { default 180; } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:timers" + + "/oc-netinst:config/oc-netinst:keepalive-interval" { + deviate replace { default 60; } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:transport" + + "/oc-netinst:config/oc-netinst:tcp-mss" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:transport" + + "/oc-netinst:config/oc-netinst:mtu-discovery" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:error-handling" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:graceful-restart/oc-netinst:config" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:logging-options" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:route-reflector/oc-netinst:state" + + "/oc-netinst:route-reflector-cluster-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:route-reflector/oc-netinst:config" + + "/oc-netinst:route-reflector-cluster-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:use-multiple-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:config/oc-netinst:enabled" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:graceful-restart/oc-netinst:config" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv4-unicast/oc-netinst:config" + + "/oc-netinst:send-default-route" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv6-unicast/oc-netinst:config" + + "/oc-netinst:send-default-route" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:use-multiple-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + // Global BGP Commands modified. + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" { + deviate add { + must "boolean(/oc-netinst:network-instances/oc-netinst:network-instance[name='default']" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:bgp)" { + error-message "BGP is not allowed in non-default network-instance without " + + "BGP configured in the default network-instance."; + } + } + description "Do not allow BGP configured in non-default network-instances only"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:config/oc-netinst:afi-safi-name" { + deviate add { + must "boolean(/oc-netinst:network-instances/oc-netinst:network-instance[name='default']" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global/oc-netinst:config/oc-netinst:as) and " + + "boolean(/oc-netinst:network-instances/oc-netinst:network-instance[name='default']" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global/oc-netinst:config/oc-netinst:router-id)" { + error-message "Local-AS and Router-ID must be configured."; + } + } + description "Confd workaround"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config/oc-netinst:neighbor-address" { + deviate add { + must "boolean(/oc-netinst:network-instances/oc-netinst:network-instance[name='default']" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global/oc-netinst:config/oc-netinst:as) and " + + "boolean(/oc-netinst:network-instances/oc-netinst:network-instance[name='default']" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:global/oc-netinst:config/oc-netinst:router-id)" { + error-message "Local-AS and Router-ID must be configured."; + } + } + description "Confd workaround"; + } + + // Graceful-restart related deviations + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:graceful-restart" + + "/oc-netinst:config/oc-netinst:enabled" { + deviate add { + default true; + } + description "Global graceful-restart enabled default value added"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:graceful-restart" + + "/oc-netinst:config/oc-netinst:stale-routes-time" { + deviate replace { + type uint16; + } + description "Global graceful-restart stale-time type changed"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:graceful-restart/oc-netinst:state" + + "/oc-netinst:stale-routes-time" { + deviate replace { + type uint16; + } + description "Global graceful-restart stale-time type changed"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:graceful-restart" + + "/oc-netinst:config/oc-netinst:stale-routes-time" { + deviate add { + default 300; + } + description "Global graceful-restart stale-time default value added"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:graceful-restart" + + "/oc-netinst:config/oc-netinst:restart-time" { + deviate add { + default 120; + } + description "Global graceful-restart restart-time default value added"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:graceful-restart/oc-netinst:state/oc-netinst:stale-routes-time" { + deviate replace { + type uint16; + } + description "Neighbor graceful-restart stale-time type changed"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:graceful-restart/oc-netinst:config/oc-netinst:enabled" { + deviate delete { + default false; + } + description "Global AF graceful-restart enabled default value deleted"; + } + + // end graceful-restart related deviations + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:state" + + "/oc-netinst:prefixes/oc-netinst:installed" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:state" + + "/oc-netinst:prefixes/oc-netinst:received-pre-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l2vpn-evpn" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l2vpn-evpn" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + /* + * Make "max-prefixes" mandatory for "prefix-limit" config. + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l2vpn-evpn" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + /* + * Deviations for peer-group under BGP + */ + // Global BGP Commands modified. + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:apply-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:as-path-options/oc-netinst:config" + + "/oc-netinst:replace-peer-as" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:as-path-options/oc-netinst:config" + + "/oc-netinst:disable-peer-as-filter" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:as-path-options/oc-netinst:state" + + "/oc-netinst:replace-peer-as" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:as-path-options/oc-netinst:state" + + "/oc-netinst:disable-peer-as-filter" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:config/oc-netinst:local-as" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:config/oc-netinst:import-policy" { + deviate add { + max-elements 1; + } + description "Only support one policy in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:config" + + "/oc-netinst:default-import-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:config/oc-netinst:export-policy" { + deviate add { + max-elements 8; + } + description "Only support eight policies in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:apply-policy/oc-netinst:config" + + "/oc-netinst:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:config" + + "/oc-netinst:afi-safi-name" { + deviate add { + must "(boolean(/oc-netinst:network-instances" + + "/oc-netinst:network-instance[name=current()/../../../../../../../../../config/name]" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi[afi-safi-name=current()/../afi-safi-name]))" { + error-message "BGP global AF must be configured first."; + } + } + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:config" + + "/oc-netinst:peer-type" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:config" + + "/oc-netinst:route-flap-damping" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:state" + + "/oc-netinst:route-flap-damping" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:config" + + "/oc-netinst:send-community" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:state" + + "/oc-netinst:send-community" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:state" + + "/oc-netinst:total-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:state" + + "/oc-netinst:total-prefixes" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:timers" + + "/oc-netinst:config/oc-netinst:minimum-advertisement-interval" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:timers" + + "/oc-netinst:config/oc-netinst:hold-time" { + deviate replace { default 180; } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:timers" + + "/oc-netinst:config/oc-netinst:keepalive-interval" { + deviate replace { default 60; } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:transport/oc-netinst:config/oc-netinst:tcp-mss" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:transport/oc-netinst:config/oc-netinst:mtu-discovery" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:error-handling" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:graceful-restart/oc-netinst:config" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:logging-options" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:route-reflector/oc-netinst:state" + + "/oc-netinst:route-reflector-cluster-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:route-reflector/oc-netinst:config" + + "/oc-netinst:route-reflector-cluster-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:use-multiple-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:config/oc-netinst:enabled" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:graceful-restart/oc-netinst:config" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:config/oc-netinst:send-default-route" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:config/oc-netinst:send-default-route" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:use-multiple-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:transport/oc-netinst:config/oc-netinst:local-address" { + deviate replace { + type union { + type inet:ip-address; + type string; + } + } + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement: + option 1: IP address + option 2: String representing interface name (swp1, swp1.1, loopback0 etc.)"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:transport/oc-netinst:state/oc-netinst:local-address" { + deviate replace { + type union { + type inet:ip-address; + type string; + } + } + + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement: + option 1: IP address + option 2: String representing interface name (swp1, swp1.1, loopback0 etc.)"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:graceful-restart/oc-netinst:config/oc-netinst:stale-routes-time" { + deviate replace { + type uint16; + } + description "Neighbor graceful-restart stale-time type changed"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:graceful-restart/oc-netinst:state/oc-netinst:stale-routes-time" { + deviate replace { + type uint16; + } + description "Neighbor graceful-restart stale-time type changed"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:graceful-restart/oc-netinst:config/oc-netinst:stale-routes-time" { + deviate add { + default 300; + } + description "Neighbor graceful-restart stale-time default value added"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:graceful-restart/oc-netinst:config/oc-netinst:restart-time" { + deviate add { + default 120; + } + description "Neighbor graceful-restart stale-time default value added"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l2vpn-evpn" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:max-prefixes" { + deviate replace { + type uint32 { + range "1..max"; + } + } + description "Add range for neighbor AF max-prefixes limit"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l2vpn-evpn" + + "/oc-netinst:prefix-limit/oc-netinst:config/oc-netinst:prevent-teardown" { + deviate delete { + default false; + } + description "Remove the unnecessary default value"; + } + + /* + * Make "max-prefixes" mandatory for "prefix-limit" config. + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv4-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:ipv6-labeled-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv4-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l3vpn-ipv6-unicast" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:l2vpn-evpn" + + "/oc-netinst:prefix-limit/oc-netinst:config" { + deviate add { + must "boolean(oc-netinst:max-prefixes) or " + + "(boolean(oc-netinst:prevent-teardown) != 'true' and" + + " boolean(oc-netinst:warning-threshold-pct) != 'true' and" + + " boolean(oc-netinst:restart-timer) != 'true')" { + error-message "'max-prefixes' must be configured for prefix-limit."; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group/oc-netinst:config" { + deviate add { + must "boolean(/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:config/oc-netinst:as) and " + + "boolean(/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:config/oc-netinst:router-id)" { + error-message "Local-AS and Router-ID must be configured."; + } + } + description "Confd workaround"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:ebgp-multihop/oc-netinst:config/oc-netinst:enabled" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:ebgp-multihop/oc-netinst:state/oc-netinst:enabled" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:ebgp-multihop/oc-netinst:config/oc-netinst:multihop-ttl" { + deviate add { + must ". > 0" { + error-message "TTL cannot be set to 0"; + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:apply-policy" + + "/oc-netinst:state/oc-netinst:default-import-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi/oc-netinst:apply-policy" + + "/oc-netinst:state/oc-netinst:default-export-policy" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:global/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:add-paths" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:transport/oc-netinst:config/oc-netinst:local-address" { + deviate replace { + type union { + type inet:ip-address; + type string; + } + } + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement: + option 1: IP address + option 2: String representing interface name (swp1, swp1.1, loopback0 etc.)"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:transport/oc-netinst:state/oc-netinst:local-address" { + deviate replace { + type union { + type inet:ip-address; + type string; + } + } + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement: + option 1: IP address + option 2: String representing interface name (swp1, swp1.1, loopback0 etc.)"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:transport/oc-netinst:state/oc-netinst:remote-address" { + deviate replace { + type inet:ip-address; + } + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement"; + } + + /* + * TODO + * Currently, type leafref in unions are not validated, + * and treated as a string internally. Making leafref a part of a union + * in a deviation throws an error - "The type leafref cannot be part of a union". + * Once confd supports it, change "string" to "leafref" pointing to + * interface name in openconfig-interfaces. + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config" + + "/oc-netinst:neighbor-address" { + deviate replace { + type union { + type inet:ip-address; + type string; + } + } + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement: + option 1: IP address + option 2: String representing local interface name (swp1, swp1.1 etc.)"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:state" + + "/oc-netinst:neighbor-address" { + deviate replace { + type union { + type inet:ip-address; + type string; + } + } + description "Replacement of type due to OpenConfig non-compliance with + YANG 1.0/1.1 pattern statement: + option 1: IP address + option 2: String representing local interface name (swp1, swp1.1 etc.)"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:state" + + "/oc-netinst:last-established" { + deviate replace { + type string; + } + description "Change last established state to a human readable format"; + } + + /************************** + * Deviations for BGP-RIB * + **************************/ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:attr-sets/oc-netinst:attr-set" + + "/oc-netinst:state/oc-netinst:next-hop" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:adj-rib-out-pre" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:adj-rib-out-post" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:adj-rib-out-pre" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:adj-rib-out-post" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv4-unicast/oc-netinst:neighbors" + + "/oc-netinst:neighbor/oc-netinst:state" + + "/oc-netinst:neighbor-address" { + deviate replace { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:neighbor-address"; + } + } + description "Change neighbor-address type to leafref"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis/oc-netinst:afi-safi" + + "/oc-netinst:ipv6-unicast/oc-netinst:neighbors" + + "/oc-netinst:neighbor/oc-netinst:state" + + "/oc-netinst:neighbor-address" { + deviate replace { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:neighbor-address"; + } + } + description "Change neighbor-address type to leafref"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:attr-sets/oc-netinst:attr-set" + + "/oc-netinst:tunnel-encapsulation" { + deviate not-supported; + description "Not supported in this release"; + } + + // deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + // "/oc-netinst:protocols/oc-netinst:protocol" + + // "/oc-netinst:bgp/oc-netinst:rib" + + // "/oc-netinst:afi-safis" + + // "/oc-netinst:afi-safi/oc-netinst:ipv4-srte-policy" { + // deviate not-supported; + // description "Not supported in this release"; + // } + + // deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + // "/oc-netinst:protocols/oc-netinst:protocol" + + // "/oc-netinst:bgp/oc-netinst:rib" + + // "/oc-netinst:afi-safis" + + // "/oc-netinst:afi-safi/oc-netinst:ipv6-srte-policy" { + // deviate not-supported; + // description "Not supported in this release"; + // } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:loc-rib/oc-netinst:routes/oc-netinst:route" + + "/oc-netinst:state/oc-netinst:origin" { + deviate replace { + type union { + type inet:ip-address; + type string; + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + } + } + description "Change origin type to handle interface name for neighbor"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:loc-rib/oc-netinst:routes/oc-netinst:route" + + "/oc-netinst:state/oc-netinst:path-id" { + deviate replace { + type uint64; + } + description "Change path-id type to handle 64-bit internal ID"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:adj-rib-in-pre/oc-netinst:routes/oc-netinst:route" + + "/oc-netinst:state/oc-netinst:path-id" { + deviate replace { + type uint64; + } + description "Change path-id type to handle 64-bit internal ID"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv4-unicast" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:adj-rib-in-post/oc-netinst:routes/oc-netinst:route" + + "/oc-netinst:state/oc-netinst:path-id" { + deviate replace { + type uint64; + } + description "Change path-id type to handle 64-bit internal ID"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:loc-rib/oc-netinst:routes/oc-netinst:route" + + "/oc-netinst:state/oc-netinst:origin" { + deviate replace { + type union { + type inet:ip-address; + type string; + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + } + } + description "Change origin type to handle interface name for neighbor"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:loc-rib/oc-netinst:routes/oc-netinst:route" + + "/oc-netinst:state/oc-netinst:path-id" { + deviate replace { + type uint64; + } + description "Change path-id type to handle 64-bit internal path ID"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:adj-rib-in-pre/oc-netinst:routes/oc-netinst:route" + + "/oc-netinst:state/oc-netinst:path-id" { + deviate replace { + type uint64; + } + description "Change path-id type to handle 64-bit internal ID"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" + + "/oc-netinst:bgp/oc-netinst:rib" + + "/oc-netinst:afi-safis" + + "/oc-netinst:afi-safi/oc-netinst:ipv6-unicast" + + "/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:adj-rib-in-post/oc-netinst:routes/oc-netinst:route" + + "/oc-netinst:state/oc-netinst:path-id" { + deviate replace { + type uint64; + } + description "Change path-id type to handle 64-bit internal ID"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis" + + "/oc-netinst:levels/oc-netinst:level/oc-netinst:authentication" + + "/oc-netinst:key/oc-netinst:config/oc-netinst:auth-password" { + + deviate replace { + type arc-sys-types:encrypted-string; + } + + description "Prevent storage of clear-text strings in the configuration database"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis" + + "/oc-netinst:interfaces/oc-netinst:interface/oc-netinst:authentication" + + "/oc-netinst:key/oc-netinst:config/oc-netinst:auth-password" { + + deviate replace { + type arc-sys-types:encrypted-string; + } + + description "Prevent storage of clear-text strings in the configuration database"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis" + + "/oc-netinst:interfaces/oc-netinst:interface" + + "/oc-netinst:levels/oc-netinst:level/oc-netinst:hello-authentication" + + "/oc-netinst:key/oc-netinst:config/oc-netinst:auth-password" { + + deviate replace { + type arc-sys-types:encrypted-string; + } + + description "Prevent storage of clear-text strings in the configuration database"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis" + + "/oc-netinst:interfaces/oc-netinst:interface/oc-netinst:levels" + + "/oc-netinst:level/oc-netinst:adjacencies/oc-netinst:adjacency" + + "/oc-netinst:state/oc-netinst:system-id" { + deviate replace { + type arc-isis-types:system-name; + } + + description "Support use of name"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:protocols" + + "/oc-netinst:protocol/oc-netinst:bgp/oc-netinst:neighbors/oc-netinst:neighbor" + + "/oc-netinst:config/oc-netinst:auth-password" { + + deviate replace { + type arc-sys-types:encrypted-string; + } + + description "Prevent storage of clear-text strings in the configuration database"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:protocols" + + "/oc-netinst:protocol/oc-netinst:bgp/oc-netinst:peer-groups/oc-netinst:peer-group" + + "/oc-netinst:config/oc-netinst:auth-password" { + + deviate replace { + type arc-sys-types:encrypted-string; + } + + description "Prevent storage of clear-text strings in the configuration database"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:global/oc-netinst:config/oc-netinst:lsr-id" { + deviate replace { + type inet:ip-address; + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:config/oc-netinst:lsr-id" { + deviate replace { + type inet:ip-address; + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:global/oc-netinst:state/oc-netinst:lsr-id" { + deviate replace { + type inet:ip-address; + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:state/oc-netinst:lsr-id" { + deviate replace { + type inet:ip-address; + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:global/oc-netinst:authentication/oc-netinst:config" + + "/oc-netinst:authentication-key" { + deviate replace { + type arc-sys-types:encrypted-string; + } + + description "Prevent storage of clear-text strings in the configuration database"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:signaling-protocols/oc-netinst:ldp" + + "/oc-netinst:neighbors/oc-netinst:neighbor/oc-netinst:authentication" + + "/oc-netinst:config/oc-netinst:authentication-key" { + deviate replace { + type arc-sys-types:encrypted-string; + } + + description "Prevent storage of clear-text strings in the configuration database"; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:mpls/oc-netinst:signaling-protocols" + + "/oc-netinst:ldp/oc-netinst:interface-attributes/oc-netinst:config/oc-netinst:link-hello" { + deviate not-supported; + description + "Not supported in this release."; + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:mpls/oc-netinst:signaling-protocols" + + "/oc-netinst:ldp/oc-netinst:interface-attributes/oc-netinst:state/oc-netinst:link-hello" { + deviate not-supported; + description + "Not supported in this release."; + } + + /* + * check if local-id is configured for reserved label block + * Maximum length of local-id cannot exceed 63 + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:global" + + "/oc-netinst:reserved-label-blocks/oc-netinst:reserved-label-block" + + "/oc-netinst:config/oc-netinst:local-id" { + deviate add { + mandatory true; + } + deviate replace { + type string { + length "1..63" { + error-message "Length of local-id should be less-than 63 characters"; + } + } + } + } + + /* + * check if lower-bound is configured for reserved label block + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:global" + + "/oc-netinst:reserved-label-blocks/oc-netinst:reserved-label-block" + + "/oc-netinst:config/oc-netinst:lower-bound" { + deviate add { + mandatory true; + } + } + + /* + * check if upper-bound is configured for reserved label block + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:mpls/oc-netinst:global" + + "/oc-netinst:reserved-label-blocks/oc-netinst:reserved-label-block" + + "/oc-netinst:config/oc-netinst:upper-bound" { + deviate add { + mandatory true; + must ". >= ../oc-netinst:lower-bound" { + error-message "upper bound is less than lower bound"; + } + } + } + + /* + * check if local-id is configured for srgb label block + * Maximum length of local-id cannot exceed 63 + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srgbs" + + "/oc-netinst:srgb/oc-netinst:config/oc-netinst:local-id" { + deviate add { + mandatory true; + } + deviate replace { + type string { + length "1..63" { + error-message "Length of local-id should be less-than 63 characters"; + } + } + } + } + + /* + * check if local-id is configured for srlb label block + * Maximum length of local-id cannot exceed 63 + */ + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srlbs" + + "/oc-netinst:srlb/oc-netinst:config/oc-netinst:local-id" { + deviate add { + mandatory true; + } + deviate replace { + type string { + length "1..63" { + error-message "Length of local-id should be less-than 63 characters"; + } + } + } + } + + deviation "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis" + + "/oc-netinst:levels/oc-netinst:level/oc-netinst:link-state-database" + + "/oc-netinst:lsp/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:router-capabilities" + + "/oc-netinst:capability/oc-netinst:subtlvs/oc-netinst:subtlvs" + + "/oc-netinst:segment-routing-algorithms/oc-netinst:state" + + "/oc-netinst:algorithm" { + deviate replace { + type union { + type uint8 { + range "128..255"; + } + type enumeration { + enum SPF { + value 0; + description + "Shortest Path First (SPF) algorithm + based on link metric. This is the + well-known shortest path algorithm as + computed by the IS-IS Decision process. + Consistent with the deployed practice + for link-state protocols, algorithm 0 + permits any node to overwrite the SPF + path with a different path based on + local policy."; + } + enum STRICT_SPF { + value 1; + description + "Strict Shortest Path First (SPF) + algorithm based on link metric. The + algorithm is identical to algorithm 0 + but algorithm 1 requires that all nodes + along the path will honor the SPF + routing decision. Local policy MUST NOT + alter the forwarding decision computed + by algorithm 1 at the node claiming to + support algorithm 1."; + } + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-types.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-types.yang new file mode 100644 index 000000000..981da6c1f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-network-instance-types.yang @@ -0,0 +1,43 @@ +module arcos-openconfig-network-instance-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/network-instance/types"; + prefix arc-oc-ni-types; + + import openconfig-network-instance-types { + prefix oc-ni-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines additional types/identities + that base off of OpenConfig network-instance types. + + Copyright (c) 2020 by Arrcus, Inc. + All rights reserved."; + + identity L2P2P_EVPN { + base oc-ni-types:NETWORK_INSTANCE_TYPE; + description + "A private Layer 2 only forwarding instance which acts as + a point to point connection between two endpoints. Endpoint + discovery is accomplished using EVPN BGP"; + } + + identity L2VLAN_AWARE_BUNDLE { + base oc-ni-types:NETWORK_INSTANCE_TYPE; + description + "An EVPN Network Instance for VLAN-Aware Bundle service. + This service allows multiple VLANs to be extended using a single EVPN + Instance (EVI), while maintaining separate bridge tables."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-packet-match-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-packet-match-augments.yang new file mode 100644 index 000000000..87d84253a --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-packet-match-augments.yang @@ -0,0 +1,556 @@ +module arcos-openconfig-packet-match-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/packet-match/augments"; + prefix arc-oc-pkt-match-aug; + + import openconfig-acl { + prefix oc-acl; + } + + import arcos-openconfig-acl-augments { + prefix arc-oc-acl-aug; + } + + import openconfig-packet-match-types { + prefix oc-pkt-match-types; + } + + import arcos-icmp-types { + prefix arc-icmp-types; + } + + import arcos-icmpv6-types { + prefix arc-icmpv6-types; + } + + import openconfig-vlan-types { + prefix oc-vlan-types; + } + + import openconfig-defined-sets { + prefix oc-sets; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines augment statements for Arrcus + implemention of the openconfig-packet-match module."; + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + + revision 2017-07-10 { + description + "Initial Revision + * Add ICMP type under ipv4 and ipv6 match nodes. + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + + // ICMP and ICMPv6 fields + grouping icmp-dst-unreach-code-field-top { + description + "Configuration data of ICMP code field when ICMP type is + Destnation Unreachable."; + + leaf icmp-dst-unreach-code { + type arc-icmp-types:icmp-dst-unreach-code; + + description + "ICMP code can be specified when the protocol is IP_ICMP and + ICMP type is ICMP_DST_UNREACH."; + } + } + + grouping icmp-redirect-code-field-top { + description + "Configuration data of ICMP code field when ICMP type is Redirect."; + + leaf icmp-redirect-code { + type arc-icmp-types:icmp-redirect-code; + + description + "ICMP code can be specified when the protocol is IP_ICMP and + ICMP type is ICMP_REDIRECT."; + } + } + + grouping icmp-router-advert-code-field-top { + description + "Configuration data of ICMP code field when ICMP type is + Router Advertisement."; + + leaf icmp-router-advert-code { + type arc-icmp-types:icmp-router-advert-code; + + description + "ICMP code can be specified when the protocol is IP_ICMP and + ICMP type is ICMP_ROUTER_ADVERT."; + } + } + + grouping icmp-time-exceeded-code-field-top { + description + "Configuration data of ICMP code field when ICMP type is + Time Exceeded."; + + leaf icmp-time-exceeded-code { + type arc-icmp-types:icmp-time-exceeded-code; + + description + "ICMP code can be specified when the protocol is IP_ICMP and + ICMP type is ICMP_TIME_EXCEEDED."; + } + } + + grouping icmp-param-problem-code-field-top { + description + "Configuration data of ICMP code field when ICMP type is + Parameter Problem."; + + leaf icmp-param-problem-code { + type arc-icmp-types:icmp-param-problem-code; + + description + "ICMP code can be specified when the protocol is IP_ICMP and + ICMP type is ICMP_PARAM_PROBLEM."; + } + } + + grouping icmpv6-dst-unreach-code-field-top { + description + "Configuration data of ICMPv6 code field when ICMPv6 type is + Destnation Unreachable."; + + leaf icmpv6-dst-unreach-code { + type arc-icmpv6-types:icmpv6-dst-unreach-code; + + description + "ICMPv6 code can be specified when the protocol is IP_ICMPV6 and + ICMPv6 type is ICMPV6_DST_UNREACH."; + } + } + + grouping icmpv6-time-exceeded-code-field-top { + description + "Configuration data of ICMPv6 code field when ICMPv6 type is + Time Exceeded."; + + leaf icmpv6-time-exceeded-code { + type arc-icmpv6-types:icmpv6-time-exceeded-code; + + description + "ICMPv6 code can be specified when the protocol is IP_ICMPV6 and + ICMPv6 type is ICMPV6_TIME_EXCEEDED."; + } + } + + grouping icmpv6-param-problem-code-field-top { + description + "Configuration data of ICMPv6 code field when ICMPv6 type is + Parameter Problem."; + + leaf icmpv6-param-problem-code { + type arc-icmpv6-types:icmpv6-param-problem-code; + + description + "ICMPv6 code can be specified when the protocol is IP_ICMPV6 and + ICMPv6 type is ICMPV6_PARAM_PROBLEM."; + } + } + + grouping icmpv6-router-renumber-code-field-top { + description + "Configuration data of ICMPv6 code field when ICMPv6 type is + Router Renumbering."; + + leaf icmpv6-router-renumber-code { + type arc-icmpv6-types:icmpv6-router-renumber-code; + + description + "ICMPv6 code can be specified when the protocol is IP_ICMPV6 and + ICMPv6 type is ICMPV6_ROUTER_RENUMBER."; + } + } + + grouping icmpv6-node-info-query-code-field-top { + description + "Configuration data of ICMPv6 code field when ICMPv6 type is + ICMP Node Information Query."; + + leaf icmpv6-node-info-query-code { + type arc-icmpv6-types:icmpv6-node-info-query-code; + + description + "ICMPv6 code can be specified when the protocol is IP_ICMPV6 and + ICMPv6 type is ICMPV6_NODE_INFO_QUERY."; + } + } + + grouping icmpv6-node-info-response-code-field-top { + description + "Configuration data of ICMPv6 code field when ICMPv6 type is + ICMP Node Information Response."; + + leaf icmpv6-node-info-response-code { + type arc-icmpv6-types:icmpv6-node-info-response-code; + + description + "ICMPv6 code can be specified when the protocol is IP_ICMPV6 and + ICMPv6 type is ICMPV6_NODE_INFO_RESPONSE."; + } + } + + grouping icmp-type-field-top { + description + "Configuration data of ICMP type field."; + + leaf icmp-type { + type arc-icmp-types:icmp-type; + + description + "ICMP type can be specified when protocol typep is IP_ICMP."; + } + } + + grouping icmpv6-type-field-top { + description + "Configuration data of ICMPv6 type field."; + + leaf icmpv6-type { + type arc-icmpv6-types:icmpv6-type; + + description + "ICMPv6 type can be specified when protocol typep is IP_ICMPV6."; + } + } + + grouping icmp-type-code-fields-top { + uses icmp-type-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMP'" { + description + "Only allow ICMP type to be configured when the protocol is ICMP."; + } + } + + uses icmp-dst-unreach-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMP' and " + + "icmp-type = 'arc-icmp-types:ICMP_DST_UNREACH'" { + description + "Only allow ICMP Destination Unreachable code to be configured + when the ICMP type is ICMP_DST_UNREACH."; + } + } + + uses icmp-redirect-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMP' and " + + "icmp-type = 'arc-icmp-types:ICMP_REDIRECT'" { + description + "Only allow ICMP Redirect code to be configured when the + ICMP type is ICMP_REDIRECT."; + } + } + + uses icmp-router-advert-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMP' and " + + "icmp-type = 'arc-icmp-types:ICMP_ROUTER_ADVERT'" { + description + "Only allow ICMP Router Advertisement code to be configured + when the ICMP type is ICMP_ROUTER_ADVERT."; + } + } + + uses icmp-time-exceeded-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMP' and " + + "icmp-type = 'arc-icmp-types:ICMP_TIME_EXCEEDED'" { + description + "Only allow ICMP Time Exceeded code to be configured when the + ICMP type is ICMP_TIME_EXCEEDED."; + } + } + + uses icmp-param-problem-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMP' and " + + "icmp-type = 'arc-icmp-types:ICMP_PARAM_PROBLEM'" { + description + "Only allow ICMP Parameter Problem code to be configured + when the ICMP type is ICMP_PARAM_PROBLEM."; + } + } + } + + grouping icmpv6-type-code-fields-top { + uses icmpv6-type-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMPV6'" { + description + "Only allow ICMPv6 type to be configured when the protocol + is ICMPv6."; + } + } + + uses icmpv6-dst-unreach-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMPV6' and " + + "icmpv6-type = 'arc-icmpv6-types:ICMPV6_DST_UNREACH'" { + description + "Only allow ICMPv6 Destination Unreachable code to be configured + when the ICMPv6 type is ICMPV6_DST_UNREACH."; + } + } + + uses icmpv6-time-exceeded-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMPV6' and " + + "icmpv6-type = 'arc-icmpv6-types:ICMPV6_TIME_EXCEEDED'" { + description + "Only allow ICMPv6 Time Exceeded code to be configured when the + ICMPv6 type is ICMPV6_TIME_EXCEEDED."; + } + } + + uses icmpv6-param-problem-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMPV6' and " + + "icmpv6-type = 'arc-icmpv6-types:ICMPV6_PARAM_PROBLEM'" { + description + "Only allow ICMPv6 Parameter Problem code to be configured + when the ICMPv6 type is ICMPV6_PARAM_PROBLEM."; + } + } + + uses icmpv6-router-renumber-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMPV6' and " + + "icmpv6-type = 'arc-icmpv6-types:ICMPV6_ROUTER_RENUMBER'" { + description + "Only allow ICMPv6 Router Renumbering code to be configured + when the ICMPv6 type is ICMPV6_ROUTER_RENUMBER."; + } + } + + uses icmpv6-node-info-query-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMPV6' and " + + "icmpv6-type = 'arc-icmpv6-types:ICMPV6_NODE_INFO_QUERY'" { + description + "Only allow ICMPv6 Node Information Query code to be configured + when the ICMPv6 type is ICMPV6_NODE_INFO_QUERY."; + } + } + + uses icmpv6-node-info-response-code-field-top { + when "oc-acl:protocol = 'oc-pkt-match-types:IP_ICMPV6' and " + + "icmpv6-type = 'arc-icmpv6-types:ICMPV6_NODE_INFO_RESPONSE'" { + description + "Only allow ICMPv6 Node Information Response code to be configured + when the ICMPv6 type is ICMPV6_NODE_INFO_RESPONSE."; + } + } + } + + + grouping ip-packet-length { + description "Match attribute for ip packet length"; + + leaf packet-length { + type string { + pattern '(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?[0-9]?' + + '[0-9]?)\.\.(6[0-5][0-5][0-3][0-5]|[0-5]?[0-9]?[0-9]?' + + '[0-9]?[0-9]?)'; + } + description "IP packet length"; + } + } + + grouping eth-vlan-id { + description "Match attribute for vlan id"; + + leaf vlan-id { + type union { + type oc-vlan-types:vlan-id; + type oc-vlan-types:vlan-range; + } + description "Vlan id (single value or a range) used as a ethernet qualifier"; + } + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:config" { + uses ip-packet-length; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:config" { + uses icmp-type-code-fields-top; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:config" { + uses ip-packet-length; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:config" { + uses icmpv6-type-code-fields-top; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:state" { + uses ip-packet-length; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:state" { + uses icmp-type-code-fields-top; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:state" { + uses ip-packet-length; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:state" { + uses icmpv6-type-code-fields-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:ipv4/arc-oc-acl-aug:state" { + uses icmp-type-field-top; + uses icmp-dst-unreach-code-field-top; + uses icmp-redirect-code-field-top; + uses icmp-router-advert-code-field-top; + uses icmp-time-exceeded-code-field-top; + uses icmp-param-problem-code-field-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:ipv6/arc-oc-acl-aug:state" { + uses icmpv6-type-field-top; + uses icmpv6-dst-unreach-code-field-top; + uses icmpv6-time-exceeded-code-field-top; + uses icmpv6-param-problem-code-field-top; + uses icmpv6-router-renumber-code-field-top; + uses icmpv6-node-info-query-code-field-top; + uses icmpv6-node-info-response-code-field-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:ipv4/arc-oc-acl-aug:state" { + uses ip-packet-length; + uses icmp-type-field-top; + uses icmp-dst-unreach-code-field-top; + uses icmp-redirect-code-field-top; + uses icmp-router-advert-code-field-top; + uses icmp-time-exceeded-code-field-top; + uses icmp-param-problem-code-field-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:ipv6/arc-oc-acl-aug:state" { + uses ip-packet-length; + uses icmpv6-type-field-top; + uses icmpv6-dst-unreach-code-field-top; + uses icmpv6-time-exceeded-code-field-top; + uses icmpv6-param-problem-code-field-top; + uses icmpv6-router-renumber-code-field-top; + uses icmpv6-node-info-query-code-field-top; + uses icmpv6-node-info-response-code-field-top; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:config" { + uses eth-vlan-id; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:l2/oc-acl:state" { + uses eth-vlan-id; + } + + // IP Prefix list support + grouping ipv4-prefix-list-field-top { + leaf source-address-prefix-set { + description + "Reference to a IPv4 address prefix Set to match the source address"; + + type leafref { + path "/oc-sets:defined-sets/oc-sets:ipv4-prefix-sets/oc-sets:ipv4-prefix-set/oc-sets:name"; + } + } + + leaf destination-address-prefix-set { + description + "Reference to a IPv4 address prefix Set to match the destination address"; + + type leafref { + path "/oc-sets:defined-sets/oc-sets:ipv4-prefix-sets/oc-sets:ipv4-prefix-set/oc-sets:name"; + } + } + } + + grouping ipv6-prefix-list-field-top { + leaf source-address-prefix-set { + description + "Reference to a IPv6 address prefix Set to match the source address"; + + type leafref { + path "/oc-sets:defined-sets/oc-sets:ipv6-prefix-sets/oc-sets:ipv6-prefix-set/oc-sets:name"; + } + } + + leaf destination-address-prefix-set { + description + "Reference to a IPv6 address prefix Set to match the destination address"; + + type leafref { + path "/oc-sets:defined-sets/oc-sets:ipv6-prefix-sets/oc-sets:ipv6-prefix-set/oc-sets:name"; + } + } + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:config" { + uses ipv4-prefix-list-field-top; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv4/oc-acl:state" { + uses ipv4-prefix-list-field-top; + } + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:config" { + uses ipv6-prefix-list-field-top; + } + + augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries" + + "/oc-acl:acl-entry/oc-acl:ipv6/oc-acl:state" { + uses ipv6-prefix-list-field-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:ipv4/arc-oc-acl-aug:state" { + uses ipv4-prefix-list-field-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:system-defined/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:ipv6/arc-oc-acl-aug:state" { + uses ipv6-prefix-list-field-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:ipv4/arc-oc-acl-aug:state" { + uses ipv4-prefix-list-field-top; + } + + augment "/oc-acl:acl/arc-oc-acl-aug:bgp-flowspec/arc-oc-acl-aug:acl-set" + + "/arc-oc-acl-aug:acl-entries/arc-oc-acl-aug:acl-entry/arc-oc-acl-aug:ipv6/arc-oc-acl-aug:state" { + uses ipv6-prefix-list-field-top; + } +} \ No newline at end of file diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-platform-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-augments.yang new file mode 100644 index 000000000..dc3723678 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-augments.yang @@ -0,0 +1,201 @@ +module arcos-openconfig-platform-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/platform/augments"; + prefix arc-oc-platform-aug; + + import openconfig-platform { prefix oc-platform; } + import ietf-yang-types { prefix yang; } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 408 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module defines augments for Arrcus + implemention of the openconfig platform model. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-11-08 { + description + "Cleanup commented out statements and add template YANG file headers"; + } + + grouping fabric-intf-counters { + container counters { + leaf tx-control-cells { + type yang:counter64; + description "TX Control cell counter"; + } + + leaf rx-control-cells { + type yang:counter64; + description "RX Control cell counter"; + } + + leaf tx-data-cells { + type yang:counter64; + description "TX Data cell counter"; + } + + leaf tx-data-bytes { + type yang:counter64; + description "TX Data byte counter"; + } + + leaf rx-data-cells { + type yang:counter64; + description "RX Data cell counter"; + } + + leaf rx-data-bytes { + type yang:counter64; + description "RX Data byte counter"; + } + + leaf crc-errors { + type yang:counter64; + description "RX CRC error counter"; + } + + leaf rs-fec-correctable-errors { + type yang:counter64; + description "RX RS-FEC correctable error counter"; + } + + leaf rs-fec-uncorrectable-errors { + type yang:counter64; + description "RX RS-FEC uncorrectable error counter"; + } + + } + } + + grouping fabric-reachability-info { + container reachability-info { + leaf lane-status { + type string; + description "Operational status of the Lane"; + } + + leaf remote-lane-number { + type uint16; + description "Remote lane number that represents immediate neighbor"; + } + + leaf remote-mod-id { + type uint16; + description "Remote module id of the immediate neighbor"; + } + + leaf-list reachable-modules { + type uint16; + description "List of modules that can be reachable via this fabric lane"; + } + } + } + + grouping fabric-lane-info { + container lanes { + list lane { + key "lane-number unit"; + config false; + + leaf lane-number { + type uint16; + description "Lane number within the fabric interface"; + } + + leaf unit { + type uint16; + description "Unit associated to the lane number"; + } + + uses fabric-reachability-info; + uses fabric-intf-counters; + } + } + } + + grouping fabric-interface-info { + container interfaces { + list interface { + key "name"; + config false; + + leaf name { + type string; + description "Fabric interface name"; + } + + leaf remote-port { + type string; + description "Fabric remote interface name"; + } + + leaf remote-nodename { + type string; + description "Remote node name"; + } + + uses fabric-lane-info; + } + } + } + + grouping ul-connectivity-info { + container underlay { + container state { + list topology { + key "local-port"; + config false; + + leaf local-port { + type string; + description "Local port"; + } + leaf remote-port { + type string; + description "Remote port"; + } + leaf local-ip { + type string; + description "Ip address of the local interface"; + } + leaf remote-ip { + type string; + description "Ip address of the remote interface"; + } + leaf node-name { + type string; + description "Remote node name"; + } + leaf node-id { + type string; + description "Remode node id"; + } + leaf platform-type { + type string; + description "Type of the platform"; + } + } + } + } + } + + augment "/oc-platform:components/oc-platform:component" + + "/oc-platform:fabric/oc-platform:state" { + uses fabric-interface-info; + } + augment "/oc-platform:components/oc-platform:component" { + uses ul-connectivity-info; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-platform-cpu-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-cpu-deviations.yang new file mode 100644 index 000000000..fb64fe015 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-cpu-deviations.yang @@ -0,0 +1,43 @@ +module arcos-openconfig-platform-cpu-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/platform/cpu/deviations"; + prefix arc-oc-platform-cpu-dev; + + import openconfig-platform { + prefix oc-platform; + } + + import openconfig-platform-cpu { + prefix oc-platform-cpu; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig platform module."; + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + revision 2017-07-10 { + description + "Initial Revision + * xxx not supcpued. + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + deviation "/oc-platform:components/oc-platform:component/oc-platform:cpu/oc-platform-cpu:utilization" { + deviate not-supported; + description "Not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-platform-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-deviations.yang new file mode 100644 index 000000000..ae7dbd755 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-deviations.yang @@ -0,0 +1,352 @@ +module arcos-openconfig-platform-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/platform/deviations"; + prefix arc-oc-platform-dev; + + import openconfig-platform { + prefix oc-platform; + } + + import openconfig-platform-port { + prefix oc-platform-port; + } + + import openconfig-platform-cpu { + prefix oc-platform-cpu; + } + + import openconfig-platform-psu { + prefix oc-platform-psu; + } + + import openconfig-platform-ext { + prefix oc-platform-ext; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 408 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig platform module. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-11-08 { + description + "Add deviate not-supported statements for multiple platform model + nodes that are unsupported. Cleanup commented out stmts. + Update contact information in file header."; + } + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + revision 2017-07-10 { + description + "Initial Revision + * xxx not supported. + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + deviation "/oc-platform:components/oc-platform:component/" + + "oc-platform:config" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/" + + "oc-platform:state/oc-platform:empty" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/" + + "oc-platform:state/oc-platform:oper-status" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:name" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:temperature" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:parent" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:location" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:mfg-date" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:hardware-version" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:firmware-version" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:memory" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:allocated-power" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:used-power" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:properties/oc-platform:property/oc-platform:state/" + + "oc-platform:configurable" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:properties/oc-platform:property/oc-platform:state/" + + "oc-platform:name" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:mfg-name" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:software-version" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:serial-no" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform:part-no" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:properties/oc-platform:property/oc-platform:config" { + deviate not-supported; + description "Not supported in this release"; + } + //deviation "/oc-platform:components/oc-platform:component/oc-platform:config" { + // deviate not-supported; + //description "Not supported in this release"; + //} + deviation "/oc-platform:components/oc-platform:component/oc-platform:chassis" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:port/oc-platform-port:breakout-mode" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:port/oc-platform:config" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:port/oc-platform:state" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:port" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply/oc-platform:config/oc-platform-psu:enabled" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply/oc-platform:config" { + deviate not-supported; + description "Not supported in this release"; + } + // deviation "/oc-platform:components/oc-platform:component/oc-platform-transceiver:transceiver" { + // deviate not-supported; + // description "Not supported in this release"; + // } + //deviation "/oc-platform:components/oc-platform:component/oc-platform-transceiver:transceiver/oc-platform-transceiver:index" { + // deviate not-supported; + //description "Not supported in this release"; + // } + // deviation "/oc-platform:components/oc-platform:component/oc-platform-transceiver:transceiver/oc-platform-transceiver:state/oc-platform-transceiver:pre-fec-ber" { + // deviate not-supported; + // description "Not supported in this release"; + // } + //deviation "/oc-platform:components/oc-platform:component/oc-platform-transceiver:transceiver/oc-platform-transceiver:state/oc-platform-transceiver:post-fec-ber" { + // deviate not-supported; + // description "Not supported in this release"; + // } + // deviation "/oc-platform:components/oc-platform:component/oc-platform-transceiver:transceiver/oc-platform-transceiver:state/oc-platform-transceiver:output-power" { + // deviate not-supported; + // description "Not supported in this release"; + // } + // deviation "/oc-platform:components/oc-platform:component/oc-platform-transceiver:transceiver/oc-platform-transceiver:state/oc-platform-transceiver:input-power" { + // deviate not-supported; + // description "Not supported in this release"; + // } + // deviation "/oc-platform:components/oc-platform:component/oc-platform-transceiver:transceiver/oc-platform-transceiver:state/oc-platform-transceiver:laser-bias-current" { + // deviate not-supported; + // description "Not supported in this release"; + // } + // deviation "/oc-platform:components/oc-platform:component/oc-platform-transceiver:transceiver/oc-platform-transceiver:physical-channels" { + // deviate not-supported; + // description "Not supported in this release"; + // } + deviation "/oc-platform:components/oc-platform:component/oc-platform:fan/oc-platform:config" { + deviate not-supported; + description "Not supported in this release"; + } + //deviation "/oc-platform:components/oc-platform:component/oc-platform:config/oc-platform:power-supply/oc-platform:state/oc-platform:psu/oc-platform:config" { + // deviate not-supported; + //description "Not supported in this release"; + //} + deviation "/oc-platform:components/oc-platform:component/oc-platform:fabric/oc-platform:config" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:storage" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:cpu/oc-platform-cpu:utilization" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:cpu/oc-platform:state" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:cpu/oc-platform:config" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:cpu" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:integrated-circuit" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:backplane" { + deviate not-supported; + description "Not supported in this release"; + } + //deviation "/oc-platform:components/oc-platform:component/oc-platform-linecard:linecard/oc-platform-linecard:config" { + // deviate not-supported; + // description "Not supported in this release"; + // } + deviation "/oc-platform:components/oc-platform:component/oc-platform:subcomponents/oc-platform:subcomponent/oc-platform:config" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:name" { + deviate replace { + type string; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:properties/oc-platform:property/oc-platform:name" { + deviate replace { + type string; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:subcomponents/oc-platform:subcomponent/oc-platform:name" { + deviate replace { + type string; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:subcomponents/oc-platform:subcomponent/oc-platform:config/oc-platform:name" { + deviate replace { + type string; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:subcomponents/oc-platform:subcomponent/oc-platform:state/oc-platform:name" { + deviate replace { + type string; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:subcomponents/oc-platform:subcomponent/oc-platform:name" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:subcomponents/oc-platform:subcomponent" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:subcomponents" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:properties/oc-platform:property/oc-platform:name" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:properties/oc-platform:property" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:properties" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:name" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components/oc-platform:component" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components" { + deviate replace { + config false; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply" { + deviate replace { + config false; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-platform-ext-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-ext-deviations.yang new file mode 100644 index 000000000..e603eb86e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-ext-deviations.yang @@ -0,0 +1,43 @@ +module arcos-openconfig-platform-ext-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/platform/extension/deviations"; + prefix arc-oc-platform-ext-dev; + + import openconfig-platform { + prefix oc-platform; + } + + import openconfig-platform-ext { + prefix oc-platform-ext; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 408 884-1965 + E-mail: yang-support@arrcus.com"; + + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig platform extension module. + + Copyright (c) 2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-11-08 { + description + "Initial revision"; + } + + deviation "/oc-platform:components/oc-platform:component/oc-platform:state/" + + "oc-platform-ext:entity-id" { + deviate not-supported; + description "Not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-platform-port-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-port-deviations.yang new file mode 100644 index 000000000..4d758cdfd --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-port-deviations.yang @@ -0,0 +1,43 @@ +module arcos-openconfig-platform-port-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/platform/port/deviations"; + prefix arc-oc-platform-port-dev; + + import openconfig-platform { + prefix oc-platform; + } + + import openconfig-platform-port { + prefix oc-platform-port; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig platform module."; + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + revision 2017-07-10 { + description + "Initial Revision + * xxx not supported. + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + deviation "/oc-platform:components/oc-platform:component/oc-platform:port/oc-platform-port:breakout-mode" { + deviate not-supported; + description "Not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-platform-psu-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-psu-deviations.yang new file mode 100644 index 000000000..513fb3762 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-platform-psu-deviations.yang @@ -0,0 +1,69 @@ +module arcos-openconfig-platform-psu-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/platform/psu/deviations"; + prefix arc-oc-platform-psu-dev; + + import openconfig-platform { + prefix oc-platform; + } + + import openconfig-platform-psu { + prefix oc-platform-psu; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig platform module."; + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + revision 2017-07-10 { + description + "Initial Revision + * xxx not suppsued. + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply/oc-platform:config/oc-platform-psu:enabled" { + deviate not-supported; + description "Not suppsued in this release"; + } + + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply/oc-platform:state/oc-platform-psu:input-current" { + deviate replace { + type uint32; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply/oc-platform:state/oc-platform-psu:input-voltage" { + deviate replace { + type uint32; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply/oc-platform:state/oc-platform-psu:output-current" { + deviate replace { + type uint32; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply/oc-platform:state/oc-platform-psu:output-voltage" { + deviate replace { + type uint32; + } + } + deviation "/oc-platform:components/oc-platform:component/oc-platform:power-supply/oc-platform:state/oc-platform-psu:output-power" { + deviate replace { + type uint32; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-policy-types.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-policy-types.yang new file mode 100644 index 000000000..9515398dc --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-policy-types.yang @@ -0,0 +1,55 @@ +module arcos-openconfig-policy-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/policy-types"; + prefix arc-oc-pol-types; + + import openconfig-policy-types { + prefix oc-pol-types; + } + organization + "Arrcus, Inc."; + + description + "YANG data-model for openconfig-policy-types augment"; + + revision 2022-12-12 { + description + "* Add L2FM protocol type to support static vxlan."; + } + + identity ADJACENCY { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + description + "Adjacency route"; + } + + identity LDP { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + description + "LDP"; + } + + identity SIDMGR { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + description + "SIDMGR"; + } + + identity LAG { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + description + "Link Aggregation"; + } + + identity INTERNAL { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + description + "Internal route"; + } + + identity L2FM { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + description + "L2FM route"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-relay-agent-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-relay-agent-augments.yang new file mode 100644 index 000000000..0b95f07f5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-relay-agent-augments.yang @@ -0,0 +1,361 @@ +module arcos-openconfig-relay-agent-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/relay-agent/augments"; + prefix arc-oc-relay-aug; + + import ietf-inet-types { + prefix inet; + } + + import ietf-yang-types { + prefix yang; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import openconfig-relay-agent { + prefix oc-relay; + } + + import openconfig-interfaces { + prefix oc-if; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines ArcOS augments to the + OpenConfig relay-agent module. + + Copyright (c) 2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-07-21 { + description + "Added Option-82 Circuit ID format support"; + } + + grouping relay-agent-ipv6-helper-config { + description + "DHCPv6 server configuration for relay"; + + container servers { + description + "Enclosing container for list of DHCPv6 servers"; + + list server { + key "name"; + unique "helper-address helper-interface"; + max-elements 64; + description + "DHCPv6 server to relay towards"; + + leaf name { + type string { + length "1..64"; + } + description "Name of this server entry"; + } + + leaf helper-address { + mandatory true; + type inet:ipv6-address; + description "IPv6 address of DHCPv6 server to relay requests towards"; + } + + leaf helper-interface { + mandatory true; + type oc-if:base-interface-ref; + description + "The interface name to forward DHCPv6 requests out to reach this server"; + } + } + } + } + + grouping relay-agent-dhcp-global-counters { + description + "DHCP relay agent global counters grouping"; + + container counters { + description + "DHCP relay agent global counters"; + + config false; + container state { + + leaf received-requests { + type oc-yang:counter64; + description + "Number of DHCP Requests received from a client"; + } + leaf received-responses { + type oc-yang:counter64; + description + "Number of DHCP Responses received from a server"; + } + leaf relayed-requests { + type oc-yang:counter64; + description + "Number of DHCP Requests relayed to a server"; + } + leaf relayed-responses { + type oc-yang:counter64; + description + "Number of DHCP Responses relayed to a client"; + } + leaf total-drops { + type oc-yang:counter64; + description + "Total Number of DHCP packets dropped"; + } + leaf last-clear { + type yang:date-and-time; + description + "Indicates the last time the counters were + cleared."; + } + } + } + } + + + grouping relay-agent-dhcp-global-drop-counters { + description + "DHCP relay agent global drop counters grouping"; + + container drop-counters { + description + "DHCP relay agent global drop counters"; + + config false; + container state { + + leaf bad-giaddr { + type oc-yang:counter64; + description + "Number of DHCP Responses with a giaddr that doesn't + match any DHCP relay enabled interface"; + } + leaf request-send-failure { + type oc-yang:counter64; + description + "Number of DHCP Requests that failed to be sent to + a server"; + } + leaf response-send-failure { + type oc-yang:counter64; + description + "Number of DHCP Responses that failed to be sent to + a client"; + } + leaf agent-option-missing { + type oc-yang:counter64; + description + "Number of DHCP Responses received without an agent + option, when requests are sent with one"; + } + leaf agent-option-corrupt { + type oc-yang:counter64; + description + "Number of DHCP Responses received with a corrupt agent + option, when requests are sent with an agent option"; + } + leaf circuit-id-missing { + type oc-yang:counter64; + description + "Number of DHCP Responses with a an agent option that + doesn't contain a circuit ID suboption, when requests + are sent with an agent option"; + } + leaf no-circuit-id-match { + type oc-yang:counter64; + description + "Number of DHCP Responses with an agent option circuit + ID that doesn't match any DHCP relay enabled + interface's circuit ID"; + } + leaf agent-option-add-error { + type oc-yang:counter64; + description + "Number of DHCP Requests for which the agent option + could not be added due to length"; + } + leaf circuit-id-exists { + type oc-yang:counter64; + description + "Number of DHCP Requests received that already contain + an agent option with a circuit ID"; + } + leaf parse-error { + type oc-yang:counter64; + description + "Error in parsing. For example, options exceed the + length of the packet"; + } + } + } + } + + grouping relay-agent-dhcp-interface-counters { + description + "DHCP relay agent per interface counters grouping"; + + container counters { + description + "DHCP relay agent per interface counters"; + + config false; + + container state { + + leaf received-requests { + type oc-yang:counter64; + description + "Number of DHCP Requests received from a client on + the interface"; + } + leaf relayed-requests { + type oc-yang:counter64; + description + "Number of DHCP Requests from the interface that were + relayed to a server"; + } + leaf relayed-responses { + type oc-yang:counter64; + description + "Number of DHCP Responses relayed to a client on the + interface"; + } + leaf drops { + type oc-yang:counter64; + description + "Number of DHCP Requests from the interface that were + dropped"; + } + leaf last-clear { + type yang:date-and-time; + description + "Indicates the last time the counters were + cleared."; + } + } + } + } + + typedef circuit-id-formats { + type enumeration { + enum HOSTNAME_PORT { + description + "Generate the Circuit ID based on the relay agent's hostname + and port the request arrived on"; + } + enum PORT_VLAN { + description + "Generate the Circuit ID based on the port and VLAN ID + the request arrived on"; + } + } + description + "Format of the Agent Information option Circuit-ID generated"; + } + + grouping agent-information-ipv4-interface-config-ext { + description + "Extended configuration data for DCHP relay agent information option + on IPv4 interfaces"; + + leaf circuit-id-format { + type circuit-id-formats; + must "not(../oc-relay:circuit-id)" { + error-message "Only one of circuit-id or circuit-id-format may be configured"; + } + description + "When configured for an interface, the Circuit ID of relayed packets + will contain the chosen format"; + } + } + + grouping agent-information-ipv4-common-config-ext { + description + "Extended common configuration data for IPv4 DCHP relay agent + information option"; + + leaf circuit-id-format { + type circuit-id-formats; + description + "When configured the Circuit ID of relayed packets will contain the + chosen format, unless overridden at the interface level"; + } + } + + augment "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:config" { + leaf-list helper-address { + max-elements 16; + type inet:ip-address; + description + "IPv4 address of DHCP server to relay requests towards"; + } + } + + augment "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:state" { + leaf-list helper-address { + type inet:ip-address; + description + "IPv4 address of DHCP server to relay requests towards"; + } + } + + augment "/oc-relay:relay-agent/oc-relay:dhcp" { + + uses relay-agent-dhcp-global-counters; + uses relay-agent-dhcp-global-drop-counters; + } + + augment "/oc-relay:relay-agent/oc-relay:dhcpv6/oc-relay:config" { + uses relay-agent-ipv6-helper-config; + } + + augment "/oc-relay:relay-agent/oc-relay:dhcpv6/oc-relay:state" { + uses relay-agent-ipv6-helper-config; + } + + augment "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface" { + uses relay-agent-dhcp-interface-counters; + } + + augment "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:agent-information-option" + + "/oc-relay:config" { + uses agent-information-ipv4-interface-config-ext; + } + + augment "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:agent-information-option" + + "/oc-relay:state" { + uses agent-information-ipv4-interface-config-ext; + } + + augment "/oc-relay:relay-agent/oc-relay:dhcp" + + "/oc-relay:agent-information-option/oc-relay:config" { + uses agent-information-ipv4-common-config-ext; + } + + augment "/oc-relay:relay-agent/oc-relay:dhcp" + + "/oc-relay:agent-information-option/oc-relay:state" { + uses agent-information-ipv4-common-config-ext; + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-relay-agent-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-relay-agent-deviations.yang new file mode 100644 index 000000000..44a241a53 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-relay-agent-deviations.yang @@ -0,0 +1,139 @@ +module arcos-openconfig-relay-agent-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/relay-agent/deviations"; + prefix arc-oc-relay-dev; + + import openconfig-relay-agent { + prefix oc-relay; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines ArcOS deviations to the + OpenConfig relay-agent module. + + Copyright (c) 2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-07-21 { + description + "Added back deviated out per interface DHCPv4 helper-address"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp" + + "/oc-relay:config/oc-relay:enable-relay-agent" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcpv6" + + "/oc-relay:config/oc-relay:enable-relay-agent" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:config/oc-relay:enable" { + deviate add { + default true; + } + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:agent-information-option" + + "/oc-relay:config/oc-relay:circuit-id" { + deviate replace { + type string { + pattern '[A-Za-z0-9/:\-\+\._#@\[\]~\{\}=\^]{1,63}'; + } + } + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:state/oc-relay:counters" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:agent-information-option" + + "/oc-relay:config/oc-relay:enable" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:agent-information-option" + + "/oc-relay:config/oc-relay:remote-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:agent-information-option" + + "/oc-relay:state/oc-relay:enable" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:agent-information-option" + + "/oc-relay:state/oc-relay:remote-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcp/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:agent-information-option" + + "/oc-relay:state/oc-relay:sent-remote-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcpv6/oc-relay:options" { + deviate not-supported; + description "Options not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcpv6/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:config/oc-relay:helper-address" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcpv6/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:config/oc-relay:enable" { + deviate add { + default true; + } + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcpv6/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:state/oc-relay:helper-address" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcpv6/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:state/oc-relay:counters" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-relay:relay-agent/oc-relay:dhcpv6/oc-relay:interfaces" + + "/oc-relay:interface/oc-relay:options" { + deviate not-supported; + description "Not supported in this release"; + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-augments-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-augments-deviations.yang new file mode 100644 index 000000000..f73bb088b --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-augments-deviations.yang @@ -0,0 +1,103 @@ +module arcos-openconfig-rib-bgp-augments-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/rib/bgp/augments/deviations"; + prefix arc-oc-rib-bgp-aug-dev; + + import arcos-openconfig-rib-bgp-augments { + prefix arc-oc-rib-bgp-aug; + } + + import openconfig-network-instance { + prefix oc-ni; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv4-label-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:state" + + "/arc-oc-rib-bgp-aug:neighbor-address" { + deviate replace { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:neighbor-address"; + } + } + description "Change neighbor-address type to leafref"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv6-label-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:state" + + "/arc-oc-rib-bgp-aug:neighbor-address" { + deviate replace { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:neighbor-address"; + } + } + description "Change neighbor-address type to leafref"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv4-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:state" + + "/arc-oc-rib-bgp-aug:neighbor-address" { + deviate replace { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:neighbor-address"; + } + } + description "Change neighbor-address type to leafref"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv6-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:state" + + "/arc-oc-rib-bgp-aug:neighbor-address" { + deviate replace { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:neighbor-address"; + } + } + description "Change neighbor-address type to leafref"; + } + + deviation "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l2vpn-evpn/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:state" + + "/arc-oc-rib-bgp-aug:neighbor-address" { + deviate replace { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor/oc-ni:neighbor-address"; + } + } + description "Change neighbor-address type to leafref"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-augments.yang new file mode 100644 index 000000000..f783199f7 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-augments.yang @@ -0,0 +1,7243 @@ +module arcos-openconfig-rib-bgp-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/rib/bgp/augments"; + prefix arc-oc-rib-bgp-aug; + + import openconfig-types { + prefix oc-types; + } + + import openconfig-bgp-types { + prefix oc-bgp-types; + } + + import ietf-inet-types { + prefix inet; + } + + import openconfig-rib-bgp { + prefix oc-rib-bgp; + } + + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + + import openconfig-network-instance { + prefix oc-ni; + } + + import openconfig-network-instance-types { + prefix oc-ni-types; + } + + import openconfig-mpls-types { + prefix "oc-mpls-t"; + } + + import arcos-bgp-types { + prefix arc-bgp-types; + } + + import openconfig-rib-bgp-types { + prefix oc-ribbgp-types; + } + + import arcos-srv6-types { + prefix arc-srv6-types; + } + + import arcos-openconfig-rib-bgp-types { + prefix arc-oc-ribbgp-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module defines augmentation for Arrcus + implementation of the openconfig BGP RIB module. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-02-22 { + description "Added network-instance filter for EVPN routes"; + } + + revision 2022-10-26 { + description "Added network-instance filter for MUP routes"; + } + + revision 2022-08-10 { + description "Added MUP SAFI support"; + } + + revision 2022-04-19 { + description + "* Added auto-inbound-soft-reconfiguation to route oper state. + * Extended path-flags to 64-bits."; + } + + revision 2022-03-15 { + description "Added SID Next Hop for routes"; + } + + revision 2019-06-24 { + description "ArcOS release 3.3.1"; + } + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + revision 2017-09-12 { + description + "Initial Revision + * Add BGP-LU Support. + * Add embedded attribute state to route. + * Add route/state/{versions|path-types|path-lists|rib-outs}. + * Add attr-set/state/{community-index|ext-community-index/refcount}. + * Add weigth/as-path-string to route/attributes/state and + attr-set/state. + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + grouping bgp-rib-ag-adj-rib-common-attr-refs { + description + "Definitions of common references to attribute sets for + multiple AFI-SAFIs for Adj-RIB tables"; + + leaf attr-index { + type leafref { + path "../../../../../../../../../../oc-ni:attr-sets/oc-ni:attr-set/" + + "oc-ni:state/oc-ni:index"; + } + description + "Reference to the common attribute group for the + route"; + } + + leaf community-index { + type leafref { + path "../../../../../../../../../../oc-ni:communities/oc-ni:community/" + + "oc-ni:state/oc-ni:index"; + } + description + "Reference to the community attribute for the route"; + } + + leaf ext-community-index { + type leafref { + path "../../../../../../../../../../oc-ni:ext-communities/" + + "oc-ni:ext-community/oc-ni:state/oc-ni:index"; + } + description + "Reference to the extended community attribute for the + route"; + } + } + + grouping bgp-rib-ag-exported-adj-rib-out-attr-refs { + description + "Definitions of common references to attribute sets for + multiple AFI-SAFIs for Adj-RIB tables"; + + leaf attr-index { + type leafref { + path "../../../../../../../../../../../../oc-ni:attr-sets/oc-ni:attr-set/" + + "oc-ni:state/oc-ni:index"; + } + description + "Reference to the common attribute group for the + route"; + } + + leaf community-index { + type leafref { + path "../../../../../../../../../../../../oc-ni:communities/oc-ni:community/" + + "oc-ni:state/oc-ni:index"; + } + description + "Reference to the community attribute for the route"; + } + + leaf ext-community-index { + type leafref { + path "../../../../../../../../../../../../oc-ni:ext-communities/" + + "oc-ni:ext-community/oc-ni:state/oc-ni:index"; + } + description + "Reference to the extended community attribute for the + route"; + } + } + + grouping bgp-rib-ag-loc-rib-common-attr-refs { + description + "Definitions of common references to attribute sets for + multiple AFI-SAFIs for LOC-RIB tables"; + + leaf attr-index { + type leafref { + path "../../../../../../../../oc-ni:attr-sets/oc-ni:attr-set/" + + "oc-ni:state/oc-ni:index"; + } + description + "Reference to the common attribute group for the + route"; + } + + leaf community-index { + type leafref { + path "../../../../../../../../oc-ni:communities/oc-ni:community/" + + "oc-ni:state/oc-ni:index"; + } + description + "Reference to the community attribute for the route"; + } + + leaf ext-community-index { + type leafref { + path "../../../../../../../../oc-ni:ext-communities/" + + "oc-ni:ext-community/oc-ni:state/oc-ni:index"; + } + description + "Reference to the extended community attribute for the + route"; + } + } + + grouping bgp-large-community-attr-state { + description + "Common definition of BGP large community attribute"; + + leaf-list large-community { + type arc-oc-bgp-types:bgp-large-community-type; + description + "List of BGP large community attributes. The received + large community may be an explicitly modeled + by an 12 octet value according to RFC 8092."; + reference + "RFC 8092 - BGP Large Communities Attribute"; + } + + } + + grouping large-community-sets-top { + description + "Top level grouping for list of large community attribute + sets"; + + container large-communities { + description + "Enclosing container for the list of large community + attribute sets"; + + list large-community { + key "index"; + + description + "List of path attributes that may be in use by multiple + routes in the table"; + + leaf index { + type leafref { + path "../state/index"; + } + description + "Reference to the list key"; + } + + container state { + config false; + description + "Operational state for shared BGP large community + attribute"; + + leaf index { + type uint64; + description + "System generated index for each attribute set. The + index is used to reference an attribute set from a + specific path. Multiple paths may reference the same + attribute set."; + } + + leaf refcount { + type uint32; + description + "Refcount of the large community attribute"; + } + + uses bgp-large-community-attr-state; + } + } + } + } + + grouping attr-route-shared-top { + leaf weight { + type uint16; + description + "Weight of the route"; + } + + leaf aigp-metric { + type uint64; + description + "AIGP metric of the route"; + } + + leaf as-path-string { + type string; + description + "String representation of the AS path."; + } + + leaf esi { + type string; + description + "Ethernet Segment ID (ESI)"; + } + + leaf gateway { + type inet:ip-address; + description + "EVPN route type-5 gateway"; + } + } + + grouping attr-top { + leaf community-index { + type leafref { + path "../../../../oc-ni:communities" + + "/oc-ni:community/oc-ni:state/oc-ni:index"; + } + description + "Reference to the community attribute for the route"; + } + + leaf ext-community-index { + type leafref { + path "../../../../oc-ni:ext-communities" + + "/oc-ni:ext-community/oc-ni:state/oc-ni:index"; + } + description + "Reference to the extended community attribute for the + route"; + } + + leaf large-community-index { + type leafref { + path "../../../../arc-oc-rib-bgp-aug:large-communities" + + "/arc-oc-rib-bgp-aug:large-community/arc-oc-rib-bgp-aug:state/arc-oc-rib-bgp-aug:index"; + } + description + "Reference to the large community attribute for the + route"; + } + + uses attr-route-shared-top; + + leaf refcount { + type uint32; + description + "Refcount of the attr-set"; + } + } + + grouping comm-top { + leaf refcount { + type uint32; + description + "Refcount of the community attribute"; + } + } + + grouping extcomm-top { + leaf refcount { + type uint32; + description + "Refcount of the extended community attribute"; + } + } + + grouping bgp-loc-rib-remote-label { + leaf out-tag { + type uint32; + default 0; + description + "MPLS Out tag"; + } + + leaf-list remote-labels { + type uint32; + description + "Per-path remote labels"; + } + } + + grouping bgp-loc-rib-local-label { + leaf local-label { + type uint32; + description + "Per-NLRI local label"; + } + } + + grouping bgp-l2vpn-evpn-route-filters-top { + description + "Filters for EVPN route types."; + leaf route-type { + type uint8; + description + "EVPN route type."; + } + + leaf route-distinguisher { + type oc-ni-types:route-distinguisher; + description + "The route distinguisher of the EVPN route."; + } + + leaf network-instance { + type leafref { + path "/oc-ni:network-instances" + + "/oc-ni:network-instance/oc-ni:name"; + } + description + "The network-instance of the the MUP route"; + } + } + + grouping bgp-l2vpn-evpn-route-top { + + leaf second-out-tag { + type uint32; + description + "Second label"; + } + } + + grouping bgp-lu-adj-rib-key-refs-v4 { + description + "Key references to support operational state structure for + the BGP ADJ-RIB table"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-lu-loc-rib-key-refs-v4 { + description + "Key references to support operational state structure for + the BGP LOC-RIB table"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-lu-adj-rib-key-refs-v6 { + description + "Key references to support operational state structure for + the BGP ADJ-RIB table"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-lu-loc-rib-key-refs-v6 { + description + "Key references to support operational state structure for + the BGP LOC-RIB table"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping ipv4-lu-loc-rib-top { + description + "Top-level grouping for IPv4 routing tables"; + + container loc-rib { + config false; + description + "Container for the IPv4 BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-lu-loc-rib-key-refs-v4; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type inet:ipv4-prefix; + description + "The IPv4 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + uses bgp-loc-rib-local-label; + uses bgp-loc-rib-remote-label; + uses bgp-rib-ag-loc-rib-common-attr-refs; + uses oc-rib-bgp:bgp-loc-rib-attr-state; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + uses bgp-prefix-sid-attr-top; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping ipv4-lu-adj-rib-out { + description + "Structural grouping for each IPv4 label-unicast adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix, origin and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-lu-loc-rib-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type inet:ipv4-prefix; + description + "Prefix for the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + uses bgp-loc-rib-remote-label; + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses bgp-prefix-sid-attr-top; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping ipv4-lu-adj-rib-common { + description + "Common structural grouping for each IPv4 label-unicast adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-lu-adj-rib-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type inet:ipv4-prefix; + description + "Prefix for the route"; + } + uses bgp-loc-rib-local-label; + uses bgp-loc-rib-remote-label; + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses bgp-prefix-sid-attr-top; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping ipv4-lu-adj-rib-in-post { + description + "Common structural grouping for the IPv4 label-unicast adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-lu-adj-rib-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type inet:ipv4-prefix; + description + "Prefix for the route"; + } + + uses bgp-loc-rib-local-label; + uses bgp-loc-rib-remote-label; + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses oc-rib-bgp:bgp-adj-rib-in-post-route-annotations-state; + uses bgp-prefix-sid-attr-top; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping ipv4-lu-adj-rib-top { + description + "Top-level grouping for ipv4-label-unicast Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses ipv4-lu-adj-rib-common; + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses ipv4-lu-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses ipv4-lu-adj-rib-out; + } + } + } + } + + grouping ipv6-lu-loc-rib-top { + description + "Top-level grouping for IPv6 routing tables"; + + container loc-rib { + config false; + description + "Container for the IPv6 BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-lu-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + uses bgp-loc-rib-local-label; + uses bgp-loc-rib-remote-label; + uses bgp-rib-ag-loc-rib-common-attr-refs; + uses oc-rib-bgp:bgp-loc-rib-attr-state; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + uses bgp-prefix-sid-attr-top; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping ipv6-lu-adj-rib-out { + description + "Structural grouping for each IPv6 label-unicast adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix, origin and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-lu-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type inet:ipv6-prefix; + description + "Prefix for the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + uses bgp-loc-rib-remote-label; + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping ipv6-lu-adj-rib-common { + description + "Common structural grouping for each IPv4 label-unicast adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-lu-adj-rib-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type inet:ipv6-prefix; + description + "Prefix for the route"; + } + uses bgp-loc-rib-local-label; + uses bgp-loc-rib-remote-label; + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping ipv6-lu-adj-rib-in-post { + description + "Common structural grouping for the IPv4 label-unicast adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-lu-adj-rib-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type inet:ipv6-prefix; + description + "Prefix for the route"; + } + + uses bgp-loc-rib-local-label; + uses bgp-loc-rib-remote-label; + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses oc-rib-bgp:bgp-adj-rib-in-post-route-annotations-state; + uses bgp-prefix-sid-attr-top; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping ipv6-lu-adj-rib-top { + description + "Top-level grouping for ipv4-label-unicast Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses ipv6-lu-adj-rib-common; + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses ipv6-lu-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses ipv6-lu-adj-rib-out; + } + } + } + } + + + grouping bgp-vpn-loc-rib-key-refs { + description + "Key references to support operational state structure for + the BGP VPNv4 and VPNv6 LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-vpn-adj-rib-in-key-refs { + description + "Key references to support operational state structure for + the BGP VPNv4 and VPNv6 adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping l3vpn-ipv4-loc-rib-top { + description + "Top-level grouping for VPNv4 routing tables"; + + container loc-rib { + config false; + description + "Container for the VPNv4 BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-vpn-loc-rib-key-refs; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The VPNv4 or VPNv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + + uses bgp-loc-rib-local-label; + + uses bgp-rib-ag-loc-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-loc-rib-attr-state; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping l3vpn-ipv4-exported-adj-rib-out { + description + "Structural grouping for VPNv4 exported adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv4 prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-exported-adj-rib-out-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv6-exported-adj-rib-out { + description + "Structural grouping for VPNv6 exported adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv6 prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-exported-adj-rib-out-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv4-adj-rib-out { + description + "Structural grouping for VPNv4 adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv4 prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv4-exported-rib { + description + "Structural grouping for VPNv4 table from exported routes"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP exported RIB entries"; + + leaf prefix { + type string; + description + "The VPNv4 prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv6-exported-rib { + description + "Structural grouping for VPNv6 table from exported routes"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP exported RIB entries"; + + leaf prefix { + type string; + description + "The VPNv6 prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv4-adj-rib-common { + description + "Common structural grouping for each VPNv4 adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-adj-rib-in-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv4 or VPNv6 prefix corresponding to the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv4-adj-rib-in-post { + description + "Common structural grouping for the VPNv4 adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-adj-rib-in-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv4 or VPNv6 prefix corresponding to the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv4-ni-exported-adj-rib-out-top { + description + "Top-level grouping for exported adj-rib-out to a neighbor"; + + container network-instances { + config false; + description + "Enclosing container for network-instance list"; + + list network-instance { + key "network-instance-name"; + description + "List of network-instances the routes are exported from"; + + leaf network-instance-name { + type leafref { + path "../state/network-instance-name"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each network-instance exported RIB"; + + leaf network-instance-name { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:config/oc-ni:name"; + } + description + "Reference to the network-instance list key"; + } + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses l3vpn-ipv4-exported-adj-rib-out; + } + } + } + } + + grouping l3vpn-ipv6-ni-exported-adj-rib-out-top { + description + "Top-level grouping for exported adj-rib-out to a neighbor"; + + container network-instances { + config false; + description + "Enclosing container for network-instance list"; + + list network-instance { + key "network-instance-name"; + description + "List of network-instances the routes are exported from"; + + leaf network-instance-name { + type leafref { + path "../state/network-instance-name"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each network-instance exported RIB"; + + leaf network-instance-name { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:config/oc-ni:name"; + } + description + "Reference to the network-instance list key"; + } + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses l3vpn-ipv6-exported-adj-rib-out; + } + } + } + } + + grouping l3vpn-ipv4-ni-exported-rib-top { + description + "Top-level grouping for exported routes from network-instances"; + + container network-instances { + config false; + description + "Enclosing container for network-instance list"; + + list network-instance { + key "network-instance-name"; + description + "List of network-instances the routes are exported from"; + + leaf network-instance-name { + type leafref { + path "../state/network-instance-name"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each network-instance exported RIB"; + + leaf network-instance-name { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:config/oc-ni:name"; + } + description + "Reference to the network-instance list key"; + } + } + + container exported-rib { + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses l3vpn-ipv4-exported-rib; + } + } + } + } + + grouping l3vpn-ipv6-ni-exported-rib-top { + description + "Top-level grouping for exported routes from network-instances"; + + container network-instances { + config false; + description + "Enclosing container for network-instance list"; + + list network-instance { + key "network-instance-name"; + description + "List of network-instances the routes are exported from"; + + leaf network-instance-name { + type leafref { + path "../state/network-instance-name"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each network-instance exported RIB"; + + leaf network-instance-name { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:config/oc-ni:name"; + } + description + "Reference to the network-instance list key"; + } + } + + container exported-rib { + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses l3vpn-ipv6-exported-rib; + } + } + } + } + + grouping l3vpn-ipv4-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses l3vpn-ipv4-adj-rib-common; + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses l3vpn-ipv4-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses l3vpn-ipv4-adj-rib-out; + } + + uses l3vpn-ipv4-ni-exported-adj-rib-out-top; + } + } + } + + grouping bgp-flowspec-loc-rib-key-refs-v4 { + description + "Key references to support operational state structure for + the BGP Flowspec IPv4 LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-flowspec-adj-rib-in-key-refs-v4 { + description + "Key references to support operational state structure for + the BGP Flowspec IPv4 adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping flowspec-ipv4-unicast-loc-rib-top { + description + "Top-level grouping for Flowspec IPv4 routing tables"; + + container loc-rib { + config false; + description + "Container for the Flowspec IPv4 BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-flowspec-loc-rib-key-refs-v4; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The Flowspec IPv4 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + uses bgp-rib-ag-loc-rib-common-attr-refs; + uses oc-rib-bgp:bgp-loc-rib-attr-state; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping flowspec-ipv4-unicast-adj-rib-out { + description + "Structural grouping for Flowspec IPv4 adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-flowspec-loc-rib-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The Flowspec IPv4 prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping flowspec-ipv4-unicast-adj-rib-common { + description + "Common structural grouping for each Flowspec IPv4 adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-flowspec-adj-rib-in-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The Flowspec IPv4 or VPNv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping flowspec-ipv4-unicast-adj-rib-in-post { + description + "Common structural grouping for the Flowspec IPv4 adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-flowspec-adj-rib-in-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The Flowspec IPv4 or VPNv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping flowspec-ipv4-unicast-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses flowspec-ipv4-unicast-adj-rib-common; + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses flowspec-ipv4-unicast-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses flowspec-ipv4-unicast-adj-rib-out; + } + } + } + } + + /* + * L2VPN EVPN loc-rib and adj-rib. + */ + grouping bgp-l2vpn-evpn-loc-rib-key-refs { + description + "Key references to support operational state structure for + the L2VPN EVPN LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-l2vpn-evpn-adj-rib-in-key-refs { + description + "Key references to support operational state structure for + the BGP L2VPN EVPN adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping l2vpn-evpn-loc-rib-top { + description + "Top-level grouping for L2VPN EVPN routing tables"; + + container loc-rib { + config false; + description + "Container for the L2VPN EVPN BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-l2vpn-evpn-loc-rib-key-refs; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The EVPN prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + + uses bgp-loc-rib-local-label; + + uses bgp-rib-ag-loc-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-loc-rib-attr-state; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + + uses bgp-loc-rib-remote-label; + + uses bgp-l2vpn-evpn-route-top; + } + + uses bgp-l2vpn-evpn-route-filters-top; + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping l2vpn-evpn-adj-rib-out { + description + "Structural grouping for L2VPN EVPN adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-l2vpn-evpn-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The L2VPN EVPN prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + + uses bgp-l2vpn-evpn-route-top; + } + + uses bgp-l2vpn-evpn-route-filters-top; + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l2vpn-evpn-adj-rib-common { + description + "Common structural grouping for each L2VPN EVPN adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-l2vpn-evpn-adj-rib-in-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The L2VPN EVPN prefix corresponding to the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + + uses bgp-l2vpn-evpn-route-top; + } + + uses bgp-l2vpn-evpn-route-filters-top; + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l2vpn-evpn-adj-rib-in-post { + description + "Common structural grouping for the L2VPN EVPN adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-l2vpn-evpn-adj-rib-in-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv4 or VPNv6 prefix corresponding to the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + + uses bgp-l2vpn-evpn-route-top; + } + + uses bgp-l2vpn-evpn-route-filters-top; + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l2vpn-evpn-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses l2vpn-evpn-adj-rib-common; + + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses l2vpn-evpn-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses l2vpn-evpn-adj-rib-out; + } + } + } + } + + /* + * MUP loc-rib and adj-rib. + */ + grouping bgp-mup-route-filters-top { + description + "Filters for MUP route types."; + leaf route-type { + type uint8; + description + "MUP route type."; + } + + leaf route-distinguisher { + type oc-ni-types:route-distinguisher; + description + "The route distinguisher of the MUP route."; + } + + leaf network-instance { + type leafref { + path "/oc-ni:network-instances" + + "/oc-ni:network-instance/oc-ni:name"; + } + description + "The network-instance of the the MUP route"; + } + } + + grouping bgp-mup-route-top { + leaf teid { + type inet:ipv4-address; + description + "The TEID carried in the Type-1 ST NLRI."; + reference "draft-mpmz-bess-mup-safi-01.txt"; + } + leaf qfi { + type uint8; + description + "The QFI carried in the Type-1 ST NLRI."; + reference "draft-mpmz-bess-mup-safi-01.txt"; + } + leaf endpoint { + type inet:ip-address; + description + "The endpoint address carried in the Type-1 ST NLRI."; + reference "draft-mpmz-bess-mup-safi-01.txt"; + } + } + + grouping bgp-mup-loc-rib-key-refs { + description + "Key references to support operational state structure for + the MUP LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-mup-adj-rib-in-key-refs { + description + "Key references to support operational state structure for + the BGP MUP adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping mup-loc-rib-top { + description + "Top-level grouping for MUP routing tables"; + + container loc-rib { + config false; + description + "Container for the MUP BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-mup-loc-rib-key-refs; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The EVPN prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + + uses bgp-rib-ag-loc-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-loc-rib-attr-state; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + + uses bgp-mup-route-top; + } + + uses bgp-mup-route-filters-top; + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping mup-adj-rib-out { + description + "Structural grouping for MUP adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-mup-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The MUP prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-mup-route-top; + } + + uses bgp-mup-route-filters-top; + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping mup-adj-rib-common { + description + "Common structural grouping for each MUP adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-mup-adj-rib-in-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The MUP prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-mup-route-top; + } + + uses bgp-mup-route-filters-top; + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping mup-adj-rib-in-post { + description + "Common structural grouping for the MUP adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-mup-adj-rib-in-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv4 or VPNv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-mup-route-top; + } + + uses bgp-mup-route-filters-top; + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping mup-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses mup-adj-rib-common; + + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses mup-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses mup-adj-rib-out; + } + } + } + } + + //VPNv6 loc-rib and adj-rib + grouping bgp-vpn-loc-rib-key-refs-v6 { + description + "Key references to support operational state structure for + the BGP VPNv6 LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-vpn-adj-rib-in-key-refs-v6 { + description + "Key references to support operational state structure for + the BGP VPNv6 adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping l3vpn-ipv6-loc-rib-top { + description + "Top-level grouping for VPNv6 routing tables"; + + container loc-rib { + config false; + description + "Container for the VPNv6 BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-vpn-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The VPNv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + + uses bgp-loc-rib-local-label; + + uses bgp-rib-ag-loc-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-loc-rib-attr-state; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping l3vpn-ipv6-adj-rib-out { + description + "Structural grouping for VPNv6 adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv6 refix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv6-adj-rib-common { + description + "Common structural grouping for each VPNv6 adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-adj-rib-in-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv6 prefix corresponding to the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv6-adj-rib-in-post { + description + "Common structural grouping for the VPNv6 adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-vpn-adj-rib-in-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The VPNv6 prefix corresponding to the route"; + } + + uses bgp-loc-rib-local-label; + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses bgp-loc-rib-remote-label; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping l3vpn-ipv6-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses l3vpn-ipv6-adj-rib-common; + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses l3vpn-ipv6-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses l3vpn-ipv6-adj-rib-out; + } + + uses l3vpn-ipv6-ni-exported-adj-rib-out-top; + } + } + } + + grouping bgp-flowspec-loc-rib-key-refs-v6 { + description + "Key references to support operational state structure for + the BGP Flowspec IPv6 LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-flowspec-adj-rib-in-key-refs-v6 { + description + "Key references to support operational state structure for + the BGP Flowspec IPv6 adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping flowspec-ipv6-unicast-loc-rib-top { + description + "Top-level grouping for Flowspec IPv6 routing tables"; + + container loc-rib { + config false; + description + "Container for the Flowspec IPv6 BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-flowspec-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The Flowspec IPv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + uses bgp-rib-ag-loc-rib-common-attr-refs; + uses oc-rib-bgp:bgp-loc-rib-attr-state; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping flowspec-ipv6-unicast-adj-rib-out { + description + "Structural grouping for Flowspec IPv6 adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-flowspec-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The Flowspec IPv6 refix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping flowspec-ipv6-unicast-adj-rib-common { + description + "Common structural grouping for each Flowspec IPv6 adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-flowspec-adj-rib-in-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The Flowspec IPv6 or VPNv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping flowspec-ipv6-unicast-adj-rib-in-post { + description + "Common structural grouping for the Flowspec IPv6 adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-flowspec-adj-rib-in-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The Flowspec IPv6 or VPNv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping flowspec-ipv6-unicast-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses flowspec-ipv6-unicast-adj-rib-common; + + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses flowspec-ipv6-unicast-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses flowspec-ipv6-unicast-adj-rib-out; + } + } + } + } + + + /* SRTE Policy IPv4 loc-rib and adj-rib */ + grouping bgp-srte-loc-rib-key-refs-v4 { + description + "Key references to support operational state structure for + the BGP SRTE Policy IPv4 LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-srte-adj-rib-in-key-refs-v4 { + description + "Key references to support operational state structure for + the BGP SRTE Policy IPv4 adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping srte-policy-ipv4-loc-rib-top { + description + "Top-level grouping for SRTE Policy IPv4 routing tables"; + + container loc-rib { + config false; + description + "Container for the SRTE Policy IPv4 BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-srte-loc-rib-key-refs-v4; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The SRTE Policy IPv4 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + uses bgp-rib-ag-loc-rib-common-attr-refs; + uses oc-rib-bgp:bgp-loc-rib-attr-state; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping srte-policy-ipv4-adj-rib-out { + description + "Structural grouping for SRTE Policy IPv4 adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-srte-loc-rib-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The SRTE Policy IPv4 prefix corresponding to the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping srte-policy-ipv4-adj-rib-common { + description + "Common structural grouping for each SRTE Policy IPv4 adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-srte-adj-rib-in-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The SRTE Policy IPv4 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping srte-policy-ipv4-adj-rib-in-post { + description + "Common structural grouping for the SRTE Policy IPv4 adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-srte-adj-rib-in-key-refs-v4; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The SRTE Policy IPv4 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping srte-policy-ipv4-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses srte-policy-ipv4-adj-rib-common; + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses srte-policy-ipv4-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses srte-policy-ipv4-adj-rib-out; + } + } + } + } + + /* SRTE Policy IPv6 loc-rib and adj-rib */ + grouping bgp-srte-loc-rib-key-refs-v6 { + description + "Key references to support operational state structure for + the BGP SRTE Policy IPv6 LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-srte-adj-rib-in-key-refs-v6 { + description + "Key references to support operational state structure for + the BGP SRTE Policy IPv6 adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping srte-policy-ipv6-loc-rib-top { + description + "Top-level grouping for SRTE Policy IPv6 routing tables"; + + container loc-rib { + config false; + description + "Container for the SRTE Policy IPv6 BGP LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-srte-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The SRTE Policy IPv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + uses bgp-rib-ag-loc-rib-common-attr-refs; + uses oc-rib-bgp:bgp-loc-rib-attr-state; + uses oc-rib-bgp:bgp-common-route-annotations-state; + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping srte-policy-ipv6-adj-rib-out { + description + "Structural grouping for SRTE Policy IPv6 adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-srte-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The SRTE Policy IPv6 prefix corresponding to the route"; + } + + leaf origin { + type inet:ip-address-no-zone; + description + "The origin of the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping srte-policy-ipv6-adj-rib-common { + description + "Common structural grouping for each SRTE Policy IPv6 adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-srte-adj-rib-in-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The SRTE Policy IPv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping srte-policy-ipv6-adj-rib-in-post { + description + "Common structural grouping for the SRTE Policy IPv6 adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-srte-adj-rib-in-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The SRTE Policy IPv6 prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping srte-policy-ipv6-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-pre { + description + "Per-neighbor table containing the NLRI updates + received from the neighbor before any local input + policy rules or filters have been applied. This can + be considered the 'raw' updates from the neighbor."; + + uses srte-policy-ipv6-adj-rib-common; + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses srte-policy-ipv6-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses srte-policy-ipv6-adj-rib-out; + } + } + } + } + + /* RTFILTER loc-rib and adj-rib */ + grouping bgp-rtfilter-loc-rib-key-refs { + description + "Key references to support operational state structure for + the BGP RTFILTER LOC-RIB tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf origin { + type leafref { + path "../state/origin"; + } + description + "Reference to the origin list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-rtfilter-adj-rib-in-key-refs { + description + "Key references to support operational state structure for + the BGP RTFILTER adj-RIB-in tables"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the prefix list key"; + } + + leaf path-id { + type leafref { + path "../state/path-id"; + } + description + "Reference to the path-id list key"; + } + } + + grouping bgp-rtfilter-loc-rib-top { + description + "Top-level grouping for RTFILTER Loc-RIB"; + + container loc-rib { + config false; + description + "Container for the BGP RTFILTER LOC-RIB data"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by the route + prefix, the route origin, and path-id. The route + origin can be either the neighbor address from which + the route was learned, or the source protocol that + injected the route. The path-id distinguishes routes + for the same prefix received from a neighbor (e.g., + if add-paths is eanbled)."; + + uses bgp-rtfilter-loc-rib-key-refs; + + container state { + description + "Operational state data for route entries in the + BGP LOC-RIB"; + + leaf prefix { + type string; + description + "The RTFILTER prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-loc-rib-common-keys; + + uses bgp-rib-ag-loc-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-loc-rib-attr-state; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + + uses oc-rib-bgp:bgp-loc-rib-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + } + + grouping bgp-rtfilter-adj-rib-out { + description + "Structural grouping for RTFILTER adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-rtfilter-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The RTFILTER prefix corresponding to the route"; + } + + leaf origin { + type inet:ip-address-no-zone; + description + "The origin of the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping bgp-rtfilter-adj-rib-common { + description + "Common structural grouping for each RTFILTER adj-RIB table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-rtfilter-adj-rib-in-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The RTFILTER prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping bgp-rtfilter-adj-rib-in-post { + description + "Common structural grouping for the RTFILTER adj-rib-in + post-policy table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses bgp-rtfilter-adj-rib-in-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type string; + description + "The RTFILTER prefix corresponding to the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + + uses bgp-rib-ag-adj-rib-common-attr-refs; + + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping bgp-rtfilter-adj-rib-top { + description + "Top-level grouping for Adj-RIB table"; + + container neighbors { + config false; + description + "Enclosing container for neighbor list"; + + list neighbor { + key "neighbor-address"; + description + "List of neighbors (peers) of the local BGP speaker"; + + leaf neighbor-address { + type leafref { + path "../state/neighbor-address"; + } + description + "Reference to the list key"; + } + + container state { + description + "Operational state for each neighbor BGP Adj-RIB"; + + leaf neighbor-address { + type leafref { + path "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp" + + "/oc-ni:neighbors/oc-ni:neighbor" + + "/oc-ni:neighbor-address"; + } + description + "IP address of the BGP neighbor or peer"; + } + } + + container adj-rib-in-post { + description + "Per-neighbor table containing the paths received from + the neighbor that are eligible for best-path selection + after local input policy rules have been applied."; + + uses bgp-rtfilter-adj-rib-in-post; + } + + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses bgp-rtfilter-adj-rib-out; + } + } + } + } + + identity PATH_TYPE { + description "Base identity for BGP path type."; + } + + identity AGGREGATE_SUPPRESSED_PATH { + base PATH_TYPE; + description "Aggregate suppressed path."; + } + + identity BEST_PATH { + base PATH_TYPE; + description "Best path."; + } + + identity SECOND_BEST_PATH { + base PATH_TYPE; + description "Second best path."; + } + + identity BACKUP_PATH { + base PATH_TYPE; + description "Backup path."; + } + + identity BEST_EXTERNAL_PATH { + base PATH_TYPE; + description "Best-external path."; + } + + identity MULTI_PATH { + base PATH_TYPE; + description "Multiple path."; + } + + identity OLD_BEST_PATH { + base PATH_TYPE; + description "Old best path."; + } + + identity OLD_MULTI_PATH { + base PATH_TYPE; + description "Old multiple path."; + } + + identity LOCAL_PATH { + base PATH_TYPE; + description "Local path."; + } + + identity CONTROLLER_PATH { + base PATH_TYPE; + description "Controller path."; + } + + identity IMPORT_SOURCE_PATH { + base PATH_TYPE; + description "Import source path."; + } + + identity IMPORTED_PATH { + base PATH_TYPE; + description "Imported path."; + } + + identity EXPORT_SOURCE_PATH { + base PATH_TYPE; + description "Export source path."; + } + + identity EXPORTED_PATH { + base PATH_TYPE; + description "Exported path."; + } + + identity REIMPORT_PATH { + base PATH_TYPE; + description "Reimported source/target path."; + } + + identity DELETED_PATH { + base PATH_TYPE; + description "Deleted path."; + } + + identity PATH_LIST { + description "Base identity for BGP path list."; + } + + identity UPDATE_PATH_LIST { + base PATH_LIST; + description "Update path list."; + } + + identity L3VPN_UPDATE_PATH_LIST { + base PATH_LIST; + description "Update path list."; + } + + identity LABEL_PATH_LIST { + base PATH_LIST; + description "Label path list."; + } + + identity BEST_PATH_LIST { + base PATH_LIST; + description "Best path list."; + } + + identity RIB_PATH_LIST { + base PATH_LIST; + description "RIB path list."; + } + + identity NEXT_HOP_PATH_LIST { + base PATH_LIST; + description "Next hop path list."; + } + + /* + * Augment invalid-route-reasons. + */ + identity BEST_PATH_PENDING { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was invalid due to best path calculation is not run yet"; + } + + identity REJECTED_IMPORT_POLICY { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was rejected after apply import policies"; + } + + identity NEXT_HOP_UNREACHABLE { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was invalid due to next-hop unreachable"; + } + + identity IMPORT_ERPL_PENDING { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was invalid due to import eRPL pending"; + } + + identity NO_PER_NEXTHOP_LABEL { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was invalid due to invalid per-nexthop label"; + } + + identity NO_PER_PREFIX_LABEL { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was invalid due to invalid per-prefix label"; + } + + identity NO_REMOTE_SID { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was invalid due to invalid remote service ID"; + } + + identity L2_MTU_MISMATCHED { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was invalid due to L2 MTU mismatched"; + } + + identity LOCAL_AC_DOWN { + base oc-ribbgp-types:INVALID_ROUTE_REASON; + description + "Route was invalid due to local AC in down state"; + } + + grouping rib-out-top { + leaf neighbor-count { + type uint32; + } + leaf-list neighbors { + type string; + } + } + + identity ORIGIN_VALIDATION_STATE { + description "Base identity for BGP prefix origin validation state"; + reference "RFC 6811"; + } + + identity NONE { + base ORIGIN_VALIDATION_STATE; + description + "Origin validation not performed yet"; + } + + identity NOT_FOUND { + base ORIGIN_VALIDATION_STATE; + description + "No VRP Covers the Route Prefix (RFC 6811)"; + } + + identity VALID { + base ORIGIN_VALIDATION_STATE; + description + "At least one VRP Matches the Route Prefix (RFC 6811)"; + } + + identity INVALID { + base ORIGIN_VALIDATION_STATE; + description + "At least one VRP Covers the Route Prefix, but no VRP Matches it + (RFC 6811)"; + } + + grouping loc-rib-large-community-index-top { + leaf large-community-index { + type leafref { + path "../../../../../../../../arc-oc-rib-bgp-aug:large-communities" + + "/arc-oc-rib-bgp-aug:large-community/arc-oc-rib-bgp-aug:state/arc-oc-rib-bgp-aug:index"; + } + description + "Reference to the large community attribute for the route"; + } + } + + grouping adj-rib-large-community-index-top { + leaf large-community-index { + type leafref { + path "../../../../../../../../../../arc-oc-rib-bgp-aug:large-communities" + + "/arc-oc-rib-bgp-aug:large-community/arc-oc-rib-bgp-aug:state/arc-oc-rib-bgp-aug:index"; + } + description + "Reference to the large community attribute for the route"; + } + } + + grouping adj-rib-ni-large-community-index-top { + leaf large-community-index { + type leafref { + path "../../../../../../../../../../../../arc-oc-rib-bgp-aug:large-communities" + + "/arc-oc-rib-bgp-aug:large-community/arc-oc-rib-bgp-aug:state/arc-oc-rib-bgp-aug:index"; + } + description + "Reference to the large community attribute for the route"; + } + } + + grouping route-top { + leaf next-hop { + type inet:ip-address; + description "Path next hop"; + } + + leaf srv6-sid-next-hop { + description "SID next hop"; + type inet:ipv6-address; + } + + leaf link-local-next-hop { + type inet:ip-address; + description "Path link local next hop"; + } + + leaf next-hop-srv6-oam-state { + type identityref { + base arc-oc-bgp-types:SRV6_OAM_STATES; + } + description "Path next hop OAM health state for SRv6"; + } + + leaf not-best-path-reason { + type string; + description "The reason if the path is not selected as best-path"; + } + + container versions { + description "Path version numbers"; + leaf path-version { + type uint64; + description + "Path version"; + } + } + + leaf tx-path-id { + type uint32; + default 0; + description + "If the route is learned from a neighbor, the tx-path-id + corresponds to the locally assigned path-id for the route."; + } + + leaf path-index { + type uint64; + description + "Locally assigned path-index for the path."; + } + + leaf-list path-types { + description "Path types."; + type identityref { + base PATH_TYPE; + } + } + + leaf-list path-lists { + description "Path lists."; + type identityref { + base PATH_LIST; + } + } + + container rib-outs { + description "RIB outs."; + container best-path { + description "Best path RIB out."; + uses rib-out-top; + } + container add-path { + description "Add path RIB out."; + uses rib-out-top; + } + } + + leaf stale-route { + type boolean; + description + "Indicate that the route is marked as stale in graceful-restart + procedures for the receiving speaker"; + } + + leaf origin-validation { + type identityref { + base ORIGIN_VALIDATION_STATE; + } + description + "BGP prefix origin validation state."; + } + + leaf auto-inbound-soft-reconfiguration { + type boolean; + description + "BGP prefix is selected for auto inbound soft reconfiguration"; + } + + leaf path-flags { + type uint64; + description + "BGP internal path flags."; + } + + leaf nlri-flags { + type uint32; + description + "BGP internal NLRI flags."; + } + + leaf nlri-version { + type uint64; + description + "BGP internal NLRI version number."; + } + + leaf protection-tracker-id { + type uint64; + description + "BGP path protection tracker ID."; + } + + leaf nlri-rib-ack-pending { + type boolean; + description + "BGP internal if NLRI is RIB ACK pending."; + } + + leaf srv6-tunnel-id { + type uint32; + description + "SRv6 Tunnel ID"; + } + } + + grouping rib-in-pre-route-top { + leaf next-hop { + type inet:ip-address; + description "Path next hop"; + } + + leaf link-local-next-hop { + type inet:ip-address; + description "Path link local next hop"; + } + + leaf origin-validation { + type identityref { + base ORIGIN_VALIDATION_STATE; + } + description + "BGP prefix origin validation state."; + } + + leaf auto-inbound-soft-reconfiguration { + type boolean; + description + "BGP prefix is selected for auto inbound soft reconfiguration"; + } + + leaf path-flags { + type uint64; + description + "BGP internal path flags."; + } + + leaf nlri-flags { + type uint32; + description + "BGP internal NLRI flags."; + } + + leaf srv6-tunnel-id { + type uint32; + description + "SRv6 Tunnel ID"; + } + } + + grouping bgp-large-community-attr-top { + description + "Common definition of BGP Large Community attribute"; + + leaf-list large-community { + type arc-oc-bgp-types:bgp-large-community-type; + description + "List of BGP large community attributes. The received + extended community may be an explicitly modeled + by 12 octet value formatted according to RFC 8092."; + reference + "RFC 8092 - BGP Large Communities Attribute"; + + } + } + + grouping pmsi-rsvp-te-p2mp { + description + "PMSI tunnel type RSVP + Traffic Engineering Point-to-Multipoint Label Switched Path"; + + container rsvp-te-p2mp { + description + "RSVP TE P2MP tunnel"; + + leaf p2mp-id { + type uint32; + description + "P2MP ID of the RSVP TE P2MP tunnel"; + } + + leaf tunnel-id { + type uint16; + description + "Tunnel ID of the RSVP TE P2MP tunnel"; + } + + leaf extended-tunnel-id { + type inet:ip-address; + description + "Extended tunnel ID of the RSVP TE P2MP Tunnel"; + } + } + } + + grouping pmsi-mldp-p2mp { + description + "PMSI MLDP P2MP tunnel"; + + container mldp-p2mp { + description + "PMSI Tunnel type MLDP P2MP"; + + leaf p2mp-type { + type uint8; + description + "The type of the P2MP FEC element"; + } + + leaf afi { + type uint16; + description + "IANAs address family"; + } + + leaf length { + type uint8; + description + "Lenght of the root LSRs address"; + } + + leaf root-node-address { + type inet:ip-address; + description + "Root node address"; + } + } + } + + grouping pmsi-pim-ssm { + description + "PMSI PIM SSM tunnel"; + + container pim-ssm { + description + "PMSI tunnel type PIM SSM"; + + leaf root-node-address { + type inet:ip-address; + description + "root node address"; + } + + leaf mcast-group { + type inet:ip-address; + description + "multicast group address"; + } + } + } + + grouping pmsi-pim-sm { + description + "PMSI PIM SM Tunnel"; + + container pim-sm { + description + "PMSI tunnel type PIM SM"; + + leaf sender-address { + type inet:ip-address; + description + "sender address"; + } + + leaf mcast-group { + type inet:ip-address; + description + "mmulticast group address"; + } + } + } + + grouping pmsi-pim-bidir { + description + "PMSI PIM BIDIR tunnel"; + + container pim-bidir { + description + "PMSI tunnel type PIM BIDIR"; + + leaf sender-address { + type inet:ip-address; + description + "sender address"; + } + + leaf mcast-group { + type inet:ip-address; + description + "mmulticast group address"; + } + } + } + + grouping pmsi-ingress-replication { + description + "PMSI ingress replication tunnel"; + + container ingress-replication { + description + "PMSI tunnel type Ingress replication"; + + leaf endpoint-address { + type inet:ip-address; + description + "tunnel endpoint address"; + } + } + } + + grouping pmsi-mldp-mp2mp { + description + "PMSI MLDP MP2MP tunnel"; + + container mldp-mp2mp { + description + "PMSI Tunnel type MLDP MP2MP"; + + leaf mp2mp-type { + type uint8; + description + "The type of the P2MP FEC element"; + } + + leaf afi { + type uint16; + description + "IANAs address family"; + } + + leaf length { + type uint8; + description + "Lenght of the root LSRs address"; + } + + leaf root-node-address { + type inet:ip-address; + description + "Root node address"; + } + } + } + + grouping bgp-pmsi-tunnel-attr-top { + description + "High level Grouping for PMSI tunnel Attribute"; + + container pmsi-tunnel-attr { + description + "Container for PMSI tunnel attribute"; + + container state { + description + "Operational state for PMSI tunnel attribute"; + + leaf flags { + type uint8; + description + "PMSI Tunnel attr flags"; + } + + leaf tunnel-type { + type uint8; + description + "PMSI attr tunnel type"; + } + + leaf mpls-label { + type uint32; + description + "PMSI Tunnel attr MPLS label"; + } + + uses pmsi-rsvp-te-p2mp; + uses pmsi-mldp-p2mp; + uses pmsi-pim-ssm; + uses pmsi-pim-sm; + uses pmsi-pim-bidir; + uses pmsi-ingress-replication; + uses pmsi-mldp-mp2mp; + } + } + } + + grouping srv6-service-data-top { + description + "Grouping for SRv6 service data sub-sub-TLVs"; + + container sid-structure-sub-sub-tlv { + description + "SRv6 SID structure sub-sub-TLVs"; + + container state { + description + "SRv6 SID structure state information"; + + leaf locator-block-length { + type uint8; + description + "SRv6 SID locator block length"; + } + leaf locator-node-length { + type uint8; + description + "SRv6 SID locator node length"; + } + leaf function-length { + type uint8; + description + "SRv6 SID function length"; + } + leaf argument-length { + type uint8; + description + "SRv6 SID aargument length"; + } + leaf transposition-length { + type uint8; + description + "SRv6 SID transposition length"; + } + leaf transposition-offset { + type uint8; + description + "SRv6 SID transposition offset"; + } + } + } + } + + grouping srv6-l3-service-top { + container srv6-l3-service { + description + "SRv6 SID information for L3 service"; + + container state { + leaf service-sid { + description + "Service SID information for SRv6 based L3 services"; + type inet:ipv6-address; + } + + leaf endpoint-behavior { + description + "SRv6 endpoint behavior"; + type identityref { + base arc-srv6-types:SRV6_ENDPOINT_BEHAVIOR_TYPE; + } + } + } + + uses srv6-service-data-top; + } + } + + grouping bgp-prefix-sid-attr-top { + description + "High level Grouping for Prefix SID Attribute"; + + container prefix-sid-attr { + description + "Prefix SID attribute"; + + container state { + description + "Operational state for Prefix SID attribute"; + + leaf label-index { + type uint32; + description + "Label index TLV carried with the prefix sid"; + } + + container originator-srgb { + description + "SRGB info of the originating node, as signaled in the originator SRGB TLV"; + + leaf-list srgb-ranges { + description + "Concatenated ranges building the SRGB block"; + type string; + } + } + } + + uses srv6-l3-service-top; + } + } + + grouping srv6-bindig-sid-subtlv-top { + description + "High level Grouping for Binding SID subtlv"; + + container srv6-binding-sid-subtlv { + description + "SRV6 BSID attribute"; + + container state { + leaf srv6-binding-sid { + description + "BSID information for SR policy"; + type inet:ipv6-address; + } + + // leaf flags { + // type uint8; + // description + // "sr policy Tunnel attr flags"; + // } + + leaf endpoint-behavior { + description + "SRv6 endpoint behavior"; + type identityref { + base arc-srv6-types:SRV6_ENDPOINT_BEHAVIOR_TYPE; + } + } + leaf locator-block-length { + type uint8; + description + "SRv6 SID locator block length"; + } + leaf locator-node-length { + type uint8; + description + "SRv6 SID locator node length"; + } + leaf function-length { + type uint8; + description + "SRv6 SID function length"; + } + leaf argument-length { + type uint8; + description + "SRv6 SID aargument length"; + } + } + } + } + + grouping tunnel-sr-policy-top { + + container tunnel-sr-policy { + container state { + description + "Operational state for tunnel type SR Policy"; + + leaf subtlv-type { + type identityref { + base oc-ribbgp-types:TUNNEL_ENCAPSULATION_SUBTLV_TYPE; + } + description + "SR Policy Subtlv Type"; + } + } + + description + "SR policy tunnel information"; + uses srv6-bindig-sid-subtlv-top; + // { + // when "state/subtlv-type='arc-oc-ribbgp-types:SRV6_SRTE_BINDING_SID'"; + // } + } + } + + grouping tunnel-egress-endpoint-top { + description + "High level Grouping for Tunnel Egress Endpoint subtlv"; + + container tunnel-egress-endpoint-subtlv { + description + "Tunnel egress endpoint attribute"; + + container state { + leaf afi { + description + "Tunnel Egress Endpoint address AFI"; + type identityref { + base oc-types:ADDRESS_FAMILY; + } + } + + leaf tunnel-egress-endpoint { + description + "Tunnel Egresss Endpoint address"; + type inet:ip-address-no-zone; + } + } + } + } + + grouping gtp-tunnel-top { + + container gtp-tunnel { + container state { + description + "Operational state for GTP tunnel"; + + leaf subtlv-type { + type identityref { + base oc-ribbgp-types:TUNNEL_ENCAPSULATION_SUBTLV_TYPE; + } + description + "GTP Tunnel Subtlv Type"; + } + } + description + "GTP Tunnel information"; + + uses tunnel-egress-endpoint-top; + } + } + + grouping bgp-tunnel-encap-attr-top { + description + "High level Grouping for SRTE Policy encap tunnel Attribute"; + + container tunnel-encap-attr { + description + "Container for tunnel encap attribute"; + container state { + description + "Operational state for tunnel encap attribute"; + + leaf tunnel-type { + type identityref { + base oc-ribbgp-types:TUNNEL_ENCAPSULATION_TYPE; + } + description + "Tunnel encap attr tunnel type"; + } + } + + uses tunnel-sr-policy-top { + when "state/tunnel-type='oc-ribbgp-types:SRTE_POLICY_TUNNEL'"; + } + uses gtp-tunnel-top { + when "state/tunnel-type='arc-oc-ribbgp-types:GTP_TUNNEL'"; + } + } + } + + grouping bgp-shared-common-attr-state { + description + "Route attributes shared across route table entries, + common to both LOC-Rib and Adj-RIB"; + + + leaf origin { + type oc-bgp-types:bgp-origin-attr-type; + description + "BGP attribute defining the origin of the path information."; + } + + leaf atomic-aggregate { + type boolean; + description + "BGP attribute indicating that the prefix is an atomic + aggregate, i.e., the peer selected a less specific + route without selecting a more specific route that is + included in it."; + } + + leaf med { + type uint32; + description + "BGP multi-exit discriminator attribute used in BGP route + selection process"; + } + + leaf local-pref { + type uint32; + description + "BGP local preference attribute sent to internal peers to + indicate the degree of preference for externally learned + routes. The route with the highest local preference value + is preferred."; + } + + leaf originator-id { + type inet:ipv4-address; + description + "BGP attribute that provides the id as an IPv4 address + of the originator of the announcement."; + reference + "RFC 4456 - BGP Route Reflection: An Alternative to Full + Mesh Internal BGP (IBGP)"; + } + + leaf-list cluster-list { + type inet:ipv4-address; + description + "Represents the reflection path that the route has passed."; + reference + "RFC 4456 - BGP Route Reflection: An Alternative to Full + Mesh Internal BGP (IBGP)"; + } + + leaf aigp { + type uint64; + description + "BGP path attribute representing the accumulated IGP metric + for the path"; + reference + "RFC 7311 - The Accumulated IGP Metric Attribute for BGP"; + } + } + + grouping route-attr-set-top { + container attributes { + description + "Path attributes for the route."; + + container state { + config false; + description + "Operational state for common path attributes"; + + uses bgp-shared-common-attr-state; + uses attr-route-shared-top; + } + + container community { + description + "Operational state for community attribute"; + + container state { + uses oc-rib-bgp:bgp-community-attr-state; + } + } + + container ext-community { + description + "Operational state for extended community attribute"; + + container state { + uses oc-rib-bgp:bgp-extended-community-attr-state; + } + } + + container large-community { + description + "Operational state for large community attribute"; + + container state { + uses bgp-large-community-attr-state; + } + } + + uses oc-rib-bgp:bgp-aggregator-attr-top; + uses oc-rib-bgp:bgp-as-path-attr-top; + uses oc-rib-bgp:bgp-as4-path-attr-top; + uses bgp-pmsi-tunnel-attr-top; + uses bgp-prefix-sid-attr-top; + uses bgp-tunnel-encap-attr-top; + } + } + + /* + * Add "adj-rib-out" with different keys than "adj-rib-out-pre" and + * "adj-rib-out-post" in OC model. + */ + grouping ipv4-adj-rib-out { + description + "Structural grouping for each IPv4 unicast adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix, origin and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses oc-rib-bgp:bgp-loc-rib-key-refs; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type inet:ipv4-prefix; + description + "Prefix for the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping ipv6-adj-rib-out { + description + "Structural grouping for each IPv6 unicast adj-RIB-out table"; + + uses oc-rib-bgp:bgp-common-table-attrs-top; + + container routes { + config false; + description + "Enclosing container for list of routes in the routing + table."; + + list route { + key "prefix origin path-id"; + + description + "List of routes in the table, keyed by a combination of + the route prefix, origin and path-id to distinguish multiple + routes received from a neighbor for the same prefix, + e.g., when BGP add-paths is enabled."; + + uses oc-rib-bgp:bgp-loc-rib-key-refs-v6; + + container state { + description + "Operational state data for BGP Adj-RIB entries"; + + leaf prefix { + type inet:ipv6-prefix; + description + "Prefix for the route"; + } + + leaf origin { + type arc-bgp-types:bgp-rib-origin-type; + description + "The origin of the route"; + } + + uses arc-bgp-types:bgp-adj-rib-attr-state; + uses bgp-rib-ag-adj-rib-common-attr-refs; + uses oc-rib-bgp:bgp-common-route-annotations-state; + } + + uses oc-rib-bgp:bgp-unknown-attr-top; + } + } + } + + grouping protection-tracker-top { + description + "Grouping for protection tracker information"; + container protection-trackers { + config false; + list protection-tracker { + description + "List of protection trackers"; + key "tracker-id"; + leaf "tracker-id" { + type uint64; + description + "Protection tracker ID"; + } + container state { + leaf reference-count { + type uint32; + description + "Reference count of users of this tracker"; + } + leaf next-hop { + type inet:ip-address-no-zone; + description + "Next hop address for primary path for tracking"; + } + leaf network-instance { + type string; + description + "Primary next hop network instance"; + } + leaf neighbor { + type inet:ip-address-no-zone; + description + "Neighbor address the primary nexthop belongs was received from"; + } + leaf backup-next-hop { + type inet:ip-address-no-zone; + description + "Next hop address for backup path tracking"; + } + leaf backup-network-instance { + type string; + description + "Backup Next hop network instance"; + } + leaf backup-neighbor { + type inet:ip-address-no-zone; + description + "Neighbor address the nexthop belongs was received from"; + } + leaf tracker-label { + type uint32; + description + "Protection tracker label if allocated"; + } + leaf tracker-sid { + type inet:ipv6-address; + description + "Protection tracker segment ID if allocated"; + } + leaf bfd-source { + type inet:ip-address-no-zone; + description + "BFD source address"; + } + leaf bfd-destination { + type inet:ip-address-no-zone; + description + "BFD destination address"; + } + leaf bfd-session-id { + type uint64; + description + "BFD Session ID for tracking"; + } + } + } + } + } + + /* + * Augmentations for default bgp rib + */ + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container l3vpn-ipv6-unicast { + when "../oc-ni:afi-safi-name = 'oc-bgp-types:L3VPN_IPV6_UNICAST'" { + description + "Include this container for VPNv6 unicast RIB"; + } + description + "Routing tables for VPNv6 unicast -- active when the + afi-safi name is l3vpn-ipv6-unicast"; + + uses l3vpn-ipv6-loc-rib-top; + uses l3vpn-ipv6-ni-exported-rib-top; + uses l3vpn-ipv6-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv6-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv6-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:adj-rib-in-pre" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" + + "/arc-oc-rib-bgp-aug:state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv6-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:adj-rib-in-post" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" + + "/arc-oc-rib-bgp-aug:state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv6-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:adj-rib-out" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" + + "/arc-oc-rib-bgp-aug:state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv6-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:network-instances" + + "/arc-oc-rib-bgp-aug:network-instance/arc-oc-rib-bgp-aug:adj-rib-out" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" + + "/arc-oc-rib-bgp-aug:state" { + uses adj-rib-ni-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" { + uses large-community-sets-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:attr-sets/oc-ni:attr-set" + + "/oc-ni:state" { + uses attr-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:communities" + + "/oc-ni:community/oc-ni:state" { + uses comm-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:ext-communities" + + "/oc-ni:ext-community/oc-ni:state" { + uses extcomm-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container ipv4-label-unicast { + when "../oc-ni:afi-safi-name = 'oc-bgp-types:IPV4_LABELED_UNICAST'" { + description + "Include this container for IPv4 label unicast RIB"; + } + description + "Routing tables for IPv4 Label unicast -- active when the + afi-safi name is ipv4-label-unicast"; + + uses ipv4-lu-loc-rib-top; + uses ipv4-lu-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container ipv6-label-unicast { + when "../oc-ni:afi-safi-name = 'oc-bgp-types:IPV6_LABELED_UNICAST'" { + description + "Include this container for IPv6 label unicast RIB"; + } + description + "Routing tables for IPv6 Label unicast -- active when the + afi-safi name is ipv6-label-unicast"; + + uses ipv6-lu-loc-rib-top; + uses ipv6-lu-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container l3vpn-ipv4-unicast { + when "../oc-ni:afi-safi-name = 'oc-bgp-types:L3VPN_IPV4_UNICAST'" { + description + "Include this container for VPNv4 label unicast RIB"; + } + description + "Routing tables for VPNv4 Label unicast -- active when the + afi-safi name is l3vpn-ipv4-unicast"; + + uses l3vpn-ipv4-loc-rib-top; + uses l3vpn-ipv4-ni-exported-rib-top; + uses l3vpn-ipv4-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container l2vpn-evpn { + when "../oc-ni:afi-safi-name = 'oc-bgp-types:L2VPN_EVPN'" { + description + "Include this container for L2VPN EVPN RIB"; + } + description + "Routing tables for L2VPN EVPN -- active when the + afi-safi name is l2vpn-evpn"; + + uses l2vpn-evpn-loc-rib-top; + uses l2vpn-evpn-adj-rib-top; + } + } + + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container ipv4-mup { + when "../oc-ni:afi-safi-name = 'arc-oc-bgp-types:IPV4_MUP'" { + description + "Include this container for IPv4 MUP RIB"; + } + description + "Routing tables for IPv4 MUP -- active when the + afi-safi name is ipv4-mup"; + + uses mup-loc-rib-top; + uses mup-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container ipv6-mup { + when "../oc-ni:afi-safi-name = 'arc-oc-bgp-types:IPV6_MUP'" { + description + "Include this container for IPv6 MUP RIB"; + } + description + "Routing tables for IPv6 MUP -- active when the + afi-safi name is ipv6-mup"; + + uses mup-loc-rib-top; + uses mup-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container flowspec-ipv4-unicast { + when "../oc-ni:afi-safi-name = 'arc-oc-bgp-types:IPV4_FLOWSPEC'" { + description + "Include this container for Flowspec IPv4 unicast RIB"; + } + description + "Routing tables for Flowspec IPv4 unicast -- active when the + afi-safi name is flowspec-ipv4-unicast"; + + uses flowspec-ipv4-unicast-loc-rib-top; + uses flowspec-ipv4-unicast-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container flowspec-ipv6-unicast { + when "../oc-ni:afi-safi-name = 'arc-oc-bgp-types:IPV6_FLOWSPEC'" { + description + "Include this container for Flowspec IPv6 unicast RIB"; + } + description + "Routing tables for Flowspec IPv6 unicast -- active when the + afi-safi name is flowspec-ipv6-unicast"; + + uses flowspec-ipv6-unicast-loc-rib-top; + uses flowspec-ipv6-unicast-adj-rib-top; + } + } + +augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container srte-policy-ipv4 { + when "../oc-ni:afi-safi-name = 'oc-bgp-types:SRTE_POLICY_IPV4'" { + description + "Include this container for SRTE Policy IPv4 Policy RIB"; + } + description + "Routing tables for SRTE Policy IPv4 unicast -- active when the + afi-safi name is srte-policy-ipv4"; + + uses srte-policy-ipv4-loc-rib-top; + uses srte-policy-ipv4-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container srte-policy-ipv6 { + when "../oc-ni:afi-safi-name = 'oc-bgp-types:SRTE_POLICY_IPV6'" { + description + "Include this container for SRTE Policy IPv6 Policy RIB"; + } + description + "Routing tables for SRTE Policy IPv6 unicast -- active when the + afi-safi name is srte-policy-ipv6"; + + uses srte-policy-ipv6-loc-rib-top; + uses srte-policy-ipv6-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" { + container rtfilter { + when "../oc-ni:afi-safi-name = 'arc-oc-bgp-types:RTFILTER'" { + description + "Include this container for RTFILTER RIB"; + } + description + "Routing tables for RTFILTER address family-- active when the + afi-safi name is rtfilter"; + + uses bgp-rtfilter-loc-rib-top; + uses bgp-rtfilter-adj-rib-top; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:loc-rib" + + "/oc-ni:routes/oc-ni:route/oc-ni:state" { + uses loc-rib-large-community-index-top; + uses route-top; + uses bgp-loc-rib-remote-label; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/oc-ni:adj-rib-in-pre" + + "/oc-ni:routes/oc-ni:route/oc-ni:state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/oc-ni:adj-rib-in-post" + + "/oc-ni:routes/oc-ni:route/oc-ni:state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/adj-rib-out/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + uses bgp-loc-rib-remote-label; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:loc-rib" + + "/oc-ni:routes/oc-ni:route/oc-ni:state" { + uses loc-rib-large-community-index-top; + uses route-top; + uses bgp-loc-rib-remote-label; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/oc-ni:adj-rib-in-pre" + + "/oc-ni:routes/oc-ni:route/oc-ni:state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/oc-ni:adj-rib-in-post" + + "/oc-ni:routes/oc-ni:route/oc-ni:state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/adj-rib-out/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + uses bgp-loc-rib-remote-label; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv4-label-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-label-unicast/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-label-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-label-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv6-label-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-label-unicast/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-label-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-label-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv4-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv4-unicast" + + "/arc-oc-rib-bgp-aug:network-instances" + + "/arc-oc-rib-bgp-aug:network-instance" + + "/arc-oc-rib-bgp-aug:exported-rib" + + "/arc-oc-rib-bgp-aug:routes" + + "/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv4-unicast/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv4-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv4-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv4-unicast/arc-oc-rib-bgp-aug:neighbors" + + "/arc-oc-rib-bgp-aug:neighbor/arc-oc-rib-bgp-aug:network-instances" + + "/arc-oc-rib-bgp-aug:network-instance/arc-oc-rib-bgp-aug:adj-rib-out" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" + + "/arc-oc-rib-bgp-aug:state" { + uses adj-rib-ni-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l2vpn-evpn/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l2vpn-evpn/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l2vpn-evpn/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l2vpn-evpn/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv4-mup/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-mup/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-mup/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-mup/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv6-mup/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-mup/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses rib-in-pre-route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-mup/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-mup/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/rtfilter/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/rtfilter/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/rtfilter/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:loc-rib/oc-ni:routes" + + "/oc-ni:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/oc-ni:adj-rib-in-pre" + + "/oc-ni:routes/oc-ni:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/oc-ni:adj-rib-in-post" + + "/oc-ni:routes/oc-ni:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/adj-rib-out/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:loc-rib/oc-ni:routes" + + "/oc-ni:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/oc-ni:adj-rib-in-pre" + + "/oc-ni:routes/oc-ni:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/oc-ni:adj-rib-in-post" + + "/oc-ni:routes/oc-ni:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor/adj-rib-out/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv4-label-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-label-unicast/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-label-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-label-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv6-label-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-label-unicast/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-label-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-label-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv4-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv4-unicast/network-instances" + + "/network-instance/exported-rib" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv4-unicast/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv4-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv4-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv4-unicast/neighbors/neighbor/network-instances" + + "/network-instance/adj-rib-out/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l2vpn-evpn/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l2vpn-evpn/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l2vpn-evpn/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l2vpn-evpn/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv4-mup/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-mup/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-mup/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv4-mup/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:ipv6-mup/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-mup/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-mup/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/ipv6-mup/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/rtfilter/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/rtfilter/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/rtfilter/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv4-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor" { + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses ipv4-adj-rib-out; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/oc-ni:ipv6-unicast/oc-ni:neighbors" + + "/oc-ni:neighbor" { + container adj-rib-out { + description + "Per-neighbor table containing prefixes that have been + advertised to the neighbor without applying output policy + rules for attributes and/or next-hop change"; + + uses ipv6-adj-rib-out; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv6-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv6-unicast/network-instances" + + "/network-instance/exported-rib" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv6-unicast/neighbors/neighbor/adj-rib-in-pre" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv6-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv6-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/l3vpn-ipv6-unicast/neighbors/neighbor/network-instances" + + "/network-instance/adj-rib-out/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:l3vpn-ipv6-unicast" + + "/arc-oc-rib-bgp-aug:network-instances" + + "/arc-oc-rib-bgp-aug:network-instance" + + "/arc-oc-rib-bgp-aug:exported-rib" + + "/arc-oc-rib-bgp-aug:routes" + + "/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:srte-policy-ipv4/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/srte-policy-ipv4/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/srte-policy-ipv4/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:srte-policy-ipv6/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/srte-policy-ipv6/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/srte-policy-ipv6/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:srte-policy-ipv4/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/srte-policy-ipv4/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/srte-policy-ipv4/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:srte-policy-ipv6/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/srte-policy-ipv6/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/srte-policy-ipv6/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:flowspec-ipv4-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/flowspec-ipv4-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/flowspec-ipv4-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:flowspec-ipv6-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route/arc-oc-rib-bgp-aug:state" { + uses loc-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/flowspec-ipv6-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/flowspec-ipv6-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route/state" { + uses adj-rib-large-community-index-top; + uses route-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:flowspec-ipv4-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/flowspec-ipv4-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/flowspec-ipv4-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/arc-oc-rib-bgp-aug:flowspec-ipv6-unicast/arc-oc-rib-bgp-aug:loc-rib" + + "/arc-oc-rib-bgp-aug:routes/arc-oc-rib-bgp-aug:route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/flowspec-ipv6-unicast/neighbors/neighbor/adj-rib-in-post" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:afi-safis/oc-ni:afi-safi" + + "/flowspec-ipv6-unicast/neighbors/neighbor/adj-rib-out" + + "/routes/route" { + description + "Embedded path attributes state."; + + uses route-attr-set-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" { + description + "Protection tracker information"; + uses protection-tracker-top; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" + + "/oc-ni:protocols/oc-ni:protocol" + + "/oc-ni:bgp/oc-ni:rib" + + "/oc-ni:attr-sets/oc-ni:attr-set" { + uses bgp-pmsi-tunnel-attr-top; + uses bgp-prefix-sid-attr-top; + uses bgp-tunnel-encap-attr-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-types.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-types.yang new file mode 100644 index 000000000..aa160f219 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-rib-bgp-types.yang @@ -0,0 +1,57 @@ +module arcos-openconfig-rib-bgp-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/rib/bgp/types"; + + prefix arc-oc-bgprib-types; + + import openconfig-rib-bgp-types { + prefix oc-rib-bgp-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + + description + "This module defines augmentation for Arrcus + implemention of the openconfig-rib-bgp-types module."; + + revision 2018-06-14 { + description + "Initial Revision + * Add bgp large community + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + identity SRTE_SRV6_BINDING_SID { + base oc-rib-bgp-types:TUNNEL_ENCAPSULATION_SUBTLV_TYPE; + description + "Binding SID to be used by the SR-TE policy described + by the tunnel encapsulation attribute."; + reference + "draft-previdi-idr-segment-routing-te-policy"; + } + + identity GTP_TUNNEL { + base oc-rib-bgp-types:TUNNEL_ENCAPSULATION_TYPE; + description + "GTP tunnel"; + } + + identity TUNNEL_EGRESS_ENDPOINT { + base oc-rib-bgp-types:TUNNEL_ENCAPSULATION_SUBTLV_TYPE; + description + "Tunnel egress endpoint address"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-augments.yang new file mode 100644 index 000000000..93c628113 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-augments.yang @@ -0,0 +1,403 @@ +module arcos-openconfig-routing-policy-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/routing-policy/augments"; + prefix arc-oc-rpol-aug; + + import openconfig-routing-policy { + prefix oc-rpol; + } + + import ietf-inet-types { + prefix inet; + } + + import arcos-oam { + prefix arc-oam; + } + + typedef next-hop-type { + type union { + type inet:ip-address; + type inet:ip-prefix; + type enumeration { + enum SELF { + description "special designation for local router's own + address, i.e., next-hop-self"; + } + } + } + description + "type definition for specifying next-hop in policy actions"; + } + + grouping next-hop-set-config { + description + "Configuration data for next-hop set definitions"; + + leaf next-hop-set-name { + type string { + length "1..79"; + } + mandatory true; + description + "name / label of the next-hop set -- this is used to + reference the set in match conditions"; + } + + leaf-list address { + type next-hop-type; + max-elements 32; + description + "List of IP addresses in the next-hop set"; + } + } + + grouping next-hop-set-state { + description + "Operational state data for next-hop set definitions"; + } + + grouping next-hop-set-top { + description + "Top-level data definition for a list of IPv4 or IPv6 + next-hops which can be matched in a routing policy"; + + container next-hop-sets { + description + "Enclosing container for the list of next-hop set + definitions"; + + list next-hop-set { + key "next-hop-set-name"; + description + "List of defined next-hop sets for use in policies."; + + leaf next-hop-set-name { + type leafref { + path "../config/next-hop-set-name"; + } + description + "Reference to the next-hop set name list key."; + } + + container config { + description + "Configuration data for next-hop sets."; + + uses next-hop-set-config; + } + + container state { + + config false; + + description + "Operational state data for next-hop sets."; + + uses next-hop-set-config; + uses next-hop-set-state; + } + } + } + } + + grouping n4-network-instance-set-config { + description + "Configuration data for n4-network-instance set definitions."; + + leaf n4-network-instance-set-name { + //type leafref { + // path "/oc-ni:n4-network-instances/oc-ni:n4-network-instance/oc-ni:config/oc-ni:name"; + //} + type string; + description + "name / label of the n4-network-instance set -- this is used to reference + the set in match conditions"; + } + + leaf-list n4-network-instance-value { + type string; + description + "Value of the n4-network-instance set member"; + } + } + + grouping n4-network-instance-set-state { + description + "Operational state data for n4-network-instance set definitions."; + } + + grouping n4-network-instance-set-top { + description + "Top-level data definitions for a list of nis which can + be matched in policies"; + + container n4-network-instance-sets { + description + "Enclosing container for the list of n4-network-instance sets."; + + list n4-network-instance-set { + key "n4-network-instance-set-name"; + description + "List of n4-network-instance set definitions."; + + leaf n4-network-instance-set-name { + type leafref { + path "../config/n4-network-instance-set-name"; + } + description + "Reference to the n4-network-instance set name list key"; + } + + container config { + description + "Configuration data for n4-network-instance sets"; + + uses n4-network-instance-set-config; + } + + container state { + + config false; + + description + "Operational state data for n4-network-instance sets"; + + uses n4-network-instance-set-config; + uses n4-network-instance-set-state; + } + } + } + } + + grouping stmt-top { + leaf auto-seq-num { + type uint64; + description + "Auto generated sequence number"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:state" { + uses stmt-top; + } + + grouping srv6-oam-set-profile-config { + description + "Setting OAM profile"; + leaf set-profile { + type leafref { + path "/arc-oam:oam/arc-oam:profiles/arc-oam:profile/arc-oam:name"; + } + description + "Set the SRv6 OAM profile for tracking next-hop health status"; + } + } + grouping srv6-oam-actions-top { + container srv6-oam-actions { + description + "Actions specific to SRv6 OAM"; + container config { + description + "Configuration parameters for setting OAM profile"; + uses srv6-oam-set-profile-config; + } + container state { + config false; + description + "State parameters for setting OAM profile"; + uses srv6-oam-set-profile-config; + } + } + } + + grouping stmt-actions-top { + leaf next-policy { + type empty; + description + "skip to the next policy module"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions" { + uses srv6-oam-actions-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-rpol:config" { + description "Policy action for skipping to next policy module"; + + uses stmt-actions-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions/oc-rpol:state" { + description "Policy action for skipping to next policy module"; + + uses stmt-actions-top; + } + + grouping stmt-conditions-top { + leaf call-policy-expression { + type string; + description + "logical expression of combinations of policy names, each of " + + "which will be called as a call-policy. Logical operations allowed " + + "include ~ (negate), + (or), * (and), ^ (xor), and parentheses. " + + "The condition will be a pass if the logical expression evaluates " + + "to true. Each call-policy's result will be true if it returns " + + "accept-route."; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions/oc-rpol:config" { + description "Policy condition for call-policy-expression"; + + uses stmt-conditions-top; + } + + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions/oc-rpol:state" { + description "Policy condition for call-policy-expression"; + + uses stmt-conditions-top; + } + + grouping prefix-set-reference-config { + description + "Configuration data for prefix-set member set references for prefix-sets"; + leaf-list prefix-set-reference { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/oc-rpol:prefix-sets" + + "/oc-rpol:prefix-set/oc-rpol:prefix-set-name"; + } + max-elements 32; + description + "References to defined prefix-sets that are included in current one"; + } + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:prefix-sets/oc-rpol:prefix-set/oc-rpol:config" { + + uses prefix-set-reference-config; + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:prefix-sets/oc-rpol:prefix-set/oc-rpol:state" { + + uses prefix-set-reference-config; + } + + augment "/oc-rpol:routing-policy/oc-rpol:defined-sets" { + description + "adds next-hop set to defined-set container"; + uses next-hop-set-top; + uses n4-network-instance-set-top; + } + + grouping match-next-hop-set-config { + description + "Configuration data for match conditions on next-hops"; + leaf next-hop-set { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/arc-oc-rpol-aug:next-hop-sets/arc-oc-rpol-aug:next-hop-set" + + "/arc-oc-rpol-aug:next-hop-set-name"; + } + description + "References a defined next-hop set"; + } + uses oc-rpol:match-set-options-group; + } + + grouping match-next-hop-set-state { + description + "Operational state data for match conditions on next-hops"; + } + + grouping match-next-hop-set-top { + description + "Top-level grouping for match conditions on next-hops"; + container match-next-hop-set { + description + "Top-level container for match conditions on next-hop. + Match a referenced next-hop-set according to the logic + defined in the match-set-options leaf"; + container config { + description + "Configuration data for match conditions on large communities"; + uses match-next-hop-set-config; + } + container state { + config false; + description + "Operational state data "; + uses match-next-hop-set-config; + uses match-next-hop-set-state; + } + } + } + + grouping match-n4-network-instance-set-config { + description + "Configuration data for match conditions on next-hops"; + leaf n4-network-instance-set { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/arc-oc-rpol-aug:n4-network-instance-sets/arc-oc-rpol-aug:n4-network-instance-set" + + "/arc-oc-rpol-aug:n4-network-instance-set-name"; + } + description + "References a defined n4-network-instance-set"; + } + uses oc-rpol:match-set-options-group; + } + + grouping match-n4-network-instance-set-state { + description + "Operational state data for match conditions on next-hops"; + } + + grouping match-n4-network-instance-set-top { + description + "Top-level grouping for match conditions on next-hops"; + container match-n4-network-instance-set { + description + "Top-level container for match conditions on next-hop. + Match a referenced n4-network-instance-set according to the logic + defined in the match-set-options leaf"; + container config { + description + "Configuration data for match conditions on large communities"; + uses match-n4-network-instance-set-config; + } + container state { + config false; + description + "Operational state data "; + uses match-n4-network-instance-set-config; + uses match-n4-network-instance-set-state; + } + } + } + + augment "/oc-rpol:routing-policy" + + "/oc-rpol:policy-definitions/oc-rpol:policy-definition" + + "/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions" { + description + "adds next-hop set to conditions"; + uses match-next-hop-set-top; + uses match-n4-network-instance-set-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-deviations.yang new file mode 100644 index 000000000..24ed18bb2 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-deviations.yang @@ -0,0 +1,136 @@ +module arcos-openconfig-routing-policy-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/routing-policy/deviations"; + prefix arc-oc-rpol-dev; + + import openconfig-routing-policy { + prefix oc-rpol; + } + import openconfig-policy-types { + prefix oc-pol-types; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:prefix-sets/oc-rpol:prefix-set" + + "/oc-rpol:prefixes/oc-rpol:prefix" + + "/oc-rpol:config/oc-rpol:masklength-range" { + deviate replace { + type string { + pattern '(([0-9]|[1-9][0-9]|1[0-2][0-8])\.\.([0-9]|[1-9][0-9]' + + '|1[0-2][0-8]))|exact'; + } + } + description "Fix bad pattern."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:prefix-sets/oc-rpol:prefix-set/oc-rpol:config" + + "/oc-rpol:prefix-set-name" { + deviate replace { + type string { + length "1..79"; + } + } + description "Limit size to 79 characters."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:neighbor-sets" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:tag-sets" { + description "Not supported in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:config/oc-rpol:name" { + deviate replace { + type string { + length "1..79"; + } + } + description "Limit size to 79 characters."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:config/oc-rpol:name" { + deviate replace { + type string { + length "1..79"; + } + } + description "Limit size to 79 characters."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-rpol:config/oc-rpol:install-protocol-eq" { + deviate add { + must "current() = 'oc-pol-types:DIRECTLY_CONNECTED' or " + + "current() = 'oc-pol-types:STATIC' or " + + "current() = 'oc-pol-types:ISIS' or " + + "current() = 'oc-pol-types:OSPF' or " + + "current() = 'oc-pol-types:LOCAL_AGGREGATE' or " + + "current() = 'oc-pol-types:BGP'" { + error-message + "src-protocol can be DIRECTLY_CONNECTED, LOCAL_AGGREGATE, + STATIC, ISIS, OSPF, or BGP"; + } + } + description "Source protocol choices same as in table-connection, + except that LOCAL_AGGREGATE is for BGP neighbor + export policy only"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:conditions" + + "/oc-rpol:match-neighbor-set" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:tag-sets/oc-rpol:tag-set/oc-rpol:config" + + "/oc-rpol:tag-set-name" { + deviate replace { + type string { + length "1..79"; + } + } + description "Limit size to 79 characters."; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:tag-sets/oc-rpol:tag-set/oc-rpol:config" + + "/oc-rpol:tag-value" { + deviate add { + max-elements 32; + } + description "Limit to the list to maximum of 32 members"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:defined-sets" + + "/oc-rpol:tag-sets/oc-rpol:tag-set/oc-rpol:config" + + "/oc-rpol:tag-value" { + deviate replace { + type uint32; + } + description "Limit to only unsigned int type"; + } + + deviation "/oc-rpol:routing-policy/oc-rpol:policy-definitions" + + "/oc-rpol:policy-definition/oc-rpol:statements" + + "/oc-rpol:statement/oc-rpol:actions" + + "/oc-rpol:igp-actions/oc-rpol:config/oc-rpol:set-tag" { + deviate replace { + type uint32; + } + description "Limit to only unsigned int type"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-sr-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-sr-augments.yang new file mode 100644 index 000000000..f1d8c3e9f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-routing-policy-sr-augments.yang @@ -0,0 +1,114 @@ +module arcos-openconfig-routing-policy-sr-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/routing-policy-sr/augments"; + prefix arc-oc-rpol-sr-aug; + + import openconfig-routing-policy { + prefix oc-rpol; + } + + import ietf-inet-types { + prefix inet; + } + + grouping match-sr-policy-config { + description + "Configuration data for match conditions on SR policy"; + leaf color { + type uint32; + description + "Match color for the SR policy"; + } + leaf endpoint { + type inet:ip-address; + description + "Match endpoint for the SR policy"; + } + } + + grouping match-sr-policy-state { + description + "Operational state data for match conditions on SR policy"; + } + + grouping match-sr-policy-top { + description + "Top-level grouping for match SR policy"; + container match-sr-policy { + description + "Top-level container for match conditions for SR policy."; + container config { + description + "Configuration data for match conditions on SR policy"; + uses match-sr-policy-config; + } + container state { + config false; + description + "Operational state data "; + uses match-sr-policy-config; + uses match-sr-policy-state; + } + } + } + + grouping set-sr-policy-config { + description + "Configuration data for set actions on SR policy"; + leaf binding-sid { + type inet:ipv6-address; + description + "Set binding SID for the SR policy"; + } + leaf-list sid-list { + type inet:ipv6-address; + description + "Set SID list for the SR policy"; + max-elements 1; + } + } + + grouping set-sr-policy-state { + description + "Operational state data for set actions on SR policy"; + } + + grouping set-sr-policy-top { + description + "Top-level grouping for set SR policy"; + container set-sr-policy { + description + "Top-level container for set actions for SR policy."; + container config { + description + "Configuration data for set actions on SR policy"; + uses set-sr-policy-config; + } + container state { + config false; + description + "Operational state data "; + uses set-sr-policy-config; + uses set-sr-policy-state; + } + } + } + + augment "/oc-rpol:routing-policy" + + "/oc-rpol:policy-definitions/oc-rpol:policy-definition" + + "/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:conditions" { + description + "Adds SR policy match to conditions"; + uses match-sr-policy-top; + } + + augment "/oc-rpol:routing-policy" + + "/oc-rpol:policy-definitions/oc-rpol:policy-definition" + + "/oc-rpol:statements/oc-rpol:statement" + + "/oc-rpol:actions" { + description + "Adds SR policy set to actions"; + uses set-sr-policy-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-segment-routing-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-segment-routing-augments.yang new file mode 100644 index 000000000..e0dadae53 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-segment-routing-augments.yang @@ -0,0 +1,64 @@ +module arcos-openconfig-segment-routing-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/segment-routing/augments"; + prefix arc-oc-sr-aug; + + /* + * Import basic things + */ + import openconfig-network-instance { prefix oc-netinst; } + + organization + "Arrcus, Inc."; + + description + "YANG data-model for openconfig-segment-routing augment"; + + grouping srgb-used-labels { + leaf-list used-labels { + type uint32; + description + "List of labels that have already been allocated by protocols + referencing the SRGB."; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srgbs/oc-netinst:srgb/oc-netinst:state" { + uses srgb-used-labels; + } + + grouping srlb-used-labels { + leaf-list used-labels { + type uint32; + description + "List of labels that have already been allocated by protocols + referencing the SRLB."; + } + } + + grouping srlb-state { + description + "Operational state parameters relating to the SRLB."; + + leaf size { + type uint32; + description + "The total number of SRLB entries that are available within the SRLB."; + } + + leaf used { + type uint32; + description + "The total number of SRLB entries that have already been allocated by + protocols referencing the SRLB."; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:segment-routing/oc-netinst:srlbs/oc-netinst:srlb/oc-netinst:state" { + uses srlb-state; + uses srlb-used-labels; + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-spanning-tree-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-spanning-tree-augments.yang new file mode 100644 index 000000000..62b3cfb05 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-spanning-tree-augments.yang @@ -0,0 +1,61 @@ +module arcos-openconfig-spanning-tree-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/spanning-tree/augments"; + prefix arc-oc-stp-aug; + + import openconfig-spanning-tree { + prefix oc-stp; + } + + import openconfig-spanning-tree-types { + prefix oc-stp-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines augment statements for Arrcus + implemention of the openconfig-spanning-tree module. + + Copyright (c) 2017-2022 by Arrcus, Inc. + All rights reserved."; + + + revision 2022-09-16 { + description + "Add new NONE value for STP_PROTOCOL type"; + } + + identity NONE { + base oc-stp-types:STP_PROTOCOL; + description + "Disables Spanning Tree Protocol"; + } + + augment "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:vlan/oc-stp:config" { + leaf edge-only { + type boolean; + default "false"; + description + "Enables Arrcus edge-only mode, disabling full STP operation"; + } + } + + augment "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:state/oc-stp:vlan" { + leaf edge-only { + type boolean; + description + "Enables Arrcus edge-only mode, disabling full STP operation"; + } + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-spanning-tree-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-spanning-tree-deviations.yang new file mode 100644 index 000000000..2df158f2d --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-spanning-tree-deviations.yang @@ -0,0 +1,171 @@ +module arcos-openconfig-spanning-tree-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/spanning-tree/deviations"; + prefix arc-oc-stp-dev; + + import openconfig-spanning-tree { + prefix oc-stp; + } + + import openconfig-vlan-types { + prefix oc-vlan-types; + } + + organization + "Arrcus, Inc."; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines deviation statements for Arrcus + implemention of the openconfig-spanning-tree module."; + + revision 2018-08-14 { + description "ArcOS release 2.2.1"; + } + + + revision 2017-07-05 { + description + "Initial Revision + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + + + deviation "/oc-stp:stp/oc-stp:global/oc-stp:config/oc-stp:enabled-protocol" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-stp:stp/oc-stp:global/oc-stp:state/oc-stp:enabled-protocol" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:global/oc-stp:config/oc-stp:bpdu-filter" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-stp:stp/oc-stp:global/oc-stp:state/oc-stp:bpdu-filter" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:global/oc-stp:config/oc-stp:bpduguard-timeout-recovery" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-stp:stp/oc-stp:global/oc-stp:state/oc-stp:bpduguard-timeout-recovery" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:global/oc-stp:config/oc-stp:etherchannel-misconfig-guard" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-stp:stp/oc-stp:global/oc-stp:state/oc-stp:etherchannel-misconfig-guard" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:global/oc-stp:config/oc-stp:loop-guard" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-stp:stp/oc-stp:global/oc-stp:state/oc-stp:loop-guard" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:rstp" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:mstp" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:state/oc-stp:vlan" + + "/oc-stp:bridge-address" { + deviate replace { + type string; + } + description "Currently deviate to string type because confd otherwise + takes it as binary type"; + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:state/oc-stp:vlan" + + "/oc-stp:designated-root-address" { + deviate replace { + type string; + } + description "Currently deviate to string type because confd otherwise + takes it as binary type"; + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:state/oc-stp:vlan" + + "/oc-stp:interface/oc-stp:designated-root-address" { + deviate replace { + type string; + } + description "Currently deviate to string type because confd otherwise + takes it as binary type"; + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:state/oc-stp:vlan" + + "/oc-stp:interface/oc-stp:designated-bridge-address" { + deviate replace { + type string; + } + description "Currently deviate to string type because confd otherwise + takes it as binary type"; + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:vlan/oc-stp:vlan-id" { + deviate replace { + type oc-vlan-types:vlan-id; + } + description "deviate vlan id to vlan-types"; + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:vlan/oc-stp:config/oc-stp:vlan-id" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:state/oc-stp:vlan" + + "/oc-stp:hold-time" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:vlan/oc-stp:config/" + + "oc-stp:forwarding-delay" { + deviate add { + must "2 * (current() - 1) >= current()/../max-age" { + error-message "Forwarding-delay must satisfy the following " + + "relationship with max-age: " + + "2 * (Bridge Forward Delay - 1) >= Bridge Max Age"; + } + } + } + + deviation "/oc-stp:stp/oc-stp:rapid-pvst/oc-stp:vlan/oc-stp:config/" + + "oc-stp:max-age" { + deviate add { + must "2 * (current()/../forwarding-delay - 1) >= current()" { + error-message "Max-age must satisfy the following " + + "relationship with forwarding-delay: " + + "2 * (Bridge Forward Delay - 1) >= Bridge Max Age"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-system-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-system-augments.yang new file mode 100644 index 000000000..a0c9abc71 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-system-augments.yang @@ -0,0 +1,3135 @@ +module arcos-openconfig-system-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/system/augments"; + prefix arc-oc-sys-aug; + + import openconfig-system { + prefix oc-sys; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-system-logging { + prefix oc-sys-logging; + } + + import openconfig-network-instance { + prefix oc-ni; + } + + import arcos-platform { + prefix arc-platform; + } + + import arcos-features { + prefix arc-features; + } + + import arcos-version { + prefix arc-version; + } + + import ietf-yang-types { + prefix yang; + } + + import ietf-inet-types { + prefix inet; + } + + import openconfig-inet-types { + prefix oc-inet; + } + + import arcos-system-management { + prefix arc-sys-mgmt; + } + + import arcos-system-types { + prefix arc-sys-types; + } + + import arcos-system-logging-types { + prefix arc-sys-log-types; + } + + import arcos-bgp-debug { + prefix arc-bgp-dbg; + } + + import openconfig-types { + prefix oc-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines ArcOS augments to the + OpenConfig system module. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2023-04-19 { + description + "Added support for configuring listen-interface and network instance for grpc server. + Removed leaf permit-root-login."; + } + + + revision 2022-10-10 { + description + "Added support for configuring CLI idle-timeout"; + } + + revision 2022-09-01 { + description + "Added LDP to system logging component list"; + } + + revision 2022-06-29 { + description + "Added NTP Authentication Key support"; + } + + revision "2022-03-03" { + description + "Added support for SNMP in a non-default VRF"; + } + + revision "2022-03-02" { + description + "Added support for SSH in a non-default VRF"; + } + + grouping source-top { + leaf source-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description "Use IP address of this interface as source address"; + } + + leaf network-instance { + type oc-ni:network-instance-ref; + description + "The network instance (VRF) to use for connecting to server. + The above 'source-interface', if configured, must belong + to this network instance. If no 'source-interface' is configured + then the source interface and therefore the source IP address will + be chosen automatically from within this network-instance"; + } + } + + grouping aaa-server-group-state { + container state { + config false; + description "State across all server groups"; + + container authentication-statistics { + description "Statistics for Remote Authentication"; + + leaf accepts { + type uint64; + description "Number of authentication attempts that were successful"; + } + leaf rejects { + type uint64; + description "Number of authentication attempts that were denied"; + } + } + + container authorization-statistics { + description "Statistics for Remote Authorization"; + leaf allows { + type uint64; + description "Number of authorization requests that were successful"; + } + leaf denies { + type uint64; + description "Number of authorization requests that were denied"; + } + } + + container accounting-statistics { + description "Statistics for Remote Accounting"; + leaf successes { + type uint64; + description "Number of accounting messages that were successfully sent"; + } + leaf failures { + type uint64; + description "Number of accounting messages that failed"; + } + } + } + } + + grouping ntp-top { + choice listen-type { + leaf listen-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description + "Interface to use for sending and receiving NTP packets. + Only one of 'listen-interface' or 'network-instance' must be + configured."; + } + + leaf network-instance { + type oc-ni:network-instance-ref; + description + "The network instance (VRF) to use for communicating to NTP server. + Only one of 'listen-interface' or 'network-instance' must be + configured."; + } + } + } + + grouping ntp-server-key { + leaf key-id { + type leafref { + path "/oc-sys:system/oc-sys:ntp/oc-sys:ntp-keys/oc-sys:ntp-key/oc-sys:key-id"; + } + description + "Integer identifier used by the client and server to + designate a secret key. The client and server must use + the same key id."; + } + } + + grouping ntp-server-state { + leaf reach { + type uint8; + description + "This is a 8-bit octal value that shows the success/failure of the + connection attempts to reach the peer."; + } + + leaf time-since-last-response { + type union { + type string { + length "1"; + pattern "-"; + } + type uint64; + } + units seconds; + description + "Time since the last response was received. Default unit is seconds, + or it will be suffixed with m for minutes, h for hours and d for days."; + } + + leaf association-status { + type enumeration { + enum SYNC_PPS { + description + "Selected for synchronization, PPS signal is in use."; + } + enum SYNC_SOURCE { + description + "Selected for synchronization."; + } + enum CANDIDATE { + description + "The peer is a survivor and a candidate for the combining algorithm."; + } + enum SELECTED { + description + "The peer is a survivor, but not among the first six peers + sorted by synchronization distance."; + } + enum OUTLYER { + description + "The peer is discarded by the clustering algorithm as an outlyer."; + } + enum EXCESS { + description + "The peer is discarded as not among the first ten peers sorted by + synchronization distance and so is probably a poor candidate for + further consideration."; + } + enum FALSE_TICK { + description + "The peer is discarded by the intersection algorithm as a + falseticker."; + } + enum REJECT { + description + "The peer is discarded as unreachable, synchronized to this server + (synch loop) or outrageous synchronization distance."; + } + } + description + "Status of the NTP server in the clock selection process."; + } + } + + grouping system-logging-config { + description + "Configuration data for system logging"; + + leaf timestamp-format { + type identityref { + base arc-sys-log-types:LOG_TIMESTAMP_FORMAT; + } + default arc-sys-log-types:TRADITIONAL; + description + "System logging timestamp format"; + } + } + + grouping logging-remote-config { + + leaf source-interface { + type oc-if:base-interface-ref; + must "(not(boolean(../oc-sys:source-address)))" { + error-message "source-address and source-interface " + + "are mutually exclusive"; + } + description + "The interface to bind to when sending syslog packets. The + network instance will be automatically derived from the + source interface"; + } + + leaf network-instance { + type oc-ni:network-instance-ref; + description + "The network instance to use while sending to syslog host. The + host stack will automatically choose the source interface + and therefore the source IP address"; + } + + leaf facility-override { + type identityref { + base oc-sys-logging:SYSLOG_FACILITY; + } + description + "Override the syslog facility level to the log server"; + } + } + + grouping syslog-monitor-config { + description + "Configuration data for monitor logging"; + leaf severity { + type oc-sys-logging:syslog-severity; + default ERROR; + description + "Specifies that only messages of the given severity (or + greater severity) for the corresponding component are logged"; + } + } + + grouping syslog-monitor-state { + description + "Operational state data for monitor logging"; + } + + grouping syslog-monitor-top { + description + "Top-level grouping for monitor logging data"; + + container monitor { + description + "Top-level container for data related to monitor-based + logging"; + + container config { + description + "Configuration data for monitor logging"; + + uses syslog-monitor-config; + } + + container state { + + config false; + + description + "Operational state data for monitor logging"; + + uses syslog-monitor-config; + uses syslog-monitor-state; + } + } + } + + grouping syslog-filter-config { + description + "Configuration data for syslog message filtering"; + container drop { + description + "Container for Drop messages which match"; + list contains { + key "substring"; + leaf substring { + type string { + length "1..256"; + } + description "specifies the substring to match"; + } + } + + list regex { + key "regex"; + leaf regex { + type string { + length "1..256"; + } + description "specifies the regex expression to match"; + } + } + } + + container redirect { + description + "Container for Redirect messages which match"; + list contains { + key "substring filename"; + leaf substring { + type string { + length "1..256"; + } + description "specifies the substring to match"; + } + + leaf filename { + type string { + length "1..64"; + } + description "specifies the filename (in /var/log) to redirect messages to"; + } + } + + list regex { + key "regex filename"; + leaf regex { + type string { + length "1..256"; + } + description "specifies the regex expression to match"; + } + + leaf filename { + type string { + length "1..64"; + } + description "specifies the filename to redirect messages to"; + } + } + } + } + + grouping syslog-filter-top { + description + "Top-level grouping for syslog message filtering"; + + container filter { + description + "Top-level container for data related to message filtering"; + + container config { + description + "Configuration data for message filtering"; + + uses syslog-filter-config; + } + + container state { + + config false; + + description + "Operational state data for message filtering"; + + uses syslog-filter-config; + } + } + } + + grouping syslog-component-config { + description + "Configuration data for components"; + + leaf severity { + type oc-sys-logging:syslog-severity; + default DEBUG; + description + "Specifies that only messages of the given severity (or + greater severity) for the corresponding component are logged"; + } + } + + grouping syslog-component-state { + description + "Operational state data for components"; + } + + grouping syslog-component-adjmgr-top { + container ADJMGR { + description + "Top-level container for data related to component ADJMGR + logging"; + + container config { + description + "Configuration data for component ADJMGR"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component ADJMGR"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-l2rib-top { + container L2RIB { + description + "Top-level container for data related to component L2RIB + logging"; + + container config { + description + "Configuration data for component L2RIB"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component L2RIB"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-bfd-top { + container BFD { + description + "Top-level container for data related to component BFD + logging"; + + container config { + description + "Configuration data for component BFD"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component BFD"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-bgp-top { + container BGP { + description + "Top-level container for data related to component BGP + logging"; + + container config { + description + "Configuration data for component BGP"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component BGP"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-dpal-top { + container DPAL { + description + "Top-level container for data related to component DPAL + logging"; + + container config { + description + "Configuration data for component DPAL"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component DPAL"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-fib-top { + container FIB { + description + "Top-level container for data related to component FIB + logging"; + + container config { + description + "Configuration data for component FIB"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component FIB"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-ifmgr-top { + container IFMGR { + description + "Top-level container for data related to component IFMGR + logging"; + + container config { + description + "Configuration data for component IFMGR"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component IFMGR"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-isis-top { + container ISIS { + description + "Top-level container for data related to component ISIS + logging"; + + container config { + description + "Configuration data for component ISIS"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component ISIS"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-ldp-top { + container LDP { + description + "Top-level container for data related to component LDP + logging"; + + container config { + description + "Configuration data for component LDP"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component LDP"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-ospf-top { + container OSPF { + description + "Top-level container for data related to component OSPF + logging"; + + container config { + description + "Configuration data for component OSPF"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component OSPF"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-ospf3-top { + container OSPF3 { + description + "Top-level container for data related to component OSPF3 + logging"; + + container config { + description + "Configuration data for component OSPF3"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component OSPF3"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-pltmgr-top { + container PLTMGR { + description + "Top-level container for data related to component PLTMGR + logging"; + + container config { + description + "Configuration data for component PLTMGR"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component PLTMGR"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-rib-top { + container RIB { + description + "Top-level container for data related to component RIB + logging"; + + container config { + description + "Configuration data for component RIB"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component RIB"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-eventmgr-top { + container EVENTMGR { + description + "Top-level container for data related to component EVENTMGR + logging"; + + container config { + description + "Configuration data for component EVENTMGR"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component EVENTMGR"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-gnmi-top { + container GNMI { + description + "Top-level container for data related to component gNMI Server + logging"; + + container config { + description + "Configuration data for component gNMI"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component gNMI"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-sidmgr-top { + container SIDMGR { + description + "Top-level container for data related to component SIDMGR + logging"; + + container config { + description + "Configuration data for component SIDMGR"; + + uses syslog-component-config; + } + + container state { + config false; + description + "Operational state data for component SIDMGR"; + + uses syslog-component-config; + uses syslog-component-state; + } + } + } + + grouping syslog-component-top { + container component { + description + "Top-level container for data related to component-based + logging"; + + uses syslog-component-adjmgr-top; + uses syslog-component-bfd-top; + uses syslog-component-bgp-top; + uses syslog-component-dpal-top; + uses syslog-component-fib-top; + uses syslog-component-ifmgr-top; + uses syslog-component-isis-top; + uses syslog-component-ldp-top; + uses syslog-component-ospf-top; + uses syslog-component-ospf3-top; + uses syslog-component-pltmgr-top; + uses syslog-component-l2rib-top; + uses syslog-component-rib-top; + uses syslog-component-eventmgr-top; + uses syslog-component-gnmi-top; + uses syslog-component-sidmgr-top; + } + } + + grouping alias-cmd-top { + list alias { + key "name"; + description "List of alias commands"; + + leaf name { + type string { + length "1..64"; + } + description "Name of alias command"; + } + + leaf command { + type string { + length "1..512"; + } + description "Actual command to be executed"; + } + } + } + + grouping bash-alias-top { + + description + "Top-level grouping for aliases for shell commands"; + + container bash-alias { + + container config { + uses alias-cmd-top; + } + + container state { + config false; + uses alias-cmd-top; + } + } + } + + grouping system-cli-config { + description + "Configuration data for system command line + interface parameters"; + + leaf oper-prompt { + type string; + default "\\u@\\H\\M# "; + description + "Command line prompt used in operational mode"; + } + + leaf config-prompt { + type string; + default "\\u@\\H(\\m)# "; + description + "Command line prompt used in configuration mode"; + } + leaf idle-timeout { + type uint16; + units minutes; + default "30"; + description + "Maximum idle time before terminating a CLI session. Default + is 30 minutes. 0 means no timeout. Will be silently + capped to 49 days 17 hours. This configuration parameter takes + effect only for new sessions."; + } + } + + grouping system-cli-top { + description + "Top-level grouping for system command line + interface parameters"; + + container cli { + description + "Top-level container for command line interface + parameters"; + + container config { + description + "Configuration data for system command line + interface parameters"; + + uses system-cli-config; + } + + container state { + config false; + + description + "Operational state data for system command line + interface parameters"; + + uses system-cli-config; + } + } + } + + grouping crontab-entry-top { + list crontab-entry { + key "name"; + description "List of crontab entries"; + + leaf name { + type string { + length "1..64"; + } + description "Name of crontab entry"; + } + + leaf user { + type string { + length "1..16"; + } + description "Username under which to run this command"; + } + + leaf timespec { + type string { + length "1..64"; + } + description "cron crontab(5) time specification"; + } + + leaf command { + type string { + length "1..512"; + } + description "Actual command to be executed"; + } + } + } + + grouping crontab-top { + + description + "Top-level grouping for crontab entries"; + + container crontab { + + container config { + uses crontab-entry-top; + } + + container state { + config false; + uses crontab-entry-top; + } + } + } + + grouping daemon-config { + + leaf name { + type string { + length "1..64"; + } + description + "Name of daemon command"; + } + + leaf command { + type string { + length "1..512"; + } + description + "Actual command to be executed"; + } + + leaf enabled { + type boolean; + description + "Daemon should be running"; + } + } + + grouping daemon-state { + leaf pid { + // POSIX pid_t is signed 32-bit on Linux...this year + type int32; + description + "Daemon process ID, zero if none"; + } + } + + grouping user-daemon-top { + + description + "Top-level grouping for user-specified daemons to be run under spyder"; + + container user-daemon { + + container config { + list daemon { + key "name"; + description + "List of daemon commands"; + + uses daemon-config; + } + } + + container state { + config false; + + list daemon { + key "name"; + description + "List of daemon commands"; + + uses daemon-config; + uses daemon-state; + } + } + } + } + + grouping icmp-cfg-top { + leaf source-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description "The interface to bind to when sending ICMP error packets."; + } + } + + grouping icmp-top { + + description + "Top-level grouping for ICMP configuration"; + + container icmp { + + description "ICMP configuration options"; + + container config { + uses icmp-cfg-top; + } + + container state { + config false; + uses icmp-cfg-top; + } + } + } + + grouping system-ztp-counters { + leaf attempts { + type uint32; + description + "Number of ZTP attempts."; + } + } + + grouping system-ztp-intf-dhcp-counters { + container counters { + description + "Interface ZTP DHCP request counters "; + leaf dhcpv4-attempts { + type uint32; + description + "DHCP resolution attempts on interface."; + } + leaf dhcpv6-attempts { + type uint32; + description + "DHCPv6 resolution attempts on interface."; + } + } + } + + grouping system-ztp-intf-dhcp-resp-state { + container response { + description + "Interface ZTP DHCP response information"; + leaf ipv4-address { + type string; + description + "IPv4 Address assigned by DHCP server"; + } + + leaf dhcpv4-config-url { + type string; + description + "Configuration file URL to be used by ZTP"; + } + + leaf dhcpv4-script-url { + type string; + description + "Script file URL to be used by ZTP"; + } + + leaf ipv6-address { + type string; + description + "IPv6 Address assigned by DHCPv6 server"; + } + + leaf dhcpv6-config-url { + type string; + description + "Configuration file URL to be used by ZTP"; + } + + leaf dhcpv6-script-url { + type string; + description + "Configuration file URL to be used by ZTP"; + } + } + } + + grouping system-ztp-intf-state { + + container dhcp { + description + "Per interface ZTP DHCP state parameters"; + config false; + uses system-ztp-intf-dhcp-counters; + uses system-ztp-intf-dhcp-resp-state; + } + } + + grouping system-ztp-state { + leaf enabled { + type boolean; + description + "ZTP Enabled/Disabled."; + } + + leaf process-state { + type string; + description + "Current ZTP Process state."; + } + + leaf remaining-restart-time { + type uint16; + units "seconds"; + description + "Remaining time in seconds before spyder restart."; + } + + leaf interface { + type string; + description + "Interface name"; + } + + leaf address { + type string; + description + "IPv4/IPv6 Address assigned by DHCP server"; + } + + leaf url { + type string; + description + "Configuration/Script file URL to be used by ZTP"; + } + } + + grouping system-ztp-interfaces-top { + container interfaces { + config false; + description + "Interface ZTP DHCP state parameters"; + list interface { + key "name"; + description + "List of interfaces on which DHCP requests are being sent"; + + leaf name { + type string; + description + "Interface name"; + } + + container state { + uses system-ztp-intf-state; + } + } + } + } + + grouping system-ztp-top { + description + "Top-level grouping for ZTP state"; + + container ztp { + description + "ZTP state attributes."; + + container state { + config false; + uses system-ztp-state; + + container counters { + uses system-ztp-counters; + } + } + uses system-ztp-interfaces-top; + } + } + + grouping aaa-authentication-session-state { + description + "State data for users sessions"; + + leaf sno { + type uint32; + description + "S.No. for this user"; + } + + leaf user { + type string; + description + "Username"; + } + + leaf tty { + type string; + description + "TTY for this user"; + } + + leaf from { + type string; + description + "IP address of the user"; + } + + leaf login { + type string; + description + "Login time for this user"; + } + + leaf idle { + type string; + description + "Idle time for this user"; + } + } + + grouping aaa-authentication-user-sessions-top { + description + "Top-level grouping for local users"; + + container user-sessions { + config false; + + description + "Enclosing container list of local users-sessions"; + + list session { + key "sno"; + description + "Serial Number"; + + uses aaa-authentication-session-state; + } + } + } + + grouping system-snmp-server-common { + leaf enable { + type boolean; + default false; + description + "Enables the SNMP server. The SNMP server is disabled by + default"; + } + + leaf-list protocol-version { + type enumeration { + enum V2C { + description + "Enable the SNMP agent for protocol version 2c"; + } + enum V3 { + description + "Enable the SNMP agent for protocol version 3"; + } + } + default "V2C"; + description + "A list of SNMP protocol versions that the agent supports"; + } + + leaf network-instance { + type oc-ni:network-instance-ref; + description + "The network instance (VRF) on which the SNMP server should listen. + All the 'listen-addresses', if configured, must belong to this + network instance."; + } + + leaf port { + type oc-inet:port-number; + default 161; + description + "UDP port on which the SNMP server should listen"; + } + + leaf contact { + type string; + description + "SNMPv2-MIB sysContact"; + } + + leaf location { + type string; + description + "SNMPv2-MIB sysLocation"; + } + + leaf engine-id { + type union { + type enumeration { + enum SYSTEM_MAC_ADDRESS { + value 3; + description + "Derive the SNMPv3 engine-id from the global system + MAC address"; + } + } + type yang:hex-string; + } + default "SYSTEM_MAC_ADDRESS"; + description + "The SNMPv3 engine-id suffix. This can either be derived by the system + or specified as a valid hexidecimal string."; + } + } + + grouping system-snmp-server-config { + description + "Configuration data for the SNMP server"; + + uses system-snmp-server-common; + + leaf-list listen-addresses { + type union { + type inet:ip-address; + type enumeration { + enum ANY { + description + "The SNMP master agent should listen on any address + bound to an interface on the system."; + } + } + type string; + } + default "ANY"; + must "(not(../listen-addresses = 'ANY' and count(../listen-addresses) > 1))" { + error-message "'ANY' and IP addresses are mutually exclusive"; + } + description + "The IP addresses that the SNMP master agent should + listen on. This may be an IPv4 or an IPv6 address or interface name"; + } + } + grouping system-snmp-server-state { + description + "State data for the SNMP server"; + + uses system-snmp-server-common; + + leaf-list listen-addresses { + type union { + type inet:ip-address; + type enumeration { + enum ANY { + description + "The SNMP master agent should listen on any address + bound to an interface on the system."; + } + } + type string; + } + description + "The IP addresses that the SNMP master agent should + listen on. This may be an IPv4 or an IPv6 address or interface name"; + } + } + + grouping system-snmp-server-target-parameters-config { + description + "Configuration data for SNMP target parameters"; + + leaf name { + type string; + description + "Unique identitifer for a group of SNMP target + parameters"; + } + + leaf security-model { + type enumeration { + enum V2C { + value 2; + description + "Use the SNMPv2c security model"; + } + enum USM { + value 3; + description + "Use the USM (SNMPv3) security model"; + } + } + default "V2C"; + description + "The security model in use per SNMP-TARGET-MIB"; + reference + "RFC3413 - Simple Network Management Protocol (SNMP) + applications"; + } + + leaf security-level { + when "../security-model = 'USM'"; + type enumeration { + enum NONE { + description + "No authentication or privacy is used (noAuthNoPriv)"; + } + enum AUTH { + description + "Authentication without privacy is used (authNoPriv)"; + } + enum PRIV { + description + "Authentication and privacy is used (authPriv)"; + } + } + default "NONE"; + description + "The security level in use per SNMP-TARGET-MIB"; + reference + "RFC3413 - Simple Network Management Protocol (SNMP) + applications"; + } + + leaf security-name { + when "../security-model = 'USM'"; + type leafref { + path "../../../../usm/local-engine/users/user/username"; + } + description + "Reference to a SNMPv3 USM username"; + } + + leaf message-processing-model { + when "../security-model = 'USM'"; + type enumeration { + enum V2C { + value 1; + description + "SNMP v2c message processing model"; + } + enum V3 { + value 3; + description + "SNMP v3 message processing model"; + } + } + default "V2C"; + description + "The message processing model when generating SNMP + notifications"; + } + } + + grouping system-snmp-server-target-parameters-top { + description + "Top-level grouping for SNMP target parameters"; + + container target-parameters { + description + "Enclosing container for SNMP target parameter configuration + and operational state"; + + list target-parameter { + key "name"; + description + "List of SNMP target parameters"; + + leaf name { + type leafref { + path "../config/name"; + } + description + "Reference to the name list key"; + } + + container config { + description + "Configuration data for SNMP target parameters"; + + uses system-snmp-server-target-parameters-config; + } + + container state { + config false; + description + "Operational state data for SNMP target parameters"; + + uses system-snmp-server-target-parameters-config; + } + } + } + } + + grouping system-snmp-server-target-config { + description + "Configuration parameters for the SNMP target destinations"; + + leaf name { + type string; + description + "Unique identifier for the SNMP target"; + } + + leaf enable { + type boolean; + default true; + description + "Enables/disables the SNMP target. The target is + enabled by default"; + } + + leaf address { + type inet:ip-address; + description + "IP address of the SNMP target destination"; + } + + leaf port { + type oc-inet:port-number; + default 162; + description + "Protocol (udp or tcp) port number for the + SNMP target destination"; + } + + leaf target-parameters { + type leafref { + path "../../../../target-parameters/target-parameter/name"; + } + description + "Target parameters associated with the SNMP target + destination"; + } + + } + + grouping system-snmp-server-target-top { + description + "Top-level grouping for SNMP server target data"; + + container targets { + description + "Enclosing container for SNMP target configuration and + operational state"; + + list target { + key "name"; + description + "List of SNMP targets"; + + leaf name { + type leafref { + path "../config/name"; + } + description + "Reference to the name list key"; + } + + container config { + description + "Top-level config container for SNMP targets"; + + uses system-snmp-server-target-config; + } + + container state { + config false; + description + "Top-level operational state container for SNMP + targets"; + + uses system-snmp-server-target-config; + } + } + } + } + + grouping system-snmp-server-communities-config { + description + "Configuration data for SNMP communities"; + + leaf name { + type string; + description + "A SNMP community name as defined in RFC1157"; + } + } + + grouping system-snmp-server-communities-top { + description + "Top-level grouping for SNMP server communities data"; + + container communities { + list community { + key "name"; + description + "List of SNMP community names"; + + leaf name { + type leafref { + path "../config/name"; + } + description + "Reference to the SNMP community name list key"; + } + + container config { + description + "Configuration data for SNMP communities"; + + uses system-snmp-server-communities-config; + } + + container state { + config false; + + description + "Operational state data for SNMP communities"; + + uses system-snmp-server-communities-config; + } + } + } + } + + grouping system-snmp-server-usm-authentication-config { + description + "Top-level grouping for SNMP server USM authentication + configuration"; + + leaf protocol { + type identityref { + base arc-sys-types:SNMP_AUTH_TYPE; + } + default arc-sys-types:SNMP_AUTH_NONE; + description + "The protocol/hash algorithm for USM authentication"; + + must "derived-from-or-self(current(), 'arc-sys-types:SNMP_AUTH_NONE') or " + + "(not(derived-from-or-self(current(), 'arc-sys-types:SNMP_AUTH_NONE')) and " + + "boolean(../key))" { + error-message + "An authentication key must be configured when a authentication " + + "protocol is specified"; + } + } + + leaf key { + when "../protocol != 'arc-sys-types:SNMP_AUTH_NONE'"; + type union { + type yang:hex-string; + type arc-sys-types:encrypted-string; + } + description + "An authentication passphrase supplied as clear-text or a + pre-computed authentication key hash"; + } + } + + grouping system-snmp-server-usm-authentication-top { + description + "Top-level grouping for SNMP server USM authentication + data"; + + container authentication { + description + "Top-level container for SNMP server USM authentication"; + + container config { + description + "Configuration data for SNMP USM authentication"; + + uses system-snmp-server-usm-authentication-config; + } + + container state { + config false; + + description + "Operational state data for SNMP USM authentication"; + + uses system-snmp-server-usm-authentication-config; + } + } + } + + grouping system-snmp-server-usm-privacy-config { + description + "Top-level grouping for SNMP server USM privacy + configuration"; + + leaf protocol { + type identityref { + base arc-sys-types:SNMP_PRIV_TYPE; + } + default arc-sys-types:SNMP_PRIV_NONE; + description + "The protocol/cipher for USM privacy"; + + must "derived-from-or-self(current(), 'arc-sys-types:SNMP_PRIV_NONE') or " + + "(not(derived-from-or-self(current(), 'arc-sys-types:SNMP_PRIV_NONE')) and " + + "boolean(../key))" { + error-message + "A privacy key must be configured when a privacy protocol is " + + "specified"; + } + must "derived-from-or-self(current(), 'arc-sys-types:SNMP_PRIV_NONE') or " + + "(not(derived-from-or-self(current(), 'arc-sys-types:SNMP_PRIV_NONE')) and " + + "../../../authentication/config/protocol != 'arc-sys-types:SNMP_AUTH_NONE')" { + error-message + "An authentication protocol must be configured when a privacy " + + "protocol is used"; + } + } + + leaf key { + when "../protocol != 'arc-sys-types:SNMP_PRIV_NONE'"; + type union { + type yang:hex-string; + type arc-sys-types:encrypted-string; + } + description + "A privacy passphrase supplied as clear-text or a + pre-computed privacy key hash"; + } + } + + grouping system-snmp-server-usm-privacy-top { + description + "Top-level grouping for SNMP server USM privacy data"; + + container privacy { + description + "Top-level container for SNMP server USM privacy"; + + container config { + description + "Configuration data for SNMP USM privacy"; + + uses system-snmp-server-usm-privacy-config; + } + + container state { + config false; + + description + "Operational state data for SNMP USM privacy"; + + uses system-snmp-server-usm-privacy-config; + } + } + } + + grouping system-snmp-server-usm-user-config { + description + "Top-level grouping for SNMP server USM user configuration"; + + leaf username { + type string; + description + "SNMPv3 User-based Security Model username"; + } + } + + grouping system-snmp-server-usm-top { + description + "Top-level grouping for SNMP server User-based Security Model + data"; + + container usm { + description + "Enclosing container for defining SNMP server User-based + Security Model parameters"; + + container local-engine { + description + "Enclosing container for defining USM parameters + pertaining to the local-engine"; + + container users { + description + "Enclosing container list of SNMP USM users"; + + list user { + key "username"; + + leaf username { + type leafref { + path "../config/username"; + } + description + "References the configured username for the user"; + } + + container config { + description + "Configuration data for SNMP User-based Security Model + users"; + + uses system-snmp-server-usm-user-config; + } + + container state { + config false; + + description + "Operational state data for SNMP User-based Security + Model users"; + + uses system-snmp-server-usm-user-config; + } + + uses system-snmp-server-usm-authentication-top; + uses system-snmp-server-usm-privacy-top; + } + } + } + } + } + + grouping snmp-agent-state { + description + "Grouping for SNMP agent state"; + + leaf active { + type boolean; + default false; + description + "Actual state of SNMP agent"; + } + } + + grouping system-snmp-server-top { + description + "Top-level grouping for system SNMP server data"; + + container snmp-server { + description + "Top-level container for the SNMP server"; + + container config { + description + "Configuration data for the system SNMP server"; + + uses system-snmp-server-config; + } + + container state { + config false; + + description + "Operational state data for the system SNMP server"; + + uses system-snmp-server-state; + uses snmp-agent-state; + } + + uses system-snmp-server-communities-top; + uses system-snmp-server-target-top; + uses system-snmp-server-target-parameters-top; + uses system-snmp-server-usm-top; + } + } + + grouping system-restconf-server-common { + description + "Configuration data for system RESTCONF configuration"; + + leaf enable { + type boolean; + default false; + description + "Enables the RESTCONF server. The RESTCONF server + is disabled by default."; + } + + leaf port { + type oc-inet:port-number; + default 8009; + description + "TCP port on which the RESTCONF server should listen"; + } + + leaf transport-security { + type boolean; + default true; + description + "Enables RESTCONF transport security (TLS/SSL). + Transport-security is enabled by default."; + } + } + + grouping system-restconf-server-config { + + uses system-restconf-server-common; + + leaf-list listen-addresses { + type union { + type inet:ip-address; + type enumeration { + enum ANY { + description + "The RESTCONF server should listen on any address + bound to an interface on the system."; + } + } + } + default "ANY"; + must "(not(../listen-addresses = 'ANY' and count(../listen-addresses) > 1))" { + error-message "'ANY' and IP addresses are mutually exclusive"; + } + description + "The IP addresses that the RESTCONF server should listen + on. This may be an IPv4, IPv6 address or 'ANY'"; + } + + } + + grouping system-restconf-server-state { + + uses system-restconf-server-common; + + leaf-list listen-addresses { + type union { + type inet:ip-address; + type enumeration { + enum ANY { + description + "The RESTCONF server should listen on any address + bound to an interface on the system."; + } + } + } + default "ANY"; + description + "The IP addresses that the RESTCONF server should listen + on. This may be an IPv4, IPv6 address or 'ANY'"; + } + + } + + grouping system-restconf-server-top { + description + "Top-level grouping for RESTCONF server data"; + + container restconf-server { + description + "Top-level container for RESTCONF server"; + + container config { + uses system-restconf-server-config; + } + + container state { + config false; + uses system-restconf-server-state; + } + + uses arc-sys-mgmt:system-tls-top; + } + } + + grouping system-netconf-server-transport-common-config { + description + "Common configuration data for NETCONF transports"; + + leaf enable { + type boolean; + default false; + description + "Enables the NETCONF server per transport. The + NETCONF server is disabled by default across all + supported transports."; + } + + leaf port { + type oc-inet:port-number; + description + "TCP port on which the NETCONF server should listen. + The default for SSHv2 transport is 830 while the + default for TLS transport is 6513."; + } + + leaf timeout { + type uint16; + units seconds; + default 0; + description + "Sets the idle timeout in seconds on terminal connections + to the system for the NETCONF protocol. The default value + is 0 which indicates no idle timeout"; + } + } + + grouping system-netconf-server-transport-config { + description + "Configuration data for NETCONF transport protocols"; + + container transport { + description + "Top-level container for NETCONF transport protocols"; + + container ssh { + description + "Top-level container for NETCONF over SSHv2 data"; + + container config { + description + "Configuration data for NETCONF over SSHv2"; + + uses system-netconf-server-transport-common-config { + refine port { + default 830; + } + } + } + container state { + config false; + + description + "Operational state data for NETCONF over SSHv2"; + + uses system-netconf-server-transport-common-config { + refine port { + default 830; + } + } + } + } + } + } + + grouping system-netconf-server-config { + description + "Configuration data for the NETCONF server"; + + leaf enable { + type boolean; + default false; + description + "Enables the NETCONF server. The NETCONF server is disabled by + default."; + } + } + + grouping system-netconf-server-top { + description + "Top-level grouping for system NETCONF server data"; + + container netconf-server { + description + "Top-level container for the NETCONF server"; + + container config { + description + "Configuration data for the system NETCONF server"; + + uses system-netconf-server-config; + } + + container state { + config false; + + description + "Operational state data for the system NETCONF server"; + + uses system-netconf-server-config; + } + + uses system-netconf-server-transport-config; + } + } + + grouping system-ssh-server-sftp-config { + description + "Configuration data for the SFTP server"; + + leaf enable { + type boolean; + default false; + description + "Enables the SFTP server. The SFTP server is disabled by + default."; + } + } + + grouping system-ssh-server-sftp-top { + description + "Top-level grouping for system SFTP server data"; + + container sftp { + description + "Top-level container for the SFTP server"; + + container config { + description + "Configuration data for the system SFTP server"; + + uses system-ssh-server-sftp-config; + } + + container state { + config false; + + description + "Operational state data for the system SFTP server"; + + uses system-ssh-server-sftp-config; + } + } + } + + grouping system-ssh-server-common { + description + "Configuration data for system ssh configuration"; + + leaf-list ciphers { + ordered-by user; + type arc-sys-types:ssh-cipher-suite; + default "CHACHA20_POLY1305@OPENSSH.COM"; + default "AES128_CTR"; + default "AES192_CTR"; + default "AES256_CTR"; + default "AES128_GCM@OPENSSH.COM"; + default "AES256_GCM@OPENSSH.COM"; + description + "Set the list of cipher suites allowed"; + } + + leaf-list macs { + ordered-by user; + type arc-sys-types:ssh-mac-suite; + default "UMAC_64_ETM@OPENSSH.COM"; + default "UMAC_128_ETM@OPENSSH.COM"; + default "HMAC_SHA2_256_ETM@OPENSSH.COM"; + default "HMAC_SHA2_512_ETM@OPENSSH.COM"; + default "HMAC_SHA1_ETM@OPENSSH.COM"; + default "UMAC_64@OPENSSH.COM"; + default "UMAC_128@OPENSSH.COM"; + default "HMAC_SHA2_256"; + default "HMAC_SHA2_512"; + default "HMAC_SHA1"; + description + "Specifies the available MAC (message authentication code) + algorithms"; + } + + leaf max-auth-tries { + type uint16; + default 6; + description + "Limit on the number of authentication attempts per connection."; + } + + leaf permit-root-login { + type boolean; + default false; + description + "Allow root user to login via SSH"; + } + + leaf network-instance { + type oc-ni:network-instance-ref; + description + "The network instance (VRF) to use for listening to incoming SSH + connections. All the 'listen-addresses', if configured, must belong + to this network instance."; + } + + leaf login-timeout { + type uint32; + units seconds; + default 120; + description + "Login timeout for unauthenticated sessions"; + } + + leaf port { + type oc-inet:port-number; + default 22; + description + "TCP port on which the SSH server should listen"; + } + + leaf pubkey-authentication { + type boolean; + default true; + description + "Allow public key authentication for SSH"; + } + } + + grouping system-ssh-server-config { + + uses system-ssh-server-common; + + leaf-list listen-addresses { + type union { + type inet:ip-address; + type enumeration { + enum ANY { + description + "The SSH daemon should listen on any address + bound to an interface on the system."; + } + } + } + default "ANY"; + must "(not(../listen-addresses = 'ANY' and count(../listen-addresses) > 1))" { + error-message "'ANY' and IP addresses are mutually exclusive"; + } + description + "The IP addresses that the SSH server should listen + on. This may be an IPv4, IPv6 address or 'ANY'"; + } + } + + grouping system-ssh-server-state { + + uses system-ssh-server-common; + + leaf-list listen-addresses { + type union { + type inet:ip-address; + type enumeration { + enum ANY { + description + "The SSH daemon should listen on any address + bound to an interface on the system."; + } + } + } + default "ANY"; + + description + "The IP addresses that the SSH server should listen + on. This may be an IPv4, IPv6 address or 'ANY'"; + } + } + + grouping system-console-port-config { + + leaf permit-root-login { + type boolean; + default true; + description + "Allow root user to login via console port"; + } + + leaf permit-non-root-login { + type boolean; + default true; + description + "Allow all non-root users to login via console port"; + } + + leaf baud-rate { + type enumeration { + enum 1200 { + value 1200; + } + enum 2400 { + value 2400; + } + enum 4800 { + value 4800; + } + enum 9600 { + value 9600; + } + enum 19200 { + value 19200; + } + enum 38400 { + value 38400; + } + enum 57600 { + value 57600; + } + enum 115200 { + value 115200; + } + } + default 115200; + units bps; + description + "Set baud rate"; + } + leaf idle-timeout { + type uint64; + default 300; + units seconds; + description + "Set console idle-timeout in Seconds"; + } + } + + grouping system-console-port-top { + + container console-port { + description + "Top-level grouping for console port parameters"; + + container config { + uses system-console-port-config; + } + + container state { + config false; + uses system-console-port-config; + } + } + } + + grouping system-ports-top { + + container ports { + description + "Top-level grouping for different types of ports"; + + uses system-console-port-top; + } + } + + grouping system-aaa-admin-user-config { + leaf ssh-key { + type string; + description + "SSH public key for the admin (root) user"; + } + } + + grouping system-maintenance-mode-state { + leaf maintenance-mode-state { + type identityref { + base arc-sys-types:MM_STATE; + } + description + "Current maintenance mode state"; + } + + leaf last-state-change-time { + type yang:date-and-time; + description + "Indicates the last time the maintenance mode state was updated."; + } + } + + grouping system-maintenance-mode-stats { + description + "Client specific counters"; + + uses system-maintenance-mode-state ; + + leaf enable-requests-sent { + type yang:counter32; + description + "Number of reqs to enable maintenance-mode sent"; + } + + leaf disable-requests-sent { + type yang:counter32; + description + "Number of reqs to disable maintenance-mode sent"; + } + + leaf registration-requests-received { + type yang:counter32; + description + "Number of registration requests received"; + } + + leaf deregistration-requests-received { + type yang:counter32; + description + "Number of deregistration requests received"; + } + + leaf start-profiling-sent { + type yang:counter32; + description + "Number of maintenance-mode acknowledgement messages sent"; + } + + leaf enable-acks-received { + type yang:counter32; + description + "Number of start maintenance-mode acknowledgement messages received"; + } + + leaf disable-acks-received { + type yang:counter32; + description + "Number of maintenance-mode stop acknowledgement messages received"; + } + leaf completed-received { + type yang:counter32; + description + "Number of maintenance-mode completed messages received"; + } + + leaf failed-received { + type yang:counter32; + description + "Number of maintenance-mode failed messages received"; + } + } + + grouping system-maintenance-mode-heuristics { + leaf target-traffic-absolute { + type uint16; + default 10; + description + "Avg Traffic (in KBps) per interface below which to declare maintenance-mode is effectively active"; + } + leaf target-traffic-percentage { + type uint8; + default 10; + description + "Per interface percentage average traffic below which to declare maintenance-mode is effectively active"; + } + } + grouping system-maintenance-mode-config { + description + "grouping for SYSMGR MM config"; + + leaf activation-timer { + type uint32; + default 300; + description + "activation timer value in seconds"; + } + uses system-maintenance-mode-heuristics; + leaf enable { + type boolean; + default false; + description + "maintenance mode config"; + } + leaf activation-mode { + when "../enable = 'true'" { + description + "Set activation mode only when enable is true"; + } + type identityref { + base arc-sys-types:MM_ACTIVATION_MODE; + } + description + "mode used to activate MM"; + } + } + + grouping system-maintenance-mode-client-state { + leaf name { + type string; + description + "Name of SYSMGR client"; + } + uses system-maintenance-mode-stats; + } + grouping system-maintenance-mode-client-top { + container clients { + config false; + list client { + key "name"; + description + "The list of SYSMGR clients."; + + leaf name { + type leafref { + path "../state/name"; + } + description + "Name of SYSMGR client"; + } + container state { + uses system-maintenance-mode-client-state; + } + } + } + } + grouping system-maintenance-mode-top { + container maintenance-mode { + description + "Sysmgr related config"; + container config { + uses system-maintenance-mode-config; + } + container state { + config false; + uses system-maintenance-mode-config; + uses system-maintenance-mode-state; + } + uses system-maintenance-mode-client-top; + } + } + + grouping system-stateful-restart-state { + leaf stateful-restart-state { + type string; + description + "Current stateful-restart state"; + } + leaf last-stateful-restart-state { + type string; + description + "Last restart state"; + } + leaf last-stateful-restart-time { + type yang:date-and-time; + description + "Indicates the last time the stateful restart was executed."; + } + leaf last-stateful-restart-duration { + type uint32; + description + "Total time in seconds for the stateful restart to complete"; + } + leaf num-stateful-restart-requests { + type uint32; + description + "Total number of stateful restarts requested"; + } + leaf num-stateful-restart-pre-abort-fails { + type uint32; + description + "Total number of stateful restarts failed prior to warmboot"; + } + leaf num-stateful-restart-post-abort-fails { + type uint32; + description + "Total number of stateful restarts failed post warmboot"; + } + leaf remaining-client-wait-time { + type uint16; + units "seconds"; + description + "Remaining wait time for all clients to respond."; + } + leaf last-start-type { + type last-start-type; + description + "Type of last ArcOS startup"; + } + } + + grouping system-stateful-restart-client-state { + leaf name { + type string; + description + "Name of SYSMGR client"; + } + + leaf stateful-restart-client-state { + type string; + description + "Stateful Restart state of SYSMGR client"; + } + leaf pre-restart-error { + type boolean; + description + "Client Errored Pre Restart"; + } + leaf post-restart-error { + type boolean; + description + "Client Errored Post Restart"; + } + } + + grouping system-stateful-restart-client-top { + container clients { + config false; + list client { + key "name"; + description + "The list of SYSMGR clients."; + + leaf name { + type leafref { + path "../state/name"; + } + description + "Name of SYSMGR client"; + } + container state { + uses system-stateful-restart-client-state; + } + } + } + } + + grouping system-stateful-restart-top { + container stateful-restart { + description + "Stateful-Restart Information"; + container state { + config false; + uses system-stateful-restart-state; + } + uses system-stateful-restart-client-top; + } + } + + grouping rib-config { + description + "Configuration parameters relating to RIB + for a particular address family."; + leaf address-family { + type identityref { + base oc-types:ADDRESS_FAMILY; + } + description + "The address family of entries that are described by the + RIB."; + } + leaf rnh-resolution-via-aggregate-route { + type boolean; + description + "Per AFI control to allow or disallow rnh resolution via + aggregate routes."; + } + leaf rnh-resolution-via-default-route { + type boolean; + description + "Per AFI control to allow or disallow rnh resolution via + default routes."; + } + } + + grouping rib-top { + description + "System-wide RIB parameters."; + list rib { + // min-elements 2; minimum (mandatory node) cannot be set on augments. + key "address-family"; + description + "An individual routing table associated with a + an address family."; + leaf address-family { + type leafref { + path "../config/address-family"; + } + description + "Reference to the address family with which the RIB is + associated"; + } + container config { + uses rib-config; + } + container state { + config false; + uses rib-config; + } + } + } + + grouping system-interface-global-config { + leaf load-interval { + type uint16 { + range 5..300; + } + default 30; + description + "Global interface counter load-interval in seconds"; + } + } + + grouping system-interface-global-top { + container interface-global { + description + "Global interface parameters"; + + container config { + uses system-interface-global-config; + } + + container state { + config false; + uses system-interface-global-config; + } + } + } + + grouping tech-support-debug-top { + description + "Top-level grouping for tech-support debugs"; + + container tech-support { + config false; + uses arc-bgp-dbg:bgp-show-debug-top; + } + } + + grouping software-upgrade-info-state { + description + "Top-level grouping for software upgrade info state + data nodes"; + + leaf package { + type string { + length "1..31"; + } + description + "Package name"; + } + + leaf running-version { + type string { + length "1..31"; + } + description + "Package current version"; + } + + leaf upgrade-version { + type string { + length "1..31"; + } + description + "Package upgrade version"; + } + } + + grouping software-upgrade-info-top { + container software { + config false; + description + "Software"; + + container upgrade { + config false; + description + "Upgrade Software"; + + container info { + config false; + description + "Upgrade Software information"; + + list upgrade-bundle-tag { + key "tag"; + leaf tag { + type string { + length "1..128"; + } + } + + list package-versions { + key "package"; + description + "Package information"; + + uses software-upgrade-info-state; + + } + description "tag-value"; + } + } + } + } + } + + augment "/oc-sys:system/oc-sys:ntp/oc-sys:config" { + uses ntp-top; + } + + augment "/oc-sys:system/oc-sys:ntp/oc-sys:state" { + uses ntp-top; + } + + augment "/oc-sys:system/oc-sys:ntp/oc-sys:servers/oc-sys:server/oc-sys:config" { + uses ntp-server-key; + } + + augment "/oc-sys:system/oc-sys:ntp/oc-sys:servers/oc-sys:server/oc-sys:state" { + uses ntp-server-key; + } + + augment "/oc-sys:system/oc-sys:ntp" { + list status { + config false; + + key address; + leaf address { + type oc-inet:host; + description + "The address or hostname of the NTP server."; + } + uses oc-sys:system-ntp-server-state; + uses ntp-server-state; + } + } + + augment "/oc-sys:system/oc-sys:logging" { + uses arc-sys-mgmt:audit-log-top; + } + + augment "/oc-sys:system/oc-sys:logging/oc-sys:remote-servers" + + "/oc-sys:remote-server/oc-sys:config" { + uses logging-remote-config; + } + + augment "/oc-sys:system/oc-sys:logging/oc-sys:remote-servers" + + "/oc-sys:remote-server/oc-sys:state" { + uses logging-remote-config; + } + + augment "/oc-sys:system/oc-sys:logging" { + container config { + description + "Configuration data for system logging"; + + uses system-logging-config; + } + + container state { + config false; + + description + "Operational state data for system logging"; + + uses system-logging-config; + } + + uses syslog-monitor-top; + uses syslog-component-top; + uses syslog-filter-top; + } + + augment "/oc-sys:system" { + uses bash-alias-top; + uses system-ports-top; + uses crontab-top; + uses icmp-top { + when "/arc-features:features/arc-features:feature[arc-features:name='arc-features:ARCOS_ICMP_SRC_REWRITE']" + + "/arc-features:supported = 'true'"; + } + uses user-daemon-top; + uses system-cli-top; + uses rib-top; + uses system-interface-global-top; + uses system-maintenance-mode-top; + uses system-netconf-server-top; + uses system-restconf-server-top; + uses system-stateful-restart-top; + uses system-snmp-server-top; + uses arc-version:version-top; + uses system-ztp-top; + uses tech-support-debug-top; + uses software-upgrade-info-top { + when "(/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')"; + } + } + + augment "/oc-sys:system/oc-sys:state" { + leaf uptime { + type string; + description + "System Uptime value"; + } + } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" { + uses aaa-authentication-user-sessions-top; + } + + augment "/oc-sys:system/oc-sys:ssh-server/oc-sys:config" { + uses system-ssh-server-config; + } + + augment "/oc-sys:system/oc-sys:ssh-server/oc-sys:state" { + uses system-ssh-server-state; + } + + augment "/oc-sys:system/oc-sys:ssh-server" { + uses system-ssh-server-sftp-top; + } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:authentication/oc-sys:admin-user" + + "/oc-sys:config" { + uses system-aaa-admin-user-config; + } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:authentication/oc-sys:admin-user" + + "/oc-sys:state" { + uses system-aaa-admin-user-config; + } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:config" { + uses source-top; + } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:state" { + uses source-top; + } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" { + uses aaa-server-group-state; + } + + augment "/oc-sys:system/oc-sys:grpc-server" { + uses arc-sys-mgmt:system-tls-top; + } + + augment "/oc-sys:system/oc-sys:grpc-server" { + uses arc-sys-mgmt:system-clients-top ; + } + + augment "/oc-sys:system/oc-sys:grpc-server" { + container summary { + leaf bgp { + type boolean; + default false; + description "enable BGP grpc"; + } + leaf dpal { + type boolean; + default false; + description "enable DPAL grpc"; + } + leaf isis { + type boolean; + default false; + description "enable ISIS grpc"; + } + leaf pltfmgr { + type boolean; + default false; + description "enable PLTMGR grpc"; + } + } + } + + augment "/oc-sys:system/oc-sys:grpc-server/oc-sys:config" { + leaf listen-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description "Use IP address of this interface as source address"; + } + leaf network-instance { + type oc-ni:network-instance-ref; + description + "The network instance (VRF) to use for connecting to gRPC server"; + } + } + + augment "/oc-sys:system/oc-sys:grpc-server/oc-sys:state" { + leaf listen-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description "IP address of this interface is used as source address"; + } + leaf network-instance { + type oc-ni:network-instance-ref; + description + "The network instance (VRF) used for connecting to gRPC server"; + } + } + + grouping system-aaa-radius-server-config { + leaf dead-time { + type uint16 { + range 1..600; + } + default 5; + units minutes; + description + "Amount of time in minutes to wait before trying an + unresponsive server again"; + } + } + + grouping system-aaa-radius-server-state { + leaf oper-status { + type enumeration { + enum UP { + description + "RADIUS server is reachable and responsive"; + } + enum DOWN { + description + "RADIUS server is not reachable or is non-responsive"; + } + } + } + } + + typedef last-start-type { + type enumeration { + enum "NORMAL_START" { + value 1; + } + enum "PENDING_HITLESS_RESTART" { + value 2; + } + enum "FAILED_HITLESS_RESTART" { + value 3; + } + enum "SUCCESSFUL_HITLESS_RESTART" { + value 4; + } + } + } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:radius/oc-sys:config" { + uses system-aaa-radius-server-config; + } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:radius/oc-sys:state" { + uses system-aaa-radius-server-config; + uses system-aaa-radius-server-state; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-system-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-system-deviations.yang new file mode 100644 index 000000000..637a07bdf --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-system-deviations.yang @@ -0,0 +1,767 @@ +module arcos-openconfig-system-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/system/deviations"; + prefix arc-oc-sys-dev; + + import openconfig-system { + prefix oc-sys; + } + + import openconfig-aaa-types { + prefix oc-aaa-types; + } + + import arcos-openconfig-aaa-types { + prefix arc-oc-aaa-types; + } + + import arcos-system-types { + prefix arc-sys-types; + } + + import openconfig-aaa { + prefix oc-aaa; + } + + import ietf-inet-types { + prefix inet; + } + + import ietf-yang-types { + prefix yang; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines ArcOS deviations to the + OpenConfig system module. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + + deviation "/oc-sys:system/oc-sys:cpus" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:alarms" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:messages" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:state/oc-sys:current-datetime" { + deviate replace { + type yang:date-and-time; + } + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:servers/oc-sys:server" { + deviate add { + max-elements 3; + } + description "Support only 3 DNS servers"; + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:servers/oc-sys:server" + + "/oc-sys:config/oc-sys:address" { + deviate replace { + type inet:ip-address; + } + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:address" { + deviate replace { + type inet:ip-address; + } + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:host-entries/oc-sys:host-entry" + + "/oc-sys:config/oc-sys:ipv4-address" { + deviate replace { + type inet:ipv4-address; + } + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:host-entries/oc-sys:host-entry" + + "/oc-sys:state/oc-sys:ipv4-address" { + deviate replace { + type inet:ipv4-address; + } + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:host-entries/oc-sys:host-entry" + + "/oc-sys:config/oc-sys:ipv6-address" { + deviate replace { + type inet:ipv6-address; + } + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:host-entries/oc-sys:host-entry" + + "/oc-sys:state/oc-sys:ipv6-address" { + deviate replace { + type inet:ipv6-address; + } + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:servers/oc-sys:server" + + "/oc-sys:config/oc-sys:port" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:dns/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:port" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ssh-server/oc-sys:config" + + "/oc-sys:enable" { + deviate replace { + default false; + } + } + + deviation "/oc-sys:system/oc-sys:ssh-server/oc-sys:config" + + "/oc-sys:protocol-version" { + deviate add { + must ". = 'V2'" { + error-message "Only protocol-version V2 is supported"; + } + } + } + + deviation "/oc-sys:system/oc-sys:ssh-server/oc-sys:config" + + "/oc-sys:session-limit" { + deviate replace { + type uint16 { + range 1..255; + } + } + deviate add { + default 255; + } + } + + deviation "/oc-sys:system/oc-sys:ssh-server/oc-sys:state" + + "/oc-sys:session-limit" { + deviate replace { + type uint16 { + range 1..255; + } + } + deviate add { + default 255; + } + } + + deviation "/oc-sys:system/oc-sys:ssh-server/oc-sys:config" + + "/oc-sys:rate-limit" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ssh-server/oc-sys:state" + + "/oc-sys:rate-limit" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:telnet-server" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:memory" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:processes" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:config/oc-sys:enabled" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:state/oc-sys:enabled" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:config/oc-sys:enable-ntp-auth" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:state/oc-sys:enable-ntp-auth" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:config" + + "/oc-sys:ntp-source-address" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:state" + + "/oc-sys:ntp-source-address" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:state" + + "/oc-sys:auth-mismatch" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:config/oc-sys:version" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:config/oc-sys:association-type" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:state/oc-sys:version" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:state/oc-sys:association-type" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:config/oc-sys:address" { + deviate replace { + type inet:host; + } + description + "Replacement of type due to OpenConfig non-compliance with YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:state/oc-sys:address" { + deviate replace { + type inet:host; + } + description + "Replacement of type due to OpenConfig non-compliance with YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:state/oc-sys:stratum" { + deviate not-supported; + description "This will be part of ntp status"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:state/oc-sys:root-delay" { + deviate not-supported; + description "This will be part of ntp status"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:state/oc-sys:root-dispersion" { + deviate not-supported; + description "This will be part of ntp status"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:state/oc-sys:offset" { + deviate not-supported; + description "This will be part of ntp status"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:servers" + + "/oc-sys:server/oc-sys:state/oc-sys:poll-interval" { + deviate not-supported; + description "This will be part of ntp status"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:ntp-keys" + + "/oc-sys:ntp-key/oc-sys:config/oc-sys:key-type" { + deviate add { + default oc-sys:NTP_AUTH_MD5; + } + description + "Add NTP_AUTH_MD5 as default as this is the only option supported"; + } + + deviation "/oc-sys:system/oc-sys:ntp/oc-sys:ntp-keys" + + "/oc-sys:ntp-key/oc-sys:config/oc-sys:key-value" { + deviate replace { + type arc-sys-types:encrypted-string; + } + deviate add { + mandatory true; + } + description + "NTP AUTH Key value is mandatory for authentication to work"; + } + + deviation "/oc-sys:system/oc-sys:logging/oc-sys:remote-servers" + + "/oc-sys:remote-server" { + deviate add { + must "(boolean(oc-sys:selectors/oc-sys:selector/oc-sys:facility) " + + "and boolean(oc-sys:selectors/oc-sys:selector/oc-sys:severity))" { + error-message "At least one selector must be configured"; + } + } + } + + deviation "/oc-sys:system/oc-sys:logging/oc-sys:remote-servers" + + "/oc-sys:remote-server/oc-sys:config/oc-sys:host" { + deviate replace { + type inet:host; + } + description + "Replacement of type due to OpenConfig non-compliance with YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-sys:system/oc-sys:logging/oc-sys:remote-servers" + + "/oc-sys:remote-server/oc-sys:state/oc-sys:host" { + deviate replace { + type inet:host; + } + description + "Replacement of type due to OpenConfig non-compliance with YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-sys:system/oc-sys:logging/oc-sys:remote-servers" + + "/oc-sys:remote-server/oc-sys:config/oc-sys:source-address" { + deviate replace { + type inet:ip-address; + } + description + "Replacement of type due to OpenConfig non-compliance with YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-sys:system/oc-sys:logging/oc-sys:remote-servers" + + "/oc-sys:remote-server/oc-sys:state/oc-sys:source-address" { + deviate replace { + type inet:ip-address; + } + description + "Replacement of type due to OpenConfig non-compliance with YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-sys:system/oc-sys:logging/oc-sys:console" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:grpc-server" + + "/oc-sys:config/oc-sys:enable" { + deviate replace { + default false; + } + description "The gRPC server is disabled by default"; + } + + deviation "/oc-sys:system/oc-sys:grpc-server" + + "/oc-sys:config/oc-sys:listen-addresses" { + deviate replace { + type inet:ip-address; + } + deviate add { + max-elements 1; + } + description + "Replacement of type due to OpenConfig non-compliance with YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-sys:system/oc-sys:grpc-server" + + "/oc-sys:config/oc-sys:metadata-authentication" { + deviate replace { + default true; + } + description "Metadata-authentication is enabled by default"; + } + + deviation "/oc-sys:system/oc-sys:grpc-server" + + "/oc-sys:state/oc-sys:listen-addresses" { + deviate replace { + type inet:ip-address; + } + description "Replacement of type due to OpenConfig non-compliance with YANG 1.0/1.1 pattern statement"; + } + + deviation "/oc-sys:system/oc-sys:grpc-server" + + "/oc-sys:config/oc-sys:certificate-id" { + deviate not-supported; + description "Not Supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:admin-user/oc-sys:config/oc-sys:admin-password-hashed" { + deviate not-supported; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:admin-user/oc-sys:state/oc-sys:admin-password-hashed" { + deviate not-supported; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:admin-user/oc-sys:config/oc-sys:admin-password" { + deviate replace { + type arc-sys-types:user-password; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:admin-user/oc-sys:state/oc-sys:admin-password" { + deviate replace { + type arc-sys-types:user-password; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:users/oc-sys:user/oc-sys:config/oc-sys:password" { + deviate replace { + type arc-sys-types:user-password; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:users/oc-sys:user/oc-sys:config" { + deviate add { + must "(boolean(oc-sys:password) or boolean(oc-sys:ssh-key))" { + error-message "Either password or ssh public key must be provided."; + } + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:users/oc-sys:user/oc-sys:state/oc-sys:password" { + deviate replace { + type arc-sys-types:user-password; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:users/oc-sys:user/oc-sys:config/oc-sys:password-hashed" { + deviate not-supported; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:users/oc-sys:user/oc-sys:state/oc-sys:password-hashed" { + deviate not-supported; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group" { + deviate add { + max-elements 2; + } + description "Maximum 2 server groups supported - 1 for TACACS and 1 for RADIUS"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" { + deviate add { + min-elements 1; + max-elements 5; + } + description "Support maximum of 5 servers. Maintain order input by user"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server/oc-sys:config" + + "/oc-sys:address" { + deviate replace { + type inet:ip-address; + } + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server/oc-sys:state" + + "/oc-sys:address" { + deviate replace { + type inet:ip-address; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:config/oc-sys:type" { + deviate add { + default oc-aaa:TACACS; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server/oc-sys:tacacs" + + "/oc-sys:config/oc-sys:secret-key" { + deviate replace { + type arc-sys-types:encrypted-string; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server/oc-sys:tacacs" + + "/oc-sys:state/oc-sys:secret-key" { + deviate replace { + type arc-sys-types:encrypted-string; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" { + deviate add { + must "((../../oc-sys:config/oc-sys:type = 'oc-aaa:TACACS') and + boolean(./oc-sys:tacacs/oc-sys:config/oc-sys:secret-key)) or + ((../../oc-sys:config/oc-sys:type = 'oc-aaa:RADIUS') and + boolean(./oc-sys:radius/oc-sys:config/oc-sys:secret-key))" { + error-message "Server secret-key configuration is mandatory" ; + } + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication/oc-sys:config" + + "/oc-sys:authentication-method" { + deviate add { + max-elements 2; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authorization/oc-sys:config" + + "/oc-sys:authorization-method" { + deviate add { + max-elements 2; + } + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:accounting/oc-sys:config" + + "/oc-sys:accounting-method" { + deviate add { + max-elements 2; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server/oc-sys:radius" + + "/oc-sys:config/oc-sys:secret-key" { + deviate replace { + type arc-sys-types:encrypted-string; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server/oc-sys:radius" + + "/oc-sys:state/oc-sys:secret-key" { + deviate replace { + type arc-sys-types:encrypted-string; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:config" { + deviate not-supported; + description "Empty node"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:state" { + deviate not-supported; + description "Empty node"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authorization" + + "/oc-sys:events" { + deviate not-supported; + description "Authorization Events not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:accounting" + + "/oc-sys:events" { + deviate not-supported; + description "Accounting Events not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server/oc-sys:radius" + + "/oc-sys:config/oc-sys:source-address" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server/oc-sys:radius" + + "/oc-sys:state/oc-sys:source-address" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:config/oc-sys:name" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:config/oc-sys:timeout" { + deviate replace { + type uint16 { + range 1..60; + } + } + deviate add { + default 5; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:name" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:connection-opens" { + deviate replace { + type yang:counter64; + } + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:connection-failures" { + deviate replace { + type yang:counter64; + } + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:connection-timeouts" { + deviate replace { + type yang:counter64; + } + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:connection-closes" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:connection-aborts" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:messages-sent" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:messages-received" { + deviate not-supported; + description "Not supported in this release"; + } + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:state/oc-sys:errors-received" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers" + + "/oc-sys:server/oc-sys:tacacs/oc-sys:config" + + "/oc-sys:source-address" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers" + + "/oc-sys:server/oc-sys:tacacs/oc-sys:state" + + "/oc-sys:source-address" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:users/oc-sys:user/oc-sys:config/oc-sys:role" { + deviate replace { + type identityref { + base oc-aaa-types:SYSTEM_DEFINED_ROLES; + } + } + + deviate add { + default arc-oc-aaa-types:SYSTEM_ROLE_OPERATOR; + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:authentication" + + "/oc-sys:users/oc-sys:user/oc-sys:state/oc-sys:role" { + deviate replace { + type identityref { + base oc-aaa-types:SYSTEM_DEFINED_ROLES; + } + } + } + + deviation "/oc-sys:system/oc-sys:aaa/oc-sys:server-groups" + + "/oc-sys:server-group/oc-sys:servers/oc-sys:server" + + "/oc-sys:radius/oc-sys:config/oc-sys:retransmit-attempts" { + deviate replace { + type uint8 { + range 1..10; + } + } + deviate add { + default 2; + } + } + + /* + The following deviation was added because the linux 'hostname' + command doesn't allow hostnames to be longer than 63 characters. + */ + deviation "/oc-sys:system/oc-sys:config/oc-sys:hostname" { + deviate replace { + type string { + length "1..63"; + pattern + '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*' + + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)' + + '|\.'; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-telemetry-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-telemetry-augments.yang new file mode 100644 index 000000000..1058791f2 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-telemetry-augments.yang @@ -0,0 +1,435 @@ +module arcos-openconfig-telemetry-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/telemetry/augments"; + prefix arc-oc-telemetry-aug; + + import openconfig-telemetry-types { + prefix oc-telemetry-types; + } + + import openconfig-telemetry { + prefix oc-telemetry; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-network-instance { + prefix oc-ni; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines ArcOS augments to the + OpenConfig telemetry module. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + revision 2019-10-27 { + description "Initial revision"; + } + + identity SENSOR_TYPE { + description + "base type for supported telemetry sensors"; + } + + identity RIB_ROUTES { + base "SENSOR_TYPE"; + description "Route information published by RIB to Forwarding"; + } + + identity PLATFORM_STATE { + base "SENSOR_TYPE"; + description "Platform information like CPU usage, peripherals state etc"; + } + + identity ACL_STATISTICS { + base "SENSOR_TYPE"; + description "ACL statistics"; + } + + identity INTERFACE_STATISTICS { + base "SENSOR_TYPE"; + description "Interface statistics"; + } + + identity BGP_STATE { + base "SENSOR_TYPE"; + description "BGP best paths, peering changes"; + } + + identity ISIS_STATE { + base "SENSOR_TYPE"; + description "ISIS adjacencies and statistics"; + } + + identity OSPF_STATE { + base "SENSOR_TYPE"; + description "OSPF sessions and statistics"; + } + + identity OSPF3_STATE { + base "SENSOR_TYPE"; + description "OSPF V3 sessions and statistics"; + } + + identity LDP_STATE { + base "SENSOR_TYPE"; + description "LDP session, adjacency and label-binding"; + } + + identity PFCP_STATE { + base "SENSOR_TYPE"; + description "PFCP session"; + } + + identity L2RIB_STATE { + base "SENSOR_TYPE"; + description "L2RIB state information published by L2RIB"; + } + + identity EVPN { + base "SENSOR_TYPE"; + description "EVPN related information"; + } + + identity OS_STATS { + base "SENSOR_TYPE"; + description "Operating System Statistics such as TCP Stats, FD Stats"; + } + + identity LLDP { + base "SENSOR_TYPE"; + description "LLDP related information"; + } + + identity LICENSE { + base "SENSOR_TYPE"; + description "License related information"; + } + + identity SID_STATE { + base "SENSOR_TYPE"; + description "Segment Routing ID related information"; + } + + grouping sensors-top { + description + "Top-level grouping for Sensor Tags"; + + leaf-list sensors { + type identityref { + base SENSOR_TYPE; + } + + description + "List of sensors to be enabled for streaming"; + } + } + + typedef telemetry-state { + type enumeration { + enum off { + description + "Disable telemetry"; + } + enum on { + description + "Enable telemetry"; + } + } + } + + grouping global-top { + container global { + container config { + leaf status { + type telemetry-state; + default off; + description + "Turn telemetry ON or OFF"; + } + must "status != 'on' or "+ + "(count(/oc-telemetry:telemetry-system/oc-telemetry:destination-groups" + + "/oc-telemetry:destination-group) > 0 " + + "and " + + "count(/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions" + + "/oc-telemetry:persistent-subscription) > 0)" { + error-message "Both destination-groups and persistent-subscriptions " + + "must be configured to turn ON telemetry"; + } + leaf cuid { + type string { + length "1..31"; + } + description + "Unique customer ID from ArcOS license"; + } + must "status != 'on' or string-length(cuid) > 0" { + error-message "Customer ID is mandatory when enabling telemetry"; + } + } + + container state { + config false; + leaf status { + type telemetry-state; + } + + leaf cuid { + type string { + length "1..31"; + } + } + + leaf device-id { + type string { + length "1..63"; + } + } + + uses sensor-stats; + } + } + } + + grouping statistics-top { + container statistics { + config false; + description "Destination statistics"; + + leaf msgs-created { + type uint64; + default 0; + description "Number of messages created for transmission"; + } + + leaf msgs-delivered { + type uint64; + default 0; + description "Number of messages delivered successfully"; + } + + leaf msgs-failed { + type uint64; + default 0; + description "Number of messages failed to be delivered"; + } + + leaf msgs-dropped { + type uint64; + default 0; + description "Number of messages dropped before transmission"; + } + } + } + + grouping sensor-stats { + list sensor-statistics { + key sensor; + + leaf sensor { + type identityref { + base SENSOR_TYPE; + } + + description "Name of sensor"; + } + + leaf notifications-generated { + type uint64; + default 0; + description "Number of notifications generated by this sensor"; + } + } + } + + grouping ssl { + container ssl { + presence "Enables SSL"; + description + "Enables SSL (actually TLS) and configure associated settings"; + + leaf ca-cert-file { + type string { + length "1..255"; + } + description + "Absolute file path to the corresponding signing Certificate Authority certificate."; + } + + container client-authentication { + presence "Enables SSL client authentication"; + description "SSL client (mutual) authentication settings"; + + leaf cert-file { + mandatory true; + type string { + length "1..255"; + } + description + "Absolute file path to the client certificate."; + } + + leaf key-file { + mandatory true; + type string { + length "1..255"; + } + description + "Absolute path to the corresponding private key file for the client certificate."; + } + } + } + } + + grouping summary { + container summary { + leaf acl { + type boolean; + default false; + description "enable ACL telemetry"; + } + leaf bgp { + type boolean; + default false; + description "enable BGP telemetry"; + } + leaf dpal { + type boolean; + default false; + description "enable DPAL telemetry"; + } + leaf pfcp-proxy { + type boolean; + default false; + description "enable PFCP-Proxy telemetry"; + } + leaf isis { + type boolean; + default false; + description "enable ISIS telemetry"; + } + leaf ldp { + type boolean; + default false; + description "enable LDP telemetry"; + } + leaf pltfmgr { + type boolean; + default false; + description "enable PLTMGR telemetry"; + } + leaf rib { + type boolean; + default false; + description "enable RIB telemetry"; + } + leaf l2rib { + type boolean; + default false; + description "enable L2RIB telemetry"; + } + leaf evpn { + type boolean; + default false; + description "enable EVPN telemetry"; + } + leaf os-stats { + type boolean; + default false; + description "enable OS-STATS telemetry"; + } + leaf lldp { + type boolean; + default false; + description "enable LLDP telemetry"; + } + leaf sidmgr { + type boolean; + default false; + description "enable SIDMGR telemetry"; + } + leaf license { + type boolean; + default false; + description "enable License telemetry"; + } + leaf ospf { + type boolean; + default false; + description "enable OSPF telemetry"; + } + leaf ospf3 { + type boolean; + default false; + description "enable OSPF V3 telemetry"; + } + } + } + + grouping source-top { + leaf source-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description "Source interface to use to connect to destination"; + } + + leaf network-instance { + type oc-ni:network-instance-ref; + description + "Use this network instance (VRF) to connect to destination. + The above 'source-interface', if configured, must belong + to this network instance. If no 'source-interface' is configured + then the source interface will be chosen automatically from + within this network-instance"; + } + } + + augment "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:config" { + uses sensors-top; + } + + augment "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:state" { + uses sensors-top; + } + + augment "/oc-telemetry:telemetry-system/oc-telemetry:destination-groups" + + "/oc-telemetry:destination-group/oc-telemetry:destinations/oc-telemetry:destination" + + "/oc-telemetry:config" { + uses ssl; + uses source-top; + } + + augment "/oc-telemetry:telemetry-system/oc-telemetry:destination-groups" + + "/oc-telemetry:destination-group/oc-telemetry:destinations/oc-telemetry:destination" + + "/oc-telemetry:state" { + uses statistics-top; + uses ssl; + uses source-top; + } + + augment "/oc-telemetry:telemetry-system" { + uses global-top; + uses summary; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-telemetry-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-telemetry-deviations.yang new file mode 100644 index 000000000..38af1ce6c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-telemetry-deviations.yang @@ -0,0 +1,176 @@ +module arcos-openconfig-telemetry-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/telemetry/deviations"; + prefix arc-oc-telemetry-dev; + + import openconfig-telemetry { + prefix oc-telemetry; + } + + import ietf-inet-types { + prefix inet; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines ArcOS deviations to the + OpenConfig telemetry module. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + revision 2019-10-27 { + description "Initial revision"; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:destination-groups" + + "/oc-telemetry:destination-group/oc-telemetry:destinations" + + "/oc-telemetry:destination/oc-telemetry:config/oc-telemetry:destination-address" { + deviate replace { + type union { + type inet:ip-address; + type inet:domain-name; + } + } + description "To match internal implementation"; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:destination-groups" + + "/oc-telemetry:destination-group/oc-telemetry:destinations" + + "/oc-telemetry:destination/oc-telemetry:state/oc-telemetry:destination-address" { + deviate replace { + type union { + type inet:ip-address; + type inet:domain-name; + } + } + description "To match internal implementation"; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:destination-groups" + + "/oc-telemetry:destination-group" { + deviate add { + max-elements 3; + } + description "To match internal implementation"; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:destination-groups" + + "/oc-telemetry:destination-group/oc-telemetry:destinations/oc-telemetry:destination" { + deviate add { + min-elements 1; + max-elements 5; + } + description "To match internal implementation"; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" { + deviate add { + max-elements 3; + } + description "To match internal implementation"; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:destination-groups/oc-telemetry:destination-group" { + deviate add { + min-elements 1; + max-elements 1; + } + description "To match internal implementation"; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:sensor-groups" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:dynamic-subscriptions" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:sensor-profiles" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:config/oc-telemetry:local-source-address" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:state/oc-telemetry:local-source-address" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:config/oc-telemetry:originated-qos-marking" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:state/oc-telemetry:id" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:state/oc-telemetry:originated-qos-marking" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:config/oc-telemetry:protocol" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:state/oc-telemetry:protocol" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:config/oc-telemetry:encoding" { + deviate not-supported; + description "Not supported in this release."; + } + + deviation "/oc-telemetry:telemetry-system/oc-telemetry:subscriptions" + + "/oc-telemetry:persistent-subscriptions/oc-telemetry:persistent-subscription" + + "/oc-telemetry:state/oc-telemetry:encoding" { + deviate not-supported; + description "Not supported in this release."; + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-augments.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-augments.yang new file mode 100644 index 000000000..bd5c00663 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-augments.yang @@ -0,0 +1,129 @@ +module arcos-openconfig-vlan-augments { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/vlan/augments"; + prefix arc-oc-vlan-aug; + + + import ietf-yang-types { prefix yang; } + import ietf-inet-types { prefix inet; } + import openconfig-vlan {prefix oc-vlan; } + import openconfig-yang-types { prefix oc-yang; } + import openconfig-interfaces {prefix oc-if; } + import openconfig-vlan-types { prefix oc-vlan-types; } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + description + "This module defines augments statements for the + for OpenConfig vlan module. + Copyright (c) 2016-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-31 { + description + "Adds vlan match any support"; + } + + revision 2023-03-13 { + description + "Add double-tagged support"; + } + + grouping vlan-egress-default-tpid-config { + description + "TPID configuration for dot1q-enabled interfaces"; + + leaf egress-default-tpid { + type identityref { + base oc-vlan-types:TPID_TYPES; + } + default oc-vlan-types:TPID_0X8100; + description + "Optionally set the tag protocol identifier field (TPID) that + is accepted on the VLAN"; + } + } + + grouping vlan-double-map-config { + description + "TPID configuration for dot1q-enabled interfaces"; + + leaf inner-tpid { + type identityref { + base oc-vlan-types:TPID_TYPES; + } + description + "Set the tag protocol identifier field (TPID)"; + } + leaf inner-vlan-id { + type oc-vlan-types:vlan-id; + description + "Set the inner vlan-id"; + } + } + + grouping vlan-match-any-node { + leaf any { + type empty; + description + "Match any packet with or without VLAN tags."; + } + } + + grouping vlan-match-any-top { + container match-any { + description + "Match any packet with or without VLAN tags."; + container config { + uses vlan-match-any-node; + } + container state { + config false; + uses vlan-match-any-node; + } + } + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:config" { + description + "Adds default egress TPID / ethertype setting for the base interface"; + + uses vlan-egress-default-tpid-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:state" { + description + "Adds TPID / ethertype opstate for the base interface"; + + uses vlan-egress-default-tpid-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:ingress-mapping/oc-vlan:config" { + uses vlan-double-map-config; + } + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:ingress-mapping/oc-vlan:state" { + uses vlan-double-map-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:egress-mapping/oc-vlan:config" { + uses vlan-double-map-config; + } + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:egress-mapping/oc-vlan:state" { + uses vlan-double-map-config; + } + + augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:match" { + uses vlan-match-any-top; + } +} \ No newline at end of file diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-deviations.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-deviations.yang new file mode 100644 index 000000000..ffbecd4b1 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-deviations.yang @@ -0,0 +1,76 @@ +module arcos-openconfig-vlan-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/vlan/deviations"; + prefix arc-oc-vlan-dev; + + import openconfig-vlan { + prefix oc-vlan; + } + + import arcos-platform { + prefix arc-platform; + } + import openconfig-interfaces {prefix oc-if; } + import openconfig-vlan-types { prefix oc-vlan-types; } + import arcos-openconfig-vlan-types { prefix arc-oc-vlan-types;} + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + description + "This module defines deviations statements for the + for OpenConfig vlan module. + Copyright (c) 2016-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-13 { + description + "extend vlan-stack-action with double tag actions"; + } + + deviation "/oc-vlan:vlans/oc-vlan:vlan/oc-vlan:config" + + "/oc-vlan:status" { + deviate not-supported; + description "Not supported in this release"; + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:ingress-mapping/oc-vlan:config/oc-vlan:vlan-stack-action" { + deviate replace { + type arc-oc-vlan-types:vlan-stack-action-extend; + } + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:egress-mapping/oc-vlan:config/oc-vlan:vlan-stack-action" { + deviate replace { + type union { + type oc-vlan-types:vlan-stack-action; + type arc-oc-vlan-types:vlan-stack-action-extend; + } + } + } + + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:ingress-mapping/oc-vlan:state/oc-vlan:vlan-stack-action" { + deviate replace { + type union { + type oc-vlan-types:vlan-stack-action; + type arc-oc-vlan-types:vlan-stack-action-extend; + } + } + } + deviation "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/oc-if:subinterface/" + + "oc-vlan:vlan/oc-vlan:egress-mapping/oc-vlan:state/oc-vlan:vlan-stack-action" { + deviate replace { + type union { + type oc-vlan-types:vlan-stack-action; + type arc-oc-vlan-types:vlan-stack-action-extend; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-types.yang b/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-types.yang new file mode 100644 index 000000000..d2b3d6aa4 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-openconfig-vlan-types.yang @@ -0,0 +1,60 @@ +module arcos-openconfig-vlan-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/openconfig/vlan-types"; + prefix arc-oc-vlan-types; + + import openconfig-interfaces {prefix oc-if; } + import openconfig-vlan {prefix oc-vlan; } + import openconfig-vlan-types { prefix oc-vlan-types; } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + description + "This module defines types to extend the existing + openconfig vlan types module. + Copyright (c) 2016-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-13 { + description + "Add vlan-stack-action extention for double tag actions"; + } + + + typedef vlan-stack-action-extend { + type enumeration { + enum PUSH { + description + "Push a VLAN onto the VLAN stack."; + } + enum POP { + description + "Pop a VLAN from the VLAN stack."; + } + enum SWAP { + description + "Swap the VLAN at the top of the VLAN stack."; + } + enum PUSH-PUSH { + description + "double push the VLAN ids."; + } + enum POP-POP { + description + "Double pop the tags."; + } + enum PUSH-SWAP { + description + "Push outer swap inner tags"; + } + } + description + "Operations that can be performed on a VLAN stack."; + } +} \ No newline at end of file diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-aggregate.yang b/vendor/arrcus/arcos/v521/arcos-ospf-aggregate.yang new file mode 100644 index 000000000..643cda098 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-aggregate.yang @@ -0,0 +1,111 @@ +submodule arcos-ospf-aggregate { + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import openconfig-routing-policy { prefix oc-rpol; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + import ietf-inet-types { prefix "inet"; } + + description + "This submodule provides OSPF configuration and operational + state parameters that are related to OSPF aggregate redistribute + and summary funcationality."; + + grouping ospf-aggregate-redist-config { + + leaf tag { + type uint32; + description + "value to match with redistributed route tag."; + } + } + + grouping ospf-aggregate-config { + + leaf prefix { + type inet:ip-prefix; + description + "IP network address to aggregate"; + } + + leaf advertise { + type arc-ospf-types:ospf-aggregate-advertisement; + default AGGREGATE_ADVERTISE; + description + "Advertise/Suppress aggregated addresses from advertising"; + } + + leaf import-policy { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:config/oc-rpol:name"; + } + description + "Policy name to filter the contributor routes for generating + the aggregate"; + } + } + + grouping ospf-redistribute-aggregates-structure { + description + "structural grouping for configuration and operational + state parameters relating to OSPF redistribute aggregates"; + + container redistribute-aggregates { + description "Aggregate the redistribute prefixes"; + + list redistribute-aggregate { + key "prefix"; + + description "Aggregate the redistributed routes"; + + leaf prefix { + type leafref { + path "../config/prefix"; + } + description "Network prefix to aggregate"; + } + container config { + uses ospf-aggregate-config; + } + container state { + config false; + uses ospf-aggregate-config; + } + } + } + } + + grouping ospf-summary-aggregates-structure { + description + "structural grouping for configuration and operational + state parameters relating to OSPF summary aggregates"; + + container summary-aggregates { + description "Aggregate the summary prefixes"; + + list summary-aggregate { + key "prefix"; + + description "Aggregate the intra-area routes"; + + leaf prefix { + type leafref { + path "../config/prefix"; + } + description "Network prefix to aggregate"; + } + container config { + uses ospf-aggregate-config; + } + container state { + config false; + uses ospf-aggregate-config; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-area-interface.yang b/vendor/arrcus/arcos/v521/arcos-ospf-area-interface.yang new file mode 100644 index 000000000..a649fc3a5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-area-interface.yang @@ -0,0 +1,389 @@ +submodule arcos-ospf-area-interface { + + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import ietf-yang-types { prefix "yang"; } + import ietf-inet-types { prefix "inet"; } + import openconfig-interfaces { prefix "oc-if"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + + // Include submodules + include arcos-ospf-common; + include arcos-ospf-statistics; + + description + "This submodule provides OSPF configuration and operational + state parameters that are specific to the interface context"; + + grouping ospf-area-interface-config { + description + "Configuration parameters for an OSPF interface"; + + leaf id { + type string; + description + "An operator-specified string utilised to uniquely + reference this interface"; + } + + leaf network-type { + type identityref { + base "arc-ospf-types:OSPF_NETWORK_TYPE"; + } + description + "The type of network that OSPF should use for the specified + interface."; + } + + leaf priority { + type uint8; + description + "The local system's priority to become the designated + router"; + } + + leaf metric { + type arc-ospf-types:ospf-metric; + description + "The metric for the interface"; + } + + leaf passive { + type boolean; + description + "When this leaf is set to true, the interface should be + advertised within the OSPF area but OSPF adjacencies should + not be established over the interface"; + } + } + + grouping ospf-area-interface-state { + description + "Operation state parameters of an OSPF interface"; + + leaf interface-up { + type boolean; + description + "Indicates if this interface is up."; + } + + leaf interface-state { + type identityref { + base "arc-ospf-types:OSPF_INTERFACE_STATE"; + } + description + "The state of the interface."; + } + + leaf local-ip-address { + type inet:ip-address; + description + "The IP address of this interface."; + } + + leaf dr-router-id { + type yang:dotted-quad; + description + "The router-id of the designated router for this interface."; + } + + leaf dr-ip-address { + type inet:ip-address; + description + "The IP address of the designated router for this interface."; + } + + leaf bdr-router-id { + type yang:dotted-quad; + description + "The router-id of the backup designated router for this + interface."; + } + + leaf bdr-ip-address { + type inet:ip-address; + description + "The IP address of the backup designated router for this + interface."; + } + + leaf mtu { + type uint32; + description + "The MTU of the interface."; + } + + leaf speed { + type uint64; + units Mbps; + description + "Interface speed in Mbps."; + } + + leaf neighbor-count { + type uint32; + description + "The number of neighbors under this interface"; + } + + leaf exchange-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + EXCHANGE state"; + } + + leaf loading-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + LOADING state"; + } + + leaf full-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + FULL state"; + } + } + + grouping ospf-area-interface-timers-config { + description + "Configuration parameters relating to per-interface OSPF + timers"; + + leaf dead-interval { + type uint32; + units seconds; + description + "The number of seconds that the local system should let + elapse before declaring a silent router down"; + reference "RFC2328"; + } + + leaf hello-interval { + type uint32; + units seconds; + description + "The number of seconds the local system waits between the + transmission of subsequent Hello packets"; + } + + leaf retransmission-interval { + type uint32; + units seconds; + description + "The number of seconds that the local system waits before + retransmitting an unacknowledged LSA."; + } + + leaf transmission-delay { + type uint32; + units seconds; + default 1; + description + "The estimated number of seconds it takes to transmit a Link State + Update packet over this interface."; + } + } + + grouping ospf-area-interface-neighbor-state { + description + "Operational state parameters relating an individual neighbor + system on an interface within an OSPF area"; + + leaf neighbor-router-id { + type yang:dotted-quad; + description + "The router-id of the neighboring router."; + } + + leaf neighbor-ip-address { + type inet:ip-address; + description + "The IP address of the remote system."; + } + + leaf adjacency-state { + type identityref { + base "arc-ospf-types:OSPF_NEIGHBOR_STATE"; + } + description + "The state of the adjacency with the neighbor."; + } + + leaf optional-capabilities { + type yang:hex-string; + description + "The optional capabilities field received in the Hello + message from the neighbor"; + } + + leaf priority { + type uint8; + description + "The remote system's priority to become the designated router"; + } + } + + grouping ospf-area-interface-neighbor-ext-state { + description + "Additional operational state relating an individual neighbor + system on an interface within an OSPF area"; + + leaf last-established-exstart-timestamp { + type string; + description + "The timestamp of the last transition to EXSTART state."; + } + + leaf last-established-full-timestamp { + type string; + description + "The timestamp of the last transition to FULL state."; + } + + leaf next-dead-timer-expiry-timestamp { + type string; + description + "The future timestamp of the dead timer expiry."; + } + + leaf next-dead-timer-expiry-remaining-time { + type uint32; + description + "The number of seconds left before the dead timer expires."; + } + + leaf last-dead-timer-expiry-timestamp { + type string; + description + "The timestamp of the last time the dead timer expired."; + } + + leaf deletion-remaining-time { + type uint32; + description + "The number of seconds left before a dormant neighbor in + DOWN state is deleted from the system. This field is + applicable when the neighbor is is in DOWN state."; + } + } + + grouping ospf-area-interface-structure { + description + "Structural grouping for configuration and operational state + parameters that relate to an interface"; + + container interfaces { + description + "Enclosing container for a list of interfaces enabled within + this area"; + + list interface { + key "id"; + + description + "List of interfaces which are enabled within this area"; + + leaf id { + type leafref { + path "../config/id"; + } + description + "A pointer to the identifier for the interface."; + } + + uses oc-if:interface-ref; + + container config { + description + "Configuration parameters for the interface on which + OSPF is enabled"; + + uses ospf-area-interface-config; + } + + container state { + config false; + description + "Operational state parameters for the interface on which + OSPF is enabled"; + + uses ospf-area-interface-config; + uses ospf-area-interface-state; + } + + uses ospf-bfd-structure; + + container timers { + description + "Timers relating to OSPF on the interface"; + + container config { + description + "Configuration parameters for OSPF timers on the + interface"; + + uses ospf-area-interface-timers-config; + } + + container state { + config false; + description + "Operational state parameters for OSPF timers on + the interface"; + + uses ospf-area-interface-timers-config; + } + } + + container statistics { + config false; + description + "Interface statistics"; + + uses ospf-pkt-statistics-structure; + uses ospf-interface-lsa-statistics-structure; + } + + container neighbors { + config false; + + description + "Enclosing container for the list of neighbors that + an adjacency has been established with on the interface"; + + list neighbor { + key "neighbor-router-id"; + + description + "A neighbor with which an OSPF adjacency has been + established within this area"; + + leaf neighbor-router-id { + type leafref { + path "../state/neighbor-router-id"; + } + description + "Reference to the router ID of the adjacent system"; + } + + container state { + description + "Operational state parameters relating to the adjacent system"; + + uses ospf-area-interface-neighbor-state; + uses ospf-area-interface-neighbor-ext-state; + } + } + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-area.yang b/vendor/arrcus/arcos/v521/arcos-ospf-area.yang new file mode 100644 index 000000000..462b489b7 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-area.yang @@ -0,0 +1,181 @@ +submodule arcos-ospf-area { + + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import arcos-ospf-types { prefix "arc-ospf-types"; } + + // Include submodules + include arcos-ospf-statistics; + include arcos-ospf-spf; + include arcos-ospf-area-interface; + include arcos-ospf-aggregate; + + description + "This submodule provides OSPF configuration and operational + state parameters that are specific to the area context"; + + grouping ospf-area-config { + description + "Configuration parameters relating to an OSPF area"; + + leaf identifier { + type arc-ospf-types:ospf-area-identifier; + description + "An identifier for the OSPF area - described as either a + 32-bit unsigned integer, or a dotted-quad"; + } + + leaf area-type { + type arc-ospf-types:ospf-area-type; + description + "Type of area."; + } + + leaf advertise-summary-lsas { + type boolean; + description + "Indicates if Summary LSAs can be advertised into this area."; + } + + leaf stub-default-cost { + type uint32; + description + "The metric to be used when advertising default route to + the Stub area."; + } + } + + grouping ospf-area-state { + description + "Information relating to an OSPF area"; + + leaf configured-interface-count { + type uint32; + description + "Total number of interfaces configured in this area."; + } + + leaf up-interface-count { + type uint32; + description + "Total number of interfaces that are UP in this area."; + } + + leaf neighbor-count { + type uint32; + description + "The number of neighbors under this interface"; + } + + leaf exchange-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + EXCHANGE state"; + } + + leaf loading-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + LOADING state"; + } + + leaf full-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + FULL state"; + } + } + + grouping ospf-area-structure { + description + "Structural grouping for configuration and operational state + parameters that relate to an individual area"; + + container config { + description + "Configuration parameters relating to an OSPF area"; + + uses ospf-area-config; + } + + container state { + config false; + description + "Operational state parameters relating to an OSPF area"; + + uses ospf-area-config; + uses ospf-area-state; + } + + container spf { + description + "This container defines area SPF configuration, state, + statistics and logging."; + + container state { + config false; + description + "Operational state of area level SPF computation"; + + uses ospf-spf-state; + } + + container last-spf-computation { + config false; + description + "Operational state of the most recent SPF computation"; + + uses ospf-spf-comp-state; + } + } + + container statistics { + config false; + description + "Area statistics"; + + uses ospf-pkt-statistics-structure; + uses ospf-area-lsa-statistics-structure; + uses ospf-comp-spf-statistics-structure; + } + + uses ospf-summary-aggregates-structure; + uses ospf-area-interface-structure; + } + + grouping ospf-areas-structure { + description + "Structural grouping for configuration and operational state + parameters that relate to OSPF areas"; + + container areas { + description + "Configuration and operational state relating to an + OSPF area."; + + list area { + key "identifier"; + + description + "The OSPF areas within which the local system exists"; + + leaf identifier { + type leafref { + path "../config/identifier"; + } + description + "A reference to the identifier for the area."; + } + + uses ospf-area-structure; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-as.yang b/vendor/arrcus/arcos/v521/arcos-ospf-as.yang new file mode 100644 index 000000000..db3de223b --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-as.yang @@ -0,0 +1,61 @@ +submodule arcos-ospf-as { + + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import ietf-yang-types { prefix "yang"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + + // Include submodules + include arcos-ospf-common; + include arcos-ospf-statistics; + include arcos-ospf-spf; + + description + "This submodule provides OSPF configuration and operational + state parameters that have Autonomous System scope"; + + grouping ospf-as-scope-structure { + description + "Top level structural grouping for OSPF AS scope parameters"; + + container as-scope { + description + "Configuration and operational state parameters for settings + that are AS scope in the OSPF instance"; + + container spf { + description + "This container defines AS scope SPF state."; + + container state { + config false; + description + "Operational state of AS scope SPF computation"; + + uses ospf-spf-state; + } + + container last-spf-computation { + config false; + description + "Operational state of the most recent AS scope SPF computation"; + + uses ospf-spf-comp-state; + } + } + + container statistics { + config false; + description + "AS scope statistics"; + + uses ospf-as-scope-lsa-statistics-structure; + uses ospf-comp-spf-statistics-structure; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-common.yang b/vendor/arrcus/arcos/v521/arcos-ospf-common.yang new file mode 100644 index 000000000..b271b6eb7 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-common.yang @@ -0,0 +1,725 @@ +submodule arcos-ospf-common { + + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import ietf-yang-types { prefix "yang"; } + import openconfig-types { prefix "oc-types"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + import arcos-system-types { prefix arc-sys-types; } + + description + "This submodule provides OSPF configuration and operational + state parameters that are common under one or more contexts."; + + + /* + * OSPF generic LSA key + */ + grouping ospf-lsa-key-info { + description + "This grouping defines OSPF LSA key state from LSA header."; + + leaf lsa-type { + type identityref { + base "arc-ospf-types:OSPF_LSA_TYPE"; + } + description + "The type of LSA being described."; + } + + leaf link-state-id { + type yang:dotted-quad; + description + "The Link State ID for the specified LSA type. The exact + defined value of the Link State ID is dependent on the LSA + type."; + } + + leaf advertising-router { + type yang:dotted-quad; + description + "The router ID of the router that originated the LSA"; + } + } + + /* + * OSPF generic LSA instance + */ + grouping ospf-lsa-instance-info { + description + "This grouping defines OSPF LSA instance information."; + + uses ospf-lsa-key-info; + + leaf age { + type uint16; + units seconds; + description + "The time since the LSA's generation in seconds"; + } + + leaf options { + type uint8; + description + "The options field of the LSA; valid only for OSPFv2."; + } + + leaf sequence-number { + type int32; + description + "A signed 32-bit integer used to detect old and duplicate + LSAs. The greater the sequence number the more recent the + LSA."; + } + + leaf checksum { + type uint16; + description + "The checksum of the complete contents of the LSA excluding + the age field."; + } + + leaf length { + type uint16; + description + "The length of the LSA."; + } + } + + + /* + * OSPF Authentication + */ + grouping ospf-auth-config { + description + "This grouping describes OSPF authentication configuration."; + + leaf auth-type { + type identityref { + base "arc-ospf-types:OSPF_AUTH_TYPE"; + } + description + "The type of OSPF authentication configured."; + } + } + + grouping ospf-auth-state { + description + "This grouping describes OSPF authentication state."; + + leaf active-auth-type { + type identityref { + base "arc-ospf-types:OSPF_AUTH_TYPE"; + } + description + "The type of OSPF authentication in use."; + } + } + + grouping ospf-crypto-key-config { + description + "This grouping describes OSPF cryptographic key configuration."; + + leaf key-id { + type uint32; + description + "The Key ID of the cryptographic key."; + } + + leaf algorithm { + type identityref { + base "arc-ospf-types:OSPF_CRYPTO_ALGO"; + } + description + "The type of cryptographic algorithm."; + } + + leaf key-string { + type arc-sys-types:encrypted-string; + description + "The key string used to generate the crpytographic digest."; + } + } + + grouping ospf-crypto-key-state { + description + "This grouping describes OSPF cryptographic key state."; + + leaf is-valid { + type boolean; + description + "Indicates if the cryptographic key config is complete and valid."; + } + } + + grouping ospf-auth-structure { + description + "This grouping describes OSPF authentication information."; + + container authentication { + description + "This container defines OSPF authentication information."; + + container config { + description + "This container describes OSPF authentication configuration."; + + uses ospf-auth-config; + } + + container state { + config false; + description + "This container describes OSPF authentication state."; + + uses ospf-auth-config; + uses ospf-auth-state; + } + + container crypto-key { + description + "This container describes a cryptographic key."; + + container config { + description + "This container defines cryptographic key configuration."; + + uses ospf-crypto-key-config; + } + + container state { + config false; + description + "This container defines cryptographic key state."; + + uses ospf-crypto-key-config; + uses ospf-crypto-key-state; + } + } + } + } + + /* + * OSPF BFD + */ + grouping ospf-bfd-config { + description + "This grouping defines Bidirectionl-Forwarding-Detection + configuration."; + + leaf enabled { + type boolean; + description + "When set to true, BFD session will be created for OSPF neighbors. + By default, BFD sesson is only created for neighbor in FULL state."; + } + + reference "RFC5880: Bidirectional Forwarding Detection (BFD)."; + } + + grouping ospf-bfd-structure { + description + "This grouping defines interface BFD information."; + + container bfd { + description + "This container defines interface BFD information."; + + container config { + description + "This container defines BFD configuration parameters."; + + uses ospf-bfd-config; + } + + container state { + config false; + description + "This container defines BFD state information."; + + uses ospf-bfd-config; + } + } + } + + /* + * OSPF Auto-cost + */ + grouping ospf-auto-cost-config { + leaf enabled { + type boolean; + default true; + description + "Enable the calculation of metric based on interface bandwidth"; + } + + leaf reference-bandwidth { + type uint64 { + range "1 .. max"; + } + default 3200; + description + "Specifiy bandwidth in Gbps"; + } + } + + /* + * OSPF Maintenance + */ + grouping ospf-maint-router-lsa-config { + description + "This grouping defines maintenance mode Router LSA configuration."; + + leaf metric { + type uint16; + default 65535; + description + "The metric to be advertised in the LSA"; + } + + leaf set-link-metric { + type boolean; + description + "Indicates if the configured (or default) metric should be + advertised for non-stub links in the Router LSAs"; + } + + leaf set-stub-metric { + type boolean; + description + "Indicates if the configured (or default) metric should be + advertised for stub networks in the Router LSAs or + Intra-Area-Prefix LSAs"; + } + } + + grouping ospf-maint-summary-lsa-config { + description + "This grouping defines maintenance mode Summary LSAs configuration."; + + leaf metric { + type uint32; + default 16711680; + description + "The metric to be advertised in the LSA"; + } + + leaf set-metric { + type boolean; + description + "Indicates if the configured (or default) metric should be + advertised in the Summary LSAs"; + } + } + + grouping ospf-maint-external-lsa-config { + description + "This grouping defines maintenance mode External LSA configuration."; + + leaf metric { + type uint32; + default 16711680; + description + "The metric to be advertised in the LSA"; + } + + leaf set-metric { + type boolean; + description + "Indicates if the configured (or default) metric should be + advertised in the External LSAs"; + } + } + + grouping ospf-maint-trigger-config { + description + "This grouping defines maintenance mode trigger configuration."; + + leaf always { + type boolean; + description + "Router is always in maintenance mode"; + } + } + + grouping ospf-maint-structure { + description + "This grouping defines OSPF maintenance mode."; + + container router-lsa { + description + "This defines maintenance mode Router LSA config and state."; + + container config { + description + "This defines maintenance mode Router LSA config parameters."; + + uses ospf-maint-router-lsa-config; + } + + container state { + config false; + description + "This defines maintenance mode Router LSA state parameters."; + + uses ospf-maint-router-lsa-config; + } + } + + container summary-lsa { + description + "This defines maintenance mode Summary LSA config and state."; + + container config { + description + "This defines maintenance mode Summary LSA config parameters."; + + uses ospf-maint-summary-lsa-config; + } + + container state { + config false; + description + "This defines maintenance mode Summary LSA state parameters."; + + uses ospf-maint-summary-lsa-config; + } + } + + container external-lsa { + description + "This defines maintenance mode External LSA config and state."; + + container config { + description + "This defines maintenance mode External LSA config parameters."; + + uses ospf-maint-external-lsa-config; + } + + container state { + config false; + description + "This defines maintenance mode External LSA state parameters."; + + uses ospf-maint-external-lsa-config; + } + } + + container trigger { + description + "This defines maintenance mode triggers config and state."; + + container config { + description + "This defines maintenance mode triggers config parameters."; + + uses ospf-maint-trigger-config; + } + + container state { + config false; + description + "This defines maintenance mode triggers state parameters."; + + uses ospf-maint-trigger-config; + } + } + + container state { + config false; + description + "This defines maintenance mode state."; + + leaf in-maintenance { + type boolean; + description + "Indicates if OSPF is currently in maintenance mode"; + } + + leaf entry-trigger { + type arc-ospf-types:ospf-maintenance-trigger-type; + description + "The current trigger for maintenance-mode entry."; + } + + leaf entry-timestamp { + type string; + description + "The timestamp of the current entry into maintenance mode."; + } + + leaf previous-entry-trigger { + type arc-ospf-types:ospf-maintenance-trigger-type; + description + "The most recent trigger for maintenance-mode entry."; + } + + leaf previous-entry-timestamp { + type string; + description + "The timestamp of the most recent entry into maintenance mode."; + } + + leaf previous-exit-timestamp { + type string; + description + "The timestamp of the most recent exit from maintenance mode."; + } + } + } + + /* + * Max-LSA + */ + grouping ospf-max-lsa-config { + description + "This grouping defines Max-LSA configuration."; + + leaf lsa-limit { + type uint32; + description + "Maximum number of remote LSAs allowed"; + } + + leaf warning-threshold { + type uint8; + description + "Percentage threshold of lsa-limit at which to emit a warning"; + } + + leaf warning-only { + type boolean; + description + "Indicates if lsa-limit should result in a warning only"; + } + + leaf avoid-down-state { + type boolean; + description + "Indicates if DOWN state should be avoided"; + } + + leaf limit-monitor-time { + type uint32; + units seconds; + description + "Duration for monitoring the lsa-limit before moving from LIMIT to DOWN state"; + } + + leaf down-recovery-time { + type uint32; + description + "Duration for waiting before recovering from DOWN state"; + } + } + + grouping ospf-max-lsa-state { + description + "This grouping defines Max-LSA state."; + + leaf enabled { + type boolean; + description + "Indicates if lsa-limit has been enabled"; + } + + leaf sm-state { + type arc-ospf-types:ospf-max-lsa-sm-state-type; + description + "The Max-LSA state-machine state"; + } + + leaf remote-lsas { + type uint32; + description + "Total number of remote LSAs in this OSPF instance"; + } + + leaf remote-lsas-ignored-limit { + type uint64; + description + "Total number of remote LSA creations that were ignored + due to reaching lsa-limit"; + } + + leaf normal-state-count { + type uint64; + description + "Number of times the NORMAL state was entered"; + } + + leaf last-normal-state-timestamp { + type string; + description + "The timestamp of the most recent entry into NORMAL state"; + } + + leaf limit-state-count { + type uint64; + description + "Number of times the LIMIT state was entered"; + } + + leaf last-limit-state-timestamp { + type string; + description + "The timestamp of the most recent entry into LIMIT state"; + } + + leaf down-state-count { + type uint64; + description + "Number of times the DOWN state was entered"; + } + + leaf last-down-state-timestamp { + type string; + description + "The timestamp of the most recent entry into DOWN state"; + } + + leaf monitor-timer-next-expiry-timestamp { + type string; + description + "The future timestamp of the limit-monitor timer expiry."; + } + + leaf monitor-timer-next-expiry-remaining-time { + type uint32; + description + "The number of seconds left before the limit-monitor timer expires."; + } + + leaf recovery-timer-next-expiry-timestamp { + type string; + description + "The future timestamp of the down-recovery timer expiry."; + } + + leaf recovery-timer-next-expiry-remaining-time { + type uint32; + description + "The number of seconds left before the down-recovery timer expires."; + } + } + + grouping ospf-max-lsa-structure { + description + "This grouping defines OSPF Max-LSA."; + + container config { + description + "This defines Max-LSA config parameters."; + + uses ospf-max-lsa-config; + } + + container state { + config false; + description + "This defines Max-LSA state parameters."; + + uses ospf-max-lsa-config; + uses ospf-max-lsa-state; + } + } + + + /* + * OSPF SNMP Config + */ + grouping ospf-snmp-send-trap-config { + description + "This grouping defines OSPF SNMP trap generation configuration."; + + leaf if-state-change { + type boolean; + description + "Indicates if IfStateChange trap can be generated"; + } + + leaf nbr-state-change { + type boolean; + description + "Indicates if NbrStateChange trap can be generated"; + } + + leaf if-config-error { + type boolean; + description + "Indicates if IfConfigError trap can be generated"; + } + + leaf if-auth-failure { + type boolean; + description + "Indicates if IfAuthFailure trap can be generated"; + } + + leaf if-rx-bad-packet { + type boolean; + description + "Indicates if IfRxBadPacket trap can be generated"; + } + + leaf tx-retransmit { + type boolean; + description + "Indicates if TxRetransmit trap can be generated"; + } + + leaf originate-lsa { + type boolean; + description + "Indicates if OriginateLsa trap can be generated"; + } + + leaf max-age-lsa { + type boolean; + description + "Indicates if MaxAgeLsa trap can be generated"; + } + + leaf lsdb-approaching-overflow { + type boolean; + description + "Indicates if LsdbApproachingOverflow trap can be generated"; + } + + leaf lsdb-overflow { + type boolean; + description + "Indicates if LsdbOverflow trap can be generated"; + } + } + + grouping ospf-snmp-structure { + description + "This grouping defines OSPF SNMP config and information."; + + container send-trap { + description + "This defines OSPF SNMP trap generation config and state."; + + container config { + description + "This defines OSPF SNMP trap generation config parameters."; + + uses ospf-snmp-send-trap-config; + } + + container state { + config false; + description + "This OSPF SNMP trap generation state parameters."; + + uses ospf-snmp-send-trap-config; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-debug.yang b/vendor/arrcus/arcos/v521/arcos-ospf-debug.yang new file mode 100644 index 000000000..dbc3978de --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-debug.yang @@ -0,0 +1,108 @@ +/** + * Filename: arcos-ospf-debug.yang + * + * Description: + * YANG data-model for OSPF Debug Action + * + * Copyright 2020 by Arrcus, Inc. + * All rights reserved. + */ + +module arcos-ospf-debug { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/ospf/debug"; + + prefix arc-ospf-dbg; + + import ietf-inet-types { prefix oc-inet; } + import openconfig-types { prefix "oc-types"; } + import tailf-common { prefix tailf; } + import openconfig-yang-types { prefix oc-yang; } + import openconfig-policy-types { prefix oc-pol-types; } + import arcos-debug { prefix arc-dbg; } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + + description + "This module defines debug statements for Arrcus + implemention of OSPF."; + + revision 2018-06-07 { + description + "Initial Revision + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + /* + * The top-level container for OSPFv2 debug. + */ + grouping ospfv2-debug-top { + container ospfv2 { + description + "This container defines instance-specific OSPFv2 debug information."; + config false; + + uses arc-dbg:debug-component-top; + } + } + + /* + * The top-level container for OSPFv3 debug. + */ + grouping ospfv3-debug-top { + container ospfv3 { + description + "This container defines instance-specific OSPFv3 debug information."; + config false; + + uses arc-dbg:debug-component-top; + } + } + + /* + * Add OSPFv2 debug items. + */ + augment "/arc-dbg:debug/arc-dbg:network-instances/arc-dbg:network-instance" + + "/arc-dbg:protocols/arc-dbg:protocol" { + + uses arc-ospf-dbg:ospfv2-debug-top { + when "arc-dbg:identifier = 'oc-pol-types:OSPF'" { + description + "Include OSPFv2 debug information when the protocol is of type OSPF"; + } + description + "Debug information related to a specific instance of OSPFv2"; + } + } + + /* + * Add OSPFv3 debug items. + */ + augment "/arc-dbg:debug/arc-dbg:network-instances/arc-dbg:network-instance" + + "/arc-dbg:protocols/arc-dbg:protocol" { + + uses arc-ospf-dbg:ospfv3-debug-top { + when "arc-dbg:identifier = 'oc-pol-types:OSPF3'" { + description + "Include OSPFv3 debug information when the protocol is of type OSPF3"; + } + description + "Debug information related to a specific instance of OSPFv3"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-ext-types.yang b/vendor/arrcus/arcos/v521/arcos-ospf-ext-types.yang new file mode 100644 index 000000000..9b35ab701 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-ext-types.yang @@ -0,0 +1,471 @@ +module arcos-ospf-ext-types { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/ospf/ext-types"; + + prefix "arc-ospf-ext-types"; + + import openconfig-extensions { prefix "oc-ext"; } + + description + "Type definitions for OSPF"; + + // OpenConfig specific extensions for module metadata. + oc-ext:regexp-posix; + + + identity OSPF_OPAQUE_LSA_TYPE { + description + "This identity is the base used for opaque LSA types. The values + that extend this base are those that are described in the IANA + OSPF Opaque Link-State Advertisements (LSA) Option Types registry"; + } + + identity TRAFFIC_ENGINEERING { + base "OSPF_OPAQUE_LSA_TYPE"; + description + "The Traffic Engineering LSA. This type is used only with area-scope + Opaque LSAs - and is used to describe routers, point-to-point links + and connections to multi-access networks for traffic engineering + purposes."; + reference "RFC3630"; + } + + identity GRACE_LSA { + base "OSPF_OPAQUE_LSA_TYPE"; + description + "Grace LSAs are announced by a system undergoing graceful-restart. + A system that is attempting an OSPF graceful restart announces + Grace-LSAs with a specified grace period, indicating the intention + to have completed an restart within the specified period."; + reference "RFC3623"; + } + + identity ROUTER_INFORMATION { + base "OSPF_OPAQUE_LSA_TYPE"; + description + "The Router Information LSA is used by an OSPFv2 system to announce + optional capabilities of the local system, over and above those that + are included within the OSPF hello message field. The flooding scope + of the LSA can be link-, area-, or AS-wide (i.e., the LSA type can + be 9, 10 or 11)."; + reference "RFC7770"; + } + + identity OSPFV2_EXTENDED_PREFIX { + base "OSPF_OPAQUE_LSA_TYPE"; + description + "The Extended Prefix LSA is used in OSPFv2 to carry a set of attributes + that are to be associated with a prefix that is advertised in OSPF. The + attributes are carried as one or more TLV tuples. The flooding scope + of the LSA can be link-, area-, or AS-wide as specified by the + advertising system. The flooding scope of the LSA may exceed the scope + of the corresponding prefix."; + reference "RFC7684"; + } + + identity OSPFV2_EXTENDED_LINK { + base "OSPF_OPAQUE_LSA_TYPE"; + description + "The Extended Link LSA is used in OSPFv2 to carry a set of attributes + that are to be associated with a link that is advertised in OSPF. The + link attributes are carried as one or more TLV tuples. The flooding + scope of the link LSA is area-local - i.e., it is carried in a Type 10 + opaque LSA."; + reference "RFC7684"; + } + + identity OSPF_TE_LSA_TLV_TYPE { + description + "This identity is the base used for the type field of TLVs that are + included within the Traffic Engineering Opaque LSA."; + } + + identity TE_ROUTER_ADDRESS { + base "OSPF_TE_LSA_TLV_TYPE"; + description + "A stable IP address of the advertising router that is always reachable + if the node has connectivity."; + } + + identity TE_LINK { + base "OSPF_TE_LSA_TLV_TYPE"; + description + "A single link within a traffic engineering topology. A set of sub-TLVs + are carried within this attribute to indicate traffic engineering + characteristics of the link."; + } + + identity TE_ROUTER_IPV6_ADDRESS { + base "OSPF_TE_LSA_TLV_TYPE"; + description + "A stable IPv6 address of the advertising router that is always + reachable if the node has connectivity. This TLV is used only with + OSPFv3"; + reference "RFC5329"; + } + + identity TE_LINK_LOCAL { + base "OSPF_TE_LSA_TLV_TYPE"; + description + "Attributes associated with the local link by the system."; + reference "RFC4203"; + } + + identity TE_NODE_ATTRIBUTE { + base "OSPF_TE_LSA_TLV_TYPE"; + description + "Attributes associted with the local system"; + reference "RFC5786"; + } + + identity TE_OPTICAL_NODE_PROPERTY { + base "OSPF_TE_LSA_TLV_TYPE"; + description + "Attributes associated with the local optical node. A set of sub-TLVs + are carried within this TLV which are used within the GMPLS control + plane when using OSPF"; + } + + identity OSPF_TE_LINK_TLV_TYPE { + description + "This identity is the based used for the type field for sub-TLVs of the + Link TLV of the OSPF Traffic Engineering Opaque LSA"; + } + + identity TE_LINK_TYPE { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE Link Type sub-TLV appears exactly once per OSPF-TE Link + and describes the type of the link"; + } + + identity TE_LINK_ID { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE Link ID sub-TLV appears exactly once per OSPF-TE link and + identifies the remote end of the link."; + } + + identity TE_LINK_LOCAL_IP { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE Local IP specifies a list of the interface addresses of the + local system corresponding to the traffic engineering link."; + } + + identity TE_LINK_REMOTE_IP { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE Remote IP specifies a list of IP addresses of the remote + neighbors associated with the traffic engineering link."; + } + + identity TE_LINK_METRIC { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE Metric specifies the link metric for traffic engineering + purposes"; + } + + identity TE_LINK_MAXIMUM_BANDWIDTH { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE Maximum Bandwidth specifies the maximum bandwidth of the + link that it is associated with."; + } + + identity TE_LINK_MAXIMUM_RESERVABLE_BANDWIDTH { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE Maximum Reservable Bandwidth specifies the maximum + bandwidth that may be reserved on the link in bytes per second"; + } + + identity TE_LINK_UNRESERVED_BANDWIDTH { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE unreserved bandwidth indicates the amount of bandwidth + at each priority level that is currently not reserved"; + } + + identity TE_LINK_ADMIN_GROUP { + base "OSPF_TE_LINK_TLV_TYPE"; + description + "The OSPF-TE administrative group indicates the administrative group + that the is assigned to the interface"; + } + + identity TE_NODE_ATTRIBUTE_TLV_TYPE { + description + "This identity forms the base for sub-TLVs of the Node Attribute TLV + of the Traffic Engineering LSA"; + } + + identity NODE_IPV4_LOCAL_ADDRESS { + base "TE_NODE_ATTRIBUTE_TLV_TYPE"; + description + "The Node Attribute Sub-TLV contains a list of the IPv4 addresses of + the local system"; + } + + identity NODE_IPV6_LOCAL_ADDRESS { + base "TE_NODE_ATTRIBUTE_TLV_TYPE"; + description + "The Node Attribute Sub-TLV contains a list of the IPv6 addresses of + the local system"; + } + + identity GRACE_LSA_TLV_TYPES { + description + "This identity is used as the base for TLVs within the Grace LSA"; + } + + identity GRACE_PERIOD { + base "GRACE_LSA_TLV_TYPES"; + description + "This sub-TLV describes the period for which adjacencies should be + maintained with the restarting system"; + } + + identity GRACE_RESTART_REASON { + base "GRACE_LSA_TLV_TYPES"; + description + "This sub-TLV describes the reason for the OSPF restart of the system + that is restarting"; + } + + identity GRACE_IP_INTERFACE_ADDRESS { + base "GRACE_LSA_TLV_TYPES"; + description + "This sub-TLV specifies the restarting system's IP address on the + interface via which it is advertising the Grace LSA"; + } + + identity RI_LSA_TLV_TYPES { + description + "This identity is used as the base for the TLVs within the Router + Information LSA"; + reference "RFC7770"; + } + + identity RI_INFORMATIONAL_CAPABILITIES { + base "RI_LSA_TLV_TYPES"; + description + "Informational capabilities of the advertising system"; + reference "RFC7770"; + } + + identity RI_FUNCTIONAL_CAPABILITIES { + base "RI_LSA_TLV_TYPES"; + description + "Functional capabilities of the advertising system"; + reference "RFC7770"; + } + + identity RI_NODE_ADMIN_TAG { + base "RI_LSA_TLV_TYPES"; + description + "Operator-defined administrative tags associated with the advertising + system"; + reference "RFC7777"; + } + + identity RI_SR_SID_LABEL_RANGE { + base "RI_LSA_TLV_TYPES"; + description + "SID or Label ranges for use with segment routing when forwarding to + the advertising system"; + reference "draft-ietf-ospf-segment-routing-extensions"; + } + + identity RI_SR_ALGORITHM { + base "RI_LSA_TLV_TYPES"; + description + "The algorithms that are supported for segment routing by the + advertising system"; + reference "draft-ietf-ospf-segment-routing-extensions"; + } + + // will be shared with IS-IS + identity SR_ALGORITHM { + description + "This identity is used as a base for the algorithms that can be + supported for segment routing and are advertised by a system in the RI + LSA"; + } + + identity SPF { + base "SR_ALGORITHM"; + description + "The standard shortest path algorithm based on link metric, + as used by the OSPF protocol"; + } + + identity STRICT_SPF { + base "SR_ALGORITHM"; + description + "The standard shortest path algorithm based on link metric, with the + requirement that all nodes along the path honor the SPF decision. That + is to say that the SPF decision cannot be altered by local policy at + the node"; + } + + identity OSPF_RI_SR_SID_LABEL_TLV_TYPES { + description + "This identity is used as a base for the sub-TLVs of the Segment + Routing SID/Label Range TLV"; + } + + identity SR_SID_LABEL_TLV { + base "OSPF_RI_SR_SID_LABEL_TLV_TYPES"; + description + "A range of SID/Label values used by the local system"; + reference "draft-ietf-ospf-segment-routing-extensions"; + } + + identity OSPFV2_ROUTER_LINK_TYPE { + description + "OSPFv2 Router Link Types as per the IANA registry defined in + RFC2740"; + } + + identity POINT_TO_POINT_LINK { + base "OSPFV2_ROUTER_LINK_TYPE"; + description + "The link is a point-to-point connection to another router"; + } + + identity TRANSIT_NETWORK_LINK { + base "OSPFV2_ROUTER_LINK_TYPE"; + description + "The link is a connection to a transit network"; + } + + identity STUB_NETWORK_LINK { + base "OSPFV2_ROUTER_LINK_TYPE"; + description + "The link is a connection to a stub network"; + } + + identity VIRTUAL_LINK { + base "OSPFV2_ROUTER_LINK_TYPE"; + description + "The link is a virtual connection to another router"; + } + + identity OSPFV2_EXTENDED_PREFIX_SUBTLV_TYPE { + description + "Sub-TLVs of the OSPFv2 Extended Prefix LSA as defined by + RFC7684"; + } + + identity EXTENDED_PREFIX_RANGE { + base "OSPFV2_EXTENDED_PREFIX_SUBTLV_TYPE"; + description + "The attributes being described relate to a range of prefixes"; + } + + identity PREFIX_SID { + base "OSPFV2_EXTENDED_PREFIX_SUBTLV_TYPE"; + description + "The TLV describes a Segment Routing Prefix Segment Identifier + associated with a prefix"; + } + + identity SID_LABEL_BINDING { + base "OSPFV2_EXTENDED_PREFIX_SUBTLV_TYPE"; + description + "The TLV describes a binding of a SID to a path to the prefix, + which may have associated path characteristics"; + } + + identity OSPFV2_EXTENDED_PREFIX_SID_LABEL_BINDING_SUBTLV_TYPE { + description + "Sub-TLV types carried in the SID/Label Binding Sub-TLV of + the Extended Prefix Sub-TLV"; + } + + identity SID_MPLS_LABEL_BINDING { + base "OSPFV2_EXTENDED_PREFIX_SID_LABEL_BINDING_SUBTLV_TYPE"; + description + "This sub-TLV indicates a binding between an SR SID and an + MPLS label and must be present in the sub-TLV"; + } + + identity ERO_METRIC { + base "OSPFV2_EXTENDED_PREFIX_SID_LABEL_BINDING_SUBTLV_TYPE"; + description + "This sub-TLV indicates the cost of the ERO path being + advertised in the SID/Label TLV"; + } + + identity ERO_PATH { + base "OSPFV2_EXTENDED_PREFIX_SID_LABEL_BINDING_SUBTLV_TYPE"; + description + "This sub-TLV indicates the path associated with an ERO + being advertised in the SID/Label TLV"; + } + + identity OSPFV2_EXTPREFIX_BINDING_ERO_PATH_SEGMENT_TYPE { + description + "The types of segment included within an ERO Path described + within the SID/Label binding sub-TLV"; + } + + identity IPV4_SEGMENT { + base "OSPFV2_EXTPREFIX_BINDING_ERO_PATH_SEGMENT_TYPE"; + description + "The segment is specified as an IPv4 address"; + } + + identity UNNUMBERED_INTERFACE_SEGMENT { + base "OSPFV2_EXTPREFIX_BINDING_ERO_PATH_SEGMENT_TYPE"; + description + "The segment is specified as an unnumbered interface of + a remote system"; + } + + identity OSPFV2_EXTENDED_LINK_SUBTLV_TYPE { + description + "Sub-TLVs of the Extended Link TLV for OSPFv2"; + } + + identity ADJACENCY_SID { + base "OSPFV2_EXTENDED_LINK_SUBTLV_TYPE"; + description + "The extended link sub-TLV indicates an Adjacency SID"; + } + + identity MAX_METRIC_TRIGGER { + description + "Triggers which cause the maximum metric to be set for + entities advertised in OSPF"; + } + + identity MAX_METRIC_ON_SYSTEM_BOOT { + base "MAX_METRIC_TRIGGER"; + description + "Set the maximum metric when the system boots."; + } + + identity MAX_METRIC_INCLUDE { + description + "Entities that may optionally be included when advertising + the maximum metric."; + } + + identity MAX_METRIC_INCLUDE_STUB { + base "MAX_METRIC_INCLUDE"; + description + "Include stub networks when advertising the maximum metric."; + } + + identity MAX_METRIC_INCLUDE_TYPE2_EXTERNAL { + base "MAX_METRIC_INCLUDE"; + description + "Include OSPF Type 2 external routes when advertising + the maximum metric."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-global.yang b/vendor/arrcus/arcos/v521/arcos-ospf-global.yang new file mode 100644 index 000000000..9baa3170e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-global.yang @@ -0,0 +1,249 @@ +submodule arcos-ospf-global { + + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import ietf-yang-types { prefix "yang"; } + import openconfig-network-instance { prefix "oc-netinst"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + import openconfig-policy-types { prefix "oc-pol-types"; } + + // Include submodules + include arcos-ospf-common; + include arcos-ospf-statistics; + include arcos-ospf-spf; + include arcos-ospf-rib; + include arcos-ospf-aggregate; + + description + "This submodule provides OSPF configuration and operational + state parameters that are global to a particular OSPF instance"; + + grouping ospf-global-config { + description + "Global configuration for OSPF"; + + leaf router-id { + type yang:dotted-quad; + description + "A 32-bit number represented as a dotted quad assigned to + each router running the OSPF protocol. This number should + be unique within the autonomous system"; + reference "rfc2828"; + } + + leaf log-adjacency-changes { + type arc-ospf-types:ospf-log-adj-changes-type; + description + "Specify whether and how often syslogs are generated when + an OSPF neighbor changes its state."; + } + } + + grouping ospf-global-state { + description + "Global information for OSPF"; + + leaf vrf-id { + type uint32; + description + "L3VRF ID of this network-instance."; + } + + leaf abr-router { + type boolean; + description + "Indicates that this router is an ABR."; + } + + leaf asbr-router { + type boolean; + description + "Indicates that this router is an ASBR."; + } + + leaf area-count { + type uint32; + description + "Total number of areas configured."; + } + + leaf stub-area-count { + type uint32; + description + "Total number of stub areas configured."; + } + + leaf configured-interface-count { + type uint32; + description + "Total number of interfaces configured."; + } + + leaf up-interface-count { + type uint32; + description + "Total number of interfaces that are UP."; + } + + leaf neighbor-count { + type uint32; + description + "The number of neighbors under this interface"; + } + + leaf exchange-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + EXCHANGE state"; + } + + leaf loading-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + LOADING state"; + } + + leaf full-neighbor-count { + type uint32; + description + "The number of neighbors under this interface that are in + FULL state"; + } + } + + grouping ospf-global-structure { + description + "Top level structural grouping for OSPF global parameters"; + + container global { + description + "Configuration and operational state parameters for settings + that are global to the OSPF instance"; + + container config { + description + "Global configuration parameters for OSPF"; + + uses ospf-global-config; + } + + container state { + config false; + description + "Operational state parameters for OSPF"; + + uses ospf-global-config; + uses ospf-global-state; + } + + /* + * OSPF Maintenance mode + */ + container maintenance-mode { + description + "This container defines global maintenance mode + configuration and state."; + + uses ospf-maint-structure; + } + + /* + * OSPF Max-LSA + */ + container max-lsa { + description + "This container defines global Max-LSA configuration and state."; + + uses ospf-max-lsa-structure; + } + + /* + * OSPF SPF + */ + container spf { + description + "This container defines global SPF + configuration, state, statistics and logging."; + + uses ospf-spf-throttle-structure; + uses ospf-spf-logging-structure; + } + + /* + * OSPF RIB + */ + container rib { + description + "This container defines OSPF RIB."; + + uses ospf-nexthop-sets-structure; + uses ospf-prefixes-structure; + uses ospf-redistributed-prefixes-structure; + uses ospf-asbrs-structure; + } + + /* + * OSPF auto-cost reference-bandwidth + */ + container auto-cost { + description + "Enables the auto-cost of metric calculation for interfaces."; + container config { + uses ospf-auto-cost-config; + } + container state { + config false; + uses ospf-auto-cost-config; + } + } + + /* + * OSPF Redistribute Aggregates + */ + uses ospf-redistribute-aggregates-structure; + + /* + * OSPF Statistics + */ + container statistics { + config false; + description + "This container defines global statistics."; + + uses ospf-pkt-statistics-structure; + uses ospf-global-lsa-statistics-structure; + uses ospf-global-spf-statistics-structure; + uses ospf-global-rib-statistics-structure; + + uses ospf-global-snmp-statistics-structure { + when "../../../oc-netinst:config/oc-netinst:identifier = 'oc-pol-types:OSPF'" { + description + "Only OSPFv2 SNMP MIBs are supported currently"; + } + } + } + + /* + * OSPF SNMP + */ + container snmp { + description + "This container defines global SNMP + configuration and state."; + + when "../../../oc-netinst:config/oc-netinst:identifier = 'oc-pol-types:OSPF'" { + description + "Only OSPFv2 SNMP MIBs are supported currently"; + } + + uses ospf-snmp-structure; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-policy.yang b/vendor/arrcus/arcos/v521/arcos-ospf-policy.yang new file mode 100644 index 000000000..6f5b837ca --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-policy.yang @@ -0,0 +1,122 @@ +module arcos-ospf-policy { + yang-version "1.1"; + namespace "http://yang.arrcus.com/arcos/ospf/policy"; + prefix "arc-ospf-pol"; + import openconfig-routing-policy { prefix "oc-rpol"; } + import openconfig-extensions { prefix "oc-ext"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + description + "This module defines extensions to the OpenConfig policy + model to add extensions for OSPF. This module is intended + to be generic for both OSPFv2 and OSPFv3."; + // OpenConfig specific extensions for module metadata. + oc-ext:regexp-posix; + grouping ospf-match-config { + description + "Configuration parameters for OSPF match conditions"; + leaf area-eq { + type arc-ospf-types:ospf-area-identifier; + description + "Match prefixes which are within a particular OSPF area"; + } + } + grouping ospf-match-conditions { + description + "Match conditions that are added by OSPF"; + container ospf-conditions { + description + "Match conditions specific to OSPF"; + container config { + description + "Configuration parameters relating to OSPF match conditions"; + } + container state { + config false; + description + "Operational state parameters relating to OSPF match conditions"; + uses ospf-match-config; + } + } + } + grouping ospf-actions-config { + description + "Configuration parameters for OSPF policy actions"; + leaf set-area { + type arc-ospf-types:ospf-area-identifier; + description + "Set the area for the matched route. This action is typically + used when importing prefixes into OSPF, such that a route can + be imported into a specific area within the instance."; + } + } + grouping ospf-actions-set-metric-config { + description + "Configuration parameters relating to setting the OSPF metric"; + leaf metric-type { + type arc-ospf-types:ospf-metric-type; + default "TYPE_2_METRIC"; + description + "Specify the type of metric which is to be set by the policy"; + + } + leaf metric { + type uint32 { + range 1..16777215; + } + description + "Set the metric of the routes matching the policy to the value + specified by this leaf."; + } + } + grouping ospf-actions { + description + "Actions that are added by OSPF to the action framework"; + container ospf-actions { + description + "Actions specific to OSPF"; + container config { + description + "Configuration parameters for OSPF actions"; + } + container state { + config false; + description + "Operational state parameters for OSPF actions"; + } + container set-metric { + description + "Configuration and state parameters relating to manipulating + the OSPF metric"; + container config { + description + "Configuration parameters relating to setting the OSPF metric"; + uses ospf-actions-set-metric-config; + } + container state { + config false; + description + "Operational state parameters relating to setting the OSPF + metric"; + uses ospf-actions-set-metric-config; + } + } + } + } + // augment the groupings into the routing policy model + // TODO: discuss whether igp-actions should be used or whether this should + // be removed. + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement/" + + "oc-rpol:conditions" { + description + "Add OSPF specific match conditions to the routing policy model"; + uses ospf-match-conditions; + } + augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" + + "oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement/" + + "oc-rpol:actions" { + description + "Add OSPF specific actions to the routing policy model"; + uses ospf-actions; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-rib.yang b/vendor/arrcus/arcos/v521/arcos-ospf-rib.yang new file mode 100644 index 000000000..bb98b9dcb --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-rib.yang @@ -0,0 +1,363 @@ +submodule arcos-ospf-rib { + + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import ietf-yang-types { prefix "yang"; } + import ietf-inet-types { prefix "inet"; } + import openconfig-interfaces { prefix "oc-if"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + + // Include submodules + include arcos-ospf-common; + + description + "This submodule provides OSPF configuration and operational + state parameters that are related to OSPF routing tables."; + + + /* + * Nexthops and Nexthop-sets + */ + grouping ospf-nexthop-set-state { + description + "This grouping defines OSPF nexthop-set state information."; + + container state { + description + "This container defines OSPF nexthop-set state information."; + + leaf nexthop-set-id { + type uint32; + description + "Unique identfier for the specific nexthop-set."; + } + + leaf nexthop-count { + type uint32; + description + "Number of nexthops in the nexthop-set."; + } + + leaf reference-count { + type uint32; + description + "Number of routes referring to this nexthop-set."; + } + } + } + + grouping ospf-nexthop-set-nexthops { + description + "This grouping defines OSPF nexthop-set nexthops information."; + + container nexthops { + description + "This container defines OSPF nexthop-set nexthops information."; + + list nexthop { + key "outgoing-interface nexthop-address"; + description + "List OSPF route next hop information."; + + leaf outgoing-interface { + type leafref { + path "../state/outgoing-interface"; + } + description + "Reference to OSPF interface."; + } + + leaf nexthop-address { + type leafref { + path "../state/nexthop-address"; + } + description + "Reference to OSPF nexthop address."; + } + + container state { + description + "This container defines OSPF route nexthop state information."; + + leaf outgoing-interface { + type oc-if:interface-id; + description + "The outgoing interface."; + } + + leaf nexthop-address { + type inet:ip-address; + description + "The nexthop address."; + } + } + } + } + } + + grouping ospf-nexthop-sets-structure { + description + "This grouping defines OSPF global nexthop sets."; + + container nexthop-sets { + config false; + description + "This container defines a list of OSPF nexthop sets."; + + list nexthop-set { + key "nexthop-set-id"; + + description + "List of OSPF nexthop sets."; + + leaf nexthop-set-id { + type leafref { + path "../state/nexthop-set-id"; + } + description + "Unique identifier for the specific nexthop-set."; + } + + uses ospf-nexthop-set-state; + + uses ospf-nexthop-set-nexthops; + } + } + } + + /* + * Routes and Paths + */ + grouping ospf-route-state { + description + "This grouping defines OSPF route state."; + + container state { + description + "This container defines OSPF route state."; + + leaf path-count { + type uint32; + description + "Number of paths in this route."; + } + + leaf aggregate-range { + type inet:ip-prefix; + description + "The aggregate range prefix to which this route + is a contributor"; + } + + leaf-list route-flags { + type identityref { + base "arc-ospf-types:OSPF_ROUTE_FLAG"; + } + description + "Route flags"; + } + } + + container bestpath { + description + "This container defines OSPF bestpath information."; + + leaf path-type { + type identityref { + base "arc-ospf-types:OSPF_ROUTE_TYPE"; + } + description + "The path type of the OSPF bestpath."; + } + + leaf area-id { + type arc-ospf-types:ospf-area-identifier; + description + "The area of the OSPF route. Valid for intra-area and + inter-area route only"; + } + + leaf metric { + type uint32; + description + "OSPF route metric."; + } + + leaf type-2-metric { + type uint32; + description + "OSPF route metric for external type-2 and NSSA type-2."; + } + + leaf tag { + type uint32; + description + "Tag value"; + } + + leaf forwarding-address { + type inet:ip-address; + description + "The Forwarding-Address from the AS-External LSA"; + } + + container received-lsa { + description + "The LSA from which this path is learnt."; + + uses ospf-lsa-key-info; + } + + container self-originated-lsa { + description + "The self-originated LSA that corresponds to this route."; + + uses ospf-lsa-key-info; + } + + leaf-list path-flags { + type identityref { + base "arc-ospf-types:OSPF_PATH_FLAG"; + } + description + "Path flags"; + } + + container nexthop-set { + description + "The nexthop-set describing the nexthops of this route."; + + uses ospf-nexthop-set-state; + + uses ospf-nexthop-set-nexthops; + } + } + } + + grouping ospf-prefixes-structure { + description + "This grouping defines OSPF prefixes."; + + container prefixes { + config false; + description + "This container defines OSPF prefixes."; + + list prefix { + key "prefix-key"; + + description + "List of the local system's OSPF prefixes information learned + and calculated."; + + leaf prefix-key { + type leafref { + path "../prefix-identifier/prefix-key"; + } + description + "Reference to the prefix of the OSPF prefix."; + } + + container prefix-identifier { + description + "This container defines prefix identifier."; + + leaf prefix-key { + type inet:ip-prefix; + description + "OSPF IP prefix."; + } + } + + uses ospf-route-state; + } + } + } + + grouping ospf-redistributed-prefixes-structure { + description + "This grouping defines OSPF redistributed prefixes."; + + container redistributed-prefixes { + config false; + description + "This container defines OSPF redistributed prefixes."; + + list redistributed-prefix { + key "prefix-key"; + + description + "List of the local system's OSPF redistributed prefixes information + learned."; + + leaf prefix-key { + type leafref { + path "../redistributed-prefix-identifier/prefix-key"; + } + description + "Reference to the prefix of the OSPF redistributed prefix."; + } + + container redistributed-prefix-identifier { + description + "This container defines redistributed prefix identifier."; + + leaf prefix-key { + type inet:ip-prefix; + description + "OSPF redistributed IP prefix."; + } + } + + uses ospf-route-state; + } + } + } + + grouping ospf-asbrs-structure { + description + "This grouping defines OSPF ASBRs."; + + container asbrs { + config false; + description + "This container defines OSPF ASBRs."; + + list asbr { + key "asbr-router-id"; + + description + "List of the local system's ASBR information learned + and calculated."; + + leaf asbr-router-id { + type leafref { + path "../asbr-identifier/asbr-router-id"; + } + description + "Reference to the prefix of the OSPF route."; + } + + container asbr-identifier { + description + "This container defines ASBR identifier."; + + leaf asbr-router-id { + type yang:dotted-quad; + description + "ASBR Router ID."; + } + } + + uses ospf-route-state; + } + } + } +} + + + diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-spf.yang b/vendor/arrcus/arcos/v521/arcos-ospf-spf.yang new file mode 100644 index 000000000..1e7fc0cbd --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-spf.yang @@ -0,0 +1,546 @@ +submodule arcos-ospf-spf { + + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import arcos-ospf-types { prefix "arc-ospf-types"; } + + // Include submodules + include arcos-ospf-common; + + description + "This submodule provides OSPF configuration and operational + state parameters that are related to SPF computation, timers + and logs."; + + + /* + * SPF Config and State + */ + grouping ospf-spf-state { + description + "This grouping defines OSPF SPF computation state."; + + leaf spf-delay-sm-state { + type identityref { + base "arc-ospf-types:OSPF_SPF_DELAY_SM_STATE"; + } + + description + "The SPF Delay state-machine current state."; + } + + leaf spf-pending { + type boolean; + description + "Indicates if SPF computation is currently pending."; + } + + leaf full-spf-pending { + type boolean; + description + "Indicates if Full SPF computation is currently pending."; + } + } + + grouping ospf-spf-comp-state { + description + "This grouping defines state corresponding to a particular + run of SPF computation."; + + leaf log-id { + type uint32; + description + "The ID of the SPF log entry."; + } + + leaf trigger-count { + type uint32; + description + "The total number of triggers generated for this SPF computation."; + } + + leaf spf-start-timestamp { + type string; + description + "The timestamp of the start of SPF computation."; + } + + leaf spf-delay-sm-state { + type identityref { + base "arc-ospf-types:OSPF_SPF_DELAY_SM_STATE"; + } + + description + "The SPF Delay state-machine state at the time + of the SPF computation."; + } + + leaf full-spf { + type boolean; + description + "Indicates if the Full SPF was computed."; + } + + leaf spf-duration { + type uint64; + units microseconds; + description + "The total time taken for completing this SPF computation."; + } + + leaf spt-duration { + type uint64; + units microseconds; + description + "The total time taken for completing this SPT calculation."; + } + + leaf spt-reachable-node-count { + type uint32; + description + "The number of reachable nodes ouput from the SPF + computation."; + } + + leaf spt-unreachable-node-count { + type uint32; + description + "The number of nodes unreachable nodes output from + the SPF computation."; + } + } + + /* + * SPF Throttle + */ + grouping ospf-spf-throttle-timers-config { + description + "Configuration parameters relating to SPF throttle timers"; + + leaf spf-initial-delay { + type uint32; + units milliseconds; + description + "The initial delay between IGP event and SPF computation"; + } + + leaf spf-short-delay { + type uint32; + units milliseconds; + description + "The short delay between IGP event and SPF computation"; + } + + leaf spf-long-delay { + type uint32; + units milliseconds; + description + "The long delay between IGP event and SPF computation"; + } + + leaf time-to-learn-interval { + type uint32; + units milliseconds; + description + "The maximum duration typically needed to learn all + the IGP events related to a single failure"; + } + + leaf holddown-interval { + type uint32; + units milliseconds; + description + "The time required with no received IGP event before + considering the IGP to be stable again"; + } + } + + grouping ospf-spf-throttle-structure { + description + "This grouping defines OSPF SPF throttle control."; + + container throttle { + description + "This container defines OSPF SPF throttle control."; + reference + "RFC 8405 - Shortest Path First (SPF) Back-Off Delay Algorithm + for Link-State IGPs"; + + container timers { + description + "This container defines OSPF SPF throttle timers."; + + container config { + description + "This container defines OSPF SPF throttle timers configuration."; + + uses ospf-spf-throttle-timers-config; + } + + container state { + config false; + description + "This container defines OSPF SPF throttle timers information."; + + uses ospf-spf-throttle-timers-config; + } + } + } + } + + + /* + * OSPF SPF Logs and Triggers + */ + grouping ospf-spf-trigger-state { + description + "This grouping defines OSPF SPF trigger information."; + + container state { + description + "This container describes SPF trigger entry state."; + + leaf trigger-id { + type uint32; + description + "The ID of the SPF trigger entry."; + } + + leaf trigger-timestamp { + type string; + description + "The timestamp of the SPF trigger."; + } + + leaf trigger-type { + type identityref { + base "arc-ospf-types:OSPF_SPF_TRIGGER_TYPE"; + } + + description + "The trigger type of the SPF trigger entry."; + } + + leaf spf-delay-sm-state { + type identityref { + base "arc-ospf-types:OSPF_SPF_DELAY_SM_STATE"; + } + + description + "The SPF Delay state-machine state at the time + of the SPF trigger."; + } + + leaf full-spf { + type boolean; + description + "Indicates if the SPF trigger requested a full SPF computation."; + } + } + + container trigger-lsa { + description + "This container describes the LSA that triggered the + SPF computation."; + + uses ospf-lsa-instance-info; + } + } + + grouping ospf-spf-spt-log-info { + description + "This grouping defines OSPF SPF SPT log information."; + + leaf duration { + type uint64; + units microseconds; + description + "The time taken for computing SPF SPT result."; + } + + leaf input-node-count { + type uint32; + description + "The number of nodes input to the SPF computation."; + } + + leaf reachable-node-count { + type uint32; + description + "The number of reachable nodes ouput from the SPF + computation."; + } + + leaf unreachable-node-count { + type uint32; + description + "The number of nodes unreachable nodes output from + the SPF computation."; + } + } + + grouping ospf-spf-route-log-info { + description + "This grouping defines OSPF SPF Route log information."; + + leaf duration { + type uint64; + units microseconds; + description + "The time taken for processing routes during this + SPF computation."; + } + + leaf processed-route-count { + type uint32; + description + "The total number of routes processed during this + SPF computation."; + } + + leaf reachable-route-count { + type uint32; + description + "The number of reachable routes computed during this + SPF computation."; + } + + leaf unreachable-route-count { + type uint32; + description + "The number of unreachable routes computed during this + SPF computation."; + } + + leaf bestpath-change-route-count { + type uint32; + description + "The number of routes whose bestpath changed during this + SPF computation."; + } + } + + grouping ospf-spf-log-state { + description + "This grouping defines OSPF SPF log information."; + + container state { + description + "This container defines OSPF SPF log entry state."; + + leaf log-id { + type uint32; + description + "The ID of the SPF log entry."; + } + + leaf area-id { + type arc-ospf-types:ospf-area-identifier; + description + "The area of the OSPF route. Valid for intra-area and + inter-area route only"; + } + + leaf in-use { + type boolean; + description + "Indicates if this SPF log entry is currently being updated."; + } + + leaf spf-timer-start-timestamp { + type string; + description + "The timestamp of the start of SPF timer."; + } + + leaf spf-timer-delay { + type uint64; + units microseconds; + description + "The delay value used when the SPF timer was started."; + } + + leaf spf-start-timestamp { + type string; + description + "The timestamp of the start of SPF computation."; + } + + leaf spf-delay-sm-state { + type identityref { + base "arc-ospf-types:OSPF_SPF_DELAY_SM_STATE"; + } + + description + "The SPF Delay state-machine state at the time + of the SPF computation."; + } + + leaf full-spf { + type boolean; + description + "Indicates if the Full SPF was computed."; + } + + leaf spf-duration { + type uint64; + units microseconds; + description + "The total time taken for completing this SPF computation."; + } + + container spt-log { + description + "This container describes results of SPT computation."; + + uses ospf-spf-spt-log-info; + } + + container asbr-log { + description + "This container describes results of ASBR computation."; + + uses ospf-spf-route-log-info; + } + + container route-log { + description + "This container describes results of Route computation."; + + uses ospf-spf-route-log-info; + } + + leaf trigger-count { + type uint32; + description + "The total number of triggers generated for this SPF log entry."; + } + + leaf stored-trigger-count { + type uint32; + description + "The number of triggers stored in this SPF log entry."; + } + } + } + + + grouping ospf-spf-log { + description + "This grouping defines one OSPF SPF log entry."; + + uses ospf-spf-log-state; + + container triggers { + description + "This container defines OSPF SPF triggers."; + + list trigger { + key "trigger-id"; + + description + "List of OSPF SPF triggers."; + + leaf trigger-id { + type leafref { + path "../state/trigger-id"; + } + + description + "Reference to the trigger ID of the SPF trigger entry."; + } + + uses ospf-spf-trigger-state; + } + } + } + + grouping ospf-spf-logs-structure { + description + "This grouping defines OSPF SPF log information."; + + container logs { + config false; + description + "This container defines OSPF SPF logs."; + + list log { + key "log-id"; + + description + "List of OSPF SPF logs."; + + leaf log-id { + type leafref { + path "../state/log-id"; + } + + description + "Reference to the log ID of the SPF log entry."; + } + + uses ospf-spf-log; + } + } + } + + grouping ospf-spf-logging-config { + description + "Configuration parameters related to SPF logging"; + + leaf maximum-logs { + type uint32; + description + "Maximum number of SPF logs to store"; + } + + leaf maximum-triggers-per-log { + type uint32; + description + "Maximum number of SPF triggers per SPF log to store"; + } + } + + grouping ospf-spf-logging-state { + description + "Information related to SPF logs"; + + leaf stored-log-count { + type uint32; + description + "Number of SPF logs currently stored"; + } + } + + grouping ospf-spf-logging-structure { + description + "This grouping defines OSPF SPF logging control."; + + container logging { + description + "This container defines OSPF SPF logging control."; + + container config { + description + "This container defines OSPF SPF logging configuration."; + + uses ospf-spf-logging-config; + } + + container state { + config false; + description + "This container defines OSPF SPF logging information."; + + uses ospf-spf-logging-config; + uses ospf-spf-logging-state; + } + + uses ospf-spf-logs-structure; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-statistics.yang b/vendor/arrcus/arcos/v521/arcos-ospf-statistics.yang new file mode 100644 index 000000000..04b7abc8d --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-statistics.yang @@ -0,0 +1,1336 @@ +submodule arcos-ospf-statistics { + + yang-version "1.1"; + + belongs-to arcos-ospf { + prefix "arc-ospf"; + } + + import ietf-yang-types { prefix "yang"; } + import openconfig-types { prefix "oc-types"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + import arcos-system-types { prefix arc-sys-types; } + + description + "This submodule provides OSPF statistics related to LSA, SPF, + RIB and packets."; + + + /* + * Packet Statistics + */ + grouping ospf-pkt-tx-common-statistics { + description + "This grouping defines common packet transmit statistics"; + + leaf total { + type uint64; + description + "Total number of packets sent"; + } + + leaf errors { + type uint64; + description + "Number of errors during packet send"; + } + } + + grouping ospf-pkt-tx-type-statistics { + description + "This grouping defines per-type packet transmit statistics"; + + leaf total { + type uint64; + description + "Total number of packets sent"; + } + + leaf retransmits { + type uint64; + description + "Number of retransmits"; + } + + leaf errors { + type uint64; + description + "Number of errors during packet send"; + } + + leaf errors-socket { + type uint64; + description + "Number of socket write errors"; + } + + leaf lsas { + type uint64; + description + "Number of LSAs sent"; + } + + leaf retransmits-lsas { + type uint64; + description + "Number of LSAs sent in retransmit packets"; + } + } + + grouping ospf-pkt-tx-statistics { + description + "This grouping defines packet transmit statistics"; + + container send { + description + "Packet send statistics"; + + container cumulative { + description + "Total number of packets sent"; + + uses ospf-pkt-tx-common-statistics; + } + + container hello { + description + "Total number of HELLO packets sent"; + + uses ospf-pkt-tx-type-statistics; + } + + container dd { + description + "Total number of DD packets sent"; + + uses ospf-pkt-tx-type-statistics; + } + + container ls-req { + description + "Total number of LS-REQ packets sent"; + + uses ospf-pkt-tx-type-statistics; + } + + container ls-upd { + description + "Total number of LS-UPD packets sent"; + + uses ospf-pkt-tx-type-statistics; + + leaf lsas-in-maintenance { + type uint64; + description + "Number of in-maintenance LSAs sent"; + } + + leaf retransmits-lsas-in-maintenance { + type uint64; + description + "Number of in-maintenance LSAs sent in retransmit packets"; + } + } + + container ls-ack { + description + "Total number of LS-ACK packets sent"; + + uses ospf-pkt-tx-type-statistics; + } + } + } + + grouping ospf-pkt-rx-common-statistics { + description + "This grouping defines common packet receive statistics"; + + leaf total { + type uint64; + description + "Total number of packets received"; + } + + leaf drops { + type uint64; + description + "Number of non-error packets dropped"; + } + + leaf errors { + type uint64; + description + "Number of packets that encountered errors"; + } + + leaf errors-memory { + type uint64; + description + "Number of packets that encountered memory allocation errors"; + } + + leaf errors-header { + type uint64; + description + "Number of packets that encountered packet header errors"; + } + + leaf errors-auth { + type uint64; + description + "Number of packets that encountered authentication errors"; + } + } + + grouping ospf-pkt-rx-type-statistics { + description + "This grouping defines per-type packet receive statistics"; + + leaf total { + type uint64; + description + "Total number of packets received"; + } + + leaf drops { + type uint64; + description + "Number of non-error packets dropped"; + } + + leaf errors { + type uint64; + description + "Number of packets that encountered errors"; + } + + leaf lsas { + type uint64; + description + "Number of LSAs received"; + } + + leaf lsas-ignored { + type uint64; + description + "Number of LSAs received that were ignored"; + } + + leaf lsas-errors { + type uint64; + description + "Number of LSAs received that encountered errors"; + } + } + + grouping ospf-pkt-rx-statistics { + description + "This grouping defines packet receive statistics"; + + container receive { + description + "Packet receive statistics"; + + container cumulative { + description + "Total number of packets received"; + + uses ospf-pkt-rx-common-statistics; + } + + container hello { + description + "Total number of HELLO packets received"; + + uses ospf-pkt-rx-type-statistics; + } + + container dd { + description + "Total number of DD packets received"; + + uses ospf-pkt-rx-type-statistics; + + leaf duplicates { + type uint64; + description + "Number of duplicate DD packets"; + } + } + + container ls-req { + description + "Total number of LS-REQ packets received"; + + uses ospf-pkt-rx-type-statistics; + } + + container ls-upd { + description + "Total number of LS-UPD packets received"; + + uses ospf-pkt-rx-type-statistics; + + leaf lsas-ignored-limit { + type uint64; + description + "Number of LSAs received that were ignored due to max-lsa limit"; + } + + leaf errors-memory { + type uint64; + description + "Number of memory allocation errors"; + } + } + + container ls-ack { + description + "Total number of LS-ACK packets received"; + + uses ospf-pkt-rx-type-statistics; + } + } + } + + grouping ospf-pkt-statistics-structure { + description + "This grouping defines packet statistics"; + + container packet { + description + "Packet statistics"; + + uses ospf-pkt-tx-statistics; + uses ospf-pkt-rx-statistics; + } + } + + + /* + * OSPF LSA Statistics + */ + grouping ospf-lsa-type-statistics { + description + "This grouping defines statistics related to one or all LSA Types."; + + leaf lsas { + type uint32; + description + "Number of LSAs"; + } + + leaf lsas-in-maintenance { + type uint32; + description + "Number of LSAs in maintenance-mode"; + } + + leaf creations { + type uint64; + description + "Number of LSA creations"; + } + + leaf updates { + type uint64; + description + "Number of LSA updates"; + } + + leaf maxage { + type uint64; + description + "Number of LSA maxagings"; + } + + leaf deletions { + type uint64; + description + "Number of LSA deletions"; + } + + leaf origination-changes { + type uint64; + description + "Number of LSAs that changed origination between self and remote"; + } + + leaf errors { + type uint64; + description + "Number of errors encountered"; + } + + leaf errors-memory { + type uint64; + description + "Number of LSA memory allocation errors"; + } + } + + grouping ospf-interface-lsa-type-statistics { + description + "This grouping defines statistics related to Interface LSDB."; + + container cumulative { + description + "LSA statistics across types"; + + leaf lsas { + type uint32; + description + "Number of LSAs of all types"; + } + + leaf lsas-in-maintenance { + type uint32; + description + "Number of LSAs in maintenance-mode"; + } + } + + container link-lsa { + description + "Link LSA statistics"; + + uses ospf-lsa-type-statistics; + } + } + + grouping ospf-interface-lsa-statistics-structure { + description + "This grouping defines statistics related to Interface LSDB."; + + container lsa { + description + "Interface LSA statistics"; + + container self { + description + "Self LSA statistics"; + + uses ospf-interface-lsa-type-statistics; + } + + container remote { + description + "Remote LSA statistics"; + + uses ospf-interface-lsa-type-statistics; + } + } + } + + grouping ospf-area-lsa-type-statistics { + description + "This grouping defines statistics related to Area LSDB."; + + container cumulative { + description + "LSA statistics across types"; + + uses ospf-lsa-type-statistics; + } + + container router-lsa { + description + "Router LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container network-lsa { + description + "Network LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container summary-prefix-lsa { + description + "Summary Prefix LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container summary-asbr-lsa { + description + "Summary ASBR LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container intra-area-prefix-lsa { + description + "Intra-Area-Prefix LSA statistics"; + + uses ospf-lsa-type-statistics; + } + } + + grouping ospf-area-lsa-statistics-structure { + description + "This grouping defines statistics related to Area LSDB."; + + container lsa { + description + "Area LSA statistics"; + + container self { + description + "Self LSA statistics"; + + uses ospf-area-lsa-type-statistics; + } + + container remote { + description + "Remote LSA statistics"; + + uses ospf-area-lsa-type-statistics; + } + } + } + + grouping ospf-as-scope-lsa-type-statistics { + description + "This grouping defines statistics related to AS scope LSDB."; + + container cumulative { + description + "LSA statistics across types"; + + leaf lsas { + type uint32; + description + "Number of LSAs of all types"; + } + + leaf lsas-in-maintenance { + type uint32; + description + "Number of LSAs in maintenance-mode"; + } + } + + container as-external-lsa { + description + "External LSA statistics"; + + uses ospf-lsa-type-statistics; + } + } + + grouping ospf-as-scope-lsa-statistics-structure { + description + "This grouping defines statistics related to AS scope LSDB."; + + container lsa { + description + "AS scope LSA statistics"; + + container self { + description + "Self LSA statistics"; + + uses ospf-as-scope-lsa-type-statistics; + } + + container remote { + description + "Remote LSA statistics"; + + uses ospf-as-scope-lsa-type-statistics; + } + } + } + + grouping ospf-global-lsa-type-statistics { + description + "This grouping defines statistics across all LSDBs of this instance."; + + container cumulative { + description + "LSA statistics across types"; + + uses ospf-lsa-type-statistics; + } + + container router-lsa { + description + "Router LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container network-lsa { + description + "Network LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container summary-prefix-lsa { + description + "Summary Prefix LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container summary-asbr-lsa { + description + "Summary ASBR LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container as-external-lsa { + description + "ASB External LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container link-lsa { + description + "Link LSA statistics"; + + uses ospf-lsa-type-statistics; + } + + container intra-area-prefix-lsa { + description + "Intra-Area-Prefix LSA statistics"; + + uses ospf-lsa-type-statistics; + } + } + + grouping ospf-global-lsa-statistics-structure { + description + "This grouping defines statistics across all LSDBs of this instance"; + + container lsa { + description + "Global LSA statistics"; + + container self { + description + "Self LSA statistics"; + + uses ospf-global-lsa-type-statistics; + } + + container remote { + description + "Remote LSA statistics"; + + uses ospf-global-lsa-type-statistics; + } + } + } + + + /* + * SPF Statistics + */ + grouping ospf-spf-sm-statistics { + description + "This grouping defines SPF Delay SM statistics."; + + leaf spf-delay-sm-event-count { + type uint64; + description + "The total number of SPF Delay state-machine events generated."; + } + + leaf spf-delay-sm-transition-count { + type uint64; + description + "The total number of SPF Delay state-machine transitions generated."; + } + } + + grouping ospf-spf-common-statistics { + description + "This grouping defines SPF computation statistics."; + + leaf spf-trigger-count { + type uint64; + description + "Number of total SPF triggers that have occured till now"; + } + + leaf spf-computation-count { + type uint64; + description + "The total number of SPF computations performed."; + } + + leaf full-spf-computation-count { + type uint64; + description + "The total number of full SPF computations performed."; + } + + leaf spf-duration { + type uint64; + units microseconds; + description + "The total time taken for completing all SPF computations."; + } + + leaf spt-duration { + type uint64; + units microseconds; + description + "The time taken for computing all SPF SPT results."; + } + } + + grouping ospf-comp-spf-statistics-structure { + description + "This grouping defines SPF computation statistics."; + + container spf { + description + "This container defines SPF computation statistics."; + + uses ospf-spf-sm-statistics; + uses ospf-spf-common-statistics; + } + } + + grouping ospf-global-spf-statistics-structure { + description + "This grouping defines SPF global statistics."; + + container spf { + description + "This container defines SPF computation statistics."; + + uses ospf-spf-common-statistics; + } + } + + + /* + * RIB Statistics + */ + grouping ospf-rib-table-statistics { + description + "This grouping defines statistics related to a RIB table."; + + container routes { + description + "This container describes routes statistics."; + + leaf total { + type uint32; + description + "Total number of routes"; + } + + leaf unreachable { + type uint32; + description + "Number of unreachable routes"; + } + + leaf intra-area { + type uint32; + description + "Number of intra-area routes"; + } + + leaf interface-connected { + type uint32; + description + "Number of interface connected routes"; + } + + leaf inter-area { + type uint32; + description + "Number of inter-area routes"; + } + + leaf external-type1 { + type uint32; + description + "Number of external type-1 routes"; + } + + leaf external-type2 { + type uint32; + description + "Number of external type-2 routes"; + } + + leaf errors-memory { + type uint64; + description + "Number of memory allocation errors"; + } + } + + container paths { + description + "This container describes paths statistics."; + + leaf total { + type uint32; + description + "Total number of paths"; + } + + leaf intra-area { + type uint32; + description + "Number of intra-area paths"; + } + + leaf interface-connected { + type uint32; + description + "Number of interface connected paths"; + } + + leaf inter-area { + type uint32; + description + "Number of inter-area paths"; + } + + leaf external { + type uint32; + description + "Number of external paths"; + } + + leaf errors-memory { + type uint64; + description + "Number of memory allocation errors"; + } + } + } + + grouping ospf-rib-redist-statistics { + description + "This grouping defines statistics related to RIB redistribution."; + + container redistributed-routes { + description + "This container describes redistributed routes statistics."; + + leaf connected { + type uint32; + description + "Total number of Connected routes"; + } + + leaf static { + type uint32; + description + "Total number of Static routes"; + } + + leaf isis { + type uint32; + description + "Total number of ISIS routes"; + } + + leaf bgp { + type uint32; + description + "Total number of BGP routes"; + } + + leaf sidmgr { + type uint32; + description + "Total number of SIDMGR routes"; + } + + leaf ospf { + type uint32; + description + "Total number of OSPF routes"; + } + + leaf mark-stale { + type uint64; + description + "Number of routes marked stale"; + } + + leaf delete-stale { + type uint64; + description + "Number of stale routes deleted"; + } + + leaf delete-cleanup { + type uint64; + description + "Number of routes cleaned up / deleted"; + } + } + + container redistributed-paths { + description + "This container describes redistributed paths statistics."; + + leaf mark-stale { + type uint64; + description + "Number of paths marked stale"; + } + + leaf delete-stale { + type uint64; + description + "Number of stale paths deleted"; + } + } + + container notifications { + description + "This container describes redistribution notification statistics."; + + leaf additions-total { + type uint64; + description + "Total number of route additions"; + } + + leaf additions-unknown { + type uint64; + description + "Number of unknow client type route additions"; + } + + leaf additions-rejected { + type uint64; + description + "Number of rejected/dropped route additions"; + } + + leaf deletions-total { + type uint64; + description + "Total number of route deletions"; + } + } + } + + grouping ospf-rib-aggr-statistics { + description + "This grouping defines statistics related to aggregate routes."; + + container routes { + description + "This container describes aggregate routes statistics."; + + leaf summary-aggregate-ranges { + type uint32; + description + "Number of summary aggregate range routes"; + } + + leaf redistribute-aggregate-ranges { + type uint32; + description + "Number of redistribute aggregate range routes"; + } + + leaf summary-aggregate-contributors { + type uint32; + description + "Number of summary aggregate contributor routes"; + } + + leaf redistribute-aggregate-contributors { + type uint32; + description + "Number of redistribute aggregate contributor routes"; + } + } + + container paths { + description + "This container describes aggregate paths statistics."; + + leaf summary-aggregate-ranges { + type uint32; + description + "Number of summary aggregate range paths"; + } + + leaf redistribute-aggregate-ranges { + type uint32; + description + "Number of redistribute aggregate range paths"; + } + } + } + + grouping ospf-rib-download-statistics { + description + "This grouping defines statistics related to route download."; + + container routes { + description + "This container describes routes download statistics."; + + leaf installed { + type uint32; + description + "Number of routes installed"; + } + + leaf additions { + type uint64; + description + "Number of route additions"; + } + + leaf deletions { + type uint64; + description + "Number of route deletions"; + } + + leaf errors { + type uint64; + description + "Number of errors encountered"; + } + } + } + + grouping ospf-rib-lsa-statistics { + description + "This grouping defines statistics related to RIB route LSA origination."; + + container lsas { + description + "This container describes route LSA origination statistics."; + + leaf total { + type uint32; + description + "Total number of Summary/External LSAs originated"; + } + + leaf summary-lsas { + type uint32; + description + "Total number of Summary LSAs originated"; + } + + leaf as-external-lsas { + type uint32; + description + "Total number of External LSAs originated"; + } + + leaf advertisements { + type uint64; + description + "Number of LSAs advertised"; + } + + leaf maxage { + type uint64; + description + "Number of LSAs withdrawn/maxaged"; + } + } + } + + grouping ospf-rib-server-statistics { + description + "This grouping defines general statistics related to L3RIB server interaction."; + + leaf restarts { + type uint32; + description + "Number of L3RIB server restarts seen"; + } + + leaf last-restart-timestamp { + type string; + description + "The timestamp of the last L3RIB server restart seen."; + } + } + + grouping ospf-rib-nexthop-statistics { + description + "This grouping defines statistics related to Nexthops."; + + container nexthop-sets { + description + "This container describes nexthop-set statistics."; + + leaf total { + type uint32; + description + "Total number of nexthop-sets"; + } + + leaf refcount-total { + type uint32; + description + "Total number of refcounts"; + } + + leaf allocations { + type uint64; + description + "Number of memory allocations"; + } + + leaf frees { + type uint64; + description + "Number of frees"; + } + + leaf refcount-increments { + type uint64; + description + "Number of refcount increment operations"; + } + + leaf refcount-decrements { + type uint64; + description + "Number of refcount decrement operations"; + } + + leaf errors { + type uint64; + description + "Total number of errors"; + } + + leaf errors-memory { + type uint64; + description + "Number of memory allocation errors"; + } + + leaf errors-refcount { + type uint64; + description + "Number of refcounting errors"; + } + } + } + + grouping ospf-global-rib-statistics-structure { + description + "This grouping defines statistics related to OSPF RIB."; + + container rib { + description + "This container describes OSPF RIB statistics."; + + container prefix { + description + "This container describes RIB prefix statistics."; + + uses ospf-rib-table-statistics; + } + + container redistributed-prefix { + description + "This container describes RIB redistributed prefix statistics."; + + uses ospf-rib-table-statistics; + uses ospf-rib-redist-statistics; + } + + container asbr { + description + "This container describes RIB ASBR statistics."; + + uses ospf-rib-table-statistics; + } + + container aggregate { + description + "This container describes RIB Aggregate statistics."; + + uses ospf-rib-aggr-statistics; + } + + container download { + description + "This container describes RIB prefix download statistics."; + + uses ospf-rib-download-statistics; + } + + container self-originate { + description + "This container describes self-originated LSAs from RIB prefixes."; + + uses ospf-rib-lsa-statistics; + } + + container server { + description + "This container describes RIB server interaction statistics."; + + uses ospf-rib-server-statistics; + } + + container nexthop { + description + "This container describes RIB Nexthop statistics."; + + uses ospf-rib-nexthop-statistics; + } + } + } + + + /* + * SNMP Statistics + */ + grouping ospf-snmp-trap-statistics { + description + "This grouping defines SNMP trap statistics."; + + leaf if-state-change { + type uint64; + description + "Number of IfStateChange traps generated"; + } + + leaf nbr-state-change { + type uint64; + description + "Number of NbrStateChange traps generated"; + } + + leaf if-config-error { + type uint64; + description + "Number of IfConfigError traps generated"; + } + + leaf if-auth-failure { + type uint64; + description + "Number of IfAuthFailure traps generated"; + } + + leaf if-rx-bad-packet { + type uint64; + description + "Number of IfRxBadPacket traps generated"; + } + + leaf tx-retransmit { + type uint64; + description + "Number of RxRetransmit traps generated"; + } + + leaf originate-lsa { + type uint64; + description + "Number of OriginateLsa traps generated"; + } + + leaf max-age-lsa { + type uint64; + description + "Number of MaxAgeLsa traps generated"; + } + + leaf lsdb-approaching-overflow { + type uint64; + description + "Number of LsdbApproachingOverflow traps generated"; + } + + leaf lsdb-overflow { + type uint64; + description + "Number of LsdbOverflow traps generated"; + } + + leaf gen-error { + type uint64; + description + "Number of errors during trap generation"; + } + } + + grouping ospf-snmp-request-statistics { + description + "This grouping defines SNMP request/response statistics."; + + leaf get-total { + type uint64; + description + "Total number of Get requests"; + } + + leaf get-notfound { + type uint64; + description + "Number of Get requests resulting in not-found error"; + } + + leaf get-error { + type uint64; + description + "Number of Get requests resulting in errors excluding not-found"; + } + + leaf get-next-total { + type uint64; + description + "Total number of Get-next requests"; + } + + leaf get-next-error { + type uint64; + description + "Number of Get-Next requests resulting in errors"; + } + } + + grouping ospf-global-snmp-statistics-structure { + description + "This grouping defines statistics related to OSPF SNMP."; + + container snmp { + description + "This container defines OSPF SNMP statistics."; + + container request { + description + "This container describes SNMP Get/GetNext/Walk statistics."; + + uses ospf-snmp-request-statistics; + } + + container trap { + description + "This container describes SNMP trap statistics."; + + uses ospf-snmp-trap-statistics; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf-types.yang b/vendor/arrcus/arcos/v521/arcos-ospf-types.yang new file mode 100644 index 000000000..6d1d301b8 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf-types.yang @@ -0,0 +1,794 @@ +module arcos-ospf-types { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/ospf/types"; + + prefix "arc-ospf-types"; + + import ietf-yang-types { prefix "yang"; } + import openconfig-extensions { prefix "oc-ext"; } + + description + "Type definitions for OSPF"; + + // OpenConfig specific extensions for module metadata. + oc-ext:regexp-posix; + + + typedef ospf-log-adj-changes-type { + type enumeration { + enum LOG_ADJ_DISABLE { + description + "Syslog is not generated when Neighbor state changes."; + } + enum LOG_ADJ_ENABLE_LIMITED { + description + "Syslog is generated when Neighbor state changes to DOWN or FULL."; + } + enum LOG_ADJ_ENABLE_DETAILED { + description + "Syslog is generated when Neighbor state changes to any state."; + } + } + + description + "Type to specify whether and how often syslogs are generated when + an OSPF neighbor change its states."; + } + + typedef ospf-maintenance-trigger-type { + type enumeration { + enum MAINTENANCE_TRIGGER_ALWAYS { + description + "Maintenance-mode triggered always."; + } + } + + description + "Type to specify the type of maintenance-mode trigger."; + } + + typedef ospf-max-lsa-sm-state-type { + type enumeration { + enum MAX_LSA_DISABLED { + description + "Max-LSA is disabled."; + } + + enum MAX_LSA_NORMAL { + description + "Max-LSA is in Normal state and limit is not reached."; + } + + enum MAX_LSA_LIMIT { + description + "Max-LSA limit has been reached."; + } + + enum MAX_LSA_DOWN { + description + "Max-LSA is in Down state."; + } + + enum MAX_LSA_PERMA_DOWN { + description + "Max-LSA is in permanent Down state."; + } + } + + description + "Type to specify the state of Max-LSA."; + } + + typedef ospf-area-type { + type enumeration { + enum AREA_TYPE_NORMAL { + description + "Normal area"; + } + enum AREA_TYPE_STUB { + description + "Stub area"; + } + } + + description + "Type to specify the type of an OSPF area."; + } + + /* + * Area ID type + */ + typedef ospf-area-identifier { + type union { + type uint32; + type yang:dotted-quad; + } + description + "An identifier for an area with OSPF version 2 or 3. This value + is expressed as either a dotted-quad, or a unsigned 32-bit + number"; + } + + typedef ospf-metric-type { + type enumeration { + enum TYPE_1_METRIC { + description + "Type-1 external metric"; + } + enum TYPE_2_METRIC { + description + "Type-2 external metric"; + } + } + + description + "Type to specify the external metric type of a OSPF route."; + } + + /* + * Metric value type + */ + typedef ospf-metric { + type uint16 { + range "1..65535"; + } + description + "A common type that can be utilised to express an OSPF metric"; + } + + /* + * SR SID Type + */ + typedef sr-sid-type { + type enumeration { + enum LABEL { + description + "When the length of the SR/Label Sub-TLV is specified to be 3, then + the right-most 20-bits represent a label value within the SR/Label + Sub-TLV. When this leaf is set to a value of Label the first-entry + leaf should be interpreted to be an MPLS label."; + } + enum SID { + description + "When the length of the SR/Label Sub-TLV is specified to be 4, then + the value specified in the first-entry leaf should be specified to + be a segment identifier."; + } + } + description + "A common type used to express the type of segment identifier that is + used in LSDB entries relating to segment routing"; + } + + /* + * Address aggregate advertisement type + */ + typedef ospf-aggregate-advertisement { + type enumeration { + enum AGGREGATE_ADVERTISE { + description + "Advertise a given OSPF address aggregate."; + } + + enum AGGREGATE_DONT_ADVERTISE { + description + "Do not advertise a given OSPF address aggregate."; + } + } + description + "Advertisement status of an OSPF address aggregate."; + } + + /* + * LSA Type identity + */ + identity OSPF_LSA_TYPE { + description + "Base identity for an OSPF LSA type. This identity is intended + to be used across both OSPFv2 and OSPFv3. Identity values that + correspond to only one OSPF version are marked as such."; + } + + identity ROUTER_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 1 - ROUTER_LSA. An LSA originated by each router within + the area describing the state and cost of the router's links + in the area."; + reference "RFC2328"; + } + + identity NETWORK_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 2 - NETWORK_LSA. An LSA originated for each broadcast and + non-broadcast multiple access (NBMA) in the area. This LSA is + originated by the designated router."; + reference "RFC2328"; + } + + identity SUMMARY_IP_NETWORK_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 3 - SUMMARY_IP_NETWORK_LSA. An LSA originated by area + border routers describing inter-area destinations. This LSA type + is used when the destination is an IP network"; + reference "RFC2328"; + } + + identity SUMMARY_ASBR_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 4 - SUMMARY_ASBR_LSA. An LSA originated by an area border + router describing inter-area destinations. This LSA type is used + when the destination is an AS boundary router."; + reference "RFC2328"; + } + + identity AS_EXTERNAL_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 5 - AS_EXTERNAL_LSA. This LSA type is used to describe + destinations external to the autonomous system, and is + originated by an AS boundary router (ASBR)."; + reference "RFC2328"; + } + + identity NSSA_AS_EXTERNAL_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 7 - NSSA_AS_EXTERNAL_LSA. This LSA type is used by + systems within a not-so-stubby-area (NSSA) to inject external + prefixes into the LSDB. They are translated to Type 5 LSAs + at an ABR device."; + reference "RFC3101"; + } + + identity OSPFV2_LINK_SCOPE_OPAQUE_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 9 - OSPFV2_LINK_SCOPE_OPAQUE_LSA. This LSA type is used + in OSPFv2 to distribute arbitrary information via the OSPF + protocol. The contents is specific to the application defining + the Opaque Type specified within the LSDB. LSAs with Type 9 have + a scope of the link that they are being transmitted on (and the + associated network or subnetwork)."; + reference "RFC5250"; + } + + identity OSPFV2_AREA_SCOPE_OPAQUE_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 10 - OSPFV2_AREA_SCOPE_OPAQUE_LSA. This LSA type is used + in OSPFv2 to distribute arbitrary information via the OSPF + protocol. The contents is specific to the application defining + the Opaque Type specified within the LSDB. LSAs with Type 10 have + a scope of the area that they are transmitted within."; + reference "RFC5250"; + } + + identity OSPFV2_AS_SCOPE_OPAQUE_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 11 - OSPFV2_AS_SCOPE_OPAQUE_LSA. This LSA type is used + in OSPFv2 to distribute arbitrary information via the OSPF + protocol. The contents is specific to the application defining + the Opaque Type specified within the LSDB. LSAs with Type 11 + have a scope of the autonomous system that they are transmitted + within."; + reference "RFC5250"; + } + + identity OSPFV3_INTER_AREA_PREFIX_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 0x2003 - OSPFV3_INTER_AREA_PREFIX_LSA. This LSA is the IPv6 + equivalent of OSPF for IPv4's type 3 summary-LSAs. Originated by + area border routers, they describe routes to IPv6 address prefixes + that belong to other areas."; + reference "RFC5340"; + } + + identity OSPFV3_INTER_AREA_ROUTER_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 0x2004 - OSPFV3_INTER_AREA_ROUTER_LSA. This LSA is the IPv6 + equivalent of OSPF for IPv4's type 4 summary-LSAs. Originated by + area border routers, they describe route to AS boundary router in + other areas."; + reference "RFC5340"; + } + + identity OSPFV3_LINK_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 0x0008 - OSPFV3_LINK_LSA. A router originates a separate + link-LSA for each attached physical link. This LSA is used in OSPFv3 + to distribute IPv6 addresses associated with the link and the + collection of Options bits in the network-LSA originated by the + Designated Router on the link. This LSA has link-local flooding scope + and is never flooded beyond the associated link."; + reference "RFC5340"; + } + + identity OSPFV3_INTRA_AREA_PREFIX_LSA { + base "OSPF_LSA_TYPE"; + description + "Type 0x2009 - OSPFV3_INTRA_AREA_PREFIX_LSA. This LSA is used to + advertise one or more IPv6 address prefixes that are associated with + a local router address, an attached stub network segment, or an + attached transit network segment."; + reference "RFC5340"; + } + + /* + * Router LSA Type identity + */ + identity ROUTER_LSA_TYPES { + description + "Sub-types of the router LSA"; + } + + identity ROUTER_LSA_P2P { + base "ROUTER_LSA_TYPES"; + description + "The LSA represents a point-to-point connection to another + router"; + } + + identity ROUTER_LSA_TRANSIT_NETWORK { + base "ROUTER_LSA_TYPES"; + description + "The LSA represents a connection to a transit network"; + } + + identity ROUTER_LSA_STUB_NETWORK { + base "ROUTER_LSA_TYPES"; + description + "The LSA represents a connection to a stub network"; + } + + identity ROUTER_LSA_VIRTUAL_LINK { + base "ROUTER_LSA_TYPES"; + description + "The LSA represents a virtual link connection"; + } + + /* + * Neighbor State identity + */ + identity OSPF_NEIGHBOR_STATE { + description + "The state of an adjacency between the local system and a remote + device"; + } + + identity NEIGHBOR_DOWN { + base "OSPF_NEIGHBOR_STATE"; + description + "The initial state of a neighbor, indicating that no recent + information has been received from the neighbor."; + reference "RFC2328"; + } + + identity NEIGHBOR_ATTEMPT { + base "OSPF_NEIGHBOR_STATE"; + description + "Utilised for neighbors that are attached to NBMA networks, it + indicates that no information has been recently received from + the neighbor but that Hello packets should be directly sent + to that neighbor."; + reference "RFC2328"; + } + + identity NEIGHBOR_INIT { + base "OSPF_NEIGHBOR_STATE"; + description + "Indicates that a Hello packet has been received from the + neighbor but bi-directional communication has not yet been + established. That is to say that the local Router ID does + not appear in the list of neighbors in the remote system's + Hello packet."; + reference "RFC2328"; + } + + identity NEIGHBOR_TWO_WAY { + base "OSPF_NEIGHBOR_STATE"; + description + "Communication between the local and remote system is + bi-directional such that the local system's Router ID is listed + in the received remote system's Hello packet."; + reference "RFC2328"; + } + + identity NEIGHBOR_EXSTART { + base "OSPF_NEIGHBOR_STATE"; + description + "An adjacency with the remote system is being formed. The local + system is currently transmitting empty database description + packets in order to establish the master/slave relationship for + the adjacency."; + reference "RFC2328"; + } + + identity NEIGHBOR_EXCHANGE { + base "OSPF_NEIGHBOR_STATE"; + description + "The local and remote systems are currently exchanging database + description packets in order to determine which elements of + their local LSDBs are out of date."; + reference "RFC2328"; + } + + identity NEIGHBOR_LOADING { + base "OSPF_NEIGHBOR_STATE"; + description + "The local system is sending Link State Request packets to the + remote system in order to receive the more recently LSAs that + were discovered during the Exchange phase of the procedure + establishing the adjacency."; + reference "RFC2328"; + } + + identity NEIGHBOR_FULL { + base "OSPF_NEIGHBOR_STATE"; + description + "The neighboring routers are fully adjacent such that both + LSDBs are synchronized. The adjacency will appear in Router and + Network LSAs"; + reference "RFC2328"; + } + + /* + * Network Type identity + */ + identity OSPF_NETWORK_TYPE { + description + "Types of network that OSPF should consider attached to an + interface"; + } + + identity POINT_TO_POINT_NETWORK { + base "OSPF_NETWORK_TYPE"; + description + "A interface that connects two routers."; + reference "RFC2328"; + } + + identity BROADCAST_NETWORK { + base "OSPF_NETWORK_TYPE"; + description + "An interface that supports >2 attached routers which has the + ability to address all connected systems via a single + (broadcast) address."; + } + + /* + * OSPF Interface State identity + */ + identity OSPF_INTERFACE_STATE { + description + "The state of an OSPF interface"; + } + + identity INTERFACE_DOWN { + base "OSPF_INTERFACE_STATE"; + description + "The initial state of an interface."; + reference "RFC2328"; + } + + identity INTERFACE_LOOPBACK { + base "OSPF_INTERFACE_STATE"; + description + "Interface is a loopback interface."; + reference "RFC2328"; + } + + identity INTERFACE_POINT_TO_POINT { + base "OSPF_INTERFACE_STATE"; + description + "Interface connects to a point-to-point network + or a virtual-link."; + reference "RFC2328"; + } + + identity INTERFACE_WAITING { + base "OSPF_INTERFACE_STATE"; + description + "The router is trying to determine the identity of + the Designated Router and Backup Designated Router + for the interface."; + reference "RFC2328"; + } + + identity INTERFACE_DR { + base "OSPF_INTERFACE_STATE"; + description + "The router itself has been selected as the + Desginated Router on the attached network."; + reference "RFC2328"; + } + + identity INTERFACE_BACKUP { + base "OSPF_INTERFACE_STATE"; + description + "The router itself has been selected as the + Backup Desginated Router on the attached network."; + reference "RFC2328"; + } + + identity INTERFACE_DR_OTHER { + base "OSPF_INTERFACE_STATE"; + description + "The router itself has not been selected as either the + Desginated Router or the Backup Designated Router + on the attached network."; + reference "RFC2328"; + } + + /* + * OSPF route type identity + */ + identity OSPF_ROUTE_TYPE { + description + "Base identity for an OSPF route type. This identity is intended + to be used across both OSPFv2 and OSPFv3. Identity values that + correspond to only one OSPF version are marked as such."; + } + + identity OSPF_INVALID_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF unknown/invalid route type."; + } + + identity OSPF_INTRA_AREA_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF intra-area route type."; + } + + identity OSPF_INTER_AREA_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF inter-area route type."; + } + + identity OSPF_EXTERNAL_TYPE1_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF external type 1 route type."; + } + + identity OSPF_EXTERNAL_TYPE2_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF external type 1 route type."; + } + + identity OSPF_NSSA_TYPE1_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF NSSA type 1 route type."; + } + + identity OSPF_NSSA_TYPE2_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF NSSA type 2 route type."; + } + + identity OSPF_INTRA_AREA_CONNECTED_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF intra-area connected route type."; + } + + identity OSPF_EXTERNAL_TYPE1_REDIST_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF external type 1 redistributed route type."; + } + + identity OSPF_EXTERNAL_TYPE2_REDIST_ROUTE { + base "OSPF_ROUTE_TYPE"; + description + "OSPF external type 1 redistributed route type."; + } + + + /* + * OSPF SPF Trigger Type identity + */ + identity OSPF_SPF_TRIGGER_TYPE { + description + "The type of event that triggers an SPF run"; + } + + identity SPF_TRIGGER_UNKNOWN { + base "OSPF_SPF_TRIGGER_TYPE"; + description + "Unknown trigger."; + } + + identity SPF_TRIGGER_LSA_SELF_ORIG { + base "OSPF_SPF_TRIGGER_TYPE"; + description + "LSA self-origination."; + } + + identity SPF_TRIGGER_REMOTE_LSA_CREATE { + base "OSPF_SPF_TRIGGER_TYPE"; + description + "Remote LSA creation."; + } + + identity SPF_TRIGGER_REMOTE_LSA_UPDATE { + base "OSPF_SPF_TRIGGER_TYPE"; + description + "Remote LSA update."; + } + + identity SPF_TRIGGER_LSA_MAXAGE { + base "OSPF_SPF_TRIGGER_TYPE"; + description + "LSA MaxAge."; + } + + identity SPF_TRIGGER_ROUTE_UPDATE { + base "OSPF_SPF_TRIGGER_TYPE"; + description + "Route update."; + } + + identity SPF_TRIGGER_REDIST_ROUTE_UPDATE { + base "OSPF_SPF_TRIGGER_TYPE"; + description + "Redistributed route update."; + } + + identity SPF_TRIGGER_LSDB_CLEANUP { + base "OSPF_SPF_TRIGGER_TYPE"; + description + "LSDB cleanup."; + } + + + /* + * OSPF SPF Delay State identity + */ + identity OSPF_SPF_DELAY_SM_STATE { + description + "The state of SPF Delay state machine."; + } + + identity SPF_DELAY_STATE_QUIET { + base "OSPF_SPF_DELAY_SM_STATE"; + description + "QUIET state."; + reference "RFC8405"; + } + + identity SPF_DELAY_STATE_SHORT_WAIT { + base "OSPF_SPF_DELAY_SM_STATE"; + description + "SHORT_WAIT state."; + reference "RFC8405"; + } + + identity SPF_DELAY_STATE_LONG_WAIT { + base "OSPF_SPF_DELAY_SM_STATE"; + description + "LONG_WAIT state."; + reference "RFC8405"; + } + + /* + * OSPF Authentication Type identity + */ + identity OSPF_AUTH_TYPE { + description + "The type of OSPF authentication."; + } + + identity OSPF_AUTH_NULL { + base "OSPF_AUTH_TYPE"; + description + "Null i.e. no authentication."; + reference "RFC2328"; + } + + identity OSPF_AUTH_CRYPTO_KEY { + base "OSPF_AUTH_TYPE"; + description + "Cryptographic key based authentication."; + reference "RFC2328"; + } + + /* + * OSPF Crypto Algorithm identity + */ + identity OSPF_CRYPTO_ALGO { + description + "The cryptogrphic algorithm used by OSPF."; + } + + identity OSPF_CRYPTO_ALGO_MD5 { + base "OSPF_CRYPTO_ALGO"; + description + "MD5 cryptographic authentication."; + reference "RFC2328"; + } + + /* + * OSPF Route Flags + */ + identity OSPF_ROUTE_FLAG { + description "OSPF Route Flag"; + } + + identity INSTALLED { + base OSPF_ROUTE_FLAG; + description "Installed in L3RIB"; + } + + identity SUMMARY_AGGREGATE_CONTRIBUTOR { + base OSPF_ROUTE_FLAG; + description "Summary aggregate contributor"; + } + + identity REDISTRIBUTE_AGGREGATE_CONTRIBUTOR { + base OSPF_ROUTE_FLAG; + description "Redistribute aggregate contributor"; + } + + /* + * OSPF Path Flags + */ + identity OSPF_PATH_FLAG { + description "OSPF Path Flag"; + } + + identity STALE { + base OSPF_PATH_FLAG; + description "Stale"; + } + + identity CONNECTED { + base OSPF_PATH_FLAG; + description "Interface connected"; + } + + identity REDISTRIBUTED { + base OSPF_PATH_FLAG; + description "Redistributed"; + } + + identity NO_UNICAST { + base OSPF_PATH_FLAG; + description "No Unicast"; + } + + identity SUMMARY_AGGREGATE_RANGE { + base OSPF_PATH_FLAG; + description "Summary aggregate range"; + } + + identity REDISTRIBUTE_AGGREGATE_RANGE { + base OSPF_PATH_FLAG; + description "Redistribute aggregate range"; + } + + identity SUMMARY_AGGREGATE_ADVERTISE { + base OSPF_PATH_FLAG; + description "Advertise summary aggregate"; + } + + identity REDISTRIBUTE_AGGREGATE_ADVERTISE { + base OSPF_PATH_FLAG; + description "Advertise redistribute aggregate"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospf.yang b/vendor/arrcus/arcos/v521/arcos-ospf.yang new file mode 100644 index 000000000..82ecae80f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospf.yang @@ -0,0 +1,94 @@ +module arcos-ospf { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/ospf"; + + prefix "arc-ospf"; + + import openconfig-extensions { prefix "oc-ext"; } + import openconfig-network-instance { prefix "oc-netinst"; } + import openconfig-policy-types { prefix "oc-pol-types"; } + + // Include submodules + include arcos-ospf-common; + include arcos-ospf-statistics; + include arcos-ospf-spf; + include arcos-ospf-rib; + include arcos-ospf-global; + include arcos-ospf-as; + include arcos-ospf-area; + include arcos-ospf-area-interface; + include arcos-ospf-aggregate; + + description + "A model for Open Shortest Path First (OSPF) protocol"; + + // OpenConfig specific extensions for module metadata. + oc-ext:regexp-posix; + + grouping ospfv2-top { + description + "Top-level OSPFv2 configuration and operational state"; + + container ospfv2 { + description + "Top-level configuration and operational state for + Open Shortest Path First (OSPF) v2"; + + uses ospf-global-structure; + uses ospf-as-scope-structure; + uses ospf-areas-structure; + } + } + + grouping ospfv3-top { + description + "Top-level OSPFv3 configuration and operational state"; + + container ospfv3 { + description + "Top-level configuration and operational state for + Open Shortest Path First (OSPF) v3"; + + uses ospf-global-structure; + uses ospf-as-scope-structure; + uses ospf-areas-structure; + } + } + + + /* + * Augment: network-instances network-instance protocols protocol + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" { + + uses ospfv2-top { + when "oc-netinst:config/oc-netinst:identifier = 'oc-pol-types:OSPF'" { + description + "Include ospfv2 only when protocol is OSPF."; + } + + description + "OSPFv2 protocol"; + } + } + + /* + * Augment: network-instances network-instance protocols protocol + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol" { + + uses ospfv3-top { + when "oc-netinst:config/oc-netinst:identifier = 'oc-pol-types:OSPF3'" { + description + "Include ospfv3 only when protocol is OSPF3."; + } + + description + "OSPFv3 protocol"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospfv2-area-interface.yang b/vendor/arrcus/arcos/v521/arcos-ospfv2-area-interface.yang new file mode 100644 index 000000000..4662336eb --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospfv2-area-interface.yang @@ -0,0 +1,50 @@ +submodule arcos-ospfv2-area-interface { + + yang-version "1.1"; + + belongs-to arcos-ospfv2 { + prefix "arc-ospfv2"; + } + + import ietf-yang-types { prefix "yang"; } + + description + "This submodule provides OSPFv2 configuration and operational + state parameters that are specific to the interface context"; + + + grouping ospfv2-area-interface-neighbor-state { + description + "Operation state parameters of an OSPFv2 neighbor"; + + leaf dr-ip-address { + type yang:dotted-quad; + description + "The IP address of the designated router elected by the neighbor."; + } + + leaf bdr-ip-address { + type yang:dotted-quad; + description + "The IP address of the backup designated router elected by the neighbor."; + } + } + + grouping ospfv2-area-interface-neighbor-bfd-structure { + description + "This grouping defines OSPFv2 neighbor BFD information."; + + container bfd { + description + "This container defines neighbor BFD state."; + + container state { + leaf ipv4-bfd-up { + type boolean; + description + "OSPF neighbor IPV4 BFD up"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospfv2-common.yang b/vendor/arrcus/arcos/v521/arcos-ospfv2-common.yang new file mode 100644 index 000000000..195b072ba --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospfv2-common.yang @@ -0,0 +1,47 @@ +submodule arcos-ospfv2-common { + + yang-version "1.1"; + + belongs-to arcos-ospfv2 { + prefix "arc-ospfv2"; + } + + import ietf-yang-types { prefix "yang"; } + import openconfig-types { prefix "oc-types"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + + description + "This submodule provides OSPFv2 configuration and operational + state parameters that are common under one or more contexts."; + + /* + * OSPFv2 packet Option bits + */ + grouping ospfv2-packet-options { + description + "OSPFv2 packet Options field"; + + container options { + leaf e-bit { + type boolean; + description + "This bit describes the way AS-external-LSAs are flooded"; + } + + leaf np-bit { + type boolean; + description + "This bit describes the handling of Type-7 LSAs"; + } + + leaf ea-bit { + type boolean; + description + "This bit describes the router's willingness to receive and + forward External-Attributes-LSAs"; + } + } + } +} + + diff --git a/vendor/arrcus/arcos/v521/arcos-ospfv2-lsdb.yang b/vendor/arrcus/arcos/v521/arcos-ospfv2-lsdb.yang new file mode 100644 index 000000000..2790a24a5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospfv2-lsdb.yang @@ -0,0 +1,2379 @@ +submodule arcos-ospfv2-lsdb { + + yang-version "1.1"; + + belongs-to arcos-ospfv2 { + prefix "arc-ospfv2"; + } + + import ietf-yang-types { prefix "yang"; } + import ietf-inet-types { prefix "inet"; } + import openconfig-types { prefix "oc-types"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + import arcos-ospf-ext-types { prefix "arc-ospf-ext-types"; } + + // Include submodules + include arcos-ospfv2-common; + + description + "An OpenConfig model for the Open Shortest Path First (OSPF) + version 2 link-state database (LSDB)"; + + grouping ospfv2-lsdb-common-prefix-properties { + description + "Common properties used in the LSDB that relate to IPv4 prefixes"; + + leaf prefix-length { + type uint8 { + range "0..32"; + } + description + "The length of the IPv4 prefix contained in the Extended Prefix LSA"; + } + + leaf address-family { + // TODO: should this be an identity? + type enumeration { + enum IPV4_UNICAST { + value 0; + description + "The prefix contained within the Extended Prefix LSA is an IPv4 + unicast prefix"; + } + } + description + "The address family of the prefix contained in the Extended Prefix + LSA"; + } + } + + grouping ospfv2-lsdb-common-link-specification { + description + "Generic attributes used to identify links within OSPFv2"; + + leaf link-id { + type yang:dotted-quad; + description + "The identifier for the link specified. The value of the link + identifier is dependent upon the type of the LSA. The value is + specified to be, per sub-type: + 1) Neighbouring router's router ID. + 2) IP address of DR. + 3) IP network address. + 4) Neighbouring router router's ID."; + } + + leaf link-data { + type union { + type yang:dotted-quad; + type uint32; + } + description + "The data associated with the link type. The value is + dependent upon the subtype of the LSA. When the connection is + to a stub network it represents the mask; for p2p connections + that are unnumbered it represents the ifIndex value of the + router's interface; for all other connections it represents + the local system's IP address"; + } + + } + + grouping ospfv2-lsdb-common-unknown-tlv { + description + "A generic specification of a TLV to be used when the + value cannot be decoded by the local system"; + + leaf type { + type uint16; + description + "The type value of the unknown TLV"; + } + + leaf length { + type uint16; + description + "The length value of the unknown TLV"; + } + + leaf value { + type binary; + description + "The value portion of the unknwon TLV"; + } + } + + grouping ospfv2-lsdb-common-unknown-tlv-structure { + description + "A generic specification of an unknown TLV"; + + container unknown-tlv { + description + "An unknown TLV within the context. Unknown TLVs are + defined to be the set of TLVs that are not modelled + within the OpenConfig model, or are unknown to the + local system such that it cannot decode their value."; + + container state { + description + "Contents of an unknown TLV within the LSA"; + uses ospfv2-lsdb-common-unknown-tlv; + } + } + } + + grouping ospfv2-lsdb-common-unknown-subtlv-structure { + description + "A generic specification of an unknown TLV"; + + container unknown-subtlv { + description + "An unknown SubTLV within the context. Unknown Sub-TLV + are defined to be the set of SubTLVs that are not modelled + by the OpenConfig schema, or are unknown to the local system + such that it cannot decode their value."; + + container state { + description + "Contents of an unknown TLV within the LSA"; + uses ospfv2-lsdb-common-unknown-tlv; + } + } + } + + grouping ospfv2-lsdb-common-tos-metric { + description + "Common LSDB LSA parameters for type of service and metric"; + + leaf tos { + type uint8; + description + "OSPF encoding of the type of service referred to by this + LSA. Encoding for OSPF TOS are described in RFC2328."; + } + + leaf metric { + type arc-ospf-types:ospf-metric; + description + "The metric value to be used for the TOS specified. This value + represents the cost of use of the link for the specific type + of service."; + } + } + + grouping ospfv2-lsdb-common-sr-sid-spec { + description + "Re-usable specification of a segment routing SID"; + + leaf sid-type { + type arc-ospf-types:sr-sid-type; + description + "The type of the value contained within the sub-TLV"; + } + + leaf sid-value { + type uint32; + description + "The value of the binding included within the sub-TLV. The type of + this binding is indicated by the type leaf."; + } + } + + grouping ospfv2-lsdb-area-state { + description + "Per-area operational state parameters for an OSPFv2 area"; + + leaf identifier { + type arc-ospf-types:ospf-area-identifier; + description + "An identifier for the area, expressed as a dotted quad or + an unsigned 32-bit integer"; + } + } + + grouping ospfv2-lsdb-area-lsa-type-state { + description + "Per-LSA type operational state parameters for an OSPFv2 area"; + + leaf type { + type identityref { + base "arc-ospf-types:OSPF_LSA_TYPE"; + } + description + "The type of LSA being described. The type of the LSA is + expressed as a canonical name."; + } + } + + grouping ospfv2-lsdb-area-lsa-state { + description + "Generic parameters of an OSPFv2 LSA"; + + leaf link-state-id { + type yang:dotted-quad; + description + "The Link State ID for the specified LSA type. The exact + defined value of the Link State ID is dependent on the LSA + type."; + } + + leaf advertising-router { + type yang:dotted-quad; + description + "The router ID of the router that originated the LSA"; + } + + leaf sequence-number { + type int32; + description + "A signed 32-bit integer used to detect old and duplicate + LSAs. The greater the sequence number the more recent the + LSA."; + } + + leaf checksum { + type uint16; + description + "The checksum of the complete contents of the LSA excluding + the age field."; + } + + leaf age { + type uint16; + units seconds; + description + "The time since the LSA's generation in seconds"; + } + + uses ospfv2-packet-options; + } + + grouping ospfv2-lsdb-router-lsa-structure { + description + "Structural grouping for Router LSA contents within the LSDB"; + + container router-lsa { + description + "Contents of the router LSA"; + + container state { + description + "State parameters of the router LSA"; + uses ospfv2-lsdb-router-lsa-state; + } + } + } + + grouping ospfv2-lsdb-generic-lsa-tos-metric-structure { + description + "Grouping including a generic TOS/metric structure for an + LSA"; + + container types-of-service { + description + "Breakdown of LSA contents specifying multiple + TOS values"; + + list type-of-service { + key "tos"; + description + "Per-type of service parameters for the LSA"; + + leaf tos { + type leafref { + path "../state/tos"; + } + description + "Reference to the type of service identifier which is + specified in the LSA"; + } + + container state { + description + "Per-TOS parameters for the LSA"; + + uses ospfv2-lsdb-generic-lsa-tos-metric-state; + } + } + } + } + + grouping ospfv2-lsdb-network-lsa-structure { + description + "Structural grouping for Network LSA contents within the LSDB"; + + container network-lsa { + description + "Contents of the network LSA"; + + container state { + description + "State parameters of the network LSA"; + uses ospfv2-lsdb-network-lsa-state; + } + } + } + + grouping ospfv2-lsdb-summary-lsa-structure { + description + "Structural grouping for the Summary LSA contents within the + LSDB"; + + container summary-lsa { + description + "Contents of the summary LSA"; + + container state { + description + "State parameters of the summary LSA"; + uses ospfv2-lsdb-summary-lsa-state; + } + + uses ospfv2-lsdb-generic-lsa-tos-metric-structure; + } + } + + grouping ospfv2-lsdb-asexternal-lsa-structure { + description + "Structural grouping for the AS External LSA contents within + the LSDB"; + + container as-external-lsa { + description + "Contents of the AS External LSA"; + + container state { + description + "State parameters for the AS external LSA"; + uses ospfv2-lsdb-asexternal-lsa-state; + } + + container types-of-service { + description + "Breakdown of External LSA contents specifying multiple + TOS values"; + + list type-of-service { + key "tos"; + description + "Per-type of service parameters for the AS External LSA"; + + leaf tos { + type leafref { + path "../state/tos"; + } + description + "Reference to the type of service identifier which is + specified in the AS External LSA"; + } + + container state { + description + "Per-TOS parameters for the LSA"; + + uses ospfv2-lsdb-asexternal-tos-state; + } + } + } + + } + } + + grouping ospfv2-lsdb-nssa-external-lsa-structure { + description + "Structural grouping for the NSSA External LSA contents within + the LSDB"; + + container nssa-external-lsa { + description + "Contents of the NSSA External LSA"; + + container state { + description + "State parameters for the AS external LSA"; + // Type 7 LSAs are are a super-set of Type 5 LSAs so we simply + // include the Type 5 + uses ospfv2-lsdb-asexternal-lsa-state; + uses ospfv2-lsdb-nssa-external-lsa-state; + } + + container types-of-service { + description + "Breakdown of the NSSA External LSA contents specifying multiple + TOS values"; + + list type-of-service { + key "tos"; + description + "Per-type of service parameters for the NSSA external LSA"; + + leaf tos { + type leafref { + path "../state/tos"; + } + description + "Reference to the type of services identifier which is specified + in the NSSA External LSA"; + } + + container state { + description + "Per-TOS parameters for the LSA"; + uses ospfv2-lsdb-asexternal-tos-state; + } + } + } + } + } + + grouping ospfv2-lsdb-opaque-lsa-structure { + description + "Structural grouping for Opaque LSA contents within the LSDB"; + + container opaque-lsa { + description + "Contents of the opaque LSA"; + + container state { + description + "State parameters for the opaque LSA"; + uses ospfv2-lsdb-opaque-lsa-state; + } + + container traffic-engineering { + when "../state/type = 'TRAFFIC_ENGINEERING'" { + description + "Include the traffic-engineering information when + the Opaque LSA being described is a Traffic Engineering + LSA"; + } + description + "Contents of the Traffic Engineering Opaque LSA"; + + container tlvs { + description + "The TLVs contained in the TE Opaque LSA"; + list tlv { + // this is an unkeyed list + description + "The Type-Length-Value tuples included in the TE LSA"; + + container state { + description + "The contents of the TLV tuple within the TE LSA"; + uses ospfv2-lsdb-opaque-lsa-te-tlv-state; + } + + uses ospfv2-lsdb-common-unknown-tlv-structure; + + container router-address { + when "../state/type = 'TE_ROUTER_ADDRESS'" { + description + "Include the router address container only when the type + of the TLV is Router Address"; + } + + description + "Parameters included in the Router Address TLV"; + + container state { + description + "State parameters of the router address TLV"; + uses ospfv2-lsdb-opaque-te-router-address-state; + } + } + + container link { + when "../state/type = 'TE_ROUTER_LINK'" { + description + "Include the link container only when the type of the + TLV describes a traffic engineering link"; + } + + description + "Parameters included in the Link TLV"; + container sub-tlvs { + description + "Sub-TLVs included in the Link TLV"; + + list sub-tlv { + // unkeyed list + description + "The Sub-TLVs included within the Traffic Engineering + LSA's sub-TLV"; + + container state { + description + "State parameters of the Link Sub-TLV"; + + uses ospfv2-lsdb-opaque-te-link-state; + } + + uses ospfv2-lsdb-common-unknown-subtlv-structure; + + container unreserved-bandwidths { + description + "The unreserved link bandwidths for the Traffic + Engineering LSA - utilised when the sub-TLV type + indicates that the sub-TLV describes unreserved + bandwidth"; + + list unreserved-bandwidth { + key "priority"; + + description + "The unreserved bandwidth at each priority level"; + + leaf priority { + type leafref { + path "../state/priority"; + } + description + "A reference to the priority level being described"; + } + + container state { + description + "State parameters relating to the unreserved + bandwidth of the link being described"; + uses ospfv2-lsdb-opaque-te-link-unreserved-bw-state; + } + } + } + + container administrative-groups { + description + "The administrative groups that are set for the + Traffic Engineering LSA - utilised when the sub-TLV type + indicates that the sub-TLV describes administrative + groups"; + + list admin-group { + key "bit-index"; + + description + "The administrative group described within the + sub-TLV"; + + leaf bit-index { + type leafref { + path "../state/bit-index"; + } + description + "A reference to the bit index being described"; + } + + container state { + description + "State parameters relating to the administrative + groups being described for the link"; + uses ospfv2-lsdb-opaque-te-link-admin-group-state; + } + } + } + } + } + } + + container node-attribute { + when "../state/type = 'TE_NODE_ATTRIBUTE'" { + description + "Include the node-attribute container only when the type of + the TLV describes a node attribute"; + } + + description + "Parameters included in the Node Attribute TLV"; + + container sub-tlvs { + description + "Sub-TLVs of the Node Attribute TLV of the Traffic + Engineering LSA"; + + list sub-tlv { + // unkeyed list + description + "List of the Sub-TLVs contained within the Node Attribute + TLV"; + + container state { + description + "State parameters of the Node Attribute TLV sub-TLV"; + uses ospfv2-lsdb-opaque-te-node-attribute-state; + } + + uses ospfv2-lsdb-common-unknown-subtlv-structure; + } + } + } + + // A set of TLVs are omitted here - based on operational + // requirements, these are: + // * link-local + // * ipv6-address (OSPFv3 only) + // * optical-node-property + } + } + } // traffic-engineering + + container grace-lsa { + when "../state/type = 'GRACE_LSA'" { + description + "Include the grace-lsa container when the opaque LSA is specified + to be of that type."; + } + + description + "The Grace LSA is utilised when a remote system is undergoing + graceful restart"; + + container tlvs { + description + "TLVs of the Grace LSA"; + + list tlv { + description + "TLV entry in the Grace LSA, advertised by a system undergoing + graceful restart"; + + // unkeyed list + container state { + description + "Per-TLV state parameters of the Grace LSA"; + uses ospfv2-lsdb-opaque-grace-state; + } + uses ospfv2-lsdb-common-unknown-tlv-structure; + } + } + } // grace LSA + + container router-information { + when "../state/type = 'ROUTER_INFORMATION_LSA'" { + description + "Include the router-information container when the opaque LSA + type is specified to be an RI LSA"; + } + + description + "The router information LSA is utilised to advertise capabilities + of a system to other systems who receive the LSA"; + + container tlvs { + description + "The TLVs included within the Router Information LSA."; + + list tlv { + description + "TLV entry in the Router Information LSA"; + + // unkeyed list + container state { + description + "Per-TLV state parameters of the RI LSA"; + uses ospfv2-lsdb-opaque-ri-state; + } + + uses ospfv2-lsdb-common-unknown-tlv-structure; + + container informational-capabilities { + when "../state/type = 'RI_INFORMATIONAL_CAPABILITIES'" { + description + "Include the informational capabilities specification when + the TLV of the RI LSA is specified to be of this type"; + } + + description + "Information related to the capabilities of the advertising + router within the scope that the opaque RI LSA is being + advertised"; + + container state { + description + "State parameters of the informational capabilitis of the + RI LSA"; + uses ospfv2-lsdb-opaque-ri-informational-state; + } + } + + container node-administrative-tags { + when "../state/type = 'RI_NODE_ADMIN_TAG'" { + description + "Include the node administrative tags specification when + the TLV of the RI LSA is specified to be of this type"; + } + + description + "Per-node administrative tags associated with the local system + specified by the operator"; + + container state { + description + "State parameters of the node administrative tags advertised + in the RI LSA"; + uses ospfv2-lsdb-opaque-ri-admintag-state; + } + } + + container segment-routing-algorithm { + when "../state/type = 'RI_SR_ALGORITHM'" { + description + "Include the segment routing algorithm specific parameters when + the TLV of the RI LSA is specified to be of this type"; + } + + description + "The algorithms supported for Segment Routing by the local system"; + + container state { + description + "State parameters of the Segment Routing algorithm advertised in + the RI LSA"; + uses ospfv2-lsdb-opaque-ri-sralgo-state; + } + } + + container segment-routing-sid-label-range { + when "../state/type = 'RI_SR_SID_LABEL_RANGE'" { + description + "Include the segment routing SID/Label range TLV specific state when + the TLV of the RI LSA is specified to be of this type"; + } + + description + "The Segment Identifier (SID) or label ranges that are supported by + the local system for Segment Routing"; + + container tlvs { + description + "Sub-TLVs of the SID/Label range TLV of the RI LSA"; + + list tlv { + // unkeyed list + description + "Sub-TLVs of the SID/Label range TLV"; + + uses ospfv2-lsdb-common-unknown-tlv-structure; + + container state { + description + "State parameters of the sub-TLVs of the SR/Label range TLV"; + uses ospfv2-lsdb-opaque-ri-srrange-tlv-state; + } + + container sid-label { + description + "Sub-TLV used to advertise the SID or label associated with the + subset of the SRGB being advertised"; + + container state { + description + "State parameters of the SID/Label sub-TLV of the SR/Label + range TLV of the RI LSA"; + uses ospfv2-lsdb-opaque-ri-srrange-sid-label-tlv-state; + } + } + } + } + } + } + } + } // router-information + + container extended-prefix { + when "../state/type = 'OSPFV2_EXTENDED_PREFIX'" { + description + "Include the extended-prefix container when the opaque LSA + type is specified to be an extended prefix LSA"; + } + + description + "An OSPFv2 Extended Prefix Opaque LSA, used to encapsulate + TLV attributes associated with a prefix advertised in OSPF."; + + reference "RFC7684 - OSPFv2 Prefix/Link Attribute Advertisement"; + + container state { + description + "State parameters of the Extended Prefix LSA"; + uses ospfv2-lsdb-extended-prefix-state; + } + + container tlvs { + description + "TLVs contained within the Extended Prefix LSA"; + + list tlv { + // unkeyed list + description + "A TLV contained within the extended prefix LSA"; + + container state { + description + "State parameters relating to the sub-TLV of the extended + prefix LSA"; + uses ospfv2-lsdb-extended-prefix-tlv-state; + } + + container extended-prefix-range { + when "../state/type = 'EXTENDED_PREFIX_RANGE'" { + description + "Include the prefix range sub-TLV when the type of the + sub-TLV is specified as such"; + } + + description + "State parameters relating to the extended prefix range + sub-TLV of the extended prefix LSA"; + + container state { + description + "State parameters relating to the Extended Prefix Range + sub-TLV of the Extended Prefix LSA"; + uses ospfv2-lsdb-extended-prefix-range-state; + } + } + + container prefix-sid { + when "../state/type = 'PREFIX_SID'" { + description + "Include parameters relating to the Prefix SID when the type + of the sub-TLV is indicated as such"; + } + + description + "State parameters relating to the Prefix SID sub-TLV of the + extended prefix LSA"; + + container state { + description + "State parameters relating to the Prefix SID sub-TLV of the + extended prefix LSA"; + uses ospfv2-lsdb-extended-prefix-prefix-sid-state; + } + } // prefix-sid + + container sid-label-binding { + when "../state/type = 'SID_LABEL_BINDING'" { + description + "Include parameters relating to the SID/Label binding sub-TLV + only when the type is indicated as such"; + } + + description + "State parameters relating to the SID/Label binding sub-TLV + of the extended prefix LSA"; + + container state { + description + "State parameters relating to the SID/Label binding sub-TLV + of the extended prefix LSA"; + uses ospfv2-lsdb-extended-prefix-sid-label-binding-state; + } + + container tlvs { + description + "TLVs contained within the SID/Label Binding sub-TLV of the + SID/Label Binding TLV"; + + list tlv { + description + "A TLV contained within the SID/Label Binding sub-TLV"; + + container state { + description + "State parameters relating to the SID/Label Binding + sub-TLV"; + uses ospfv2-lsdb-extended-prefix-sid-label-binding-tlv-state; + } + + container sid-label-binding { + when "../state/type = 'SID_LABEL_BINDING'" { + description + "Include the SID/Label Binding sub-TLV parameters only + when the type is indicated as such"; + } + + description + "Parameters for the SID/Label Binding sub-TLV of the + SID/Label binding TLV"; + + container state { + description + "State parameteres relating to the SID/Label Binding + sub-TLV"; + uses ospfv2-lsdb-extprefix-sid-label-binding-state; + } + } // sid-label-binding + + container ero-metric { + when "../state/type = 'ERO_METRIC'" { + description + "Include the ERO Metric sub-TLV parameters only when + the type is indicated as such"; + } + + description + "Parameters for the ERO Metric Sub-TLV of the SID/Label + binding TLV"; + + container state { + description + "State parameters relating to the ERO Metric Sub-TLV of + the SID/Label binding TLV"; + uses ospfv2-lsdb-extprefix-sid-label-ero-metric-state; + } + } // ero-metric + + container ero-path { + when "../state/type = 'ERO_PATH'" { + description + "Include the ERO Path sub-TLV parameters only when the + type is indicated as such"; + } + + description + "Parameters for the ERO Path Sub-TLV of the SID/Label + binding TLV"; + + container segments { + description + "Segments of the path described within the SID/Label + Binding sub-TLV"; + + list segment { + description + "A segment of the path described within the sub-TLV"; + + container state { + description + "State parameters relating to the path segment + contained within the sub-TLV"; + uses ospfv2-lsdb-extprefix-sid-lbl-ero-path-seg-state; + } + + container ipv4-segment { + when "../state/type = 'IPV4_SEGMENT'" { + description + "Include the IPv4 segment only when the type is + indicated as such"; + } + + description + "Details of the IPv4 segment interface of the ERO"; + + container state { + description + "State parameters of the IPv4 segment of the ERO"; + uses ospfv2-lsdb-extprefix-sid-lbl-ero-ipv4-state; + } + } // ipv4-segment + + container unnumbered-hop { + when "../state/type = 'UNNUMBERED_INTERFACE_SEGMENT'" { + description + "Include the unnumbered segment only when the + type is indicated as such"; + } + + description + "Details of the unnumbered interface segment of the + ERO"; + + container state { + description + "State parameters of the unnumbered interface + segment of the ERO"; + uses ospfv2-lsdb-extprefix-sid-lbl-ero-unnum-state; + } + } // unnumbered-hop + } // tlv + } // tlvs + } + } + } + } // sid-label-binding + + uses ospfv2-lsdb-common-unknown-tlv-structure; + } + } + } // extended-prefix + + container extended-link { + description + "The OSPFv2 Extended Link Opaque LSA, used to encapsulate TLV + attributes associated with a link advertised in OSPF."; + + reference "RFC7684 - OSPFv2 Prefix/Link Attribute Advertisement"; + + container state { + description + "State parameters of the Extended Link LSA"; + uses ospfv2-lsdb-extended-link-state; + } + + container tlvs { + description + "TLVs contained within the Extended Link LSA"; + + list tlv { + description + "List of TLVs within the Extended Link LSA"; + + container state { + description + "State parameters relating to the sub-TLV of the extended link + LSA"; + uses ospfv2-lsdb-extended-link-tlv-state; + } + + uses ospfv2-lsdb-common-unknown-tlv-structure; + + container adjacency-sid { + when "../state/type = 'ADJACENCY_SID'" { + description + "Include the Adjacency SID parameters only when the type of + the sub-TLV is indicated as such"; + } + + description + "Parameters relating to an Adjacency SID sub-TLV of the + extended link LSA"; + + container state { + description + "State parameters relating to an Adjacency SID"; + + uses ospfv2-lsdb-extended-link-adj-sid-state; + } + } + } + } + + } // extended-link + + uses ospfv2-lsdb-common-unknown-tlv-structure; + } + } + + grouping ospfv2-lsdb-generic-lsa-tos-metric-state { + description + "Per-TOS state parameters for the Router LSA"; + + uses ospfv2-lsdb-common-tos-metric; + } + + grouping ospfv2-lsdb-router-lsa-state { + description + "Parameters of the router LSA"; + + leaf in-maintenance { + type boolean; + description + "Indicates if this LSA was originated in maintenance-mode"; + } + + leaf v-bit { + type boolean; + description + "When set, the router is an endpoint of one or more fully adjacent + virtual links having the described area as transit area"; + } + + leaf e-bit { + type boolean; + description + "When set, the router is an AS boundary router"; + } + + leaf b-bit { + type boolean; + description + "When set, the router is an area border router"; + } + + leaf advertised-link-metric { + type arc-ospf-types:ospf-metric; + description + "The metric advertised for all non-stub links of this LSA"; + } + + leaf number-links { + type uint16; + description + "The number of links that are described within the LSA"; + } + + leaf advertised-stub-metric { + type arc-ospf-types:ospf-metric; + description + "The metric advertised for all stub links of this LSA"; + } + + container links { + list link { + leaf type { + type identityref { + base "arc-ospf-types:ROUTER_LSA_TYPES"; + } + description + "The sub-type of the Router LSA."; + } + + uses ospfv2-lsdb-common-link-specification; + + leaf metric { + type arc-ospf-types:ospf-metric; + description + "The cost of utilising the link specified independent of TOS"; + } + + + leaf number-tos-metrics { + type uint16; + description + "The number of different TOS metrics given for this link, not + including the link metric (which is referred to as TOS 0)."; + } + + uses ospfv2-lsdb-generic-lsa-tos-metric-structure; + } + } + } + + grouping ospfv2-lsdb-network-lsa-state { + description + "Parameters of the Network LSA"; + + leaf network-mask { + type uint8 { + range "0..32"; + } + description + "The mask of the network described by the Network LSA + represented as a CIDR mask."; + } + + leaf-list attached-router { + type yang:dotted-quad; + description + "A list of the router ID of the routers that are attached to + the network described by the Network LSA"; + } + } + + grouping ospfv2-lsdb-summary-lsa-state { + description + "Parameters of the Summary LSA"; + + leaf in-maintenance { + type boolean; + description + "Indicates if this LSA was originated in maintenance-mode"; + } + + leaf network-mask { + type uint8 { + range "0..32"; + } + description + "The mask of the network described by the Summary LSA + represented as a CIDR mask."; + } + + leaf metric { + type uint32 { + range "0..16777215"; + } + description + "The cost of the Summary route"; + } + } + + grouping ospfv2-lsdb-asexternal-lsa-common-parameters { + description + "Common parameters that are used for OSPFv2 AS External LSAs"; + + leaf forwarding-address { + type inet:ipv4-address-no-zone; + description + "The destination to which traffic for the external prefix + should be advertised. When this value is set to 0.0.0.0 then + traffic should be forwarded to the LSA's originator"; + } + + leaf external-route-tag { + type uint32; + description + "An opaque tag that set by the LSA originator to carry + information relating to the external route"; + } + } + + grouping ospfv2-lsdb-asexternal-lsa-state { + description + "Parameters for the AS External LSA"; + + leaf in-maintenance { + type boolean; + description + "Indicates if this LSA was originated in maintenance-mode"; + } + + leaf network-mask { + type uint8 { + range "0..32"; + } + description + "The subnet mask for the advertised destination"; + } + + leaf metric-type { + type arc-ospf-types:ospf-metric-type; + description + "The type of metric included within the AS External LSA."; + } + + leaf metric { + type uint32; + description + "The cost to reach the external network specified. The exact + interpretation of this cost is dependent on the type of + metric specified"; + } + + uses ospfv2-lsdb-asexternal-lsa-common-parameters; + } + + grouping ospfv2-lsdb-asexternal-tos-state { + description + "Per-TOS parameters for the AS External LSA"; + + uses ospfv2-lsdb-asexternal-lsa-common-parameters; + uses ospfv2-lsdb-common-tos-metric; + } + + grouping ospfv2-lsdb-nssa-external-lsa-state { + description + "Operational state parameters specific to the NSSA External + LSA"; + + leaf propagate { + type boolean; + description + "When this bit is set to true, an NSSA border router will + translate a Type 7 LSA (NSSA External) to a Type 5 LSA + (AS External)."; + reference "RFC3101, Section 2.3"; + } + } + + grouping ospfv2-lsdb-opaque-lsa-state { + description + "Operational state parameters specific to an Opaque LSA"; + + leaf scope { + type enumeration { + enum LINK { + description + "The scope of the LSA is the current link. The LSA + is not flooded beyond the local network. This + enumeration denotes a Type 9 LSA."; + } + enum AREA { + description + "The scope of the LSA is the local area. The LSA + is not flooded beyond the area of origin. This + enumeration denotes a Type 10 LSA."; + } + enum AS { + description + "The scope of the LSA is the local autonomous + system (AS). The flooding domain is the same + as a Type 5 LSA - it is not flooded into + stub areas or NSSAs. This enumeration denotes a + Type 11 LSA."; + } + } + description + "The scope of the opaque LSA. The type of the LSA + indicates its scope - the value of this leaf + determines both the flooding domain, and the type + of the LSA."; + } + + leaf type { + type identityref { + base "arc-ospf-ext-types:OSPF_OPAQUE_LSA_TYPE"; + } + description + "The Opaque Type of the LSA. This value is used to + indicate the type of data carried by the opaque LSA"; + } + } + + grouping ospfv2-lsdb-opaque-lsa-te-tlv-state { + description + "The contents of the Traffic Engineering LSA"; + + leaf type { + type identityref { + base "arc-ospf-ext-types:OSPF_TE_LSA_TLV_TYPE"; + } + description + "The type of TLV within the Traffic Engineering LSA"; + } + } + + grouping ospfv2-lsdb-opaque-te-unknown-state { + description + "The contents of the unknown TLV within the Traffic Engineering LSA"; + + uses ospfv2-lsdb-common-unknown-tlv; + } + + grouping ospfv2-lsdb-opaque-te-link-state { + description + "The contents of the sub-TLVs of a Traffic Engineering LSA Link TLV"; + + leaf type { + type union { + type identityref { + base "arc-ospf-ext-types:OSPF_TE_LINK_TLV_TYPE"; + } + type enumeration { + enum UNKNOWN { + description + "The sub-TLV received in the LSA is unknown to the local + system"; + } + } + } + description + "The sub-TLV type specified in the Link TLV. When the value is + known by the local system, a canonical name of the sub-TLV is utilised + - the special UNKNOWN value indicates that the system did not + support the sub-TLV type received in the LSA."; + } + + leaf unknown-type { + when "../type = 'UNKNOWN'" { + description + "Include the unknown type field only when the sub-TLV was not + known to the local system"; + } + + type uint16; + description + "The value of the type field of an unknown sub-TLV"; + } + + leaf unknown-value { + when "../type = 'UNKNOWN'" { + description + "Include the unknown value field only when the sub-TLV was not + known to the local system"; + } + + type binary; + description + "The binary contents of the unknown TLV"; + } + + leaf link-type { + when "../type = 'TE_LINK_TYPE'" { + description + "Include the link-type field only when the sub-TLV type was a TE + link type"; + } + + type enumeration { + enum POINT_TO_POINT { + description + "The link being described by the TE LSA Link sub-TLV is a + point-to-point link to exactly one other system"; + } + enum MULTI_ACCESS { + description + "The link being described by the TE LSA Link sub-TLV is a + multi-access link that supports connectivity to multiple remote + systems"; + } + enum UNKNOWN { + description + "The link type received was unknown to the local system"; + } + } + description + "The type of the link that is being described by the TE LSA Link + sub-TLV"; + } + + leaf link-id { + when "../type = 'TE_LINK_ID'" { + description + "Include the link ID field only when the sub-TLV type was a TE + Link identifier"; + } + + type yang:dotted-quad; + description + "The ID of the remote system. For point-to-point links, this is the + router ID of the neighbor. For multi-access links it is the address + of the designated router."; + } + + leaf-list local-ip-address { + when "../type = 'TE_LINK_LOCAL_IP'" { + description + "Include the local IP address field only when the sub-TLV type was + a local IP address"; + } + + type inet:ipv4-address-no-zone; + description + "The IP address(es) of the local system that correspond to the + specified TE link"; + } + + leaf-list remote-ip-address { + when "../type = 'TE_LINK_REMOTE_IP'" { + description + "Include the remote IP address field only when the sub-TLV type was + a remote IP address"; + } + + type inet:ipv4-address-no-zone; + description + "The IP address(es) of the remote systems that are attached to the + specified TE link"; + } + + leaf metric { + when "../type = 'TE_LINK_METRIC'" { + description + "Include the traffic engineering metric only when the sub-TLV type + is a TE metric"; + } + + type uint32; + description + "The metric of the link that should be used for traffic engineering + purposes. This link may be different than the standard OSPF link + metric."; + } + + leaf maximum-bandwidth { + when "../type = 'TE_LINK_MAXIMUM_BANDWIDTH'" { + description + "Include the traffic engineering metric only when the sub-TLV type + is the maximum bandwidth"; + } + + type oc-types:ieeefloat32; + units "bytes per second"; + description + "The maximum bandwidth of the link. This value reflects the actual + bandwidth of the link expressed asn IEEE 32-bit floating point + number"; + } + + leaf maximum-reservable-bandwidth { + when "../type = 'TE_LINK_MAXIUMUM_RESERVABLE_BANDWIDTH'" { + description + "Include the maximum reservable bandwidth field only when the + sub-TLV type is the maximum reservable bandwidth"; + } + + type oc-types:ieeefloat32; + units "bytes per second"; + description + "The maximum reservable bandwidth for the link. This value represents + the total bandwidth which may be used for traffic engineering + purposes. The value may exceed the maximum-bandwidth value + in cases where the link is oversubscribed. The value is reflected as + a 32-bit IEEE floating-point number"; + } + } + + grouping ospfv2-lsdb-opaque-te-link-unreserved-bw-state { + description + "The per-priority unreserved bandwidth described within the unreserved + bandwidth sub-TLV of the Link TLV of the Traffic Engineering LSA"; + + leaf priority { + type uint8 { + range "0..7"; + } + description + "The priority level being described"; + } + + leaf unreserved-bandwidth { + type oc-types:ieeefloat32; + description + "The unreserved bandwidth for at priority level P, where P is + equal to the priority of the current list entry. The reservable + bandwidth at priority P is equal to the sum of the reservable + bandwidth at all levels 0..P."; + } + } + + grouping ospfv2-lsdb-opaque-te-link-admin-group-state { + description + "Per bit administrative group status"; + + leaf bit-index { + type uint8 { + range "0..31"; + } + description + "The index of the bit within the 32-bit administrative group field + of the Administrative Group sub-TLV of the Traffic Engineering LSA"; + } + + leaf set { + type boolean; + default false; + description + "Whether the bit is set within the administrative group field"; + } + } + + grouping ospfv2-lsdb-opaque-te-node-attribute-state { + description + "State parameters relating to the Traffic Engineering Node Attribute + TLV of the Traffic Engineering LSA"; + + leaf type { + type union { + type identityref { + base "arc-ospf-ext-types:TE_NODE_ATTRIBUTE_TLV_TYPE"; + } + type enumeration { + enum UNKNOWN { + description + "The sub-TLV type received within the TE LSA Node Attribute TLV + was unknown the the local system"; + } + } + } + description + "The type of the sub-TLV of the Node Attribute TLV contained within + the TE LSA. If the local system can interpret the value received the + canonical name of the type is utilised, otherwise the special UNKNOWN + value is used"; + } + + leaf-list local-ipv4-addresses { + when "../type = 'NODE_IPV4_LOCAL_ADDRESS'" { + description + "Include the local IPv4 addresses when the type of the sub-TLV + indicates that this is the contained data"; + } + + type inet:ipv4-prefix; + description + "The local IPv4 addresses of the node expressed in CIDR notation"; + } + + leaf-list local-ipv6-addresses { + when "../type = 'NODE_LOCAL_IPV6_ADDRESS'" { + description + "Include the local IPv6 addresses when the type of the sub-TLV + indicfates that this is the contained data"; + } + + type inet:ipv6-prefix; + description + "The local IPv6 addreses of the node"; + } + } + + grouping ospfv2-lsdb-opaque-te-router-address-state { + description + "The contents of the value field of the Router Address TLV of the + Traffic Engineering LSA."; + + leaf address { + type inet:ipv4-address-no-zone; + description + "A stable IP address of the advertising router, that is always + reachable when the router is connected to the network. Typically this + is a loopback address."; + } + } + + grouping ospfv2-lsdb-opaque-grace-state { + description + "State parameters on a per-TLV basis of the Grace LSA"; + + leaf type { + type identityref { + base "arc-ospf-ext-types:GRACE_LSA_TLV_TYPES"; + } + description + "The type of the sub-TLV received within the Grace LSA"; + } + + leaf period { + when "../type = 'GRACE_PERIOD'" { + description + "Include the period specification when the sub-TLV type is indicated + to be of this type"; + } + + type uint32; + units seconds; + description + "The number of seconds that the router's neighbors should advertise + the local system as fully adjacent regardless of database + synchronization state"; + reference "RFC3623"; + } + + leaf reason { + when "../type = 'GRACE_RESTART_REASON'" { + description + "Include the restart reason when the sub-TLV type specifies this + is included"; + } + + type enumeration { + enum UNKNOWN { + value 0; + description + "The reason for the graceful restart is unknown"; + } + enum SOFTWARE_RESTART { + value 1; + description + "The local system is restarting due to a software component + restart"; + } + enum SOFTWARE_RELOAD_UPGRADE { + value 2; + description + "The local system is restarting due to a software reload or + upgrade"; + } + enum CONTROL_PROCESSOR_SWITCH { + value 3; + description + "The local system is restarting due to a switch to a redundant + control plane element"; + } + } + description + "The reason for the graceful restart event occurring, as advertised + by the restarting system"; + reference "RFC3623"; + } + + leaf ip-interface-address { + when "../type = 'GRACE_IP_INTERFACE_ADDRESS'" { + description + "Include the interface address when the sub-TLV type specifies that + it is included"; + } + + type inet:ipv4-address-no-zone; + description + "The restarting system's IP address on the interface via which the + Grace LSA is being advertised."; + } + } + + grouping ospfv2-lsdb-opaque-ri-state { + description + "State parameters of the Router Information Opaque LSA"; + + leaf type { + type union { + type identityref { + base "arc-ospf-ext-types:RI_LSA_TLV_TYPES"; + } + type enumeration { + enum UNKNOWN { + description + "The TLV received within the RI LSA is unknown"; + } + } + } + description + "The type of sub-TLV of the Router Information opaque LSA"; + } + } + + grouping ospfv2-lsdb-opaque-ri-informational-state { + description + "State parmaeters of the Router Information Informational Capabilities + sub-TLV"; + + leaf graceful-restart-capable { + type boolean; + default false; + description + "When this leaf is set to true, the advertising system is capable of + OSPF graceful restart."; + } + + leaf graceful-restart-helper { + type boolean; + default false; + description + "When this leaf is set to true, the advertising system is capable of + being a helper for OSPF graceful restart"; + } + + leaf stub-router { + type boolean; + default false; + description + "When this leaf is set to true, the advertising system is able to + advertise its status as a stub router"; + reference "RFC6987"; + } + + leaf traffic-engineering { + type boolean; + default false; + description + "When this leaf is set to true, the advertising system supports OSPFv2 + traffic engineering capabilities"; + } + + leaf point-to-point-over-lan { + type boolean; + default false; + description + "When this leaf is set to true, the advertising system supports treating + LAN adjacencies as though they were point to point"; + reference "RFC5309"; + } + + leaf experimental-te { + type boolean; + default false; + description + "When this leaf is set to ture, the advertising system supports the + experimental extensions to OSPF for TE described in RFC4973"; + reference "RFC4973"; + } + } + + grouping ospfv2-lsdb-opaque-ri-admintag-state { + description + "State parameters relating to the administrative tags specified for + a node within the RI LSA"; + + leaf-list administrative-tags { + type uint32; + description + "The set of administrative tags assigned to the local system by + the network operator. The meaning of these tags is opaque to OSPF + - and their interpretation is per-domain specific"; + reference "RFC7777"; + } + } + + grouping ospfv2-lsdb-opaque-ri-unknown-state { + description + "State parameters relating to an unknown TLV within the RI LSA"; + uses ospfv2-lsdb-common-unknown-tlv; + } + + grouping ospfv2-lsdb-opaque-ri-sralgo-state { + description + "State parameters relating to the SR Algorithms TLV of the RI LSA"; + + leaf-list supported-algorithms { + type identityref { + base "arc-ospf-ext-types:SR_ALGORITHM"; + } + description + "A list of the algorithms that are supported for segment routing + by the advertising system"; + } + } + + grouping ospfv2-lsdb-opaque-ri-srrange-tlv-state { + description + "State parameters relating to the SR SID/Label range TLV of the + RI LSA"; + + leaf type { + type union { + type identityref { + base "arc-ospf-ext-types:OSPF_RI_SR_SID_LABEL_TLV_TYPES"; + } + type enumeration { + enum UNKNOWN { + description + "The type of the sub-TLV advertised with the SID/Label range + TLV of the RI LSA is unknown to the receiving system"; + } + } + } + description + "The type of the sub-TLV received by the local system within the + SR SID/Label Range TLV of the RI LSA"; + } + + leaf range-size { + type uint32 { + range "0..16777216"; + } + description + "The number of entries within the range being described within the + SID/Label range TLV"; + } + } + + grouping ospfv2-lsdb-opaque-ri-srrange-sid-label-tlv-state { + description + "State parameters relating to the SR SID/Label sub-TLV of the SR SID/Label + range TLV of the RI LSA"; + + leaf entry-type { + type arc-ospf-types:sr-sid-type; + description + "The type of entry that is contained within the sub-TLV. The range may + be represented as either a range of MPLS labels, or numeric segment + identifiers"; + } + + leaf first-value { + type uint32; + description + "The first value within the SRGB range being specified. The type of the + entry is determined based on the value of the entry type as this value + may represent either a segment identifier or an MPLS label."; + } + } + + grouping ospfv2-lsdb-extended-prefix-state { + description + "State parameters relating to an Extended Prefix LSA"; + + leaf route-type { + type enumeration { + enum UNSPECIFIED { + value 0; + description + "The prefix described in the extended prefix LSA is of an + unspecified type"; + } + enum INTRA_AREA { + value 1; + description + "The prefix described in the extended prefix LSA is an intra-area + prefix for the advertising system"; + } + enum INTER_AREA { + value 3; + description + "The prefix described in the extended prefix LSA is an inter-area + prefix for the advertising system"; + } + enum AS_EXTERNAL { + value 5; + description + "The prefix described in the extended prefix LSA is external to the + autonomous system of the advertising system"; + } + enum NSSA_EXTERNAL { + value 7; + description + "The prefix described in the extended prefix LSA externally + advertised from an NSSA area visibile to the advertising system"; + } + } + description + "The type of prefix that is contained within the Extended Prefix LSA. + The information contained in sub-TLVs of the attribute is applicable + regardless of this value."; + } + + uses ospfv2-lsdb-common-prefix-properties; + + leaf attached { + type boolean; + default false; + description + "If this value is set to true, the prefix being advertised was + generated by an ABR for an inter-area prefix. The value corresponds + to the A-flag of the flags field of the Extended Prefix LSA"; + } + + leaf node { + type boolean; + default false; + description + "If this value is set to true, the prefix being advertised represents + the advertising router. Typically, the prefix within the LSA is + expected to be globally-reachable prefix associated with a loopback + interface"; + } + + leaf prefix { + type inet:ipv4-address-no-zone; + description + "The IPv4 prefix contained within the extended prefix LSA"; + } + } + + grouping ospfv2-lsdb-extended-link-state { + description + "State parameters related to an extended link LSA"; + + leaf link-type { + type identityref { + base "arc-ospf-ext-types:OSPFV2_ROUTER_LINK_TYPE"; + } + description + "The type of link with which extended attributes are associated"; + } + + uses ospfv2-lsdb-common-link-specification; + + } + + grouping ospfv2-lsdb-extended-link-tlv-state { + description + "State parameters relating to a sub-TLV of the extended link LSA"; + + leaf type { + type identityref { + base "arc-ospf-ext-types:OSPFV2_EXTENDED_LINK_SUBTLV_TYPE"; + } + description + "The type of the sub-TLV contained within the extended link TLV"; + } + } + + grouping ospfv2-lsdb-extended-prefix-tlv-state { + description + "State parameters related to a sub-TLV of an Extended Prefix LSA"; + + leaf type { + type identityref { + base "arc-ospf-ext-types:OSPFV2_EXTENDED_PREFIX_SUBTLV_TYPE"; + } + description + "The type of sub-TLV as indicated by the Extended Prefix LSA"; + } + } + + grouping ospfv2-lsdb-extended-prefix-range-state { + description + "Parameters of the Extended Prefix Range SubTLV"; + + uses ospfv2-lsdb-common-prefix-properties; + + leaf range-size { + type uint16; + description + "The number of prefixes that are covered by the advertisement."; + } + + leaf inter-area { + type boolean; + default false; + description + "When this leaf is set to true, then the prefix range is inter-area - + the flag is set by the ABR that advertises the Extended Prefix Range + TLV"; + } + + leaf prefix { + type inet:ipv4-prefix; + description + "The first prefix in the range of prefixes being described by the + extended prefix range sub-TLV"; + } + } + + grouping ospfv2-lsdb-extended-prefix-prefix-sid-state { + description + "Parameters of the Prefix-SID sub-TLV"; + + leaf no-php { + type boolean; + default false; + description + "If this leaf is set the advertising system has indicated that the + prefix SID must not be popped before delivering packets to it"; + } + + leaf mapping-server { + type boolean; + default false; + description + "If this leaf is set the SID was advertised by a Segment Routing + mapping server"; + } + + leaf explicit-null { + type boolean; + default false; + description + "If this leaf is set, the advertising system has requested that the + prefix SID value should be replaced with the explicit null label + value"; + } + + leaf sid-value-type { + type enumeration { + enum ABSOLUTE { + description + "The SID contained in the Prefix-SID sub-TLV is an absolute + value"; + } + enum INDEX { + description + "The SID contained in the Prefix-SID sub-TLV is an index to the + SRGB"; + } + } + description + "Specifies the type of the value specified within the Prefix SID + sub-TLV - in particular, whether the value is an index or an + absolute value. This value corresponds with the V-flag of the Prefix + SID sub-TLV"; + } + + leaf sid-scope { + type enumeration { + enum LOCAL { + description + "The value of the SID is + significant only to the advertising system"; + } + enum GLOBAL { + description + "The value of the SID is globally significant"; + } + } + description + "Specifies the scope of the SID advertisement within the Prefix SID + sub-TLV. The scope of the SID is independent of whether the SID + contained is an index, or an absolute value"; + } + + leaf multi-topology-identifier { + type uint8; + description + "The identifier for the topology to which the Prefix SID relates. The + value of this leaf is a MT-ID as defined in RFC4915"; + } + + leaf algorithm { + type uint8; + description + "The algorithm that computes the path associated with the Prefix SID"; + } + + leaf sid-value { + type uint32; + description + "The value of the Prefix SID. The meaning of this value is dependent + upon the type of SID, and its scope. The value contained is either a + 32-bit value indicating the index of the SID, or a 24-bit label where + the 20 right-most bits are used for encoding the label value"; + } + } + + grouping ospfv2-lsdb-extended-prefix-sid-label-binding-state { + description + "State parameters relating to the extended prefix SID SID/Label binding + sub-TLV"; + + leaf mirroring { + type boolean; + default false; + description + "When set to true, this indicates that the SID/Label Binding sub-TLV + entries contained within this TLV are indicative of a mirroring + context"; + } + + leaf multi-topology-identifier { + type uint8; + description + "The identifier for the topology to which the SID/Label Binding + sub-TLV is associated. The value of this leaf is a MT-ID as defined + in RFC4915"; + } + + leaf weight { + type uint8; + description + "The weight of the advertised binding when used for load-balancing + purposes"; + } + } + + grouping ospfv2-lsdb-extended-prefix-sid-label-binding-tlv-state { + description + "State parameters directly relating to the SID/Label Binding TLV"; + + leaf type { + type identityref { + base + "arc-ospf-ext-types:OSPFV2_EXTENDED_PREFIX_SID_LABEL_BINDING_SUBTLV_TYPE"; + } + description + "The type of sub-TLV that is being contained within the SID/Label + sub-TLV"; + } + } + + grouping ospfv2-lsdb-extprefix-sid-label-binding-state { + description + "State parameters relating to the SID/Label binding sub-TLV of the + SID/Label/Binding TLV"; + + uses ospfv2-lsdb-common-sr-sid-spec; + } + + grouping ospfv2-lsdb-extprefix-sid-label-ero-metric-state { + description + "State parameters relating to the ERO Metric Sub-TLV of the SID/Label + Binding TLV"; + + leaf metric { + type uint32; + description + "The metric representing the aggregate IGP or TE path cost for the + binding included within the SID/Label Binding TLV"; + } + } + + grouping ospfv2-lsdb-extprefix-sid-lbl-ero-path-seg-state { + description + "State parameters relating to the a segment included within the + ERO Path Sub-TLV of the SID/Label Binding TLV"; + + leaf type { + type identityref { + base "arc-ospf-ext-types:OSPFV2_EXTPREFIX_BINDING_ERO_PATH_SEGMENT_TYPE"; + } + description + "The type of the segment being specified as part of the ERO"; + } + + leaf loose { + type boolean; + default false; + description + "If this leaf is set the segment is identifier as a loose path + segment, otherwise the path strictly follows the path specified"; + } + } + + grouping ospfv2-lsdb-extprefix-sid-lbl-ero-ipv4-state { + description + "State parameters relating to an IPv4 address segment included within + the ERO path"; + + leaf address { + type inet:ipv4-address-no-zone; + description + "The IPv4 address of the hop within the ERO"; + } + } + + grouping ospfv2-lsdb-extprefix-sid-lbl-ero-unnum-state { + description + "State parameters relating to an unnumbered hop within the ERO path"; + + leaf router-id { + type inet:ipv4-address-no-zone; + description + "The IPv4 router identtifier of the remote system"; + } + + leaf interface-id { + type uint32; + description + "The identifier assigned to the link by the remote system"; + } + } + + grouping ospfv2-lsdb-extended-link-adj-sid-state { + description + "State parameters relating to the Adjacency SID sub-TLV of the + Extended Link LSA"; + + leaf backup { + type boolean; + default false; + description + "When this flag is set, it indicates that the adjacency SID refers to + an adjacency which is eligible for protection"; + } + + leaf group { + type boolean; + default false; + description + "When this flag is set it indicates that the adjacency SID refers to + a group of adjacencies that have a common value"; + } + + uses ospfv2-lsdb-common-sr-sid-spec; + + leaf weight { + type uint8; + description + "The weight of the Adjacency SID when used for load-balancing"; + } + + leaf multi-topology-identifier { + type uint8; + description + "The multi-topology identifier with which the adjacency SID is + associated"; + } + } + + grouping ospfv2-lsdb-structure { + description + "Structural grouping for LSDB contents"; + + container lsdb { + // Top-level RO, if this were ever to become writeable then + // the state containers lower down need config false added + config false; + description + "The link-state database for OSPFv2"; + + container state { + description + "Operational state parameters relating to the OSPFv2 + LSDB"; + + uses ospfv2-lsdb-area-state; + } + + container lsa-types { + description + "Enclosing container for a list of LSA types that are + in the LSDB"; + + list lsa-type { + key "type"; + + description + "List of LSA types in the LSDB for the specified"; + + leaf type { + type leafref { + path "../state/type"; + } + description + "A reference for the LSA type being described within + the LSDB"; + } + + container state { + description + "Top-level operational state parameters relating to + an LSA"; + uses ospfv2-lsdb-area-lsa-type-state; + } + + container lsas { + description + "Enclosing container for a list of the LSAs of + the specified type received by the system"; + + list lsa { + key "link-state-id advertising-router"; + + description + "List of the LSAs of a specified type in the + LSDB"; + + leaf link-state-id { + type leafref { + path "../state/link-state-id"; + } + description + "Reference to the Link State ID of the LSA"; + } + + leaf advertising-router { + type leafref { + path "../state/advertising-router"; + } + description + "Reference to the advertising router of the LSA"; + } + + container state { + description + "Operational state parameters relating to all + LSA types"; + uses ospfv2-lsdb-area-lsa-state; + } + + uses ospfv2-lsdb-router-lsa-structure { + when "../../state/type = 'arc-ospf-types:ROUTER_LSA'" { + description + "Include the router LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv2-lsdb-network-lsa-structure { + when "../../state/type = 'arc-ospf-types:NETWORK_LSA'" { + description + "Include the network LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv2-lsdb-summary-lsa-structure { + // rjs TODO: check this syntax + when "../../state/type = " + + "'arc-ospf-types:SUMMARY_IP_NETWORK_LSA' or " + + "../../state/type = 'arc-ospf-types:SUMMARY_ASBR_LSA'" { + description + "Include the summary LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv2-lsdb-asexternal-lsa-structure { + when "../../state/type = 'arc-ospf-types:AS_EXTERNAL_LSA'" { + description + "Include the AS external LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv2-lsdb-nssa-external-lsa-structure { + when "../../state/type = 'arc-ospf-types:NSSA_AS_EXTERNAL_LSA'" { + description + "Include the NSSA External LSA hierarchy solely + when that LSA type is being described"; + } + } + + uses ospfv2-lsdb-opaque-lsa-structure { + when "../../state/type = 'arc-ospf-types:OSPFV2_LINK_SCOPE_OPAQUE_LSA' + or ../../state/type = 'arc-ospf-types:OSPFV2_AREA_SCOPE_OPAQUE_LSA' + or ../../state/type = 'arc-ospf-types:OSPFV2_AS_SCOPE_OPAQUE_LSA'" { + description + "Include the Opaque LSA structure when type of entry + being described in an opaque LSA"; + } + } + } + } + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospfv2.yang b/vendor/arrcus/arcos/v521/arcos-ospfv2.yang new file mode 100644 index 000000000..37686a33a --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospfv2.yang @@ -0,0 +1,67 @@ +module arcos-ospfv2 { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/ospfv2"; + + prefix "arc-ospfv2"; + + import openconfig-network-instance { prefix "oc-netinst"; } + import arcos-ospf { prefix "arc-ospf"; } + + // Include submodules + include arcos-ospfv2-common; + include arcos-ospfv2-area-interface; + include arcos-ospfv2-lsdb; + + description + "A model for Open Shortest Path First (OSPF) v2 protocol"; + + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv2" + + "/arc-ospf:as-scope" { + uses ospfv2-lsdb-structure; + } + + /* + * Augment ospfv2 areas area + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv2" + + "/arc-ospf:areas/arc-ospf:area" { + uses ospfv2-lsdb-structure; + } + + /* + * Augment ospfv2 areas area interfaces interface + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv2" + + "/arc-ospf:areas/arc-ospf:area" + + "/arc-ospf:interfaces/arc-ospf:interface" { + uses arc-ospf:ospf-auth-structure; + } + + /* + * Augment ospfv2 areas area interfaces interface neighbors neighbor + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv2" + + "/arc-ospf:areas/arc-ospf:area" + + "/arc-ospf:interfaces/arc-ospf:interface" + + "/arc-ospf:neighbors/arc-ospf:neighbor" { + uses ospfv2-area-interface-neighbor-bfd-structure; + } + + /* + * Augment ospfv2 areas area interfaces interface neighbors neighbor state + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv2" + + "/arc-ospf:areas/arc-ospf:area" + + "/arc-ospf:interfaces/arc-ospf:interface" + + "/arc-ospf:neighbors/arc-ospf:neighbor/arc-ospf:state" { + uses ospfv2-area-interface-neighbor-state; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospfv3-area-interface.yang b/vendor/arrcus/arcos/v521/arcos-ospfv3-area-interface.yang new file mode 100644 index 000000000..fd9e40f4c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospfv3-area-interface.yang @@ -0,0 +1,76 @@ +submodule arcos-ospfv3-area-interface { + + yang-version "1.1"; + + belongs-to arcos-ospfv3 { + prefix "arc-ospfv3"; + } + + import ietf-yang-types { prefix "yang"; } + + description + "This submodule provides OSPFv3 configuration and operational + state parameters that are specific to the interface context"; + + grouping ospfv3-area-interface-config { + description + "Configuration parameters for an OSPFv3 interface"; + + leaf interface-id { + type uint32; + description + "32-bit number uniquely identifying this interface among the + collection of this router's interfaces"; + } + + leaf instance-id { + type uint32; + default 0; + description + "The OSPF protocol instance associated with this OSPF interface"; + } + } + + grouping ospfv3-area-interface-neighbor-state { + description + "Operation state parameters of an OSPFv3 neighbor"; + + leaf interface-id { + type uint32; + description + "32-bit number uniquely identifying this interface among the + collection of the remote system's interfaces"; + } + + leaf dr-router-id { + type yang:dotted-quad; + description + "The router-id of the designated router elected by the neighbor."; + } + + leaf bdr-router-id { + type yang:dotted-quad; + description + "The router-id of the backup designated router elected by the neighbor."; + } + } + + grouping ospfv3-area-interface-neighbor-bfd-structure { + description + "This grouping defines OSPFv3 neighbor BFD information."; + + container bfd { + description + "This container defines neighbor BFD state."; + + container state { + leaf ipv6-bfd-up { + type boolean; + description + "OSPF neighbor IPV6 BFD up"; + } + } + } + } +} + diff --git a/vendor/arrcus/arcos/v521/arcos-ospfv3-common.yang b/vendor/arrcus/arcos/v521/arcos-ospfv3-common.yang new file mode 100644 index 000000000..dcdff7e20 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospfv3-common.yang @@ -0,0 +1,76 @@ +submodule arcos-ospfv3-common { + + yang-version "1.1"; + + belongs-to arcos-ospfv3 { + prefix "arc-ospfv3"; + } + + import ietf-yang-types { prefix "yang"; } + import openconfig-types { prefix "oc-types"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + + description + "This submodule provides OSPFv3 configuration and operational + state parameters that are common under one or more contexts."; + + /* + * OSPFv3 packet Option bits + */ + grouping ospfv3-packet-options { + description + "OSPFv3 packet Options field"; + + container options { + leaf v6-bit { + type boolean; + description + "If this bit is clear, the router/link should be excluded from IPv6 + routing calculations"; + } + + leaf e-bit { + type boolean; + description + "This bit describes the way AS-external-LSAs are flooded"; + } + + leaf n-bit { + type boolean; + description + "This bit describes whether or not the router is attached to an + NSSA"; + } + + leaf r-bit { + type boolean; + description + "This bit describes whether the originator is an active router"; + } + } + } + + /* + * OSPF Maintenance + */ + grouping ospfv3-maint-router-lsa-config { + description + "This grouping defines maintenance mode OSFPv3 Router LSA configuration."; + + leaf reset-v6-bit { + type boolean; + description + "Indicates if the V6-bit in the Options field of Router LSA + should be reset to 0"; + } + + leaf reset-r-bit { + type boolean; + description + "Indicates if the R-bit in the Options field of Router LSA + should be reset to 0"; + } + } +} + + diff --git a/vendor/arrcus/arcos/v521/arcos-ospfv3-lsdb.yang b/vendor/arrcus/arcos/v521/arcos-ospfv3-lsdb.yang new file mode 100644 index 000000000..13ba18aeb --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospfv3-lsdb.yang @@ -0,0 +1,907 @@ +submodule arcos-ospfv3-lsdb { + + yang-version "1.1"; + + belongs-to arcos-ospfv3 { + prefix "arc-ospfv3"; + } + + import ietf-yang-types { prefix "yang"; } + import ietf-inet-types { prefix "inet"; } + import arcos-ospf-types { prefix "arc-ospf-types"; } + import arcos-ospf-ext-types { prefix "arc-ospf-ext-types"; } + + // Include submodules + include arcos-ospfv3-common; + + description + "An OpenConfig model for the Open Shortest Path First (OSPF) + version 3 link-state database (LSDB)"; + + grouping ospfv3-lsdb-lsa-prefix-options { + description + "Prefix options"; + + leaf nu-bit { + type boolean; + description + "The no unicast capability bit"; + } + + leaf la-bit { + type boolean; + description + "The local address capability bit"; + } + + leaf p-bit { + type boolean; + description + "The propagate bit"; + } + + leaf dn-bit { + type boolean; + description + "This bit controls an inter-area-prefix-LSAs or AS-external-LSAs + re-advertisement in a VPN environment"; + } + } + + grouping ospfv3-lsdb-common-prefix-properties { + description + "Common properties used in the LSDB that relate to IPv4 prefixes"; + + leaf prefix-length { + type uint8 { + range "0..32"; + } + description + "The length of the IPv4 prefix contained in the Extended Prefix LSA"; + } + + leaf address-family { + // TODO: should this be an identity? + type enumeration { + enum IPV4_UNICAST { + value 0; + description + "The prefix contained within the Extended Prefix LSA is an IPv4 + unicast prefix"; + } + } + description + "The address family of the prefix contained in the Extended Prefix + LSA"; + } + } + + + grouping ospfv3-lsdb-common-sr-sid-spec { + description + "Re-usable specification of a segment routing SID"; + + leaf sid-type { + type arc-ospf-types:sr-sid-type; + description + "The type of the value contained within the sub-TLV"; + } + + leaf sid-value { + type uint32; + description + "The value of the binding included within the sub-TLV. The type of + this binding is indicated by the type leaf."; + } + } + + grouping ospfv3-lsdb-area-state { + description + "Per-area operational state parameters for an OSPFv3 area"; + + leaf identifier { + type arc-ospf-types:ospf-area-identifier; + description + "An identifier for the area, expressed as a dotted quad or + an unsigned 32-bit integer"; + } + } + + grouping ospfv3-lsdb-area-lsa-type-state { + description + "Per-LSA type operational state parameters for an OSPFv3 area"; + + leaf type { + type identityref { + base "arc-ospf-types:OSPF_LSA_TYPE"; + } + description + "The type of LSA being described. The type of the LSA is + expressed as a canonical name."; + } + + leaf u-bit { + type boolean; + description + "The U-bit indicates how the LSA should be handled by a + router that does not recognize the LSA's function code"; + } + + leaf s1-bit { + type boolean; + description + "The S1 and S2 bits indicate the flooding scope of the LSA"; + } + + leaf s2-bit { + type boolean; + description + "The S1 and S2 bits indicate the flooding scope of the LSA"; + } + + leaf function-code { + type uint16; + description + "The function code of the LSA type"; + } + } + + grouping ospfv3-lsdb-area-lsa-state { + description + "Generic parameters of an OSPFv3 LSA"; + + leaf link-state-id { + type yang:dotted-quad; + description + "The Link State ID for the specified LSA type. The exact + defined value of the Link State ID is dependent on the LSA + type."; + } + + leaf advertising-router { + type yang:dotted-quad; + description + "The router ID of the router that originated the LSA"; + } + + leaf sequence-number { + type int32; + description + "A signed 32-bit integer used to detect old and duplicate + LSAs. The greater the sequence number the more recent the + LSA."; + } + + leaf checksum { + type uint16; + description + "The checksum of the complete contents of the LSA excluding + the age field."; + } + + leaf age { + type uint16; + units seconds; + description + "The time since the LSA's generation in seconds"; + } + } + + grouping ospfv3-lsdb-router-lsa-structure { + description + "Structural grouping for Router LSA contents within the LSDB"; + + container router-lsa { + description + "Contents of the router LSA"; + + container state { + description + "State parameters of the router LSA"; + uses ospfv3-lsdb-router-lsa-state; + } + } + } + + grouping ospfv3-lsdb-network-lsa-structure { + description + "Structural grouping for Network LSA contents within the LSDB"; + + container network-lsa { + description + "Contents of the network LSA"; + + container state { + description + "State parameters of the network LSA"; + uses ospfv3-lsdb-network-lsa-state; + } + } + } + + grouping ospfv3-lsdb-inter-area-prefix-lsa-structure { + description + "Structural grouping for the inter area prefix LSA contents within the + LSDB"; + + container inter-area-prefix-lsa { + description + "Contents of the inter area prefix LSA"; + + container state { + description + "State parameters of the inter area prefix LSA"; + uses ospfv3-lsdb-inter-area-prefix-lsa-state; + } + + } + } + + grouping ospfv3-lsdb-inter-area-router-lsa-structure { + description + "Structural grouping for the inter area router LSA contents within the + LSDB"; + + container inter-area-router-lsa { + description + "Contents of the inter area router LSA"; + + container state { + description + "State parameters of the inter area router LSA"; + uses ospfv3-lsdb-inter-area-router-lsa-state; + } + } + } + + grouping ospfv3-lsdb-asexternal-lsa-structure { + description + "Structural grouping for the AS External LSA contents within + the LSDB"; + + container as-external-lsa { + description + "Contents of the AS External LSA"; + + container state { + description + "State parameters for the AS external LSA"; + uses ospfv3-lsdb-asexternal-lsa-state; + } + } + } + + grouping ospfv3-lsdb-nssa-external-lsa-structure { + description + "Structural grouping for the NSSA External LSA contents within + the LSDB"; + + container nssa-external-lsa { + description + "Contents of the NSSA External LSA"; + + container state { + description + "State parameters for the AS external LSA"; + // Other than the LS type, the type 7 LSA format is exactly the same + // as AS-external LSAs + uses ospfv3-lsdb-asexternal-lsa-state; + } + } + } + + grouping ospfv3-lsdb-link-lsa-structure { + description + "Structural grouping for the Link LSA contents within + the LSDB"; + + container link-lsa { + description + "Contents of the Link LSA"; + + container state { + description + "State parameters for the Link LSA"; + uses ospfv3-lsdb-link-lsa-state; + } + } + } + + grouping ospfv3-lsdb-intra-area-prefix-lsa-structure { + description + "Structural grouping for the Intra Area Prefix LSA contents within + the LSDB"; + + container intra-area-prefix-lsa { + description + "Contents of the Intra Area Prefix LSA"; + + container state { + description + "State parameters for the Intra Area Prefix LSA"; + uses ospfv3-lsdb-intra-area-prefix-lsa-state; + } + } + } + + grouping ospfv3-lsdb-grace-lsa-structure { + description + "Structural grouping for the Grace LSA contents within + the LSDB"; + + container grace-lsa { + description + "Contents of the Grace LSA"; + + container state { + description + "State parameters for the Intra Area Prefix LSA"; + uses ospfv3-lsdb-grace-state; + } + } + } + + + grouping ospfv3-lsdb-router-lsa-state { + description + "Parameters of the router LSA"; + + leaf in-maintenance { + type boolean; + description + "Indicates if this LSA was originated in maintenance-mode"; + } + + leaf v-bit { + type boolean; + description + "When set, the router is an endpoint of one or more fully adjacent + virtual links having the described area as transit area"; + } + + leaf e-bit { + type boolean; + description + "When set, the router is an AS boundary router"; + } + + leaf b-bit { + type boolean; + description + "When set, the router is an area border router"; + } + + leaf nt-bit { + type boolean; + description + "When set, the router is an NSSA border router that is + unconditionally translating NSSA-LSAs into AS-external-LSAs"; + } + + uses ospfv3-packet-options; + + leaf advertised-metric { + type arc-ospf-types:ospf-metric; + description + "The metric advertised for all links of this LSA"; + } + + container neighbors { + list neighbor { + leaf type { + type identityref { + base "arc-ospf-types:ROUTER_LSA_TYPES"; + } + description + "The sub-type of the Router LSA."; + } + + leaf metric { + type arc-ospf-types:ospf-metric; + description + "The cost of utilising the link specified independent of TOS"; + } + + leaf interface-id { + type uint32; + description + "The Interface ID assigned to the interface being described"; + } + + leaf neighbor-interface-id { + type uint32; + description + "The Interface ID the neighbor router has associated with the link, + as advertised in the neighbor's Hello packets"; + } + + leaf neighbor-router-id { + type yang:dotted-quad; + description + "The router ID of the remote system"; + } + } + } + } + + grouping ospfv3-lsdb-network-lsa-state { + description + "Parameters of the Network LSA"; + + uses ospfv3-packet-options; + + leaf-list attached-router { + type yang:dotted-quad; + description + "A list of the router ID of the routers that are attached to + the network described by the Network LSA"; + } + } + + grouping ospfv3-lsdb-inter-area-prefix-lsa-state { + description + "Parameters of the inter area prefix LSA"; + + leaf in-maintenance { + type boolean; + description + "Indicates if this LSA was originated in maintenance-mode"; + } + + leaf metric { + type uint32; + description + "The cost of the route."; + } + + uses ospfv3-lsdb-lsa-prefix-options; + + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 prefix"; + } + } + + grouping ospfv3-lsdb-inter-area-router-lsa-state { + description + "Parameters of the inter area router LSA"; + + leaf in-maintenance { + type boolean; + description + "Indicates if this LSA was originated in maintenance-mode"; + } + + uses ospfv3-packet-options; + + leaf metric { + type uint32; + description + "The cost of the route."; + } + + leaf destination-router-id { + type yang:dotted-quad; + description + "The Router ID of the router being described by the LSA"; + } + } + + grouping ospfv3-lsdb-asexternal-lsa-optional-parameters { + description + "Common parameters that are used for OSPFv3 AS External LSAs"; + + leaf forwarding-address { + type inet:ipv6-address-no-zone; + description + "The destination to which traffic for the external prefix + should be advertised."; + } + + leaf external-route-tag { + type uint32; + description + "An opaque tag that set by the LSA originator to carry + information relating to the external route"; + } + + leaf referenced-link-state-id { + type yang:dotted-quad; + description + "Included if and only if Reference LS Type is non-zero."; + } + } + + grouping ospfv3-lsdb-asexternal-lsa-state { + description + "Parameters for the AS External LSA"; + + leaf in-maintenance { + type boolean; + description + "Indicates if this LSA was originated in maintenance-mode"; + } + + leaf e-bit { + type boolean; + description + "The type of external metric"; + } + + leaf f-bit { + type boolean; + description + "If set, a Forwarding Address has been included in the LSA"; + } + + leaf t-bit { + type boolean; + description + "If set, an External Route Tag has been included in the LSA"; + } + + leaf metric-type { + type arc-ospf-types:ospf-metric-type; + description + "The type of metric included within the AS External LSA."; + } + + leaf metric { + type uint32; + description + "The cost of this route. Interpretation depends on the external + type indication."; + } + + leaf referenced-ls-type { + type uint16; + description + "If non-zero, an LSA with this LS type is to be associated with + this LSA"; + } + + uses ospfv3-lsdb-lsa-prefix-options; + + leaf prefix { + description + "The IPv6 prefix"; + + type inet:ipv6-prefix; + } + + uses ospfv3-lsdb-asexternal-lsa-optional-parameters; + } + + grouping ospfv3-lsdb-link-lsa-state { + description + "Parameters for the Link LSA"; + + leaf router-priority { + type uint8; + description + "The Router Priority of the interface attaching the originating + router to the link."; + } + + uses ospfv3-packet-options; + + leaf link-local-interface-address { + type inet:ipv6-address-no-zone; + description + "The originating router's link-local interface address on the link"; + } + + leaf number-of-prefixes { + type uint32; + description + "The number of IPv6 address prefixes contained in the LSA"; + } + + container prefixes { + list prefix { + uses ospfv3-lsdb-lsa-prefix-options; + + leaf prefix { + description + "The IPv6 prefix"; + + type inet:ipv6-prefix; + } + } + } + } + + grouping ospfv3-lsdb-intra-area-prefix-lsa-state { + description + "Parameters for the Intra Area Prefix LSA"; + + leaf in-maintenance { + type boolean; + description + "Indicates if this LSA was originated in maintenance-mode"; + } + + leaf advertised-metric { + type arc-ospf-types:ospf-metric; + description + "The metric advertised for all prefixes of this LSA"; + } + + leaf number-of-prefixes { + type uint16; + description + "The number of IPv6 address prefixes contained in the LSA"; + } + + leaf referenced-ls-type { + type identityref { + base "arc-ospf-types:OSPF_LSA_TYPE"; + } + description + "The LS type"; + } + + leaf referenced-link-state-id { + type yang:dotted-quad; + description + "The referenced LS id"; + } + + leaf referenced-advertising-router { + type yang:dotted-quad; + description + "The referenced advertising router id"; + } + + container prefixes { + list prefix { + leaf metric { + type uint16; + description + "The cost of this prefix"; + } + + uses ospfv3-lsdb-lsa-prefix-options; + + leaf prefix { + description + "The IPv6 prefix"; + + type inet:ipv6-prefix; + } + } + } + + } + + grouping ospfv3-lsdb-grace-state { + description + "State parameters on a per-TLV basis of the Grace LSA"; + + leaf type { + type identityref { + base "arc-ospf-ext-types:GRACE_LSA_TLV_TYPES"; + } + description + "The type of the sub-TLV received within the Grace LSA"; + } + + leaf period { + when "../type = 'GRACE_PERIOD'" { + description + "Include the period specification when the sub-TLV type is indicated + to be of this type"; + } + + type uint32; + units seconds; + description + "The number of seconds that the router's neighbors should advertise + the local system as fully adjacent regardless of database + synchronization state"; + reference "RFC5187"; + } + + leaf reason { + when "../type = 'GRACE_RESTART_REASON'" { + description + "Include the restart reason when the sub-TLV type specifies this + is included"; + } + + type enumeration { + enum UNKNOWN { + value 0; + description + "The reason for the graceful restart is unknown"; + } + enum SOFTWARE_RESTART { + value 1; + description + "The local system is restarting due to a software component + restart"; + } + enum SOFTWARE_RELOAD_UPGRADE { + value 2; + description + "The local system is restarting due to a software reload or + upgrade"; + } + enum CONTROL_PROCESSOR_SWITCH { + value 3; + description + "The local system is restarting due to a switch to a redundant + control plane element"; + } + } + description + "The reason for the graceful restart event occurring, as advertised + by the restarting system"; + reference "RFC5187"; + } + } + + + + grouping ospfv3-lsdb-structure { + description + "Structural grouping for LSDB contents"; + + container lsdb { + // Top-level RO, if this were ever to become writeable then + // the state containers lower down need config false added + config false; + description + "The link-state database for OSPFv3"; + + container state { + description + "Operational state parameters relating to the OSPFv3 + LSDB"; + + uses ospfv3-lsdb-area-state; + } + + container lsa-types { + description + "Enclosing container for a list of LSA types that are + in the LSDB"; + + list lsa-type { + key "type"; + + description + "List of LSA types in the LSDB"; + + leaf type { + type leafref { + path "../state/type"; + } + description + "A reference for the LSA type being described within + the LSDB"; + } + + container state { + description + "Top-level operational state parameters relating to + an LSA"; + uses ospfv3-lsdb-area-lsa-type-state; + } + + container lsas { + description + "Enclosing container for a list of the LSAs of + the specified type received by the system"; + + list lsa { + key "link-state-id advertising-router"; + + description + "List of the LSAs of a specified type in the + LSDB"; + + leaf link-state-id { + type leafref { + path "../state/link-state-id"; + } + description + "Reference to the Link State ID of the LSA"; + } + + leaf advertising-router { + type leafref { + path "../state/advertising-router"; + } + description + "Reference to the advertising router of the LSA"; + } + + container state { + description + "Operational state parameters relating to all + LSA types"; + uses ospfv3-lsdb-area-lsa-state; + } + + uses ospfv3-lsdb-router-lsa-structure { + when "../../state/type = 'arc-ospf-types:ROUTER_LSA'" { + description + "Include the router LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv3-lsdb-network-lsa-structure { + when "../../state/type = 'arc-ospf-types:NETWORK_LSA'" { + description + "Include the network LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv3-lsdb-inter-area-prefix-lsa-structure { + when "../../state/type = " + + "'arc-ospf-types:OSPFV3_INTER_AREA_PREFIX_LSA'" { + description + "Include the inter area prefix LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv3-lsdb-inter-area-router-lsa-structure { + when "../../state/type = " + + "'arc-ospf-types:OSPFV3_INTER_AREA_ROUTER_LSA'" { + description + "Include the inter area router LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv3-lsdb-asexternal-lsa-structure { + when "../../state/type = 'arc-ospf-types:AS_EXTERNAL_LSA'" { + description + "Include the AS external LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv3-lsdb-nssa-external-lsa-structure { + when "../../state/type = 'arc-ospf-types:NSSA_AS_EXTERNAL_LSA'" { + description + "Include the NSSA External LSA hierarchy solely + when that LSA type is being described"; + } + } + + uses ospfv3-lsdb-link-lsa-structure { + when "../../state/type = 'arc-ospf-types:OSPFV3_LINK_LSA'" { + description + "Include the link LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv3-lsdb-intra-area-prefix-lsa-structure { + when "../../state/type = 'arc-ospf-types:OSPFV3_INTRA_AREA_PREFIX_LSA'" { + description + "Include the intra area prefix LSA hierarchy solely when + that LSA type is being described"; + } + } + + uses ospfv3-lsdb-grace-lsa-structure { + when "../../state/type = 'arc-ospf-types:GRACE_LSA'" { + description + "Include the Grace LSA hierarchy solely when + that LSA type is being described"; + } + } + } + } + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-ospfv3.yang b/vendor/arrcus/arcos/v521/arcos-ospfv3.yang new file mode 100644 index 000000000..178ba4200 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-ospfv3.yang @@ -0,0 +1,101 @@ +module arcos-ospfv3 { + + yang-version "1.1"; + + namespace "http://yang.arrcus.com/arcos/ospfv3"; + + prefix "arc-ospfv3"; + + import openconfig-network-instance { prefix "oc-netinst"; } + import arcos-ospf { prefix "arc-ospf"; } + + // Include submodules + include arcos-ospfv3-common; + include arcos-ospfv3-area-interface; + include arcos-ospfv3-lsdb; + + description + "A model for Open Shortest Path First (OSPF) v3 protocol"; + + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:global/arc-ospf:maintenance-mode" + + "/arc-ospf:router-lsa/arc-ospf:config" { + uses ospfv3-maint-router-lsa-config; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:global/arc-ospf:maintenance-mode" + + "/arc-ospf:router-lsa/arc-ospf:state" { + uses ospfv3-maint-router-lsa-config; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:as-scope" { + uses ospfv3-lsdb-structure; + } + + /* + * Augment ospfv3 areas area + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:areas/arc-ospf:area" { + uses ospfv3-lsdb-structure; + } + + /* + * Augment ospfv3 areas area interfaces interface + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:areas/arc-ospf:area" + + "/arc-ospf:interfaces/arc-ospf:interface" { + uses ospfv3-lsdb-structure; + } + + /* + * Augment ospfv3 areas area interfaces interface config + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:areas/arc-ospf:area" + + "/arc-ospf:interfaces/arc-ospf:interface/arc-ospf:config" { + uses ospfv3-area-interface-config; + } + + /* + * Augment ospfv3 areas area interfaces interface state + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:areas/arc-ospf:area" + + "/arc-ospf:interfaces/arc-ospf:interface/arc-ospf:state" { + uses ospfv3-area-interface-config; + } + + /* + * Augment ospfv3 areas area interfaces interface neighbors neighbor + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:areas/arc-ospf:area" + + "/arc-ospf:interfaces/arc-ospf:interface" + + "/arc-ospf:neighbors/arc-ospf:neighbor" { + uses ospfv3-area-interface-neighbor-bfd-structure; + } + + /* + * Augment ospfv3 areas area interfaces interface neighbors neighbor state + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:protocols/oc-netinst:protocol/arc-ospf:ospfv3" + + "/arc-ospf:areas/arc-ospf:area" + + "/arc-ospf:interfaces/arc-ospf:interface" + + "/arc-ospf:neighbors/arc-ospf:neighbor/arc-ospf:state" { + uses ospfv3-area-interface-neighbor-state; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-packet-match-mpls.yang b/vendor/arrcus/arcos/v521/arcos-packet-match-mpls.yang new file mode 100644 index 000000000..8b2a25205 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-packet-match-mpls.yang @@ -0,0 +1,48 @@ +module arcos-packet-match-mpls { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/packet-match-mpls"; + prefix arc-match-mpls; + + grouping mpls-fields-config { + description + "Configuration data of MPLS fields"; + + leaf label-id { + type uint32 { + range "0..1048575"; + } + description + "Match the conditon that an IP packet contains a specific MPLS + label."; + } + } + + grouping mpls-fields-state { + description + "State data of mpls-fields"; + } + + grouping mpls-fields-top { + description + "Destination mpls-fields top level grouping"; + + container mpls { + description + "MPLS fields container"; + + container config { + description + "Configuration data"; + uses mpls-fields-config; + } + + container state { + config false; + description + "State data"; + uses mpls-fields-config; + uses mpls-fields-state; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-platform.yang b/vendor/arrcus/arcos/v521/arcos-platform.yang new file mode 100644 index 000000000..d0676f634 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-platform.yang @@ -0,0 +1,491 @@ +module arcos-platform { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/platform"; + prefix arc-platform; + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the native + ArcOS platform domain. + + Note that while the data-nodes contained within + this model are read/write, it is for purposes + of ArcOS system initialization. Write access is + not permitted to the data-nodes contained within + this data-model. + + Copyright (c) 2016-2020 by Arrcus, Inc. + All rights reserved."; + + revision 2022-12-20 { + description "Add support for ufispace platform s9600-30dx"; + } + + revision 2020-02-26 { + description "Initial version"; + } + + identity ASIC_VENDOR_DEVICE_FAMILY { + description + "Base type for device family"; + } + + identity BROADCOM_XGS { + base ASIC_VENDOR_DEVICE_FAMILY; + description + "Broadcom XGS device family"; + } + + identity BROADCOM_DNX { + base ASIC_VENDOR_DEVICE_FAMILY; + description + "Broadcom DNX device J2 family"; + } + + identity BROADCOM_DNX_JPLUS { + base ASIC_VENDOR_DEVICE_FAMILY; + description + "Broadcom DNX device JPlus family"; + } + + identity BROADCOM_DNX_FABRIC { + base ASIC_VENDOR_DEVICE_FAMILY; + description + "Broadcom DNX device family"; + } + + identity INTEL_TOFINO_SERIES { + base ASIC_VENDOR_DEVICE_FAMILY; + description + "INTEL Tofino device family"; + } + + identity VIRTUAL { + base ASIC_VENDOR_DEVICE_FAMILY; + description + "Virtual device"; + } + + identity ASIC_VENDOR_DEVICE_TYPE { + description + "Base type for asic device type"; + } + + identity BROADCOM_TRIDENT2 { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom TD2 device"; + } + + identity BROADCOM_TOMAHAWK { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom TH device"; + } + + identity BROADCOM_HELIX4 { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom HX4 device"; + } + + identity BROADCOM_TRIDENT3 { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom TD3 device"; + } + + identity BROADCOM_TRIDENT4 { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom TD4 device"; + } + + identity BROADCOM_JERICHOPLUS { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom JPLUS device"; + } + + identity BROADCOM_JERICHO2 { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom J2 device"; + } + + identity BROADCOM_Q2A { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom Q2A device"; + } + + identity BROADCOM_X2C { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom J2C/Q2C device"; + } + + identity BROADCOM_RAMON { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom Ramon device"; + } + + identity BROADCOM_TOMAHAWK3 { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Broadcom TH3 device"; + } + + identity INTEL_TOFINO { + base ASIC_VENDOR_DEVICE_TYPE; + description + "INTEL Tofino 32x100 device"; + } + + identity X86_64 { + base ASIC_VENDOR_DEVICE_TYPE; + description + "Intel x86_64 device"; + } + + identity ARCOS_PLATFORM { + description + "Base type for ARCOS platform"; + } + + identity REDSTONE_XP { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-redstone-xp-r0"; + } + identity SEASTONE_XP { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-seastone-r0"; + } + identity AS5712 { + base ARCOS_PLATFORM; + description + "Accton sysid x86-64-accton-as5712-54x-r0"; + } + identity AS7712 { + base ARCOS_PLATFORM; + description + "Accton sysid x86-64-accton-as7712-32x-r0"; + } + identity HALIBURTON { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-e1031-r0"; + } + identity IX7 { + base ARCOS_PLATFORM; + description + "Quanta sysid x86-64-quanta-ix7-rglbmc-r0"; + } + identity IX8 { + base ARCOS_PLATFORM; + description + "Quanta sysid x86-64-quanta-ix8-rglbmc-r0"; + } + identity IX8A { + base ARCOS_PLATFORM; + description + "Quanta sysid x86-64-quanta-ix8a-dnv-r0"; + } + identity IXAE_COMEDNV { + base ARCOS_PLATFORM; + description + "Quanta sysid x86-64-quanta-ixae-comednv-r0"; + } + identity IXAE_COME { + base ARCOS_PLATFORM; + description + "Quanta sysid x86-64-quanta-ixae-come-r0"; + } + identity IXA_COMEDNV { + base ARCOS_PLATFORM; + description + "Quanta sysid x86-64-quanta-ixa-comednv-r0"; + } + identity IXA_COME { + base ARCOS_PLATFORM; + description + "Quanta sysid x86-64-quanta-ixa-come-r0"; + } + identity SEASTONE_2 { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-seastone-2-r0"; + } + identity AGC5648S { + base ARCOS_PLATFORM; + description + "Delta sysid x86-64-delta-agc5648s-r0"; + } + identity QUESTONE_2 { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-questone-2-r0"; + } + identity QUESTONE_2A { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-questone-2a-r0"; + } + identity AGC9020S { + base ARCOS_PLATFORM; + description + "Delta sysid x86-64-delta-agc9020s-r0"; + } + identity AS4630_54PE { + base ARCOS_PLATFORM; + description + "Accton sysid x86-64-accton-as4630-54pe-r0"; + } + identity AS4630_54TE { + base ARCOS_PLATFORM; + description + "Accton sysid x86-64-accton-as4630-54te-r0"; + } + identity AS7326 { + base ARCOS_PLATFORM; + description + "Accton sysid x86-64-accton-as7326-56x-r0"; + } + identity AS7726_32X { + base ARCOS_PLATFORM; + description + "Accton sysid x86-64-accton-as7726-32x-r0"; + } + identity AS7926 { + base ARCOS_PLATFORM; + description + "Delta sysid x86-64-accton-as7926-80xk-r0"; + } + identity AS7926_40XKE { + base ARCOS_PLATFORM; + description + "Delta sysid x86-64-accton-as7926-40xke-r0"; + } + identity AS7926_40XKE_ROA { + base ARCOS_PLATFORM; + description + "Delta sysid x86-64-accton-as7926-40xke-r0a"; + } + identity AS9926_24D { + base ARCOS_PLATFORM; + description + "Delta sysid x86-64-accton-as9926-24d-r0"; + } + identity S9701_78DC { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9701-78dc-r0"; + } + identity S9510_28DC { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9510-28dc-r0"; + } + identity S9600_72XC { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9600-72xc-r0"; + } + identity UFI_76D { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86_64-ufispace_s9710_76d-r0"; + } + identity S9600_32X { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9600-32x-r0"; + } + identity S9600_30DX { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9600-30dx-r0"; + } + identity S9705_48D { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9705-48d-r7"; + } + + identity S9700_23D { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9700-23d-r7"; + } + + identity S9300-32D { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9300-32d-r0"; + } + + identity S9300-32DB { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9300-32db-r0"; + } + + identity S9301-32DB { + base ARCOS_PLATFORM; + description + "UFISpace sysid x86-64-ufispace-s9301-32db-r0"; + } + + identity S9180_32X { + base ARCOS_PLATFORM; + description + "Ingrasys sysid x86-64-ingrasys-s9180-32x-r0"; + } + + identity AURORA_710 { + base ARCOS_PLATFORM; + description + "Netberg sysid x86-64-netberg-aurora-710-r0"; + } + + identity VM { + base ARCOS_PLATFORM; + description + "Virtual machine"; + } + + identity OS { + base ARCOS_PLATFORM; + description + "ArcOS on virtual or container"; + } + identity RR { + base ARCOS_PLATFORM; + description + "ArcRR on virtual or container"; + } + + identity SILVERSTONE { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-silverstone-r0"; + } + identity SILVERSTONE_DP { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-silverstone-dp-r0"; + } + identity B6910_3C { + base ARCOS_PLATFORM; + description + "Ruijie sysid x86-64-ruijie-b6910-3c-r0"; + } + identity AS9716_32D { + base ARCOS_PLATFORM; + description + "Accton sysid x86-64-accton-as9716-32d-r0"; + } + identity IVYSTONE { + base ARCOS_PLATFORM; + description + "Celestica sysid x86-64-cel-ivystone-r0"; + } + + identity UFI_53DX { + base ARCOS_PLATFORM; + description + "Ufispace sysid x86-64-ufispace-s9700-53dx-r9"; + } + + identity ARCOS_DEPLOYMENT_TYPE { + description + "Base type for ARCOS deployment type"; + } + + identity STANDALONE { + base ARCOS_DEPLOYMENT_TYPE; + description + "Standalone deployment type"; + } + identity DISTRIBUTED { + base ARCOS_DEPLOYMENT_TYPE; + description + "Distributed deployment type"; + } + + container platform { + leaf type { + type identityref { + base ARCOS_PLATFORM; + } + description + "Name of platform"; + } + + leaf family { + type identityref { + base ASIC_VENDOR_DEVICE_FAMILY; + } + description + "Name of asic device family"; + } + + leaf asic { + type identityref { + base ASIC_VENDOR_DEVICE_TYPE; + } + description + "Type of asic device"; + } + + leaf form-factor { + type enumeration { + enum UNKNOWN; + enum 48x10GbE+6x40GbE; + enum 48x25GbE+8x100GbE; + enum 64x25GbE+8x100GbE; + enum 32x100GbE; + enum 32x400GbE; + enum 36x400GbE; + enum 24x400GbE; + enum 48x1GbE+4x10GbE; + enum 48x1GbE+4x25GbE+2x100GbE; + enum 48x25GbE+6x100GbE; + enum 20x100GbE; + enum 40x100GbE; + enum 24x100GbE+6x400GbE; + enum 96x100GbE; + enum 128x100GbE; + enum 80x100GbE; + enum 24x200GbE+8x400GbE; + enum FF_VIRTUAL; + enum FF_CONTAINER; + enum 4x100GbE+24x25GbE; + enum 10x400GbE; + } + description + "Form factor of device"; + } + + leaf deployment-type { + type identityref { + base ARCOS_DEPLOYMENT_TYPE; + } + description + "Kind of deployment standalone/distributed"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-policy-action-types.yang b/vendor/arrcus/arcos/v521/arcos-policy-action-types.yang new file mode 100644 index 000000000..31335c01f --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-policy-action-types.yang @@ -0,0 +1,34 @@ +module arcos-policy-action-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/policy/action/types"; + prefix arc-pol-actn-types; + + identity ACTION_TYPE { + description + "This is an identity of base action-type"; + } + + identity DROP { + base ACTION_TYPE; + description + "drop action type extended from the base action type"; + } + + identity TRANSMIT { + base ACTION_TYPE; + description + "drop action type extended from the base action type"; + } + + identity MARK { + base ACTION_TYPE; + description + "marking action type extended from the base action type"; + } + + identity POLICE { + base ACTION_TYPE; + description + "police action type"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-policy-action.yang b/vendor/arrcus/arcos/v521/arcos-policy-action.yang new file mode 100644 index 000000000..ad00010d3 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-policy-action.yang @@ -0,0 +1,264 @@ +module arcos-policy-action { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/policy/action"; + prefix arc-pol-actn; + + import arcos-policy-action-types { + prefix arc-pol-actn-types; + } + import ietf-inet-types { + prefix inet; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for generic policy actions"; + + + grouping mark-local-tc-drop-precedence-top { + description + "Grouping for drop precedence of local priority"; + + leaf drop-precedence { + type uint8 { + range "0..2"; + } + default "0"; + description + "a drop precedence (0 if not configured)"; + } + } + + grouping mark-local-tc-top { + description + "Grouping for local priority Traffic Class marking"; + leaf local-tc { + type uint8 { + range "0..7"; + } + mandatory true; + description + "Local priority Traffic Class marking value"; + } + } + + grouping mark-config { + description + "mark configuration parameters"; + container config { + description + "Configuration data"; + } + } + + grouping mark-state { + description + "mark state information parameters"; + container state { + config false; + description + "State Information."; + } + } + + grouping mark-top { + description + "Top level container for all types of marking configuration"; + container mark { + description + "Container holding grouping of different marking types"; + uses mark-state; + } + } + + grouping traffic-rate { + description + "Generic rate grouping, to be used consistently by any policy + action that requires provisioning of traffic rate"; + container rate { + description + "traffic rate"; + leaf value { + type uint32 { + range "1..4294967295"; + } + description + "rate-value"; + } + leaf unit { + type enumeration { + enum bps; + enum kbps; + enum mbps; + enum gbps; + } + default "kbps"; + description + "rate-unit"; + } + } + } + + grouping traffic-burst { + description + "Generic burst grouping, to be used consistently by any policy + action that requires provisioning of a burst"; + container burst { + description + "traffic burst"; + leaf value { + type uint32 { + range "1..4294967295"; + } + description + "burst-value"; + } + leaf unit { + type enumeration { + enum bytes; + enum kbytes; + } + default "bytes"; + description + "burst-unit"; + } + } + } + + grouping police-stats-top { + description + "Grouping for police related statistics"; + leaf conform-packets { + type uint64; + description + "Number of packets conformed to committed rate"; + } + leaf conform-bytes { + type uint64; + description + "Number of bytes conformed to committed rate"; + } + leaf exceed-packets { + type uint64; + description + "Number of packets exceeded committed rate but + conformed to peak rate"; + } + leaf exceed-bytes { + type uint64; + description + "Number of bytes exceeded committed rate but + conformed to peak rate"; + } + leaf violate-packets { + type uint64; + description + "Number of packets violated committed/peak rate"; + } + leaf violate-bytes { + type uint64; + description + "Number of bytes violated committed/peak rate"; + } + leaf conform-rate { + type uint64; + description + "Normalized traffic-rate conforming to committed rate"; + } + leaf exceed-rate { + type uint64; + description + "Normalized traffic-rate exceeding committed rate but + conforming to peak rate"; + } + leaf violate-rate { + type uint64; + description + "Normalized traffic-rate violating committed/peak rate"; + } + } + + grouping police-action-attributes { + description + "police action attributes like action type"; + leaf action-type { + type identityref { + base arc-pol-actn-types:ACTION_TYPE; + } + description + "police action type"; + } + } + + grouping police-parameters { + description + "police parameters"; + container committed { + description + "Container for policer's committed rate and burst"; + uses traffic-rate; + uses traffic-burst; + } + container peak { + description + "Container for policer's peak rate and burst"; + uses traffic-rate; + uses traffic-burst; + } + container conform { + description + "action for packets conforming to committed rate"; + uses police-action-attributes; + } + container exceed { + description + "action for packets exceeding to committed rate + but conforming peak rate"; + uses police-action-attributes; + } + container violate { + description + "action for packets violating committed/peak rate"; + uses police-action-attributes; + } + } + + grouping police-config { + description + "police configuration parameters"; + container config { + description + "Configuration data"; + uses police-parameters; + } + } + + grouping police-state { + description + "police state information parameters"; + container state { + config false; + description + "State Information."; + uses police-parameters; + } + } + + grouping police-top { + description + "Top level container for fields in police configuration"; + container police { + description + "police related fields"; + uses police-state; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-policy.yang b/vendor/arrcus/arcos/v521/arcos-policy.yang new file mode 100644 index 000000000..5bdf1612d --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-policy.yang @@ -0,0 +1,260 @@ +module arcos-policy { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/policy"; + prefix arc-pol; + + import arcos-policy-action-types { + prefix arc-pol-actn-types; + } + + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for generic policy definitions. + This is a base data model for policy that different apps + can make use of. This base data model itself does not + expose container for policy (For an example look at + arrcus-qos-policy.yang)"; + + grouping action-attributes { + description + "Grouping for action attributes like action type"; + leaf type { + type identityref { + base arc-pol-actn-types:ACTION_TYPE; + } + description + "This defines action type "; + } + } + + grouping actions-state-top { + description + "Grouping for an action when used in a policy instance"; + container actions { + description + "Container for action data-base in a specific policy/classifier"; + list action { + min-elements 1; + key "type"; + description + "Configuration of classifier associated actions"; + leaf type { + type identityref { + base arc-pol-actn-types:ACTION_TYPE; + } + description + "unique type identifying action"; + } + container state { + config false; + description + "Operational state parameters relating to action"; + uses action-attributes; + } + } + } + } + + grouping actions-top { + description + "Grouping for an action definition. An action holds action specific attributes"; + container actions { + description + "Container for action data-base in a specific policy/classifier"; + list action { + min-elements 1; + key "type"; + description + "Configuration of classifier associated actions"; + leaf type { + type leafref { + path "../config/type"; + } + description + "unique type identifying action"; + } + container config { + description + "Configuration parameters relating to action"; + uses action-attributes; + } + container state { + config false; + description + "Operational state parameters relating to action"; + uses action-attributes; + } + } + } + } + + grouping policy-classifier-state { + description + "Grouping for policy classifier instance statistics"; + + leaf match-packets { + type uint64; + description "Number of packets matched"; + } + leaf match-bytes { + type uint64; + description "Number of bytes matched"; + } + + leaf offered-rate { + type string; + description + "Total offered rate"; + } + leaf dropped-rate { + type string; + description + "Total dropped rate"; + } + } + + grouping policy-classifier-attributes { + description + "Grouping for classifier attributes like name, description, logical operation"; + leaf name { + type string { + length "1..79"; + } + description + "Name of a Classifier entry in a list of Classifiers"; + } + leaf description { + type string { + length "1..254"; + } + description + "Description of a Classifier entry in a list of Classifiers"; + } + } + + grouping policy-classifiers-state-top { + description + "Top-level grouping for set of classifiers/actions potentially to be used in policy instance"; + container classifiers { + config false; + description + "Set of classifiers/actions configured"; + + list classifier { + key "name"; + ordered-by user; + description + "Classifier entry in a policy"; + leaf name { + type string; + description + "unique name identifying classifier "; + } + container state { + config false; + description + "Operational state parameters relating to classifier"; + uses arc-pol:policy-classifier-attributes; + uses arc-pol:policy-classifier-state; + } + uses arc-pol:actions-state-top; + } + } + } + + grouping policy-classifiers-top { + description + "Top-level grouping for set of classifiers/actions in a policy"; + container classifiers { + description + "Set of classifiers/actions configured"; + list classifier { + key "name"; + ordered-by user; + description + "Classifier entry in a policy"; + leaf name { + type leafref { + path "../config/name"; + } + description + "unique name identifying classifier "; + } + container config { + description + "Configuration parameters relating to classifier"; + uses arc-pol:policy-classifier-attributes; + } + container state { + config false; + description + "Operational state parameters relating to classifier"; + uses arc-pol:policy-classifier-attributes; + } + uses arc-pol:actions-top; + } + } + } + + grouping policy-attributes { + description + "Policy attributes like name, description"; + leaf name { + type string { + length "1..79"; + } + description + "Name of a Policy entry in a list of Policies"; + } + leaf description { + type string { + length "1..254"; + } + description + "Description of a Policy entry in a list of Policies"; + } + } + + grouping policies-top { + description + "Grouping for generic definition of Policies"; + container policies { + description + "Container for policy data-base"; + list policy { + key "name"; + ordered-by user; + description + "A specific policy in the policy data-base"; + leaf name { + type leafref { + path "../config/name"; + } + description + "unique name identifying policy "; + } + container config { + description + "Configuration parameters relating to policy"; + uses policy-attributes; + } + container state { + config false; + description + "Operational state parameters relating to policy"; + uses policy-attributes; + } + uses policy-classifiers-top; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-portsec.yang b/vendor/arrcus/arcos/v521/arcos-portsec.yang new file mode 100644 index 000000000..8bfeb4cf5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-portsec.yang @@ -0,0 +1,306 @@ +module arcos-portsec { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/portsec"; + prefix arc-portsec; + + import ietf-inet-types { + prefix inet; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-types { + prefix oc-types; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import ietf-yang-types { + prefix yang; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS Port Sec feature. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-10-19 { + description + "Command added: clear port security learnt-macs"; + } + + revision 2022-08-22 { + description + "port security improved config"; + } + + revision 2022-01-05 { + description + "Initial version"; + } + + typedef violation-status-types { + type enumeration { + enum RESTRICT { + value 0; + description + "The interface does not learn any more mac addresses"; + } + enum SHUTDOWN { + value 1; + description + "The interface goes down"; + } + enum ACTIVE { + value 2; + description + "The interface is active"; + } + } + } + + typedef violation-action-types { + type enumeration { + enum RESTRICT { + value 0; + description + "The interface does not learn anymore mac addresses"; + } + enum SHUTDOWN { + value 1; + description + "The interface goes down"; + } + } + } + + typedef if-state-type { + type enumeration { + enum DOWN { + value 1; + description + "Interface state is down"; + } + enum UP { + value 2; + description + "Interface state is up"; + } + } + } + + container port-security { + description + "Port security top level container"; + + container profiles { + description + "Top level container for security profiles"; + + list profile { + key "name"; + max-elements 256; + description + "List of security profiles"; + + leaf name { + type leafref { + path "../config/name" ; + } + description "Reference to a configured profile name"; + } + + container config { + leaf name { + type string { + pattern + '[a-zA-Z0-9\-_]{1,32}'; + } + description + "Port security profile name"; + } + + leaf limit { + type uint16 { + range 1..1024; + } + mandatory true; + description + "Limit number of mac entries to be learned on a port and if this limit crosses, + action will be taken based on the violation policy configuration"; + } + + leaf violation-policy { + type violation-action-types; + default "RESTRICT"; + description + "Action to be taken when number of mac entries crosses configured limit"; + } + + leaf sticky { + type boolean; + default false; + description + "Do not age out learned mac entries, persist learned mac entries across reboots"; + } + } + } + } + + container state { + description + "Port security state"; + + config false; + + container interfaces { + + list interface { + key "name"; + + leaf name { + type oc-if:base-interface-ref; + description + "Interface name"; + } + + leaf if-status { + type if-state-type; + description + "Port operational status"; + } + + leaf port-security-enable { + type boolean; + description + "Port security enable status"; + } + + leaf profile { + type string; + description + "Port security profile name"; + } + + leaf sticky { + type boolean; + description + "Port sticky status"; + } + + leaf violation-policy { + type violation-action-types; + description + "Configured violation action type"; + } + + leaf limit { + type uint32; + description + "Configured limit count"; + } + + leaf learned-mac-hit-count { + type yang:counter32; + description + "Counter for number of learned mac entries"; + } + + leaf violation-count { + type yang:counter32; + description + "Counter for number of violated mac entries"; + } + + leaf violation-status { + type violation-status-types; + description + "Port Violation Status"; + } + } + + leaf-list "static-mac-list" { + type yang:mac-address; + description + "List of traffic hit static macs"; + } + + leaf-list "sticky-mac-list" { + type yang:mac-address; + description + "List of traffic hit sticky macs"; + } + + leaf-list "learned-mac-list" { + type yang:mac-address; + description + "List of traffic hit learned macs"; + } + } + } + + container internal { + description + "Implementation specific internal state information"; + + config false; + + list interface { + key "name"; + + leaf name { + type oc-if:base-interface-ref; + description + "Interface name"; + } + + list saved-sticky-mac-list { + key "mac-address"; + + description + "Persisted list of sticky mac addresses"; + + leaf mac-address { + type yang:mac-address; + description + "Sticky mac address"; + } + } + } + } + } + rpc clear-port-security { + description + "Request to flush interface data such as learnt MAC addresses"; + input { + leaf interface { + mandatory true; + type oc-if:base-interface-ref; + description + "Interface name to clear"; + } + leaf mac-address { + type yang:mac-address; + description + "Delete learned MAC address for port-security"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-process.yang b/vendor/arrcus/arcos/v521/arcos-process.yang new file mode 100644 index 000000000..0cb0eaf56 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-process.yang @@ -0,0 +1,32 @@ +module arcos-process { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/process"; + prefix arc-process; + + container processes { + description + "ArcOS list of process"; + config false; + + list process { + key "name"; + + description + "Display Arrcus Process Details."; + + config false; + + leaf name { + type string; + description + "Name of the process"; + } + + leaf status { + type string; + description + "Process status"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-puntpath.yang b/vendor/arrcus/arcos/v521/arcos-puntpath.yang new file mode 100644 index 000000000..5576b7f1e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-puntpath.yang @@ -0,0 +1,89 @@ +module arcos-puntpath { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/puntpath"; + prefix arc-puntpath; + + import arcos-runtime { + prefix arc-runtime; + } + import ietf-inet-types { + prefix inet; + } + + grouping puntpath-tunnel-state { + container tunnels { + list tunnel { + key "id"; + description + "The list of punt path tunnels."; + + leaf id { + type leafref { + path "../state/id"; + } + description + "Tunnel Id for the puntpath tunnel."; + } + container state { + description + "Puntpath tunnel state."; + leaf id { + type uint32; + description + "Puntpath tunnel id."; + } + leaf remote-node-name { + type string; + description + "Puntpath tunnel remote node name."; + } + leaf local-endpoint-address { + type inet:ipv4-address-no-zone; + description + "Puntpath tunnel local endpoint address."; + } + leaf remote-endpoint-address { + type inet:ipv4-address-no-zone; + description + "Puntpath tunnel remote endpoint address."; + } + leaf oper-state { + type enumeration { + enum UP { + description + "Tunnel endpoints are reachable."; + } + enum DOWN { + description + "Tunnel endpoints are not reachable."; + } + } + description + "This leaf contains the reachability state of the tunnel"; + } + } + } + } + } + + grouping puntpath-top { + container puntpath { + description + "Arrcus Punt Path internals"; + + container state { + leaf active { + type boolean; + description + "Puntpath tunnel state."; + } + uses puntpath-tunnel-state; + } + } + } + + augment "/arc-runtime:runtime-instances" + + "/arc-runtime:runtime-instance" { + uses puntpath-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos-classifier.yang b/vendor/arrcus/arcos/v521/arcos-qos-classifier.yang new file mode 100644 index 000000000..1b92b799e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos-classifier.yang @@ -0,0 +1,113 @@ +module arcos-qos-classifier { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos/classifier"; + prefix arc-qos-cfr; + + import arcos-classifier { + prefix arc-cfr; + } + import arcos-classifier-filter { + prefix arc-cfr-fltr; + } + import arcos-classifier-filter-types { + prefix arc-cfr-fltr-types; + } + import arcos-qos { + prefix arc-qos; + } + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos classifier definitions. + Expanded from the generic classifier data model (classifier.yang)"; + + + augment "/arc-qos:qos/classifiers/classifier/filters/filter/config" { + uses arc-cfr-fltr:acl-top { + when "(../type = 'arc-cfr-fltr-types:ACL')"; + } + } + + augment "/arc-qos:qos/classifiers/classifier/filters/filter/state" { + uses arc-cfr-fltr:acl-top { + when "(../type = 'arc-cfr-fltr-types:ACL')"; + } + } + + + augment "/arc-qos:qos/classifiers/classifier/filters/filter/config" { + uses arc-cfr-fltr:dscp-top { + when "../type = 'arc-cfr-fltr-types:DSCP'"; + } + } + + augment "/arc-qos:qos/classifiers/classifier/filters/filter/state" { + uses arc-cfr-fltr:dscp-top { + when "../type = 'arc-cfr-fltr-types:DSCP'"; + } + } + + augment "/arc-qos:qos/classifiers/classifier/filters/filter/config" { + uses arc-cfr-fltr:mpls-tc-top { + when "../type = 'arc-cfr-fltr-types:MPLS_TC'"; + } + } + + augment "/arc-qos:qos/classifiers/classifier/filters/filter/state" { + uses arc-cfr-fltr:mpls-tc-top { + when "../type = 'arc-cfr-fltr-types:MPLS_TC'"; + } + } + + augment "/arc-qos:qos/classifiers/classifier/filters/filter/config" { + uses arc-cfr-fltr:local-tc-top { + when "../type = 'arc-cfr-fltr-types:LOCAL_TC'"; + refine "local-tc-value" { + max-elements 1; + } + } + } + + augment "/arc-qos:qos/classifiers/classifier/filters/filter/state" { + uses arc-cfr-fltr:local-tc-top { + when "../type = 'arc-cfr-fltr-types:LOCAL_TC'"; + } + } + + grouping qos-classifier-top { + description + "Top-level grouping for QoS specific classifier database"; + uses arc-cfr:classifiers-top { + refine "classifiers/classifier/filters/filter" { + min-elements 1; + max-elements 1; + } + refine "classifiers/classifier/filters/filter/type" { + must "current() = 'arc-cfr-fltr-types:LOCAL_TC' or " + + "((current() = 'arc-cfr-fltr-types:MPLS_TC' or " + + " current() = 'arc-cfr-fltr-types:DSCP' or " + + " current() = 'arc-cfr-fltr-types:ACL') and " + + " ((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or" + + " (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')))" { + error-message "filter type not supported for qos"; + } + } + } + } + + augment "/arc-qos:qos" { + uses qos-classifier-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos-policy-action-types.yang b/vendor/arrcus/arcos/v521/arcos-qos-policy-action-types.yang new file mode 100644 index 000000000..725579bd1 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos-policy-action-types.yang @@ -0,0 +1,55 @@ +module arcos-qos-policy-action-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos/policy/action/types"; + prefix arc-qos-pol-actn-types; + + import arcos-policy-action-types { + prefix arc-pol-actn-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + + description + "YANG data-model for qos policy action types"; + + + + identity RATE_MAX { + base arc-pol-actn-types:ACTION_TYPE; + description + "maximum rate (aka shape) service action type"; + } + + identity RATE_MIN { + base arc-pol-actn-types:ACTION_TYPE; + description + "minimum guaranteed rate service action type"; + } + + identity RATE_EXCESS { + base arc-pol-actn-types:ACTION_TYPE; + description + "excess (remaining) rate service action type"; + } + + identity PRIORITY { + base arc-pol-actn-types:ACTION_TYPE; + description + "priority (aka low-latency) service action type"; + } + + identity RANDOM_DETECT { + base arc-pol-actn-types:ACTION_TYPE; + description + "Weighted random-detect service action type"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos-policy-deviations.yang b/vendor/arrcus/arcos/v521/arcos-qos-policy-deviations.yang new file mode 100644 index 000000000..7b52257c9 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos-policy-deviations.yang @@ -0,0 +1,145 @@ +module arcos-qos-policy-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos/policy/deviations"; + prefix arc-qos-pol-dev; + + import arcos-qos { + prefix arc-qos; + } + import arcos-qos-classifier { + prefix arc-qos-cfr; + } + import arcos-qos-policy { + prefix arc-qos-pol; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos policy validations + Expanded from the qos policy data model"; + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:name" { + deviate replace { + type leafref { + path "/arc-qos:qos/arc-qos-cfr:classifiers/arc-qos-cfr:classifier/arc-qos-cfr:name"; + } + } + description + "Leafref to qos classifier database"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:rate-min/arc-qos-pol:config/arc-qos-pol:percent" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:config/arc-qos-pol:peak" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:state/arc-qos-pol:peak" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:config/arc-qos-pol:exceed" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:state/arc-qos-pol:exceed" { + deviate not-supported; + description + "Not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:config" + + "/arc-qos-pol:conform" { + deviate not-supported; + description + "specifying conform action-type not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:state" + + "/arc-qos-pol:conform" { + deviate not-supported; + description + "specifying conform action-type not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:config" + + "/arc-qos-pol:exceed" { + deviate not-supported; + description + "specifying exceed action-type not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:state" + + "/arc-qos-pol:exceed" { + deviate not-supported; + description + "specifying exceed action-type not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:config" + + "/arc-qos-pol:violate" { + deviate not-supported; + description + "specifying violate action-type not supported in this release"; + } + + deviation "/arc-qos:qos/arc-qos-pol:policies/arc-qos-pol:policy" + + "/arc-qos-pol:classifiers/arc-qos-pol:classifier" + + "/arc-qos-pol:actions/arc-qos-pol:action" + + "/arc-qos-pol:police/arc-qos-pol:state" + + "/arc-qos-pol:violate" { + deviate not-supported; + description + "specifying violate action-type not supported in this release"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos-policy.yang b/vendor/arrcus/arcos/v521/arcos-qos-policy.yang new file mode 100644 index 000000000..ce7516955 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos-policy.yang @@ -0,0 +1,424 @@ +module arcos-qos-policy { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos/policy"; + prefix arc-qos-pol; + + import arcos-policy { + prefix arc-pol; + } + import arcos-policy-action { + prefix arc-pol-actn; + } + import arcos-policy-action-types { + prefix arc-pol-actn-types; + } + import arcos-qos-policy-action-types { + prefix arc-qos-pol-actn-types; + } + import arcos-qos { + prefix arc-qos; + } + import arcos-qos-classifier { + prefix arc-qos-cfr; + } + import arcos-qos-random-detect { + prefix arc-qos-red; + } + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos policy definitions. + Expanded from the generic policy data model (policy.yang)"; + + + grouping rate-max-parameters { + description + "maximum rate parameters"; + uses arc-pol-actn:traffic-rate; + } + + grouping rate-max-config { + description + "maximum rate configuration parameters"; + container config { + description + "Configuration data"; + uses rate-max-parameters; + } + } + + grouping rate-max-state { + description + "maximum rate state information parameters"; + container state { + config false; + description + "State Information."; + uses rate-max-parameters; + } + } + + grouping rate-max-top { + description + "Top level container for fields in maximum rate configuration"; + container rate-max { + description + "maximum rate related fields"; + uses rate-max-state; + } + } + + + grouping rate-min-parameters { + description + "minimum rate parameters"; + leaf percent { + type uint8 { + range "1..100"; + } + description + "bandwidth guarantee percent"; + } + uses arc-pol-actn:traffic-rate; + } + + grouping rate-min-config { + description + "minimum rate configuration parameters"; + container config { + description + "Configuration data"; + uses rate-min-parameters; + } + } + + grouping rate-min-state { + description + "minimum rate state information parameters"; + container state { + config false; + description + "State Information."; + uses rate-min-parameters; + } + } + + grouping rate-min-top { + description + "Top level container for fields in minimum rate configuration"; + container rate-min { + description + "minimum rate related fields"; + uses rate-min-state; + } + } + + + grouping rate-excess-parameters { + description + "excess rate parameters"; + leaf ratio { + type uint8 { + range "1..100"; + } + description + "bandwidth remaining ratio"; + } + } + + grouping rate-excess-config { + description + "excess rate configuration parameters"; + container config { + description + "Configuration data"; + uses rate-excess-parameters; + } + } + + grouping rate-excess-state { + description + "excess rate state information parameters"; + container state { + config false; + description + "State Information."; + uses rate-excess-parameters; + } + } + + grouping rate-excess-top { + description + "excess rate configuration parameters"; + container rate-excess { + description + "excess rate related fields"; + uses rate-excess-state; + } + } + + + grouping priority-parameters { + description + "priority parameters"; + leaf level { + type uint8 { + range "1..2"; + } + description + "priority level"; + } + } + + grouping priority-config { + description + "priority configuration parameters"; + container config { + description + "Configuration data"; + uses priority-parameters; + } + } + + grouping priority-state { + description + "priority state information parameters"; + container state { + config false; + description + "State Information."; + uses priority-parameters; + } + } + + grouping priority-top { + description + "priority configuration parameters"; + container priority { + description + "priority related fields"; + uses priority-state; + } + } + + grouping random-detect-parameters { + description + "random-detect parameters"; + leaf profile { + type leafref { + path "/arc-qos:qos/arc-qos-red:random-detect/arc-qos-red:profile/arc-qos-red:name"; + } + description + "Name of a random-detect profile"; + } + } + + grouping random-detect-config { + description + "random-detect configuration parameters"; + container config { + description + "Configuration data"; + uses random-detect-parameters; + } + } + + grouping random-detect-state { + description + "random-detect state information parameters"; + container state { + config false; + description + "State Information."; + uses random-detect-parameters; + } + } + + grouping random-detect-top { + description + "random-detect configuration parameters"; + container random-detect { + description + "random-detect related fields"; + uses random-detect-state; + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action" { + uses rate-min-top { + when "./type = 'arc-qos-pol-actn-types:RATE_MIN'"; + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action/rate-min" { + uses rate-min-config { + refine "config/rate/value" { + mandatory true; + } + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action" { + uses rate-max-top { + when "./type = 'arc-qos-pol-actn-types:RATE_MAX'"; + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action/rate-max" { + uses rate-max-config { + refine "config/rate/value" { + mandatory true; + } + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action" { + uses rate-excess-top { + when "./type = 'arc-qos-pol-actn-types:RATE_EXCESS'"; + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action/rate-excess" { + uses rate-excess-config; + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action" { + uses priority-top { + when "./type = 'arc-qos-pol-actn-types:PRIORITY'"; + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action/priority" { + uses priority-config; + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action" { + uses random-detect-top { + when "./type = 'arc-qos-pol-actn-types:RANDOM_DETECT'"; + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions/action/random-detect" { + uses random-detect-config; + } + + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action" { + uses arc-pol-actn:mark-top { + when "./type = 'arc-pol-actn-types:MARK'"; + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action/mark" { + uses arc-pol-actn:mark-config; + } + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action/mark" { + uses arc-pol-actn:mark-state; + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action/mark/config" { + uses arc-pol-actn:mark-local-tc-top; + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action/mark/config" { + uses arc-pol-actn:mark-local-tc-drop-precedence-top; + } + + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action/mark/state" { + uses arc-pol-actn:mark-local-tc-top; + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action/mark/state" { + uses arc-pol-actn:mark-local-tc-drop-precedence-top; + } + + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action" { + uses arc-pol-actn:police-top { + when "./type = 'arc-pol-actn-types:POLICE'"; + } + } + + augment "/arc-qos:qos/policies/policy/classifiers/classifier/actions" + + "/action/police" { + uses arc-pol-actn:police-config { + refine "config/committed/rate/value" { + mandatory true; + description + "rate value in the unit of kbps"; + } + refine "config/committed/burst/value" { + description + "burst value in the unit of bytes"; + } + refine "config/conform/action-type" { + must "current() = 'arc-pol-actn-types:TRANSMIT'" { + error-message "action type not supported for qos policer"; + } + } + refine "config/exceed/action-type" { + must "current() = 'arc-pol-actn-types:DROP'" { + error-message "action type not supported for qos policer"; + } + } + refine "config/violate/action-type" { + must "current() = 'arc-pol-actn-types:DROP'" { + error-message "action type not supported for qos policer"; + } + } + } + } + + + grouping qos-policy-top { + description + "Top-level container for QoS specific policy database"; + uses arc-pol:policies-top { + refine "policies/policy/classifiers/classifier" { + min-elements 1; + max-elements 1000; + } + refine "policies/policy/classifiers/classifier/actions/action/type" { + must "current() = 'arc-qos-pol-actn-types:PRIORITY' or " + + "current() = 'arc-qos-pol-actn-types:RATE_MIN' or " + + "current() = 'arc-qos-pol-actn-types:RATE_EXCESS' or " + + "current() = 'arc-qos-pol-actn-types:RATE_MAX' or " + + "current() = 'arc-pol-actn-types:POLICE' or " + + "((current() = 'arc-qos-pol-actn-types:RANDOM_DETECT') and " + + " ((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS') or " + + " (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + " (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX_JPLUS') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED'))) or " + + "((current() = 'arc-pol-actn-types:MARK') and " + + " ((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')))" { + error-message "action type not supported for qos"; + } + } + } + } + + augment "/arc-qos:qos" { + uses qos-policy-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos-random-detect.yang b/vendor/arrcus/arcos/v521/arcos-qos-random-detect.yang new file mode 100644 index 000000000..208d7636c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos-random-detect.yang @@ -0,0 +1,322 @@ +module arcos-qos-random-detect { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos/random-detect"; + prefix arc-qos-red; + + import arcos-qos { + prefix arc-qos; + } + + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: eng@arrcus.com"; + description + "YANG data-model for Weighted Random Early Detection"; + revision "2022-03-17" { + description + "Introduce feature based WRED enable for VDR platform"; + } + + grouping random-detect-drop-precedence { + description + "Grouping that defines drop-precedence set and related values"; + + leaf-list drop-precedence { + type uint8 { + range "0..2"; + } + + description + "A list of drop-precedence values"; + } + } + + + grouping random-detect-threshold { + description + "Grouping that forms union of required parameters of a threshold"; + + leaf value { + type uint32; + mandatory true; + description + "Threshold value"; + } + + leaf unit { + type enumeration { + enum bytes { + description + "Unit in bytes"; + } + enum kbytes { + description + "Unit in kilobytes"; + } + enum mbytes { + description + "Unit in megabytes"; + } + } + default "kbytes"; + description + "Unit of a threshold value"; + } + } + + + grouping random-detect-entry-parameters { + description + "Grouping of Weighted Random Early Detect entry specific parameters"; + + container min-threshold { + description + "Container holding minimum threshold parameters"; + + uses random-detect-threshold; + } + + container max-threshold { + description + "Container holding maximum threshold parameters"; + + uses random-detect-threshold; + } + + leaf probability { + type uint8 { + range 1..100; + } + mandatory true; + description + "Probability value that determines drop eligibility"; + } + + leaf ecn-mark { + type boolean; + default false; + description + "ECN marking enabled or disabled"; + } + } + + + grouping random-detect-entry-default-parameters { + description + "Grouping of Weighted Random Early Detect default entry"; + + container entry-default { + description + "Container for Weighted Random Early Detect default entry"; + + presence "Generic threshold parameters"; + uses random-detect-entry-parameters; + } + } + + grouping random-detect-entry-template-top { + description + "Grouping of a list of entry parameters"; + + list entry { + key "entry-name"; + description + "An entry specific parameters set"; + + leaf entry-name { + type string { + length "1..79"; + } + + description + "A WRED entry name for which this parameters set"; + } + + container config { + description + "Configuration data"; + uses random-detect-entry-parameters; + } + + container state { + config false; + description + "Operational data"; + uses random-detect-entry-parameters; + } + } + } + + + grouping random-detect-profile-parameters { + description + "Grouping of Weighted Random Early Detect profile parameters"; + + leaf name { + type string { + length "1..79"; + } + description + "Name of a Weighted Random Early Detect profile"; + } + + leaf type { + type enumeration { + enum NONE { + description + "Type NONE means Weighted Random Detect does not have any sub-classification + There is only one threshold parameters set subject to all traffic where + enabled as an instance"; + } + enum DROP_PRECEDENCE { + description + "Weighted Random Detect may have sub-classes, each with set of + drop-precedence values and threshold parameters set"; + } + } + default "NONE"; + description + "Type of Weighted Random Early Detect entry classification rule"; + } + + leaf weight { + type uint8 { + range "1..15"; + } + default 9; + description + "Weighted Random Early Detect queue weight"; + } + } + + + grouping random-detect-profile-template-top { + description + "Grouping for a list of Weighted Random Early Detect profile templates"; + + list profile { + key name; + description + "Weighted Random Early Detect profile template"; + + leaf name { + type leafref { + path "../config/name"; + } + description + "Weighted Random Early Detect profile template name"; + } + + container config { + description + "Configuration parameters of a Weighted Random Early Detect profile template"; + + uses random-detect-profile-parameters; + uses random-detect-entry-default-parameters; + } + + container state { + config false; + description + "Operational state parameters of a Weighted Random Early Detect profile template"; + + uses random-detect-profile-parameters; + uses random-detect-entry-default-parameters; + } + + uses random-detect-entry-template-top { + when "config/type != 'NONE'"; + augment "entry/config" { + uses random-detect-drop-precedence { + when "../../config/type = 'DROP_PRECEDENCE'"; + } + } + augment "entry/state" { + uses random-detect-drop-precedence { + when "../../config/type = 'DROP_PRECEDENCE'"; + } + } + } + } + } + + grouping random-detect-profile-top { + description + "Top level grouping for a Weighted Random Early Detect"; + + container random-detect { + description + "Weighted Random Early Detect profile template configuration"; + + uses random-detect-profile-template-top; + } + } + + augment "/arc-qos:qos" { + uses random-detect-profile-top { + when "(/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_XGS') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHO2') or " + + "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_X2C') or" + + "(/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')"; + } + } + + + grouping random-detect-entry-state { + description + "Grouping of a list of drop precedence entry parameters"; + + list entry { + key "entry-name"; + description + "An entry specific parameters"; + + leaf entry-name { + type string; + description + "An entry name for which this parameters set"; + } + + uses random-detect-entry-parameters; + } + } + + grouping random-detect-instance-state { + description + "Grouping for a Weighted Random Early Detect profile instance"; + + container state { + config false; + + uses random-detect-profile-parameters; + + leaf dropcount { + type uint64; + description + "Dropped/ecn-marked packets by Weighted Random Detect algorithm"; + } + + uses random-detect-entry-state; + } + } + + grouping random-detect-instance-top { + description + "Weighted Random Early Detect instance"; + + container random-detect { + description + "Weighted Random Early Detect instantiation of a profile"; + uses random-detect-instance-state; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos-tablemap-deviations.yang b/vendor/arrcus/arcos/v521/arcos-qos-tablemap-deviations.yang new file mode 100644 index 000000000..de3a7c3b0 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos-tablemap-deviations.yang @@ -0,0 +1,47 @@ +module arcos-qos-tablemap-deviations { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos/tablemap/deviations"; + prefix arc-qos-tbl-dev; + + import arcos-qos { + prefix arc-qos; + } + import arcos-qos-tablemap-types { + prefix arc-qos-tbl-types; + } + import arcos-qos-tablemap { + prefix arc-qos-tbl; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos tablemap annotations"; + + deviation "/arc-qos:qos/arc-qos-tbl:tablemaps/arc-qos-tbl:tablemap" + + "/arc-qos-tbl:config" { + deviate add { + must "(boolean(arc-qos-tbl:from-type = 'arc-qos-tbl-types:LOCAL_TC') or + boolean(arc-qos-tbl:to-type = 'arc-qos-tbl-types:LOCAL_TC'))" { + error-message "from or to type has to be local-tc"; + } + } + } + + deviation "/arc-qos:qos/arc-qos-tbl:tablemaps/arc-qos-tbl:tablemap" + + "/arc-qos-tbl:config" { + deviate add { + must "(boolean(arc-qos-tbl:from-type != 'arc-qos-tbl-types:LOCAL_TC') or + boolean(arc-qos-tbl:to-type != 'arc-qos-tbl-types:LOCAL_TC'))" { + error-message "from or to type,one of them has to be other than local-tc"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos-tablemap-types.yang b/vendor/arrcus/arcos/v521/arcos-qos-tablemap-types.yang new file mode 100644 index 000000000..839494d87 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos-tablemap-types.yang @@ -0,0 +1,47 @@ +module arcos-qos-tablemap-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos/tablemap/types"; + prefix arc-qos-tbl-types; + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + + description + "YANG data-model for tablemap types"; + + + + identity MAP_TYPE { + description + "This is an identity of base type"; + } + identity COS { + base MAP_TYPE; + description + "Class of Service code point type"; + } + identity DSCP { + base MAP_TYPE; + description + "Differentiated Services code point type"; + } + identity MPLS_TC { + base MAP_TYPE; + description + "MPLS TC code point type"; + } + identity LOCAL_TC { + base MAP_TYPE; + description + "Local Priority Traffic Class"; + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos-tablemap.yang b/vendor/arrcus/arcos/v521/arcos-qos-tablemap.yang new file mode 100644 index 000000000..33853e2e1 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos-tablemap.yang @@ -0,0 +1,247 @@ +module arcos-qos-tablemap { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos/tablemap"; + prefix arc-qos-tbl; + + import arcos-qos { + prefix arc-qos; + } + import arcos-qos-tablemap-types { + prefix arc-qos-tbl-types; + } + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for qos tablemap definitions. + Expanded from the generic tablemap data model (tablemap.yang)"; + + + typedef value-type { + type union { + type uint32 { + range "0..63"; + } + type enumeration { + enum ANY { + description + "Indicates any valid value (e.g., wildcard)"; + } + } + } + } + + + grouping tablemap-from-value { + description + "Grouping for non local-tc from-value"; + + leaf-list from-value { + min-elements 1; + type value-type; + + description + "List of values to be mapped from"; + } + } + + grouping tablemap-to-value { + description + "Grouping for non local-tc to-value"; + + leaf to-value { + mandatory true; + type uint32 { + range "0..63"; + } + description + "Value to be mapped to"; + } + } + + + grouping local-tc-entry-top { + description + "Grouping that holds local-tc value and drop-precedence"; + + leaf local-tc-value { + type uint32 { + range "0..7"; + } + description + "Local Priority Traffic Class Value"; + } + leaf drop-precedence { + type uint32 { + range "0..1"; + } + default "0"; + description + "a drop precedence (0 if not configured)"; + } + } + + + grouping local-tc-entries-top { + description + "Grouping for list of local-tc entries"; + + list local-tc-entry { + key "local-tc-value drop-precedence"; + min-elements 1; + + description + "a local-tc value with drop-precedence"; + + leaf local-tc-value { + type leafref { + path "../config/local-tc-value"; + } + description + "unique value to be mapped to"; + } + leaf drop-precedence { + type leafref { + path "../config/drop-precedence"; + } + description + "a drop precedence (0 if not configured)"; + } + container config { + description + "Configuration parameters relating to tablemap"; + + uses local-tc-entry-top; + } + container state { + config false; + description + "Operational state parameters relating to tablemap"; + + uses local-tc-entry-top; + } + } + } + + grouping tablemap-attributes { + description + "Main top-level grouping for Tablemap attributes"; + leaf name { + type string { + length "1..79"; + } + description + "Give name of a table-map:"; + } + leaf description { + type string { + length "1..254"; + } + description + "tablemap description"; + } + leaf to-type { + type identityref { + base arc-qos-tbl-types:MAP_TYPE; + } + mandatory true; + description + "type of a codepoint to be mapped to"; + } + leaf from-type { + type identityref { + base arc-qos-tbl-types:MAP_TYPE; + } + mandatory true; + description + "type of a codepoint to be mapped from"; + } + } + + grouping tablemaps-top { + description + "Top-level grouping for QoS specific tablemap database"; + container tablemaps { + description + "Set of tablemaps configured"; + list tablemap { + key "name"; + description + "A specific tablemap in the tablemap data-base"; + leaf name { + type leafref { + path "../config/name"; + } + description + "unique name identifying tablemap "; + } + container config { + description + "Configuration parameters relating to tablemap"; + uses tablemap-attributes { + refine "from-type" { + must "current() = 'arc-qos-tbl-types:LOCAL_TC' or " + + "current() = 'arc-qos-tbl-types:DSCP' or " + + "current() = 'arc-qos-tbl-types:COS' or " + + "((current() = 'arc-qos-tbl-types:MPLS_TC') and " + + " ((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')))" { + error-message "table type not supported for qos"; + } + } + refine "to-type" { + must "current() = 'arc-qos-tbl-types:LOCAL_TC' or " + + "current() = 'arc-qos-tbl-types:DSCP' or " + + "current() = 'arc-qos-tbl-types:COS' or " + + "((current() = 'arc-qos-tbl-types:MPLS_TC') and " + + " ((/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or " + + " (/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')))" { + error-message "table type not supported for qos"; + } + } + } + } + container state { + config false; + description + "Operational state parameters relating to tablemap"; + uses tablemap-attributes; + } + + uses local-tc-entries-top { + augment "local-tc-entry/config" { + when "../../config/to-type = 'arc-qos-tbl-types:LOCAL_TC'"; + uses tablemap-from-value; + } + augment "local-tc-entry/state" { + when "../../config/to-type = 'arc-qos-tbl-types:LOCAL_TC'"; + uses tablemap-from-value; + } + + augment "local-tc-entry/config" { + when "../../config/from-type = 'arc-qos-tbl-types:LOCAL_TC'"; + uses tablemap-to-value; + } + augment "local-tc-entry/state" { + when "../../config/from-type = 'arc-qos-tbl-types:LOCAL_TC'"; + uses tablemap-to-value; + } + } + } + } + } + + augment "/arc-qos:qos" { + uses tablemaps-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-qos.yang b/vendor/arrcus/arcos/v521/arcos-qos.yang new file mode 100644 index 000000000..70bfa697c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-qos.yang @@ -0,0 +1,46 @@ +module arcos-qos { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/qos"; + prefix arc-qos; + + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for top-level QoS"; + + grouping qos-top { + description + "Top level grouping for QoS"; + container qos { + description + "Quality of Service"; + action counters { + description + "Clear all QoS statistics"; + output { + leaf result { + type string; + description + "The status of the Clear operation"; + } + } + } + } + } + + uses qos-top { + when "(/arc-platform:platform/arc-platform:asic != 'arc-platform:X86_64') or " + + "(/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-relay-agent.yang b/vendor/arrcus/arcos/v521/arcos-relay-agent.yang new file mode 100644 index 000000000..9162596be --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-relay-agent.yang @@ -0,0 +1,40 @@ +module arcos-relay-agent { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/relay-agent"; + prefix arc-relay; + + import openconfig-interfaces { + prefix oc-if; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS DHCP Relay Agent. + Copyright (c) 2020 by Arrcus, Inc. + All rights reserved."; + + rpc clear-relay-agent-counters { + description + "Request to clear the DHCP relay counters, either globally + or per interface, if specified"; + + input { + leaf interface { + type oc-if:interface-id; + description + "Interface ID for which to clear the counters"; + } + } + } + +} \ No newline at end of file diff --git a/vendor/arrcus/arcos/v521/arcos-rib-bgp-lpm.yang b/vendor/arrcus/arcos/v521/arcos-rib-bgp-lpm.yang new file mode 100644 index 000000000..182fde7a5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-rib-bgp-lpm.yang @@ -0,0 +1,187 @@ +module arcos-rib-bgp-lpm { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/rib/bgp/lpm"; + prefix arc-rib-bgp-lpm; + + import openconfig-network-instance { + prefix oc-ni; + } + + import ietf-inet-types { + prefix inet; + } + + import openconfig-rib-bgp { + prefix oc-rib-bgp; + } + + import arcos-openconfig-rib-bgp-augments { + prefix arc-oc-rib-bgp-aug; + } + + import arcos-openconfig-bgp-types { + prefix arc-oc-bgp-types; + } + + grouping bgp-lpm-entry { + description + "BGP RIB LPM show command"; + leaf prefix { + type arc-oc-bgp-types:bgp-prefix-type; + } + } + + grouping bgp-rib-lpm-top { + container bgp-rib-lpm { + description + "Perform a longest prefix match lookup in the BGP RIB"; + action ipv4-unicast { + description + "IPV4 route lookup"; + input { + leaf prefix { + type inet:ipv4-prefix; + mandatory true; + description + "The IPV4 address to be looked up from the BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + + action ipv6-unicast { + description + "IPV6 route lookup"; + input { + leaf prefix { + type inet:ipv6-prefix; + mandatory true; + description + "The IPV6 address to be looked up from the BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + + action ipv4-labeled-unicast { + description + "IPV4 labeled unicast route lookup"; + input { + leaf prefix { + type inet:ipv4-prefix; + mandatory true; + description + "The IPV4 address to be looked up from the BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + + action ipv6-labeled-unicast { + description + "IPV6 labeled unicast route lookup"; + input { + leaf prefix { + type inet:ipv6-prefix; + mandatory true; + description + "The IPV6 address to be looked up from the BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + + action ipv4-flowspec { + description + "Flowspec IPV4 unicast route lookup"; + input { + leaf prefix { + type string; + mandatory true; + description + "The Flowspec ipv4 unicast address to be looked up from BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + + action ipv6-flowspec { + description + "Flowspec IPV6 unicast route lookup"; + input { + leaf prefix { + type string; + mandatory true; + description + "The Flowspec ipv6 unicast address to be looked up from the BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + + action l2vpn-evpn { + description + "L2VPN EVPN route lookup"; + input { + leaf prefix { + type string; + mandatory true; + description + "The L2VPN EVPN address to be looked up from the BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + + action l3vpn-ipv4-unicast { + description + "L3VPN IPV4 Unicast route lookup"; + input { + leaf prefix { + type string; + mandatory true; + description + "The l3vpn ipv4 address to be looked up from the BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + + action l3vpn-ipv6-unicast { + description + "L3VPN IPV6 Unicast route lookup"; + input { + leaf prefix { + type string; + mandatory true; + description + "The l3vpn ipv6 address to be looked up from the BGP RIB"; + } + } + output { + uses bgp-lpm-entry; + } + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" { + uses bgp-rib-lpm-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-rib-clear.yang b/vendor/arrcus/arcos/v521/arcos-rib-clear.yang new file mode 100644 index 000000000..8d27b91db --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-rib-clear.yang @@ -0,0 +1,44 @@ +module arcos-rib-clear { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/rib/clear"; + prefix arc-rib-clr; + + import ietf-inet-types { prefix inet; } + + container rib-clear { + action v4-route { + input { + leaf prefix { + type inet:ipv4-prefix; + mandatory true; + description + "The IPv4 prefix to be deleted from RIB"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + action v6-route { + input { + leaf prefix { + type inet:ipv6-prefix; + mandatory true; + description + "The IP64 prefix to be deleted from RIB"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-rib-debug.yang b/vendor/arrcus/arcos/v521/arcos-rib-debug.yang new file mode 100644 index 000000000..4f15f3e17 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-rib-debug.yang @@ -0,0 +1,122 @@ +module arcos-rib-debug { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/rib/debug"; + prefix arc-rib-dbg; + + typedef rib-debug-state { + type enumeration { + enum on { + description + "Enable debug"; + } + enum off { + description + "Disable debug"; + } + } + } + + typedef rib-debug-type { + type enumeration { + enum route { + description + "Control route/prefix debugs"; + } + enum path { + description + "Control path debugs"; + } + enum rnh { + description + "Control rnh core debugs"; + } + enum err { + description + "Control error debugs"; + } + enum ds { + description + "Control DS API debugs"; + } + enum rnh-ds { + description + "Control DS RNH API debugs"; + } + enum mpsc { + description + "Control MPSC interaction debugs"; + } + enum ptrack-event { + description + "Control prefix tracker event debugs"; + } + enum ptrack-client { + description + "Control prefix tracker client debugs"; + } + enum client { + description + "Control client event debugs"; + } + enum oper { + description + "Control Oper command debugs"; + } + enum all { + description + "Control All debugs"; + } + } + } + + container rib-debug { + description + "RIB debug control"; + action ipv4 { + input { + leaf debug { + type rib-debug-type; + mandatory true; + description + "Debug to be controlled"; + } + leaf op { + type rib-debug-state; + mandatory true; + description + "turn on/off operation"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + action ipv6 { + input { + leaf debug { + type rib-debug-type; + mandatory true; + description + "Debug to be controlled"; + } + leaf op { + type rib-debug-state; + mandatory true; + description + "turn on/off debug"; + } + } + output { + leaf result { + type string; + description + "The status of operation"; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-rib-lpm.yang b/vendor/arrcus/arcos/v521/arcos-rib-lpm.yang new file mode 100644 index 000000000..b26fa2fdf --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-rib-lpm.yang @@ -0,0 +1,218 @@ +module arcos-rib-lpm { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/rib/lpm"; + prefix arc-rib-lpm; + + import openconfig-network-instance { + prefix oc-ni; + } + import openconfig-mpls-types { + prefix oc-mplst; + } + import openconfig-policy-types { + prefix oc-pol-types; + } + import ietf-inet-types { + prefix inet; + } + import ietf-yang-types { + prefix yang; + } + import arcos-rib { + prefix arc-rib; + } + + grouping rib-entry-nexthop-state { + description + "Parameters relating to a next-hop within the RIB entry"; + + leaf next-hop { + type union { + type inet:ip-address-no-zone; + type arc-rib:rib-defined-next-hop; + } + description + "The next-hop that is to be used for the route + - this may be specified as an IP address, an interface + or a pre-defined next-hop type - for instance, DROP."; + } + leaf via { + type union { + type inet:ip-address-no-zone; + type arc-rib:rib-defined-next-hop; + } + description + "The next-hop that is to be used for the route + - this may be specified as an IP address, an interface + or a pre-defined next-hop type - for instance, DROP."; + } + + leaf recurse { + type boolean; + default false; + description + "Determines whether the next-hop should be allowed to + be looked up recursively." ; + } + leaf weight { + type uint32; + description + "The weight of the next-hop. Traffic is balanced according to + the ratio described by the relative weights of the next hops + that exist for the RIB entry. Note that all next-hops that are + specified are assumed to be active next-hops and therefore + eligible (and selected) to be installed in the FIB, and hence + used for packet forwarding."; + } + + leaf-list pushed-mpls-label-stack { + type oc-mplst:mpls-label; + ordered-by user; + description + "The MPLS label stack imposed when forwarding packets to the + next-hop + - the stack is encoded as a leaf list whereby the order of the + entries is such that the first entry in the list is the + label at the bottom of the stack to be pushed. + + To this end, a packet which is to forwarded to a device using + a service label of 42, and a transport label of 8072 will be + represented with a label stack list of [42, 8072]. + + The MPLS label stack list is ordered by the user, such that no + system re-ordering of leaves is permitted by the system. + + A swap operation is reflected by entries in the + popped-mpls-label-stack and pushed-mpls-label-stack nodes."; + + } + leaf interface { + type string; + } + } + + grouping next-hops { + description + "Grouping for next hops"; + list next-hop { + uses rib-entry-nexthop-state; + } + } + + grouping origin { + description + "Grouping for route producer"; + leaf origin-protocol { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "The protocol from which the RIB entry was learned."; + } + leaf metric { + type uint32; + description + "A metric which is utilised to specify the preference of route"; + } + + leaf pref { + type uint32; + description + "A preference which is utilised to select best owner among multiple + producers of the same prefix"; + } + leaf tag { + type uint32; + description + " This can be used by protocols to filter the redistributed route + as per the protocol redistribution policy"; + } + leaf local-label { + type uint32; + description + " This is incoming label assigned to this route"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was update."; + } + uses rib-entry-nexthop-state; + } + grouping ipv4-entry { + description + "Grouping for forwarding entries by lookup keys"; + + leaf prefix { + type inet:ipv4-prefix; + description + "The IPv4 prefix corresponding to the route"; + } + leaf best-protocol { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + uses origin; + } + + grouping ipv6-entry { + description + "Grouping for forwarding entries by lookup keys"; + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 prefix corresponding to the route"; + } + leaf best-protocol { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + uses origin; + } + + grouping rib-lpm-top { + container rib-lpm { + description + "Perform a Longest Prefix Match lookup in the RIB"; + action v4-route { + description + "IPv4 route lookup"; + input { + leaf address { + type inet:ipv4-address; + mandatory true; + description + "The IPv4 address to be looked up from RIB"; + } + } + output { + uses ipv4-entry; + } + } + action v6-route { + description + "IPv6 route lookup"; + input { + leaf address { + type inet:ipv6-address; + mandatory true; + description + "The IPv6 address to be looked ip from RIB"; + } + } + output { + uses ipv6-entry; + } + } + } + } + augment "/oc-ni:network-instances/oc-ni:network-instance" { + uses rib-lpm-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-rib.yang b/vendor/arrcus/arcos/v521/arcos-rib.yang new file mode 100644 index 000000000..3ac8891a5 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-rib.yang @@ -0,0 +1,2032 @@ +module arcos-rib { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/rib"; + prefix arc-rib; + + import openconfig-policy-types { + prefix oc-pol-types; + } + import openconfig-network-instance { + prefix oc-netinst; + } + import openconfig-network-instance-types { + prefix oc-ni-types; + } + import ietf-inet-types { + prefix inet; + } + import openconfig-mpls-types { + prefix oc-mplst; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-types { + prefix oc-types; + } + import ietf-interfaces { + prefix ietf-if; + } + import ietf-yang-types { + prefix yang; + } + import openconfig-yang-types { + prefix oc-yang; + } + import arcos-srv6-types { + prefix arc-srv6-types; + } + + organization + "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place, + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module lists the RIB related information. + Copyright 2019-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-12-12 { + description + "* Add flood-and-learn attribute to support static vxlan."; + } + + revision 2021-11-10 { + description + "* Add label type and ifindex to label entry."; + } + + typedef route-type-value { + type enumeration { + enum NONE { + description "None"; + } + enum ISIS_L1 { + description "ISIS L1"; + } + enum ISIS_L2 { + description "ISIS L2"; + } + enum IBGP { + description "IBGP"; + } + enum EBGP { + description "EBGP"; + } + enum OSPF_INTRA_AREA { + description + "OSPF Intra-Area"; + } + enum OSPF_INTER_AREA { + description + "OSPF Inter-Area"; + } + enum OSPF_EXTERNAL_1 { + description + "OSPF External Type-1"; + } + enum OSPF_EXTERNAL_2 { + description + "OSPF External Type-2"; + } + } + } + + typedef label-type-value { + type enumeration { + enum NONE { + description "None"; + } + enum DEAGG { + description "Deaggregate Label"; + } + enum IMET { + description "IMET label"; + } + enum ESI { + description "ESI label"; + } + enum NODE { + description "Node SID label"; + } + enum ADJ { + description "Adjacency SID label"; + } + enum ETE { + description "ETE label"; + } + } + } + + typedef rib-path-type { + type enumeration { + enum "RECURSIVE" { + value 1; + } + enum "CONNECTED_V4" { + value 2; + } + enum "GLEAN_V4" { + value 3; + } + enum "LOCAL_V4" { + value 4; + } + enum "CONNECTED_V6" { + value 5; + } + enum "LOCAL_V6" { + value 6; + } + enum "GLEAN_V6" { + value 7; + } + } + } + + typedef route-client-flags-type { + type bits { + bit stale { + position 0; + } + bit mpls-stale { + position 1; + } + } + } + + grouping rib-config { + description + "Configuration parameters relating to RIB + for a particular address family."; + leaf address-family { + type identityref { + base oc-types:ADDRESS_FAMILY; + } + description + "The address family of entries that are described by the + RIB."; + } + } + + grouping loc-args { + container locator-args { + leaf loc-arg { + type inet:ip-address-no-zone; + description + "The mobile gateway locator address"; + } + leaf loc-len { + type uint32; + description + "Length in bits of the locator portion of the address"; + } + } + } + + // identity statements + + identity RIB_DEFINED_NEXT_HOP { + description + "A base identity type of local defined next-hops"; + } + + identity DROP { + base RIB_DEFINED_NEXT_HOP; + description + "Discard traffic for the corresponding destination"; + } + + // typedef statements + + typedef rib-defined-next-hop { + type identityref { + base RIB_DEFINED_NEXT_HOP; + } + description + "Pre-defined next-hop designation for locally generated + routes"; + } + + grouping rib-entry-state { + description + "Operational state parameters relating to a RIB entry"; + leaf origin-protocol { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "The protocol from which the RIB entry was learned."; + } + leaf metric { + type uint32; + description + "A metric which is utilised to specify the preference of route"; + } + leaf pref { + type uint32; + description + "A preference which is utilised to select best owner among multiple + producers of the same prefix"; + } + leaf tag { + type uint32; + description + " This can be used by protocols to filter the redistributed route + as per the protocol redistribution policy"; + } + } + + grouping rib-entry-nexthop-state { + description + "Parameters relating to a next-hop within the RIB entry"; + leaf next-hop { + type union { + type inet:ip-address-no-zone; + type rib-defined-next-hop; + } + description + "The next-hop that is to be used for the route + - this may be specified as an IP address, an interface + or a pre-defined next-hop type - for instance, DROP."; + } + leaf recurse { + type boolean; + default "false"; + description + "Determines whether the next-hop should be allowed to + be looked up recursively."; + } + leaf weight { + type uint32; + description + "The weight of the next-hop. Traffic is balanced according to + the ratio described by the relative weights of the next hops + that exist for the RIB entry. Note that all next-hops that are + specified are assumed to be active next-hops and therefore + eligible (and selected) to be installed in the FIB, and hence + used for packet forwarding."; + } + leaf-list pushed-mpls-label-stack { + type oc-mplst:mpls-label; + ordered-by user; + description + "The MPLS label stack imposed when forwarding packets to the + next-hop + - the stack is encoded as a leaf list whereby the order of the + entries is such that the first entry in the list is the + label at the bottom of the stack to be pushed. + + To this end, a packet which is to forwarded to a device using + a service label of 42, and a transport label of 8072 will be + represented with a label stack list of [42, 8072]. + + The MPLS label stack list is ordered by the user, such that no + system re-ordering of leaves is permitted by the system. + + A swap operation is reflected by entries in the + popped-mpls-label-stack and pushed-mpls-label-stack nodes."; + } + leaf interface { + type string; + } + leaf network-instance { + type string; + } + leaf backup { + type boolean; + description + "Specifies whether the path is used as backup"; + } + leaf vxlan { + type boolean; + default "false"; + description + "recursive path pointing to a VXLAN tunnel next-hop"; + } + leaf srv6 { + type boolean; + default "false"; + description + "recursive path pointing to a SRv6 tunnel next-hop"; + } + leaf nh-tunnel-id { + type uint32; + description + "tunnel-id for remote tunnel next-hop"; + } + leaf vni-id { + type uint32; + description + "VNI ID of this path."; + } + leaf rtep-mac { + type oc-yang:mac-address; + description + "remote tunnel-endpoint MAC address for a vxlan tunnel next-hop"; + } + leaf pathid { + type uint64; + description + " This is pathid assigned to this path"; + } + leaf mpls_pathid { + type uint64; + description + " This is pathid assigned to this path on account of ldp or other mpls protocol update"; + } + } + + grouping next-hops { + description + "Grouping for next hops"; + container next-hops { + config false; + description + "Enclosing container for the list of next-hops associated + with the forwarding entry"; + list next-hop { + uses rib-entry-nexthop-state; + } + } + } + + grouping origin { + description + "Grouping for route producer"; + container origins { + config false; + description + "Enclosing container for the list of next-hops associated + with the forwarding entry"; + list origin { + leaf origin-protocol { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "The protocol from which the RIB entry was learned."; + } + leaf metric { + type uint32; + description + "A metric which is utilised to specify the preference of route"; + } + leaf pref { + type uint32; + description + "A preference which is utilised to select best owner among multiple + producers of the same prefix"; + } + leaf tag { + type uint32; + description + " This can be used by protocols to filter the redistributed route + as per the protocol redistribution policy"; + } + leaf route-type { + type route-type-value; + description + "Route type"; + } + leaf local-label { + type uint32; + description + " This is incoming label assigned to this route"; + } + leaf label-index { + type uint32; + description + " This is incoming label index assigned to this route"; + } + leaf nhid { + type uint64; + description + " This is nhid assigned to paths added by this client"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was update."; + } + leaf flags { + type route-client-flags-type; + description + " This can be used to show internal state eg. stale etc"; + } + leaf opaque-data { + type uint64; + description + "Route opaque data installed by client"; + } + + leaf hw-update-last-notif { + type yang:date-and-time; + description + "Indicates the last time the hardware update was notified"; + } + + uses next-hops; + uses loc-args; + } + } + } + + grouping rnh-cookies { + description + "cookies for rnh"; + container cookies { + config false; + list cookie { + leaf cookie-value { + type uint64; + description + "cookie assosiated with rnh"; + } + } + } + } + + grouping rnh-tracker { + description + "Grouping for route producer"; + container trackers { + config false; + description + "Enclosing container for the list of next-hops associated + with the forwarding entry"; + list tracker { + leaf tracking-protocol { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "The protocol from which the RIB entry was learned."; + } + uses rnh-cookies; + } + } + } + + grouping v6-rnh-tracker { + description + "Grouping for route producer"; + container trackers { + config false; + description + "Enclosing container for the list of next-hops associated + with the forwarding entry"; + list tracker { + leaf tracking-protocol { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "The protocol from which the RIB entry was learned."; + } + uses rnh-cookies; + } + } + } + + grouping route-hw-update-state { + description + "Route hardware update status information"; + + leaf install-ack { + type boolean; + description + "Indicates if the route installation is acked by hardware"; + } + + leaf status-code { + type uint32; + description + "Status code returned by hardware"; + } + + leaf version { + type uint64; + description + "Route version"; + } + } + + grouping ipv4-entries { + description + "Grouping for forwarding entries by lookup keys"; + container ipv4-entries { + config false; + list entry { + key "prefix"; + description + "IPv4 prefix used for lookup"; + leaf prefix { + type inet:ipv4-prefix; + description + "The IPv4 prefix corresponding to the route"; + } + leaf best-protocol { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + + container hw-update { + description + "Route hardware update status information"; + + uses route-hw-update-state; + } + + uses origin; + } + } + } + + grouping ipv6-entries { + description + "Grouping for forwarding entries by lookup keys"; + container ipv6-entries { + config false; + list entry { + key "prefix"; + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 prefix corresponding to the route"; + } + leaf best-protocol { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + + container hw-update { + description + "Route hardware update status information"; + + uses route-hw-update-state; + } + + uses origin; + } + } + } + + grouping ipv4-supernets { + description + "Grouping for forwarding entries by supernet"; + + container ipv4-supernets { + config false; + + description + "IPv4 prefix supernets covering other prefixes"; + + list ipv4-supernet { + key "prefix"; + + description + "IPv4 prefix supernet covering other prefixes"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the supernet prefix"; + } + + container state { + config false; + description + "Supernet state"; + + leaf prefix { + type inet:ipv4-prefix; + description + "IPv4 supernet prefix"; + } + } + + uses ipv4-entries; + } + } + } + + grouping ipv6-supernets { + description + "Grouping for forwarding entries by supernet"; + + container ipv6-supernets { + config false; + + description + "IPv6 prefix supernets covering other prefixes"; + + list ipv6-supernet { + key "prefix"; + + description + "IPv6 prefix supernet covering other prefixes"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the supernet prefix"; + } + + container state { + config false; + description + "Supernet state"; + + leaf prefix { + type inet:ipv6-prefix; + description + "IPv6 supernet prefix"; + } + } + + uses ipv6-entries; + } + } + } + + grouping ipv4-rnh-entries { + description + "Grouping for forwarding entries by lookup keys"; + container ipv4-rnh-entries { + list entry { + key "prefix"; + config false; + description + "IPv4 prefix used for lookup"; + leaf prefix { + type inet:ipv4-prefix; + description + "The IPv4 prefix corresponding to the route"; + } + leaf res-state { + type boolean; + description + "True if RNH is resolved"; + } + leaf mpls-reachable { + type boolean; + description + "Whether this RNH is reachable via labeled path"; + } + leaf metric { + type uint32; + description + "A metric which is utilised to specify the preference of route"; + } + leaf res-prefix { + type inet:ipv4-prefix; + description + "The IPv4 prefix corresponding to the route"; + } + leaf recur-level { + type uint32; + description + "Recursion level if RNH is resolved"; + } + leaf ref-count { + type uint32; + description + "Reference count of this RNH"; + } + uses rnh-tracker; + } + } + } + + grouping ipv6-rnh-entries { + description + "Grouping for forwarding entries by lookup keys"; + container ipv6-rnh-entries { + list v6entry { + key "prefix"; + leaf prefix { + type inet:ipv6-prefix; + description + "The IPv6 prefix corresponding to the route"; + } + leaf res-state { + type boolean; + description + "True if RNH is resolved"; + } + leaf mpls-reachable { + type boolean; + description + "Whether this RNH is reachable via labeled path"; + } + leaf metric { + type uint32; + description + "A metric which is utilised to specify the preference of route"; + } + leaf res-prefix { + type inet:ipv6-prefix; + description + "The IPv6 prefix corresponding to the route"; + } + leaf recur-level { + type uint32; + description + "Recursion level if RNH is resolved"; + } + leaf ref-count { + type uint32; + description + "Reference count of this RNH"; + } + uses v6-rnh-tracker; + } + } + } + + grouping label-next-hops { + description + "Grouping for next hops"; + container next-hops { + config false; + description + "Enclosing container for the list of next-hops associated with the label entry"; + + list next-hop { + uses rib-entry-nexthop-state; + } + } + } + + grouping label-entry { + description + "Grouping for label entry"; + list entry { + key "label"; + description + "Label used for lookup"; + + leaf label { + type uint32; + description + "The FEC label entry (ILM) "; + } + + leaf label-type { + description "Label type"; + type label-type-value ; + } + + leaf vpn-table-id { + type uint32; + description + "VPN table id associated with the label"; + } + + leaf ifindex { + type uint64; + description + "Interface index associated with the label"; + } + + leaf protocol { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + + leaf route-type { + description "Route type"; + type route-type-value ; + } + leaf nhid { + type uint64; + description + "This is nhid assigned to paths added by this client"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was update."; + } + leaf flags { + type route-client-flags-type; + description + " This can be used to show internal state eg. stale etc"; + } + uses label-next-hops; + } + } + + grouping ipv4-label-entries { + description + "Grouping for label entries by lookup keys"; + + container ipv4-label-entries { + config false; + uses label-entry; + } + } + + grouping ipv6-label-entries { + description + "Grouping for label entries by lookup keys"; + + container ipv6-label-entries { + config false; + uses label-entry; + } + + } + + grouping sid-next-hops { + description + "Grouping for sid next hops"; + container next-hops { + config false; + description + "Enclosing container for the list of next-hops associated with the sid entry"; + + list next-hop { + uses rib-entry-nexthop-state; + } + } + } + + grouping sid-entry { + description + "Grouping for sid entry"; + list entry { + key "sid"; + description + "sid used for lookup"; + + leaf sid { + type inet:ipv6-prefix; + description + "IPv6 Sid value "; + } + leaf micro-segment-behaviour-unode { + type boolean; + description + "This designates sid as usid"; + } + leaf function { + type arc-srv6-types:srv6-endpoint-behavior-type; + } + + leaf locator-name { + type string ; + description + "locator name"; + } + + leaf protocol { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "The protocol which is best and its paths are used for forwarding."; + } + + leaf sid-table-id { + type uint32; + description + "Table id corresponding END.T or END.DT variants"; + } + leaf network-instance { + type string; + description + "Network instance Name"; + } + leaf nhid { + type uint64; + description + "This is nhid assigned to path added by this client for END.X variants of the sid"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was update."; + } + leaf flags { + type route-client-flags-type; + description + " This can be used to show internal state eg. stale etc"; + } + //uses sid-next-hops; + } + } + + grouping ipv6-sid-entries { + description + "Grouping for sid entries by lookup keys"; + + container ipv6-sid-entries { + config false; + uses sid-entry; + } + + } + + grouping tunnel-termination-entry { + description + "Grouping for tunnel_termination entry"; + list entry { + key "ip"; + description + "ip used for lookup"; + + leaf ip { + type inet:ipv6-prefix; + description + "IPv6 termination ip "; + } + leaf ip-addr-family { + type identityref { + base oc-types:ADDRESS_FAMILY; + } + } + leaf function { + type arc-srv6-types:srv6-endpoint-behavior-type; + } + leaf inner-vrf-id { + type uint32; + description + "Vrf id corresponding END.T or END.DT variants"; + } + leaf network-instance { + type string; + description + "Network instance Name"; + } + leaf last-updated { + type yang:date-and-time; + description + "Indicates the last time the entry was update."; + } + leaf binding-sid { + type inet:ipv6-prefix; + description + "binding sid "; + } + leaf sid { + type inet:ipv6-address; + description + "DT4/DT6 SID"; + } + leaf gtp-source-prefix { + type inet:ipv6-prefix; + description + "gtp source prefix"; + } + leaf flags { + type uint64; + description + " This can be used to show internal state eg. stale etc"; + } + } + } + + grouping ipv6-tunnel-termination-entries { + description + "Grouping for tunnel_termination entries by lookup keys"; + + container ipv6-tunnel-termination-entries { + config false; + uses tunnel-termination-entry; + } + + } + grouping stats { + description + "Client specific counters"; + leaf routes { + type yang:counter32; + description + "Number of Routes"; + } + leaf paths { + type yang:counter32; + description + "Number of Paths"; + } + leaf mpls-paths { + type yang:counter32; + description + "Number of MPLS Paths"; + } + leaf rnhs { + type yang:counter32; + description + "Number of RNHs"; + } + leaf route-add-msg { + type yang:counter64; + description + "Number of Add route msgs rcvd"; + } + leaf route-delete-msg { + type yang:counter64; + description + "Number of Delete route msgs rcvd"; + } + leaf rnh-add-msg { + type yang:counter64; + description + "Number of Add rnh msgs rcvd"; + } + leaf rnh-delete-msg { + type yang:counter64; + description + "Number of Delete rnh msgs rcvd"; + } + leaf label-add-msg { + type yang:counter64; + description + "Number of Add Label msgs rcvd"; + } + leaf label-delete-msg { + type yang:counter64; + description + "Number of Delete Label msgs rcvd"; + } + leaf sid-add-msg { + type yang:counter64; + description + "Number of Add sid msgs rcvd"; + } + leaf sid-delete-msg { + type yang:counter64; + description + "Number of Delete sid msgs rcvd"; + } + leaf prefix-tracking-prefixes { + type yang:counter32; + description + "Number of prefixes registered for prefix-tracking"; + } + leaf prefix-tracking-ranges { + type yang:counter32; + description + "Number of prefix ranges registered for prefix-tracking"; + } + leaf prefix-tracking-reach-ranges { + type yang:counter32; + description + "Number of prefix ranges that are reachable"; + } + leaf prefix-tracking-add-requests { + type yang:counter64; + description + "Number of prefix-tracking Add requests"; + } + leaf prefix-tracking-delete-requests { + type yang:counter64; + description + "Number of prefix-tracking Delete requests"; + } + leaf prefix-tracking-reach-notifs { + type yang:counter64; + description + "Number of prefix-tracking reachable notifications"; + } + leaf prefix-tracking-unreach-notifs { + type yang:counter64; + description + "Number of prefix-tracking unreach notifications"; + } + leaf tunnel-termination-add-msg { + type yang:counter64; + description + "Number of Add tunnel_termination msgs rcvd"; + } + leaf tunnel-termination-delete-msg { + type yang:counter64; + description + "Number of Delete tunnel_termination msgs rcvd"; + } + } + + grouping stats-entries { + description + "grouping for RIB statistics"; + container stats-entries { + config false; + description + "container for RIB stats"; + uses stats; + list clients { + key "name"; + config false; + description + "The list of RIB clients."; + leaf name { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "Name of RIB client"; + } + uses stats; + } + } + } + + grouping client-info { + description + "Grouping for RIB clients"; + container client-info { + config false; + list clients { + key "client"; + description + "client information"; + leaf client { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "The client protocol."; + } + leaf-list redistribution-sources { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "list of redistrbution sources for this client "; + } + leaf hw-update-requested { + type boolean; + description + "whether the update-wait-data-plane attribute is enabled for this client"; + } + leaf nh-info-requested { + type boolean; + description + "whether this client expects nh info to be sent along with redistributed prefixes"; + } + } + } + } + + grouping nhid { + description + "Parameters relating to a nhid within the RIB entry"; + leaf protection-tracker-id { + type uint64; + description + "Protection tracker ID for the nexthop"; + } + leaf count { + type uint8; + description + "Number of pathids "; + } + leaf-list pathids-list { + type uint64; + ordered-by user; + description + "pathids "; + } + } + + grouping ipv4-nhids { + description + "Grouping for nhid entries by lookup keys"; + container ipv4-nhids { + list ipv4-nhids { + key "nhid"; + description + "NH id"; + leaf nhid { + type uint64; + description + "NHD id allocated to set of path"; + } + uses nhid; + } + } + } + + grouping ipv6-nhids { + description + "Grouping for NHID entries by lookup keys"; + container ipv6-nhids { + list v6nhids { + key "nhid"; + description + "nh id"; + leaf nhid { + type uint64; + description + "NH id allocated to path"; + } + uses nhid; + } + } + } + + typedef protection-tracker-flags-type { + type bits { + bit stale { + position 0; + } + } + } + + grouping protectiontracker { + description + "Parameters relating to a protection tracker within the RIB entry"; + leaf interface { + type string; + description + "Interface tracked for protection trigger"; + } + leaf next-hop { + type inet:ip-address-no-zone; + description + "Next-hop address tracked for protection trigger"; + } + leaf network-instance { + type string; + description + "Next-hop network instance tracked for protection trigger"; + } + leaf bfd-source { + type inet:ip-address-no-zone; + description + "BFD source address"; + } + leaf bfd-destination { + type inet:ip-address-no-zone; + description + "BFD destination address"; + } + leaf bfd-session-id { + type uint64; + description + "BFD session ID"; + } + leaf flags { + type protection-tracker-flags-type; + description + "Protection tracker flags."; + } + } + + grouping ipv4-protection-trackers { + description + "Grouping for protection tracker ID entries by lookup keys"; + container ipv4-protection-trackers { + list entry { + key "tracker-id"; + description + "Protection tracker id"; + leaf tracker-id { + type uint64; + description + "Protection tracker id allocated to set of path"; + } + uses protectiontracker; + } + } + } + + grouping ipv6-protection-trackers { + description + "Grouping for protection tracker ID entries by lookup keys"; + container ipv6-protection-trackers { + list entry { + key "tracker-id"; + description + "Protection tracker id"; + leaf tracker-id { + type uint64; + description + "Protection tracker id allocated to set of path"; + } + uses protectiontracker; + } + } + } + + grouping path { + description + "Parameters relating to a next-hop within the RIB entry"; + leaf af { + type uint32; + } + leaf nh-tableid { + type uint32; + } + leaf next-hop { + type inet:ip-address-no-zone; + description + "The next-hop that is to be used for the route + - this may be specified as an IP address, an interface + or a pre-defined next-hop type - for instance, DROP."; + } + leaf ifindex { + type uint64; + } + leaf tunnel-id { + type uint32; + description + "Next-hop Tunnel ID"; + } + leaf vni-id { + type uint32; + description + "VNI ID"; + } + leaf weight { + type uint32; + description + "The weight of the next-hop"; + } + leaf flags { + type uint32; + } + leaf backup { + type boolean; + description + "This path is used as backup"; + } + leaf label-cnt { + type uint8; + } + leaf-list pushed-mpls-label-stack { + type oc-mplst:mpls-label; + ordered-by user; + description + "The MPLS label stack imposed"; + } + } + + grouping ipv4-pathids { + description + "Grouping for forwarding entries by lookup keys"; + container ipv4-pathids { + list pathids { + key "pathid"; + description + "path id"; + leaf pathid { + type uint64; + description + "Path id allocated to path"; + } + uses path; + } + } + } + + grouping ipv6-pathids { + description + "Grouping for forwarding entries by lookup keys"; + container ipv6-pathids { + list v6pathids { + key "pathid"; + description + "path id"; + leaf pathid { + type uint64; + description + "Path id allocated to path"; + } + uses path; + } + } + } + + typedef tunnel-flags-type { + type bits { + bit stale { + position 0; + } + } + } + + grouping ipv4-tunnels { + description + "Grouping for tunnel entries by lookup keys"; + container ipv4-tunnels { + config false; + list entry { + key "tunnel-id"; + description + "tunnel-id used for lookup"; + leaf tunnel-id { + type uint32; + description + "tunnel-ID associated with this tunnel"; + } + leaf ltep-ip { + type inet:ipv4-address-no-zone; + description + "local tunnel-endpoint ipv4 address"; + } + leaf rtep-ip { + type inet:ipv4-address-no-zone; + description + "remote tunnel-endpoint ipv4 address"; + } + leaf tunnel-table-id { + type uint32; + description + "underlay table-id for this tunnel"; + } + leaf l4port { + type uint32; + description + "UDP port for this tunnel"; + } + leaf flood-and-learn { + type boolean; + description + "If set to true for the tunnel, mac-learning happens through flooding and not via EVPN."; + } + leaf tunnel-encap { + type enumeration { + enum "VXLAN" { + description + "VXLAN tunnel encapsulation"; + } + } + description + "tunnel encapsulation"; + } + leaf flags { + type tunnel-flags-type; + description + "Tunnel flags."; + } + } + } + } + + grouping ipv6-tunnels { + description + "Grouping for tunnel entries by lookup keys"; + container ipv6-tunnels { + config false; + list entry { + key "tunnel-id"; + description + "tunnel-id used for lookup"; + leaf tunnel-id { + type uint32; + description + "tunnel-ID associated with this tunnel"; + } + leaf ltep-ip { + type inet:ipv6-address-no-zone; + description + "local tunnel-endpoint ipv6 address"; + } + leaf rtep-ip { + type inet:ipv6-address-no-zone; + description + "remote tunnel-endpoint ipv6 address"; + } + leaf tunnel-table-id { + type uint32; + description + "underlay table-id for this tunnel"; + } + leaf tunnel-encap { + type enumeration { + enum "SRV6" { + description + "SRv6 tunnel encapsulation"; + } + } + description + "tunnel encapsulation"; + } + leaf function { + type arc-srv6-types:srv6-endpoint-behavior-type; + } + leaf-list sid-list { + type inet:ipv6-address-no-zone; + description + "The list of SIDs added to SRv6 tunnel header"; + } + leaf flags { + type tunnel-flags-type; + description + "Tunnel flags."; + } + uses loc-args; + } + } + } + + grouping ids-cmn { + description + "Container ID information"; + leaf id-type { + type string; + description + "Specifies if the ID allocated is for path or NH "; + } + leaf refcount { + type uint32; + description + "Refcount for the ID"; + } + leaf path-type { + type uint32; + description + "Indicates Path type if the ID corresponds to a path"; + } + leaf-list pathids { + type uint32; + } + leaf nh-addr { + type inet:ip-address-no-zone; + description + "Specifies the NH address corresponding to the path + if applicable"; + } + leaf tunnel-id { + type uint32; + description + "Tunnel id corresponding to the path if applicable"; + } + } + + grouping ipv4-ids { + container ipv4-id-list { + config false; + list ipv4-container-id { + description + "Container ID Information for IPV4 RIB table"; + key "id"; + leaf id { + type uint32; + description + "Container ID allocated by RIB"; + } + uses ids-cmn; + } + } + } + + grouping ipv6-ids { + container ipv6-id-list { + config false; + list ipv6-container-id { + description + "Container ID Information for IPV6 RIB table"; + key "id"; + leaf id { + type uint32; + description + "Container ID allocated by RIB"; + } + uses ids-cmn; + } + } + } + + + /* + * RIB Prefix-tracking information + */ + grouping rib-ptrack-cookie-state { + description + "Prefix-tracking cookie state"; + + leaf cookie-value { + type uint64; + description + "Client cookie value"; + } + + leaf is-stale { + type boolean; + description + "Indicates if the client cookie entry is stale"; + } + } + + grouping rib-ptrack-client-state { + description + "Prefix-tracking client state"; + + leaf client-name { + type string; + description + "Name of the client that registered for this prefix range"; + } + + leaf client-tag { + type uint32; + description + "Tag of the client that registered for this prefix range"; + } + + leaf is-match-info-required { + type boolean; + description + "Indicates if the client requires information about the match prefix"; + } + + leaf is-match-paths-required { + type boolean; + description + "Indicates if the client requires information about the bestpaths + of the match prefix"; + } + + leaf is-stale { + type boolean; + description + "Indicates if the client entry is stale"; + } + + leaf cookie-count { + type uint32; + description + "Number of cookies from this client tracking this prefix range"; + } + } + + grouping rib-ptrack-match-info-state { + description + "Prefix-tracking prefix range match state"; + + leaf prefix { + type inet:ip-prefix; + description + "Valid IP prefix covered under the prefix range i.e. match prefix"; + } + + leaf install-protocol { + type identityref { + base oc-pol-types:INSTALL_PROTOCOL_TYPE; + } + description + "Protocol that installed the bestpath of the match prefix"; + } + + leaf route-type { + type route-type-value; + description + "Route type of the bestpath of the match prefix"; + } + + leaf nhid { + type uint32; + description + "NHID of the bestpath of the match prefix"; + } + + leaf metric { + type uint32; + description + "Metric of the bestpath of the match prefix"; + } + + leaf is-mpls { + type boolean; + description + "Indicates if one of the bestpaths of the match prefix + is a labeled path"; + } + } + + grouping rib-ptrack-range-state { + description + "Prefix-tracking prefix range state"; + + leaf prefix { + type inet:ip-prefix; + description + "IP prefix registered for prefix-tracking"; + } + + leaf masklength-range { + type string { + pattern '(([0-9]|[1-9][0-9]|1[0-2][0-8])\.\.([0-9]|[1-9][0-9]' + + '|1[0-2][0-8]))|exact'; + } + description + "The prefix range for the masklength, or 'exact' if + the prefix has an exact length"; + } + + leaf is-match-prefix-exist { + type boolean; + description + "Indicates whether a valid prefix exists in the RIB routing table + that is covered by prefix range"; + } + + leaf client-count { + type uint32; + description + "Number of clients tracking this prefix range"; + } + } + + grouping rib-table-ptrack-state { + description + "Table prefix-tracking state"; + + leaf prefix-count { + type uint32; + description + "Number of prefixes registered for prefix-tracking"; + } + + leaf range-count { + type uint32; + description + "Number of prefix ranges registered for prefix-tracking"; + } + + leaf reach-range-count { + type uint32; + description + "Number of prefix ranges that are reachable"; + } + } + + grouping rib-ptrack-cookie-structure { + description + "Prefix-tracking cookie list information"; + + container cookies { + description + "Prefix-tracking cookie list"; + + list cookie { + key "cookie-value"; + + description + "List of cookies registered for prefix-tracking"; + + leaf cookie-value { + type leafref { + path "../state/cookie-value"; + } + description + "Reference to the cookie value"; + } + + container state { + config false; + description + "Prefix-tracking cookie state"; + + uses rib-ptrack-cookie-state; + } + } + } + } + + grouping rib-ptrack-client-structure { + description + "Prefix-tracking client list information"; + + container clients { + description + "Prefix-tracking client list"; + + list client { + key "client-name client-tag"; + + description + "List of clients registered for prefix-tracking"; + + leaf client-name { + type leafref { + path "../state/client-name"; + } + description + "Reference to the client name"; + } + + leaf client-tag { + type leafref { + path "../state/client-tag"; + } + description + "Reference to the client tag"; + } + + container state { + config false; + description + "Prefix-tracking client state"; + + uses rib-ptrack-client-state; + } + + uses rib-ptrack-cookie-structure; + } + } + } + + grouping rib-ptrack-prefix-range-structure { + description + "Prefix range information"; + + container prefix-ranges { + description + "Prefix range table"; + + list prefix-range { + key "prefix masklength-range"; + + description + "List of prefix ranges registered for prefix-tracking"; + + leaf prefix { + type leafref { + path "../state/prefix"; + } + description + "Reference to the registered prefix"; + } + + leaf masklength-range { + type leafref { + path "../state/masklength-range"; + } + description + "Reference to the registered prefix range"; + } + + container state { + config false; + description + "Prefix-tracking prefix state"; + + uses rib-ptrack-range-state; + } + + container match-info { + description + "Prefix-tracking prefix range match information"; + + container state { + config false; + description + "Prefix-tracking prefix range match state"; + + uses rib-ptrack-match-info-state; + } + } + + uses rib-ptrack-client-structure; + } + } + } + + grouping rib-table-ptrack-structure { + description + "Table prefix-tracking information"; + + container prefix-tracking { + description + "Prefix-tracking information"; + + container state { + config false; + description + "Table prefix-tracking state"; + + uses rib-table-ptrack-state; + } + + uses rib-ptrack-prefix-range-structure; + } + } + + + grouping rib-top { + description + "Top-level grouping for rib routes"; + list rib { + key "address-family"; + config false; + description + "An individual routing table associated with a + an address family."; + leaf address-family { + type leafref { + path "../state/address-family"; + } + mandatory true; + config false; + description + "Reference to the address family with which the RIB is + associated"; + } + container state { + description + "Configuration parameters relating to the RIB."; + uses rib-config; + } + uses ipv4-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv6-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv4-supernets { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv6-supernets { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv4-rnh-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv6-rnh-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv4-nhids { + when "../oc-netinst:name = 'default' and + address-family = 'oc-types:IPV4'"; + } + uses ipv6-nhids { + when "../oc-netinst:name = 'default' and + address-family = 'oc-types:IPV6'"; + } + uses ipv4-protection-trackers { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv6-protection-trackers { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv4-pathids { + when "../oc-netinst:name = 'default' and + address-family = 'oc-types:IPV4'"; + } + uses ipv6-pathids { + when "../oc-netinst:name = 'default' and + address-family = 'oc-types:IPV6'"; + } + uses ipv4-tunnels { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv4-ids { + when "../oc-netinst:name = 'default' and + address-family = 'oc-types:IPV4'"; + } + uses ipv6-ids { + when "../oc-netinst:name = 'default' and + address-family = 'oc-types:IPV6'"; + } + uses ipv4-label-entries { + when "address-family = 'oc-types:IPV4'"; + } + uses ipv6-label-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-sid-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-tunnel-termination-entries { + when "address-family = 'oc-types:IPV6'"; + } + uses ipv6-tunnels { + when "address-family = 'oc-types:IPV6'"; + } + + uses rib-table-ptrack-structure; + uses stats-entries; + uses client-info; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + uses rib-top { + when "./oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF'"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-rov-types.yang b/vendor/arrcus/arcos/v521/arcos-rov-types.yang new file mode 100644 index 000000000..2c146c26e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-rov-types.yang @@ -0,0 +1,54 @@ +module arcos-rov-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/rov/types"; + + prefix arc-rov-types; + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + + description + "This module defines Arrcus implemention of the ROV types module."; + + revision 2021-10-25 { + description + "Initial Revision + * Add ROV state + "; + + reference + "RFC 6020: YANG - A Data Modeling Language for the + Network Configuration Protocol (NETCONF)"; + } + + identity ROV_STATE { + description + "Base identity for ROV state"; + } + + identity UNKNOWN { + base ROV_STATE; + description + "ROV unknown state; Either record not found or server not available"; + } + + identity INVALID { + base ROV_STATE; + description + "ROV invalid state"; + } + + identity VALID { + base ROV_STATE; + description + "ROV valid state"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-runtime.yang b/vendor/arrcus/arcos/v521/arcos-runtime.yang new file mode 100644 index 000000000..ecbc05679 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-runtime.yang @@ -0,0 +1,66 @@ +module arcos-runtime { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/runtime"; + prefix arc-runtime; + + import openconfig-platform { + prefix oc-platform; + } + + import arcos-platform { prefix arc-platform; } + + typedef runtime-inst-type { + type enumeration { + enum DATAPATH_MGMT { + description + "Runtime instance managing an underlying datapath"; + } + + enum PUNTPATH_MGMT { + description + "Runtime instance managing the puntpath"; + } + } + } + + grouping runtime-inst-top { + description + "Top level grouping for runtime instances in ArcOS"; + + container runtime-instances { + when "/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED'"; + list runtime-instance { + key "instance-name"; + config false; + + description + " The Control plane Forwarding table associated with an address family."; + + leaf instance-name { + type string; + description + "Unique name identifying the current runtime instance"; + mandatory true; + } + + leaf instance-type { + type runtime-inst-type; + description + "Type of the runtime instance"; + mandatory true; + } + + leaf deployed-on { + type leafref { + path "/oc-platform:components/oc-platform:component" + + "/oc-platform:name"; + } + description + "Reference to component that this runtime instance is deployed on"; + mandatory true; + } + } + } + } + uses runtime-inst-top; +} diff --git a/vendor/arrcus/arcos/v521/arcos-service-policy.yang b/vendor/arrcus/arcos/v521/arcos-service-policy.yang new file mode 100644 index 000000000..6b26f3156 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-service-policy.yang @@ -0,0 +1,79 @@ +module arcos-service-policy { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/service-policy"; + prefix arc-svc-plc; + + organization + "Arrcus, Inc."; + contact + "Arrcus, Inc. + Customer Service + Postal: 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 1XXX XXX-XXXX + E-mail: xxx@arrcus.com"; + description + "YANG data-model for generic service-policy instances. + This is a base data model for service-policy that different + apps can make use of to associate with different targets + (Look at example, arrcus-qos-service-policy-interface.yang)"; + + grouping service-policy-attributes { + description + "Grouping that defines service instance of a policy"; + leaf direction { + type enumeration { + enum INGRESS { + description + "for the incoming traffic"; + } + enum EGRESS { + description + "for the outgoing traffic"; + } + } + description + "direction of traffic this service-policy takes effect on"; + } + leaf name { + type string { + length "1..79"; + } + mandatory true; + description + "Name of a policy to be instantiated"; + } + } + + grouping service-policies-top { + description + "Grouping for generic definition of policy service instances"; + container service-policies { + description + "Container for policy service instance data-base"; + list service-policy { + key "direction"; + description + "A specific policy service instance"; + leaf direction { + type leafref { + path "../config/direction"; + } + description + "specific direction of traffic service instance is applicable to"; + } + container config { + description + "Configuration parameters relating to policy service instance"; + uses service-policy-attributes; + } + container state { + config false; + description + "Operational state parameters relating to policy service instance"; + uses service-policy-attributes; + } + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-sflow-clear.yang b/vendor/arrcus/arcos/v521/arcos-sflow-clear.yang new file mode 100644 index 000000000..6141bad81 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-sflow-clear.yang @@ -0,0 +1,42 @@ +module arcos-sflow-clear { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/sflow/clear"; + prefix arc-sflow-clr; + + import arcos-platform { + prefix arc-platform; + } + + grouping sflow-counters-top { + container sflow-counters { + description + "Clear sFlow statistics"; + + action all { + description + "Clear all sFlow statistics"; + + output { + leaf result { + type string; + description + "The status of the clear operation"; + } + } + } + } + } + + uses sflow-counters-top { + when "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT3') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT2') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK3') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_HELIX4') or + (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX_JPLUS') or + (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:X86_64') or + (boolean(/arc-platform:platform/arc-platform:asic) != 'true')"; + } +} + diff --git a/vendor/arrcus/arcos/v521/arcos-sflow.yang b/vendor/arrcus/arcos/v521/arcos-sflow.yang new file mode 100644 index 000000000..2d6be1a00 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-sflow.yang @@ -0,0 +1,258 @@ +module arcos-sflow { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/sflow"; + prefix arc-sflow; + + import ietf-inet-types { + prefix inet; + } + import iana-if-type { + prefix ianaift; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-network-instance { + prefix oc-netinst; + } + import arcos-platform { + prefix arc-platform; + } + + grouping sflow-packet-sampling-rate { + description + "Grouping for sflow packet sampling rate parameters"; + leaf packet-sampling-rate { + type uint32; + description + "default packet sampling rate for each interface/direction"; + } + } + + grouping sflow-collector-common-fields { + description + "Grouping for sflow collector specific optional fields"; + leaf port { + type uint16; + default 6343; + description + "Destination Layer 4 port number of sflow datagram (default- 6343)"; + } + } + + grouping sflow-ipv4-top { + description + "Grouping for sflow ipv4 global configurations"; + container ipv4 { + description + "Parameters for the IPv4 sflow datagrams"; + leaf source-address { + type inet:ipv4-address-no-zone; + description + "Source address of sflow datagram (default- ma1 address)"; + } + list collector { + key "address"; + max-elements 6; + description + "List of collectors for sflow datagrams"; + leaf address { + mandatory true; + type inet:ipv4-address-no-zone; + description + "Destination address of sflow datagram"; + } + uses sflow-collector-common-fields; + } + } + } + + grouping sflow-ipv6-top { + description + "Grouping for sflow ipv6 global configurations"; + container ipv6 { + description + "Parameters for the IPv6 sflow datagrams"; + leaf source-address { + type inet:ipv6-address-no-zone; + description + "Source address of sflow datagram (default- ma1 address)"; + } + list collector { + key "address"; + description + "List of collectors for sflow datagrams"; + leaf address { + mandatory true; + type inet:ipv6-address-no-zone; + description + "Destination address of sflow datagram"; + } + uses sflow-collector-common-fields; + } + } + } + + grouping sflow-global-state-top { + description + "Defines for sflow specific statistics"; + leaf counter-samples { + type uint64; + description + "Total valid counter samples sent"; + } + leaf packet-samples { + type uint64; + description + "Total valid packet samples sent"; + } + } + + grouping sflow-global-top { + description + "Defines for sflow specific global configurations"; + leaf counter-sampling-interval { + type uint16 { + range "10..300"; + } + description + "Polling interval in seconds (default- 60 seconds)"; + } + uses sflow-packet-sampling-rate; + leaf source-interface { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description + "Sflow Agent interface (default- ma1 interface)"; + } + leaf network-instance { + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:config/oc-netinst:name"; + } + description + "Name of a l3vrf network-instance (default instance if not specified)"; + } + uses sflow-ipv4-top { + when "(not(boolean(./ipv6/source-address)) and " + + " not(boolean(./ipv6/collector/address)))"; + } + uses sflow-ipv6-top { + when "(not(boolean(./ipv4/source-address)) and " + + " not(boolean(./ipv4/collector/address)))"; + } + } + + grouping sflow-interface-top { + description + "Defines for sflow specific interface level configurations"; + leaf name { + type leafref { + path "/oc-if:interfaces/oc-if:interface/oc-if:config/oc-if:name"; + } + description + "Reference to the sflow interface"; + must "(/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') or + (/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:config/oc-if:type = 'ianaift:ieee8023adLag') or ( + (/oc-if:interfaces/oc-if:interface[oc-if:name=current()]/oc-if:config/oc-if:type = 'ianaift:l3ipvlan') and + (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX'))"; + } + leaf direction { + type enumeration { + enum ingress { + description + "sflow sampling for incoming traffic"; + } + enum egress { + description + "sflow sampling for outgoing traffic"; + } + } + } + uses sflow-packet-sampling-rate { + when "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT4') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT3') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT2') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK3') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_HELIX4') or + (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX_JPLUS') or + (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or + (boolean(/arc-platform:platform/arc-platform:asic) != 'true')"; + } + } + + grouping sflow-top { + description + "Top-level grouping for sflow feature"; + container sflow { + description + "sflow feature specific configurations and state"; + container global { + description + "Global config/state parameters for sflow"; + container config { + description + "Global configuration parameters for sflow"; + uses sflow-global-top; + } + container state { + description + "Global state parameters for sflow"; + config false; + uses sflow-global-top; + uses sflow-global-state-top; + } + } + container interfaces { + description + "Interface config/state parameters for sflow"; + list interface { + key "name direction"; + description + "List of interfaces on which sFlow is enabled"; + leaf name { + type leafref { + path "../config/name"; + } + } + leaf direction { + type leafref { + path "../config/direction"; + } + } + container config { + description + "Interface configuration parameters for sflow"; + uses sflow-interface-top { + refine direction { + must "not ((current() = 'egress') and " + +"(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_JERICHOPLUS'))" { + error-message "Egress sflow sampling not supported on this platform"; + } + } + } + } + container state { + description + "Interface configuration parameters for sflow"; + config false; + uses sflow-interface-top; + } + } + } + } + } + + uses sflow-top { + when "(/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT4') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT3') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TRIDENT2') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_TOMAHAWK3') or + (/arc-platform:platform/arc-platform:asic = 'arc-platform:BROADCOM_HELIX4') or + (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX') or + (/arc-platform:platform/arc-platform:family = 'arc-platform:BROADCOM_DNX_JPLUS') or + (boolean(/arc-platform:platform/arc-platform:asic) != 'true')"; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-sla-icmp.yang b/vendor/arrcus/arcos/v521/arcos-sla-icmp.yang new file mode 100644 index 000000000..0a63149d2 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-sla-icmp.yang @@ -0,0 +1,315 @@ +module arcos-sla-icmp { + yang-version "1.1"; + namespace "http://yang.arrcus.com/arcos/sla-icmp"; + prefix "arc-sla-icmp"; + + import ietf-yang-types { prefix "ietf-types"; } + import ietf-inet-types { prefix "inet"; } + import openconfig-network-instance { prefix "oc-netinst"; } + import arcos-common-types { prefix arc-common-types; } + + organization + "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + Email: yang-support@arrcus.com"; + + description + "This YANG module is for model for the + SLA monitoring with ICMP. + + Copyright (c) 2022-2023 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-01 { + description + "Initial revision."; + } + + + + grouping sla-icmp-probe-common { + description + "SLA ICMP per probe config."; + + leaf probe-interval { + type uint64; + units nanoseconds; + mandatory true; + description + "Time interval between probe"; + } + + leaf probe-count { + type uint32; + mandatory true; + description + "Number of probes to be sent"; + } + + leaf payload-size { + type uint32; + description + "Payload size of each probe"; + } + } + + grouping sla-icmp-threshold-common { + description + "SLA ICMP per probe config."; + + leaf successive-loss { + type uint32; + description + "Number of successive pkt loss"; + } + + leaf trap-successive-loss { + type boolean; + default false; + description + "Generate trap on successive loss exceeding threshold"; + } + + leaf excessive-rtd { + type uint64; + units nanoseconds; + description + "Round Trip Delay threshold"; + } + + leaf trap-excessive-rtd { + type boolean; + default false; + description + "Generate trap on exceeding RTD threshold"; + } + } + + grouping sla-icmp-session-common { + description + "List of SLA-ICMP sessions."; + + leaf name { + type string; + description + "Unique SLA-ICMP session name"; + } + + leaf admin-state { + type boolean; + default true; + description + "Indicates the Session-Sender test session state."; + } + + leaf target-address { + type inet:ip-address; + mandatory true; + description + "The IP address on the remote device"; + } + + leaf source-address { + type inet:ip-address; + description + "The IP address on the source"; + } + + leaf session-interval { + type uint32; + units seconds; + mandatory true; + description + "Time interval between sessions"; + } + + container probe { + description + "SLA-ICMP per session probe config"; + uses sla-icmp-probe-common; + } + + container threshold { + description + "SLA-ICMP per session threshold config"; + uses sla-icmp-threshold-common; + } + } + + grouping sla-icmp-stats { + leaf sent-packets { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the number of packets sent."; + } + + leaf rx-packets { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the number of packets received."; + } + + leaf min-rtd { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the minimum RTD(round trip delay)(nano seconds)."; + } + + leaf max-rtd { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the maximum RTD(round trip delay)(nano seconds)."; + } + + leaf ave-rtd { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the average RTD(round trip delay)(nano seconds) of all recved pkt."; + } + + leaf std-rtd { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the standard deviation RTD(round trip delay)(nano seconds)."; + } + + leaf jitter-rtd { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the jitter RTD(round trip delay)(nano seconds). Max_rtd - Min_rtd "; + } + + description + "Used for SLA-ICMP statistics."; + } + + grouping sla-icmp-base { + description + "Configuration of the sla-icmp session"; + + leaf admin-state { + type boolean; + default true; + description + "Indicates administrative state IP SLA-ICMP"; + } + + container icmp-sessions { + list icmp-session { + key name; + description + "List of SLA ICMP sessions."; + + leaf name { + type leafref { + path "../config/name"; + } + description + "A unique name for this SLA-ICMP session to be used + for identifying this ICMP session by the logical + name."; + } + + container config { + description + "SLA-ICMP per session config"; + uses sla-icmp-session-common; + } + + container state { + config false; + description + "SLA-ICMP per session statistics"; + uses sla-icmp-session-common; + uses sla-icmp-stats; + } + } + } + } + + grouping sla { + container sla { + description + "Service Level Agreement[SLA]"; + + container icmp { + description + "SLA Service Level Agreement with ICMP"; + uses sla-icmp-base; + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + description + "SLA monitoring using ICMP"; + uses sla; + } + + grouping clear-sla-input { + leaf network-instance { + mandatory true; + description + "Network-instances name"; + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:name"; + } + } + + leaf session { + mandatory true; + description + "ALL network-instances or the name or one network-instance"; + + type union { + type enumeration { + enum ALL { + description + "All SLA ICMP sessions"; + } + } + // type leafref { + // path "/oc-netinst:network-instances/oc-netinst:network-instance/sla/icmp/icmp-sessions/icmp-session/name"; + // } + } + } + + leaf counter { + description + "clear SLA ICMP session counter"; + type boolean; + } + + leaf trap{ + description + "clear SLA ICMP session trap"; + type boolean; + } + } + + rpc clear-sla-ses-cnt { + description + "clear SLA ICMP session counter"; + input { + uses clear-sla-input; + } + output { + uses arc-common-types:generic-rpc-response; + } + } +} + + + diff --git a/vendor/arrcus/arcos/v521/arcos-srv6-types.yang b/vendor/arrcus/arcos/v521/arcos-srv6-types.yang new file mode 100644 index 000000000..2d818df22 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-srv6-types.yang @@ -0,0 +1,630 @@ +module arcos-srv6-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/srv6-types"; + prefix arc-srv6-types; + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS SRv6 domain. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + revision 2020-03-26 { + description "Initial version"; + } + + // + // SRv6 Endpoint Behavior types. + // + identity SRV6_ENDPOINT_BEHAVIOR_TYPE { + description + "Base identity for SRV6 End SID Endpoint Behavior"; + reference + "draft-ietf-spring-srv6-network-programming"; + } + + identity END { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End (no PSP, no USP). Codepoint 1."; + } + + identity END_PSP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End with PSP. Codepoint 2."; + } + + identity END_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End with USP. Codepoint 3."; + } + + identity END_PSP_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End with PSP and USP. Codepoint 4."; + } + + identity END_X { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.X (no PSP, no USP. Codepoint 5."; + } + + identity END_X_PSP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.X with PSP. Codepoint 6."; + } + + identity END_X_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.X with USP. Codepoint 7."; + } + + identity END_X_PSP_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.X with PSP and USP. Codepoint 8."; + } + + identity END_T { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.T (no PSP, no USP). Codepoint 9."; + } + + identity END_T_PSP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.T with PSP. Codepoint 10."; + } + + identity END_T_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.T with USP. Codepoint 11."; + } + + identity END_T_PSP_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.T with PSP and USP. Codepoint 12."; + } + + identity END_B6_ENCAPS { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.B6.Encaps. Codepoint 14."; + } + + identity END_BM { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.BM. Codepoint 15."; + } + + identity END_DX6 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DX6. Codepoint 16."; + } + + identity END_DX4 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DX4. Codepoint 17."; + } + + identity END_DT6 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DT6. Codepoint 18."; + } + + identity END_DT4 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DT4. Codepoint 19."; + } + + identity END_DT46 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DT46. Codepoint 20."; + } + + identity END_DX2 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DX2. Codepoint 21."; + } + + identity END_DX2V { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DX2V. Codepoint 22."; + } + + identity END_DT2U { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DT2U. Codepoint 23."; + } + + identity END_DT2M { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DT2M. Codepoint 24."; + } + + identity END_B6_ENCAPS_RED { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.DT2M. Codepoint 27."; + } + + identity END_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End with USD. Codepoint 28."; + } + + identity END_PSP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End with PSP and USD. Codepoint 29."; + } + + identity END_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End with USP and USD. Codepoint 30."; + } + + identity END_PSP_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End with PSP, USP and USD. Codepoint 31."; + } + + identity END_X_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.X with USD. Codepoint 32."; + } + + identity END_X_PSP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.X with PSP and USD. Codepoint 33."; + } + + identity END_X_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.X with USP and USD. Codepoint 34."; + } + + identity END_X_PSP_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.X with PSP, USP and USD. Codepoint 35."; + } + + identity END_T_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.T with USD. Codepoint 36."; + } + + identity END_T_PSP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.T with PSP and USD. Codepoint 37."; + } + + identity END_T_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.T with USP and USD. Codepoint 38."; + } + + identity END_T_PSP_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.T with PSP, USP and USD. Codepoint 39."; + } + + identity END_OP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.OP. Codepoint 40."; + } + + identity END_OTP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "End.OTP. Codepoint 41."; + } + + identity UN_SL_ONLY { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN. Codepoint 42."; + } + + identity UN_SL_END { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN (S&L+End). Codepoint 43."; + } + + identity UN_SL_END_PSP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN (S&L+End PSP). Codepoint 44."; + } + + identity UN_SL_END_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN (S&L+End USP). Codepoint 45."; + } + + identity UN_SL_END_PSP_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN (S&L+End PSP/USP). Codepoint 46."; + } + + identity UN_SL_END_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN (S&L+End USD). Codepoint 47."; + } + + identity UN_SL_END_PSP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN (S&L+End PSP/USD). Codepoint 48."; + } + + identity UN_SL_END_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN (S&L+End USP/USD). Codepoint 49."; + } + + identity UN_SL_END_PSP_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uN (S&L+End PSP/USP/USD). Codepoint 50."; + } + + identity UA_SX_ONLY { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA. Codepoint 51."; + } + + identity UA_SX_END_X { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA (S&L+End.X). Codepoint 52."; + } + + identity UA_SX_END_X_PSP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA (S&L+End.X PSP). Codepoint 53."; + } + + identity UA_SX_END_X_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA (S&L+End.X USP). Codepoint 54."; + } + + identity UA_SX_END_X_PSP_USP { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA (S&L+End.X PSP/USP). Codepoint 55."; + } + + identity UA_SX_END_X_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA (S&L+End.X USD). Codepoint 56."; + } + + identity UA_SX_END_X_PSP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA (S&L+End.X PSP/USD). Codepoint 57."; + } + + identity UA_SX_END_X_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA (S&L+End.X USP/USD). Codepoint 58."; + } + + identity UA_SX_END_X_PSP_USP_USD { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uA (S&L+End.X PSP/USP/USD). Codepoint 59."; + } + + identity UDX6 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDX6. Codepoint 60."; + } + + identity UDX4 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDX4. Codepoint 61."; + } + + identity UDT6 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDT6. Codepoint 62."; + } + + identity UDT4 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDT4. Codepoint 63."; + } + + identity UDT46 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDT46. Codepoint 64."; + } + + identity UDX2 { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDX2. Codepoint 65."; + } + + identity UDX2V { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDX2V. Codepoint 66."; + } + + identity UDT2U { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDX2U. Codepoint 67."; + } + + identity UDT2M { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "uDX2M. Codepoint 68."; + } + + identity END_DTM { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "END_DTM. Codepoint 73."; + } + + identity OPAQUE { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + description "Opaque. Codepoint 65535."; + } + + typedef srv6-endpoint-behavior-type { + type union { + type identityref { + base "SRV6_ENDPOINT_BEHAVIOR_TYPE"; + } + type uint16; + } + description + "Type definition for SRV6 endpoint behavior. Unknown + values are represented as the numeric value."; + reference + "draft-ietf-spring-srv6-network-programming"; + } + + typedef srv6-sid-type { + type enumeration { + enum CLASSIC_SID { + value 1; + } + enum USID { + value 2; + } + } + } + + identity SRV6_MOBILE_FUNCTION_TYPE { + description + "Base identity for SRV6 Mobile Function Types"; + reference + "draft-ietf-dmm-srv6-mobile-uplane"; + } + + identity T_M_GTP4_D { + base "SRV6_MOBILE_FUNCTION_TYPE"; + description "GTP4.D Mobile Function."; + } + + identity END_M_GTP6_D { + base "SRV6_MOBILE_FUNCTION_TYPE"; + description "GTP6.D Mobile Function."; + } + + identity END_M_GTP6_DI { + base "SRV6_MOBILE_FUNCTION_TYPE"; + description "GTP6.DI Mobile Function."; + } + + identity END_M_GTP4_E { + base "SRV6_MOBILE_FUNCTION_TYPE"; + description "GTP4.E Mobile Function."; + } + + identity END_M_GTP6_E { + base "SRV6_MOBILE_FUNCTION_TYPE"; + description "GTP6.E Mobile Function."; + } + + typedef srv6-mobile-function-type { + type union { + type identityref { + base "SRV6_MOBILE_FUNCTION_TYPE"; + } + type uint16; + } + description + "Type definition for SRV6 mobile function. Unknown + values are represented as the numeric value."; + reference + "draft-ietf-dmm-srv6-mobile-uplane"; + } + +/* + typedef srv6-function-type { + type enumeration { + enum END_NO_PSP_USP { + value 1; + } + enum END_PSP { + value 2; + } + enum END_USP { + value 3; + } + enum END_PSP_USP { + value 4; + } + enum END_X_NO_PSP_USP { + value 5; + } + enum END_X_PSP { + value 6; + } + enum END_X_USP { + value 7; + } + enum END_X_PSP_USP { + value 8; + } + enum END_T_NO_PSP_USP { + value 9; + } + enum END_T_PSP { + value 10; + } + enum END_T_USP { + value 11; + } + enum END_T_PSP_USP { + value 12; + } + enum RESERVED { + value 13; + } + enum END_B6_ENCAP { + value 14; + } + enum END_BM { + value 15; + } + enum END_DX6 { + value 16; + } + enum END_DX4 { + value 17; + } + enum END_DT6 { + value 18; + } + enum END_DT4 { + value 19; + } + enum END_DT46 { + value 20; + } + enum END_DX2 { + value 21; + } + enum END_DX2V { + value 22; + } + enum END_DT2U { + value 23; + } + enum END_DT2M { + value 24; + } + enum RESERVED2 { + value 25; + } + enum RESERVED3 { + value 26; + } + enum END_B6_ENCAPS_RED { + value 27; + } + enum END_USD { + value 28; + } + enum END_PSP_USD { + value 29; + } + enum END_USP_USD { + value 30; + } + enum END_PSP_USP_USD { + value 31; + } + enum END_X_USD { + value 32; + } + enum END_X_PSP_USD { + value 33; + } + enum END_X_USP_USD { + value 34; + } + enum END_X_PSP_USP_USD { + value 35; + } + enum END_T_USD { + value 36; + } + enum END_T_PSP_USD { + value 37; + } + enum END_T_USP_USD { + value 38; + } + enum END_T_PSP_USP_USD { + value 39; + } + enum END_OP { + value 40; + } + enum END_OTP { + value 41; + } + enum UN_SHIFTONLY { + value 42; + } + enum UN { + value 43; + } + enum UN_PSP { + value 44; + } + enum UN_USP { + value 45; + } + enum UN_PSP_USP { + value 46; + } + enum UN_USD { + value 47; + } + enum UN_PSP_USD { + value 48; + } + enum UN_USP_USD { + value 49; + } + enum UN_PSP_USP_USD { + value 50; + } + enum UA_SHIFTONLY { + value 51; + } + enum UA { + value 52; + } + enum UA_PSP { + value 53; + } + enum UA_USP { + value 54; + } + enum UA_PSP_USP { + value 55; + } + enum UA_USD { + value 56; + } + enum UA_PSP_USD { + value 57; + } + enum UA_USP_USD { + value 58; + } + enum UA_PSP_USP_USD { + value 59; + } + enum MAX { + value 60; + } + } + } +*/ +} diff --git a/vendor/arrcus/arcos/v521/arcos-srv6.yang b/vendor/arrcus/arcos/v521/arcos-srv6.yang new file mode 100644 index 000000000..74627634b --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-srv6.yang @@ -0,0 +1,502 @@ +module arcos-srv6 { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/srv6"; + prefix arc-srv6; + + import ietf-inet-types { + prefix inet; + } + + import openconfig-network-instance { + prefix oc-netinst; + } + + import arcos-srv6-types { + prefix arc-srv6-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS SRv6 domain. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + + revision 2020-01-06 { + description "Initial version"; + } + + grouping srv6-gtp-tunnel-termination-config-top { + description + "Configuration data for gtp-tunnel-termination"; + + leaf inner-vrf { + mandatory true; + description + "Inner vrf after gtp decap"; + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:name"; + } + } + + leaf source-prefix { + mandatory true; + type inet:ipv6-prefix; + description + "Used to compute the source address of the outer IPv6 header after SRH encapsulation"; + } + + leaf binding-sid { + mandatory true; + type inet:ipv6-prefix; + description + "Used to compute the destination address of the outer IPv6 header after SRH encapsulation"; + } + } + + grouping srv6-static-sids-top { + description + "Fields for static sid"; + + leaf behavior { + mandatory true; + type arc-srv6-types:srv6-mobile-function-type; + description + "Mobile function"; + must "../behavior = 'arc-srv6-types:END_M_GTP4_E' or ../behavior = 'arc-srv6-types:END_M_GTP6_E'" { + error-message "Only behavior END_M_GTP4_E and END_M_GTP6_E are supported"; + } + + } + + leaf egress-vrf { + mandatory true; + description + "Outer vrf after gtp encap"; + type leafref { + path "/oc-netinst:network-instances/oc-netinst:network-instance" + + "/oc-netinst:name"; + } + } + + leaf source-address { + type inet:ipv4-address; + description + "Sets the source address of the outer IPv4 header after GTP encapsulation"; + when "../behavior = 'arc-srv6-types:END_M_GTP4_E'"; + must "not(../source-position)" { + error-message "source-address and source-position cannot co-exist"; + } + } + + leaf source-position { + type uint8 { + range "0..96"; + } + description + "The bit position on the source address of the incoming packet from where the source address of the outer IPv4 header after GTP encapsulation needs to be extracted"; + when "../behavior = 'arc-srv6-types:END_M_GTP4_E'"; + must "not(../source-address)" { + error-message "source-address and source-position cannot co-exist"; + } + } + } + + grouping srv6-static-sids { + list static-sid { + key "function"; + description + "Info to be configured about a sid"; + leaf function { + type uint32 { + range "0..1048575"; + } + description + "Function value of sid"; + } + + container config { + description + "Configurable items for static sids"; + uses srv6-static-sids-top; + must "behavior != 'arc-srv6-types:END_M_GTP4_E' or (boolean(source-address) = 'true' or " + + " boolean(source-position) = 'true')" { + error-message "One and only one of source-address and source-position must be configured"; + } + + } + + container state { + config false; + description + "Operational state for static sids"; + uses srv6-static-sids-top; + } + + } + } + + grouping srv6-locator-config-top { + description + "Configuration data for locator"; + + leaf locator-node-length { + type uint8; + default 16; + description + "SRv6 SID Locator Node length in bits"; + } + + leaf prefix { + mandatory true; + type inet:ipv6-prefix; + description + "locator address"; + } + + leaf micro-segment-behavior-unode { + type boolean; + default false; + description + "This designates locator as usid. Will need to change to + enum later."; + } + + leaf mobile { + type boolean; + default false; + description + "This designates locator as mobile"; + } + + leaf function-length { + type uint8 { + range "1..20"; + } + default 16; + description + "SRv6 SID Function length in bits"; + when "../micro-segment-behavior-unode = 'false' and + ../mobile = 'false'"; + } + + leaf algorithm { + type uint8 { + range "128..255"; + } + description + "Algorithm ID associated with the locator"; + when "../mobile = 'false'"; + } + } + + grouping srv6-encapsulation-config-top { + description + "Configuration data for encapsulation"; + + leaf source-address { + type inet:ipv6-address; + description + "Sets the source address of the encap IPv6 header"; + } + leaf ip-ttl-propagation { + type boolean; + default false; + description + "Determines whether hop-limit/TTL of inner packet is copied to outer encap header"; + } + leaf hop-limit { + type uint8 { + range "1..255"; + } + default 255; + description + "Sets the hop-limit field of the encap IPv6 header"; + when "../ip-ttl-propagation = 'false'"; + } + } + + grouping srv6-client { + list client { + key "name"; + config false; + description + "client info of an entry"; + leaf name { + type string { + length "1..20"; + } + description + "client name"; + } + leaf handle { + type uint64; + description + "Handle used for communicating with the client"; + } + } + } + + grouping srv6-sid-path { + list sid-path { + key "next-hop-address"; + config false; + description + "Info abput sid-paths for a given sid"; + leaf next-hop-address { + type inet:ip-address; + description + "NH address of adjacency"; + } + leaf interface { + type string { + length "1..20"; + } + description + "interface name"; + } + } + } + + grouping srv6-sid-paths-top { + description + "Grouping for sid-paths by lookup keys"; + + container sid-paths { + uses srv6-sid-path; + } + } + + grouping srv6-local-sid { + list local-sid { + key "sid"; + config false; + description + "Info about a given end sid"; + leaf sid { + type inet:ipv6-prefix; + description + "IPv6 sid value"; + } + leaf behavior { + type arc-srv6-types:srv6-endpoint-behavior-type; + description + "Endpoint behavior"; + } + leaf locator-name { + type string { + length "1..20"; + } + description + "locator name"; + } + leaf client-name { + type string { + length "1..20"; + } + description + "client name"; + } + leaf table-id { + type uint32; + description + "Table Id for ENDT, DT, uDT"; + } + leaf usid-length { + type uint8; + default 16; + description + "Indicates the length of the usid"; + } + leaf source-address { + type inet:ipv4-address; + description + "Sets the source address of the outer IPv4 header after GTP encapsulation"; + } + + leaf source-position { + type uint8 { + range "0..96"; + } + description + "The bit position on the source address of the incoming packet from where the source address of the outer IPv4 header after GTP encapsulation needs to be extracted"; + } + + + uses srv6-sid-paths-top; + } + } + + grouping srv6-locators-top { + list locator { + key "name"; + + description + "locator info of an entry"; + + leaf name { + type string { + length "1..20"; + } + description + "locator name"; + } + container config { + description + "Configurable items at the srv6 locator level"; + uses srv6-locator-config-top; + must "micro-segment-behavior-unode = 'false' or locator-node-length = 16" { + error-message "Only locator-node-length = 16 is supported for usid"; + } + } + container state { + config false; + description + "Operational State data at the srv6 locator level"; + uses srv6-locator-config-top; + } + + uses srv6-static-sids { + description + "Static sids under a locator"; + } + } + } + + grouping srv6-gtp-tunnel-termination-top { + list gtp-tunnel-termination { + key "prefix"; + + description + "static config for srv6 tunnel termination"; + + leaf prefix { + type inet:ip-prefix; + description + "Prefix for tunnel termination"; + } + + container config { + description + "Configurable items for tunnel termination"; + uses srv6-gtp-tunnel-termination-config-top; + } + + container state { + config false; + description + "Operational State items for tunnel termination"; + uses srv6-gtp-tunnel-termination-config-top; + } + } + } + + grouping srv6-encapsulation-top { + container encapsulation { + container config { + description + "Configurable items for srv6 encapsulation"; + uses srv6-encapsulation-config-top; + } + container state { + config false; + description + "Operational State data for srv6 encapsulation level"; + uses srv6-encapsulation-config-top; + } + } + } + + + grouping srv6-local-sids-top { + description + "Grouping for sids by lookup keys"; + + container local-sids { + config false; + uses srv6-local-sid; + } + } + + grouping srv6-clients-top { + description + "Grouping for clients by lookup keys"; + + container clients { + config false; + uses srv6-client; + } + } + + grouping srv6-top { + description + "Top-level grouping for srv6"; + container srv6 { + description + "srv6 configuration"; + uses srv6-locators-top { + when "current()/../oc-netinst:name = 'default'" { + description + "SRv6 locator configuration is only valid with the default + network instance."; + } + } + uses srv6-gtp-tunnel-termination-top { + when "current()/../oc-netinst:name != 'default'" { + description + "SRv6 tunnel termination configuration is not valid with the default + network instance."; + } + } + + uses srv6-encapsulation-top { + when "current()/../oc-netinst:name = 'default'" { + description + "SRv6 encapsulation configuration is only valid with the default + network instance."; + } + } + + uses srv6-clients-top { + when "current()/../oc-netinst:name = 'default'" { + description + "SRv6 clients info is only valid with the default + network instance."; + } + } + + + uses srv6-local-sids-top { + when "current()/../oc-netinst:name = 'default'" { + description + "SRv6 local sid info is only valid with the default + network instance."; + } + } + + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + uses srv6-top { + when "current()/oc-netinst:name != 'management'" { + description + "SRv6 configuration is not valid with the management network instance."; + } + } + + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-storm-control.yang b/vendor/arrcus/arcos/v521/arcos-storm-control.yang new file mode 100644 index 000000000..4784ed347 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-storm-control.yang @@ -0,0 +1,138 @@ +module arcos-storm-control { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/storm-control"; + prefix arc-strm-ctl; + + import iana-if-type { + prefix ianaift; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import openconfig-yang-types { + prefix oc-yang; + } + + import openconfig-if-ethernet { + prefix oc-eth; + } + + import openconfig-if-aggregate { + prefix oc-lag; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the storm control feature in ArcOS + + Copyright (c) 2016-2023 by Arrcus, Inc. + All rights reserved."; + + + revision 2023-01-09 { + description "Add option to configure rates in kbps"; + } + + revision 2022-11-02 { + description "Update min value configurable for broadcast-level, + multicast-level and unknown-unicast-level"; + } + + grouping storm-control-top { + description + "Top-level grouping for layer 2 storm control feature"; + + container storm-control { + description + "Storm control feature for a port"; + leaf broadcast-level { + type decimal64 { + fraction-digits 2; + range "0.01..100"; + } + description "broadcast traffic rate limit as percentage of port speed"; + } + leaf multicast-level { + type decimal64 { + fraction-digits 2; + range "0.01..100"; + } + description "multicast traffic rate limit as percentage of port speed"; + } + leaf unknown-unicast-level { + type decimal64 { + fraction-digits 2; + range "0.01..100"; + } + description "unknown-unicast traffic rate limit as percentage of port speed"; + } + leaf broadcast-kbps { + type uint32 { + range "1..4294967295"; + } + units "kilobits per second"; + description "broadcast traffic rate limit in kilobits per second"; + } + leaf multicast-kbps { + type uint32 { + range "1..4294967295"; + } + units "kilobits per second"; + description "multicast traffic rate limit in kilobits per second"; + } + leaf unknown-unicast-kbps { + type uint32 { + range "1..4294967295"; + } + units "kilobits per second"; + description "unknown-unicast traffic rate limit in kilobits per second"; + } + + must "not(broadcast-level and broadcast-kbps)" { + error-message "Configure only one of either broadcast-level or broadcast-kbps"; + } + must "not(multicast-level and multicast-kbps)" { + error-message "Configure only one of either multicast-level or multicast-kbps"; + } + must "not(unknown-unicast-level and unknown-unicast-kbps)" { + error-message "Configure one of either unknown-unicast-level or unknown-unicast-kbps"; + } + container state { + config false; + leaf bcast-Kbps { + type uint32; + description "broadcast rate limit in Kbps"; + } + leaf mcast-Kbps { + type uint32; + description "multicast rate limit in Kbps"; + } + leaf uucast-Kbps { + type uint32; + description "unknown unicast rate limit in Kbps"; + } + } + } + } + + augment "/oc-if:interfaces/oc-if:interface" { + uses storm-control-top { + when "(current()/oc-if:name != 'ma1' and " + + "(((current()/oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd') or " + + "(current()/oc-if:config/oc-if:type = 'ianaift:ieee8023adLag')) and " + + "(boolean(current()/oc-eth:ethernet/oc-eth:config/oc-lag:aggregate-id) != 'true')))"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-sync-e.yang b/vendor/arrcus/arcos/v521/arcos-sync-e.yang new file mode 100644 index 000000000..f205f4451 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-sync-e.yang @@ -0,0 +1,273 @@ +module arcos-sync-e { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/sync-e/"; + prefix arc-sync-e; + + import tailf-common { + prefix tailf; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import ietf-yang-types { + prefix yang; + } + + import arcos-features { + prefix arc-features; + } + + import ietf-interfaces { + prefix if; + reference + "RFC 8343: A YANG Data Model for Interface Management"; + } + + organization + "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + E-mail: yang-support@arrcus.com"; + + description + "This module lists arrcus sync-e related information. + Copyright (c) 2023 by Arrcus, Inc. + All rights reserved."; + + revision 2023-03-24 { + description + "Add sync-e configuration"; + } + + grouping sync-e-state { + leaf sync-e-clock-state { + config false; + type enumeration { + enum free-run { + value 0; + description "Clock is in free-run state"; + } + enum holdover { + value 1; + tailf:code-name "synce-holdover"; + description "Clock is in holdover state"; + } + enum locked { + value 2; + description "Clock is in locked state"; + } + } + description + "SyncE clock state"; + } + leaf synce-state-duration { + config false; + type string; + description + "Duration of current SyncE Clock state."; + } + leaf dpll-clock-state { + config false; + type enumeration { + enum free-run { + value 0; + description "DPLL Clock is in free-run state"; + } + enum holdover { + value 1; + tailf:code-name "dpll-holdover"; + description "DPLL Clock is in holdover state"; + } + enum fastlock { + value 2; + description "DPLL Clock is in fastlock state"; + } + enum acquiring { + value 3; + description "DPLL Clock is in aquiring state"; + } + enum locked { + value 4; + tailf:code-name "dpll-locked"; + description "DPLL Clock is in locked state"; + } + } + description + "DPLL (Digital Phase Locked Loop) clock state."; + } + } + + container sync-e { + leaf enabled { + type boolean; + default false; + description + "Enable / Disable SyncE."; + } + leaf holdover { + type uint32 { + range 0..1440; + } + default 10; + units "minutes"; + description + "Set synchronous holdover time in minutes."; + } + leaf quality-level-enabled { + type boolean; + default true; + description + "Enable / Disable quality level parameters."; + } + leaf revertive-enabled { + type boolean; + default true; + description + "Configure revertive mode."; + } + leaf synchronization-network-option { + type enumeration { + enum option-1 { + value 1; + } + enum option-2 { + value 2; + } + } + description + "The Network synchronization networking options. + Values for this enumeration are specified + in G.781."; + reference + "ITU-T G.781-2017: 5.3.1"; + } + leaf interface-name { + config false; + type if:interface-ref; + description + "SyncE interface which got selected as source, + if not then interface which was configured as input sources will be displayed."; + } + leaf esmc-status { + config false; + type string; + description + "ESMC(Ethernet Synchronization messaging Channel) Interface status"; + } + leaf is-selected-source { + config false; + type boolean; + default true; + description + "ESMC(Ethernet Synchronization messaging Channel) Interface is selected as input source or not"; + } + leaf ql-received { + config false; + type string; + description + "Quality-level received on interface."; + } + uses sync-e-state; + } + + grouping ptp-interface-sync-e-top { + container sync-e { + leaf enabled { + type boolean; + default false; + description + "Enable / Disable synchronous mode on interface."; + } + leaf wait-to-restore { + type uint8 { + range 0..12; + } + default 5; + units "minutes"; + description + "Configure wait to restore timer in minutes"; + } + leaf clock-source-id { + type uint8 { + range 1..max; + } + description + "Specify Clock-Source ID"; + } + leaf holdoff { + type uint16 { + range 300..1800; + } + default 300; + units "milliseconds"; + description + "Enter hold-off timer value in milliseconds"; + } + leaf input-source { + type int32 { + range -1..max; + } + default -1; + description + "Configure input sources. + Highest priority is 1, lowest is 255, and 0 will + exclude the interface from the clock selection. + Use -1 to disable the input source on the specific interface."; + } + leaf mode-lockout { + type boolean; + default false; + description + "Enable / Disable the external command lockout."; + } + leaf mode-synchronous { + type boolean; + default false; + description + "Enable / Disable Synchronous Mode."; + } + leaf set-output-source { + type boolean; + default false; + description + "Set ethernet interface as a timing output source."; + } + leaf quality-level { + type enumeration { + enum QL_DNU { + value 2; + } + enum QL_PRC { + value 24; + } + enum QL_SEC { + value 28; + } + enum QL_SSU_A { + value 30; + } + enum QL_SSU_B { + value 31; + } + } + description + "Configure clock source QL (quality level) as defined in ITU-T G.781."; + reference + "ITU-T standard G.781 section 5.4"; + } + } + } + + augment "/oc-if:interfaces/oc-if:interface" { + uses ptp-interface-sync-e-top { + when "/arc-features:features/arc-features:feature[arc-features:name=" + + "'arc-features:ARCOS_PTP_BOUNDARY_CLOCK']/arc-features:supported = 'true'"; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-system-information.yang b/vendor/arrcus/arcos/v521/arcos-system-information.yang new file mode 100644 index 000000000..586f85563 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-system-information.yang @@ -0,0 +1,31 @@ +module arcos-system-information { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/system-information"; + prefix arc-sys-info; + + description + "This module is for system modifiable read/write nodes"; + + grouping system-information-top { + description + "Top-level grouping for system information"; + + container system-information { + description + "Top-level container for system-information data"; + + leaf version { + type string; + description + "The version field, while r/w is meant to be system + defined and not editable by clients. The purpose + is to carry a version node within a configuration + datastore for purposes of exported configurations. + Access to the node is restricted on the backend."; + } + } + } + + uses system-information-top; + +} diff --git a/vendor/arrcus/arcos/v521/arcos-system-logging-types.yang b/vendor/arrcus/arcos/v521/arcos-system-logging-types.yang new file mode 100644 index 000000000..da03bbda1 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-system-logging-types.yang @@ -0,0 +1,47 @@ +module arcos-system-logging-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/system/logging/types"; + prefix arc-sys-log-types; + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines native ArcOS system logging + types. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + + revision 2020-02-26 { + description "Initial version"; + } + + identity LOG_TIMESTAMP_FORMAT { + description + "Base identity for logging timestamp formats"; + } + + identity TRADITIONAL { + base LOG_TIMESTAMP_FORMAT; + description + "RFC3164 Traditional timestamp format"; + } + + identity PRECISION { + base LOG_TIMESTAMP_FORMAT; + description + "RFC3339 High precision timestamp format"; + } + +} + diff --git a/vendor/arrcus/arcos/v521/arcos-system-management.yang b/vendor/arrcus/arcos/v521/arcos-system-management.yang new file mode 100644 index 000000000..ac308282c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-system-management.yang @@ -0,0 +1,193 @@ +module arcos-system-management { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/system/management"; + prefix arc-sys-mgmt; + + import openconfig-system-logging { + prefix oc-sys-log; + } + + import arcos-system-types { + prefix arc-sys-types; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS system management domain. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + + revision 2022-09-30 { + description + "Added leaf-list protocols under tls"; + } + + revision 2019-10-15 { + description "Initial version"; + } + + grouping system-tls-config { + description + ""; + + leaf certificate-file { + type string { + length "1..100"; + } + default "/mnt/onl/config/pki/certificate"; + must 'boolean(../key-file)' { + error-message + "If certificate-file is configured, key-file must be configured"; + } + description + "Absolute file path of the server certificate"; + } + + leaf key-file { + type string { + length "1..100"; + } + default "/mnt/onl/config/pki/key.pem"; + must 'boolean(../certificate-file)' { + error-message + "If key-file is configured, certificate-file must be configured"; + } + description + "Absolute file path to the corresponding private key file for the + server certificate"; + } + + leaf-list protocols { + type arc-sys-types:tls-versions; + ordered-by user; + default "DEFAULT"; + must "(not(../protocols = 'DEFAULT' and count(../protocols) > 1))" { + error-message "'DEFAULT' and TLS protocol versions are mutually exclusive"; + } + description + "An ordered list of TLS protocol versions that the agent supports"; + } + } + + grouping system-tls-top { + description + "Top-level grouping for system TLS attributes"; + + container tls { + description + "Top-level container for TLS attributes"; + + container config { + description + "Configuration data for TLS related attributes"; + + uses system-tls-config; + } + + container state { + config false; + + description + "Operational state data for TLS related attributes"; + + uses system-tls-config; + } + } + } + + grouping system-clients-state { + description + "Operational state data of connected clients"; + + leaf-list paths { + type string; + description + "Subscribed Paths"; + } + } + + grouping system-clients-top { + description + "Top-level grouping for system client data"; + + container clients { + description + "Top level container for connected clients"; + container state { + config false; + description + "Operational state data for the clients"; + list client { + leaf peer-address { + type string; + description + "IP address and port of the connected client"; + } + uses system-clients-state; + } + } + } + } + + grouping logType { + description + "Common log configuration parameters. These parameters + take effect for both existing and new sessions."; + container syslog { + leaf enabled { + type boolean; + default "false"; + description + "enabled is either 'true' or 'false'. If 'true', syslog + messages are sent."; + } + leaf facility { + type identityref { + base oc-sys-log:SYSLOG_FACILITY; + } + must "derived-from-or-self(current(), 'oc-sys-log:SYSTEM_DEAMON') or " + + "derived-from-or-self(current(), 'oc-sys-log:AUTHPRIV') or " + + "derived-from-or-self(current(), 'oc-sys-log:LOCAL0') or " + + "derived-from-or-self(current(), 'oc-sys-log:LOCAL1') or " + + "derived-from-or-self(current(), 'oc-sys-log:LOCAL2') or " + + "derived-from-or-self(current(), 'oc-sys-log:LOCAL3') or " + + "derived-from-or-self(current(), 'oc-sys-log:LOCAL4') or " + + "derived-from-or-self(current(), 'oc-sys-log:LOCAL5') or " + + "derived-from-or-self(current(), 'oc-sys-log:LOCAL6') or " + + "derived-from-or-self(current(), 'oc-sys-log:LOCAL7')" { + error-message "audit log facility is either SYSTEM_DAEMON, + AUTHPRIV, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, + LOCAL5, LOCAL6, LOCAL7"; + } + description + "facility is either 'daemon', 'authpriv', + 'local0', ..., 'local7'"; + } + } + } + + grouping audit-log-top { + container auditLog { + description + "auditLog is an audit log recording successful and failed + logins to the ConfD backplane and also user operations + performed from the CLI or northbound interfaces. This log + is enabled by default. This configuration parameter takes + effect for both existing and new sessions."; + uses logType; + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-system-types.yang b/vendor/arrcus/arcos/v521/arcos-system-types.yang new file mode 100644 index 000000000..ddca5fc56 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-system-types.yang @@ -0,0 +1,308 @@ +module arcos-system-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/system/types"; + prefix arc-sys-types; + + import iana-crypt-hash { + prefix ianach; + } + + import tailf-common { + prefix tailf; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines native ArcOS system + types. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + revision 2022-09-30 { + description + "Added typedef tls-versions"; + } + + revision 2019-10-01 { + description "Initial version"; + } + + typedef user-password { + type ianach:crypt-hash { + pattern + '[a-zA-Z0-9\s!"#$' + + "'" + + '%&\(\)\*\+,\-\./:;<=>\?@\[\\\]^_|`{}~]{6,128}' + + '|$6$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{86}'; + } + } + + typedef encrypted-string { + type tailf:aes-cfb-128-encrypted-string; + } + + typedef ssh-cipher-suite { + type enumeration { + enum AES128_CBC { + description + "128-bit AES with Cipher Block Chaining"; + } + enum AES192_CBC { + description + "192-bit AES with Cipher Block Chaining"; + } + enum AES256_CBC { + description + "256-bit AES with Cipher Block Chaining"; + } + enum "RIJNDAEL_CBC@LYSATOR.LIU.SE" { + description + "Rijndael/AES with Cipher Block Chaining"; + } + enum AES128_CTR { + description + "128-bit AES with Counter Mode"; + } + enum AES192_CTR { + description + "192-bit AES with Counter Mode"; + } + enum AES256_CTR { + description + "256-bit AES with Counter Mode"; + } + enum "AES128_GCM@OPENSSH.COM" { + description + "128-bit AES with Galois/Counter Mode"; + } + enum "AES256_GCM@OPENSSH.COM" { + description + "256-bit AES with Galois/Counter Mode"; + } + enum "CHACHA20_POLY1305@OPENSSH.COM" { + description + "ChaCha20 stream cipher and Poly1305 MAC"; + } + } + } + + typedef ssh-mac-suite { + type enumeration { + enum HMAC_SHA1 { + description + "Hash-based MAC using SHA1"; + } + enum HMAC_SHA1_96 { + description + "96-bit Hash-based MAC using SHA1"; + } + enum HMAC_SHA2_256 { + description + "256-bit Hash-based MAC using SHA2"; + } + enum HMAC_SHA2_512 { + description + "512-bit Hash-based MAC using SHA2"; + } + enum HMAC_MD5 { + description + "Hash-based MAC using MD5"; + } + enum HMAC_MD5_96 { + description + "96-bit Hash-based MAC using MD5"; + } + enum "UMAC_64@OPENSSH.COM" { + description + "64-bit Universal Hash-based MAC"; + } + enum "UMAC_128@OPENSSH.COM" { + description + "128-bit Universal Hash-based MAC"; + } + enum "HMAC_SHA1_ETM@OPENSSH.COM" { + description + "Hash-based MAC using SHA1 - Encrypt-then-MAC"; + } + enum "HMAC_SHA1_96_ETM@OPENSSH.COM" { + description + "96-bit Hash-based MAC using SHA1 - Encrypt-then-MAC"; + } + enum "HMAC_SHA2_256_ETM@OPENSSH.COM" { + description + "256-bit Hash-based MAC using SHA2 - Encrypt-then-MAC"; + } + enum "HMAC_SHA2_512_ETM@OPENSSH.COM" { + description + "512-bit Hash-based MAC using SHA2 - Encrypt-then-MAC"; + } + enum "HMAC_MD5_ETM@OPENSSH.COM" { + description + "Hash-based MAC using MD5 - Encrypt-then-MAC"; + } + enum "HMAC_MD5_96_ETM@OPENSSH.COM" { + description + "96-bit Hash-based MAC using MD5 - Encrypt-then-MAC"; + } + enum "UMAC_64_ETM@OPENSSH.COM" { + description + "64-bit Universal Hash-based MAC - Encrypt then MAC"; + } + enum "UMAC_128_ETM@OPENSSH.COM" { + description + "128-bit Universal Hash-based MAC - Encrypt then MAC"; + } + } + } + + identity MM_ACTIVATION_MODE { + description + "Base identity for maintenance mode activation config."; + } + identity TIMER { + base MM_ACTIVATION_MODE; + description + "Maintenance mode activation based on timer."; + } + identity HEURISTICS { + base MM_ACTIVATION_MODE; + description + "Maintenance mode activation based on heuristics."; + } + identity MM_STATE { + description + "Base type for maintenance mode state."; + } + identity UNKNOWN { + base MM_STATE; + description + "Maintenance mode state unknown"; + } + identity ENABLE_ACK_RCVD { + base MM_STATE; + description + "Maintenance mode start received and processed."; + } + identity DISABLE_ACK_RCVD { + base MM_STATE; + description + "Maintenance mode stop received and processed."; + } + identity DEACTIVATION_IN_PROGRESS { + base MM_STATE; + description + "Maintenance mode stop received and in progress."; + } + identity ACTIVATION_IN_PROGRESS { + base MM_STATE; + description + "Maintenance mode start received and in progress."; + } + identity PROFILING { + base MM_STATE; + description + "Maintenance mode start ack received and profiling in progress."; + } + identity ENABLED { + base MM_STATE; + description + "Maintenance mode enabled."; + } + identity READY { + base MM_STATE; + description + "Maintenance mode activated."; + } + identity DISABLED { + base MM_STATE; + description + "Maintenance mode disabled."; + } + identity FAILED { + base MM_STATE; + description + "Maintenance mode activation failed at the profiling level"; + } + identity TIMEOUT { + base MM_STATE; + description + "Maintenance mode activation failed during the control plane activation phase."; + } + + identity SNMP_AUTH_TYPE { + description + "Base identity for SNMP Authentication Hash Algorithms"; + } + + identity SNMP_AUTH_NONE { + base SNMP_AUTH_TYPE; + description + "No Authentication Protocol"; + } + + identity SNMP_AUTH_MD5 { + base SNMP_AUTH_TYPE; + description + "The HMAC-MD5-96 Digest Authentication Protocol"; + } + + identity SNMP_AUTH_SHA { + base SNMP_AUTH_TYPE; + description + "The HMAC-SHA-96 Digest Authentication Protocol"; + } + + identity SNMP_PRIV_TYPE { + description + "Base identity for SNMP Privacy Ciphers"; + } + + identity SNMP_PRIV_NONE { + base SNMP_PRIV_TYPE; + description + "No Privacy Ciphers"; + } + + identity SNMP_PRIV_DES { + base SNMP_PRIV_TYPE; + description + "The CBC-DES Symmetric Encryption Protocol"; + } + + identity SNMP_PRIV_AES { + base SNMP_PRIV_TYPE; + description + "The CFB128-AES-128 Privacy Protocol"; + } + + typedef tls-versions { + type enumeration { + enum DEFAULT { + description + "Specifies that TLS protocol versions tlsv1.2 tlsv1.1 are to be used by the + server in that order of preference."; + } + + enum TLS_1.1 { + description + "Version 1.1 of TLS Protocol"; + } + + enum TLS_1.2 { + description + "Version 1.2 of TLS Protocol"; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-system.yang b/vendor/arrcus/arcos/v521/arcos-system.yang new file mode 100644 index 000000000..b77f81853 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-system.yang @@ -0,0 +1,416 @@ +module arcos-system { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/system"; + prefix arc-sys; + + import ietf-inet-types { + prefix inet; + } + + import openconfig-interfaces { + prefix oc-if; + } + + import arcos-platform { + prefix arc-platform; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for the + native ArcOS system domain. + + Copyright (c) 2016-2019 by Arrcus, Inc. + All rights reserved."; + + revision 2022-06-29 { + description + "Support difference between Candidate and Running Datastores"; + } + + revision 2019-10-01 { + description "Initial version"; + } + + typedef status-code { + type enumeration { + enum SUCCESS { + description + "Operation succeeded"; + } + + enum FAILURE { + description + "Operation failed"; + } + } + } + + + rpc request-configuration-factory-default-reboot { + description + "Reset config back to factory default and reboot device. + NOTE: This command cannot be used for ArcRR (container) images"; + + output { + leaf status { + type status-code; + description + "Result of the operation"; + } + + leaf message { + type string; + description + "Description of the result of the operation"; + } + } + } + + rpc request-system-ztp-stop { + description + "Stop ZTP process. + NOTE: This command cannot be used on container images"; + } + + rpc request-system-stateful-restart { + description + "Stop ZTP process. + NOTE: This command cannot be used on container images"; + } + + rpc load-configuration { + description + "Request to load a configuration to the candidate datastore + and either commit the configuration to the running datastore + or provide a diff back to the client in the native CLI text + format. + + If the commit presence container is omitted from the request + then the request is a dry-run which will return a diff of the + candidate and running datastores back to the client in CLI text + format. For a diff to be returned, the encoding must be set to + CLI."; + + input { + leaf operation { + mandatory true; + type enumeration { + enum MERGE { + description + "Merge the configuration specified in the config leaf + into the candidate datastore."; + } + enum OVERRIDE { + description + "Override the complete configuration specified in the + config leaf into the candidate datastore"; + } + enum REPLACE { + description + "Replace the configuration specified in the config leaf + into the candidate datastore. All other configuration + remains as-is."; + } + } + description + "The load operation for the configuration specified within + the config leaf."; + } + + leaf encoding { + type enumeration { + enum CLI { + description + "Native text based (CLI) configuration format encoding."; + } + enum JSON { + description + "JSON configuration format encoding."; + } + } + default CLI; + description + "The encoding format of the configuration specified within + the config leaf."; + } + + leaf config { + mandatory true; + type string; + description + "The configuration in the encoding format specified from the + encoding leaf."; + } + + container commit { + presence "Commit the candidate configuration"; + description + "Commit the candidate configuration to the running datastore. + If this option is omitted then the server will attempt to + load the configuration specified in the config leaf and + return a diff (in CLI text based format) to the caller + within the output data node. If the commit is successful, + an rpc-reply with an is returned to the caller."; + + leaf comment { + type string; + description + "Optional comment to be recorded for the commit + transaction."; + } + } + } + + output { + leaf data { + type string; + description + "This leaf is returned if the commit node is omitted from the + request. When this occurs, a dry-run takes effect and a + diff between the candidate and running datastore is returned + to the the client. This is only returned if the request + encoding is set to 'CLI'. For all other encodings, an + rpc-error is returned to the client."; + } + } + } + + rpc get-configuration { + description + "Request to retrieve a configuration from the running datastore + in the encoding format specified by the client."; + + input { + leaf encoding { + type enumeration { + enum CLI { + description + "Native text based (CLI) configuration format encoding."; + } + enum JSON { + description + "JSON configuration format encoding."; + } + } + default CLI; + description + "The encoding format of the configuration to be returned + from the running datastore."; + } + } + + output { + leaf data { + type string; + description + "Contains the full configuration of the running datastore in + the encoding format specified in the request."; + } + } + } + + rpc get-diff { + description + "Request to retrieve a configuration diff between the candidate and the + running datastore in the encoding format specified by the client."; + + input { + leaf encoding { + type enumeration { + enum CLI { + description + "Native text based (CLI) configuration format encoding."; + } + enum JSON { + description + "JSON configuration format encoding."; + } + enum XML { + description + "XML configuration format encoding."; + } + } + default XML; + description + "The encoding format of the configuration to be returned."; + } + } + + output { + leaf data { + type string; + description + "Contains the configuration diff between the candidate datastore in + the current session and the running datastore in the encoding format + specified in the request."; + } + } + } + + rpc request-system-reboot { + description + "Initiate a reboot to the system. If no input options are given, + then a check is done to see if any outstanding exclusive locks + are held on the candidate database. If so then an rpc-error is + returned to the caller. To override this check, the force + option must be given in the RPC call."; + + input { + leaf wait-time { + type uint8 { + range 1..120; + } + units minutes; + description + "Optional node to specify the wait time in minutes (up to 2hr) + before rebooting the system."; + } + + leaf cancel { + type empty; + description + "Cancel a previous request for reboot."; + } + + leaf force { + type empty; + description + "Force the reboot and do not check if any exclusive locks + exist."; + } + } + } + + rpc request-software-load { + description + "Initiate the load of a software package"; + + input { + leaf package-name { + mandatory true; + type inet:uri { + length 1..max; + } + description + "A valid ArcOS installation executable either represented + as a valid URI scheme (e.g. scp://, sftp://, http://) or + a filesystem absolute path."; + } + + leaf tag { + mandatory true; + type string { + length 1..128; + } + description + "Upgrade Bundle Tag"; + } + } + } + + rpc request-software-install { + description + "Initiate the installation (and optional download) of a + software package and configuration file to apply post + installation."; + + input { + leaf package-name { + type inet:uri { + length 1..max; + } + description + "A valid ArcOS installation executable either represented + as a valid URI scheme (e.g. scp://, sftp://, http://) or + a filesystem absolute path."; + } + + leaf upgrade-bundle-tag { + type inet:uri { + length 1..max; + } + description + "Upgrade Bundle Tag"; + + when "(/arc-platform:platform/arc-platform:deployment-type = 'arc-platform:DISTRIBUTED')"; + } + + leaf force { + type empty; + description + "Skip any safety checks and force installation process to continue. + Use with caution, may lead to traffic disruptions."; + } + + leaf hitless { + type empty; + description + "Perform a hitless ugprade"; + + when "((/arc-platform:platform/arc-platform:type = 'arc-platform:IX8A') or " + + "(/arc-platform:platform/arc-platform:type = 'arc-platform:AS7712'))"; + } + + leaf config-filename { + type inet:uri { + length 1..max; + } + description + "A valid ArcOS configuration to be applied post-installation/ + reboot. The configuration file must be compatible with the + destination software version and is either represented as a + valid URI scheme (e.g. scp://, sftp://, http://) or a + filesystem absolute path."; + when "not(../hitless)"; + } + + leaf source-interface { + type oc-if:base-interface-ref; + description + "Network-instance name to source any external requests from + for retrieval of package-name or config-filename from remote + destinations based off the URI scheme."; + } + + leaf factory-default { + type empty; + description + "Reset the running configuration to factory-default post the + installation process. If a config-filename is also passed + in, the factory-default option takes precedence."; + when "not(../hitless)"; + } + } + } + + rpc request-software-rollback { + description + "Initiate rollback of the last installated software package."; + } + + rpc debug-process-smd { + description + "Control debugging for the System Management Daemon (smd) + process. An RPC request with no input nodes indicates to + enable debugging for the entire process."; + + input { + leaf disable { + type empty; + description + "Disable process debugging."; + } + } + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-te-types.yang b/vendor/arrcus/arcos/v521/arcos-te-types.yang new file mode 100644 index 000000000..610afd64c --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-te-types.yang @@ -0,0 +1,1809 @@ +module arcos-te-types { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/arcos-te-types"; + prefix "arc-te-types"; + + import openconfig-yang-types { + prefix yang; + } + import ietf-inet-types { + prefix inet; + } + + organization "Arrcus, Inc"; + + contact + "Email: eng@arrcus.com"; + + description + "This module defines type definitions for Traffic Engineering + (TE). + + Copyright (c) 2022 by Arrcus, Inc. + All rights reserved."; + + revision "2022-02-24" { + description + "Initial version."; + } + + // Typedefs + typedef te-hop-type { + type enumeration { + enum loose { + description + "A loose hop in an explicit path."; + } + enum strict { + description + "A strict hop in an explicit path."; + } + } + description + "Enumerated type for specifying loose or strict paths."; + reference + "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, + Section 4.3.3"; + } + + typedef te-node-id { + type yang:dotted-quad; + description + "A type representing the identifier for a node in a TE + topology. + The identifier is represented as 4 octets in dotted-quad + notation. + This attribute MAY be mapped to the Router Address TLV + described in Section 2.4.1 of RFC 3630, the TE Router ID + described in Section 3 of RFC 6827, the Traffic Engineering + Router ID TLV described in Section 4.3 of RFC 5305, or the + TE Router ID TLV described in Section 3.2.1 of RFC 6119. + The reachability of such a TE node MAY be achieved by a + mechanism such as that described in Section 6.2 of RFC 6827."; + reference + "RFC 3630: Traffic Engineering (TE) Extensions to OSPF + Version 2, Section 2.4.1 + RFC 5305: IS-IS Extensions for Traffic Engineering, + Section 4.3 + RFC 6119: IPv6 Traffic Engineering in IS-IS, Section 3.2.1 + RFC 6827: Automatically Switched Optical Network (ASON) + Routing for OSPFv2 Protocols, Section 3"; + } + + typedef te-tp-id { + type union { + type uint32; + // Unnumbered + type inet:ip-address; + // IPv4 or IPv6 address + } + description + "An identifier for a TE link endpoint on a node. + This attribute is mapped to a local or remote link identifier + as defined in RFCs 3630 and 5305."; + reference + "RFC 3630: Traffic Engineering (TE) Extensions to OSPF + Version 2 + RFC 5305: IS-IS Extensions for Traffic Engineering"; + } + + typedef te-label-direction { + type enumeration { + enum forward { + description + "Label allocated for the forward LSP direction."; + } + enum reverse { + description + "Label allocated for the reverse LSP direction."; + } + } + description + "Enumerated type for specifying the forward or reverse + label."; + } + + typedef te-link-direction { + type enumeration { + enum incoming { + description + "The explicit route represents an incoming link on + a node."; + } + enum outgoing { + description + "The explicit route represents an outgoing link on + a node."; + } + } + description + "Enumerated type for specifying the direction of a link on + a node."; + } + + typedef generalized-label { + type binary; + description + "Generalized Label. Nodes sending and receiving the + Generalized Label are aware of the link-specific + label context and type."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description. Section 3.2."; + } + + typedef te-bandwidth { + type string { + pattern '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|' + + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?' + + '[pP](\+)?(12[0-7]|' + + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+' + + '(,(0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|' + + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?' + + '[pP](\+)?(12[0-7]|' + + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+))*'; + } + description + "This is the generic bandwidth type. It is a string containing + a list of numbers separated by commas, where each of these + numbers can be non-negative decimal, hex integer, or + hex float: + + (dec | hex | float)[*(','(dec | hex | float))] + + For the packet-switching type, the string encoding follows + the type 'bandwidth-ieee-float32' as defined in RFC 8294 + (e.g., 0x1p10), where the units are in bytes per second. + + For the Optical Transport Network (OTN) switching type, + a list of integers can be used, such as '0,2,3,1', indicating + two ODU0s and one ODU3. ('ODU' stands for 'Optical Data + Unit'.) For Dense Wavelength Division Multiplexing (DWDM), + a list of pairs of slot numbers and widths can be used, + such as '0,2,3,3', indicating a frequency slot 0 with + slot width 2 and a frequency slot 3 with slot width 3. + Canonically, the string is represented as all lowercase and in + hex, where the prefix '0x' precedes the hex number."; + reference + "RFC 8294: Common YANG Data Types for the Routing Area + ITU-T Recommendation G.709: Interfaces for the + optical transport network"; + } + + typedef te-gen-node-id { + type union { + type te-node-id; + type inet:ip-address; + } + description + "Generic type that identifies a node in a TE topology."; + } + + typedef te-common-status { + type enumeration { + enum up { + description + "Enabled."; + } + enum down { + description + "Disabled."; + } + enum testing { + description + "In some test mode."; + } + enum preparing-maintenance { + description + "The resource is disabled in the control plane to prepare + for a graceful shutdown for maintenance purposes."; + reference + "RFC 5817: Graceful Shutdown in MPLS and Generalized MPLS + Traffic Engineering Networks"; + } + enum maintenance { + description + "The resource is disabled in the data plane for maintenance + purposes."; + } + enum unknown { + description + "Status is unknown."; + } + } + description + "Defines a type representing the common states of a TE + resource."; + } + + typedef te-ds-class { + type uint8 { + range "0..7"; + } + description + "The Differentiated Services Class-Type of traffic."; + reference + "RFC 4124: Protocol Extensions for Support of Diffserv-aware + MPLS Traffic Engineering, Section 4.3.1"; + } + + typedef te-global-id { + type uint32; + description + "An identifier to uniquely identify an operator, which can be + either a provider or a client. + The definition of this type is taken from RFCs 6370 and 5003. + This attribute type is used solely to provide a globally + unique context for TE topologies."; + reference + "RFC 5003: Attachment Individual Identifier (AII) Types for + Aggregation + RFC 6370: MPLS Transport Profile (MPLS-TP) Identifiers"; + } + + typedef te-link-access-type { + type enumeration { + enum point-to-point { + description + "The link is point-to-point."; + } + enum multi-access { + description + "The link is multi-access, including broadcast and NBMA."; + } + } + description + "Defines a type representing the access type of a TE link."; + reference + "RFC 3630: Traffic Engineering (TE) Extensions to OSPF + Version 2"; + } + + typedef te-metric { + type uint32; + description + "TE metric."; + reference + "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a + second MPLS Traffic Engineering (TE) Metric"; + } + + typedef te-oper-status { + type te-common-status; + description + "Defines a type representing the operational status of + a TE resource."; + } + + typedef te-admin-status { + type te-common-status; + description + "Defines a type representing the administrative status of + a TE resource."; + } + + typedef te-path-disjointness { + type bits { + bit node { + position 0; + description + "Node disjoint."; + } + bit link { + position 1; + description + "Link disjoint."; + } + bit srlg { + position 2; + description + "SRLG (Shared Risk Link Group) disjoint."; + } + } + description + "Type of the resource disjointness for a TE tunnel path."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + typedef te-recovery-status { + type enumeration { + enum normal { + description + "Both the recovery span and the working span are fully + allocated and active, data traffic is being + transported over (or selected from) the working + span, and no trigger events are reported."; + } + enum recovery-started { + description + "The recovery action has been started but not completed."; + } + enum recovery-succeeded { + description + "The recovery action has succeeded. The working span has + reported a failure/degrade condition, and the user traffic + is being transported (or selected) on the recovery span."; + } + enum recovery-failed { + description + "The recovery action has failed."; + } + enum reversion-started { + description + "The reversion has started."; + } + enum reversion-succeeded { + description + "The reversion action has succeeded."; + } + enum reversion-failed { + description + "The reversion has failed."; + } + enum recovery-unavailable { + description + "The recovery is unavailable, as a result of either an + operator's lockout command or a failure condition + detected on the recovery span."; + } + enum recovery-admin { + description + "The operator has issued a command to switch the user + traffic to the recovery span."; + } + enum wait-to-restore { + description + "The recovery domain is recovering from a failure/degrade + condition on the working span that is being controlled by + the Wait-to-Restore (WTR) timer."; + } + } + description + "Defines the status of a recovery action."; + reference + "RFC 4427: Recovery (Protection and Restoration) Terminology + for Generalized Multi-Protocol Label Switching (GMPLS) + RFC 6378: MPLS Transport Profile (MPLS-TP) Linear Protection"; + } + + typedef te-template-name { + type string { + pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*'; + } + description + "A type for the name of a TE node template or TE link + template."; + } + + typedef te-topology-event-type { + type enumeration { + enum add { + value 0; + description + "A TE node or TE link has been added."; + } + enum remove { + value 1; + description + "A TE node or TE link has been removed."; + } + enum update { + value 2; + description + "A TE node or TE link has been updated."; + } + } + description + "TE event type for notifications."; + } + + typedef te-topology-id { + type union { + type string { + length "0"; + // empty string + } + type string { + pattern '([a-zA-Z0-9\-_.]+:)*' + + '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*'; + } + } + description + "An identifier for a topology. + It is optional to have one or more prefixes at the beginning, + separated by colons. The prefixes can be 'network-types' as + defined in the 'ietf-network' module in RFC 8345, to help the + user better understand the topology before further inquiry + is made."; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + + typedef admin-group { + type yang:hex-string { + /* 01:02:03:04 */ + length "1..11"; + } + description + "Administrative group / resource class / color representation + in 'hex-string' type. + The most significant byte in the hex-string is the farthest + to the left in the byte sequence. Leading zero bytes in the + configured value may be omitted for brevity."; + reference + "RFC 3630: Traffic Engineering (TE) Extensions to OSPF + Version 2 + RFC 5305: IS-IS Extensions for Traffic Engineering + RFC 7308: Extended Administrative Groups in MPLS Traffic + Engineering (MPLS-TE)"; + } + + typedef admin-groups { + type union { + type admin-group; + type extended-admin-group; + } + description + "Derived types for TE administrative groups."; + } + + typedef extended-admin-group { + type yang:hex-string; + description + "Extended administrative group / resource class / color + representation in 'hex-string' type. + The most significant byte in the hex-string is the farthest + to the left in the byte sequence. Leading zero bytes in the + configured value may be omitted for brevity."; + reference + "RFC 7308: Extended Administrative Groups in MPLS Traffic + Engineering (MPLS-TE)"; + } + + typedef srlg { + type uint32; + description + "SRLG type."; + reference + "RFC 4203: OSPF Extensions in Support of Generalized + Multi-Protocol Label Switching (GMPLS) + RFC 5307: IS-IS Extensions in Support of Generalized + Multi-Protocol Label Switching (GMPLS)"; + } + + typedef path-attribute-flags { + type union { + type identityref { + base session-attributes-flags; + } + type identityref { + base lsp-attributes-flags; + } + } + description + "Path attributes flags type."; + } + + // Identities + identity route-usage-type { + description + "Base identity for route usage."; + } + + identity route-include-object { + base route-usage-type; + description + "'Include route' object."; + } + + identity route-exclude-object { + base route-usage-type; + description + "'Exclude route' object."; + reference + "RFC 4874: Exclude Routes - Extension to Resource ReserVation + Protocol-Traffic Engineering (RSVP-TE)"; + } + + identity route-exclude-srlg { + base route-usage-type; + description + "Excludes SRLGs."; + reference + "RFC 4874: Exclude Routes - Extension to Resource ReserVation + Protocol-Traffic Engineering (RSVP-TE)"; + } + + identity lsp-protection-type { + description + "Base identity from which LSP protection types are derived."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity lsp-protection-unprotected { + base lsp-protection-type; + description + "'Unprotected' LSP protection type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity lsp-protection-reroute-extra { + base lsp-protection-type; + description + "'(Full) Rerouting' LSP protection type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity lsp-protection-reroute { + base lsp-protection-type; + description + "'Rerouting without Extra-Traffic' LSP protection type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity lsp-protection-1-for-n { + base lsp-protection-type; + description + "'1:N Protection with Extra-Traffic' LSP protection type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity lsp-protection-1-for-1 { + base lsp-protection-type; + description + "LSP protection '1:1 Protection Type'."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity lsp-protection-unidir-1-plus-1 { + base lsp-protection-type; + description + "'1+1 Unidirectional Protection' LSP protection type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity lsp-protection-bidir-1-plus-1 { + base lsp-protection-type; + description + "'1+1 Bidirectional Protection' LSP protection type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity lsp-protection-extra-traffic { + base lsp-protection-type; + description + "Extra-Traffic LSP protection type."; + reference + "RFC 4427: Recovery (Protection and Restoration) Terminology + for Generalized Multi-Protocol Label Switching (GMPLS)"; + } + + identity restoration-scheme-type { + description + "Base identity for LSP restoration schemes."; + } + + identity restoration-scheme-preconfigured { + base restoration-scheme-type; + description + "Restoration LSP is preconfigured prior to the failure."; + reference + "RFC 4427: Recovery (Protection and Restoration) Terminology + for Generalized Multi-Protocol Label Switching (GMPLS)"; + } + + identity restoration-scheme-precomputed { + base restoration-scheme-type; + description + "Restoration LSP is precomputed prior to the failure."; + reference + "RFC 4427: Recovery (Protection and Restoration) Terminology + for Generalized Multi-Protocol Label Switching (GMPLS)"; + } + + identity restoration-scheme-presignaled { + base restoration-scheme-type; + description + "Restoration LSP is presignaled prior to the failure."; + reference + "RFC 4427: Recovery (Protection and Restoration) Terminology + for Generalized Multi-Protocol Label Switching (GMPLS)"; + } + + identity lsp-restoration-type { + description + "Base identity from which LSP restoration types are derived."; + } + + identity lsp-restoration-restore-any { + base lsp-restoration-type; + description + "Any LSP affected by a failure is restored."; + } + + identity lsp-restoration-restore-all { + base lsp-restoration-type; + description + "Affected LSPs are restored after all LSPs of the tunnel are + broken."; + } + + identity path-computation-method { + description + "Base identity for supported path computation mechanisms."; + } + + identity path-locally-computed { + base path-computation-method; + description + "Indicates a constrained-path LSP in which the + path is computed by the local LER."; + reference + "RFC 3272: Overview and Principles of Internet Traffic + Engineering, Section 5.4"; + } + + identity path-externally-queried { + base path-computation-method; + description + "Constrained-path LSP in which the path is obtained by + querying an external source, such as a PCE server. + In the case that an LSP is defined to be externally queried, + it may also have associated explicit definitions (provided + to the external source to aid computation). The path that is + returned by the external source may require further local + computation on the device."; + reference + "RFC 3272: Overview and Principles of Internet Traffic + Engineering + RFC 4657: Path Computation Element (PCE) Communication + Protocol Generic Requirements"; + } + + identity path-explicitly-defined { + base path-computation-method; + description + "Constrained-path LSP in which the path is + explicitly specified as a collection of strict and/or loose + hops."; + reference + "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels + RFC 3272: Overview and Principles of Internet Traffic + Engineering"; + } + + identity path-scope-type { + description + "Base identity from which specific path scope types are + derived."; + } + + identity path-scope-segment { + base path-scope-type; + description + "Path scope segment."; + reference + "RFC 4873: GMPLS Segment Recovery"; + } + + identity path-scope-end-to-end { + base path-scope-type; + description + "Path scope end to end."; + reference + "RFC 4873: GMPLS Segment Recovery"; + } + + identity association-type { + description + "Base identity for the tunnel association."; + } + + identity association-type-recovery { + base association-type; + description + "Association type for recovery, used to associate LSPs of the + same tunnel for recovery."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery + RFC 6780: RSVP ASSOCIATION Object Extensions"; + } + + identity association-type-resource-sharing { + base association-type; + description + "Association type for resource sharing, used to enable + resource sharing during make-before-break."; + reference + "RFC 4873: GMPLS Segment Recovery + RFC 6780: RSVP ASSOCIATION Object Extensions"; + } + + identity association-type-double-sided-bidir { + base association-type; + description + "Association type for double-sided bidirectional LSPs, + used to associate two LSPs of two tunnels that are + independently configured on either endpoint."; + reference + "RFC 7551: RSVP-TE Extensions for Associated Bidirectional + Label Switched Paths (LSPs)"; + } + + identity association-type-single-sided-bidir { + base association-type; + description + "Association type for single-sided bidirectional LSPs, + used to associate two LSPs of two tunnels, where one + tunnel is configured on one side/endpoint and the other + tunnel is dynamically created on the other endpoint."; + reference + "RFC 6780: RSVP ASSOCIATION Object Extensions + RFC 7551: RSVP-TE Extensions for Associated Bidirectional + Label Switched Paths (LSPs)"; + } + + identity path-metric-type { + description + "Base identity for the path metric type."; + } + + identity path-metric-te { + base path-metric-type; + description + "TE path metric."; + reference + "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a + second MPLS Traffic Engineering (TE) Metric"; + } + + identity path-metric-igp { + base path-metric-type; + description + "IGP path metric."; + reference + "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a + second MPLS Traffic Engineering (TE) Metric"; + } + + identity path-metric-hop { + base path-metric-type; + description + "Hop path metric."; + } + + identity path-metric-delay-average { + base path-metric-type; + description + "Average unidirectional link delay."; + reference + "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions"; + } + + identity path-metric-delay-minimum { + base path-metric-type; + description + "Minimum unidirectional link delay."; + reference + "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions"; + } + + identity path-metric-residual-bandwidth { + base path-metric-type; + description + "Unidirectional Residual Bandwidth, which is defined to be + Maximum Bandwidth (RFC 3630) minus the bandwidth currently + allocated to LSPs."; + reference + "RFC 3630: Traffic Engineering (TE) Extensions to OSPF + Version 2 + RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions"; + } + + identity path-metric-optimize-includes { + base path-metric-type; + description + "A metric that optimizes the number of included resources + specified in a set."; + } + + identity path-metric-optimize-excludes { + base path-metric-type; + description + "A metric that optimizes to a maximum the number of excluded + resources specified in a set."; + } + + identity objective-function-type { + description + "Base objective function type."; + } + + identity of-minimize-cost-path { + base objective-function-type; + description + "Objective function for minimizing path cost."; + reference + "RFC 5541: Encoding of Objective Functions in the Path + Computation Element Communication Protocol (PCEP)"; + } + + identity of-minimize-load-path { + base objective-function-type; + description + "Objective function for minimizing the load on one or more + paths."; + reference + "RFC 5541: Encoding of Objective Functions in the Path + Computation Element Communication Protocol (PCEP)"; + } + + identity of-maximize-residual-bandwidth { + base objective-function-type; + description + "Objective function for maximizing residual bandwidth."; + reference + "RFC 5541: Encoding of Objective Functions in the Path + Computation Element Communication Protocol (PCEP)"; + } + + identity of-minimize-agg-bandwidth-consumption { + base objective-function-type; + description + "Objective function for minimizing aggregate bandwidth + consumption."; + reference + "RFC 5541: Encoding of Objective Functions in the Path + Computation Element Communication Protocol (PCEP)"; + } + + identity of-minimize-load-most-loaded-link { + base objective-function-type; + description + "Objective function for minimizing the load on the link that + is carrying the highest load."; + reference + "RFC 5541: Encoding of Objective Functions in the Path + Computation Element Communication Protocol (PCEP)"; + } + + identity of-minimize-cost-path-set { + base objective-function-type; + description + "Objective function for minimizing the cost on a path set."; + reference + "RFC 5541: Encoding of Objective Functions in the Path + Computation Element Communication Protocol (PCEP)"; + } + + identity link-protection-type { + description + "Base identity for the link protection type."; + } + + identity link-protection-unprotected { + base link-protection-type; + description + "Unprotected link type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity link-protection-extra-traffic { + base link-protection-type; + description + "Extra-Traffic protected link type."; + reference + "RFC 4427: Recovery (Protection and Restoration) Terminology + for Generalized Multi-Protocol Label Switching (GMPLS)"; + } + + identity link-protection-shared { + base link-protection-type; + description + "Shared protected link type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity link-protection-1-for-1 { + base link-protection-type; + description + "One-for-one (1:1) protected link type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity link-protection-1-plus-1 { + base link-protection-type; + description + "One-plus-one (1+1) protected link type."; + reference + "RFC 4872: RSVP-TE Extensions in Support of End-to-End + Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; + } + + identity link-protection-enhanced { + base link-protection-type; + description + "A compound link protection type derived from the underlay + TE tunnel protection configuration supporting the TE link."; + } + + identity switching-capabilities { + description + "Base identity for interface switching capabilities."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity switching-psc1 { + base switching-capabilities; + description + "Packet-Switch Capable-1 (PSC-1)."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity switching-evpl { + base switching-capabilities; + description + "Ethernet Virtual Private Line (EVPL)."; + reference + "RFC 6004: Generalized MPLS (GMPLS) Support for Metro Ethernet + Forum and G.8011 Ethernet Service Switching"; + } + + identity switching-l2sc { + base switching-capabilities; + description + "Layer-2 Switch Capable (L2SC)."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity switching-tdm { + base switching-capabilities; + description + "Time-Division-Multiplex Capable (TDM)."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity switching-otn { + base switching-capabilities; + description + "OTN-TDM capable."; + reference + "RFC 7138: Traffic Engineering Extensions to OSPF for GMPLS + Control of Evolving G.709 Optical Transport Networks"; + } + + identity switching-dcsc { + base switching-capabilities; + description + "Data Channel Switching Capable (DCSC)."; + reference + "RFC 6002: Generalized MPLS (GMPLS) Data Channel + Switching Capable (DCSC) and Channel Set Label Extensions"; + } + + identity switching-lsc { + base switching-capabilities; + description + "Lambda-Switch Capable (LSC)."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity switching-fsc { + base switching-capabilities; + description + "Fiber-Switch Capable (FSC)."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity path-signaling-type { + description + "Base identity from which specific LSP path setup types + are derived."; + } + + identity path-setup-static { + base path-signaling-type; + description + "Static LSP provisioning path setup."; + } + + identity path-setup-rsvp { + base path-signaling-type; + description + "RSVP-TE signaling path setup."; + reference + "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; + } + + identity path-setup-sr { + base path-signaling-type; + description + "Segment-routing path setup."; + } + + identity tunnel-admin-state-type { + description + "Base identity for TE tunnel administrative states."; + } + + identity tunnel-admin-state-up { + base tunnel-admin-state-type; + description + "Tunnel's administrative state is up."; + } + + identity tunnel-admin-state-down { + base tunnel-admin-state-type; + description + "Tunnel's administrative state is down."; + } + + identity tunnel-state-type { + description + "Base identity for TE tunnel states."; + } + + identity tunnel-state-up { + base tunnel-state-type; + description + "Tunnel's state is up."; + } + + identity tunnel-state-down { + base tunnel-state-type; + description + "Tunnel's state is down."; + } + + identity lsp-state-type { + description + "Base identity for TE LSP states."; + } + + identity lsp-path-computing { + base lsp-state-type; + description + "State path computation is in progress."; + } + + identity lsp-path-computation-ok { + base lsp-state-type; + description + "State path computation was successful."; + } + + identity lsp-path-computation-failed { + base lsp-state-type; + description + "State path computation failed."; + } + + identity lsp-state-setting-up { + base lsp-state-type; + description + "State is being set up."; + } + + identity lsp-state-setup-ok { + base lsp-state-type; + description + "State setup was successful."; + } + + identity lsp-state-setup-failed { + base lsp-state-type; + description + "State setup failed."; + } + + identity lsp-state-up { + base lsp-state-type; + description + "State is up."; + } + + identity lsp-state-tearing-down { + base lsp-state-type; + description + "State is being torn down."; + } + + identity lsp-state-down { + base lsp-state-type; + description + "State is down."; + } + identity lsp-encoding-types { + description + "Base identity for encoding types."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-packet { + base lsp-encoding-types; + description + "Packet LSP encoding."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-ethernet { + base lsp-encoding-types; + description + "Ethernet LSP encoding."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-pdh { + base lsp-encoding-types; + description + "ANSI/ETSI PDH LSP encoding."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-sdh { + base lsp-encoding-types; + description + "SDH ITU-T G.707 / SONET ANSI T1.105 LSP encoding."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-digital-wrapper { + base lsp-encoding-types; + description + "Digital Wrapper LSP encoding."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-lambda { + base lsp-encoding-types; + description + "Lambda (photonic) LSP encoding."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-fiber { + base lsp-encoding-types; + description + "Fiber LSP encoding."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-fiber-channel { + base lsp-encoding-types; + description + "FiberChannel LSP encoding."; + reference + "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Functional Description"; + } + + identity lsp-encoding-oduk { + base lsp-encoding-types; + description + "G.709 ODUk (Digital Path) LSP encoding."; + reference + "RFC 4328: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Extensions for G.709 Optical Transport Networks + Control"; + } + + identity lsp-encoding-optical-channel { + base lsp-encoding-types; + description + "G.709 Optical Channel LSP encoding."; + reference + "RFC 4328: Generalized Multi-Protocol Label Switching (GMPLS) + Signaling Extensions for G.709 Optical Transport Networks + Control"; + } + + identity lsp-encoding-line { + base lsp-encoding-types; + description + "Line (e.g., 8B/10B) LSP encoding."; + reference + "RFC 6004: Generalized MPLS (GMPLS) Support for Metro + Ethernet Forum and G.8011 Ethernet Service Switching"; + } + + identity resource-affinities-type { + description + "Base identity for resource class affinities."; + reference + "RFC 2702: Requirements for Traffic Engineering Over MPLS"; + } + + identity resource-aff-include-all { + base resource-affinities-type; + description + "The set of attribute filters associated with a + tunnel, all of which must be present for a link + to be acceptable."; + reference + "RFC 2702: Requirements for Traffic Engineering Over MPLS + RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; + } + + identity resource-aff-include-any { + base resource-affinities-type; + description + "The set of attribute filters associated with a + tunnel, any of which must be present for a link + to be acceptable."; + reference + "RFC 2702: Requirements for Traffic Engineering Over MPLS + RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; + } + + identity resource-aff-exclude-any { + base resource-affinities-type; + description + "The set of attribute filters associated with a + tunnel, any of which renders a link unacceptable."; + reference + "RFC 2702: Requirements for Traffic Engineering Over MPLS + RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; + } + + identity path-computation-error-reason { + description + "Base identity for path computation error reasons."; + } + + identity path-computation-error-no-topology { + base path-computation-error-reason; + description + "Path computation has failed because there is no topology + with the provided topology-identifier."; + } + + identity path-computation-error-no-dependent-server { + base path-computation-error-reason; + description + "Path computation has failed because one or more dependent + path computation servers are unavailable. + The dependent path computation server could be + a Backward-Recursive Path Computation (BRPC) downstream + PCE or a child PCE."; + reference + "RFC5441, RFC8685"; + } + + identity path-computation-error-pce-unavailable { + base path-computation-error-reason; + description + "Path computation has failed because PCE is not available."; + reference + "RFC5440"; + } + + identity path-computation-error-no-inclusion-hop { + base path-computation-error-reason; + description + "Path computation has failed because there is no + node or link provided by one or more inclusion hops."; + reference + "RFC8685"; + } + + identity path-computation-error-destination-unknown-in-domain { + base path-computation-error-reason; + description + "Path computation has failed because the destination node is + unknown in indicated destination domain."; + reference + "RFC8685"; + } + + identity path-computation-error-no-resource { + base path-computation-error-reason; + description + "Path computation has failed because there is no + available resource in one or more domains."; + reference + "RFC8685"; + } + + identity path-computation-error-child-pce-unresponsive { + base path-computation-error-reason; + description + "Path computation has failed because child PCE is not + responsive."; + reference + "RFC8685"; + } + + identity path-computation-error-destination-domain-unknown { + base path-computation-error-reason; + description + "Path computation has failed because the destination domain + was unknown."; + reference + "RFC8685"; + } + + identity path-computation-error-p2mp { + base path-computation-error-reason; + description + "Path computation has failed because of P2MP reachability + problem."; + reference + "RFC8306"; + } + + identity path-computation-error-no-gco-migration { + base path-computation-error-reason; + description + "Path computation has failed because of no Global Concurrent + Optimization (GCO) migration path found."; + reference + "RFC5557"; + } + + identity path-computation-error-no-gco-solution { + base path-computation-error-reason; + description + "Path computation has failed because of no GCO solution + found."; + reference + "RFC5557"; + } + + identity path-computation-error-path-not-found { + base path-computation-error-reason; + description + "Path computation no path found error reason."; + reference + "RFC5440"; + } + + identity path-computation-error-pks-expansion { + base path-computation-error-reason; + description + "Path computation has failed because of Path-Key Subobject + (PKS) expansion failure."; + reference + "RFC5520"; + } + + identity path-computation-error-brpc-chain-unavailable { + base path-computation-error-reason; + description + "Path computation has failed because PCE BRPC chain + unavailable."; + reference + "RFC5441"; + } + + identity path-computation-error-source-unknown { + base path-computation-error-reason; + description + "Path computation has failed because source node is unknown."; + reference + "RFC5440"; + } + + identity path-computation-error-destination-unknown { + base path-computation-error-reason; + description + "Path computation has failed because destination node is + unknown."; + reference + "RFC5440"; + } + + identity path-computation-error-no-server { + base path-computation-error-reason; + description + "Path computation has failed because path computation + server is unavailable."; + reference + "RFC5440"; + } + identity session-attributes-flags { + description + "Base identity for the RSVP-TE session attributes flags."; + } + + identity local-protection-desired { + base session-attributes-flags; + description + "Local protection is desired."; + reference + "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, + Section 4.7.1"; + } + + identity se-style-desired { + base session-attributes-flags; + description + "Shared explicit style, to allow the LSP to be established + and share resources with the old LSP."; + reference + "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; + } + + identity local-recording-desired { + base session-attributes-flags; + description + "Label recording is desired."; + reference + "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, + Section 4.7.1"; + } + + identity bandwidth-protection-desired { + base session-attributes-flags; + description + "Requests FRR bandwidth protection on LSRs, if present."; + reference + "RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP Tunnels"; + } + + identity node-protection-desired { + base session-attributes-flags; + description + "Requests FRR node protection on LSRs, if present."; + reference + "RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP Tunnels"; + } + + identity path-reevaluation-request { + base session-attributes-flags; + description + "This flag indicates that a path re-evaluation (of the + current path in use) is requested. Note that this does + not trigger any LSP reroutes but instead just signals a + request to evaluate whether a preferable path exists."; + reference + "RFC 4736: Reoptimization of Multiprotocol Label Switching + (MPLS) Traffic Engineering (TE) Loosely Routed Label Switched + Path (LSP)"; + } + + identity soft-preemption-desired { + base session-attributes-flags; + description + "Soft preemption of LSP resources is desired."; + reference + "RFC 5712: MPLS Traffic Engineering Soft Preemption"; + } + + identity lsp-attributes-flags { + description + "Base identity for LSP attributes flags."; + } + + identity end-to-end-rerouting-desired { + base lsp-attributes-flags; + description + "Indicates end-to-end rerouting behavior for an LSP + undergoing establishment. This MAY also be used to + specify the behavior of end-to-end LSP recovery for + established LSPs."; + reference + "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS + RSVP-TE + RFC 5420: Encoding of Attributes for MPLS LSP Establishment + Using Resource Reservation Protocol Traffic Engineering + (RSVP-TE) + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity boundary-rerouting-desired { + base lsp-attributes-flags; + description + "Indicates boundary rerouting behavior for an LSP undergoing + establishment. This MAY also be used to specify + segment-based LSP recovery through nested crankback for + established LSPs. The boundary Area Border Router (ABR) / + Autonomous System Border Router (ASBR) can decide to forward + the PathErr message upstream to either an upstream boundary + ABR/ASBR or the ingress LSR. Alternatively, it can try to + select another egress boundary LSR."; + reference + "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS + RSVP-TE + RFC 5420: Encoding of Attributes for MPLS LSP Establishment + Using Resource Reservation Protocol Traffic Engineering + (RSVP-TE) + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity segment-based-rerouting-desired { + base lsp-attributes-flags; + description + "Indicates segment-based rerouting behavior for an LSP + undergoing establishment. This MAY also be used to specify + segment-based LSP recovery for established LSPs."; + reference + "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS + RSVP-TE + RFC 5420: Encoding of Attributes for MPLS LSP Establishment + Using Resource Reservation Protocol Traffic Engineering + (RSVP-TE) + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity lsp-integrity-required { + base lsp-attributes-flags; + description + "Indicates that LSP integrity is required."; + reference + "RFC 4875: Extensions to Resource Reservation Protocol - + Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE + Label Switched Paths (LSPs) + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity contiguous-lsp-desired { + base lsp-attributes-flags; + description + "Indicates that a contiguous LSP is desired."; + reference + "RFC 5151: Inter-Domain MPLS and GMPLS Traffic Engineering -- + Resource Reservation Protocol-Traffic Engineering (RSVP-TE) + Extensions + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity lsp-stitching-desired { + base lsp-attributes-flags; + description + "Indicates that LSP stitching is desired."; + reference + "RFC 5150: Label Switched Path Stitching with Generalized + Multiprotocol Label Switching Traffic Engineering (GMPLS TE) + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity pre-planned-lsp-flag { + base lsp-attributes-flags; + description + "Indicates that the LSP MUST be provisioned in the + control plane only."; + reference + "RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions for + Multi-Layer and Multi-Region Networks (MLN/MRN) + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity non-php-behavior-flag { + base lsp-attributes-flags; + description + "Indicates that non-PHP (non-Penultimate Hop Popping) behavior + for the LSP is desired."; + reference + "RFC 6511: Non-Penultimate Hop Popping Behavior and Out-of-Band + Mapping for RSVP-TE Label Switched Paths + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity oob-mapping-flag { + base lsp-attributes-flags; + description + "Indicates that signaling of the egress binding information is + out of band (e.g., via the Border Gateway Protocol (BGP))."; + reference + "RFC 6511: Non-Penultimate Hop Popping Behavior and Out-of-Band + Mapping for RSVP-TE Label Switched Paths + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity entropy-label-capability { + base lsp-attributes-flags; + description + "Indicates entropy label capability."; + reference + "RFC 6790: The Use of Entropy Labels in MPLS Forwarding + RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO)"; + } + + identity oam-mep-entity-desired { + base lsp-attributes-flags; + description + "OAM Maintenance Entity Group End Point (MEP) entities + desired."; + reference + "RFC 7260: GMPLS RSVP-TE Extensions for Operations, + Administration, and Maintenance (OAM) Configuration"; + } + + identity oam-mip-entity-desired { + base lsp-attributes-flags; + description + "OAM Maintenance Entity Group Intermediate Points (MIP) + entities desired."; + reference + "RFC 7260: GMPLS RSVP-TE Extensions for Operations, + Administration, and Maintenance (OAM) Configuration"; + } + + identity srlg-collection-desired { + base lsp-attributes-flags; + description + "SRLG collection desired."; + reference + "RFC 7570: Label Switched Path (LSP) Attribute in the Explicit + Route Object (ERO) + RFC 8001: RSVP-TE Extensions for Collecting Shared Risk + Link Group (SRLG) Information"; + } + + identity loopback-desired { + base lsp-attributes-flags; + description + "This flag indicates that a particular node on the LSP is + required to enter loopback mode. This can also be + used to specify the loopback state of the node."; + reference + "RFC 7571: GMPLS RSVP-TE Extensions for Lock Instruct and + Loopback"; + } + + identity p2mp-te-tree-eval-request { + base lsp-attributes-flags; + description + "P2MP-TE tree re-evaluation request."; + reference + "RFC 8149: RSVP Extensions for Reoptimization of Loosely Routed + Point-to-Multipoint Traffic Engineering Label Switched Paths + (LSPs)"; + } + + identity rtm-set-desired { + base lsp-attributes-flags; + description + "Residence Time Measurement (RTM) attribute flag requested."; + reference + "RFC 8169: Residence Time Measurement in MPLS Networks"; + } + + identity lsp-metric-type { + description + "Base identity for the LSP metric specification types."; + } + + identity lsp-metric-relative { + base lsp-metric-type; + description + "The metric specified for the LSPs to which this identity + refers is specified as a value relative to the IGP metric + cost to the LSP's tail end."; + reference + "RFC 4657: Path Computation Element (PCE) Communication + Protocol Generic Requirements"; + } + + identity lsp-metric-absolute { + base lsp-metric-type; + description + "The metric specified for the LSPs to which this identity + refers is specified as an absolute value."; + reference + "RFC 4657: Path Computation Element (PCE) Communication + Protocol Generic Requirements"; + } + + identity lsp-metric-inherited { + base lsp-metric-type; + description + "The metric for the LSPs to which this identity refers is + not specified explicitly; rather, it is directly inherited + from the IGP cost."; + reference + "RFC 4657: Path Computation Element (PCE) Communication + Protocol Generic Requirements"; + } + + /* + * Putting this (for now the only) grouping here simply because + * keeping it in either arcos-te or arcos-mpls-te module creates + * a circular dependency that confd does not like. + */ + grouping optimize-timer { + leaf reoptimize-timer { + type uint16; + units "seconds"; + default 0; + description + "Frequency of reoptimization of a traffic engineered + LSP. A value of 0 indicates an aggresive re-optimization + while a non-zero value indicates non-aggresive + re-optimization timer value."; + } + } + + + /* + * TE Bandwidth Fill Option + */ + identity TE-BANDWIDTH-FILL-OPTION { + description + "Bandwidth fill option when selecting paths."; + } + + identity BANDWIDTH-FILL-LEAST { + base "TE-BANDWIDTH-FILL-OPTION"; + description + "The device should select a link with the smallest + ratio of used bandwidth to maximum reservable + bandwidth."; + } + + identity BANDWIDTH-FILL-MOST { + base "TE-BANDWIDTH-FILL-OPTION"; + description + "The device should select a link with the largest ratio + of used bandwidth to maximum reservable bandwidth."; + } + + identity BANDWIDTH-FILL-RANDOM { + base "TE-BANDWIDTH-FILL-OPTION"; + description + "The device should select a link at random."; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-te.yang b/vendor/arrcus/arcos/v521/arcos-te.yang new file mode 100644 index 000000000..169181294 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-te.yang @@ -0,0 +1,269 @@ +module arcos-te { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/arcos-te"; + prefix "arc-te"; + + import openconfig-network-instance { + prefix oc-netinst; + } + import arcos-te-types { + prefix arc-te-types; + } + + organization "Arrcus, Inc"; + + contact + "Arrcus, Inc. + 2077 Gateway Place + Suite 400 + San Jose, CA 95110 + + E-mail: yang-support@arrcus.com"; + + description + "This module defines configuration and state information + for Traffic Engineering (TE). + + Copyright (c) 2022 by Arrcus, Inc. + All rights reserved."; + + revision "2022-02-24" { + description + "Initial version."; + } + + + /* + * TE SRLGs + */ + grouping te-srlg-config { + description + "Grouping for srlg."; + + leaf name { + type string; + description + "A string name that uniquely identifies a TE + interface named SRLG."; + } + + leaf value { + type uint32; + description + "An SRLG value."; + reference + "RFC 4203: OSPF Extensions in Support of Generalized + Multi-Protocol Label Switching (GMPLS) + RFC 5307: IS-IS Extensions in Support of Generalized + Multi-Protocol Label Switching (GMPLS)"; + } + + leaf cost { + type uint32; + description + "SRLG associated cost. Used during path to append + the path cost when traversing a link with this + SRLG."; + } + } + + grouping te-srlg-structure { + description + "This grouping defines TE SRLG structure."; + + container srlgs { + description + "Named SRLGs container."; + + list srlg { + key "name"; + description + "A list of named SRLG groups."; + + leaf name { + type leafref { + path "../config/name"; + } + } + + container config { + description + "Container for SRLG configuration."; + + uses te-srlg-config; + } + + container state { + config false; + description + "Container for SRLS state data."; + + uses te-srlg-config; + } + } + } + } + + grouping te-srlg-oper-structure { + description + "This grouping defines TE SRLG structure for oper only."; + + container srlgs { + config false; + description + "Named SRLGs container."; + + list srlg { + key "name"; + description + "A list of named SRLG groups."; + + leaf name { + type leafref { + path "../state/name"; + } + } + + container state { + description + "Container for SRLS state data."; + + uses te-srlg-config; + } + } + } + } + + + /* + * TE Admin Groups + */ + grouping te-admin-group-config { + description + "Grouping for admin-group configuration."; + + leaf name { + type string; + description + "A string name that uniquely identifies an + interface named admin-group."; + } + + leaf bit-position { + type uint32; + description + "Bit position representing the administrative + group."; + reference + "RFC3209: RSVP-TE: Extensions to RSVP for LSP Tunnels + RFC7308: Extended Adminstrative Groups in MPLS + Traffic."; + } + } + + grouping te-admin-group-structure { + description + "This grouping defines TE Admin Group structure."; + + container admin-groups { + description + "Named admin groups container."; + + list admin-group { + key "name"; + unique "config/bit-position"; + description + "List of named admin-groups."; + + leaf name { + type leafref { + path "../config/name"; + } + } + + container config { + description + "Container for admin-group configuration."; + + uses te-admin-group-config; + } + + container state { + config false; + description + "Container for admin-group state information."; + + uses te-admin-group-config; + } + } + } + } + + grouping te-admin-group-oper-structure { + description + "This grouping defines TE Admin Group structure for oper only."; + + container admin-groups { + config false; + description + "Named admin groups container."; + + list admin-group { + key "name"; + description + "List of named admin-groups."; + + leaf name { + type leafref { + path "../state/name"; + } + } + + container state { + description + "Container for admin-group state information."; + + uses te-admin-group-config; + } + } + } + } + + + /* + * TE Global - placeholder + */ + grouping te-global-structure { + description + "This grouping defines TE global structure."; + } + + + /* + * TE top level structure + */ + grouping te-top { + description + "This grouping defines top level structure of TE."; + + container te { + description + "Top level container for TE configuration and state."; + + uses te-global-structure; + uses te-admin-group-structure; + uses te-srlg-structure; + } + } + + + /* + * Define TE under network-instance + */ + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + description + "Traffic Engineering augmentations"; + + uses te-top; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-twamp.yang b/vendor/arrcus/arcos/v521/arcos-twamp.yang new file mode 100644 index 000000000..1ff9583c8 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-twamp.yang @@ -0,0 +1,264 @@ +module arcos-twamp { + yang-version "1.1"; + namespace "http://yang.arrcus.com/arcos/twamp"; + prefix "arc-twamp"; + + import ietf-yang-types { prefix "ietf-types"; } + import ietf-inet-types { prefix "inet"; } + import openconfig-network-instance { prefix "oc-netinst"; } + + organization + "Arrcus, Inc"; + + contact + "Email: eng@arrcus.com"; + + description + "This YANG module is for model for the + Two-Way Active Measurement Protocol (TWAMP) lite. + + This module has been derived from the IETF YANG module + for TWAMP as defined in RFC 8913. + + Copyright (c) 2016-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-09-01 { + description + "Initial revision."; + } + + typedef dynamic-port-number { + type inet:port-number { + range 49152..65535; + } + description "Dynamic range for port numbers."; + } + + grouping twamp-test-session-common { + description + "List of TWAMP Session-Sender test sessions."; + + leaf name { + type string; + description + "A unique name for this TWAMP-Test session to be used + for identifying this test session by the + Session-Sender logical entity."; + } + + leaf admin-state { + type boolean; + default true; + description + "Indicates the Session-Sender test session state."; + } + + leaf sender-ip { + type inet:ip-address; + description + "The IP address on the remote device, which is the + source IP address used in the TWAMP-Test (UDP) packets + belonging to this test session."; + } + + leaf sender-udp-port { + type dynamic-port-number; + description + "The source UDP port used in the TWAMP-Test packets + belonging to this test session."; + } + + leaf reflector-ip { + type inet:ip-address; + mandatory true; + description + "The IP address of the local Session-Reflector + device, which is the destination IP address used + in the TWAMP-Test (UDP) packets belonging to this test + session."; + } + + leaf reflector-udp-port { + type inet:port-number { + range "862 | 49152..65535"; + } + description + "The destination UDP port number used in the + TWAMP-Test (UDP) test packets belonging to this + test session."; + } + + leaf periodic-interval { + type uint32; + units seconds; + mandatory true; + description + "Indicates the time to wait (in seconds) between + the first bits of TWAMP-Test (UDP) packet + transmissions for this test session."; + reference + "RFC 3432: Network performance measurement + with periodic streams"; + } + } + + grouping maintenance-statistics { + leaf sent-packets { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the number of packets sent."; + } + + leaf rcv-packets { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the number of packets received."; + } + + leaf last-sent-seq { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the last sent sequence number."; + } + + leaf last-rcv-seq { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the last received sequence number."; + } + + leaf last-rtd { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the RTD(round trip delay)(nano seconds) of the last recved pkt."; + } + + leaf ave-rtd { + type ietf-types:zero-based-counter64; + config false; + description + "Indicates the average RTD(round trip delay)(nano seconds) of all recved pkt."; + } + + description + "Used for TWAMP-Test maintenance statistics."; + } + + grouping twamp-session-reflector-common { + leaf admin-state { + type boolean; + default false; + description + "Indicates whether the device is allowed to operate + as a TWAMP Session-Reflector."; + } + + leaf reflector-udp-port { + type inet:port-number { + range "862 | 49152..65535"; + } + description + "The destination UDP port number used in the + TWAMP-Test (UDP) test packets belonging to this + test session."; + } + } + + grouping session-sender-base { + description + "Configuration of the TWAMP Session-Sender logical entity"; + container session-sender { + description + "Configuration of the TWAMP Session-Sender logical entity"; + + leaf admin-state { + type boolean; + default true; + description + "Indicates whether the device is allowed to operate + as a TWAMP Session-Sender."; + } + + container test-sessions { + list test-session { + key name; + description + "List of TWAMP Session-Sender test sessions."; + + leaf name { + type leafref { + path "../config/name"; + } + description + "A unique name for this TWAMP-Test session to be used + for identifying this test session by the + Session-Sender logical entity."; + } + + container config { + description + "List of TWAMP Session-Sender test sessions."; + uses twamp-test-session-common; + } + + container state { + config false; + description + "List of TWAMP Session-Sender test sessions."; + uses twamp-test-session-common; + uses maintenance-statistics; + } + } + } + } + } + + grouping session-reflector-base { + description + "Configuration of the TWAMP Session-Reflector logical entity"; + + container session-reflector { + description + "Configuration of the TWAMP Session-Reflector logical + entity"; + + container config { + description + "Configuration of the TWAMP Session-Reflector logical entity"; + uses twamp-session-reflector-common; + } + + container state { + config false; + description + "Configuration of the TWAMP Session-Reflector logical entity"; + uses twamp-session-reflector-common; + } + } + } + + grouping twamp-base { + container twamp { + description + "TWAMP Session-Sender and Session-Reflector"; + + uses session-sender-base; + uses session-reflector-base; + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + description + "TWAMP Session-Sender and Session-Reflector"; + uses twamp-base; + } +} + + + diff --git a/vendor/arrcus/arcos/v521/arcos-version.yang b/vendor/arrcus/arcos/v521/arcos-version.yang new file mode 100644 index 000000000..417798c47 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-version.yang @@ -0,0 +1,136 @@ +module arcos-version { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/version"; + prefix arc-version; + + grouping platform-info { + description + "Top-level grouping for platform specific + data nodes"; + + leaf product-name { + type string; + description + "Product name"; + } + + leaf serial-number { + type string; + description + "Serial number"; + } + + leaf mac-address { + type string; + description + "Device mac address"; + } + + leaf form-factor { + type string; + description + "Form factor of device"; + } + + leaf num-cpu-cores { + type uint8; + description + "Number of CPU cores"; + } + + leaf cpu-info { + type string; + description + "Device CPU information"; + } + + leaf total-memory { + type string; + description + "Total available CPU memory"; + } + } + + grouping version-state { + description + "Top-level grouping for version specific state + data nodes"; + + uses platform-info; + + leaf sw-version { + type string; + description + "Version number"; + } + } + + grouping version-dependencies-state { + description + "Top-level grouping for version dependency state + data nodes"; + + leaf package { + type string { + length "1..31"; + } + description + "Package name"; + } + + leaf version { + type string { + length "1..31"; + } + description + "Package version"; + } + } + + + grouping version-dependencies-top { + container dependencies { + description + "Dependency information"; + + list dependency { + key "package"; + + description + "Package information"; + + leaf package { + type leafref { + path "../state/package"; + } + description + "Package name"; + } + + container state { + uses version-dependencies-state; + } + } + } + } + + grouping version-top { + description + "Top-level grouping for version specific data"; + + container version { + + config false; + + container state { + description + "Operational state for version specific data"; + + uses version-state; + } + + uses version-dependencies-top; + } + } + +} diff --git a/vendor/arrcus/arcos/v521/arcos-vrrp-debug.yang b/vendor/arrcus/arcos/v521/arcos-vrrp-debug.yang new file mode 100644 index 000000000..b1cb9b42e --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-vrrp-debug.yang @@ -0,0 +1,49 @@ +module arcos-vrrp-debug { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/vrrp/debug"; + prefix arc-vrrp-dbg; + + import arcos-debug { + prefix arc-dbg; + } + + grouping vrrp-debug-filters { + uses arc-dbg:intf-match-filter { + when "item-name = 'packet'"; + } + + uses arc-dbg:ip-address-match-filter { + when "item-name = 'packet'"; + } + + uses arc-dbg:ip-prefix-match-filter { + when "item-name = 'rib'"; + } + } + + grouping vrrp-debug-top { + container vrrp { + description + "VRRP related debug information."; + config false; + + uses arc-dbg:debug-component-top; + } + } + + augment "/arc-dbg:debug/arc-dbg:debug-attach-points" { + uses vrrp-debug-top { + when "arc-dbg:component = 'vrrp'" { + description + "Include VRRP debug information under global debug attach-point list"; + } + description + "Debug information related to a specific instance of VRRP."; + } + } + + augment "/arc-dbg:debug/arc-dbg:debug-attach-points/arc-vrrp-dbg:vrrp" + + "/arc-vrrp-dbg:component-debug-items" { + uses vrrp-debug-filters; + } +} diff --git a/vendor/arrcus/arcos/v521/arcos-vxlan.yang b/vendor/arrcus/arcos/v521/arcos-vxlan.yang new file mode 100644 index 000000000..4742b0150 --- /dev/null +++ b/vendor/arrcus/arcos/v521/arcos-vxlan.yang @@ -0,0 +1,425 @@ +module arcos-vxlan { + yang-version 1.1; + namespace "http://yang.arrcus.com/arcos/vxlan"; + prefix arc-overlay; + + import iana-if-type { + prefix ianaift; + } + import ietf-yang-types { + prefix yang; + } + import openconfig-interfaces { + prefix oc-if; + } + import openconfig-network-instance { + prefix oc-netinst; + } + import openconfig-network-instance-types { + prefix oc-ni-types; + } + import arcos-openconfig-network-instance-types { + prefix arc-oc-ni-types; + } + import ietf-inet-types { + prefix inet; + } + import openconfig-if-ip { + prefix oc-ip; + } + import openconfig-vlan-types { + prefix oc-vlan-types; + } + import openconfig-vlan { + prefix oc-vlan; + } + + organization + "Arrcus, Inc."; + + contact + "Arrcus, Inc. + 2077 Gateway Place + San Jose, CA 95110 + Tel: +1 (408) 884-1965 + E-mail: yang-support@arrcus.com"; + + description + "This module contains definitions for ArcOS VxLAN support. + Copyright (c) 2018-2022 by Arrcus, Inc. + All rights reserved."; + + revision 2022-12-05 { + description "Add support for Static VXLAN"; + } + + revision 2022-03-18 { + description "Add support for VLAN Aware Bundle"; + } + + revision 2018-10-03 { + description "Initial version"; + } + + grouping vni-state-group { + container vni-state { + config false; + leaf vni-run-state { + type enumeration { + enum UP { + description "VNI state id up"; + } + enum DOWN { + description "VNI state is down"; + } + } + description "VNI state"; + } + leaf vni-type { + type enumeration { + enum ROUTED { + description "routed VNI associated with an IP VRF"; + } + enum BRIDGED { + description "bridged VNI associated with a MAC VRF"; + } + } + description "VNI type"; + } + leaf ltep-id { + type uint32; + description "Local tunnel endpoint associated with this VNI"; + } + leaf vni-ifindex { + type uint32; + description "vni ifindex"; + } + leaf ip-or-mac-vrf { + type string; + description "IP or MAC VRF associated with this VNI"; + } + leaf vrf-id { + type uint32; + description "VRF ID for L3-VNI IP-VRF or L2-VNI MAC-VRF"; + } + leaf vrf-ifindex { + type uint32; + description "ifindex for L3-VNI IP-VRF or L2-VNI bridge"; + } + leaf vni-router-mac { + type yang:mac-address; + description "router MAC address for a routed VNI"; + } + + leaf-list static-rteps { + type inet:ip-address-no-zone; + description + "List of static remote VTEP IPs for BUM ingress replication"; + } + + leaf ingress-unicast-packets { + type uint64; + description "VPN ingress unicast packet count"; + } + leaf ingress-mcast-packets { + type uint64; + description "VPN ingress multicast packet count"; + } + leaf ingress-bcast-packets { + type uint64; + description "VPN ingress broadcast packet count"; + } + leaf egress-unicast-packets { + type uint64; + description "VPN egress unicast packet count"; + } + leaf egress-mcast-packets { + type uint64; + description "VPN egress multicast packet count"; + } + leaf egress-bcast-packets { + type uint64; + description "VPN egress broadcast packet count"; + } + leaf ingress-unicast-bytes { + type uint64; + description "VPN egress unicast byte count"; + } + leaf ingress-mcast-bytes { + type uint64; + description "VPN egress multicast byte count"; + } + leaf ingress-bcast-bytes { + type uint64; + description "VPN egress broadcast byte count"; + } + leaf egress-unicast-bytes { + type uint64; + description "VPN egress unicast byte count"; + } + leaf egress-mcast-bytes { + type uint64; + description "VPN egress multicast byte count"; + } + leaf egress-bcast-bytes { + type uint64; + description "VPN egress broadcast byte count"; + } + } + } + + container overlay { + description "Network Overlays Manager CLI"; + list vni-all{ + config false; + key "vnid"; + description "Virtual Network Instance Table"; + + leaf vnid { + type uint32; + description "Virtual Network Instance ID"; + } + uses vni-state-group; + } + + list local-tunnel-endpoint { + key "ltep-id"; + description "IP Local Tunnel Endpoint configuration"; + max-elements 1; + + leaf ltep-id { + type uint32; + description "IP Local Tunnel Endpoint ID"; + mandatory true; + } + + leaf source-interface { + type oc-if:base-interface-ref; + mandatory true; + description "IP Local Tunnel Endpoint source loopback"; + must "/oc-if:interfaces/oc-if:interface[oc-if:name=current()]" + + "/oc-if:config/oc-if:type = 'ianaift:softwareLoopback'" { + error-message "ltep source interface must be of type loopback"; + } + must "count(/overlay/local-tunnel-endpoint/source-interface[current()=.]) = 1" { + error-message "Each source interface may only be used in one local-tunnel-endpoint"; + } + must "count(/oc-netinst:network-instances/oc-netinst:network-instance/" + + "oc-netinst:interfaces/oc-netinst:interface[oc-netinst:id=current()]) = 0" { + error-message "ltep source interface must be in the default network-instance"; + } + } + + container local-tunnel-endpoint-state { + config false; + leaf ltep-run-state { + type enumeration { + enum UP { + description "local tunnel endpoint state is up"; + } + enum DOWN { + description "local tunnel endpoint state is down"; + } + } + description "local tunnel endpoint state"; + } + leaf source-interface { + type oc-if:base-interface-ref; + description "IP Local Tunnel Endpoint source loopback"; + } + leaf source-ip { + type inet:ipv4-address-no-zone; + description "tunnel source ipv4 address"; + } + leaf encapsulation { + type enumeration { + enum VXLAN { + description "VXLAN tunnel encapsulation"; + } + } + description "tunnel encapsulation"; + } + leaf udp-port { + type uint32; + description "tunnel destination UDP port"; + } + } + } + + list static-vxlan-tunnels { + config false; + key "tunnel-id"; + description "L2FM Published Static VXLAN tunnels"; + + leaf tunnel-id { + type uint32; + description "Tunnel identifier"; + } + + leaf ltep-ip { + type inet:ip-address; + description + "Source LTEP IP address of tunnel"; + } + + leaf rtep-ip { + type inet:ip-address; + description + "Destination RTEP IP address of tunnel"; + } + + leaf resolved { + type boolean; + description + "True when RIB has resolved a route to the RTEP IP"; + } + + leaf use-count { + type uint32; + description + "Number of VNIs using this tunnel"; + } + } + + leaf static-vxlan { + type boolean; + description "Setting true enables static flood-and-learn VXLAN and disables EVPN VXLAN"; + must "not(current() = 'true' and " + + "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:config/oc-netinst:advertise-mac-routes = 'true')" { + error-message "'network-instance advertise-mac-routes' must not be true when 'overlay static-vxlan' is true"; + } + } + } + + grouping vni-top { + + description "VNI configuration for a network instance"; + + list vni { + key "vni-id"; + description "Virtual Network Instance"; + + leaf vni-id { + type uint32 { + range "1..16777215"; + } + description "Virtual Network Instance ID"; + mandatory true; + must "count(/oc-if:interfaces/oc-if:interface[oc-if:name=current()/../../oc-netinst:name]" + + "/oc-if:subinterfaces/oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses" + + "/oc-ip:address/oc-ip:vrrp/oc-ip:vrrp-group) = 0" { + error-message "VRRP may not be configured on VXLAN enabled VLANs"; + } + must "count(/oc-if:interfaces/oc-if:interface[oc-if:name=current()/../../oc-netinst:name]" + + "/oc-if:subinterfaces/oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses" + + "/oc-ip:address/oc-ip:vrrp/oc-ip:vrrp-group) = 0" { + error-message "VRRP may not be configured on VXLAN enabled VLANs"; + } + must "../../oc-netinst:config/oc-netinst:type != 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE' or " + + "boolean(../../oc-netinst:config/local-tunnel-endpoint-id)" { + error-message "VXLAN L2VLAN_AWARE_BUNDLE NI's require a local-tunnel-endpoint-id"; + } + must "../../oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE' or " + + "count(../../vni) < 2" { + error-message "Only L2VLAN_AWARE_BUNDLE NI's can have more than one vni"; + } + must "../../oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE' or " + + "(/overlay/static-vxlan = 'false') or count(/overlay/static-vxlan) = 0" { + error-message "When 'overlay static-vxlan' is true, VNIs may only be configured on L2VLAN_AWARE_BUNDLE NI's"; + } + } + + leaf local-tunnel-endpoint-id { + when "../../oc-netinst:config/oc-netinst:type != 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + description + "LTEP for an L2VLAN network instance"; + } + type leafref { + path "/overlay/local-tunnel-endpoint/ltep-id"; + } + mandatory true; + description "Local tunnel endpoint ID associated with this VNI"; + } + + leaf arp-nd-suppression { + when "../../oc-netinst:config/oc-netinst:type != 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + description + "ARP/ND Suppression setting for an L2VLAN network instance"; + } + type boolean; + default true; + description "Controls ARP and ND Suppression for L2 VNIs with a L3 subinterface"; + } + + leaf centralized-evpn-routing { + when "../../oc-netinst:config/oc-netinst:type != 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + description + "Control centralized EVPN routing when + a network instance is a Layer 2 instance"; + } + type boolean; + default false; + description + "Enables centralized EVPN routing with the SVI configured on this L2 VNI"; + } + + leaf vlan-id { + when "../../oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'" { + description + "VLAN ID per VNI for a VLAN-Aware Bundle network instance"; + } + mandatory true; + type leafref { + path "/oc-vlan:vlans/oc-vlan:vlan/oc-vlan:vlan-id"; + } + description "The VLAN ID associated with this VNI"; + } + + uses vni-state-group; + } + } + + grouping vxlan-ni-top { + + description "Network-instance level grouping for EVPN configuration data."; + + leaf local-tunnel-endpoint-id { + must "boolean(../../vni)" { + error-message "LTEP is only valid for VXLAN (VNI)"; + } + type leafref { + path "/overlay/local-tunnel-endpoint/ltep-id"; + } + description + "VXLAN Local tunnel endpoint ID associated with this NI"; + } + + container static-vxlan { + + leaf-list remote-vteps { + type inet:ip-address-no-zone; + max-elements 128; + description + "List of remote VTEP IP addresses for ingress replication of BUM traffic"; + must "boolean(../../../vni)" { + error-message "static-vxlan configuration is only valid for VXLAN (VNI)"; + } + must "/overlay/static-vxlan = 'true'" { + error-message "Global 'overlay static-vxlan' must be true"; + } + } + } + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:config" { + when "oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'"; + uses vxlan-ni-top; + } + + augment "/oc-netinst:network-instances/oc-netinst:network-instance" { + when "oc-netinst:config/oc-netinst:type = 'oc-ni-types:L2VLAN' or " + + "oc-netinst:config/oc-netinst:type = 'oc-ni-types:L3VRF' or " + + "oc-netinst:config/oc-netinst:type = 'arc-oc-ni-types:L2VLAN_AWARE_BUNDLE'"; + uses vni-top; + } +} diff --git a/vendor/arrcus/arcos/v521/confd_dyncfg.yang b/vendor/arrcus/arcos/v521/confd_dyncfg.yang new file mode 100644 index 000000000..692cc9a55 --- /dev/null +++ b/vendor/arrcus/arcos/v521/confd_dyncfg.yang @@ -0,0 +1,7183 @@ +module confd_dyncfg { + namespace "http://tail-f.com/ns/confd_dyncfg/1.0"; + prefix "confd_dyncfg"; + tailf:id ""; + + import ietf-yang-types { + prefix yang; + } + import ietf-inet-types { + prefix inet; + } + import tailf-common { + prefix tailf; + } + import tailf-xsd-types { + prefix xs; + } + + organization + "Tail-f Systems"; + description + "This module defines the Tail-f ConfD configuration parameters + that can be modified in runtime."; + + revision 2022-04-20 { + description + "Released as part of ConfD-7.8. + + Updated description for /confdConfig/cdb/operational/replication. + + Updated description for /confdConfig/cdb/operational/persistent. + Added 'yang' name to 'operationalReplicationType' enumeration. + + Updated description for /confdConfig/cli/idleTimeout. + + Updated descriptions for /confdConfig/webui/transport/ssl/keyFile, + /confdConfig/webui/transport/ssl/certFile, and + /confdConfig/webui/transport/ssl/caCertFile. + + Updated descriptions for /confdConfig/restconf/transport/ssl/keyFile, + /confdConfig/restconf/transport/ssl/certFile, and + /confdConfig/restconf/transport/ssl/caCertFile."; + } + revision 2021-12-17 { + description + "Released as part of Confd-7.7 + + Updated description for /confdConfig/cli/actionCallNoListInstance."; + } + revision 2021-09-09 { + description + "Released as part of Confd-7.6 + + Removed NCS-specific /confdConfig/showNedErrorAsInfo. + + Added /confdConfig/validateUtf8/enabled. + + Updated descriptions for /confdConfig/cli/prompt1, + /confdConfig/cli/prompt2, /confdConfig/cli/cPrompt1, and + /confdConfig/cli/cPrompt2. + + Added /confdConfig/webui/resources/enabled. + + Added /confdConfig/webui/transport/keepalive + Added /confdConfig/webui/transport/keepaliveTimeout."; + } + revision 2020-11-25 { + description + "Released as part of Confd-7.5 + + Added /confdConfig/netconf/capabilities/url/ftp/sourceAddress. + + Added /confdConfig/netconf/capabilities/url/sftp/sourceAddress. + + Added /confdConfig/netconf/transport/sshCallHomeSourceAddress. + + Added /confdConfig/netconf/yangPush/enableExternalAccessCheck."; + } + revision 2020-06-29 { + description + "Released as part of Confd-7.4 + + Added /confdConfig/logs/webuiAccessLog/syslog. + + Updated the default values for the leaves under + /confdConfig/ssh/algorithms, they are no longer + empty. Configuring a leaf to empty still means all supported + algorithms. + + Removed option 'always' in /confdConfig/aaa/auditUserName. + + Added /confdConfig/enableOrigin. + + Renamed /confdConfig/aaa/rest to /confdConfig/aaa/restconf."; + } + revision 2019-11-28 { + description + "Released as part of Confd-7.3 + + Added /confdConfig/defaultHandlingModeAlsoSupported. + + Added /confdConfig/logs/external and updated log configuration + with external/enabled leaf. + + Added /confdConfig/cli/showOperationalState."; + } + revision 2019-06-30 { + description + "Released as part of ConfD-7.2 + + Added /confdConfig/fipsMode. + + Added /confdConfig/fipsMode/enabled."; + } + revision 2019-03-21 { + description + "Released as part of ConfD-7.1 + + Updated the list of cipher suites for + /confdConfig/webui/transport/ssl/ciphers. + + Added /confdConfig/webui/transport/ssl/ellipticCurves. + + Removed sslv3, and excluded tlsv1 from the default, + for /confdConfig/webui/transport/ssl/protocols. + + Added /confdConfig/aaa/maxPasswordLength. + + Added /confdConfig/parserLimits. + + Deprecated /confdConfig/netconf/capabilities: + startup, candidate, and writable-running + If they are present in confd.conf they will be ignored. The + corresponding capabilities are advertised based on the setting + under /confdConfig/datastores. + + Deprecated /confdConfig/netconf/capabilities: + transactions, forward, query, inactive. + They were all identified with special NETCONF capability + strings. They are now defined in YANG files and advertised as + such if the corresponding YANG fxs file is found in the load + path ('inactive' also needs /confdConfig/enableInactive to be + enabled) If they are enabled in confd.conf, the old special + capability string is also advertised. + + Deprecated /confdConfig/netconf/capabilities/partial-lock. The + corresponding capability string is advertised if its YANG fxs + file is found in the load path. + + Obsoleted /confdConfig/netconf/capabilities: + extensions and with-transaction-id + They are advertised if the corresponding YANG fxs file is found + in the load path. If they are found in confd.conf they are + ignored. + + Added NCS-specific /confdConfig/javaVm/autoStart. + + Added NCS-specific /confdConfig/javaVm/autoRestart. + + Added NCS-specific /confdConfig/javaVm/runInTerminal/enabled. + + Added default for + /confdConfig/javaVm/runInTerminal/terminalCommand. + + Added NCS-specific /confdConfig/pythonVm/autoStart. + + Added NCS-specific /confdConfig/pythonVm/autoRestart. + + Added NCS-specific /confdConfig/pythonVm/runInTerminal/enabled. + + Added default for + /confdConfig/pythonVm/runInTerminal/terminalCommand. + + Added /confdConfig/restconf/requireModuleName. + + Added /confdConfig/logs/netconfLog/logReplyStatus."; + } + revision 2019-03-07 { + description + "Released as part of ConfD-4.7.3. + + Added NCS-specific /confdConfig/netconfCallHome. + + Added JSON-RPC traffic log, + /confdConfig/logs/jsonrpcLog."; + } + revision 2018-09-13 { + description + "Released as part of ConfD-6.7.1 + + Added /confdConfig/cli/maxLineLength. + + Added /confdConfig/newlinesInBinaryBase64. + + Added /confdConfig/confdIpcDscp. + + Added /confdConfig/netconf/transport/sshCallHomeExecutable. + + Changed to use a grouping for common log configuration parameters."; + } + revision 2018-06-14 { + description + "Released as part of ConfD-6.7. + + Added /confdConfig/ha/extraIpPorts."; + } + revision 2018-06-01 { + description + "Released as part of ConfD-6.6.2. + + Added /confdConfig/ha/dscp. + + Added /confdConfig/confdIpcKeepalive."; + } + revision 2018-04-19 { + description + "Released as part of ConfD-6.6.1. + + Added /confdConfig/enableCompressedSchema."; + } + revision 2018-03-02 { + description + "Released as part of ConfD-6.6. + + Added /confdConfig/aaa/validationOrder. + + Added /confdConfig/aaa/externalValidation. + + Added /confdConfig/aaa/externalValidation/enabled. + + Added /confdConfig/aaa/externalValidation/executable. + + Added /confdConfig/aaa/externalValidation/useBase64. + + Added /confdConfig/aaa/externalValidation/includeExtra. + + Added /confdConfig/restconf/tokenResponse. + + Added /confdConfig/restconf/tokenResponse/xAuthToken. + + Added /confdConfig/restconf/tokenResponse/tokenCookie. + + Added /confdConfig/restconf/tokenResponse/tokenCookie/name. + + Added /confdConfig/restconf/tokenResponse/tokenCookie/directives. + + Added /confdConfig/logs/progressTrace/dir. + + Added /confdConfig/aaa/authorization/nacmCompliant. + + Added /confdConfig/restconf/customHeaders. + + Updated /confdConfig/smartLicense."; + } + revision 2017-09-16 { + description + "Released as part of ConfD-6.5. + + Added /confdConfig/cli/cliLeafListStyleType. + + Added NCS-specific /confdConfig/javaVm, /confdConfig/pythonVm, and + /confdConfig/smartLicense. + + Updated description for /confdConfig/logs/errorLog."; + } + revision 2017-02-21 { + description + "Released as part of ConfD-6.4. + + Changed default for /confdConfig/webui/audit to 'false'."; + } + revision 2017-01-16 { + description + "Released as part of ConfD-6.3.1. + + Added /confdConfig/netconf/writeTimeout."; + } + revision 2016-11-03 { + description + "Released as part of ConfD-6.3. + + Added /confdConfig/ssh/algorithms/dhGroup/{minSize,maxSize}."; + } + revision 2013-09-05 { + description + "Released as part of ConfD-4.3.2."; + } + + typedef candidateImplementationType { + type enumeration { + enum "confd" { + value 664387550; + } + enum "external" { + value 1055777754; + } + } + } + + typedef whoHistoryDateTimeFormatType { + type enumeration { + enum "long" { + value 105537656; + } + enum "short" { + value 2029155337; + } + } + } + + typedef multiPatternOperationType { + type enumeration { + enum "any" { + value 383440309; + } + enum "all" { + value 2031982792; + } + } + } + + typedef confirmUncommitedOnExitType { + type enumeration { + enum "prompt" { + value 1796253006; + } + enum "discard" { + value 664427145; + } + enum "commit" { + value 128787545; + } + } + } + + typedef tableBehaviorType { + type enumeration { + enum "dynamic" { + value 1339207079; + } + enum "suppress" { + value 1746378947; + } + enum "enforce" { + value 868039165; + } + } + } + + typedef rollNumbering { + type enumeration { + enum "fixed" { + value 1180146474; + } + enum "rolling" { + value 492733776; + } + } + } + + typedef completionMetaInfoType { + type enumeration { + enum "false" { + value 1249155036; + } + enum "alt1" { + value 1173421906; + } + enum "alt2" { + value 780021010; + } + } + } + + typedef pipeHelpModeType { + type enumeration { + enum "always" { + value 1980885055; + } + enum "auto" { + value 1146214388; + } + enum "never" { + value 1258673503; + } + } + } + + typedef candidateStorageType { + type enumeration { + enum "disk" { + value 334675513; + } + enum "ram" { + value 781613798; + } + enum "auto" { + value 1146214388; + } + } + } + + typedef editWrapModeType { + type enumeration { + enum "wrap" { + value 1386835265; + } + enum "newline" { + value 100405574; + } + enum "vt100" { + value 321017956; + } + } + } + + typedef cliTimezoneType { + type enumeration { + enum "utc" { + value 1427039597; + } + enum "local" { + value 2129802687; + } + } + } + + typedef journalCompactionType { + type enumeration { + enum "automatic" { + value 1726921432; + } + enum "manual" { + value 48828153; + } + } + } + + typedef configurationReplicationType { + type enumeration { + enum "async" { + value 1368962940; + } + enum "sync" { + value 2047869128; + } + } + } + + typedef operationalPersistentType { + type enumeration { + enum "confspec" { + status deprecated; + value 2093298699; + } + enum "always" { + value 1980885055; + } + enum "never" { + value 1258673503; + } + enum "yang" { + value 125956256; + } + } + } + + typedef operationalReplicationType { + type enumeration { + enum "never" { + value 1258673503; + } + enum "always" { + value 1980885055; + } + enum "persistent" { + value 1783422916; + } + } + } + + typedef operationalReplicationModeType { + type enumeration { + enum "async" { + value 1368962940; + } + enum "sync" { + value 2047869128; + } + } + } + + typedef snmpVersionType { + type enumeration { + enum "v1" { + value 1223356638; + } + enum "v2c" { + value 406691283; + } + } + } + + typedef compressedSchemaLevelType { + type uint8 { + range "1..2"; + } + } + + typedef dscpType { + type uint8 { + range "0 .. 63"; + } + } + + typedef limitType { + type union { + type uint32; + type unboundedType; + } + } + + typedef parserLimitType { + type union { + type limitType; + type enumeration { + enum "model" { + value 1814338831; + } + } + } + } + + typedef unboundedType { + type enumeration { + enum "unbounded" { + value 1813338730; + } + } + } + + typedef infinityType { + type enumeration { + enum "infinity" { + value 1378257424; + } + } + } + + typedef timeoutType { + type union { + type xs:duration; + type infinityType; + } + } + + typedef rpcErrorType { + type enumeration { + enum "close" { + value 1912083739; + } + enum "inline" { + value 1987224790; + } + } + } + + typedef dbAccessType { + type enumeration { + enum "read-write" { + value 1464236954; + } + enum "writable-through-candidate" { + value 532826246; + } + } + } + + typedef pubkeyAuthenticationType { + type enumeration { + enum "none" { + value 432063804; + } + enum "local" { + value 2129802687; + } + enum "system" { + value 1534086422; + } + } + } + + typedef expirationWarningType { + type enumeration { + enum "ignore" { + value 1852995428; + } + enum "display" { + value 2135153981; + } + enum "prompt" { + value 1796253006; + } + } + } + + typedef auditUserNameType { + type enumeration { + enum "known" { + value 584303659; + } + enum "never" { + value 1258673503; + } + } + } + + typedef defaultHandlingModeType { + type enumeration { + enum "explicit" { + value 920928367; + } + enum "trim" { + value 250701330; + } + enum "report-all" { + value 1824535838; + } + } + } + + typedef syslogVersionType { + type enumeration { + enum "bsd" { + value 1701318; + } + enum "1" { + value 1535449617; + } + } + } + + typedef cliAuditLogType { + type enumeration { + enum "all" { + value 2031982792; + } + enum "none" { + value 432063804; + } + enum "denied" { + value 1293974345; + } + enum "allowed" { + value 1631106802; + } + } + } + + typedef cliActionMapType { + type enumeration { + enum "both" { + value 1577301616; + } + enum "config" { + value 2105663071; + } + enum "oper" { + value 1313484953; + } + } + } + + typedef cliModeNameStyleType { + type enumeration { + enum "short" { + value 2029155337; + } + enum "two" { + value 87009233; + } + enum "full" { + value 476261018; + } + } + } + + typedef quoteStyleType { + type enumeration { + enum "quote" { + value 883581901; + } + enum "backslash" { + value 1857839842; + } + } + } + + typedef modeInfoInAAAType { + type enumeration { + enum "true" { + value 1808796341; + } + enum "false" { + value 1249155036; + } + enum "path" { + value 1002915403; + } + } + } + + typedef modeInfoInAuditType { + type enumeration { + enum "true" { + value 1808796341; + } + enum "false" { + value 1249155036; + } + enum "path" { + value 1002915403; + } + } + } + + typedef enableDisplayLevelType { + type enumeration { + enum "true" { + value 1808796341; + } + enum "false" { + value 1249155036; + } + enum "pipe" { + value 612053909; + } + } + } + + typedef cliStyle { + type enumeration { + enum "j" { + value 641834109; + } + enum "c" { + value 589337185; + } + enum "i" { + value 1541010383; + } + } + } + + typedef rollbackType { + type enumeration { + enum "full" { + value 476261018; + } + enum "delta" { + value 1928409309; + } + } + } + + typedef syslogFacilityType { + type union { + type bsdFacilityType; + type intFacilityType; + } + } + + typedef bsdFacilityType { + type enumeration { + enum "daemon" { + value 137874048; + } + enum "authpriv" { + value 2143429981; + } + enum "local0" { + value 1223389442; + } + enum "local1" { + value 659974174; + } + enum "local2" { + value 388815177; + } + enum "local3" { + value 133202671; + } + enum "local4" { + value 1369253367; + } + enum "local5" { + value 37794477; + } + enum "local6" { + value 918612352; + } + enum "local7" { + value 1098748970; + } + } + } + + typedef intFacilityType { + type uint32 { + range "min .. 2147483647"; + } + } + + typedef cliMax { + type uint32 { + range "5 .. 2147483647"; + } + } + + typedef rollMax { + type uint32 { + range "0 .. 2147483647"; + } + } + + typedef hex8ValueType { + type xs:hexBinary { + tailf:value-length "8"; + } + } + + typedef charType { + type string { + length "1"; + } + } + + typedef falseType { + type enumeration { + enum "false" { + value 1249155036; + } + } + } + + typedef aliasQuoteType { + type union { + type falseType; + type charType; + } + } + + typedef hex16ValueType { + type xs:hexBinary { + tailf:value-length "16"; + } + } + + typedef hex32ValueType { + type xs:hexBinary { + tailf:value-length "32"; + } + } + + typedef verifyType { + type uint32 { + range "1 .. 3"; + } + } + + typedef pendingChangesActionType { + type enumeration { + enum "continue" { + value 1852005625; + } + enum "fail" { + value 1504483183; + } + } + } + + typedef developerLogLevelType { + type enumeration { + enum "error" { + value 126243105; + } + enum "info" { + value 2062105651; + } + enum "trace" { + value 1896625767; + } + } + } + + typedef snmpLogLevelType { + type enumeration { + enum "error" { + value 126243105; + } + enum "info" { + value 2062105651; + } + } + } + + typedef netconfTraceFormatType { + type enumeration { + enum "pretty" { + value 560733322; + } + enum "raw" { + value 764753385; + } + } + } + + typedef subagentNameType { + type xs:token { + length "min .. 31"; + } + } + + typedef SNMPAgentNameType { + type xs:token { + length "min .. 31"; + } + } + + typedef SNMPContextNameType { + type xs:token { + length "min .. 31"; + } + } + + typedef cryptHashAlgorithmType { + type enumeration { + enum "md5" { + value 721897608; + } + enum "sha-256" { + value 1426210322; + } + enum "sha-512" { + value 945188773; + } + } + } + + typedef cryptHashRoundsType { + type uint32 { + range "1000 .. 999999999"; + } + } + + typedef runtimeReconfigurationType { + type enumeration { + enum "config-file" { + value 2073952695; + } + enum "namespace" { + value 1847615892; + } + } + } + + typedef idType { + type union { + type uint64 { + range "1 .. max"; + } + type fixedIdType; + } + } + + typedef fixedIdType { + type enumeration { + enum "confd" { + value 664387550; + } + enum "user" { + value 1529217067; + } + enum "root" { + value 1945751049; + } + } + } + + typedef maxFilesType { + type int64 { + range "2 .. max"; + } + } + + typedef X-Frame-OptionsType { + type enumeration { + enum "DENY" { + value 864815184; + } + enum "SAMEORIGIN" { + value 1594198254; + } + enum "ALLOW-FROM" { + value 2088887798; + } + } + } + + typedef dhGroupSizeType { + type uint32 { + range "1024 .. 8192"; + } + } + + typedef cliLeafListStyleType { + type enumeration { + enum "flat-list" { + value 59492072; + } + enum "range-list" { + value 2027731099; + } + } + } + + typedef cliActionNoListInst { + type enumeration { + enum "create-instance" { + value 784973112; + } + enum "deny-call" { + value 1762837762; + } + } + } + + typedef disabledSchemaUriAgents { + type enumeration { + enum "netconf" { + value 1625535416; + } + enum "rest" { + value 98717481; + } + } + } + + typedef unauthenticatedMessageLimitType { + type union { + type uint32; + type enumeration { + enum "nolimit" { + value 1288276025; + } + } + } + } + + grouping logType { + description + "Common log configuration parameters. These parameters + take effect for both existing and new sessions."; + leaf enabled { + type boolean; + default "true"; + description + "enabled is either 'true' or 'false'. If 'true', the + log is enabled."; + } + container file { + presence ""; + leaf enabled { + type boolean; + default "false"; + description + "enabled is either 'true' or 'false'. If 'true', file + logging is enabled."; + } + leaf name { + type string; + mandatory true; + description + "name is the full path to the actual log file."; + } + } + container syslog { + presence ""; + leaf enabled { + type boolean; + default "false"; + description + "enabled is either 'true' or 'false'. If 'true', syslog + messages are sent."; + } + leaf facility { + type syslogFacilityType; + description + "facility is either 'daemon', 'authpriv', + 'local0', ..., 'local7' or an unsigned integer. + This optional value overrides the + /confdConfig/logs/syslogConfig/facility for this + particular log."; + } + } + container external { + presence ""; + leaf enabled { + type boolean; + default "false"; + description + "enabled is either 'true' or 'false'. If 'true', send log data + to external command for processing."; + } + } + } + + grouping customHTTPHeaders { + container customHeaders { + presence ""; + list header { + key "name"; + tailf:info + "The customHeaders element contains any number of header + elements, with a valid header-field as defined in RFC 7230 3.2. + + The headers will be part of all HTTP responses. + "; + leaf name { + type string; + tailf:info + "RFC 7230 field-name, e.g. Accept-Control-Allow-Origin"; + } + leaf value { + type string; + mandatory true; + tailf:info + "RFC 7230 field-value, e.g. http://www.cisco.com"; + } + } + } + leaf xFrameOptions { + type X-Frame-OptionsType; + default "DENY"; + tailf:info + "By default the X-Frame-Options header is set to DENY for + the /login.html and /index.html pages. With this header + it can be set to SAMEORIGIN or ALLOW-FROM instead."; + } + leaf xContentTypeOptions { + type string; + default "nosniff"; + tailf:info + "The X-Content-Type-Options response HTTP header is a marker + used by the server to indicate that the MIME types advertised + in the Content-Type headers should not be changed and be + followed. This allows to opt-out of MIME type sniffing, or, + in other words, it is a way to say that the webmasters knew + what they were doing. + + This header is always sent in HTTP responses. + By setting the value to the empty string will cause the + header not to be sent. + "; + } + leaf xXssProtection { + type string; + default "1; mode=block"; + tailf:info + "The HTTP X-XSS-Protection response header is a feature of + Internet Explorer, Chrome and Safari that stops pages from + loading when they detect reflected cross-site scripting + (XSS) attacks. Although these protections are largely + unnecessary in modern browsers when sites implement a strong + Content-Security-Policy that disables the use of inline + JavaScript ('unsafe-inline'), they can still provide + protections for users of older web browsers that don't yet + support CSP. + + This header is always sent in HTTP responses. + By setting the value to the empty string will cause the + header not to be sent. + "; + } + leaf strictTransportSecurity { + type string; + default "max-age=15552000; includeSubDomains"; + tailf:info + "The HTTP Strict-Transport-Security response header + (often abbreviated as HSTS) lets a web site tell + browsers that it should only be accessed using HTTPS, + instead of using HTTP. + + This header is always sent in HTTP responses. + By setting the value to the empty string will cause the + header not to be sent. + "; + } + leaf contentSecurityPolicy { + type string; + default "default-src 'self'; block-all-mixed-content; base-uri 'self'; frame-ancestors 'none';"; + tailf:info + "The HTTP Content-Security-Policy response header allows + web site administrators to control resources the user agent + is allowed to load for a given page. + + The default value means that: Resources like fonts, scripts, + connections, images, and styles will all only load from + the same origin as the protected resource. + All mixed contents will be blocked and frame-ancestors like + iframes and applets is prohibited. + See also: + + https://www.w3.org/TR/CSP3/ + + This header is always sent in HTTP responses. + By setting the value to the empty string will cause the + header not to be sent. + "; + } + } + + container confdConfig { + tailf:validate "confdConfig" { + tailf:internal; + tailf:dependency "."; + } + tailf:info + "ConfD configuration."; + container subagents { + presence ""; + tailf:info + "Present only if ConfD runs as a master agent. Lists all + registered subagents."; + list subagent { + key "name"; + tailf:info + "Parameters for a single subagent."; + leaf name { + type subagentNameType; + tailf:info + "The name of the subagent. It is used as a unique + identifier of the subagent. The name is included in the + subagent events (see confd_lib_events(3)) generated by ConfD."; + } + leaf enabled { + type boolean; + default "true"; + tailf:info + "Whether the subagent should be considered by ConfD. When + set to 'false' the subagent is ignored."; + } + container tcp { + presence ""; + tailf:info + "Parameters to be used when the masteragent communicates + with the subagent over plain text TCP. This is more + efficient than SSH, but TCP is non-standard."; + leaf ip { + type inet:ip-address; + mandatory true; + tailf:info + "The IP address where the subagent listens for NETCONF + TCP connections."; + } + leaf port { + type inet:port-number; + default "2023"; + tailf:info + "The port where the subagent listens for NETCONF TCP + connections."; + } + leaf netns { + type string; + tailf:info + "The network namespace name where the listening socket + will belong to."; + } + leaf vrf { + type string; + tailf:info + "The VRF interface name to which the listening socket + should bind."; + } + container confdAuth { + tailf:info + "In order to use NETCONF over TCP, the + subagent must understand the ConfD proprietary TCP + header, described in the NETCONF chapter in the ConfD + User Guide."; + leaf user { + type string; + mandatory true; + tailf:info + "The user name to be used for authorization on the subagent."; + } + leaf group { + type string; + mandatory true; + tailf:info + "The group name to be used for authorization on the subagent."; + } + } + } + container ssh { + presence ""; + tailf:info + "Parameters to be used when the masteragent communicates + with the subagent over SSH."; + leaf ip { + type inet:ip-address; + mandatory true; + tailf:info + "The IP address where the subagent listens for NETCONF + SSH connections."; + } + leaf port { + type inet:port-number; + default "2022"; + tailf:info + "The port where the subagent listens for NETCONF SSH + connections."; + } + leaf netns { + type string; + tailf:info + "The network namespace name where the listening socket + will belong to."; + } + leaf vrf { + type string; + tailf:info + "The VRF interface name to which the listening socket + should bind."; + } + leaf user { + type string; + mandatory true; + tailf:info + "The SSH user name used for authentication at the subagent."; + } + leaf password { + type string; + mandatory true; + tailf:info + "The SSH user's password."; + } + } + container mount { + tailf:info + "This parameter defines where in the data hierarchy the + subagent is registered. It consists of a path which must + exist in the data model of the master agent, and the name + of the node which the subagent implements."; + leaf path { + type string; + mandatory true; + tailf:info + "The path, in restricted XPath syntax, where the + subagent's data is mounted. The XPath is restricted as + an instance-identifier (see confd_types(3)). To mount on + the top level, use '/'. Note that the XPath expression + must not contain any namespace prefixes. + + If the subagent mounts more than one node, this object + is a space separated list of paths."; + } + leaf-list node { + type xs:QName; + tailf:info + "The namespace and name of the top-level node in that + namespace, as a QName. + + This leaf-list must be of + the same length as the 'path' leaf."; + } + } + leaf disableSubtreeOptimization { + type boolean; + default "false"; + tailf:info + "Whenever possible, the master agent sends a single + subtree filter request, instead of one request for each + object. If the subagent cannot handle these requests, + for any reason, set this parameter to 'true'."; + } + } + } + container notifications { + presence ""; + tailf:info + "This section defines settings which affect notifications."; + container eventStreams { + tailf:info + "Lists all available notification event streams."; + list stream { + key "name"; + tailf:info + "Parameters for a single notification event stream."; + leaf name { + type xs:token; + tailf:info + "The name attached to a specific event stream."; + } + leaf description { + type string; + mandatory true; + tailf:info + "A descriptive text attached to a specific event stream."; + } + leaf replaySupport { + type boolean; + mandatory true; + tailf:info + "Signals if replay support is available for a specific + event stream."; + } + container builtinReplayStore { + presence ""; + tailf:info + "Parameters for the built in replay store for this event + stream. + + If replay support is enabled ConfD automatically stores + all notifications on disk ready to be replayed should a + NETCONF manager or RESTCONF event notification subscriber ask + for logged notifications. The replay store uses a set of + wrapping log files on disk (of a certain number and size) to + store the notifications. + + The max size of each wrap log file (see below) should + not be too large. This to achieve fast replay of + notifications in a certain time range. If possible use a + larger number of wrap log files instead. + + If in doubt use the recommended settings (see below)."; + leaf enabled { + type boolean; + default "false"; + tailf:info + "enabled is either 'true' or 'false'. If 'false', the + applications must implement its own replay support."; + } + leaf dir { + type string; + mandatory true; + tailf:info + "The wrapping log files will be put in this disk + location."; + } + leaf maxSize { + type tailf:size; + mandatory true; + tailf:info + "The max size of each log wrap file. The recommended + setting is approximately S10M."; + } + leaf maxFiles { + type maxFilesType; + mandatory true; + tailf:info + "The max number of log wrap files. The recommended + setting is around 50 files."; + } + } + } + } + } + container opcache { + presence ""; + tailf:info + "This section defines settings which affect the behavior of the + operational data cache - see the 'Operational data' chapter in the + User Guide."; + leaf enabled { + type boolean; + default "false"; + tailf:info + "enabled is either 'true' or 'false'. If 'true', the cache + is enabled."; + } + leaf timeout { + type uint64 { + range "0 .. max"; + } + mandatory true; + tailf:info + "The amount of time to keep data in the cache, in seconds."; + } + } + container snmpgw { + presence ""; + tailf:info + "This section defines settings which affect the behavior of the + SNMP gateway."; + leaf enabled { + type boolean; + default "false"; + tailf:info + "enabled is either 'true' or 'false'. If 'true', the gateway + is enabled."; + } + leaf trapPort { + type inet:port-number; + tailf:info + "The port number to listen for traps on."; + } + leaf rowCacheMaxAge { + type xs:duration; + default "PT5S"; + tailf:info + "Whenever any object is requested from an agent, all objects in the + same conceptual row will be fetched and cached. This value limits + the age of values in the cache. Higher values may give higher + performance but increases the probability that the SNMP gateway + returns stale data. + The default is 5 seconds."; + } + leaf rowCacheMaxSize { + type uint16; + default "200"; + tailf:info + "Whenever any object is requested from an agent, all objects in the + same conceptual row will be fetched and cached. This value limits + the number of values in the cache. Higher values may give higher + performance but may also cause higher memory utilization. + The default is 200."; + } + list agent { + key "name"; + tailf:info + "Parameters for a single agent."; + leaf name { + type SNMPAgentNameType; + tailf:info + "A name for the agent, mainly used for error reporting."; + } + leaf subscriptionId { + type xs:token; + tailf:info + "The subscription id, if set, is used for indicating to which + applications external traps should be sent."; + } + leaf forwardNotifStream { + type xs:token; + tailf:info + "The forwarding notification stream , if present, indicates that + traps should be automatically translated in accordance with the + yang definition of the notification, and sent out on the + given stream. + The given stream may not implement replay support externally."; + } + leaf enabled { + type boolean; + default "true"; + tailf:info + "enabled is either 'true' or 'false'. If 'true', the agent + is enabled."; + } + leaf community { + type string; + default "private"; + tailf:info + "The community string for communication with the agent. If + the community string cannot be expressed in Unicode, use + the element community_bin instead (see below). If both + community_bin and community are specified, community is + ignored."; + } + leaf community_bin { + type xs:hexBinary; + tailf:info + "The community string for communication with the agent, + encoded in hexBinary. For example, + AB and + 4142 are + equivalent. The main use for this is when the community + string cannot be expressed in Unicode."; + } + leaf version { + type snmpVersionType; + default "v2c"; + tailf:info + "The default protocol version to use. The value indicates + the preferred version - if the agent doesn't respond, the + other version will be tried."; + } + leaf timeout { + type xs:duration; + default "PT5S"; + tailf:info + "The amount of time to wait for an answer from the agent + before retrying or aborting the operation. + The default is five seconds."; + } + leaf retries { + type uint8; + default "0"; + tailf:info + "The number of times an SNMP request towards the agent should + be retried before aborting the operation. + The default is 0."; + } + leaf ip { + type inet:ip-address; + mandatory true; + tailf:info + "The host (specified as a name or an IP address) on which + the agent is running."; + } + leaf port { + type inet:port-number; + default "161"; + tailf:info + "The port number to use for communication with the agent."; + } + leaf netns { + type string; + tailf:info + "The network namespace name where the listening socket + will belong to."; + } + leaf vrf { + type string; + tailf:info + "The VRF interface name to which the listening socket should bind."; + } + leaf-list module { + type string; + tailf:info + "A list of MIB module names that this agent implements. + Each such MIB must be convert to YANG and compiled with + the --snmpgw flag to confdc."; + } + } + } + list hideGroup { + key "name"; + tailf:info + "Hide groups that can be unhidden must be listed here. There + can be zero, one or many hideGroup entries in the + configuration. + + If a hide group does not have a hideGroup entry, then it + cannot be unhidden using the CLI 'unhide' command. However, it + is possible to add a hideGroup entry to the confd.conf file + and then use confd --reload to make it available in the CLI. + This may be useful to enable for example a diagnostics hide + groups that you do not even want accessible using a password."; + leaf name { + type string; + tailf:info + "Name of hide group. This name should correspond to a hide + group name in some data model."; + } + leaf password { + type tailf:md5-digest-string; + default ""; + tailf:info + "A password can optionally be specified for a hide group. If + no password or callback is given then the hide group can be + unhidden without giving a password. + + If a password is specified then the hide group cannot be + enabled unless the password is entered. + + To completely disable a hide group, ie make it impossible to + unhide it, remove the entire hideGroup container for that + hide group."; + } + leaf callback { + type string; + tailf:info + "A callback can optionally be specified for a hide group. If + no callback or password is given then the hide group can be + unhidden without giving a password. + + If a callback is specified then the hide group cannot be + enabled unless a password is entered and the callback + successfully verifies the password. Using a callback it is + possible to have short lived unhide passwords and per-user + unhide passwords. + + The callback must be registered as a command() callback with + confd_register_action_cbs(), see confd_lib_dp(3). The 'path' + argument to the callback is always 'hidegroup', while + argv[0] is the name of the hide group, argv[1] is the name + of the user issuing the unhide command, and argv[2] is the + given password. The callback should return CONFD_OK to allow + the unhiding, otherwise CONFD_ERR."; + } + } + container encryptedStrings { + presence ""; + tailf:info + "encryptedStrings defines keys used to encrypt strings adhering + to the types tailf:des3-cbc-encrypted-string, + tailf:aes-cfb-128-encrypted-string and + tailf:aes-256-cfb-128-encrypted-string as defined in the + tailf-common YANG module, see the confd_types(3) manual page."; + container externalKeys { + presence ""; + tailf:info + "Configuration of an external command that will provide the + keys used for encryptedStrings. When set no keys for + encrypted-strings can be set in the configuration."; + leaf command { + tailf:info + "Path to command executed to output keys."; + type string; + mandatory true; + must 'not(../../DES3CBC) and not(../../AESCFB128) +and not(../../AES256CFB128)'; + } + leaf commandTimeout { + tailf:info + "Command timeout. Timeout is measured between complete lines + read from the output."; + type timeoutType; + default "PT60S"; + } + leaf commandArgument { + tailf:info + "Argument available in externalKeys command as the + environment variable CONFD_EXTERNAL_KEYS_ARGUMENT."; + type string; + } + } + container DES3CBC { + presence ""; + tailf:info + "In the DES3CBC case three 64 bits (8 bytes) keys and a + random initial vector are used to encrypt the string. + The initVector element is only used when upgrading from + versions before ConfD-6.2, but it is kept for backward + compatibility reasons."; + leaf key1 { + type hex8ValueType; + mandatory true; + } + leaf key2 { + type hex8ValueType; + mandatory true; + } + leaf key3 { + type hex8ValueType; + mandatory true; + } + leaf initVector { + type hex8ValueType; + } + } + container AESCFB128 { + presence ""; + tailf:info + "In the AESCFB128 case one 128 bits (16 bytes) key and a + random initial vector are used to encrypt the string. + The initVector element is only used when upgrading from + versions before ConfD-6.2, but it is kept for backward + compatibility reasons."; + leaf key { + type hex16ValueType; + mandatory true; + } + leaf initVector { + type hex16ValueType; + } + } + container AES256CFB128 { + presence ""; + tailf:info + "In the AES256CFB128 case one 256 bits (32 bytes) key and a + random initial vector are used to encrypt the string."; + leaf key { + type hex32ValueType; + mandatory true; + } + } + } + container logs { + presence ""; + tailf:info + "This section defines settings which affect the logging done by ConfD."; + container syslogConfig { + presence ""; + tailf:info + "Shared settings for how to log to syslog. Logs (see below) can be + configured to log to file and/or syslog. If a log is configured to + log to syslog, the settings under /confdConfig/logs/syslogConfig are + used."; + leaf version { + type syslogVersionType; + default "bsd"; + tailf:info + "version is either 'bsd' (traditional syslog) or '1' (new + IETF syslog format: + draft-ietf-syslog-protocol-16.txt). '1' implies that + /confdConfig/logs/syslogConfig/udp/enabled must be set to + 'true'."; + } + leaf facility { + type syslogFacilityType; + default "daemon"; + tailf:info + "facility is either 'daemon', 'authpriv', + 'local0', ..., 'local7' or an + unsigned integer. This facility setting is the default + facility. It's also possible to set individual facilities + in the different logs below. Furthermore with the + syslogServers container described below it is possible to + set default facility on a per server basis. If facility is + explictly set for a log type, that item is used."; + } + container udp { + presence ""; + tailf:info + "This is a container for UDP syslog. This container can + only contain the configuration for a single UDP syslog + server. If we need more than one syslog server we must + use the /confdConfig/logs/syslogConfig/syslogServers + container instead. If the udp container is used, the + syslogServers container is ignored."; + leaf enabled { + type boolean; + default "false"; + tailf:info + "enabled is either 'true' or 'false'. If 'false', + messages will be sent to the local syslog daemon."; + } + leaf host { + type inet:host; + mandatory true; + tailf:info + "host is either a domain name or an IPv4/IPv6 network + address. UDP syslog messages are sent to this host."; + } + leaf port { + type inet:port-number; + default "514"; + tailf:info + "port is a valid port number to be used in combination + with /confdConfig/logs/syslogConfig/udp/host."; + } + } + container syslogServers { + presence ""; + tailf:info + "This is an alternative way of specifying UDP + syslog servers. + If we use the /confdCfg/logs/syslogConfig/udp container this + container is ignored, alternatively, if we use this container + the /confdCfg/logs/syslogConfig/udp container is ignored."; + list server { + key "host"; + tailf:info + "A set of syslog servers that get a copy + of all syslog messages."; + leaf host { + type inet:host; + tailf:info + "host is either a domain name or an IPv4/IPv6 network + address. UDP syslog messages are sent to this host."; + } + leaf port { + type inet:port-number; + default "514"; + tailf:info + "port is the UDP port number where this syslog + server is listening."; + } + leaf version { + type syslogVersionType; + default "bsd"; + tailf:info + "version is either 'bsd' (traditional syslog) or '1' (new + IETF syslog format: + draft-ietf-syslog-protocol-16.txt)."; + } + leaf facility { + type syslogFacilityType; + default "daemon"; + tailf:info + "facility is either 'daemon', 'local0', ..., 'local7' or an + unsigned integer."; + } + leaf enabled { + type boolean; + default "true"; + tailf:info + "enabled is either 'true' or 'false'. If 'false', + this syslog server will not get any udp messages."; + } + } + } + } + container confdLog { + presence ""; + tailf:info + "confdLog is ConfD's daemon log. Check this log for startup + problems of the ConfD daemon itself. This log is not + rotated, i.e. use logrotate(8)."; + uses logType; + } + container developerLog { + presence ""; + tailf:info + "developerLog is a debug log for troubleshooting user-written code, + AAA rules etc. Enable and check this log for problems with + validation code etc. This log can be configured as + /confdConfig/logs/confdLog. The log is not rotated, i.e. use + logrotate(8)."; + uses logType; + } + leaf developerLogLevel { + type developerLogLevelType; + default "info"; + tailf:info + "Controls which level of developer messages are printed in + the developer log. This configuration parameter takes + effect for both existing and new sessions."; + } + container auditLog { + presence ""; + tailf:info + "auditLog is an audit log recording successful and failed + logins to the ConfD backplane and also user operations + performed from the CLI or northbound interfaces. This log + is enabled by default. In all other regards it can be + configured as /confdConfig/logs/confdLog. This log is not + rotated, i.e. use logrotate(8). This configuration parameter + takes effect for both existing and new sessions."; + uses logType; + } + leaf auditLogCommit { + type boolean; + default "false"; + tailf:info + "Controls whether the audit log should include messages about + the resulting configuration changes for each commit to the + running data store. This configuration parameter takes effect + for both existing and new sessions. If set to 'true', the audit + log will include entries of the form: + + commit thandle begin [confirmed [extended]] + commit thandle comment + commit thandle label