Last Call Review of draft-ietf-bfd-yang-09
review-ietf-bfd-yang-09-rtgdir-lc-singh-2018-02-10-01

Request Review of draft-ietf-bfd-yang
Requested rev. no specific revision (document currently at 17)
Type Last Call Review
Team Routing Area Directorate (rtgdir)
Deadline 2018-02-09
Requested 2018-01-24
Requested by Jeffrey Haas
Draft last updated 2018-02-10
Completed reviews Secdir Last Call review of -09 by Christian Huitema (diff)
Rtgdir Last Call review of -09 by Ravi Singh (diff)
Yangdoctors Last Call review of -09 by Jürgen Schönwälder (diff)
Genart Last Call review of -14 by Meral Shirazipour (diff)
Secdir Last Call review of -14 by Christian Huitema (diff)
Comments
The BFD Yang module is a dependency for several routing-area drafts.  This interwork with those drafts, particularly with regards to session configuration, may have security implications that should be examined in tandem with the importing yang module.

The routing area directorate is requested to specifically examine interwork/usability of the BFD yang module with regards to the importing protocol yang modules.

It is understood that the deadline is likely overly aggressive, but was chosen to coincide mostly with the BFD WGLC on this document.  This document has been reviewed for BFD usability several times and is otherwise considered mature.
Assignment Reviewer Ravi Singh
State Completed
Review review-ietf-bfd-yang-09-rtgdir-lc-singh-2018-02-10
Reviewed rev. 09 (document currently at 17)
Review result Has Issues
Review completed: 2018-02-10

Review
review-ietf-bfd-yang-09-rtgdir-lc-singh-2018-02-10

Hello,

I have been selected as the Routing Directorate reviewer for this draft. The Routing Directorate seeks to review all routing or routing-related drafts as they pass through IETF last call and IESG review, and sometimes on special request. The purpose of the review is to provide assistance to the Routing ADs. For more information about the Routing Directorate, please see ​http://trac.tools.ietf.org/area/rtg/trac/wiki/RtgDir

Although these comments are primarily for the use of the Routing ADs, it would be helpful if you could consider them along with any other IETF Last Call comments that you receive, and strive to resolve them through discussion or by updating the draft.

Document: draft-ietf-bfd-yang-09
Reviewer: Ravi Singh
Review Date: 02/09/2018
Intended Status: Proposed standard



Summary: there is more commonality of info in the new modules listed in sections 2.6-2.10 than there are differences. So, I think it would be worthwhile looking at sub-abstracting things to avoid repetitive fields individually listed in the modules of section 2.6-2.10.

Details:
I've reviewed the draft. Most sections look good.
My comments below pertain to 2.6 to 2.10.
Section 2 says "Since BFD is used for liveliness detection of various forwarding
   paths, there is no uniform key to identify a BFD session.  So the BFD
   data model is split in multiple YANG modules where each module
   corresponds to one type of forwarding path. "
That is ok. However, this is causing too much repetition of info across the multiple modules.
There appears to be scope for modularization to not repeat the individual fields in describing them in every module that uses them.
Instead sub-modules should be considered & listed in one section which just augment the newly created modules of this draft wherever currently used.

Eg.
Separate sub-modules could be considered for:
A.
        +--ro session-statistics
        |  +--ro session-count?              uint32
        |  +--ro session-up-count?           uint32
        |  +--ro session-down-count?         uint32
        |  +--ro session-admin-down-count?   uint32

B.
           +--rw source-addr                 inet:ip-address
           +--rw dest-addr                   inet:ip-address
           +--rw local-multiplier?           multiplier
           +--rw (interval-config-type)?
           |  +--:(tx-rx-intervals)
           |  |  +--rw desired-min-tx-interval?    uint32
           |  |  +--rw required-min-rx-interval?   uint32
           |  +--:(single-interval)
           |     +--rw min-interval?               uint32
           +--rw demand-enabled?             boolean {demand-mode}?
           +--rw admin-down?                 boolean
           +--rw authentication! {authentication}?
           |  +--rw key-chain?    kc:key-chain-ref
           |  +--rw meticulous?   Boolean

C.
              +--ro path-type?              identityref
              +--ro ip-encapsulation?       boolean
              +--ro local-discriminator?    discriminator
              +--ro remote-discriminator?   discriminator
              +--ro remote-multiplier?      multiplier
              +--ro demand-capability?      boolean {demand-mode}?
              +--ro source-port?            inet:port-number
              +--ro dest-port?              inet:port-number
              +--ro session-running
              |  +--ro session-index?                uint32
              |  +--ro local-state?                  state
              |  +--ro remote-state?                 state
              |  +--ro local-diagnostic?
              |  |       iana-bfd-types:diagnostic
              |  +--ro remote-diagnostic?
              |  |       iana-bfd-types:diagnostic
              |  +--ro remote-authenticated?         boolean
              |  +--ro remote-authentication-type?
              |  |       iana-bfd-types:auth-type {authentication}?
              |  +--ro detection-mode?               enumeration
              |  +--ro negotiated-tx-interval?       uint32
              |  +--ro negotiated-rx-interval?       uint32
              |  +--ro detection-time?               uint32
              |  +--ro echo-tx-interval-in-use?      uint32
              |          {echo-mode}?
              +--ro sesssion-statistics
                 +--ro create-time?            yang:date-and-time
                 +--ro last-down-time?         yang:date-and-time
                 +--ro last-up-time?           yang:date-and-time
                 +--ro down-count?             uint32
                 +--ro admin-down-count?       uint32
                 +--ro receive-packet-count?   uint64
                 +--ro send-packet-count?      uint64
                 +--ro receive-bad-packet?     uint64
                 +--ro send-failed-packet?     Uint64

D.
           +--rw (interval-config-type)?
           |  +--:(tx-rx-intervals)
           |  |  +--rw desired-min-tx-interval?    uint32
           |  |  +--rw required-min-rx-interval?   uint32
           |  +--:(single-interval)
           |     +--rw min-interval?               uint32


E.

              +--ro sesssion-statistics
              |  +--ro create-time?            yang:date-and-time
              |  +--ro last-down-time?         yang:date-and-time
              |  +--ro last-up-time?           yang:date-and-time
              |  +--ro down-count?             uint32
              |  +--ro admin-down-count?       uint32
              |  +--ro receive-packet-count?   uint64
              |  +--ro send-packet-count?      uint64
              |  +--ro receive-bad-packet?     uint64
              |  +--ro send-failed-packet?     uint64

F.       In notifications:
        +--ro local-discr?                 discriminator
        +--ro remote-discr?                discriminator
        +--ro new-state?                   state
        +--ro state-change-reason?         iana-bfd-types:diagnostic
        +--ro time-of-last-state-change?   yang:date-and-time
        +--ro dest-addr?                   inet:ip-address
        +--ro source-addr?                 inet:ip-address
        +--ro session-index?               uint32
        +--ro path-type?                   identityref

Separate sub-modules for the above could be used to enable cleaner abstractions. The same could augment the modules of sections 2.6-2.10.

Regards
Ravi