Skip to main content

Last Call Review of draft-ietf-rtgwg-qos-model-03

Request Review of draft-ietf-rtgwg-qos-model
Requested revision No specific revision (document currently at 12)
Type Last Call Review
Team YANG Doctors (yangdoctors)
Deadline 2021-03-31
Requested 2021-03-15
Requested by Jeff Tantsura
Authors Aseem Choudhary , Mahesh Jethanandani , Ebben Aries , Ing-Wher (Helen) Chen
I-D last updated 2021-04-13
Completed reviews Tsvart Last Call review of -11 by Colin Perkins (diff)
Intdir Last Call review of -11 by Dr. Joseph D. Touch (diff)
Rtgdir Last Call review of -11 by Adrian Farrel (diff)
Yangdoctors Last Call review of -03 by Jürgen Schönwälder (diff)
Yangdoctors Last Call review of -06 by Jürgen Schönwälder (diff)
Dear YANG Doctors,

Hope everyone is safe and well!
As RTGWG is preparing for the WGLC for draft-ietf-rtgwg-qos-model  we'd like to ask you to review the draft.

Many thanks!
Jeff & Chris
Assignment Reviewer Jürgen Schönwälder
State Completed
Request Last Call review on draft-ietf-rtgwg-qos-model by YANG Doctors Assigned
Posted at
Reviewed revision 03 (document currently at 12)
Result Not ready
Completed 2021-04-13
- You may want to align the document title with common popular titles,

  A YANG Data Model for Quality of Service (QoS)

  Perhaps it also makes sense to expand the abstract a bit. What is
  the difference between 'configuration' and 'operational parameters'?

- What is a 'data module'? We usually have 'data models' and 'YANG

- There are language quirks (e.g. missing articles, singular/plural
  confusion) that someone should look at and fix. An example:

   [...] Differentiated
   Services (DiffServ) module is an augmentation of the base QoS model.
   Remote Procedure Calls (RPC) or notification definition is not part
   of this document.  QoS base modules define a basic building blocks to
   define a classifier, policy, action and target.

- There is always the question of how many modules does it take to do

- I find subsection 1.1 weird (I dislike one sentence (sub)sections
  from a stylistic point of view), simply move the statement into the
  section where you define terminology. Well since we are it, I am
  surprised that there is no content specific terminology defined or
  imported. I assume you want to import basic DiffServ terminology
  from somewhere, perhaps other terminology as well. You obviously
  assume that people know what a classifier etc. is.

- "A classifier consists of packets which may be grouped" What? A
  classifier consists of packets? Please import definitions instead
  of making up your own ones. RFC 2475 for example says:

   Classifier                an entity which selects packets based on
                             the content of packet headers according to
                             defined rules.

- "A meter qualifies if the traffic arrival rate is based on agreed upon
   rate and variability." What? RFC 2475:

   Meter                     a device that performs metering.

   Metering                  the process of measuring the temporal
                             properties (e.g., rate) of a traffic stream
                             selected by a classifier.  The
                             instantaneous state of this process may be
                             used to affect the operation of a marker,
                             shaper, or dropper, and/or may be used for
                             accounting and measurement purposes.

- "This module imports definitions from "Common YANG Data Types"
   [RFC6991] and "A YANG Data Model for Interface Management" [RFC8343]."

  What is "this module" referring to? There are several modules. Do we
  really need that many? Should the decision to break things in to rather
  small pieces be justified somewhere?

  In general, the statement about where definitions are imported from is
  in the modules sections, not in the terminology section.

- There are a number of MIB modules for DiffServ and it might be
  useful to explain how the YANG modules related to the MIB modules.

- The module names suggests that QoS == DiffServ, which I am not sure
  is necessarily true. Given that these modules seem to be DiffServ
  specific, it may be better to use the prefix ietf-diffserv- instead
  of ietf-qos-

- The authors should consider their naming scheme. Repeating words in
  identifiers makes instance documents verbose and hard to read:

      <classifier-entry-descr>some foo</classifier-entry-descr>


      <description>some foo</description>

- In section 5 first module, you should explain where the filter
  entries are coming from. Apparently the idea is that the filters
  are augmented in but that should be explained.

- It might be useful to explain which features are defined.

- Why do you label some rw objects as -cfg? Is not everything rw here

- Why is a classifier-action-entry-cfg associated to a classifier and
  not to a policy entry or a list of classifiers? I do not recall
  enough about DiffServ to recall the underlying model, it just feels
  a bit inflexible.

- You seem to be inconsistent with nodes for lists. In ietf-qos-classifier
  you have

      +--rw classifiers
         +--rw classifier-entry* [classifier-entry-name]

   but in ietf-qos-policy you have

            +--rw classifier-entry* [classifier-entry-name]

- Named meters are called meter templates? Named classifiers are named

- Should ietf-qos-target be renamed to ietf-interface-diffserv and
  should it not be

   augment /if:interfaces/if:interface:
      +--rw diffserv-policy* [direction type name]
         +--rw direction      identityref
         +--rw type	      identityref
         +--rw name           string

  instead of

   augment /if:interfaces/if:interface:
      +--rw qos-target-entry* [direction policy-type]
         +--rw direction      identityref
         +--rw policy-type    identityref
         +--rw policy-name    string

  (Also note that I added the policy name to the key!) Of course, if
  one would assume that names are unique across all policies, then the
  type leaf would not be needed but you seem to assume that it is a
  feature that I can have multiple policies with the same name and
  different types.

- Why is this: "Any queuing, AQM and scheduling actions are part of
  vendor specific augmentation."?

- It needs to be clear how filters combine.

- Should some of the lists that have a single leaf be turned into
  leaf-lists? Or is the reason to enable augmentation in those lists?

- Calling a leaf -addr but using inet:ipvX-prefix is inconsistent. I
  think you want to use inet:ipvX-prefix and hence you should adapt
  the names to source-ipv4-prefix etc.

- I suggest to not UPPERCASE the module names in section titles.

- Copyright says 2019 - time to move to 2021...

- I am not sure I understand feature classifier-template-feature from
  the description of it. I am actually lost on the possible
  combinations of policy-inline-classifier-config,
  classifier-template-feature, match-any-filter-type-support, perhaps
  because the descriptions are messed up.

- Please try to pick good names. I find
  'classifier-entry-filter-operation-type' overly complicated. Perhaps
  'match-filter-operation' is better matching the derived identities...
  I guess I would even go for

  +- filter-match-all
  +- filter-match-any

  Finding good names is hard but matters a lot.

  I am lost on the match-any-filter-type-support, why is
  filter-match-any a feature but filter-match-all not?

- Descriptions need to improve. Some have language issues, others are
  simply too short and not very descriptive. I think we like to have
  full descriptive sentences in standard YANG modules.

- I do not understand filter-logical-not. This seems to negate
  filter-match-all and filter-match-any. But what do the combinations
  really mean? I assume 'not any' means none, I am not sure what 'not
  all' means, perhaps 'any or none'? Why not simply add another
  filter-match-operation, e.g., filter-match-none?

- Why do we need two groupings for named and inline classifiers? If we
  need two groupings and they are only used once, why are they defined
  as groupings? Why do I need this classifier-entry-inline boolean?
  What does it mean to have this boolean set to false in an inline

- Why once classifier-entry-filter-operation and then
  classifier-entry-filter-oper? Why is the inline classifier defining
  the list filter-entry but the named classifier is not? Perhaps there
  are reasons but then they should be documented.

- I am not sure about the choice of prefixes, but there is perhaps no
  consensus on how to choose prefixes. That said, prefixes like
  "target" seem rather generic (but as long as others do not pick such
  generic prefixes...).

- Do not write "Latest revision for qos actions" if it is the initial
  revision. Ideally, revision statements do not need to change when a
  new revision is created. If you write 'latest revision', well, you
  have to go and make changes.

- "This feature allows support of meter-template." OK, but what is a
  meter template?? How do the features meter-template-support,
  meter-inline-feature, meter-reference-feature interact? Can I
  implement meter-reference-feature without meter-template-support?
  Does it make sense to implement meter-template-support without
  meter-reference-feature? The descriptions do not really help in
  describing things.

- Is there a way to reduce the number of features? Is it possible to
  define a baseline that everybody commits to implement? Client
  complexity grows quickly with the number of possible feature

- For some of the groupings, it is not clear why they exist. Where is
  the grouping drop used? Oh, you refer to it using action:drop in
  the appendix, i.e., its only there for extensions??

- I am not an expert qualified to check whether the various
  meter-action-params make sense. This should be verified by people in
  the WG.

- What does priority level 7 compare to 8? What is higher and what is lower

- Putting the description statements at the end of nested
  container/choice/ case definitions looks pretty weird since you get
  a sequence of closing curly braces with descriptions.

- You seem to support an inbound policy and an outbound policy. Can
  there be more? I am asking since you use a construction with an
  identity. If its only inbound or outbound, you could instead simply

  +-- type
  +-- name

  +-- type
  +-- name

  and if the names would be unique this would further reduce to

  augment /if:interfaces/if:interface:
     +-- inbound-diffserv-policy   string
     +-- outbound-diffserv-policy  string

- You probably want to look at all places where you have name
  references and detail what happens if the names do not resolve to
  something. Do you require referential integrity or will policies not
  be applied or applied in a different manner if referential integrity
  is not given?

- I just now realize that qos-target-entry is a list. So I can apply
  multiple inbound and multiple outbound policies. What is the result
  of this?

- The source and destination port groupings have a reference to UDP
  and TCP. Does this imply that these groupings do not work for DCCP
  or SCTP or any other future transport protocol using port numbers?
  Perhaps simply drop the reference and rely on the type definition.

- I wonder to what extend protocol number ranges practically make
  sense, but perhaps it is OK to keep the ranges for consistency.

  It is unfortunate that we do not have an inet:protocol type defined
  in the ietf-inet-types module... Your definition talks about the
  'upper-layer' header but I think there is no such thing. I
  understand what you mean (ignore all extension headers) but the text
  seems to be referring to something that does not really exist.

- Is it possible to reduce the duplication of the filter cases for
  named classifiers and inline classifiers? The constraints on both
  also seem to differ.

- It seems some of the complexity of the model comes from the attempt
  to be extendible and in particular to support vendor extensions. I
  guess it would have helped me a lot if the introduction would have
  spelled out what the objectives of the data model are. There is a
  lot of reverse engineering going on in my head and this is painful.
  It would be much simpler if the document would have stated the
  objectives of the model.

- I did not run any compilers etc. but I think this is fine since the
  modules are not ready anyway.

- IANA considerations missing.

- Security considerations missing.

- The MITRE approval is funny given the IETF process and the note
  wells around in every corner.

- The text refers to [RFC3289] for the diffserv architecture but given
  that [RFC3289] defines the MIB module, this seems somewhat surprising.

- Why does this document need a normative reference to RFC 6020? Why
  is RFC 6020 referred to in a revision statement??

- I ignored the extension examples in the appendix.

- I wonder, has someone tried to implement this? Or is every vendors
  doing his own thing anyway and this is more of a standardization
  exercise? How does all of this relate to say the open config model?
  OK, ignore the last question. ;-)