Subject: [Teas] IETF TE Topology YANG Model Design Meeting Notes - 2016-10-12

From: Xufeng Liu <[email-masked]>
Date: Mon, 17 Oct 2016 18:41:48 +0000

Attendees:
Igor, Xufeng, Dieter, Sergio

- Continued discussion on bandwidth modeling
  > The generic type will be a string containing a list of numbers
  separated by commas, with each of these number can be non-negative
  decimal, hex integer, or hex float:

  (dec | hex | float)[*(","(dec | hex | float))]

  > For packet, a float number is used, such as 0x1p10.
  > For OTN, a list of integers is used, such as "0,2,3,1"
    odu0: 2
    odu3: 1
  > For DWDM, a list of pairs of slot number and width, such as "0, 2, 3, 3"
    Frequency slot: 0, slot width: 2
    Frequency slot: 3, slot width: 3

  > The hex number format starts with prefix 0x.

    type string {
      pattern '0[xX][0-9a-fA-F]{1,8}';
    }

  > The float number format uses ieee floating-point

    type string {
      pattern
        '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|1[01]\d|0?\d?\d)?)';

    }
    description
       "Bamdwidth in IEEE 754 floating point 32-bit binary format:
       (-1)**(S) * 2**(Exponent-127) * (1 + Fraction),
       where Exponent uses 8 bits, and Fraction uses 23 bits.
       The units are bytes per second.
       The encoding format is the external hexadecimal-significand
       character sequences specified in IEEE 754 and C99,
       restricted to be normalized, non-negative, and non-fraction:
       0x1.hhhhhhp{+}d or 0X1.HHHHHHP{+}D
       where 'h' and 'H' are hexadecimal digits, 'd' and 'D' are
       integers in the range of [0..127].
       When six hexadecimal digits are used for 'hhhhhh' or 'HHHHHH',
       the least significant digit must be an even number.
       'x' and 'X' indicate hexadecimal; 'p' and 'P' indicate power
       of two.
       Some examples are: 0x0p0, 0x1p10, and 0x1.abcde2p+20";

  > Combining the above types together, the bandwidth type used in TE
    topology model is:

    type string {
      pattern
               '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+(,(0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+))*';
    };

    if we want to restrict decimal number to 32 bit:
    type string {
      pattern
        '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|(429496729[0-6]|42949672[0-8]\d|4294967[01]\d{2}|429496[0-6]\d{3}|42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|[1-3]\d{9}|[1-9]\d{8}|[1-9]\d{7}|[1-9]\d{6}|[1-9]\d{5}|[1-9]\d{4}|[1-9]\d{3}|[1-9]\d{2}|[1-9]\d|\d)(,(0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|(429496729[0-6]|42949672[0-8]\d|4294967[01]\d{2}|429496[0-6]\d{3}|42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|[1-3]\d{9}|[1-9]\d{8}|[1-9]\d{7}|[1-9]\d{6}|[1-9]\d{5}|[1-9]\d{4}|[1-9]\d{3}|[1-9]\d{2}|[1-9]\d|\d)))*';
     };

    It was decided to use the former, simpler format.
- Information-source needs to be at link/node level. The current model
  misses node-ref in node information-source, and link-ref in link
  information-source. Here are the fixes:

augment /nw:networks/nw:network/nw:node:
   +--rw te-node-id?   te-types:te-node-id
   +--rw te!
      +--rw config
      +--ro state
      |  +--ro te-node-template*           leafref {template}?
      |  +--ro te-node-attributes
      |  +--ro information-source?         enumeration
      |  +--ro information-source-state
      |  |  +--ro credibility-preference?    uint16
+      |  |  +--ro logical-network-element?   string
+      |  |  +--ro network-instance?          string
      |  |  +--ro topology
      |  |     +--ro provider-ref?      leafref
      |  |     +--ro client-ref?        leafref
      |  |     +--ro te-topology-ref?   leafref
      |  |     +--ro network-ref?       leafref
+      |  |     +--ro node-ref?          leafref
-      |  |  +--ro routing-instance?         string
      |  +--ro information-source-entry* [information-source]
      |     +--ro information-source          te-info-source
      |     +--ro information-source-state
      |     |  +--ro credibility-preference?    uint16
      |     |  +--ro logical-network-element?   string
      |     |  +--ro network-instance?          string
      |     |  +--ro topology
      |     |     +--ro provider-ref?      leafref
      |     |     +--ro client-ref?        leafref
      |     |     +--ro te-topology-ref?   leafref
      |     |     +--ro network-ref?       leafref
+      |     |     +--ro node-ref?          leafref
-      |     |  +--ro routing-instance?         string

augment /nw:networks/nw:network/nt:link:
   +--rw te!
      +--rw config
      +--ro state
      |  +--ro information-source-state
      |  |  +--ro credibility-preference?    uint16
+      |  |  +--ro logical-network-element?   string
+      |  |  +--ro network-instance?          string
      |  |  +--ro topology
      |  |     +--ro provider-ref?      leafref
      |  |     +--ro client-ref?        leafref
      |  |     +--ro te-topology-ref?   leafref
      |  |     +--ro network-ref?       leafref
+      |  |     +--ro link-ref?          leafref
-      |  |  +--ro routing-instance?         string
      |  +--ro information-source-entry* [information-source]
      |  |  +--ro information-source                te-info-source
      |  |  +--ro information-source-state
      |  |  |  +--ro credibility-preference?    uint16
+      |  |  |  +--ro logical-network-element?   string
+      |  |  |  +--ro network-instance?          string
      |  |  |  +--ro topology
      |  |  |     +--ro provider-ref?      leafref
      |  |  |     +--ro client-ref?        leafref
      |  |  |     +--ro te-topology-ref?   leafref
      |  |  |     +--ro network-ref?       leafref
+      |  |  |     +--ro link-ref?          leafref
-      |  |  |  +--ro routing-instance?         string

- Discussed topology-id format.
  > Current topology-id is a formated string: "dt/topo1"
  > The id itself does not tell the type of topology. To make it
    easier to identify the topology type, it is suggested to have a type prefix:
    "otn:eth:dt/topo1"

- Discussed Xian's comment about the section of time-division-multiplex-capable
  > Agreed that this section is technology specific, and needs to be
    moved from this model to technology specific augmentation.

Thanks,

- Xufeng

Note: Please drop me an email if you need an invite for joining the weekly call.