netconfcentral logo

ietf-flexe@2019-10-30



  module ietf-flexe {

    yang-version 1.1;

    namespace
      "urn:ietf:params:xml:ns:yang:ietf-flexe";

    prefix flexe;

    import iana-if-type {
      prefix ianaift;
    }
    import ietf-interfaces {
      prefix if;
      reference
        "RFC8343: A YANG Data Model for Interface Management";


    }

    organization "IETF CCAMP Working Group";

    contact
      "WG Web:   http://tools.ietf.org/wg/ccamp/
     WG List:  <mailto:ccamp@ietf.org>
     Author:   Yuanlong Jiang
               <mailto:jiangyuanlong@huawei.com>
     Author:   Xiang He
               <mailto: hexiang@huawei.com>
     Author:   Weiqiang Cheng
               <mailto: chengweiqiang@chinamobile.com>
     Author:   Junfang Wang
               <mailto: wjf@fiberhome.com>
     Author:   Yalei Han
               <mailto: ylhan@fiberhome.com>";

    description
      "This YANG module defines a data model for the configuration
     of FlexE interface.";

    revision "2019-10-30" {
      description "Initial version";
      reference
        "draft-jiang-ccamp-flexe-yang-02: YANG Data Model for FlexE
        Interface Management ";

    }


    identity flexEthernet {
      base ianaift:iana-interface-type;
      description "Flex Ethernet.";
    }

    typedef slot-granularity-enumeration {
      type enumeration {
        enum "slot-5g" {
          value 1;
          description "5Gbps per slot.";
        }
        enum "slot-25g" {
          value 2;
          description "25Gbps per slot.";
        }
        enum "slot-others" {
          value 254;
          description
            "Other type of granularities per slot.";
        }
      }
      description
        "The bandwidth granularity of a slot. Options for this
      enumeration are specified by the OIF standard, currently only
      5G and 25G are defined.";
      reference
        "OIF Flex 2.0: Section 6.7";

    }

    typedef slot-status-enumeration {
      type enumeration {
        enum "unavailable" {
          value 1;
          description
            "slot is unavailable for a FlexE client.";
        }
        enum "unused" {
          value 2;
          description "slot is unused.";
        }
        enum "used" {
          value 3;
          description "slot is used.";
        }
      }
      description
        "The status of a slot in a PHY. Options for this enumeration
       are specified by the OIF standard, 'used' is implicit.";
      reference
        "OIF Flex 2.0: Section 7.3.4 and Section 7.6";

    }

    typedef flexe-phy-enumeration {
      type enumeration {
        enum "PHY-100GBASE-R" {
          value 1;
          description
            "100GBASE-R PHY, as defined in FlexE 1.0.";
        }
        enum "PHY-200GBASE-R" {
          value 2;
          description
            "200GBASE-R PHY, as defined in FlexE 2.0.";
        }
        enum "PHY-400GBASE-R" {
          value 3;
          description
            "400GBASE-R PHY, as defined in FlexE 2.0.";
        }
        enum "PHY-50GBASE-R" {
          value 4;
          description
            "50GBASE-R PHY, as defined in FlexE 2.1.";
        }
      }
      description
        "The current type of PHYs bonded in a FlexE Group. Values for
       this enumeration are specified by the OIF standard.";
      reference
        "OIF Flex 2.0 and 2.1: Section 5.2.1.5";

    }

    typedef phy-status-enumeration {
      type enumeration {
        enum "phy-status-OK" {
          value 0;
          description
            "The FlexE PHY status is ok";
        }
        enum "phy-status-LOF" {
          value 1;
          description
            "The FlexE PHY status is Loss of Frame";
        }
        enum "phy-status-RPF" {
          value 2;
          description
            "The FlexE PHY status is Remote PHY Fault";
        }
        enum "phy-status-LPF" {
          value 3;
          description
            "The FlexE PHY status is Local PHY Fault";
        }
      }
      description
        "The current PHY status. RPF, LPF, LOF and OK are defined.";
      reference
        "OIF Flex 2.0: Section 7.3.8";

    }

    typedef client-status-enumeration {
      type enumeration {
        enum "flexe-client-status-OK" {
          value 0;
          description
            "The FlexE client status is OK";
        }
        enum "flexe-client-status-LF" {
          value 1;
          description
            "The FlexE client status is Local Fault";
        }
        enum "flexe-client-status-RF" {
          value 2;
          description
            "The FlexE client status is Remote Fault";
        }
      }
      description
        "The client status. RPF, LPF and OK are defined.";
      reference
        "OIF Flex 2.0: Section 7.3.8";

    }

    augment /if:interfaces/if:interface {
      when
        "if:type = 'ianaift:flexEthernet'" {
        description
          "Applies to Flex bonded Ethernet interfaces";
      }
      description
        "Augment interface model with OIF Flex Ethernet interface
       specific configuration nodes. Each flexEthernet interface
       represents a FlexE Group configured in a device.";
      container flexe-group {
        description
          "The struct containing all FlexE related configuration
         (see OIF FlexE 2.0 Section 6.1).
         Note that max number of FlexE groups in a network is 63.";
        leaf group-number {
          type uint32 {
            range "1..1048574";
          }
          description
            "FlexE Group Number as defined in Section 7.3.6 of FlexE
           2.0.";
        }

        leaf slot-granularity {
          type slot-granularity-enumeration;
          default "slot-5g";
          description
            "The granularity of a slot in a FlexE group.";
        }

        leaf flexe-phy-type {
          type flexe-phy-enumeration;
          default "PHY-100GBASE-R";
          description
            "The type of PHYs bonded in a FlexE Group.";
        }

        leaf calendar-protocol-enable {
          type boolean;
          default 'true';
          description
            "Whether calendar negotiation protocol is enabled or
             not.";
          reference
            "OIF Flex 2.0: Section 7.3.4";

        }

        list flexe-phy-list {
          key "flexe-phy-if";
          description
            "List of PHYs bonded in a FlexE group.";
          leaf flexe-phy-if {
            type if:interface-ref;
            description
              "Reference to a Flexe PHY interface.";
          }

          leaf phy-number {
            type uint8 {
              range "1 .. 254";
            }
            description
              "PHY number of a FlexE PHY.
            If PHY type is 100GBASE-R, phy-number is [1,254].
            If PHY type is 200GBASE-R, phy-number is [1,126].
            If PHY type is 400GBASE-R, phy-number is [1, 62].";
          }

          leaf flexe-phy-status {
            type phy-status-enumeration;
            default "phy-status-OK";
            config false;
            description
              "The FlexE PHY status.";
          }

          list calendar-slot-list {
            key "slot-id";
            description
              "List of slots in a FlexE PHY. Max elements of
            slot-list for a FlexE PHY is dependent on the PHY
            bandwidth (X)G and the slot granularity (Y)G, i.e.,
            X/Y. For example, for a 400GBASE-R PHY:
            If slot-granularity=slot-5g, max-elements is 80.
            If slot-granularity=slot-25g, max-elements is 16.";
            leaf slot-id {
              type uint8;
              description
                "slot id of a slot in a PHY.";
            }

            leaf flexe-slot-status {
              type slot-status-enumeration;
              default 'unused';
              config false;
              description
                "Slot status of a FlexE slot.";
            }
          }  // list calendar-slot-list
        }  // list flexe-phy-list

        list flexe-client-list {
          key "client-id";
          description
            "List of FlexE clients in a FlexE Group.";
          leaf client-id {
            type uint16 {
              range "1..65534";
            }
            description
              "FlexE Client field as defined in FlexE 2.0 Section
            7.3.4.";
          }

          leaf flexe-client-if {
            type if:interface-ref;
            description
              "The type of a flexe client interface must be
            'flexeClient'.";
          }

          list client-slot-list {
            key "client-slot-id";
            min-elements 1;
            description
              "List of slots for a FlexE client.";
            leaf client-slot-id {
              type uint8;
              description
                "Client slot id of a client slot in sequence for a
              client.";
            }

            leaf mapped-phy-if {
              type if:interface-ref;
              description
                "Mapped PHY interface of a client slot.";
            }

            leaf mapped-slot-id {
              type uint8;
              description
                "Mapped Slot id of a client slot in the mapped PHY.
              If a slot [i] is mapped, flexe-slot-status[i] in the
              Mapped PHY MUST be set to 'used' ";
            }
          }  // list client-slot-list

          leaf flexe-client-status {
            type client-status-enumeration;
            default 'flexe-client-status-OK';
            config false;
            description
              "The FlexE client status.";
          }
        }  // list flexe-client-list

        leaf flexe-group-status {
          type uint8;
          config false;
          description
            "Status for a FlexE Group. If any PHY is in fault,
          or any FlexE configuration is mismatched, the FlexE
          Group status is indicated in fault. Status includes:
             OK, Local Fault, Remote Fault, mismatch and etc.";
        }
      }  // container flexe-group
    }
  }  // module ietf-flexe