Internet Engineering Task Force X. Niu, Ed.
Internet-Draft Q. Wang, Ed.
Intended status: Informational ZTE
Expires: April 25, 2019 October 22, 2018

A YANG Data Model for Flex Ethernet(FlexE)
draft-xiaobn-flexe-yang-mod-00

Abstract

Flex Ethernet(FlexE) implementation agreement have been published by OIF. FlexE provides a generic mechanism for supporting a variety of Ethernet MAC rates that may or may not correspond to any existing Ethernet PHY rate.

This document describes a YANG data model for FlexE. It can be used to manage and control devices supporting FlexE functions.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on April 25, 2019.

Copyright Notice

Copyright (c) 2018 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.


Table of Contents

1. Introduction

Flex Ethernet (FlexE) implementation agreement version 1.0 [OIFFLEXE1] and 2.0 [OIFFLEXE2] have been published by OIF. FlexE provides a generic mechanism for supporting a variety of Ethernet MAC rates that may or may not correspond to any existing Ethernet PHY rate. This includes MAC rates that are both greater than (through bonding) and less than (through sub-rate and channelization) the Ethernet PHY rates used to carry FlexE.

This document defines a date model of FlexE, using YANG[RFC7950]. This model mainly deals with the data model of the FlexE Group and the FlexE client. It can be used by an application to configure and modify the parameters of the FlexE Group and the FlexE client, and to receive notifications, e.g. mismatch errors, from devices supporting FlexE functions.

Requirements for the FlexE YANG model are considered. And FlexE YANG tree and YANG files are given.

2. Terminology

A simplified graphical representation of the data model is used in this document. The meaning of the symbols in the YANG data tree presented later in this document is defined in [RFC8340]. They are provided below for reference.

2.1. Requirements Language

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

2.2. FlexE terminology used in this document

  1. CSG: Calendar Slot Granularity. It can be 5G or 25G.
  2. FlexE Calendar: In FlexE IA v1.0, the total capacity of a FlexE Group is represented as a collection of slots which have a granularity of 5G. The calendar for a FlexE Group composed of n 100G PHYs is represented as an array of 20n slots (each representing 5G of bandwidth). This calendar is partitioned into sub-calendars, with 20 slots per 100G PHY. Each FlexE client is mapped into one or more calendar slots (based on the bandwidth the FlexE client flow will need). In FlexE IA v2.0[OIFFLEXE2], the total capacity of a FlexE Group is represented as a collection of slots which may have a granularity of 5G or 25G. The calendar for a FlexE Group composed of n 100G FlexE instances from m 100G/200G/400G PHYs is represented as an array of 20n slots (each representing 5G of bandwidth) or 4n slots (25G granularity).
  3. FlexE Client: An Ethernet flow based on a MAC data rate that may or may not correspond to any Ethernet PHY rate.
  4. FlexE Group: A FlexE Group is composed of from 1 to n 100G FlexE Instances that are carried by a group of from 1 to m bonded Ethernet PHYs.
  5. FlexE instance: A 100G FlexE Instance is a unit of information consisting of 100G of capacity able to carry FlexE Client data, together with its associated overhead.

Detailed description of these terms can be found in [OIFFLEXE1] and [OIFFLEXE2] .

3. FlexE Reference Configuration Model

FlexE can be implemented between the FlexE mux and demux in two end devices connected directly by the FlexE links. In this case, FlexE is just a link connection technology.

FlexE can also be transported by transport networks. There are three kinds of transport network mapping mechanisms for FlexE signals, that is, FlexE unaware transport, FlexE termination in the transport network and FlexE aware transport.

How to configure the ingress or egress of transport network about FlexE mapping relationship may be application specific. In this document, the part of YANG data model for the transport network mapping for FlexE is not included at present.

4. Requirements

4.1. Requirements

This section summarizes the management requirements for the FlexE Group and the FlexE Client.

Req-1 The model SHALL support the management of the FlexE Group, consisting of one or more 100G FlexE instances which carried by one or more 100GE, 200GE, 400GE Ethernet PHY(s).

The detailed management covers the CURD functions (create, update, read and delete), and lock/unlock.

Req-2 The model SHOULD be able to verify that the collection of Ethernet PHY(s) included in a FlexE Group have the same characteristics (e.g. number of PHYs, rate of PHYs, etc.) at the local FlexE shims. If inconsistency exists, notifications (e.g. errors) SHOULD be invoked.

Req-3 The model SHOULD be able to verify that the collection of FlexE instances included in a FlexE Group have the same characteristics (e.g. calendar slot granularity, unequipped slots, etc.) at the local FlexE shims. If inconsistency exists, notifications (e.g. errors) SHOULD be invoked.

Req-4 The model SHALL allow the addition (or removal) of one or more FlexE clients on a FlexE Group. The addition (or removal) of a FlexE client flow SHALL NOT affect the services for the other FlexE client signals.

Req-5 The model SHALL allow FlexE client signals to flexibly span the set of FlexE instances which comprise the FlexE Group.

Req-6 The model SHALL support a FlexE client flow resizing without affecting any existing FlexE clients within the same FlexE Group.

Req-7 The model SHALL support the switching of a calendar configuration. There are two calendar configurations, A and B.

5. YANG Data Model for FlexE (Tree Structure)

                
module: ietf-flexe-yang
  +--rw flexe-configuration
  |  +--rw flexe-groups
  |  |  +--rw flexe-group* [group-name]
  |  |     +--rw group-name          string
  |  |     +--rw group-attributes
  |  |        +--rw group-number?                uint32
  |  |        +--rw calendar-slot-granularity?   calendar-slot-granularity
  |  |        +--rw flexe-phy-type?              flexe-phy-type
  |  |        +--rw bonded-phys
  |  |        |  +--rw flexe-phys* [phy-number-in-group]
  |  |        |     +--rw phy-number-in-group    uint8
  |  |        |     +--rw local-phy-number?      uint16
  |  |        +--rw flexe-instances
  |  |        |  +--rw flexe-instance* [flexe-instance-number]
  |  |        |  |  +--rw flexe-instance-number    uint8
  |  |        |  +--rw uneqipped-flexe-instance* [flexe-instance-number]
  |  |        |     +--rw flexe-instance-number    uint8
  |  |        +--rw rx-calendar?                 calendar-AorB
  |  |        +--rw tx-calendar?                 calendar-AorB
  |  |        +--rw tx-calendar-neg?             enumeration
  |  |        +--rw reply-ca-mode?               enumeration
  |  +--rw flexe-clients
  |     +--rw flexe-client* [client-name]
  |        +--rw client-name             string
  |        +--rw client-attribute
  |        |  +--rw client-number?   uint32
  |        |  +--rw bandwidth
  |        |     +--rw signal-type?   flexe-client-signal-rate
  |        |     +--rw mac-rate?      rt-types:bandwidth-ieee-float32
  |        +--rw used-flexe-resources
  |           +--rw used-rsc* [calendar flexe-group]
  |              +--rw calendar          calendar-AorB
  |              +--rw flexe-group       string
  |              +--rw flexe-instance?   uint8
  +--ro flexe-group-state
     +--ro port-group
        +--ro port-group* [port-group-id]
           +--ro port-group-id    uint32
           +--ro intf-state?      intf-state
                    
				

Figure 1

6. YANG Module

<CODE BEGINS> file "ietf-flexe-yang@2018-10-12.yang"
module ietf-flexe-yang {
  yang-version 1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-flexe-yang";
  prefix "flexe";
  import ietf-routing-types {
    prefix rt-types;
  }
  organization
    "Internet Engineering Task Force (IETF) CCAMP WG";
  contact
    "WG List: <mailto:ccamp@ietf.org>
  ID-draft editor:
    Xiaobing Niu (niu.xiaobing@zte.com.cn);
    Qilei Wang (wang.qilei@zte.com.cn); ";
  description
    "This module defines a YANG data model for FlexE.";
  revision 2018-10-12 {
    description
      "Initial version.";
    reference
	  "draft-xiaobn-flexe-yang-mod-00.txt";
  }
 
  /* typedefs */
  typedef calendar-slot-granularity {
    type enumeration {
      enum csg-5G {
        value 1;
        description "Calendar slot with a 5G granularity";
      }
      enum csg-25G {
        value 2;
        description "Calendar slot with a 25G granularity";
      }    	    
    }
    description
      "Defines a type representing the granularity of a calendar slot.";
  }
    
  typedef flexe-client-signal-rate {
    type enumeration {
      enum flexe-client-signal-10Gbps{
        value 1;
        description 
          "FlexE Client signal rate of 10Gbps";
      }
      enum flexe-client-signal-40Gbps{
        value 2;
        description 
          "FlexE Client signal rate of 40Gbps";
      }
      enum flexe-client-signal-25mGbps{
        value 3;
        description 
          "FlexE Client signal rate of m*25Gbps";
      }
    }
    description
      "Defines FlexE Client signal rate, including 10, 40, m*25Gbps.";
  }   
  typedef flexe-phy-type {
    type enumeration {
      enum flexe-phy-100GBASE-R {
        value 1;
        description "100GBASE-R PHY";
      }
      enum flexe-phy-200GBASE-R {
        value 2;
        description "200GBASE-R PHY";
      }
      enum flexe-phy-400GBASE-R {
        value 3;
        description "400GBASE-R PHY";
      }   
    }
    description
      "Defines types of PHYs in a FlexE group";
  }
  typedef calendar-AorB {
    type enumeration {
      enum calendar-A {
        value 0 ;
        description
          "Set the A calendar configuration.";
      }
      enum calendar-B {
        value 1 ;
        description
          "Set the B calendar configuration.";
      }
    } 
    description
      "Calendar configuration A or B";
  }
  /* interface states: OK, SF, SD */
  typedef intf-state {
    type enumeration {
      enum ok {
        value 0 ;
        description 
          "The interface state of the FlexE Group is OK.";
      }
      enum sf {
        value 1 ;
        description
          "The interface state of the FlexE Group is SF."      ;
      }
      enum sd {
        value 2 ;
        description 
          "The interface state of the FlexE Group is SD.";
      }
    }
    description 
      "Interface state of port group.";
  }
  /* grouping */
  grouping flexe-client-bandwidth{
    leaf signal-type{
      type flexe-client-signal-rate;
      description 
        "Client signal types: 10, 40, m*25 Gbps.";
    }
    leaf mac-rate {
      type rt-types:bandwidth-ieee-float32;
        description
          "Bandwidth of clients.";
    }
    description
      "The bandwidth of a FlexE client.";
  }
    
  /* Configuration of FlexE */
  container flexe-configuration{
    description 
      "FlexE configuration, including configuration of FlexE groups and FlexE clients.";
    container flexe-groups {
      description 
        "Container for the FlexE Group";
      list flexe-group {
        key group-name;
        description 
          "List of FlexE Group";    			
        leaf group-name {
          type string ;
          description 
            "The name of a FlexE Group";		          
        }
        container group-attributes {
          description
            "The attributes of a FlexE Group";     
          leaf group-number {
            type uint32 {
              range 1..1048574 ;		        		
            }
            description
              "The FlexE Group number is selected from the range 1~0xFFFFE.
               The value of 0x00000 and 0xFFFFF may not be used to designate
               a FlexE Group.";
          }	        	
          leaf calendar-slot-granularity{
            type calendar-slot-granularity;
              description
                "The granularity of calendar slot is 5G or 25G"; 
              reference
                "OIF FlexE IA 2.0";
          }
          leaf flexe-phy-type{
            type flexe-phy-type;
            description
              "Types of PHYs, such as 100/200/400GBASE-R"; 
            reference
              "OIF FlexE IA 2.0";                   	
          }
          container bonded-phys {
            description
              "PHYs bonded to form a FlexE Group";  
            list flexe-phys {
              key phy-number-in-group;
              description
                "One of bonded PHYs in a FlexE Group"; 
              leaf phy-number-in-group{
                type uint8 ;
                description 
                  "Refer to the clause 6.1 in FlexE IA 2.0.
                   For 100GBASE-R, the FlxeE PHY number and the 100G FlexE instance
                   number are the same and in the range [1-254];
                   For 200GBASE-R, each PHY number is in the range [1-126].
                   For 400GBASE-R, each PHY number is in the range [1-62].";		          
              }
              leaf local-phy-number{
                type uint16 ;
                description 
                  "Local PHY number related to the PHY number
                   in a FlexE group.( with uint16 while not uint8 )";		          
              }
            }
          }
		       
          container flexe-instances {
            description
              "FlexE instances in a FlexE Group";  
            list flexe-instance {
              key flexe-instance-number;
              description
                "List of a FlexE instance in a FlexE Group"; 
              leaf flexe-instance-number{
                type uint8 ;
                description 
                  "Logical FlexE instance number";
                reference
                  "Clause 6.1 FlexE Group in FlexE IA 2.0.
                   For 100G, instance num=PHY num;
                   For 200G, 8-bit instance num consists of the PHY num in the upper
                   seven bits, and 0 or 1 in the lower order bit.
                   For 400G, 8-bit instance num consists of the PHY num in the upper
                   six bits, and 0,1,2, or 3 in the two lower order bits.  ";		          
              }
            }
            list uneqipped-flexe-instance {
              key flexe-instance-number;
              description
                "Unquipped FlexE instance in a FlexE Group"; 
              leaf flexe-instance-number{
                type uint8 ;
                description 
                  "Clause 6.1 FlexE Group in FlexE IA 2.0";		          
              }
            }
          }
          leaf rx-calendar {		            	
            type calendar-AorB;
            description
              "Calendar configuration in the receive direction";
          }
          leaf tx-calendar {
            type calendar-AorB;
            description
              "Calendar configuration in the transmit direction";
          }
          leaf tx-calendar-neg {
            type enumeration {
              enum manual {
                value 1 ;
                description
                  "Manually configured";
              }
              enum protocol-force {
                value 2 ;
                description
                  "Protocol forced";
              }
              enum protocol-normal {
                value 3 ;
                description
                  "Protocol normal";
              }
            }
            description
              "TX calendar negotiation methods";
          }
          leaf reply-ca-mode {
            type enumeration {
              enum never {
                value 1 ;
                description 
                  "never reply CA (Configuration Ack)";
              }
              enum immediately {
                value 2 ;
                description 
                  "immediately reply CA (Configuration Ack)";
              }
              enum ask-controller {
                value 3 ;
                description 
                  "Ask controller for more control";
              }
            }
            description
              "Reply CA mode";
          }
        }		        
      }
    }
    container flexe-clients {
      description 
        "FlexE clients information";
      list flexe-client {
        key client-name ;
        description 
          "Attributes of FlexE client" ;
        leaf client-name {
          type string ;
          description 
            "FlexE client name";
        }
        container client-attribute {
          description
            "Attributes for specific client.";
          leaf client-number {
            type uint32 {
              range 1..65534 ;
            }
            description
              "Client number in the range of 1~0xFFFF";
          }
          container bandwidth {   
            description "Client bandwidth";
            uses flexe-client-bandwidth;
          }
        }
        container used-flexe-resources {
          description
            "Used FlexE resources to carry the FlexE client";
          list used-rsc {
            key "calendar flexe-group" ;  
            description
              "List of used resources";
            leaf calendar {
              type calendar-AorB;
              description
                "Calendar configuration";
            }
            leaf flexe-group {
              type string ;
              description
                "FlexE Group";
            }
            leaf flexe-instance {
              type uint8 ;
              description
                "FlexE Instance";
            }
          }
        }
      }
    }     /* end of FlexE client */	  		
  }
    
  /* states of FlexE Group */
  container flexe-group-state {
    config false ;
    description "State info." ;
    container port-group {
      description "Port group state information.";
      list port-group {
        key port-group-id ;
        description "The state information of port-group.";
        leaf port-group-id {
          type uint32 {
            range 1..65536 {  
              description "Port group id.";
            }
          }
          description "Port group id of port group.";
        }
        leaf intf-state {
          type intf-state ;
          description "Port state of port group.";
        }
      }
    }
  }
}
 
<CODE ENDS> 
 

7. Acknowledgements

8. Authors (Full List)

9. Contributors

10. IANA Considerations

This document registers the following namespace URIs in the IETF XML registry[RFC3688]:

URI: urn:ietf:params:xml:ns:yang:ietf-flexe-yang

Registrant Contact: The IESG.

XML: N/A, the requested URI is an XML namespace.

This document registers the following YANG modules in the YANG Module Names registry[RFC6020] :

name: ietf-flexe-yang

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

reference: RFC XXXX (TDB)

11. Security Considerations

The YANG module specified in this document defines a schema for data that is designed to be accessed via network management protocols such as NETCONF[RFC6241]. Proper standardized security measures should be implemented.

There are a number of data nodes defined in this YANG module that are writable/creatable/deletable. These data nodes may be considered sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations.

12. References

12.1. Normative References

[OIFFLEXE1] OIF, "Flex Ethernet Implementation Agreement 1.0(OIF-FLEXE-01.0); 03/2016", http://www.oiforum.com/wp-content/uploads/OIF-FLEXE-01.0.pdf, March 2016.
[OIFFLEXE2] OIF, "Flex Ethernet Implementation Agreement 2.0(OIF-FLEXE-02.0); 06/2018", http://www.oiforum.com/wp-content/uploads/OIF-FLEXE-02.0.pdf, June 2018.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004.
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, October 2010.
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J. and A. Bierman, "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011.
[RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, August 2016.
[RFC8340] Bjorklund, M. and L. Berger, "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018.

12.2. Informative References

[I-D.izh-ccamp-flexe-fwk] Hussain, I., Valiveti, R., Wang, Q., Andersson, L., Chen, M. and z. zhenghaomian@huawei.com, "GMPLS Routing and Signaling Framework for Flexible Ethernet (FlexE)", Internet-Draft draft-izh-ccamp-flexe-fwk-05, March 2018.

Authors' Addresses

Xiaobing Niu (editor) ZTE Beijing, CN EMail: niu.xiaobing@zte.com.cn
Qilei Wang (editor) ZTE Nanjing, CN EMail: wang.qilei@zte.com.cn