bbf-ancp

This module contains a collection of YANG definitions for supporting the Broadband Forum requirements on the Access Node Control...

  • Version: 2022-03-01

    bbf-ancp@2022-03-01


    
      module bbf-ancp {
    
        yang-version 1.1;
    
        namespace "urn:bbf:yang:bbf-ancp";
    
        prefix bbf-ancp;
    
        import bbf-yang-types {
          prefix bbf-yang;
        }
        import ietf-inet-types {
          prefix inet;
        }
        import ietf-yang-types {
          prefix yang;
        }
    
        organization
          "Broadband Forum <https://www.broadband-forum.org>
         Common YANG Work Area";
    
        contact
          "Comments or questions about this Broadband Forum YANG module
         should be directed to <mailto:help@broadband-forum.org>.
    
         Editor:      Nick Hancock, ADTRAN
    
         Editor:      Ludwig Pauwels, Nokia
    
         PS Leader:   Joey Boyd, ADTRAN
    
         WA Director: Joey Boyd, ADTRAN
    
         WA Director: Sven Ooghe, Nokia";
    
        description
          "This module contains a collection of YANG definitions for
         supporting the Broadband Forum requirements on the Access Node
         Control Protocol (ANCP) as defined in RFC 6320. As such, this
         module is specific to access network equipment (e.g.,
         BBF-specified Access Nodes and FTTdp DPUs).
    
         This data model is designed for the Network Management Datastore
         Architecture defined in RFC 8342.
    
         Copyright (c) 2017-2022, Broadband Forum
    
         Redistribution and use in source and binary forms, with or
         without modification, are permitted provided that the following
         conditions are met:
    
         1. Redistributions of source code must retain the above copyright
            notice, this list of conditions and the following disclaimer.
    
         2. Redistributions in binary form must reproduce the above
            copyright notice, this list of conditions and the following
            disclaimer in the documentation and/or other materials
            provided with the distribution.
    
         3. Neither the name of the copyright holder nor the names of its
            contributors may be used to endorse or promote products
            derived from this software without specific prior written
            permission.
    
         THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
         CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
         INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
         MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
         CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
         SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
         NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
         LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
         CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
         STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
         ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
         ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    
         The above license is used as a license under copyright only.
         Please reference the Forum IPR Policy for patent licensing terms
         <https://www.broadband-forum.org/ipr-policy>.
    
         Any moral rights which are necessary to exercise under the above
         license grant are also deemed granted under this license.
    
         This version of this YANG module is part of TR-383a5; see
         the TR itself for full legal notices.";
    
        reference
          "RFC 6320";
    
    
        revision "2022-03-01" {
          description
            "Amendment 5.
           * Approval Date:    2022-03-01.
           * Publication Date: 2022-03-01.";
          reference
            "TR-383a5: Common YANG Modules
            	  <https://www.broadband-forum.org/technical/download/
            		   TR-383_Amendment-5.pdf>";
    
        }
    
        revision "2020-10-13" {
          description
            "Amendment 3.
           * Approval Date:    2020-10-13.
           * Publication Date: 2020-10-13.";
          reference
            "TR-383a3: Common YANG Modules
            	  <https://www.broadband-forum.org/technical/download/
            		   TR-383_Amendment-3.pdf>";
    
        }
    
    
        feature protocol-version {
          description
            "Indicates support for the configuration of the protocol
           version of ANCP sessions.";
        }
    
        feature partition-id-negotiation {
          description
            "Indicates that the device supports negotiation of the
           Partition ID to be used to be used by ANCP sessions to
           associate ANCP messages with the partition of the Access Node
           (AN) managed by a session.";
        }
    
        feature session-statistics {
          description
            "Indicates support for statistics for ANCP sessions.";
        }
    
        feature tcp-port {
          description
            "Indicates support for the configuration of the TCP port for
           ANCP.";
        }
    
        feature port-message-dampening {
          description
            "Indicates support for the configuration of the dampening
           mechanism to limit the rate at which Port Up and Port Down
           messages are sent to the Network Access Server (NAS).";
        }
    
        feature session-administrative-state {
          description
            "Indicates support for administratively enabling or disabling
           an ANCP session.";
        }
    
        feature session-reset {
          description
            "Indicates support for resetting a session.";
        }
    
        feature nas-connection-state {
          description
            "Indicates support for the state of the connection to the
           Network Access Server (NAS).";
        }
    
        identity capabilities {
          description
            "Base identity for defining ANCP capabilities.";
        }
    
        identity topology-discovery {
          base capabilities;
          description
            "The Access Topology Discovery function is intended to
           allow the NAS to gain knowledge about the topology of the
           access network, the various lines being used, and their
           respective rates without having to rely on an integration
           with an OSS system.";
          reference
            "RFC 6320 section 6";
    
        }
    
        identity access-line-technology {
          description
            "Base identity for defining the technology of access lines
           managed by a partition.";
          reference
            "RFC 6320 section 6.5";
    
        }
    
        identity access-line-attribute {
          description
            "Base identity for defining access line attributes defined in
           the ANCP.
    
           This is an abstract identity and MUST NOT be used for access
           line attributes.";
          reference
            "RFC 6320 section 6.5";
    
        }
    
        identity technology-independent-access-line-attribute {
          base access-line-attribute;
          description
            "Base identity for defining technology-independent access line
           attributes defined in the ANCP.
    
           This is an abstract identity and MUST NOT be used for access
           line attributes.";
          reference
            "RFC 6320 section 6.5";
    
        }
    
        identity access-loop-encapsulation {
          base technology-independent-access-line-attribute;
          description
            "The data link protocol and, optionally, the encapsulation
           overhead on the access loop.";
          reference
            "RFC 6320 section 6.5.18";
    
        }
    
        identity adjacency-malfunction-cause {
          description
            "Base identity for defining causes that resulted in the
           malfunction of the Adjacency Protocol.
    
           This identity is abstract and SHOULD NOT generally be used for
           malfunction causes. If used to define a cause that was not
           known at design time, it MUST be qualified with an associated
           message string. This practice, however, should be generally
           avoided to ensure all possible causes are known at design
           time.";
        }
    
        identity message-type-not-supported {
          base adjacency-malfunction-cause;
          description
            "The ANCP agent has received the result code value 0x51 in a
           response message which indicates that message type of the
           original request was not supported";
        }
    
        identity capability-negotiation-failed {
          base adjacency-malfunction-cause;
          description
            "The ANCP session was unable to successfully negotiate a common
           set of capabilities with its Network Access Server (NAS).";
        }
    
        typedef protocol-version {
          type enumeration {
            enum "rfc6320" {
              value 0;
              description
                "RFC 6320 defines ANCP Version 1 which is identified by
               version = 50 in protocol messages as defined the joint
               GSMP / ANCP Version Registry. ";
              reference
                "RFC 6320 section 10.8";
    
            }
          }
          description
            "Defines the supported protocol versions.";
        }
    
        typedef partition-id {
          type uint8 {
            range "1..255";
          }
          description
            "Defines the Partition ID.";
          reference
            "RFC 6320 section 3.5.1";
    
        }
    
        typedef entity-name {
          type union {
            type enumeration {
              enum "unknown" {
                value 0;
                description
                  "The name of the sending/receiving entity is unknown.";
              }
            }
            type yang:hex-string {
              length "17";
            }
          }
          description
            "An entity name used to identify the sender/receiver of an
           ANCP message.";
          reference
            "RFC 6320 section 3.5.1";
    
        }
    
        typedef link-instance {
          type union {
            type uint32 {
              range "1..16777216";
            }
            type enumeration {
              enum "undefined" {
                value 0;
                description
                  "The instance number is undefined.";
              }
            }
          }
          description
            "The instance number used to identify the link within the
           AN or NAS.";
          reference
            "RFC 6320 section 3.5.1";
    
        }
    
        grouping peer-operational-parameters {
          description
            "Defines the operational state only parameters applicable to
           the adjacency protocol.";
          leaf name {
            type entity-name;
            config false;
            mandatory true;
            description
              "The Name used by the entity (AN or NAS) as advertised in
             the adjacency message.
    
             This leaf has value 'unknown', if adjacency state is not
             ESTAB (established).";
          }
    
          leaf instance {
            type link-instance;
            config false;
            mandatory true;
            description
              "The value for Instance used by the entity (AN or NAS) to
             identify the link to the peer.
    
             This leaf has value 'undefined', if adjacency state is not
             ESTAB (established).";
          }
        }  // grouping peer-operational-parameters
    
        grouping ancp-schema {
          description
            "Defines the schema tree for ANCP.";
          container partitions {
            must
              "(bbf-ancp:partition/bbf-ancp:partition-id='global' "
                + "and "
                + "count(bbf-ancp:partition)=1)"
                + " or "
                + "not(bbf-ancp:partition/bbf-ancp:partition-id='global')" {
              error-message
                "The device may only be configured for a single global "
                  + "partition or fixed partitions, but not both.";
              description
                "Prevent both the global partition and fixed partitions
               from being configured at the same time.";
            }
            description
              "Management of ANCP partitions on the device.";
            list partition {
              key "partition-id";
              description "A partition.";
              leaf partition-id {
                type union {
                  type enumeration {
                    enum "global" {
                      value 0;
                      description
                        "The partition represents a device that is
                       configured to operate without fixed partitions.";
                    }
                  }
                  type partition-id;
                }
                description
                  "Uniquely identifies the partition.
    
                 If the device is to use fixed partitions, this leaf must
                 be set to a value between 1 and 255; this value will be
                 used to associate ANCP messages with this specific
                 partition.
    
                 If the device is not to use fixed partitions, i.e., is
                 not partitioned, this leaf must be set to 'global', in
                 which case no other partition may be configured.
    
                 If the single partition with 'partition-id' set to
                 'global' is configured, the PType and Partition ID in
                 the Adjacency Message must be being set to 0 (no
                 partition) and 0 respectively.";
                reference
                  "RFC 6320 section 3.5.2.4.2";
    
              }
    
              leaf technology {
                type identityref {
                  base access-line-technology;
                }
                mandatory true;
                description
                  "The access line technology supported by the partition.";
              }
    
              container sessions {
                description
                  "Management of ANCP sessions.";
                list session {
                  key "name";
                  description "An ANCP session.";
                  leaf name {
                    type string;
                    description
                      "An arbitrary name for the session.";
                  }
    
                  leaf enable {
                    if-feature session-administrative-state;
                    type boolean;
                    default "true";
                    description
                      "The desired administrative state of the session.";
                  }
    
                  leaf protocol-version {
                    if-feature bbf-ancp:protocol-version;
                    type protocol-version;
                    default "rfc6320";
                    description
                      "The ANCP protocol version to be used by the
                     session.";
                    reference
                      "RFC 6320 section 3.5.1";
    
                  }
    
                  leaf-list capability {
                    type identityref {
                      base capabilities;
                    }
                    min-elements 1;
                    description
                      "The common set of ANCP capabilities supported by this
                     session. At least one capability must be configured.
    
                     The final negotiated value may be different to the
                     intended value and is to be found by operational
                     data.";
                    reference
                      "RFC 6320 section 3.5.1 (Capability Fields).";
    
                  }
    
                  leaf oper-state {
                    type enumeration {
                      enum "down" {
                        value 0;
                        description
                          "The operational state of the session is down and
                         it is non-operational.";
                      }
                      enum "up" {
                        value 1;
                        description
                          "The operational state of the session is up and
                         it is operational.";
                      }
                    }
                    config false;
                    mandatory true;
                    description
                      "The operational state of the session. A session is
                     deemed to be 'up', only when adjacency is
                     established ('adjacency-state' is set to 'estab').";
                  }
    
                  container access-node {
                    description
                      "Configuration relevant to the AN side of the ANCP
                     session.";
                    container name-source {
                      presence
                        "Enables selection of the source of the name to use
                       to generate the Sender Name to be used for this
                       ANCP session.
    
                       If this container is not present, the system will
                       use the a system MAC address to generate the
                       Sender Name.";
                      description
                        "Configuration of the source to use to generate the
                       Sender Name to be used for this ANCP session.";
                      choice which-name-source {
                        mandatory true;
                        description
                          "Configures which source to use to generate the
                         Sender Name to use to identify the session at
                         the AN to the NAS.";
                        reference
                          "RFC 6320 section 3.5.1 (Sender Name).";
    
                        case use-mac-address {
                          description
                            "Configures the session to use a system MAC
                           address to generate the Sender Name to be
                           inserted into ANCP messages to identify the
                           AN.";
                          leaf use-mac-address {
                            type empty;
                            description
                              "Configures the session to use a system MAC
                             address to generate the Sender Name to be
                             inserted into ANCP messages to identify the
                             AN.";
                          }
                        }  // case use-mac-address
                      }  // choice which-name-source
                    }  // container name-source
    
                    uses peer-operational-parameters;
    
                    leaf address {
                      type inet:ip-address;
                      config false;
                      mandatory true;
                      description
                        "The IP address of the AN.";
                    }
    
                    leaf port {
                      type inet:port-number;
                      config false;
                      mandatory true;
                      description
                        "The IP port of the AN.";
                    }
                  }  // container access-node
    
                  container network-access-server {
                    description
                      "Configuration relevant to the Network Access Server
                     (NAS) side of the ANCP session.";
                    uses peer-operational-parameters;
    
                    choice transport {
                      mandatory true;
                      description
                        "Selects the transport for ANCP.";
                      case tcp {
                        description
                          "Configures TCP as the transport for ANCP.";
                        reference
                          "RFC 6320 section 3.2";
    
                        container tcp {
                          description
                            "Contains TCP-specific configuration for ANCP.";
                          leaf address {
                            type inet:host;
                            mandatory true;
                            description
                              "The IP address or the DNS domain name of the
                             NAS.";
                          }
    
                          leaf port {
                            if-feature tcp-port;
                            type inet:port-number;
                            default "6068";
                            description
                              "The IP port of the NAS.";
                            reference
                              "RFC 6320 section 3.2";
    
                          }
                        }  // container tcp
                      }  // case tcp
                    }  // choice transport
    
                    leaf connection-state {
                      if-feature nas-connection-state;
                      type enumeration {
                        enum "opening" {
                          value 0;
                          description
                            "The session is attempting to establish a
                           connection to the NAS.";
                        }
                        enum "established" {
                          value 1;
                          description
                            "A connection to the NAS is established.";
                        }
                        enum "closed" {
                          value 2;
                          description
                            "The session to the NAS has been closed by the
                           ANCP Agent on the AN, for example, due to a
                           malfunction with the Adjacency Protocol.";
                        }
                        enum "malfunction" {
                          value 3;
                          description
                            "A connection to the configured NAS could not
                           be established.
    
                           A corresponding alarm will be raised, if
                           supported.
    
                           A device may continue to periodically attempt
                           to establish the transport connection, but
                           this is implementation-specific. If the
                           transport connection can be established the
                           alarm will be cleared by the instrumentation.
    
                           To re-attempt to connect to a configured NAS
                           manually either
                            - modify the configuration
                            - reset the session using the action 'reset',
                              if supported
                            - administratively disable and then enable
                              the session.";
                        }
                        enum "disabled" {
                          value 4;
                          description
                            "The session has been administratively
                           disabled.";
                        }
                      }
                      config false;
                      mandatory true;
                      description
                        "The operational state of the transport connection
                       to the Network Access Server (NAS).";
                    }
                  }  // container network-access-server
    
                  container adjacency-protocol {
                    description
                      "Configuration to manage the adjacency protocol.";
                    leaf liveness-timer {
                      type uint8;
                      units "100 milliseconds";
                      default "250";
                      description
                        "The nominal time between periodic adjacency
                       protocol messages.
    
                       The final negotiated value, which will be constant
                       for the duration of the ANCP session, may be
                       different to the intended value and is to be found
                       by querying state data.";
                      reference
                        "RFC 6320 section 3.5.1 (Timer).";
    
                    }
    
                    leaf adjacency-state {
                      type enumeration {
                        enum "malfunction" {
                          value 0;
                          description
                            "Adjacency could not be established, because of
                           a malfunctioning of the adjacency protocol.
    
                           This will result in the connection to the NAS
                           being dropped and a corresponding alarm raised,
                           if supported.
    
                           Further details of the cause of the malfunction
                           will be reported through the data nodes in the
                           container 'malfunction'.
    
                           To re-attempt to setup adjacency
                           either
                            - modify the configuration
                            - reset the session using the action 'reset',
                              if supported
                            - administratively disable and then enable
                              the session.";
                          reference
                            "RFC 5851 section 4.6.4 R-48.";
    
                        }
                        enum
                          "synchronization-lost" {
                          value 1;
                          description
                            "Indicates that the AN and NAS are no longer
                           synchronized. This may occur, if
                           - no valid ANCP messages are received in any
                             period of time in excess of three times the
                             value of the negotiated liveness timer;
                           or
                           - a mismatch in adjacency state is detected.
    
                           A corresponding alarm will be raised, if
                           supported.";
                          reference
                            "RFC 6320 section 3.5.2.7";
    
                        }
                        enum "estab" {
                          value 2;
                          description
                            "The state ESTAB (established) indicates that
                           the AN has established a session.";
                          reference
                            "RFC 6320 section 3.5.2.2.7";
    
                        }
                        enum "synrcvd" {
                          value 3;
                          description
                            "The state SYNRCVD (synchronization received)
                           indicates that the AN has received a connection
                           request and sent an acknowledgment.";
                          reference
                            "RFC 6320 section 3.5.2.2.1";
    
                        }
                        enum "synsent" {
                          value 4;
                          description
                            "The state SYNSENT (synchronization sent)
                           indicates that the AN is waiting for an
                           acknowledgment from the NAS after having sent
                           a connection request.";
                          reference
                            "RFC 6320 section 3.5.2.2.1";
    
                        }
                        enum "pending" {
                          value 5;
                          description
                            "The setup of an adjacency is pending the
                           establishment of the transport layer.";
                        }
                        enum "disabled" {
                          value 6;
                          description
                            "The session and thus the execution of the
                           Adjacency Protocol has been administratively
                           disabled.";
                        }
                      }
                      config false;
                      mandatory true;
                      description
                        "The operational state of the adjacency protocol.";
                      reference
                        "RFC 6320 section 3.5.2.2";
    
                    }
    
                    leaf partition-id {
                      when
                        "count(/bbf-ancp:ancp/bbf-ancp:partitions"
                          + "/bbf-ancp:partition)>0"
                          + " and "
                          + "not(boolean(/bbf-ancp:ancp"
                          + "/bbf-ancp:partitions"
                          + "/bbf-ancp:partition"
                          + "[bbf-ancp:partition-id='global']))" {
                        description
                          "The use of a Partition ID is only applicable, if
                         the AN has been partitioned.";
                      }
                      if-feature bbf-ancp:partition-id-negotiation;
                      type partition-id;
                      config false;
                      mandatory true;
                      description
                        "The Partition ID used by this session to associate
                       ANCP messages with the partition of the AN managed
                       by this session.
    
                       The final negotiated value, which will be constant
                       for the duration of the ANCP session, may be
                       different to the Partition ID configured for the
                       partition.";
                      reference
                        "RFC 6320 section 3.5.2.4.2";
    
                    }
    
                    container malfunction {
                      when
                        "../adjacency-state='malfunction'" {
                        description
                          "Only applicable when there is a malfunction in
                         the Adjacency Protocol.";
                      }
                      config false;
                      description
                        "Provides additional information regarding a
                       malfunction encountered with the Adjacency
                       Protocol.";
                      leaf cause {
                        type identityref {
                          base adjacency-malfunction-cause;
                        }
                        mandatory true;
                        description
                          "The cause of the malfunction of the Adjacency
                         Protocol.";
                      }
    
                      leaf message {
                        type string;
                        description
                          "A string suitable for human display that
                         describes the condition causing the
                         malfunction.";
                      }
                    }  // container malfunction
                  }  // container adjacency-protocol
    
                  container access-line-identification {
                    description
                      "Configure Access Line Identification for ANCP.";
                    leaf-list access-line-identification {
                      type enumeration {
                        enum
                          "access-loop-circuit-id" {
                          value 0;
                          description
                            "Add the Access Loop Circuit ID TLV in the ANCP
                           message, i.e., the TLV with type value 0x0001.
    
                           The value inserted in the TLV is the value
                           defined by the data node '/bbf-subprof:
                           subscriber-profiles/bbf-subprof:subscriber-
                           profile/bbf-subprof:circuit-id' that is
                           associated with the interface, if present. If
                           not present, the value inserted will be
                           generated according to the syntax defined in
                           the leaf 'access-loop-circuit-id'. If this
                           leaf is not present or empty, then an empty
                           TLV will be inserted, i.e., a TLV with
                           Length = 0.";
                          reference
                            "RFC 6320 section 5.1.2.1,
                            TR-101i2 Section 3.9.3.";
    
                        }
                        enum
                          "access-loop-remote-id" {
                          value 1;
                          description
                            "Add the Access Loop Remote ID TLV in the ANCP
                           message, i.e., the TLV with type value 0x0002.
    
                           The value inserted in the TLV is the value
                           defined by the data node '/bbf-subprof:
                           subscriber-profiles/bbf-subprof:subscriber-
                           profile/bbf-subprof:remote-id' that is
                           associated with the interface, if present. If
                           not present, then an empty TLV will be
                           inserted, i.e., a TLV with Length = 0.";
                          reference
                            "RFC 6320 section 5.1.2.2,
                            TR-101i2 Section 3.9.3.";
    
                        }
                        enum
                          "access-aggregation-circuit-id-binary" {
                          value 2;
                          description
                            "Add the Access Aggregation Circuit ID Binary
                           TLV in the ANCP message, i.e., the TLV with
                           type value 0x0006.
    
                           This TLV identifies or partially identifies a
                           specific access line by means of its logical
                           circuit identifier on the NAS side of the AN.
                           It is defined to contain VLAN ID(s).
    
                           The value of the TLV contains the VLAN IDs of
                           the VLAN tags to be used in data frames sent
                           on a network interface. However, this is not
                           necessarily the same for all data frames
                           coming from a single access line. The
                           selection of which values to use for the
                           VLAN IDs is defined by the value configured
                           via the interface.";
                          reference
                            "RFC 6320 section 5.1.2.3,
                            TR-101i2 Section 3.9.3.";
    
                        }
                        enum
                          "access-aggregation-circuit-id-ascii" {
                          value 3;
                          description
                            "Add the Access Aggregation Circuit ID ASCII
                           TLV in the ANCP message, i.e., the TLV with
                           type value 0x0003.
    
                           The value is identified in the same way as the
                           value for the Access Aggregation Circuit ID
                           Binary TLV.
    
                           The difference for the TLV value is the
                           produced format, i.e., for the Access
                           Aggregation Circuit Id ASCII TLV the format is
                           in ASCII and based on a syntax configured in
                           the leaf 'access-aggregation-circuit-id-ascii'.
                           If this leaf is empty, then an empty TLV will
                           be inserted, i.e., a TLV with Length = 0.";
                          reference
                            "RFC 6320 section 5.1.2.4,
                            TR-101i2 Section 3.9.3.";
    
                        }
                      }
                      min-elements 1;
                      description
                        "Identifies how to generate / interpret the Access
                       Line Identification TLVs used in ANCP messages.";
                    }
    
                    leaf access-loop-circuit-id {
                      type bbf-yang:string-ascii63-or-empty;
                      default "";
                      description
                        "ASCII string identifying the access loop logical
                       port on the user side of the AN. It may contain
                       any characters and variables, e.g.,
                       'Access_Node_ID eth slot/port'.";
                      reference
                        "RFC 6320 section 5.1.2.1 and
                        TR-101 Section 3.9.3.";
    
                    }
    
                    leaf access-aggregation-circuit-id-ascii {
                      type bbf-yang:string-ascii63-or-empty;
                      default "";
                      description
                        "ASCII string identifying or partially identifying
                       a specific access line by means of its logical
                       circuit identifier on the NAS side of the Access
                       Node. As per RFC 6320 it shall contain VLAN IDs
                       similar as the Access Aggregation Circuit ID
                       Binary TLV, but in a format as specified by
                       TR-101.
    
                       It may contain any characters and variables, e.g.,
                       'S-VID:C-VID'.";
                      reference
                        "RFC 6320 section 5.1.2.4";
    
                    }
    
                    leaf start-numbering-from-zero {
                      type boolean;
                      default "false";
                      description
                        "In case the leaf 'access-loop-circuit-id' or
                       'access-aggregation-circuit-id-ascii' indicates the
                       TLV shall contain a slot, a port or another
                       variable for which the numbering is defined by the
                       AN, then this leaf determines if the numbering
                       MUST start from 0 or 1.";
                      reference
                        "TR-178 - R118";
    
                    }
    
                    leaf use-leading-zeroes {
                      type boolean;
                      default "false";
                      description
                        "In case the leaf 'access-loop-circuit-id' or the
                       'access-aggregation-circuit-id-ascii' contain
                       variables for which the value can be multiple
                       digits, then this leaf determines if the
                       slot/port/VLAN ID numbering MUST use leading 0's
                       or not, i.e., generate a fixed-length string or a
                       string with only meaningful digits.
    
                       Note that the number of digits used to form the
                       fixed-length string is device specific.
                       A device may use the number of digits as specified
                       in TR-101 Table 2 / TR-156 Table 1 or a device may
                       determine the number of digits by the maximum
                       value for the Slot or a Port identification
                       applicable to the device, i.e., if the maximum
                       value is less than or equal to 9, one digit may
                       be used; if the maximum value is less than or
                       equal to 99, two digits may be used, etc.";
                      reference
                        "TR-178 - R119 and TR-101i2 - R153;
                        TR-101i2 - Table 2 Circuit ID Syntax;
                        TR-156 - Table 1 Port Identification String
                        Elements.";
    
                    }
                  }  // container access-line-identification
    
                  container topology-discovery {
                    when
                      "../capability='bbf-ancp:topology-discovery'" {
                      description
                        "Only applicable, if the topology discovery
                       capability has been selected.";
                    }
                    description
                      "Configuration to manage line state reporting for
                     topology discovery.";
                    container port-up {
                      description
                        "Configuration to manage line state reporting for
                       the Port Up message.";
                    }  // container port-up
    
                    container port-down {
                      description
                        "Configuration to manage line state reporting for
                       the Port Down message.";
                    }  // container port-down
                  }  // container topology-discovery
    
                  container statistics {
                    if-feature bbf-ancp:session-statistics;
                    config false;
                    description
                      "ANCP statistics for this session.";
                    leaf last-established-timestamp {
                      type yang:date-and-time;
                      mandatory true;
                      description
                        "The date and time the session last entered the
                       established state.";
                    }
    
                    leaf last-discontinuity-timestamp {
                      type yang:date-and-time;
                      mandatory true;
                      description
                        "The date and time the session last suffered a
                       discontinuity.";
                    }
    
                    leaf in-valid-messages {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of messages that have been received and
                       processed in this session by the AN.
    
                       All ANCP messages pertaining to this session shall
                       be counted, also including adjacency protocol
                       messages and failure response messages.";
                    }
    
                    leaf in-discarded-messages {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of messages that in this session have
                       been received and discarded for whatever reason by
                       the AN.
    
                       All ANCP messages pertaining to this session shall
                       be counted, also including adjacency protocol
                       messages and failure response messages.";
                    }
    
                    leaf out-messages {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of messages that have been sent in this
                       session by the AN.
    
                       All ANCP messages pertaining to this session shall
                       be counted, also including adjacency protocol
                       messages and failure response messages.";
                    }
    
                    leaf in-syn {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of adjacency SYN messages that in this
                       session have been received by the Access Node.";
                    }
    
                    leaf in-synack {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of adjacency SYNACK messages that in
                       this session have been received by the access
                       node.";
                    }
    
                    leaf in-ack {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of adjacency ACK messages that in this
                       session have been received by the Access Node.";
                    }
    
                    leaf in-rstack {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of adjacency RSTACK messages that in
                       this session have been received by the access
                       node.";
                    }
    
                    leaf out-syn {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of adjacency SYN messages that in this
                       session have been transmitted by the Access Node.";
                    }
    
                    leaf out-synack {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of adjacency SYNACK messages that in
                       this session have been transmitted by the access
                       node.";
                    }
    
                    leaf out-rstack {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of adjacency RSTACK messages that in
                       this session have been transmitted by the access
                       node.";
                    }
    
                    leaf out-ack {
                      type yang:zero-based-counter32;
                      mandatory true;
                      description
                        "The number of adjacency ACK messages that in this
                       session have been transmitted by the Access Node.";
                    }
                  }  // container statistics
    
                  container reset {
                    when
                      "not(boolean(../enable))"
                        + " or "
                        + "(../enable='true')" {
                      description
                        "If the administrative state of a session is
                       supported, the session must be currently
                       administratively enabled to reset the session.";
                    }
                    if-feature session-reset;
                    description
                      "Provides containment for the action 'reset'.";
                    action reset {
                      description
                        "Reset the session.
    
                       Resetting the session will close the connection to
                       the NAS, if established, and clear any alarms. The
                       session will then restart and attempt to setup
                       adjacency to the NAS.";
                    }  // rpc reset
                  }  // container reset
                }  // list session
              }  // container sessions
    
              container port-message-control {
                description
                  "Configuration to control the generation of Port Up and
                 Port Down messages.";
                choice which-dampening-mechanism {
                  if-feature bbf-ancp:port-message-dampening;
                  default
                    "port-up-port-down-withholding-interval";
                  description
                    "Selects the dampening mechanism for the sending of
                   Port Up and Port Down event messages.";
                  case port-up-port-down-withholding-interval {
                    description
                      "Configures withholding interval for Port Up and Port
                     Down messages.";
                    leaf port-up-port-down-withholding-interval {
                      type union {
                        type enumeration {
                          enum "disabled" {
                            value 0;
                            description
                              "The withholding interval is disabled and
                             all line state changes will be reported
                             to the NAS.";
                          }
                        }
                        type uint16 {
                          range "1..max";
                        }
                      }
                      units "100 milliseconds";
                      default "disabled";
                      description
                        "Configures the dampening mechanism controlling the
                       rate at which Port Up and Port Down messages are
                       sent to the NAS, applying individually to each
                       access line. Specifically, it defines an interval
                       following the sending of a Port Up or Port Down
                       message for a given access line, during which no
                       further Port Up or Port Down message is to be sent
                       to the NAS for that given access line. If, at the
                       end of the withholding interval, there has been a
                       change in line state of the given line to that
                       when the last Port Up or Port Down message was
                       sent for that line, the new line state of that
                       line is reported to the NAS (with the withholding
                       interval for that line applying again).";
                      reference
                        "RFC 6320 section 6.4.1";
    
                    }
                  }  // case port-up-port-down-withholding-interval
                }  // choice which-dampening-mechanism
              }  // container port-message-control
            }  // list partition
          }  // container partitions
        }  // grouping ancp-schema
    
        container ancp {
          description
            "Management of the Access Node Control Protocol (ANCP).";
          uses ancp-schema;
        }  // container ancp
      }  // module bbf-ancp
    

© 2023 YumaWorks, Inc. All rights reserved.