diff options
Diffstat (limited to 'src/plugins/yang/openconfig/openconfig-aft-common.yang')
-rw-r--r-- | src/plugins/yang/openconfig/openconfig-aft-common.yang | 385 |
1 files changed, 385 insertions, 0 deletions
diff --git a/src/plugins/yang/openconfig/openconfig-aft-common.yang b/src/plugins/yang/openconfig/openconfig-aft-common.yang new file mode 100644 index 0000000..c2b884f --- /dev/null +++ b/src/plugins/yang/openconfig/openconfig-aft-common.yang @@ -0,0 +1,385 @@ +submodule openconfig-aft-common { + belongs-to "openconfig-aft" { + prefix "oc-aft"; + } + + import openconfig-interfaces { prefix "oc-if"; } + import openconfig-extensions { prefix "oc-ext"; } + import openconfig-yang-types { prefix "oc-yang"; } + import openconfig-inet-types { prefix "oc-inet"; } + import openconfig-mpls-types { prefix "oc-mplst"; } + import openconfig-policy-types { prefix "oc-pol-types"; } + import openconfig-aft-types { prefix "oc-aftt"; } + + organization + "OpenConfig working group"; + + contact + "OpenConfig working group + www.openconfig.net"; + + description + "Submodule containing definitions of groupings that are re-used + across multiple contexts within the AFT model."; + + oc-ext:openconfig-version "0.3.1"; + + revision 2017-08-24 { + description + "Formatting fixes"; + reference "0.3.1"; + } + + revision 2017-05-10 { + description + "Refactor to provide concretised per-AF schemas per AFT."; + reference "0.3.0"; + } + + grouping aft-nhop-structural { + description + "Structural grouping describing a next-hop entry."; + + container next-hops { + 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"; + + description + "A next-hop associated with the forwarding instance."; + + leaf index { + type leafref { + path "../config/index"; + } + description + "A unique index identifying the next-hop entry for the + AFT entry"; + + } + + container config { + description + "Configuration parameters relating to the AFT next-hop + entry"; + + uses aft-common-entry-nexthop-config; + } + + container state { + config false; + description + "Operational state parameters relating to the AFT + next-hop entry"; + + uses aft-common-entry-nexthop-config; + uses aft-common-entry-nexthop-state; + } + + uses oc-if:interface-ref; + } + } + } + + grouping aft-common-entry-state { + description + "Operational state parameters relating to a forwarding entry"; + + leaf packets-forwarded { + type oc-yang:counter64; + description + "The number of packets which have matched, and been forwarded, + based on the AFT entry."; + } + + leaf octets-forwarded { + type oc-yang:counter64; + description + "The number of octets which have matched, and been forwarded, + based on the AFT entry"; + } + + // We are at $afi/$entry/state/next-hop-group + leaf next-hop-group { + type leafref { + path "../../../../next-hop-groups/next-hop-group/state/id"; + } + description + "A reference to the next-hop-group that is in use for the entry + within the AFT. Traffic is distributed across the set of next-hops + within the next-hop group according to the weight."; + } + } + + grouping aft-common-entry-nexthop-config { + description + "Configuration parameters relating to a next-hop entry for a AFT + entry"; + + leaf index { + type uint64; + description + "A unique entry for the next-hop."; + } + } + + grouping aft-common-entry-nexthop-state { + description + "Parameters relating to a next-hop."; + + leaf ip-address { + type oc-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 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 encapsulate-header { + type oc-aftt:encapsulation-header-type; + description + "When forwarding a packet to the specified next-hop the local + system performs an encapsulation of the packet - adding the + specified header type."; + } + + leaf origin-protocol { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "The protocol from which the AFT entry was learned."; + } + } + + grouping aft-common-ip-state { + description + "Common parameters across IP address families"; + + leaf decapsulate-header { + type oc-aftt:encapsulation-header-type; + description + "When forwarding a packet to the specified next-hop, the local + system performs a decapsulation of the packet - removing the + specified header type. In the case that no next-hop is + specified, the packet header is removed, and a subsequent + forwarding lookup is performed on the packet encapsulated + within the header, matched within the relevant AFT within the + specified network-instance."; + } + } + + grouping aft-next-hop-groups-structural { + description + "Logical grouping for groups of next-hops."; + + container next-hop-groups { + description + "Surrounding container for groups of next-hops."; + + list next-hop-group { + key "id"; + + description + "An individual set of next-hops grouped into a common group. + Each entry within an abstract forwarding table points to a + next-hop-group. Entries in the next-hop-group are forwarded to + according to the weights specified for each next-hop group. + + If an entry within the next-hop group becomes unusable, for + example due to an interface failure, the remaining entries + are used until all entries become unusable - at which point + the backup next-hop-group (if specified) is used."; + + leaf id { + description + "A reference to a unique identifier for the next-hop-group."; + + type leafref { + path "../config/id"; + } + } + + container config { + description + "Configuration parameters related to the next-hop-group."; + uses aft-nhg-config; + } + + container state { + config false; + description + "Operational state parameters relating to next-hop-groups."; + uses aft-nhg-config; + uses aft-nhg-state; + } + + container next-hops { + description + "Surrounding container for the list of next-hops within + the next-hop-group."; + + list next-hop { + key "index"; + + description + "An individual next-hop within the next-hop-group. Each + next-hop is a reference to an entry within the next-hop + list."; + + leaf index { + description + "A reference to the index for the next-hop within the + the next-hop-group."; + type leafref { + path "../config/index"; + } + } + + container config { + description + "Configuration parameters related to a next-hop within + the next-hop-group."; + uses aft-nhg-nh-config; + } + + container state { + config false; + description + "Operational state parameters related to a next-hop + within the next-hop-group."; + uses aft-nhg-nh-config; + uses aft-nhg-nh-state; + } + } + } + } + } + } + + grouping aft-nhg-config { + description + "Configuration parameters related to a next-hop-group."; + + leaf id { + type uint64; + description + "A unique identifier for the next-hop-group. This index + is not expected to be consistent across reboots, or + reprogramming of the next-hop-group. When updating + a next-hop-group, if the group is removed by the system + or assigned an alternate identifier, the system should + send telemetry notifications deleting the previous + identifier. If the identifier of the next-hop-group + is changed, all AFT entries that reference it must + also be updated."; + } + } + + grouping aft-nhg-state { + description + "Operational state parameters related to a next-hop-group."; + + leaf color { + type uint64; + description + + "An arbitrary colour that is used as an identifier for the next-hop + group. Some next-hop resolutions may utilise the colour to select + the particular next-hop-group that a routing entry should be resolved + to. In this case, next-hop-group selection may be based on colour + matches rather than the protocol specified next-hop. + + Regardless of whether the next-hop-group's specified colour is + used to select an AFT's active forwarding entry, the next-hop-group + referenced by an entry should be the currently active value. + + Next-hop-groups that are installed on the system through a protocol + that allows injection of such entries (e.g., BGP using the SR-TE + Policy SAFI, or gRPC-based RIB programming) should have the colour + specified in the injecting protocol within this leaf."; + } + + leaf backup-next-hop-group { + // We are at afts/next-hop-groups/next-hop-group/config/backup-next-hop-group + type leafref { + path "../../../next-hop-group/state/id"; + } + description + "The backup next-hop-group for the current group. When all + entries within the next-hop group become unusable, the backup + next-hop group is used if specified."; + } + } + + grouping aft-nhg-nh-config { + description + "Configuration parameters relating to an individual next-hop within + a next-hop-group."; + + leaf index { + type leafref { + // We are at afts/next-hop-groups/next-hop-group/next-hops/next-hop/config/id + path "../../../../../../next-hops/next-hop/config/index"; + } + description + "A reference to the identifier for the next-hop to which + the entry in the next-hop group corresponds."; + } + } + + grouping aft-nhg-nh-state { + description + "Operational state parameters relating to an individual next-hop + within the next-hop-group."; + + leaf weight { + type uint64; + description + "The weight applied to the next-hop within the group. Traffic + is balanced across the next-hops within the group in the + proportion of weight/(sum of weights of the next-hops within + the next-hop group)."; + } + } +} |