[Rtg-yang-coord] Operational State Modeling

Xufeng Liu <xufeng.liu@ericsson.com> Tue, 12 May 2015 20:56 UTC

Return-Path: <xufeng.liu@ericsson.com>
X-Original-To: rtg-yang-coord@ietfa.amsl.com
Delivered-To: rtg-yang-coord@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 129101A1B6C for <rtg-yang-coord@ietfa.amsl.com>; Tue, 12 May 2015 13:56:16 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.2
X-Spam-Level:
X-Spam-Status: No, score=-4.2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5hFSkLHhmLOf for <rtg-yang-coord@ietfa.amsl.com>; Tue, 12 May 2015 13:56:11 -0700 (PDT)
Received: from usevmg20.ericsson.net (usevmg20.ericsson.net [198.24.6.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 04CC61A8A85 for <Rtg-yang-coord@ietf.org>; Tue, 12 May 2015 13:56:10 -0700 (PDT)
X-AuditID: c618062d-f79a96d000007fb1-50-555210a17521
Received: from EUSAAHC007.ericsson.se (Unknown_Domain [147.117.188.93]) by usevmg20.ericsson.net (Symantec Mail Security) with SMTP id 55.40.32689.1A012555; Tue, 12 May 2015 16:39:29 +0200 (CEST)
Received: from EUSAAMB107.ericsson.se ([147.117.188.124]) by EUSAAHC007.ericsson.se ([147.117.188.93]) with mapi id 14.03.0210.002; Tue, 12 May 2015 16:56:04 -0400
From: Xufeng Liu <xufeng.liu@ericsson.com>
To: "Rtg-yang-coord@ietf.org" <Rtg-yang-coord@ietf.org>
Thread-Topic: Operational State Modeling
Thread-Index: AdCM9felkKpDh+jYTPGkN01wChYhCQ==
Date: Tue, 12 May 2015 20:56:04 +0000
Message-ID: <AAB1CC9C17CBA440BDFA169056B93B9EBE8260@eusaamb107.ericsson.se>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [147.117.188.10]
Content-Type: multipart/alternative; boundary="_000_AAB1CC9C17CBA440BDFA169056B93B9EBE8260eusaamb107ericsso_"
MIME-Version: 1.0
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrDLMWRmVeSWpSXmKPExsUyuXRPrO5CgaBQg7XnpC1+P7/N7MDosWTJ T6YAxigum5TUnMyy1CJ9uwSujB0NnSwFP3YxV7Q0dTE3MD5vYu5i5OSQEDCRuLT9DBuELSZx 4d56IJuLQ0jgKKPE9KO/oJzljBLr+qawdzFycLAJaElcfuoI0iAiYC7RPPsM2CBhAWWJ299X skDENSSu34SIiwjoSVz//pAJxGYRUJXY+2wRWJxXwFtiSeM+sHpGoMXfT60Bq2EWEJe49WQ+ E8RBAhJL9pyHOlRU4uXjf6wQtpLEpKXnWCHq8yU23bnJDjFTUOLkzCcsExiFZiEZNQtJ2Swk ZRBxHYkFuz+xQdjaEssWvmaGsc8ceMyELL6AkX0VI0dpcWpZbrqRwSZGYPAfk2DT3cG456Xl IUYBDkYlHt4H0wJDhVgTy4orcw8xSnOwKInzLnpwMERIID2xJDU7NbUgtSi+qDQntfgQIxMH p1QD44QDWevijzQEetdvEnS+lMllVx6t/UdaTPRx4X8XBmVbDpewl2Kz/v+TlxUwnZf1qDmg U+h0QFvB6qqZcz9srbP+/exwmZzXOtkjEad1bD23hVaF8t8Kf39ryfs1ymkmvIp7BVaXaHpE FAWnrFETO9f9ZtmX58tk/4rxzkn+afR/m8jX890PlViKMxINtZiLihMBXUvOXV8CAAA=
Archived-At: <http://mailarchive.ietf.org/arch/msg/rtg-yang-coord/FZWh1LuEzaYT028jUq0MfAdDRQU>
Subject: [Rtg-yang-coord] Operational State Modeling
X-BeenThere: rtg-yang-coord@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: "\"List to discuss coordination between the Routing related YANG models\"" <rtg-yang-coord.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtg-yang-coord>, <mailto:rtg-yang-coord-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/rtg-yang-coord/>
List-Post: <mailto:rtg-yang-coord@ietf.org>
List-Help: <mailto:rtg-yang-coord-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtg-yang-coord>, <mailto:rtg-yang-coord-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 12 May 2015 20:56:16 -0000

During the YANG MPLS/TE design team discussions, the topic of operational state modeling was brought up. We discussed the proposal presented in http://www.ietf.org/id/draft-openconfig-netmod-opstate-00.txt and some various approaches. Here are some thoughts and questions.
1.    Requirements
We agree with the requirements presented in draft-openconfig-netmod-opstate. These requirements are summarized as followings.
1.1.Performance Requirement

*            Operational state access is much more frequent than configuration

*            State data is generally higher volume than configuration data

1.2.Data Type Requirements

*            Representing intended configuration (actual vs. configured)

*            Derived, negotiated, and system assigned data

*            Counters or statistics

1.3.Operation Requirements

*            Separate configuration and operational state data

*            Retrieve configuration and operational state data independently

*            Retrieve derived state and statistics state independently

*            Consistent schema locations for configuration and corresponding operational state data

2.    Some Options
2.1.Option 1



/routing/routing-instance:

   +--rw te!

      +--rw globals

      +--rw interfaces

      |  +--rw interface* [interface]

      |     +--rw interface                 if:interface-ref

            +--rw config

      |        +--rw switching-capabilities* [switching-capability]

                  +--rw config

      |           |  +--rw capability?   identityref

      |          |  +--rw encoding?     identityref

                  +--ro state

      |              +--ro capability?   identityref

      |             +--ro encoding?     identityref

      |        +--rw te-metric?                ietf-te-types:te-metric

            +--ro state

      |        +--ro te-metric?                ietf-te-types:te-metric

               +--ro oper-status?            enumeration

               +--ro counters

                     +--ro pkts-sent?              yang:counter32

      +--rw tunnels

         +--rw tunnel* [name type]

            +--rw name                    string

            +--rw config

               |  +--rw admin-status?           identityref

            |  +--rw forwarding

                  +--rw config

            |        +--rw load-share?   uint32

                  +--ro state

            |        +--ro load-share?   uint32

            +--ro state

                  +--ro admin-status?           identityref

               +--ro oper-status?            enumeration

               +--ro counters

                  +--ro events?              yang:counter32

2.2.Option 2



/routing/routing-instance:

   +--rw te!

      +--rw globals

      +--rw interfaces

      |  +--rw interface* [interface]

      |     +--rw interface                 if:interface-ref

      |     +--rw switching-capabilities* [switching-capability]

      |     |  +--rw capability?   identityref

      |     |  +--rw encoding?     identityref

      |     +--rw te-metric?                ietf-te-types:te-metric

      +--rw tunnels

         +--rw tunnel* [name type]

            +--rw name                    string

            +--rw admin-status?           identityref

            +--rw forwarding

               +--rw load-share?   uint32

/routing-state/routing-instance:

   +--ro te!

      +--ro globals

      +--ro interfaces

      |  +--ro interface* [interface]

      |     +--ro interface                 if:interface-ref

      |     +--ro switching-capabilities* [switching-capability]

      |     |  +--ro capability?   identityref

      |     |  +--ro encoding?     identityref

      |     +--ro te-metric?                ietf-te-types:te-metric

            +--ro oper-status?            enumeration

            +--ro counters

               +--ro pkts-sent?              yang:counter32

      +--ro tunnels

         +--ro tunnel* [name type]

            +--ro name                    string

            +--ro admin-status?           identityref

            +--ro forwarding

               +--ro load-share?   uint32

            +--ro oper-status?            enumeration

            +--ro counters

               +--ro events?              yang:counter32



2.3.Option 3


/routing/routing-instance:

   +--rw te!

      +--rw globals

      +--rw interfaces

      |  +--rw interface* [interface]

      |     +--rw interface                 if:interface-ref

            +--rw config

      |        +--rw switching-capabilities* [switching-capability]

                  +--rw config

      |           |  +--rw capability?   identityref

      |          |  +--rw encoding?     identityref

                  +--ro state

      |              +--ro capability?   identityref

      |             +--ro encoding?     identityref

      |        +--rw te-metric?                ietf-te-types:te-metric

            +--ro state

      |        +--ro te-metric?                ietf-te-types:te-metric

      +--rw tunnels

         +--rw tunnel* [name type]

            +--rw name                    string

            +--rw config

               |  +--rw admin-status?           identityref

            |  +--rw forwarding

                  +--rw config

            |        +--rw load-share?   uint32

                  +--ro state

            |        +--ro load-share?   uint32

            +--ro state

               +--ro admin-status?           identityref



/routing-state/routing-instance:

   +--ro te!

      +--ro globals

      +--ro interfaces

      |  +--ro interface* [interface]

      |     +--ro interface                 if:interface-ref

            +--ro oper-status?            enumeration

            +--ro counters

               +--ro pkts-sent?              yang:counter32

      +--ro tunnels

         +--ro tunnel* [name type]

            +--ro name                    string

            +--ro oper-status?            enumeration

            +--ro counters

               +--ro events?              yang:counter32



3.    Approach Rationales
1.1.Performance Requirement

*            Separating configuration and state branches allows implementing state data through a separate fast channel to deliver high frequent and high volume data.

*            In this aspect, Option 2 has a clearer separation between configuration and state data, and easier to achieve better performance by using separate channels.

1.2.Data Type Requirements

*            Duplicating all configuration attributes makes actual configuration settings available

*            Derived, negotiated, and system assigned data are added to the state branch

*            Counters or statistics are added to the state branch

*            All three options satisfy these requirements

1.3.Operation Requirements

*            Separating configuration and operational state data allows retrieving configuration and operational state data independently.

*            Separating derived state and statistics state allows retrieving them independently

*            The state branch is an exact mirror of the configuration branch, so the schema locations are consistent.

*            In this aspect, all three options satisfy the requirements. For option 1, to check the state value for a specific configuration attribute, the client software can simply add the "state" to the end of the schema node path. For option 2, to check the state value for a specific configuration attribute, the client software can simply add the "-state" suffix to the name of the top container. Option 1 seems to be easiest in this regard, but others are acceptable?

1.4.Other Requirements

*             Model system created read-only objects (e.g. TE tunnels). When state data and config data share the same parent, they share the same key for the parent list. Even though that the state branch is read-only, its parent is not and the key of the parent is not. Therefore, we will have difficulty to achieve this in Option 1.

*             Compatible with the existing models. The related models include RFC7223, RFC7277 and draft-ietf-netmod-routing-cfg-18. In this aspect, Option 2 seems to do better.

Your comments and preferences are appreciated.
Thanks,

- Xufeng