Skip to main content

Early Review of draft-ietf-alto-oam-yang-06
review-ietf-alto-oam-yang-06-yangdoctors-early-bierman-2023-04-03-00

Request Review of draft-ietf-alto-oam-yang-06
Requested revision 06 (document currently at 17)
Type Early Review
Team YANG Doctors (yangdoctors)
Deadline 2023-04-03
Requested 2023-03-12
Requested by Mohamed Boucadair
Authors Jingxuan Zhang , Dhruv Dhody , Kai Gao , Roland Schott , Qiufang Ma
I-D last updated 2023-04-03
Completed reviews Dnsdir Last Call review of -12 by Scott Rose (diff)
Secdir Last Call review of -12 by Rich Salz (diff)
Genart Last Call review of -12 by Dan Romascanu (diff)
Dnsdir Telechat review of -14 by Scott Rose (diff)
Dnsdir Telechat review of -15 by Ted Lemon (diff)
Yangdoctors Early review of -06 by Andy Bierman (diff)
Opsdir Early review of -06 by Dan Romascanu (diff)
Tsvart Early review of -06 by Spencer Dawkins (diff)
Comments
The document is currently in the WGLC. We are interested in the directorate review to assess the design.

Thank you.
Assignment Reviewer Andy Bierman
State Completed
Request Early review on draft-ietf-alto-oam-yang by YANG Doctors Assigned
Posted at https://mailarchive.ietf.org/arch/msg/yang-doctors/PeY9e8MAVhX1uSzKEdNHawEd-UE
Reviewed revision 06 (document currently at 17)
Result Almost ready
Completed 2023-04-03
review-ietf-alto-oam-yang-06-yangdoctors-early-bierman-2023-04-03-00
# Review: draft-ietf-alto-oam-yang-06.txt


## module ietf-alto

- General:

  - very well written
  - large module but quite understandable for implementors

### List Key Issues

- there are 3 list keys that use unconstrained 'string'
  as the data type

  - /alto/alto-client/client-id
  - /alto/alto-server/cost-type/cost-type-name
  - /alto/alto-server/role/role-name
  - /alto/alto-server/data-source/source-id


- the 'resource-id' is done correctly, using a well-constrained
  typedef to define the key leaf.

- A similar typedef for each of these 3 types is needed.
  The constraints do not have to be the same.
  Machine-readable stmts are preferred but description
  is just as normative as 'pattern'.

- the typedef should clarify the following issues:

  - semantics:

    - it should be clear if the name has any
      special meaning or derived from a field defined
      in a document.
    - Use 'reference' if possible to define the linkage.

  - whitespace:
    - leading or trailing whitespace allowed?
    - whitespace within the key string value allowed?

  - zero-length: if not allowed then a minimum length of 1
    should be specified.

  - max-length:
    - it may be desirable to pick a maximum string length
      - example with limit: range "1 .. 64";
      - without limit: range "1 .. max";
    - there are some engineering trade-offs to consider.
      Details are out of scope here.

  - allowed characters:
    - use of plain string means the server is expected to
      support the entire character set.  If this is not
      what is desired then limit the character set with a
      pattern or a description-stmt.

### /alto/alto-client

- mentioned in sec 5, 5.1, 5.2

- not clear if alto-client and alto-server would be implemented on the
  same device or expected that a device will implement one container
  or the other




### /alto/alto-server/logging-system/syslog-params/config-file

-  It is unusual to have an implementation or OS-specific
   default value for this sort of parameter.

        leaf config-file {
          type inet:uri {
            pattern 'file:.*';
          }
          default "file:/etc/syslog.conf";
          description
            "The file location of the syslog configuration.";
        }


### /alto/alto-server/meta

- The referenced RFC text is not sufficient to implement
  this list.

- It appears each list entry is a map entry and
  the meta-key is a JSONString, and meta-value is
  a JSONValue.

-  Not clear how arbitrary JSON is encoded here


       list meta {
        key "meta-key";
        description
          "Mapping of custom meta information";
        reference
          "Section 8.4.1 of RFC 7285.";
        leaf meta-key {
          type string;
          description
            "Custom meta key";
        }
        leaf meta-value {
          type string;
          mandatory true;
          description
            "Custom meta value";
        }
       }

- the entire referenced section

      Meta information is encoded as a map object for flexibility.
      Specifically, ResponseMeta is defined as:

        object-map { JSONString -> JSONValue } ResponseMeta;


### /alto/alto-server/auth-client/authentication

- this choice is not mandatory and there is no default.
- either add a mandatory-stmt, or a default-stmt, or explain
  what should happen if no authentication method is configured.


### /alto/alto-server/data-source/source-params

- Not much guidance or description on this placeholder choice.
  I understand you do not want to reference the 'example'
  YANG modules that augment this choice.

- Please add a reference or description mentioning the
  section in this RFC that explains the source params
  augmentation model.


        choice source-params {
          description
            "Data source specific configuration.";
        }

### grouping algorithm

- Same comment as source-params.
- Provide reference or other guidance how this mandatory
  empty choice is used.


         grouping algorithm {
          description
            "This grouping defines the base data model for information
             resource creation algorithm.";
          choice algorithm {
            mandatory true;
            description
              "Information resource creation algorithm to be augmented.";
          }
        }


### /alto/alto-server/data-source/feed-interval

- Add a units statement
- Is value zero allowed? If so what does it mean?
  If not then use a range-stmt


### /alto/alto-server/data-source/poll-interval

- Add a units statement
- Is value zero allowed? If so what does it mean?
  If not then use a range-stmt


### /alto/alto-server/resource/alto-costmap-params/cost-type-names

- Why is the type 'string' instead of a leafref
  to /alto/alto-server/cost-type/cost-type-name?

- Do not use a plural name for a leaf-list. (Use cost-type-name here)

### /alto/alto-server/resource/alto-costmap-params/testable-cost-type-names

- Why is the type 'string' instead of a leafref
  to /alto/alto-server/cost-type/cost-type-name?

- Do not use a plural name for a leaf-list.

### /alto/alto-server/resource/alto-endpointprop-params/prop-types

- Is there some other YANG data structure that this list
  of property types references?

- What are the allowed values for this string?
  Add a reference or description.

- Do not use a plural name for a leaf-list.


              leaf-list prop-types {
                type string;
                min-elements 1;
                description
                  "Supported endpoint properties.";
              }

## module ietf-alto-stats

###  container for statistics

- Suggest using a container (e.g., 'statistics') instead  of
  adding this many counter leafs directly to a list entry.
  This makes retrieval of all counters easier.

  - augment "/alto:alto/alto:alto-server"
  - augment "/alto:alto/alto:alto-server/alto:resource"

### 5 minute counters

- Should be type gauge64, not counter64 because the value can go down.

  - num-total-last-req
  - num-total-last-succ
  - num-total-last-fail

### size counters

- Should be type uint64, not counter64 because the value is a size.

  - res-mem-size
  - res-enc-size

### update event counters

- It is not clear what the correct data type should be. Not counter64.

  - num-event-max
  - num-event-min

- Are these leafs maintained over a 5 minute interval perhaps?
  Then they should be gauge64.

- The procedure to determine min and max should be specified or referenced.


## Example modules

### Leafref Typedefs

- There should be typedefs defined in ietf-alto to simplify
  usage in an extension module.

  - source-datastore
  - top-name

  - Example: source-datastore

          leaf source-datastore {
            type leafref {
              path '/alto:alto/alto:alto-server/alto:data-source'
                 + '/alto:source-id';
            }

  - Add a typedef to ietf-alto.yang

          typedef data-source-ref {
            type leafref {
              path '/alto:alto/alto:alto-server/alto:data-source'
                 + '/alto:source-id';
            }
          }

  - Change the leaf to use the typedef

          leaf source-datastore {
            type alto:data-source-ref;
          }

- The topo-name leafref definition should be a typedef.
  It is not clear which module should define the typedef.

          leaf topo-name {
            type leafref {
              path '/alto:alto/alto:alto-server/alto:data-source'
                 + '[alto:source-id = current()/../source-datastore]'
                 + '/alto-ds:yang-datastore-source-params'
                 + '/alto-ds:target-paths/alto-ds:name';
            }
            description
              "The name of the IETF layer 3 unicast topology.";
          }