Re: Yangdoctors early review of draft-ietf-teas-yang-te-types-01

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jan,

 

Thanks much for the thorough review and comments. Please see inline for responses and intended closure. Let us know if you have further comments/concerns.

 

-----Original Message-----

From: Jan Lindblad <janl@xxxxxxxxxx>

Date: Tuesday, October 30, 2018 at 8:56 PM

To: "yang-doctors@xxxxxxxx" <yang-doctors@xxxxxxxx>

Cc: "draft-ietf-teas-yang-te-types.all@xxxxxxxx" <draft-ietf-teas-yang-te-types.all@xxxxxxxx>, "ietf@xxxxxxxx" <ietf@xxxxxxxx>, "teas@xxxxxxxx" <teas@xxxxxxxx>

Subject: Yangdoctors early review of draft-ietf-teas-yang-te-types-01

Resent-From: <alias-bounces@xxxxxxxx>

Resent-To: Tarek Saad <tsaad@xxxxxxxxx>, <rgandhi@xxxxxxxxx>, <xufeng.liu.ietf@xxxxxxxxx>, <vbeeram@xxxxxxxxxxx>, <igor.bryskin@xxxxxxxxxx>, <lberger@xxxxxxxx>, <mhartley.ietf@xxxxxxxxx>, <martin.vigoureux@xxxxxxxxx>, <db3546@xxxxxxx>, <aretana.ietf@xxxxxxxxx>, Lou Berger <lberger@xxxxxxxx>

Resent-Date: Tuesday, October 30, 2018 at 8:56 PM

 

    Reviewer: Jan Lindblad

    Review result: Ready with Issues

    

    This is my YANG Doctor early review of draft-ietf-teas-yang-te-types, or more

    specifically ietf-te-types.yang . I find the module ready with a couple of

    issues. I have also noted a few nits. Generally speaking, I'm not sure if

    reviewing a -types module with plenty of groupings on its own is the best way

    to go about it. The groupings defined here may be used in good or not so good

    ways later.

    

    General questions:

    

    #1: There are many locations in the YANG talking about an "ERO subobject index"

    (and once RRO index, record route subobject). What is this, and how is it

    supposed to be used? The document is silent on this matter, and I have seen

    modules with problems around numeric index leafs much like this earlier. Are

    these numbers stable, i.e. remains the same forever?

 

[TS]: The list of explicit route objects defines a TE path (e.g. hops), where the index is used as a key to identify a specific entry in the list. A lower index implies the TE path traverses this entry earlier. We will clarify the description and remove mention of “subobject” in the next update to the document.

 

    #2: There are few leafs (5) with default values given, and none with mandatory.

    Probably needs to increase before we get to last call.

[TS]: In general, the team tried to avoid setting defaults unless it is strictly dictated by another RFC/standard. The team will review again to see if any was missed and will take action.

    

    #3: There are several choices in the module that are meant to be augmented with

    additional cases. In many instances, this is explicitly spelled out, very good.

    If this is meant to happen in all choices, it would be nice to point this out

    in every instance. Also, if there are any specific assumptions or

    considerations to keep in mind when augmenting in a new technology, please note

    that in the description as well.

[TS]: yes, we will update as necessary.

 

    

    Issues and nits:

    

    #4: Unclear data type

    419:

      typedef admin-group {

        type binary {

          length 4;

    

    What is the format of this binary? If this is always a 4-byte binary, wouldn't

    a numeric type be more user friendly, e.g. uint32?

[TS]: the standard defines admin group as 4-octet binary (9 - Administrative group (4 octets) ), and for extended-admin-group as series of those. We are also defining a union to encompass both as admin-groups below. Do you still have concerns on this?

 

  typedef admin-groups {

    type union {

      type admin-group;

      type extended-admin-group;

    }

    description "TE administrative group derived type";

  }

    

    #5: identifier in container with optional leafs

    1496:

      grouping te-topology-identifier {

    

    The name suggests this is used as an identifier, but all the leafs are

    optional. This is not typical. They are also in a container, precluding them

    from being used as list keys. Is that as intended?

[TS]: this container is not meant to be reused for a list, rather contains ID(s) that together can be used to lookup a specific topology that the TE tunnel is using. We can clarify this in the description

 

    

    #6: Optional -id leafs again

    1700:

              leaf node-id {

              leaf link-tp-id {

    1768:

            leaf address {

    1783:

            leaf node-id {

            leaf link-tp-id {

    

    Leafs that appear to be used as identifiers are optional

[TS]: such IDs identify a specific node, link, or address in the network but in our applications we do not to use them as keys in such lists. For example list explicit-route-objects defines a separate index leaf to be used as key -- since, a path may contain the same node-id or address repeated multiple times (looping path)..  

    

    #7: binary length in bits?    

    1731:

               leaf as-number {

                type binary {

                  length 16;

    1773:

            leaf ip-flags {

              type binary {

                length 8;

    1805:

              leaf label-flags {

                type binary {

                  length 8;

    

    It appears to me the modeler might have thought the length is given in bits.

    The value of length is in bytes, however.

[TS]: good catch, thanks. We'll correct it to indicate number of octets as RFC6020 defines.

    

    #8: Must _expression_ copy paste

    1852:

        container label-end {

          must "not(../label-end/te-label/direction) or "

            + "not(te-label/direction) "

            + "or ../label-end/te-label/direction = te-label/direction" {

    

    This must _expression_ appears to have been copied from label-start. In any case,

    it always evaluates to true and has no effect.

[TS]: thanks, we can see the bug in the _expression_ as is, and this will be fixed/updated.

 

        container label-end {

          must "not(../label-start/te-label/direction) or "

            + "not(te-label/direction) "

            + "or ../label-start/te-label/direction = te-label/direction" {

 

    

    #9: Unclear bit field

    1885:

        leaf range-bitmap {

          type binary;

          description

            "When there are gaps between label-start and label-end,

             this attribute is used to specify the positions

             of the used labels.";

        }

    

    Need more information on how to interpret this leaf. Which bits map to what,

    and what does the bit field values 0 and 1 indicate?

[TS]: ]: Each bit-position in the bitmap will map to an offset from the label-start. For example, if label-start=16000 and bitmap=0x11, then labels={16000, 16004} are relevant. We will clarify this in the next update.

    

    #10: Canonical representation

    67:

      typedef te-bandwidth {

    

    The type is based on a string with a pattern allowing hex characters and an

    upper or lowercase P. Since the pattern allows multiple representations of the

    same underlaying value (0x1p10 presumably means the same as 0x1p0xa and

    0x1P0XA) the question comes up if there is a canonical representation of this

    value, e.g. using all lowercase and all hex, or if the string must be

    remembered exactly as given by the client. The description could answer this

    question.

[TS]: We will update the description to indicate more strict canonical form (all upper case).

    

    #11: Mix of upper and lowercase

    The module specifies many enumeration and identity values. Some are all

    lowercase. Some are all uppercase. The principle of least astonishment suggests

    to pick one and stick with it. YANG recommendations suggest to use all

    lowercase when in doubt.

    

      typedef te-link-direction {

      typedef te-label-direction {

      typedef te-hop-type {

      identity LSP_METRIC_TYPE {

      identity LSP_METRIC_RELATIVE {

      identity LSP_METRIC_ABSOLUTE {

      identity LSP_METRIC_INHERITED {

[TS]: we will update to all lower-case to align with YANG recommendations.

    

    Best Regards,

    /jan

   

Regards,

Tarek


[Index of Archives]     [IETF Annoucements]     [IETF]     [IP Storage]     [Yosemite News]     [Linux SCTP]     [Linux Newbies]     [Mhonarc]     [Fedora Users]

  Powered by Linux