Subject: Re: [yang-doctors] [EXT] Yangdoctors last call review of draft-ietf-rtgwg-qos-model-03

From: "Aseem Choudhary (asechoud)" <[email-masked]>
Date: Sun, 11 Jul 2021 08:15:18 +0000

Hello Jurgen,

Sorry for the delayed response.

Please find the comments inline with prefix [A]
We are updating the draft based on these comments.

Regards,
Aseem

From: "Aseem Choudhary (asechoud)" <[email-masked]<mailto:[email-masked]>>
Date: Sunday, May 2, 2021 at 11:08 PM
To: "[email-masked]<mailto:[email-masked]>" <[email-masked]<mailto:[email-masked]>>
Cc: "[email-masked]<mailto:[email-masked]>" <[email-masked]<mailto:[email-masked]>>, "[email-masked]<mailto:[email-masked]>" <[email-masked]<mailto:[email-masked]>>, "[email-masked]<mailto:[email-masked]>" <[email-masked]<mailto:[email-masked]>>
Subject: Re: [EXT] Yangdoctors last call review of draft-ietf-rtgwg-qos-model-03

Hello Jurgen,

Thanks for your comments. We will address these comments and update the draft.

Regards,
Aseem

From: Jürgen Schönwälder via Datatracker <[email-masked]<mailto:[email-masked]>>
Sent: Tuesday, April 13, 2021 6:27:33 AM
To: [email-masked]<mailto:[email-masked]> <[email-masked]<mailto:[email-masked]>>
Cc: [email-masked]<mailto:[email-masked]> <[email-masked]<mailto:[email-masked]>>; [email-masked]<mailto:[email-masked]> <[email-masked]<mailto:[email-masked]>>; [email-masked]<mailto:[email-masked]> <[email-masked]<mailto:[email-masked]>>
Subject: [EXT] Yangdoctors last call review of draft-ietf-rtgwg-qos-model-03

Reviewer: Jürgen Schönwälder
Review result: Not Ready

- You may want to align the document title with common popular titles,
  see https://en.wikipedia.org/wiki/YANG#Standards-track_data_models,
  e.g.:

  A YANG Data Model for Quality of Service (QoS)

[A] accept.

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

[A] I will update with current scope.

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

[A] fixed it.

- 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
  something.

[A] We have created framework and way to extend it.  The Policy, classifier, action and target modules can be used for any QoS extension, e.g. for L2, MPLS etc. It also can be used for different ways QoS is implemented by various vendors in different market segments.

- 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.

[A] Adding terminology section and updating there.

- "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?

[A] It meant “ietf-qos-action” module. I will fix the wording here.

  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.
[A] ok,  sure for the diffserv module.

- 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-
[A] QoS is framework, Diffserv is using QoS framework. Similarly, it can be extended for L2 and MPLS.

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

  <classifiers>
    <classifier-entry>
      <classifier-entry-name>foo</classifier-entry-name>
      <classifier-entry-descr>some foo</classifier-entry-descr>
      ...
    <classifier-entry>
  <classifiers>

  vs

  <classifiers>
    <classifier>
      <name>foo</name>
      <description>some foo</description>
      ...
    <classifier>
  <classifiers>

[A] This is improved.

- 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
  config?
[A] Right,  this is not required. I have fixed it.
- 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.
[A] Every classification in Policy has some associated actions.

- 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
  classifiers??
[A] For uniformity, we can rename it as classifier-template.
- 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

[A] “policy-type” -> “type” and “policy-name” -> “name” will be fixed. Since it can be any qos policy type, “qos” will be better fit instead of “diffserv”.

  (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.
[A] This is correct, names could be same across types.

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

[A] AQM is very implementation specific and difficult to generalize. Queueing and scheduling are well defined and accordingly I will fix this statement.

- 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?
[A] It is done for uniformity since most of the list contains more than one leaf. Some can be converted to leaf-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.

[A] correct, prefix should be just fine.

- I suggest to not UPPERCASE the module names in section titles.
[A] Sure, I can do it.

- Copyright says 2019 - time to move to 2021...
[A] indeed 😊
- 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.
[A] I tend to agree, I will try to fix it.

- 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-operation
  +- filter-match-all
  +- filter-match-any

  Finding good names is hard but matters a lot.
[A] yes, this seems better.

  I am lost on the match-any-filter-type-support, why is
  filter-match-any a feature but filter-match-all not?
[A] This is because, typically all vendors support “match-all” but some also support “match -any”

- 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.
[A] Sure, need to improve.

- 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?

[A] so it will be like this for the whole rule with “match-all”:  “(source-ipv4 1.1/16) && (not dscp 4-40)”. This rule will match on source ipv4 1.1/16 and (dscp 0-3 OR dscp 41-63).
Similarly, the whole rule with “match-any”:  “(source-ipv4 1.1/16) || (not dscp 4-40)”. This rule will match on source ipv4 1.1/16 OR (dscp 0-3 OR dscp 41-63).

- 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
  classifier??
[A] This is mainly because inline classifiers are used in policy only and applicable if “classifier-inline-entry” flag is set.

- 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.
[A] This is because list filter-entry is defined where named classifier grouping is used.

- 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...).
[A] I agree.
- 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.
[A] Ok.

- "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.
[A] The reason was for vendor extensibility.  Some vendors use meter templates to define packet coloring without referring it in policy. In the strict sense of the base model, it can be same feature.

- 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
  combinations.
[A] Some of the advantages are lost in a single baseline. Like above, an inline meter vs meter template, there are benefits of each. Some vendors have started supporting multiple ways to reap benefits of both. Hence, it make sense to define these as features where some vendors have already supported, some may plan to support. The validation can be done in the backend without defining features if that is the norm.

- 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??
[A] “drop” was added to be used by any vendor supporting it even though not used in the model. In the true QoS sense, it can be avoided but sometimes there is specific use-case and some vendors support it.
- 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
  priority?
[A] Agree, need description improvement.
- 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
  do

  inbound-diffserv-policy
  +-- type
  +-- name

  outbound-diffserv-policy
  +-- 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

[A] it can be possibly “both”. But, it will still be a list either way.

- 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?

[A] it will be based on implementation where it could be backend validation failure in some and some vendors support forward reference.

- 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?
[A] Right, based on the type. Again, it is based on architecture. E.g. in VOQ architecture, Queues are effectively on ingress node and marking on egress while in some cases there can be marking first and then queuing.

- 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.
[A] Somehow, I don’t see TCP/UDP reference. These groupings work for any protocol and not restricted to TCP/UDP.

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

  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.
[A] Right, the wording needs correction

- 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.
[A]
- 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.
[A] We would try to be more elaborate.

- 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.
[A] Yes, need correction

- Why does this document need a normative reference to RFC 6020? Why
  is RFC 6020 referred to in a revision statement??
[A]
- I ignored the extension examples in the appendix.
[A] ok.

- 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. ;-)

[A]. There is some work in progress where oper model is being used which in turn depend on config model. Some other vendors may be using it as well.