
From nobody Tue Jun  2 13:38:42 2020
Return-Path: <noreply@ietf.org>
X-Original-To: rift@ietf.org
Delivered-To: rift@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 464C23A0FD5; Tue,  2 Jun 2020 13:38:40 -0700 (PDT)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Jeff Tantsura via Datatracker <noreply@ietf.org>
To: <aretana.ietf@gmail.com>
X-Test-IDTracker: no
X-IETF-IDTracker: 7.1.0
Auto-Submitted: auto-generated
Precedence: bulk
Cc: Zheng Zhang <zhang.zheng@zte.com.cn>, zhang.zheng@zte.com.cn, rift@ietf.org, iesg-secretary@ietf.org, rift-chairs@ietf.org
Message-ID: <159113032026.19214.1051815790005951364@ietfa.amsl.com>
Date: Tue, 02 Jun 2020 13:38:40 -0700
Archived-At: <https://mailarchive.ietf.org/arch/msg/rift/32aZzOibUY2tu6SJZWs80J1nMFA>
Subject: [Rift] Publication has been requested for draft-ietf-rift-rift-12
X-BeenThere: rift@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Discussion of Routing in Fat Trees <rift.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rift>, <mailto:rift-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rift/>
List-Post: <mailto:rift@ietf.org>
List-Help: <mailto:rift-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rift>, <mailto:rift-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 02 Jun 2020 20:38:40 -0000

Jeff Tantsura has requested publication of draft-ietf-rift-rift-12 as None on behalf of the RIFT working group.

Please verify the document's state at https://datatracker.ietf.org/doc/draft-ietf-rift-rift/



From nobody Sat Jun  6 14:51:38 2020
Return-Path: <lalberro@fing.edu.uy>
X-Original-To: rift@ietfa.amsl.com
Delivered-To: rift@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 364CF3A0DBE for <rift@ietfa.amsl.com>; Sat,  6 Jun 2020 14:51:37 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.099
X-Spam-Level: 
X-Spam-Status: No, score=-2.099 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=fing.edu.uy
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 65TpPkOIYUZs for <rift@ietfa.amsl.com>; Sat,  6 Jun 2020 14:51:33 -0700 (PDT)
Received: from smtp.fing.edu.uy (smtp.fing.edu.uy [164.73.32.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 2D6773A0DBC for <rift@ietf.org>; Sat,  6 Jun 2020 14:51:32 -0700 (PDT)
Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.fing.edu.uy (Postfix) with ESMTP id E0F80E0E1F; Sat,  6 Jun 2020 18:51:27 -0300 (-03)
X-Virus-Scanned: amavisd-new at fing.edu.uy
Authentication-Results: smtp.fing.edu.uy (amavisd-new); dkim=pass (1024-bit key) header.d=fing.edu.uy
Received: from smtp.fing.edu.uy ([127.0.0.1]) by localhost (smtp.fing.edu.uy [127.0.0.1]) (amavisd-new, port 10024) with LMTP id li2kDfUDiSHy; Sat,  6 Jun 2020 18:51:24 -0300 (-03)
Received: from [192.168.1.3] (r186-50-88-106.dialup.adsl.anteldata.net.uy [186.50.88.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: lalberro) by smtp.fing.edu.uy (Postfix) with ESMTPSA id 9C221E0A7E; Sat,  6 Jun 2020 18:51:23 -0300 (-03)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fing.edu.uy; s=default; t=1591480284; bh=jDjIYx4/72b2pu/1TGYuvZa4wQF47cq0ZNCsPL7kDrI=; h=Subject:From:To:Cc:References:Date:In-Reply-To; b=HuyJzQKz2a5ejQTDy+Woqj8AHXkKa9CpOnaV6w0I/1gsaJN41HC2BQ3zLYoRUt45H wRaFVRSXyg3caGqZDY0UH0EQrO02mjxmm5OoCn2okSdaBWP/k7IJ/YY9Gn98xv0cFS yc8XQuFTs4+H8w59iqecxaQjF7nInp+H+YwrnqEA=
From: Leonardo Alberro Zimmermann <lalberro@fing.edu.uy>
To: rift@ietf.org
Cc: Tony Przygienda <tonysietf@gmail.com>, Bruno Rijsman <brunorijsman@gmail.com>, Maximiliano Lucero <mlucero@fing.edu.uy>, Agustina Parnizari <agustina.parnizari@fing.edu.uy>, Eduardo Grampin <grampin@fing.edu.uy>, Alberto Castro <acastro@fing.edu.uy>
References: <AM6PR04MB432519F740317CFE30ED33C8C1420@AM6PR04MB4325.eurprd04.prod.outlook.com> <b642570c-caed-9de4-4a5e-dcd4943c3f0e@fing.edu.uy> <16a8f23f-db46-ebe0-4503-1cbeee076ffb@os.uniroma3.it> <CAObb+j7j8MQRzax3UDyN4KWNC6sB0jfOSop+Vf2YxZ+EjcVjtw@mail.gmail.com> <8a55226e-d428-f195-cfb5-c427229eb081@os.uniroma3.it> <87FBCCFA-A2E9-41EA-9C8F-BC87AAF1A9CF@gmail.com> <5b48347b-4156-bc4e-dcb2-14ec70159ee6@os.uniroma3.it> <E824E104-63BF-415E-BBBB-8A6EF7FAE332@gmail.com> <2528b464-c368-6e31-54c7-6ff200b6dafb@os.uniroma3.it> <A24BFF42-9AAE-4837-85EA-ACD55BDCEF41@gmail.com> <8977A74B-B0AE-430D-9817-2608952DDCF7@juniper.net> <CA+wi2hN2LziBFx68VEk5HLEVv3Jwj+0uWiZdf=QzJKfaXY1CTw@mail.gmail.com> <fe29024c-7170-97f5-fe3c-d381ef1d62d2@os.uniroma3.it> <C8542AB2-9C17-42FF-8DD8-1AB3C8C65159@juniper.net> <b82cfbc9-6531-cb3a-a7b2-01ed723f37b4@fing.edu.uy> <CA+wi2hOYT-xzh89=SkGexbqV_ZuEqnUD7nSc35veTR=Q+=KEnA@mail.gmail.com> <9b6c08ec-dbb1-234e-5b10-d16426923394@fing.edu.uy>
Message-ID: <a4122495-da9b-2f15-a2b9-3f478a9e2e62@fing.edu.uy>
Date: Sat, 6 Jun 2020 18:51:23 -0300
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.8.1
MIME-Version: 1.0
In-Reply-To: <9b6c08ec-dbb1-234e-5b10-d16426923394@fing.edu.uy>
Content-Type: multipart/alternative; boundary="------------B569A03225F9046ACCE575E1"
Content-Language: es-ES
Archived-At: <https://mailarchive.ietf.org/arch/msg/rift/dImjpmXr5RrMMwB8DyvZB8JbmLA>
Subject: Re: [Rift] RIFT protocol implementation
X-BeenThere: rift@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Discussion of Routing in Fat Trees <rift.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rift>, <mailto:rift-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rift/>
List-Post: <mailto:rift@ietf.org>
List-Help: <mailto:rift-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rift>, <mailto:rift-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 06 Jun 2020 21:51:37 -0000

This is a multi-part message in MIME format.
--------------B569A03225F9046ACCE575E1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

Hello all,

We added a full decoding for the TIRE/TIDE and LIE messages. Thus, the 
RIFT C dissector supports full decode of all the RIFT packets.

Regards,
Leonardo

El 12/5/20 a las 19:46, Leonardo Alberro Zimmermann escribió:
>
> Hello all,
>
> regarding the development of a wireshark dissector for RIFT, we are 
> happy to introduce you our work. It is available at 
> https://gitlab.com/fing-mina/datacenters/rift-dissector
>
> RIFT C dissector is a complete Wireshark dissector for decoding RIFT 
> protocol. The code identifies all the RIFT packets and builds a 
> complete dissection for the TIE ones. This dissector has been tested 
> with the current implementations of RIFT.
>
> Regards,
> Leonardo
>
> El 26/3/20 a las 13:23, Tony Przygienda escribió:
>> Leonardo, that is a great project. Observe that depending on language 
>> backend/thrift compiler different streams may represent the same 
>> encoding so it's good to test it against more than one 
>> implementation. We should get streams that has all possible LIEs and 
>> TIEs in it.
>>
>> If you run juniper standalone public package 
>> https://www.juniper.net/us/en/dm/free-rift-trial/ you can easily 
>> build a 2x2 yaml topology and just snoop on a UDP port. I suggest 
>> snooping a v6/v4 links from a spine to a leaf. that will give you all 
>> the LIEs and node TIEs and default prefixes. If you break a link via 
>> CLI you will get disaggregation as well. If you struggle with that, 
>> ping me ...
>>
>> Having said that you can do all that with open source as well (but 
>> observe we didn't pull open source to -11 draft yet which had some 
>> schema changes albeit minor). you can pull the schema yourself with 
>> Bruno's help or I'll get to it one of these days ;-) ...
>>
>> Architecturally, since RIFT will evolve and possibly move to newer 
>> major schemas, I would suggest you provision for the possibility to 
>> put into wireshark multiple schema files, basically you'd need to 
>> compile multiple directories in differnt namespaces and use the 
>> correct one depending on the major you found on packet envelope (you 
>> can always use the newest minor you support on the major, they are 
>> always compatible).
>>
>> --- tony
>>
>>
>>
>> On Thu, Mar 26, 2020 at 7:17 AM Leonardo Alberro Zimmermann 
>> <lalberro@fing.edu.uy <mailto:lalberro@fing.edu.uy>> wrote:
>>
>>     Hi everyone,
>>
>>     as a part of this project we are developing a wireshark dissector
>>     for RIFT. The dissection for the security envelope is ready and
>>     tested. Now we are working on the Serialized RIFT Model Object
>>     dissection and for preparing the testing we are looking for a
>>     "known" trace, i.e we need a few packets and the exact values of
>>     these fields in the Thrift model. So if anyone can help us we'll
>>     be grateful.
>>
>>     Regards,
>>     Leonardo.
>>
>>     El 18/3/20 a las 13:34, Antoni Przygienda escribió:
>>>
>>>     Forwarding the discussion to the rift ietf list for further
>>>     exposure & since I generally think it will be possibly more
>>>     productive in a wider forum. Roma Tre University is working on
>>>     Bruno’s open source and there’s a bunch of interesting tools
>>>     they’re developing as well as you can read below.
>>>
>>>     --- tony
>>>
>>>     *From: *Mariano Scazzariello <mscazzariello@os.uniroma3.it>
>>>     <mailto:mscazzariello@os.uniroma3.it>
>>>     *Date: *Wednesday, March 18, 2020 at 9:10 AM
>>>     *To: *Bruno Rijsman <brunorijsman@gmail.com>
>>>     <mailto:brunorijsman@gmail..com>
>>>     *Cc: *Antoni Przygienda <prz@juniper.net>
>>>     <mailto:prz@juniper.net>, Leonardo Alberro Zimmermann
>>>     <lalberro@fing.edu.uy> <mailto:lalberro@fing.edu.uy>,
>>>     "tommasocaiazzi@gmail.com" <mailto:tommasocaiazzi@gmail.com>
>>>     <tommasocaiazzi@gmail.com> <mailto:tommasocaiazzi@gmail.com>,
>>>     "lorenzoariemma@gmail.com" <mailto:lorenzoariemma@gmail.com>
>>>     <lorenzoariemma@gmail.com> <mailto:lorenzoariemma@gmail.com>,
>>>     Giuseppe Di Battista <giuseppe.dibattista@uniroma3.it>
>>>     <mailto:giuseppe.dibattista@uniroma3.it>
>>>     *Subject: *Re: RIFT protocol implementation
>>>
>>>     Hi everyone,
>>>     thanks for the extremely detailed suggestions! I have a lot of
>>>     stuff which I can use to work on the implementation. Also thanks
>>>     Tony for giving me further useful tips.
>>>
>>>     Also, I'm happy that we agree on almost every implementation
>>>     detail and I agree with your suggested variations (like the flag
>>>     for the spf_run_direction method).
>>>
>>>     About point C, I did not write anything since it seems quite
>>>     easy to extend the Thrift model. If I have any issues, I'll
>>>     surely ask you for some help. I also wrote a point D (which is
>>>     how to handle the negative disaggregation in the RIB/FIB when
>>>     received), but I read the Pascal slides (I add the link
>>>     <https://urldefense.com/v3/__https:/bitbucket.org/riftrfc/rift_draft/src/master/negative*20disaggregation.pptx__;JQ!!NEt6yMaO-gk!QBFQP3Ec6u0elEKgEFaAEndcjyQntJXvMg0h2TfAH6kn4JLUaMb3FOYpDQOltw$>
>>>     here, so everyone can access them easily) and the steps used in
>>>     that presentation are the same that I thought.
>>>
>>>     I still have some doubts about the special SPF run:
>>>     *2) We will also need a new member field
>>>     orig_neg_disagg_prefixes (once again of type set, I think) that
>>>     contains the negatively disaggregated prefixes that are
>>>     autonomously being originated based on the detection of fallen
>>>     leafs based on the difference between the normal and special SPF
>>>     run.*
>>>     You are proposing to postpone the RIB/FIB update after the
>>>     special SPF run (which can detect additional fallen leaf nodes).
>>>     This is right,  but should this only occur on ToF nodes? If we
>>>     consider a node X, which is not a ToF, that receives a negative
>>>     disaggregation TIE, it should only add the prefix in the
>>>     /prop_neg_disagg_prefixes /set and check if it received this
>>>     prefix from all its parent nodes and propagate it if required.
>>>     Then it should proceed to update its RIB/FIB, without running
>>>     the special SPF. Am I right?
>>>
>>>     About the flooding oscillations, Tony writes "Your best
>>>     protection is scaled, randomized tests". Here at Roma Tre
>>>     University we developed a tool called Kathará
>>>     <https://urldefense.com/v3/__https:/www.kathara.org/__;!!NEt6yMaO-gk!QBFQP3Ec6u0elEKgEFaAEndcjyQntJXvMg0h2TfAH6kn4JLUaMb3FOZujrrECA$>
>>>     which is able to emulate network scenarios using Docker
>>>     containers. Recently, we also developed a Fat Tree Generator,
>>>     that automatically generates a fat tree topology starting from
>>>     the fundamental parameters of a Fat Tree (K_LEAF, K_TOP and R)
>>>     that can be run in Kathará. It also auto-configures the routing
>>>     protocol on each node (of course, we also included the
>>>     RIFT-Python implementation). So we can generate Fat Tree
>>>     topologies of any size and run tests on it to verify functional
>>>     and behavioral aspects (and also gather routing information such
>>>     as PDU size and count). We are also developing a Fat Tree Test
>>>     Framework (in collaboration with Leonardo and the team at UY
>>>     university) which implements typical data center network
>>>     scenarios (such as link failure, node failure, fallen leaf,
>>>     partitioned fabric and so on) to run integration tests on it.
>>>     For example, we can check if the routing table of a node is
>>>     equal to the expected one after a failure (e.g. loss of a
>>>     multipath or a prefix). With this tool we can surely run
>>>     randomized tests (at any scale, since Kathará supports
>>>     Kubernetes) to ensure that no flooding oscillations occur.
>>>
>>>     I agree to move the discussion on the RIFT WG mailing list.
>>>     Maybe someone of you should introduce us and explain what we're
>>>     doing.
>>>
>>>     Thanks everyone for your time,
>>>     Mariano.
>>>
>>>
>>>     _______________________________________________
>>>     RIFT mailing list
>>>     RIFT@ietf.org  <mailto:RIFT@ietf.org>
>>>     https://www.ietf.org/mailman/listinfo/rift
>>
>>
>> _______________________________________________
>> RIFT mailing list
>> RIFT@ietf.org
>> https://www.ietf.org/mailman/listinfo/rift

--------------B569A03225F9046ACCE575E1
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hello all,</p>
    <p>We added a full decoding for the TIRE/TIDE and LIE messages.
      Thus, the RIFT C dissector supports full decode of all the RIFT
      packets.</p>
    <p>Regards,<br>
      Leonardo</p>
    <div class="moz-cite-prefix">El 12/5/20 a las 19:46, Leonardo
      Alberro Zimmermann escribió:<br>
    </div>
    <blockquote type="cite"
      cite="mid:9b6c08ec-dbb1-234e-5b10-d16426923394@fing.edu.uy">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p>Hello all,</p>
      <p>regarding the development of a wireshark dissector for RIFT, we
        are happy to introduce you our work. It is available at <a
          href="https://gitlab.com/fing-mina/datacenters/rift-dissector"
          moz-do-not-send="true">https://gitlab.com/fing-mina/datacenters/rift-dissector</a></p>
      <p data-sourcepos="6:1-6:79" dir="auto">RIFT C dissector is a
        complete Wireshark dissector for decoding RIFT protocol. The
        code identifies all the RIFT packets and builds a complete
        dissection for the TIE ones. This dissector has been tested with
        the current implementations of RIFT.</p>
      <p data-sourcepos="6:1-6:79" dir="auto">Regards,<br>
        Leonardo<br>
      </p>
      <div class="moz-cite-prefix">El 26/3/20 a las 13:23, Tony
        Przygienda escribió:<br>
      </div>
      <blockquote type="cite"
cite="mid:CA+wi2hOYT-xzh89=SkGexbqV_ZuEqnUD7nSc35veTR=Q+=KEnA@mail.gmail.com">
        <meta http-equiv="content-type" content="text/html;
          charset=UTF-8">
        <div dir="ltr">
          <div>Leonardo, that is a great project. Observe that depending
            on language backend/thrift compiler different streams may
            represent the same encoding so it's good to test it against
            more than one implementation. We should get streams that has
            all possible LIEs and TIEs in it. <br>
          </div>
          <div><br>
          </div>
          <div>If you run juniper standalone public package <a
              href="https://www.juniper.net/us/en/dm/free-rift-trial/"
              moz-do-not-send="true">https://www.juniper.net/us/en/dm/free-rift-trial/</a>
            you can easily build a 2x2 yaml topology and just snoop on a
            UDP port. I suggest snooping a v6/v4 links from a spine to a
            leaf. that will give you all the LIEs and node TIEs and
            default prefixes. If you break a link via CLI you will get
            disaggregation as well. If you struggle with that, ping me
            ... <br>
          </div>
          <div><br>
          </div>
          <div>Having said that you can do all that with open source as
            well (but observe we didn't pull open source to -11 draft
            yet which had some schema changes albeit minor). you can
            pull the schema yourself with Bruno's help or I'll get to it
            one of these days ;-) ... <br>
          </div>
          <div><br>
          </div>
          <div>Architecturally, since RIFT will evolve and possibly move
            to newer major schemas, I would suggest you provision for
            the possibility to put into wireshark multiple schema files,
            basically you'd need to compile multiple directories in
            differnt namespaces and use the correct one depending on the
            major you found on packet envelope (you can always use the
            newest minor you support on the major, they are always
            compatible). <br>
          </div>
          <div><br>
          </div>
          <div>--- tony <br>
          </div>
          <div><br>
          </div>
          <div><br>
          </div>
        </div>
        <br>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Thu, Mar 26, 2020 at 7:17
            AM Leonardo Alberro Zimmermann &lt;<a
              href="mailto:lalberro@fing.edu.uy" moz-do-not-send="true">lalberro@fing.edu.uy</a>&gt;
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div>
              <p>Hi everyone,</p>
              <p>as a part of this project we are developing a wireshark
                dissector for RIFT. The dissection for the security
                envelope is ready and tested. Now we are working on the
                Serialized RIFT Model Object dissection and for
                preparing the testing we are looking for a "known"
                trace, i.e we need a few packets and the exact values of
                these fields in the Thrift model. So if anyone can help
                us we'll be grateful.</p>
              <p>Regards,<br>
                Leonardo.<br>
              </p>
              <div>El 18/3/20 a las 13:34, Antoni Przygienda escribió:<br>
              </div>
              <blockquote type="cite">
                <div>
                  <p class="MsoNormal">Forwarding the discussion to the
                    rift ietf list for further exposure &amp; since I
                    generally think it will be possibly more productive
                    in a wider forum. Roma Tre University is working on
                    Bruno’s open source and there’s a bunch of
                    interesting tools they’re developing as well as you
                    can read below. </p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">--- tony </p>
                  <p class="MsoNormal"> </p>
                  <div style="border-color:rgb(181,196,223) currentcolor
                    currentcolor;border-style:solid none
                    none;border-width:1pt medium medium;padding:3pt 0in
                    0in">
                    <p class="MsoNormal"><b><span
                          style="font-size:12pt;color:black">From: </span></b><span
                        style="font-size:12pt;color:black">Mariano
                        Scazzariello <a
                          href="mailto:mscazzariello@os.uniroma3.it"
                          target="_blank" moz-do-not-send="true">&lt;mscazzariello@os.uniroma3.it&gt;</a><br>
                        <b>Date: </b>Wednesday, March 18, 2020 at 9:10
                        AM<br>
                        <b>To: </b>Bruno Rijsman <a
                          href="mailto:brunorijsman@gmail..com"
                          target="_blank" moz-do-not-send="true">&lt;brunorijsman@gmail.com&gt;</a><br>
                        <b>Cc: </b>Antoni Przygienda <a
                          href="mailto:prz@juniper.net" target="_blank"
                          moz-do-not-send="true">&lt;prz@juniper.net&gt;</a>,
                        Leonardo Alberro Zimmermann <a
                          href="mailto:lalberro@fing.edu.uy"
                          target="_blank" moz-do-not-send="true">&lt;lalberro@fing.edu.uy&gt;</a>,
                        <a href="mailto:tommasocaiazzi@gmail.com"
                          target="_blank" moz-do-not-send="true">"tommasocaiazzi@gmail.com"</a>
                        <a href="mailto:tommasocaiazzi@gmail.com"
                          target="_blank" moz-do-not-send="true">&lt;tommasocaiazzi@gmail.com&gt;</a>,
                        <a href="mailto:lorenzoariemma@gmail.com"
                          target="_blank" moz-do-not-send="true">"lorenzoariemma@gmail.com"</a>
                        <a href="mailto:lorenzoariemma@gmail.com"
                          target="_blank" moz-do-not-send="true">&lt;lorenzoariemma@gmail.com&gt;</a>,
                        Giuseppe Di Battista <a
                          href="mailto:giuseppe.dibattista@uniroma3.it"
                          target="_blank" moz-do-not-send="true">&lt;giuseppe.dibattista@uniroma3.it&gt;</a><br>
                        <b>Subject: </b>Re: RIFT protocol
                        implementation</span></p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <p>Hi everyone,<br>
                    thanks for the extremely detailed suggestions! I
                    have a lot of stuff which I can use to work on the
                    implementation. Also thanks Tony for giving me
                    further useful tips.<br>
                    <br>
                    Also, I'm happy that we agree on almost every
                    implementation detail and I agree with your
                    suggested variations (like the flag for the <span>spf_run_direction</span>
                    method).<br>
                    <br>
                    About point C, I did not write anything since it
                    seems quite easy to extend the Thrift model. If I
                    have any issues, I'll surely ask you for some help.
                    I also wrote a point D (which is how to handle the
                    negative disaggregation in the RIB/FIB when
                    received), but I read the Pascal slides (I add the <a
href="https://urldefense.com/v3/__https:/bitbucket.org/riftrfc/rift_draft/src/master/negative*20disaggregation.pptx__;JQ!!NEt6yMaO-gk!QBFQP3Ec6u0elEKgEFaAEndcjyQntJXvMg0h2TfAH6kn4JLUaMb3FOYpDQOltw$"
                      target="_blank" moz-do-not-send="true"> link</a>
                    here, so everyone can access them easily) and the
                    steps used in that presentation are the same that I
                    thought.<br>
                    <br>
                    I still have some doubts about the special SPF run:<br>
                    <b>2) We will also need a new member field
                      orig_neg_disagg_prefixes (once again of type set,
                      I think) that contains the negatively
                      disaggregated prefixes that are autonomously being
                      originated based on the detection of fallen leafs
                      based on the difference between the normal and
                      special SPF run.</b> <br>
                    You are proposing to postpone the RIB/FIB update
                    after the special SPF run (which can detect
                    additional fallen leaf nodes). This is right,  but
                    should this only occur on ToF nodes? If we consider
                    a node X, which is not a ToF, that receives a
                    negative disaggregation TIE, it should only add the
                    prefix in the <i>prop_neg_disagg_prefixes </i>set
                    and check if it received this prefix from all its
                    parent nodes and propagate it if required. Then it
                    should proceed to update its RIB/FIB, without
                    running the special SPF. Am I right?<br>
                    <br>
                    About the flooding oscillations, Tony writes "Your
                    best protection is scaled, randomized tests". Here
                    at Roma Tre University we developed a tool called <a
href="https://urldefense.com/v3/__https:/www.kathara.org/__;!!NEt6yMaO-gk!QBFQP3Ec6u0elEKgEFaAEndcjyQntJXvMg0h2TfAH6kn4JLUaMb3FOZujrrECA$"
                      target="_blank" moz-do-not-send="true"> Kathará</a>
                    which is able to emulate network scenarios using
                    Docker containers. Recently, we also developed a Fat
                    Tree Generator, that automatically generates a fat
                    tree topology starting from the fundamental
                    parameters of a Fat Tree (K_LEAF, K_TOP and R) that
                    can be run in Kathará. It also auto-configures the
                    routing protocol on each node (of course, we also
                    included the RIFT-Python implementation). So we can
                    generate Fat Tree topologies of any size and run
                    tests on it to verify functional and behavioral
                    aspects (and also gather routing information such as
                    PDU size and count). We are also developing a Fat
                    Tree Test Framework (in collaboration with Leonardo
                    and the team at UY university) which implements
                    typical data center network scenarios (such as link
                    failure, node failure, fallen leaf, partitioned
                    fabric and so on) to run integration tests on it.
                    For example, we can check if the routing table of a
                    node is equal to the expected one after a failure
                    (e.g. loss of a multipath or a prefix). With this
                    tool we can surely run randomized tests (at any
                    scale, since Kathará supports Kubernetes) to ensure
                    that no flooding oscillations occur.<br>
                    <br>
                    I agree to move the discussion on the RIFT WG
                    mailing list. Maybe someone of you should introduce
                    us and explain what we're doing.<br>
                    <br>
                    Thanks everyone for your time,<br>
                    Mariano.</p>
                </div>
                <br>
                <fieldset></fieldset>
                <pre>_______________________________________________
RIFT mailing list
<a href="mailto:RIFT@ietf.org" target="_blank" moz-do-not-send="true">RIFT@ietf.org</a>
<a href="https://www.ietf.org/mailman/listinfo/rift" target="_blank" moz-do-not-send="true">https://www.ietf.org/mailman/listinfo/rift</a>
</pre>
              </blockquote>
            </div>
          </blockquote>
        </div>
        <br>
        <fieldset class="mimeAttachmentHeader"></fieldset>
        <pre class="moz-quote-pre" wrap="">_______________________________________________
RIFT mailing list
<a class="moz-txt-link-abbreviated" href="mailto:RIFT@ietf.org" moz-do-not-send="true">RIFT@ietf.org</a>
<a class="moz-txt-link-freetext" href="https://www.ietf.org/mailman/listinfo/rift" moz-do-not-send="true">https://www.ietf.org/mailman/listinfo/rift</a>
</pre>
      </blockquote>
    </blockquote>
  </body>
</html>

--------------B569A03225F9046ACCE575E1--


From nobody Sun Jun  7 00:18:53 2020
Return-Path: <osteudler@juniper.net>
X-Original-To: rift@ietfa.amsl.com
Delivered-To: rift@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B8A1C3A0B29 for <rift@ietfa.amsl.com>; Sun,  7 Jun 2020 00:18:51 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.999
X-Spam-Level: 
X-Spam-Status: No, score=-1.999 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=juniper.net header.b=gvzFiY7a; dkim=pass (1024-bit key) header.d=juniper.net header.b=N0VWY2S2
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4O0FFwML3OCc for <rift@ietfa.amsl.com>; Sun,  7 Jun 2020 00:18:49 -0700 (PDT)
Received: from mx0a-00273201.pphosted.com (mx0a-00273201.pphosted.com [208.84.65.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3892A3A0B28 for <rift@ietf.org>; Sun,  7 Jun 2020 00:18:48 -0700 (PDT)
Received: from pps.filterd (m0108159.ppops.net [127.0.0.1]) by mx0a-00273201.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 0577Dv4o024379; Sun, 7 Jun 2020 00:18:43 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=PPS1017; bh=YEY+2jMOwzuxfupH4pXWr+bLOf38dQA4BHcaAf6E1+k=; b=gvzFiY7au8mUC5O69lFSzTpErFt7Pmry48IhKpUAEFMjWMKGGSCWpXpYiRZJq02uI8fv qdgqVnNVwMlo8ifYsEqlhLdG+VCQlQ8rzz0n521sc8shaedDbjMx9y8VTEDE9mbJXdDH iVtUKwOrY22PZsEdQQwhsoZNyrPnyClQAipgdsmS6evUxXg4L7YlFfZu8eJEv+I4GM08 ZuLpkToLrza9XMhTVUQtFmiBTrwuAceQqoX03HEQX2Zx9+bodSMEtguW2OOdwVezf1Rd ppS+KUu6YZ3gO5Qf1JdzO6dgzL09DRmDx2sqI3yJDCxb/CFRae6EuQvZQ4m9iVFlwTD8 Pg== 
Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2101.outbound.protection.outlook.com [104.47.70.101]) by mx0a-00273201.pphosted.com with ESMTP id 31g93x8yuk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 07 Jun 2020 00:18:43 -0700
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UwQdnNnS5HantD93KoEhA7FPa22E1ltZDwq69MjOlozWFSF8Efl2jrSxX1GfKLX32PYPmWa0yMsV4krzT9YvDoX6eWD/HUCFErm9iBb9RC4UDZGbfbG3y0ZF4Z8RJMmOC15oGrIP7kyVnuIK88WwpZcK2dTfOwG1oMY2Ya+wjkvvrzkSiV3uLBETt3JBzgpTxChQn0MIs5/KESTng0j35rJVho97OsbDfXG4Np3Y+6kK+zBqhMSTjtAEr/zHlMC041Vq2zBiWyOvUsUEfsM0KNRNd5MnMU/6v47Y850grFV7KgxCF68YmewdGlzUBDCDxT8SGLjEwznd414UzQ6MaA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;  s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YEY+2jMOwzuxfupH4pXWr+bLOf38dQA4BHcaAf6E1+k=; b=VoVJIJ5ObkbOm4RwEmwT2EGIrlTitWysbnBeR1DvlhSCrWSHXvMXdFFTtZzIdQtwHqznsjncf4DGh10vTGBBCkOTQ2zp2Rrnrk3LNZu2v+jjQg9Al1VDd9B/LtLui+8fm3Nl/GbKX1KjQZ9ch4WA4BCqOPrsvUnaDoQEyBUy4sJ/kbv9DPomHbWA4v4tSIg9fHcKnRQI7GbF1Pk7DRChaq6w2BFe36bYkphp1Q36j38Lesa2wzjPZsOm4UW4sAB6Zw+NamGmRAws4pEPNcCdigrMisShdc+sXYSqmkKVrAhkdO83DVJbuhV5Y3dDWXAImS7bn7fC6KH2AqOs6N9hdA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=juniper.net; dmarc=pass action=none header.from=juniper.net; dkim=pass header.d=juniper.net; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YEY+2jMOwzuxfupH4pXWr+bLOf38dQA4BHcaAf6E1+k=; b=N0VWY2S2zB7TbmkeX7Nj9uCC3hmUIuP9uOItOiAc9xiMleOrkGGYTS3tgSmlmo1Dw1t8vtAnyI+RZRNlPG5S/IRlN3rFs1+3UVF6UYKqCy5L0Uuq8PpA89HVHvYRsw6vmMUFaVWfvdPVoC95/TYFIz0ya4knYDZAA3k0P6FepjY=
Received: from MN2PR05MB6464.namprd05.prod.outlook.com (20.178.246.202) by MN2PR05MB6463.namprd05.prod.outlook.com (20.178.245.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.13; Sun, 7 Jun 2020 07:18:37 +0000
Received: from MN2PR05MB6464.namprd05.prod.outlook.com ([fe80::f45b:c994:87df:989c]) by MN2PR05MB6464.namprd05.prod.outlook.com ([fe80::f45b:c994:87df:989c%4]) with mapi id 15.20.3088.013; Sun, 7 Jun 2020 07:18:37 +0000
From: Oliver Steudler <osteudler@juniper.net>
To: Leonardo Alberro Zimmermann <lalberro@fing.edu.uy>
CC: "rift@ietf.org" <rift@ietf.org>, Eduardo Grampin <grampin@fing.edu.uy>, Alberto Castro <acastro@fing.edu.uy>, Bruno Rijsman <brunorijsman@gmail.com>, Agustina Parnizari <agustina.parnizari@fing.edu.uy>, Maximiliano Lucero <mlucero@fing.edu.uy>, Tony Przygienda <tonysietf@gmail.com>
Thread-Topic: [Rift] RIFT protocol implementation
Thread-Index: AQHV/KjXN8nLHQyCvE6C5Xb9rbY0fahNOk6AgAB2uQCAANUqgP//kQUAgAzh6gCAACNegIBKSKoAgCc6w4CAAJ58rg==
Date: Sun, 7 Jun 2020 07:18:37 +0000
Message-ID: <B3432BD5-4AFA-4DFA-807A-E314518ACF28@juniper.net>
References: <AM6PR04MB432519F740317CFE30ED33C8C1420@AM6PR04MB4325.eurprd04.prod.outlook.com> <b642570c-caed-9de4-4a5e-dcd4943c3f0e@fing.edu.uy> <16a8f23f-db46-ebe0-4503-1cbeee076ffb@os.uniroma3.it> <CAObb+j7j8MQRzax3UDyN4KWNC6sB0jfOSop+Vf2YxZ+EjcVjtw@mail.gmail.com> <8a55226e-d428-f195-cfb5-c427229eb081@os.uniroma3.it> <87FBCCFA-A2E9-41EA-9C8F-BC87AAF1A9CF@gmail.com> <5b48347b-4156-bc4e-dcb2-14ec70159ee6@os.uniroma3.it> <E824E104-63BF-415E-BBBB-8A6EF7FAE332@gmail.com> <2528b464-c368-6e31-54c7-6ff200b6dafb@os.uniroma3.it> <A24BFF42-9AAE-4837-85EA-ACD55BDCEF41@gmail.com> <8977A74B-B0AE-430D-9817-2608952DDCF7@juniper.net> <CA+wi2hN2LziBFx68VEk5HLEVv3Jwj+0uWiZdf=QzJKfaXY1CTw@mail.gmail.com> <fe29024c-7170-97f5-fe3c-d381ef1d62d2@os.uniroma3.it> <C8542AB2-9C17-42FF-8DD8-1AB3C8C65159@juniper.net> <b82cfbc9-6531-cb3a-a7b2-01ed723f37b4@fing.edu.uy> <CA+wi2hOYT-xzh89=SkGexbqV_ZuEqnUD7nSc35veTR=Q+=KEnA@mail.gmail.com> <9b6c08ec-dbb1-234e-5b10-d16426923394@fing.edu.uy>, <a4122495-da9b-2f15-a2b9-3f478a9e2e62@fing.edu.uy>
In-Reply-To: <a4122495-da9b-2f15-a2b9-3f478a9e2e62@fing.edu.uy>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: juniper.net; dkim=none (message not signed) header.d=none;juniper.net; dmarc=none action=none header.from=juniper.net;
x-originating-ip: [178.197.229.57]
x-ms-publictraffictype: Email
x-ms-office365-filtering-ht: Tenant
x-ms-office365-filtering-correlation-id: 360638d8-8df6-4373-e76e-08d80ab2ff18
x-ms-traffictypediagnostic: MN2PR05MB6463:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <MN2PR05MB6463D38A7A12D8631B226398B3840@MN2PR05MB6463.namprd05.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:2449;
x-forefront-prvs: 04270EF89C
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: iLiFzcyCM3c78nlO3FgeqCTxFT5TLWVJgPjxxt9ChldWXLia985qAU0302t8UM/c7aYP0ZtPqmyHK8YU5k/iLaCEtaXUgSNOpBMV+RHQOjI0Kl/XFMVtQ9NfIfbbcp4jOeWSywGHhKl+2m7UJHssJv/hy/bc5g3PCghht0tVY0cV+lr6nl/Xz81EKgB78/bY4tmJ6dVs7ItUKu5Hyj4konK6+blWwfz01x97qXvl7NyCHn/VqDUtOh2ZqdD+p/tqSDzQ4cZOW7c8K76In//lFioMJLeEWzvraLp5J5Q6IvJzd3Y8II82qr8fnEAlYaan4NbRifDFjRBZIulJnaiAYS0BH9kW5pfeyjMqIklfYLegfXKjL/3thDHwlPVGrT37lbNWEyTgBufKZ7Qr9Bcfpw==
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;  IPV:NLI; SFV:NSPM; H:MN2PR05MB6464.namprd05.prod.outlook.com; PTR:; CAT:NONE;  SFTY:; SFS:(4636009)(39860400002)(376002)(346002)(366004)(136003)(396003)(8936002)(5660300002)(2906002)(186003)(26005)(36756003)(8676002)(71200400001)(316002)(54906003)(64756008)(66446008)(2616005)(66946007)(91956017)(76116006)(66556008)(66476007)(6512007)(4326008)(966005)(478600001)(6486002)(6506007)(53546011)(83380400001)(86362001)(33656002)(166002)(6916009); DIR:OUT; SFP:1102; 
x-ms-exchange-antispam-messagedata: 7ANB/EUo7WeSSrkKAEFGhm2QPo+tJpJepbdzIePuV9CCImJlEbhcjGlopIe8p2imyFrbmEezrrHyTTxbfHXIUep/LF8STxAUdBPtOuEbFv/MpFdRyNVsiCH1NE3/TNP1LrFTVRdgy9BmMbKlQUs1eoIDbOFjcKKpCBm0+1yI6NDIu1K5mklQJeyCIK2QPFKlvkkoIqazYRk77EOV0W3sWGQS+j4+NuL2No88tq6BG896wUwxGrcIBuBU4s1PuNQT/8sV2xr5h5n1ePyaggEAE/TX20wU4/RNINENaMKeHUURaT7lY8625PUhD8q6FApHt0YjhMOVdBECVPFZnUy7JpULGdvoxoHPUO/VYiZtjvhxy77Y2sYIiAdyZNlyeOFcml3tvvim0c2KM8TWidllPBV1jyb/6+8K9XCbJ54xahEpHoFwLOmIwhRSo/Imd+DJ/GT9YEmLJpFXF0MGyXzI83KW+NfYN/Gbybkfss9tlDctP84WzmNQmm/KVUYxuQtl
Content-Type: multipart/alternative; boundary="_000_B3432BD54AFA4DFA807AE314518ACF28junipernet_"
MIME-Version: 1.0
X-OriginatorOrg: juniper.net
X-MS-Exchange-CrossTenant-Network-Message-Id: 360638d8-8df6-4373-e76e-08d80ab2ff18
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jun 2020 07:18:37.1654 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: bea78b3c-4cdb-4130-854a-1d193232e5f4
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Cr3Su1KX88L5g+co8OwNF7ZihMvY8q1GAOrJKCuQKVgFGCOm3Mju+I+SdDAR79RV76B/AgSOaQUBBUc61cTJuA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR05MB6463
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216, 18.0.687 definitions=2020-06-07_02:2020-06-04, 2020-06-07 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_spam_notspam policy=outbound_spam score=0 mlxscore=0 priorityscore=1501 cotscore=-2147483648 phishscore=0 suspectscore=0 bulkscore=0 spamscore=0 adultscore=0 clxscore=1011 mlxlogscore=999 impostorscore=0 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006070057
Archived-At: <https://mailarchive.ietf.org/arch/msg/rift/J3Kl-9ykzt4t0wT8wRdcILjlIwc>
Subject: Re: [Rift] RIFT protocol implementation
X-BeenThere: rift@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Discussion of Routing in Fat Trees <rift.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rift>, <mailto:rift-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rift/>
List-Post: <mailto:rift@ietf.org>
List-Help: <mailto:rift-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rift>, <mailto:rift-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 07 Jun 2020 07:18:52 -0000

--_000_B3432BD54AFA4DFA807AE314518ACF28junipernet_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

SGkgTGVvbmFyZG8sDQoNCkF3ZXNvbWUsIHRoYW5rcyBmb3IgeW91ciBncmVhdCB3b3JrIG9uIHRo
aXMhDQoNCldpbGwgdHJ5IGl0IG91dCBBU0FQLA0KDQpSZWdhcmRzDQpPbGl2ZXINCg0KDQpPbiA2
IEp1biAyMDIwLCBhdCAyMzo1MSwgTGVvbmFyZG8gQWxiZXJybyBaaW1tZXJtYW5uIDxsYWxiZXJy
b0BmaW5nLmVkdS51eT4gd3JvdGU6DQoNCu+7vw0KDQpbRXh0ZXJuYWwgRW1haWwuIEJlIGNhdXRp
b3VzIG9mIGNvbnRlbnRdDQoNCg0KSGVsbG8gYWxsLA0KDQpXZSBhZGRlZCBhIGZ1bGwgZGVjb2Rp
bmcgZm9yIHRoZSBUSVJFL1RJREUgYW5kIExJRSBtZXNzYWdlcy4gVGh1cywgdGhlIFJJRlQgQyBk
aXNzZWN0b3Igc3VwcG9ydHMgZnVsbCBkZWNvZGUgb2YgYWxsIHRoZSBSSUZUIHBhY2tldHMuDQoN
ClJlZ2FyZHMsDQpMZW9uYXJkbw0KDQpFbCAxMi81LzIwIGEgbGFzIDE5OjQ2LCBMZW9uYXJkbyBB
bGJlcnJvIFppbW1lcm1hbm4gZXNjcmliacOzOg0KDQpIZWxsbyBhbGwsDQoNCnJlZ2FyZGluZyB0
aGUgZGV2ZWxvcG1lbnQgb2YgYSB3aXJlc2hhcmsgZGlzc2VjdG9yIGZvciBSSUZULCB3ZSBhcmUg
aGFwcHkgdG8gaW50cm9kdWNlIHlvdSBvdXIgd29yay4gSXQgaXMgYXZhaWxhYmxlIGF0IGh0dHBz
Oi8vZ2l0bGFiLmNvbS9maW5nLW1pbmEvZGF0YWNlbnRlcnMvcmlmdC1kaXNzZWN0b3I8aHR0cHM6
Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0dHBzOi8vZ2l0bGFiLmNvbS9maW5nLW1pbmEvZGF0YWNl
bnRlcnMvcmlmdC1kaXNzZWN0b3JfXzshIU5FdDZ5TWFPLWdrIVJuV2sxNWpQN2NoWng3OURCblRf
YnlxTUpPdVI2RVRnYVBWUmZscTJoVVpBQVBwVHY5c0U0MXNMM2xFMHF3dkNzZyQ+DQoNClJJRlQg
QyBkaXNzZWN0b3IgaXMgYSBjb21wbGV0ZSBXaXJlc2hhcmsgZGlzc2VjdG9yIGZvciBkZWNvZGlu
ZyBSSUZUIHByb3RvY29sLiBUaGUgY29kZSBpZGVudGlmaWVzIGFsbCB0aGUgUklGVCBwYWNrZXRz
IGFuZCBidWlsZHMgYSBjb21wbGV0ZSBkaXNzZWN0aW9uIGZvciB0aGUgVElFIG9uZXMuIFRoaXMg
ZGlzc2VjdG9yIGhhcyBiZWVuIHRlc3RlZCB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiBSSUZULg0KDQpSZWdhcmRzLA0KTGVvbmFyZG8NCg0KRWwgMjYvMy8yMCBhIGxhcyAxMzoy
MywgVG9ueSBQcnp5Z2llbmRhIGVzY3JpYmnDszoNCkxlb25hcmRvLCB0aGF0IGlzIGEgZ3JlYXQg
cHJvamVjdC4gT2JzZXJ2ZSB0aGF0IGRlcGVuZGluZyBvbiBsYW5ndWFnZSBiYWNrZW5kL3Rocmlm
dCBjb21waWxlciBkaWZmZXJlbnQgc3RyZWFtcyBtYXkgcmVwcmVzZW50IHRoZSBzYW1lIGVuY29k
aW5nIHNvIGl0J3MgZ29vZCB0byB0ZXN0IGl0IGFnYWluc3QgbW9yZSB0aGFuIG9uZSBpbXBsZW1l
bnRhdGlvbi4gV2Ugc2hvdWxkIGdldCBzdHJlYW1zIHRoYXQgaGFzIGFsbCBwb3NzaWJsZSBMSUVz
IGFuZCBUSUVzIGluIGl0Lg0KDQpJZiB5b3UgcnVuIGp1bmlwZXIgc3RhbmRhbG9uZSBwdWJsaWMg
cGFja2FnZSBodHRwczovL3d3dy5qdW5pcGVyLm5ldC91cy9lbi9kbS9mcmVlLXJpZnQtdHJpYWwv
IHlvdSBjYW4gZWFzaWx5IGJ1aWxkIGEgMngyIHlhbWwgdG9wb2xvZ3kgYW5kIGp1c3Qgc25vb3Ag
b24gYSBVRFAgcG9ydC4gSSBzdWdnZXN0IHNub29waW5nIGEgdjYvdjQgbGlua3MgZnJvbSBhIHNw
aW5lIHRvIGEgbGVhZi4gdGhhdCB3aWxsIGdpdmUgeW91IGFsbCB0aGUgTElFcyBhbmQgbm9kZSBU
SUVzIGFuZCBkZWZhdWx0IHByZWZpeGVzLiBJZiB5b3UgYnJlYWsgYSBsaW5rIHZpYSBDTEkgeW91
IHdpbGwgZ2V0IGRpc2FnZ3JlZ2F0aW9uIGFzIHdlbGwuIElmIHlvdSBzdHJ1Z2dsZSB3aXRoIHRo
YXQsIHBpbmcgbWUgLi4uDQoNCkhhdmluZyBzYWlkIHRoYXQgeW91IGNhbiBkbyBhbGwgdGhhdCB3
aXRoIG9wZW4gc291cmNlIGFzIHdlbGwgKGJ1dCBvYnNlcnZlIHdlIGRpZG4ndCBwdWxsIG9wZW4g
c291cmNlIHRvIC0xMSBkcmFmdCB5ZXQgd2hpY2ggaGFkIHNvbWUgc2NoZW1hIGNoYW5nZXMgYWxi
ZWl0IG1pbm9yKS4geW91IGNhbiBwdWxsIHRoZSBzY2hlbWEgeW91cnNlbGYgd2l0aCBCcnVubydz
IGhlbHAgb3IgSSdsbCBnZXQgdG8gaXQgb25lIG9mIHRoZXNlIGRheXMgOy0pIC4uLg0KDQpBcmNo
aXRlY3R1cmFsbHksIHNpbmNlIFJJRlQgd2lsbCBldm9sdmUgYW5kIHBvc3NpYmx5IG1vdmUgdG8g
bmV3ZXIgbWFqb3Igc2NoZW1hcywgSSB3b3VsZCBzdWdnZXN0IHlvdSBwcm92aXNpb24gZm9yIHRo
ZSBwb3NzaWJpbGl0eSB0byBwdXQgaW50byB3aXJlc2hhcmsgbXVsdGlwbGUgc2NoZW1hIGZpbGVz
LCBiYXNpY2FsbHkgeW91J2QgbmVlZCB0byBjb21waWxlIG11bHRpcGxlIGRpcmVjdG9yaWVzIGlu
IGRpZmZlcm50IG5hbWVzcGFjZXMgYW5kIHVzZSB0aGUgY29ycmVjdCBvbmUgZGVwZW5kaW5nIG9u
IHRoZSBtYWpvciB5b3UgZm91bmQgb24gcGFja2V0IGVudmVsb3BlICh5b3UgY2FuIGFsd2F5cyB1
c2UgdGhlIG5ld2VzdCBtaW5vciB5b3Ugc3VwcG9ydCBvbiB0aGUgbWFqb3IsIHRoZXkgYXJlIGFs
d2F5cyBjb21wYXRpYmxlKS4NCg0KLS0tIHRvbnkNCg0KDQoNCk9uIFRodSwgTWFyIDI2LCAyMDIw
IGF0IDc6MTcgQU0gTGVvbmFyZG8gQWxiZXJybyBaaW1tZXJtYW5uIDxsYWxiZXJyb0BmaW5nLmVk
dS51eTxtYWlsdG86bGFsYmVycm9AZmluZy5lZHUudXk+PiB3cm90ZToNCg0KSGkgZXZlcnlvbmUs
DQoNCmFzIGEgcGFydCBvZiB0aGlzIHByb2plY3Qgd2UgYXJlIGRldmVsb3BpbmcgYSB3aXJlc2hh
cmsgZGlzc2VjdG9yIGZvciBSSUZULiBUaGUgZGlzc2VjdGlvbiBmb3IgdGhlIHNlY3VyaXR5IGVu
dmVsb3BlIGlzIHJlYWR5IGFuZCB0ZXN0ZWQuIE5vdyB3ZSBhcmUgd29ya2luZyBvbiB0aGUgU2Vy
aWFsaXplZCBSSUZUIE1vZGVsIE9iamVjdCBkaXNzZWN0aW9uIGFuZCBmb3IgcHJlcGFyaW5nIHRo
ZSB0ZXN0aW5nIHdlIGFyZSBsb29raW5nIGZvciBhICJrbm93biIgdHJhY2UsIGkuZSB3ZSBuZWVk
IGEgZmV3IHBhY2tldHMgYW5kIHRoZSBleGFjdCB2YWx1ZXMgb2YgdGhlc2UgZmllbGRzIGluIHRo
ZSBUaHJpZnQgbW9kZWwuIFNvIGlmIGFueW9uZSBjYW4gaGVscCB1cyB3ZSdsbCBiZSBncmF0ZWZ1
bC4NCg0KUmVnYXJkcywNCkxlb25hcmRvLg0KDQpFbCAxOC8zLzIwIGEgbGFzIDEzOjM0LCBBbnRv
bmkgUHJ6eWdpZW5kYSBlc2NyaWJpw7M6DQpGb3J3YXJkaW5nIHRoZSBkaXNjdXNzaW9uIHRvIHRo
ZSByaWZ0IGlldGYgbGlzdCBmb3IgZnVydGhlciBleHBvc3VyZSAmIHNpbmNlIEkgZ2VuZXJhbGx5
IHRoaW5rIGl0IHdpbGwgYmUgcG9zc2libHkgbW9yZSBwcm9kdWN0aXZlIGluIGEgd2lkZXIgZm9y
dW0uIFJvbWEgVHJlIFVuaXZlcnNpdHkgaXMgd29ya2luZyBvbiBCcnVub+KAmXMgb3BlbiBzb3Vy
Y2UgYW5kIHRoZXJl4oCZcyBhIGJ1bmNoIG9mIGludGVyZXN0aW5nIHRvb2xzIHRoZXnigJlyZSBk
ZXZlbG9waW5nIGFzIHdlbGwgYXMgeW91IGNhbiByZWFkIGJlbG93Lg0KDQotLS0gdG9ueQ0KDQpG
cm9tOiBNYXJpYW5vIFNjYXp6YXJpZWxsbyA8bXNjYXp6YXJpZWxsb0Bvcy51bmlyb21hMy5pdD48
bWFpbHRvOm1zY2F6emFyaWVsbG9Ab3MudW5pcm9tYTMuaXQ+DQpEYXRlOiBXZWRuZXNkYXksIE1h
cmNoIDE4LCAyMDIwIGF0IDk6MTAgQU0NClRvOiBCcnVubyBSaWpzbWFuIDxicnVub3JpanNtYW5A
Z21haWwuY29tPjxtYWlsdG86YnJ1bm9yaWpzbWFuQGdtYWlsLi5jb20+DQpDYzogQW50b25pIFBy
enlnaWVuZGEgPHByekBqdW5pcGVyLm5ldD48bWFpbHRvOnByekBqdW5pcGVyLm5ldD4sIExlb25h
cmRvIEFsYmVycm8gWmltbWVybWFubiA8bGFsYmVycm9AZmluZy5lZHUudXk+PG1haWx0bzpsYWxi
ZXJyb0BmaW5nLmVkdS51eT4sICJ0b21tYXNvY2FpYXp6aUBnbWFpbC5jb20iPG1haWx0bzp0b21t
YXNvY2FpYXp6aUBnbWFpbC5jb20+IDx0b21tYXNvY2FpYXp6aUBnbWFpbC5jb20+PG1haWx0bzp0
b21tYXNvY2FpYXp6aUBnbWFpbC5jb20+LCAibG9yZW56b2FyaWVtbWFAZ21haWwuY29tIjxtYWls
dG86bG9yZW56b2FyaWVtbWFAZ21haWwuY29tPiA8bG9yZW56b2FyaWVtbWFAZ21haWwuY29tPjxt
YWlsdG86bG9yZW56b2FyaWVtbWFAZ21haWwuY29tPiwgR2l1c2VwcGUgRGkgQmF0dGlzdGEgPGdp
dXNlcHBlLmRpYmF0dGlzdGFAdW5pcm9tYTMuaXQ+PG1haWx0bzpnaXVzZXBwZS5kaWJhdHRpc3Rh
QHVuaXJvbWEzLml0Pg0KU3ViamVjdDogUmU6IFJJRlQgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24N
Cg0KDQpIaSBldmVyeW9uZSwNCnRoYW5rcyBmb3IgdGhlIGV4dHJlbWVseSBkZXRhaWxlZCBzdWdn
ZXN0aW9ucyEgSSBoYXZlIGEgbG90IG9mIHN0dWZmIHdoaWNoIEkgY2FuIHVzZSB0byB3b3JrIG9u
IHRoZSBpbXBsZW1lbnRhdGlvbi4gQWxzbyB0aGFua3MgVG9ueSBmb3IgZ2l2aW5nIG1lIGZ1cnRo
ZXIgdXNlZnVsIHRpcHMuDQoNCkFsc28sIEknbSBoYXBweSB0aGF0IHdlIGFncmVlIG9uIGFsbW9z
dCBldmVyeSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIEkgYWdyZWUgd2l0aCB5b3VyIHN1Z2dl
c3RlZCB2YXJpYXRpb25zIChsaWtlIHRoZSBmbGFnIGZvciB0aGUgc3BmX3J1bl9kaXJlY3Rpb24g
bWV0aG9kKS4NCg0KQWJvdXQgcG9pbnQgQywgSSBkaWQgbm90IHdyaXRlIGFueXRoaW5nIHNpbmNl
IGl0IHNlZW1zIHF1aXRlIGVhc3kgdG8gZXh0ZW5kIHRoZSBUaHJpZnQgbW9kZWwuIElmIEkgaGF2
ZSBhbnkgaXNzdWVzLCBJJ2xsIHN1cmVseSBhc2sgeW91IGZvciBzb21lIGhlbHAuIEkgYWxzbyB3
cm90ZSBhIHBvaW50IEQgKHdoaWNoIGlzIGhvdyB0byBoYW5kbGUgdGhlIG5lZ2F0aXZlIGRpc2Fn
Z3JlZ2F0aW9uIGluIHRoZSBSSUIvRklCIHdoZW4gcmVjZWl2ZWQpLCBidXQgSSByZWFkIHRoZSBQ
YXNjYWwgc2xpZGVzIChJIGFkZCB0aGUgbGluazxodHRwczovL3VybGRlZmVuc2UuY29tL3YzL19f
aHR0cHM6L2JpdGJ1Y2tldC5vcmcvcmlmdHJmYy9yaWZ0X2RyYWZ0L3NyYy9tYXN0ZXIvbmVnYXRp
dmUqMjBkaXNhZ2dyZWdhdGlvbi5wcHR4X187SlEhIU5FdDZ5TWFPLWdrIVFCRlFQM0VjNnUwZWxF
S2dFRmFBRW5kY2p5UW50Slh2TWcwaDJUZkFINmtuNEpMVWFNYjNGT1lwRFFPbHR3JD4gaGVyZSwg
c28gZXZlcnlvbmUgY2FuIGFjY2VzcyB0aGVtIGVhc2lseSkgYW5kIHRoZSBzdGVwcyB1c2VkIGlu
IHRoYXQgcHJlc2VudGF0aW9uIGFyZSB0aGUgc2FtZSB0aGF0IEkgdGhvdWdodC4NCg0KSSBzdGls
bCBoYXZlIHNvbWUgZG91YnRzIGFib3V0IHRoZSBzcGVjaWFsIFNQRiBydW46DQoyKSBXZSB3aWxs
IGFsc28gbmVlZCBhIG5ldyBtZW1iZXIgZmllbGQgb3JpZ19uZWdfZGlzYWdnX3ByZWZpeGVzIChv
bmNlIGFnYWluIG9mIHR5cGUgc2V0LCBJIHRoaW5rKSB0aGF0IGNvbnRhaW5zIHRoZSBuZWdhdGl2
ZWx5IGRpc2FnZ3JlZ2F0ZWQgcHJlZml4ZXMgdGhhdCBhcmUgYXV0b25vbW91c2x5IGJlaW5nIG9y
aWdpbmF0ZWQgYmFzZWQgb24gdGhlIGRldGVjdGlvbiBvZiBmYWxsZW4gbGVhZnMgYmFzZWQgb24g
dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbm9ybWFsIGFuZCBzcGVjaWFsIFNQRiBydW4uDQpZ
b3UgYXJlIHByb3Bvc2luZyB0byBwb3N0cG9uZSB0aGUgUklCL0ZJQiB1cGRhdGUgYWZ0ZXIgdGhl
IHNwZWNpYWwgU1BGIHJ1biAod2hpY2ggY2FuIGRldGVjdCBhZGRpdGlvbmFsIGZhbGxlbiBsZWFm
IG5vZGVzKS4gVGhpcyBpcyByaWdodCwgIGJ1dCBzaG91bGQgdGhpcyBvbmx5IG9jY3VyIG9uIFRv
RiBub2Rlcz8gSWYgd2UgY29uc2lkZXIgYSBub2RlIFgsIHdoaWNoIGlzIG5vdCBhIFRvRiwgdGhh
dCByZWNlaXZlcyBhIG5lZ2F0aXZlIGRpc2FnZ3JlZ2F0aW9uIFRJRSwgaXQgc2hvdWxkIG9ubHkg
YWRkIHRoZSBwcmVmaXggaW4gdGhlIHByb3BfbmVnX2Rpc2FnZ19wcmVmaXhlcyBzZXQgYW5kIGNo
ZWNrIGlmIGl0IHJlY2VpdmVkIHRoaXMgcHJlZml4IGZyb20gYWxsIGl0cyBwYXJlbnQgbm9kZXMg
YW5kIHByb3BhZ2F0ZSBpdCBpZiByZXF1aXJlZC4gVGhlbiBpdCBzaG91bGQgcHJvY2VlZCB0byB1
cGRhdGUgaXRzIFJJQi9GSUIsIHdpdGhvdXQgcnVubmluZyB0aGUgc3BlY2lhbCBTUEYuIEFtIEkg
cmlnaHQ/DQoNCkFib3V0IHRoZSBmbG9vZGluZyBvc2NpbGxhdGlvbnMsIFRvbnkgd3JpdGVzICJZ
b3VyIGJlc3QgcHJvdGVjdGlvbiBpcyBzY2FsZWQsIHJhbmRvbWl6ZWQgdGVzdHMiLiBIZXJlIGF0
IFJvbWEgVHJlIFVuaXZlcnNpdHkgd2UgZGV2ZWxvcGVkIGEgdG9vbCBjYWxsZWQgS2F0aGFyw6E8
aHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0dHBzOi93d3cua2F0aGFyYS5vcmcvX187ISFO
RXQ2eU1hTy1nayFRQkZRUDNFYzZ1MGVsRUtnRUZhQUVuZGNqeVFudEpYdk1nMGgyVGZBSDZrbjRK
TFVhTWIzRk9adWpyckVDQSQ+IHdoaWNoIGlzIGFibGUgdG8gZW11bGF0ZSBuZXR3b3JrIHNjZW5h
cmlvcyB1c2luZyBEb2NrZXIgY29udGFpbmVycy4gUmVjZW50bHksIHdlIGFsc28gZGV2ZWxvcGVk
IGEgRmF0IFRyZWUgR2VuZXJhdG9yLCB0aGF0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGEgZmF0
IHRyZWUgdG9wb2xvZ3kgc3RhcnRpbmcgZnJvbSB0aGUgZnVuZGFtZW50YWwgcGFyYW1ldGVycyBv
ZiBhIEZhdCBUcmVlIChLX0xFQUYsIEtfVE9QIGFuZCBSKSB0aGF0IGNhbiBiZSBydW4gaW4gS2F0
aGFyw6EuIEl0IGFsc28gYXV0by1jb25maWd1cmVzIHRoZSByb3V0aW5nIHByb3RvY29sIG9uIGVh
Y2ggbm9kZSAob2YgY291cnNlLCB3ZSBhbHNvIGluY2x1ZGVkIHRoZSBSSUZULVB5dGhvbiBpbXBs
ZW1lbnRhdGlvbikuIFNvIHdlIGNhbiBnZW5lcmF0ZSBGYXQgVHJlZSB0b3BvbG9naWVzIG9mIGFu
eSBzaXplIGFuZCBydW4gdGVzdHMgb24gaXQgdG8gdmVyaWZ5IGZ1bmN0aW9uYWwgYW5kIGJlaGF2
aW9yYWwgYXNwZWN0cyAoYW5kIGFsc28gZ2F0aGVyIHJvdXRpbmcgaW5mb3JtYXRpb24gc3VjaCBh
cyBQRFUgc2l6ZSBhbmQgY291bnQpLiBXZSBhcmUgYWxzbyBkZXZlbG9waW5nIGEgRmF0IFRyZWUg
VGVzdCBGcmFtZXdvcmsgKGluIGNvbGxhYm9yYXRpb24gd2l0aCBMZW9uYXJkbyBhbmQgdGhlIHRl
YW0gYXQgVVkgdW5pdmVyc2l0eSkgd2hpY2ggaW1wbGVtZW50cyB0eXBpY2FsIGRhdGEgY2VudGVy
IG5ldHdvcmsgc2NlbmFyaW9zIChzdWNoIGFzIGxpbmsgZmFpbHVyZSwgbm9kZSBmYWlsdXJlLCBm
YWxsZW4gbGVhZiwgcGFydGl0aW9uZWQgZmFicmljIGFuZCBzbyBvbikgdG8gcnVuIGludGVncmF0
aW9uIHRlc3RzIG9uIGl0LiBGb3IgZXhhbXBsZSwgd2UgY2FuIGNoZWNrIGlmIHRoZSByb3V0aW5n
IHRhYmxlIG9mIGEgbm9kZSBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWQgb25lIGFmdGVyIGEgZmFp
bHVyZSAoZS5nLiBsb3NzIG9mIGEgbXVsdGlwYXRoIG9yIGEgcHJlZml4KS4gV2l0aCB0aGlzIHRv
b2wgd2UgY2FuIHN1cmVseSBydW4gcmFuZG9taXplZCB0ZXN0cyAoYXQgYW55IHNjYWxlLCBzaW5j
ZSBLYXRoYXLDoSBzdXBwb3J0cyBLdWJlcm5ldGVzKSB0byBlbnN1cmUgdGhhdCBubyBmbG9vZGlu
ZyBvc2NpbGxhdGlvbnMgb2NjdXIuDQoNCkkgYWdyZWUgdG8gbW92ZSB0aGUgZGlzY3Vzc2lvbiBv
biB0aGUgUklGVCBXRyBtYWlsaW5nIGxpc3QuIE1heWJlIHNvbWVvbmUgb2YgeW91IHNob3VsZCBp
bnRyb2R1Y2UgdXMgYW5kIGV4cGxhaW4gd2hhdCB3ZSdyZSBkb2luZy4NCg0KVGhhbmtzIGV2ZXJ5
b25lIGZvciB5b3VyIHRpbWUsDQpNYXJpYW5vLg0KDQoNCg0KX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18NClJJRlQgbWFpbGluZyBsaXN0DQpSSUZUQGlldGYu
b3JnPG1haWx0bzpSSUZUQGlldGYub3JnPg0KaHR0cHM6Ly93d3cuaWV0Zi5vcmcvbWFpbG1hbi9s
aXN0aW5mby9yaWZ0PGh0dHBzOi8vdXJsZGVmZW5zZS5jb20vdjMvX19odHRwczovL3d3dy5pZXRm
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3JpZnRfXzshIU5FdDZ5TWFPLWdrIVJuV2sxNWpQN2NoWng3
OURCblRfYnlxTUpPdVI2RVRnYVBWUmZscTJoVVpBQVBwVHY5c0U0MXNMM2xFSklpdTZPZyQ+DQoN
Cg0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpS
SUZUIG1haWxpbmcgbGlzdA0KUklGVEBpZXRmLm9yZzxtYWlsdG86UklGVEBpZXRmLm9yZz4NCmh0
dHBzOi8vd3d3LmlldGYub3JnL21haWxtYW4vbGlzdGluZm8vcmlmdDxodHRwczovL3VybGRlZmVu
c2UuY29tL3YzL19faHR0cHM6Ly93d3cuaWV0Zi5vcmcvbWFpbG1hbi9saXN0aW5mby9yaWZ0X187
ISFORXQ2eU1hTy1nayFSbldrMTVqUDdjaFp4NzlEQm5UX2J5cU1KT3VSNkVUZ2FQVlJmbHEyaFVa
QUFQcFR2OXNFNDFzTDNsRUpJaXU2T2ckPg0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fDQpSSUZUIG1haWxpbmcgbGlzdA0KUklGVEBpZXRmLm9yZw0K
aHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0dHBzOi8vd3d3LmlldGYub3JnL21haWxtYW4v
bGlzdGluZm8vcmlmdF9fOyEhTkV0NnlNYU8tZ2shUm5XazE1alA3Y2haeDc5REJuVF9ieXFNSk91
UjZFVGdhUFZSZmxxMmhVWkFBUHBUdjlzRTQxc0wzbEVKSWl1Nk9nJA0K

--_000_B3432BD54AFA4DFA807AE314518ACF28junipernet_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IGRpcj0iYXV0byI+DQo8
ZGl2IGRpcj0ibHRyIj5IaSBMZW9uYXJkbyw8L2Rpdj4NCjxkaXYgZGlyPSJsdHIiPjxicj4NCjwv
ZGl2Pg0KPGRpdiBkaXI9Imx0ciI+QXdlc29tZSwgdGhhbmtzIGZvciB5b3VyIGdyZWF0IHdvcmsg
b24gdGhpcyE8L2Rpdj4NCjxkaXYgZGlyPSJsdHIiPjxicj4NCjwvZGl2Pg0KPGRpdiBkaXI9Imx0
ciI+V2lsbCB0cnkgaXQgb3V0IEFTQVAsPC9kaXY+DQo8ZGl2IGRpcj0ibHRyIj48YnI+DQo8L2Rp
dj4NCjxkaXYgZGlyPSJsdHIiPlJlZ2FyZHM8L2Rpdj4NCjxkaXYgZGlyPSJsdHIiPk9saXZlcjwv
ZGl2Pg0KPGRpdiBkaXI9Imx0ciI+PGJyPg0KPC9kaXY+DQo8ZGl2IGRpcj0ibHRyIj48YnI+DQo8
YmxvY2txdW90ZSB0eXBlPSJjaXRlIj5PbiA2IEp1biAyMDIwLCBhdCAyMzo1MSwgTGVvbmFyZG8g
QWxiZXJybyBaaW1tZXJtYW5uICZsdDtsYWxiZXJyb0BmaW5nLmVkdS51eSZndDsgd3JvdGU6PGJy
Pg0KPGJyPg0KPC9ibG9ja3F1b3RlPg0KPC9kaXY+DQo8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj4N
CjxkaXYgZGlyPSJsdHIiPu+7vw0KPHA+PC9wPg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xv
cjojRkZFQjlDOyB3aWR0aDoxMDAlOyBib3JkZXItc3R5bGU6IG5vbmU7IGJvcmRlci1jb2xvcjoj
OUM2NTAwOyBib3JkZXItd2lkdGg6MXB0OyBwYWRkaW5nOjJwdDsgZm9udC1zaXplOjEwLjVwdDsg
bGluZS1oZWlnaHQ6MTJwdDsgZm9udC1mYW1pbHk6J0xhdG8nOyBjb2xvcjpibGFjazsgdGV4dC1h
bGlnbjogbGVmdDsgZm9udC13ZWlnaHQ6Ym9sZCI+DQo8c3BhbiBzdHlsZT0iY29sb3I6YmxhY2si
IDs9IiIgZm9udC13ZWlnaHQ6Ym9sZDs9IiI+W0V4dGVybmFsIEVtYWlsLiBCZSBjYXV0aW91cyBv
ZiBjb250ZW50XTwvc3Bhbj48L2Rpdj4NCjxicj4NCjxwPjwvcD4NCjxkaXY+DQo8cD5IZWxsbyBh
bGwsPC9wPg0KPHA+V2UgYWRkZWQgYSBmdWxsIGRlY29kaW5nIGZvciB0aGUgVElSRS9USURFIGFu
ZCBMSUUgbWVzc2FnZXMuIFRodXMsIHRoZSBSSUZUIEMgZGlzc2VjdG9yIHN1cHBvcnRzIGZ1bGwg
ZGVjb2RlIG9mIGFsbCB0aGUgUklGVCBwYWNrZXRzLjwvcD4NCjxwPlJlZ2FyZHMsPGJyPg0KTGVv
bmFyZG88L3A+DQo8ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPkVsIDEyLzUvMjAgYSBsYXMg
MTk6NDYsIExlb25hcmRvIEFsYmVycm8gWmltbWVybWFubiBlc2NyaWJpw7M6PGJyPg0KPC9kaXY+
DQo8YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjaXRlPSJtaWQ6OWI2YzA4ZWMtZGJiMS0yMzRlLTVi
MTAtZDE2NDI2OTIzMzk0QGZpbmcuZWR1LnV5Ij4NCjxwPkhlbGxvIGFsbCw8L3A+DQo8cD5yZWdh
cmRpbmcgdGhlIGRldmVsb3BtZW50IG9mIGEgd2lyZXNoYXJrIGRpc3NlY3RvciBmb3IgUklGVCwg
d2UgYXJlIGhhcHB5IHRvIGludHJvZHVjZSB5b3Ugb3VyIHdvcmsuIEl0IGlzIGF2YWlsYWJsZSBh
dA0KPGEgaHJlZj0iaHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0dHBzOi8vZ2l0bGFiLmNv
bS9maW5nLW1pbmEvZGF0YWNlbnRlcnMvcmlmdC1kaXNzZWN0b3JfXzshIU5FdDZ5TWFPLWdrIVJu
V2sxNWpQN2NoWng3OURCblRfYnlxTUpPdVI2RVRnYVBWUmZscTJoVVpBQVBwVHY5c0U0MXNMM2xF
MHF3dkNzZyQiIG1vei1kby1ub3Qtc2VuZD0idHJ1ZSI+DQpodHRwczovL2dpdGxhYi5jb20vZmlu
Zy1taW5hL2RhdGFjZW50ZXJzL3JpZnQtZGlzc2VjdG9yPC9hPjwvcD4NCjxwIGRhdGEtc291cmNl
cG9zPSI2OjEtNjo3OSIgZGlyPSJhdXRvIj5SSUZUIEMgZGlzc2VjdG9yIGlzIGEgY29tcGxldGUg
V2lyZXNoYXJrIGRpc3NlY3RvciBmb3IgZGVjb2RpbmcgUklGVCBwcm90b2NvbC4gVGhlIGNvZGUg
aWRlbnRpZmllcyBhbGwgdGhlIFJJRlQgcGFja2V0cyBhbmQgYnVpbGRzIGEgY29tcGxldGUgZGlz
c2VjdGlvbiBmb3IgdGhlIFRJRSBvbmVzLiBUaGlzIGRpc3NlY3RvciBoYXMgYmVlbiB0ZXN0ZWQg
d2l0aCB0aGUgY3VycmVudA0KIGltcGxlbWVudGF0aW9ucyBvZiBSSUZULjwvcD4NCjxwIGRhdGEt
c291cmNlcG9zPSI2OjEtNjo3OSIgZGlyPSJhdXRvIj5SZWdhcmRzLDxicj4NCkxlb25hcmRvPGJy
Pg0KPC9wPg0KPGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5FbCAyNi8zLzIwIGEgbGFzIDEz
OjIzLCBUb255IFByenlnaWVuZGEgZXNjcmliacOzOjxicj4NCjwvZGl2Pg0KPGJsb2NrcXVvdGUg
dHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOkNBJiM0Mzt3aTJoT1lULXh6aDg5PVNrR2V4YnFWX1p1RXFu
VUQ3blNjMzV2ZVRSPVEmIzQzOz1LRW5BQG1haWwuZ21haWwuY29tIj4NCjxkaXYgZGlyPSJsdHIi
Pg0KPGRpdj5MZW9uYXJkbywgdGhhdCBpcyBhIGdyZWF0IHByb2plY3QuIE9ic2VydmUgdGhhdCBk
ZXBlbmRpbmcgb24gbGFuZ3VhZ2UgYmFja2VuZC90aHJpZnQgY29tcGlsZXIgZGlmZmVyZW50IHN0
cmVhbXMgbWF5IHJlcHJlc2VudCB0aGUgc2FtZSBlbmNvZGluZyBzbyBpdCdzIGdvb2QgdG8gdGVz
dCBpdCBhZ2FpbnN0IG1vcmUgdGhhbiBvbmUgaW1wbGVtZW50YXRpb24uIFdlIHNob3VsZCBnZXQg
c3RyZWFtcyB0aGF0IGhhcyBhbGwgcG9zc2libGUgTElFcw0KIGFuZCBUSUVzIGluIGl0LiA8YnI+
DQo8L2Rpdj4NCjxkaXY+PGJyPg0KPC9kaXY+DQo8ZGl2PklmIHlvdSBydW4ganVuaXBlciBzdGFu
ZGFsb25lIHB1YmxpYyBwYWNrYWdlIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lmp1bmlwZXIubmV0L3Vz
L2VuL2RtL2ZyZWUtcmlmdC10cmlhbC8iIG1vei1kby1ub3Qtc2VuZD0idHJ1ZSI+DQpodHRwczov
L3d3dy5qdW5pcGVyLm5ldC91cy9lbi9kbS9mcmVlLXJpZnQtdHJpYWwvPC9hPiB5b3UgY2FuIGVh
c2lseSBidWlsZCBhIDJ4MiB5YW1sIHRvcG9sb2d5IGFuZCBqdXN0IHNub29wIG9uIGEgVURQIHBv
cnQuIEkgc3VnZ2VzdCBzbm9vcGluZyBhIHY2L3Y0IGxpbmtzIGZyb20gYSBzcGluZSB0byBhIGxl
YWYuIHRoYXQgd2lsbCBnaXZlIHlvdSBhbGwgdGhlIExJRXMgYW5kIG5vZGUgVElFcyBhbmQgZGVm
YXVsdCBwcmVmaXhlcy4gSWYgeW91DQogYnJlYWsgYSBsaW5rIHZpYSBDTEkgeW91IHdpbGwgZ2V0
IGRpc2FnZ3JlZ2F0aW9uIGFzIHdlbGwuIElmIHlvdSBzdHJ1Z2dsZSB3aXRoIHRoYXQsIHBpbmcg
bWUgLi4uDQo8YnI+DQo8L2Rpdj4NCjxkaXY+PGJyPg0KPC9kaXY+DQo8ZGl2PkhhdmluZyBzYWlk
IHRoYXQgeW91IGNhbiBkbyBhbGwgdGhhdCB3aXRoIG9wZW4gc291cmNlIGFzIHdlbGwgKGJ1dCBv
YnNlcnZlIHdlIGRpZG4ndCBwdWxsIG9wZW4gc291cmNlIHRvIC0xMSBkcmFmdCB5ZXQgd2hpY2gg
aGFkIHNvbWUgc2NoZW1hIGNoYW5nZXMgYWxiZWl0IG1pbm9yKS4geW91IGNhbiBwdWxsIHRoZSBz
Y2hlbWEgeW91cnNlbGYgd2l0aCBCcnVubydzIGhlbHAgb3IgSSdsbCBnZXQgdG8gaXQgb25lIG9m
IHRoZXNlIGRheXMgOy0pDQogLi4uIDxicj4NCjwvZGl2Pg0KPGRpdj48YnI+DQo8L2Rpdj4NCjxk
aXY+QXJjaGl0ZWN0dXJhbGx5LCBzaW5jZSBSSUZUIHdpbGwgZXZvbHZlIGFuZCBwb3NzaWJseSBt
b3ZlIHRvIG5ld2VyIG1ham9yIHNjaGVtYXMsIEkgd291bGQgc3VnZ2VzdCB5b3UgcHJvdmlzaW9u
IGZvciB0aGUgcG9zc2liaWxpdHkgdG8gcHV0IGludG8gd2lyZXNoYXJrIG11bHRpcGxlIHNjaGVt
YSBmaWxlcywgYmFzaWNhbGx5IHlvdSdkIG5lZWQgdG8gY29tcGlsZSBtdWx0aXBsZSBkaXJlY3Rv
cmllcyBpbiBkaWZmZXJudCBuYW1lc3BhY2VzDQogYW5kIHVzZSB0aGUgY29ycmVjdCBvbmUgZGVw
ZW5kaW5nIG9uIHRoZSBtYWpvciB5b3UgZm91bmQgb24gcGFja2V0IGVudmVsb3BlICh5b3UgY2Fu
IGFsd2F5cyB1c2UgdGhlIG5ld2VzdCBtaW5vciB5b3Ugc3VwcG9ydCBvbiB0aGUgbWFqb3IsIHRo
ZXkgYXJlIGFsd2F5cyBjb21wYXRpYmxlKS4NCjxicj4NCjwvZGl2Pg0KPGRpdj48YnI+DQo8L2Rp
dj4NCjxkaXY+LS0tIHRvbnkgPGJyPg0KPC9kaXY+DQo8ZGl2Pjxicj4NCjwvZGl2Pg0KPGRpdj48
YnI+DQo8L2Rpdj4NCjwvZGl2Pg0KPGJyPg0KPGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPg0KPGRp
diBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9uIFRodSwgTWFyIDI2LCAyMDIwIGF0IDc6
MTcgQU0gTGVvbmFyZG8gQWxiZXJybyBaaW1tZXJtYW5uICZsdDs8YSBocmVmPSJtYWlsdG86bGFs
YmVycm9AZmluZy5lZHUudXkiIG1vei1kby1ub3Qtc2VuZD0idHJ1ZSI+bGFsYmVycm9AZmluZy5l
ZHUudXk8L2E+Jmd0OyB3cm90ZTo8YnI+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIGNsYXNzPSJnbWFp
bF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweA0KICAgICAgICAgICAgMC44ZXg7Ym9y
ZGVyLWxlZnQ6MXB4IHNvbGlkDQogICAgICAgICAgICByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmct
bGVmdDoxZXgiPg0KPGRpdj4NCjxwPkhpIGV2ZXJ5b25lLDwvcD4NCjxwPmFzIGEgcGFydCBvZiB0
aGlzIHByb2plY3Qgd2UgYXJlIGRldmVsb3BpbmcgYSB3aXJlc2hhcmsgZGlzc2VjdG9yIGZvciBS
SUZULiBUaGUgZGlzc2VjdGlvbiBmb3IgdGhlIHNlY3VyaXR5IGVudmVsb3BlIGlzIHJlYWR5IGFu
ZCB0ZXN0ZWQuIE5vdyB3ZSBhcmUgd29ya2luZyBvbiB0aGUgU2VyaWFsaXplZCBSSUZUIE1vZGVs
IE9iamVjdCBkaXNzZWN0aW9uIGFuZCBmb3IgcHJlcGFyaW5nIHRoZSB0ZXN0aW5nIHdlIGFyZSBs
b29raW5nIGZvciBhDQogJnF1b3Q7a25vd24mcXVvdDsgdHJhY2UsIGkuZSB3ZSBuZWVkIGEgZmV3
IHBhY2tldHMgYW5kIHRoZSBleGFjdCB2YWx1ZXMgb2YgdGhlc2UgZmllbGRzIGluIHRoZSBUaHJp
ZnQgbW9kZWwuIFNvIGlmIGFueW9uZSBjYW4gaGVscCB1cyB3ZSdsbCBiZSBncmF0ZWZ1bC48L3A+
DQo8cD5SZWdhcmRzLDxicj4NCkxlb25hcmRvLjxicj4NCjwvcD4NCjxkaXY+RWwgMTgvMy8yMCBh
IGxhcyAxMzozNCwgQW50b25pIFByenlnaWVuZGEgZXNjcmliacOzOjxicj4NCjwvZGl2Pg0KPGJs
b2NrcXVvdGUgdHlwZT0iY2l0ZSI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Rm9yd2Fy
ZGluZyB0aGUgZGlzY3Vzc2lvbiB0byB0aGUgcmlmdCBpZXRmIGxpc3QgZm9yIGZ1cnRoZXIgZXhw
b3N1cmUgJmFtcDsgc2luY2UgSSBnZW5lcmFsbHkgdGhpbmsgaXQgd2lsbCBiZSBwb3NzaWJseSBt
b3JlIHByb2R1Y3RpdmUgaW4gYSB3aWRlciBmb3J1bS4gUm9tYSBUcmUgVW5pdmVyc2l0eSBpcyB3
b3JraW5nIG9uIEJydW5v4oCZcyBvcGVuIHNvdXJjZSBhbmQgdGhlcmXigJlzIGEgYnVuY2ggb2Yg
aW50ZXJlc3RpbmcNCiB0b29scyB0aGV54oCZcmUgZGV2ZWxvcGluZyBhcyB3ZWxsIGFzIHlvdSBj
YW4gcmVhZCBiZWxvdy4gPC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PC9wPg0KPHAg
Y2xhc3M9Ik1zb05vcm1hbCI+LS0tIHRvbnkgPC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5i
c3A7PC9wPg0KPGRpdiBzdHlsZT0iYm9yZGVyLWNvbG9yOnJnYigxODEsMTk2LDIyMykgY3VycmVu
dGNvbG9yDQogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRjb2xvcjtib3JkZXItc3R5bGU6c29s
aWQgbm9uZQ0KICAgICAgICAgICAgICAgICAgICBub25lO2JvcmRlci13aWR0aDoxcHQgbWVkaXVt
IG1lZGl1bTtwYWRkaW5nOjNwdCAwaW4NCiAgICAgICAgICAgICAgICAgICAgMGluIj4NCjxwIGNs
YXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJwdDtjb2xvcjpibGFj
ayI+RnJvbTogPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHQ7Y29sb3I6Ymxh
Y2siPk1hcmlhbm8gU2NhenphcmllbGxvDQo8YSBocmVmPSJtYWlsdG86bXNjYXp6YXJpZWxsb0Bv
cy51bmlyb21hMy5pdCIgdGFyZ2V0PSJfYmxhbmsiIG1vei1kby1ub3Qtc2VuZD0idHJ1ZSI+DQom
bHQ7bXNjYXp6YXJpZWxsb0Bvcy51bmlyb21hMy5pdCZndDs8L2E+PGJyPg0KPGI+RGF0ZTogPC9i
PldlZG5lc2RheSwgTWFyY2ggMTgsIDIwMjAgYXQgOToxMCBBTTxicj4NCjxiPlRvOiA8L2I+QnJ1
bm8gUmlqc21hbiA8YSBocmVmPSJtYWlsdG86YnJ1bm9yaWpzbWFuQGdtYWlsLi5jb20iIHRhcmdl
dD0iX2JsYW5rIiBtb3otZG8tbm90LXNlbmQ9InRydWUiPg0KJmx0O2JydW5vcmlqc21hbkBnbWFp
bC5jb20mZ3Q7PC9hPjxicj4NCjxiPkNjOiA8L2I+QW50b25pIFByenlnaWVuZGEgPGEgaHJlZj0i
bWFpbHRvOnByekBqdW5pcGVyLm5ldCIgdGFyZ2V0PSJfYmxhbmsiIG1vei1kby1ub3Qtc2VuZD0i
dHJ1ZSI+DQombHQ7cHJ6QGp1bmlwZXIubmV0Jmd0OzwvYT4sIExlb25hcmRvIEFsYmVycm8gWmlt
bWVybWFubiA8YSBocmVmPSJtYWlsdG86bGFsYmVycm9AZmluZy5lZHUudXkiIHRhcmdldD0iX2Js
YW5rIiBtb3otZG8tbm90LXNlbmQ9InRydWUiPg0KJmx0O2xhbGJlcnJvQGZpbmcuZWR1LnV5Jmd0
OzwvYT4sIDxhIGhyZWY9Im1haWx0bzp0b21tYXNvY2FpYXp6aUBnbWFpbC5jb20iIHRhcmdldD0i
X2JsYW5rIiBtb3otZG8tbm90LXNlbmQ9InRydWUiPg0KJnF1b3Q7dG9tbWFzb2NhaWF6emlAZ21h
aWwuY29tJnF1b3Q7PC9hPiA8YSBocmVmPSJtYWlsdG86dG9tbWFzb2NhaWF6emlAZ21haWwuY29t
IiB0YXJnZXQ9Il9ibGFuayIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj4NCiZsdDt0b21tYXNvY2Fp
YXp6aUBnbWFpbC5jb20mZ3Q7PC9hPiwgPGEgaHJlZj0ibWFpbHRvOmxvcmVuem9hcmllbW1hQGdt
YWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiIG1vei1kby1ub3Qtc2VuZD0idHJ1ZSI+DQomcXVvdDts
b3JlbnpvYXJpZW1tYUBnbWFpbC5jb20mcXVvdDs8L2E+IDxhIGhyZWY9Im1haWx0bzpsb3Jlbnpv
YXJpZW1tYUBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIiBtb3otZG8tbm90LXNlbmQ9InRydWUi
Pg0KJmx0O2xvcmVuem9hcmllbW1hQGdtYWlsLmNvbSZndDs8L2E+LCBHaXVzZXBwZSBEaSBCYXR0
aXN0YSA8YSBocmVmPSJtYWlsdG86Z2l1c2VwcGUuZGliYXR0aXN0YUB1bmlyb21hMy5pdCIgdGFy
Z2V0PSJfYmxhbmsiIG1vei1kby1ub3Qtc2VuZD0idHJ1ZSI+DQombHQ7Z2l1c2VwcGUuZGliYXR0
aXN0YUB1bmlyb21hMy5pdCZndDs8L2E+PGJyPg0KPGI+U3ViamVjdDogPC9iPlJlOiBSSUZUIHBy
b3RvY29sIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNz
PSJNc29Ob3JtYWwiPiZuYnNwOzwvcD4NCjwvZGl2Pg0KPHA+SGkgZXZlcnlvbmUsPGJyPg0KdGhh
bmtzIGZvciB0aGUgZXh0cmVtZWx5IGRldGFpbGVkIHN1Z2dlc3Rpb25zISBJIGhhdmUgYSBsb3Qg
b2Ygc3R1ZmYgd2hpY2ggSSBjYW4gdXNlIHRvIHdvcmsgb24gdGhlIGltcGxlbWVudGF0aW9uLiBB
bHNvIHRoYW5rcyBUb255IGZvciBnaXZpbmcgbWUgZnVydGhlciB1c2VmdWwgdGlwcy48YnI+DQo8
YnI+DQpBbHNvLCBJJ20gaGFwcHkgdGhhdCB3ZSBhZ3JlZSBvbiBhbG1vc3QgZXZlcnkgaW1wbGVt
ZW50YXRpb24gZGV0YWlsIGFuZCBJIGFncmVlIHdpdGggeW91ciBzdWdnZXN0ZWQgdmFyaWF0aW9u
cyAobGlrZSB0aGUgZmxhZyBmb3IgdGhlDQo8c3Bhbj5zcGZfcnVuX2RpcmVjdGlvbjwvc3Bhbj4g
bWV0aG9kKS48YnI+DQo8YnI+DQpBYm91dCBwb2ludCBDLCBJIGRpZCBub3Qgd3JpdGUgYW55dGhp
bmcgc2luY2UgaXQgc2VlbXMgcXVpdGUgZWFzeSB0byBleHRlbmQgdGhlIFRocmlmdCBtb2RlbC4g
SWYgSSBoYXZlIGFueSBpc3N1ZXMsIEknbGwgc3VyZWx5IGFzayB5b3UgZm9yIHNvbWUgaGVscC4g
SSBhbHNvIHdyb3RlIGEgcG9pbnQgRCAod2hpY2ggaXMgaG93IHRvIGhhbmRsZSB0aGUgbmVnYXRp
dmUgZGlzYWdncmVnYXRpb24gaW4gdGhlIFJJQi9GSUIgd2hlbiByZWNlaXZlZCksDQogYnV0IEkg
cmVhZCB0aGUgUGFzY2FsIHNsaWRlcyAoSSBhZGQgdGhlIDxhIGhyZWY9Imh0dHBzOi8vdXJsZGVm
ZW5zZS5jb20vdjMvX19odHRwczovYml0YnVja2V0Lm9yZy9yaWZ0cmZjL3JpZnRfZHJhZnQvc3Jj
L21hc3Rlci9uZWdhdGl2ZSoyMGRpc2FnZ3JlZ2F0aW9uLnBwdHhfXztKUSEhTkV0NnlNYU8tZ2sh
UUJGUVAzRWM2dTBlbEVLZ0VGYUFFbmRjanlRbnRKWHZNZzBoMlRmQUg2a240SkxVYU1iM0ZPWXBE
UU9sdHckIiB0YXJnZXQ9Il9ibGFuayIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj4NCmxpbms8L2E+
IGhlcmUsIHNvIGV2ZXJ5b25lIGNhbiBhY2Nlc3MgdGhlbSBlYXNpbHkpIGFuZCB0aGUgc3RlcHMg
dXNlZCBpbiB0aGF0IHByZXNlbnRhdGlvbiBhcmUgdGhlIHNhbWUgdGhhdCBJIHRob3VnaHQuPGJy
Pg0KPGJyPg0KSSBzdGlsbCBoYXZlIHNvbWUgZG91YnRzIGFib3V0IHRoZSBzcGVjaWFsIFNQRiBy
dW46PGJyPg0KPGI+MikgV2Ugd2lsbCBhbHNvIG5lZWQgYSBuZXcgbWVtYmVyIGZpZWxkIG9yaWdf
bmVnX2Rpc2FnZ19wcmVmaXhlcyAob25jZSBhZ2FpbiBvZiB0eXBlIHNldCwgSSB0aGluaykgdGhh
dCBjb250YWlucyB0aGUgbmVnYXRpdmVseSBkaXNhZ2dyZWdhdGVkIHByZWZpeGVzIHRoYXQgYXJl
IGF1dG9ub21vdXNseSBiZWluZyBvcmlnaW5hdGVkIGJhc2VkIG9uIHRoZSBkZXRlY3Rpb24gb2Yg
ZmFsbGVuIGxlYWZzIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4NCiB0aGUgbm9ybWFs
IGFuZCBzcGVjaWFsIFNQRiBydW4uPC9iPiA8YnI+DQpZb3UgYXJlIHByb3Bvc2luZyB0byBwb3N0
cG9uZSB0aGUgUklCL0ZJQiB1cGRhdGUgYWZ0ZXIgdGhlIHNwZWNpYWwgU1BGIHJ1biAod2hpY2gg
Y2FuIGRldGVjdCBhZGRpdGlvbmFsIGZhbGxlbiBsZWFmIG5vZGVzKS4gVGhpcyBpcyByaWdodCwm
bmJzcDsgYnV0IHNob3VsZCB0aGlzIG9ubHkgb2NjdXIgb24gVG9GIG5vZGVzPyBJZiB3ZSBjb25z
aWRlciBhIG5vZGUgWCwgd2hpY2ggaXMgbm90IGEgVG9GLCB0aGF0IHJlY2VpdmVzIGEgbmVnYXRp
dmUgZGlzYWdncmVnYXRpb24NCiBUSUUsIGl0IHNob3VsZCBvbmx5IGFkZCB0aGUgcHJlZml4IGlu
IHRoZSA8aT5wcm9wX25lZ19kaXNhZ2dfcHJlZml4ZXMgPC9pPnNldCBhbmQgY2hlY2sgaWYgaXQg
cmVjZWl2ZWQgdGhpcyBwcmVmaXggZnJvbSBhbGwgaXRzIHBhcmVudCBub2RlcyBhbmQgcHJvcGFn
YXRlIGl0IGlmIHJlcXVpcmVkLiBUaGVuIGl0IHNob3VsZCBwcm9jZWVkIHRvIHVwZGF0ZSBpdHMg
UklCL0ZJQiwgd2l0aG91dCBydW5uaW5nIHRoZSBzcGVjaWFsIFNQRi4gQW0gSSByaWdodD88YnI+
DQo8YnI+DQpBYm91dCB0aGUgZmxvb2Rpbmcgb3NjaWxsYXRpb25zLCBUb255IHdyaXRlcyAmcXVv
dDtZb3VyIGJlc3QgcHJvdGVjdGlvbiBpcyBzY2FsZWQsIHJhbmRvbWl6ZWQgdGVzdHMmcXVvdDsu
IEhlcmUgYXQgUm9tYSBUcmUgVW5pdmVyc2l0eSB3ZSBkZXZlbG9wZWQgYSB0b29sIGNhbGxlZA0K
PGEgaHJlZj0iaHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0dHBzOi93d3cua2F0aGFyYS5v
cmcvX187ISFORXQ2eU1hTy1nayFRQkZRUDNFYzZ1MGVsRUtnRUZhQUVuZGNqeVFudEpYdk1nMGgy
VGZBSDZrbjRKTFVhTWIzRk9adWpyckVDQSQiIHRhcmdldD0iX2JsYW5rIiBtb3otZG8tbm90LXNl
bmQ9InRydWUiPg0KS2F0aGFyw6E8L2E+IHdoaWNoIGlzIGFibGUgdG8gZW11bGF0ZSBuZXR3b3Jr
IHNjZW5hcmlvcyB1c2luZyBEb2NrZXIgY29udGFpbmVycy4gUmVjZW50bHksIHdlIGFsc28gZGV2
ZWxvcGVkIGEgRmF0IFRyZWUgR2VuZXJhdG9yLCB0aGF0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVz
IGEgZmF0IHRyZWUgdG9wb2xvZ3kgc3RhcnRpbmcgZnJvbSB0aGUgZnVuZGFtZW50YWwgcGFyYW1l
dGVycyBvZiBhIEZhdCBUcmVlIChLX0xFQUYsIEtfVE9QIGFuZCBSKSB0aGF0DQogY2FuIGJlIHJ1
biBpbiBLYXRoYXLDoS4gSXQgYWxzbyBhdXRvLWNvbmZpZ3VyZXMgdGhlIHJvdXRpbmcgcHJvdG9j
b2wgb24gZWFjaCBub2RlIChvZiBjb3Vyc2UsIHdlIGFsc28gaW5jbHVkZWQgdGhlIFJJRlQtUHl0
aG9uIGltcGxlbWVudGF0aW9uKS4gU28gd2UgY2FuIGdlbmVyYXRlIEZhdCBUcmVlIHRvcG9sb2dp
ZXMgb2YgYW55IHNpemUgYW5kIHJ1biB0ZXN0cyBvbiBpdCB0byB2ZXJpZnkgZnVuY3Rpb25hbCBh
bmQgYmVoYXZpb3JhbCBhc3BlY3RzDQogKGFuZCBhbHNvIGdhdGhlciByb3V0aW5nIGluZm9ybWF0
aW9uIHN1Y2ggYXMgUERVIHNpemUgYW5kIGNvdW50KS4gV2UgYXJlIGFsc28gZGV2ZWxvcGluZyBh
IEZhdCBUcmVlIFRlc3QgRnJhbWV3b3JrIChpbiBjb2xsYWJvcmF0aW9uIHdpdGggTGVvbmFyZG8g
YW5kIHRoZSB0ZWFtIGF0IFVZIHVuaXZlcnNpdHkpIHdoaWNoIGltcGxlbWVudHMgdHlwaWNhbCBk
YXRhIGNlbnRlciBuZXR3b3JrIHNjZW5hcmlvcyAoc3VjaCBhcyBsaW5rIGZhaWx1cmUsDQogbm9k
ZSBmYWlsdXJlLCBmYWxsZW4gbGVhZiwgcGFydGl0aW9uZWQgZmFicmljIGFuZCBzbyBvbikgdG8g
cnVuIGludGVncmF0aW9uIHRlc3RzIG9uIGl0LiBGb3IgZXhhbXBsZSwgd2UgY2FuIGNoZWNrIGlm
IHRoZSByb3V0aW5nIHRhYmxlIG9mIGEgbm9kZSBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWQgb25l
IGFmdGVyIGEgZmFpbHVyZSAoZS5nLiBsb3NzIG9mIGEgbXVsdGlwYXRoIG9yIGEgcHJlZml4KS4g
V2l0aCB0aGlzIHRvb2wgd2UgY2FuIHN1cmVseQ0KIHJ1biByYW5kb21pemVkIHRlc3RzIChhdCBh
bnkgc2NhbGUsIHNpbmNlIEthdGhhcsOhIHN1cHBvcnRzIEt1YmVybmV0ZXMpIHRvIGVuc3VyZSB0
aGF0IG5vIGZsb29kaW5nIG9zY2lsbGF0aW9ucyBvY2N1ci48YnI+DQo8YnI+DQpJIGFncmVlIHRv
IG1vdmUgdGhlIGRpc2N1c3Npb24gb24gdGhlIFJJRlQgV0cgbWFpbGluZyBsaXN0LiBNYXliZSBz
b21lb25lIG9mIHlvdSBzaG91bGQgaW50cm9kdWNlIHVzIGFuZCBleHBsYWluIHdoYXQgd2UncmUg
ZG9pbmcuPGJyPg0KPGJyPg0KVGhhbmtzIGV2ZXJ5b25lIGZvciB5b3VyIHRpbWUsPGJyPg0KTWFy
aWFuby48L3A+DQo8L2Rpdj4NCjxicj4NCjxmaWVsZHNldD48L2ZpZWxkc2V0Pg0KPHByZT5fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KUklGVCBtYWlsaW5n
IGxpc3QNCjxhIGhyZWY9Im1haWx0bzpSSUZUQGlldGYub3JnIiB0YXJnZXQ9Il9ibGFuayIgbW96
LWRvLW5vdC1zZW5kPSJ0cnVlIj5SSUZUQGlldGYub3JnPC9hPg0KPGEgaHJlZj0iaHR0cHM6Ly91
cmxkZWZlbnNlLmNvbS92My9fX2h0dHBzOi8vd3d3LmlldGYub3JnL21haWxtYW4vbGlzdGluZm8v
cmlmdF9fOyEhTkV0NnlNYU8tZ2shUm5XazE1alA3Y2haeDc5REJuVF9ieXFNSk91UjZFVGdhUFZS
ZmxxMmhVWkFBUHBUdjlzRTQxc0wzbEVKSWl1Nk9nJCIgdGFyZ2V0PSJfYmxhbmsiIG1vei1kby1u
b3Qtc2VuZD0idHJ1ZSI+aHR0cHM6Ly93d3cuaWV0Zi5vcmcvbWFpbG1hbi9saXN0aW5mby9yaWZ0
PC9hPg0KPC9wcmU+DQo8L2Jsb2NrcXVvdGU+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjwvZGl2
Pg0KPGJyPg0KPGZpZWxkc2V0IGNsYXNzPSJtaW1lQXR0YWNobWVudEhlYWRlciI+PC9maWVsZHNl
dD4NCjxwcmUgY2xhc3M9Im1vei1xdW90ZS1wcmUiIHdyYXA9IiI+X19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NClJJRlQgbWFpbGluZyBsaXN0DQo8YSBjbGFz
cz0ibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIiBocmVmPSJtYWlsdG86UklGVEBpZXRmLm9yZyIg
bW96LWRvLW5vdC1zZW5kPSJ0cnVlIj5SSUZUQGlldGYub3JnPC9hPg0KPGEgY2xhc3M9Im1vei10
eHQtbGluay1mcmVldGV4dCIgaHJlZj0iaHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0dHBz
Oi8vd3d3LmlldGYub3JnL21haWxtYW4vbGlzdGluZm8vcmlmdF9fOyEhTkV0NnlNYU8tZ2shUm5X
azE1alA3Y2haeDc5REJuVF9ieXFNSk91UjZFVGdhUFZSZmxxMmhVWkFBUHBUdjlzRTQxc0wzbEVK
SWl1Nk9nJCIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj5odHRwczovL3d3dy5pZXRmLm9yZy9tYWls
bWFuL2xpc3RpbmZvL3JpZnQ8L2E+DQo8L3ByZT4NCjwvYmxvY2txdW90ZT4NCjwvYmxvY2txdW90
ZT4NCjwvZGl2Pg0KPHNwYW4+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX188L3NwYW4+PGJyPg0KPHNwYW4+UklGVCBtYWlsaW5nIGxpc3Q8L3NwYW4+PGJyPg0K
PHNwYW4+UklGVEBpZXRmLm9yZzwvc3Bhbj48YnI+DQo8c3Bhbj5odHRwczovL3VybGRlZmVuc2Uu
Y29tL3YzL19faHR0cHM6Ly93d3cuaWV0Zi5vcmcvbWFpbG1hbi9saXN0aW5mby9yaWZ0X187ISFO
RXQ2eU1hTy1nayFSbldrMTVqUDdjaFp4NzlEQm5UX2J5cU1KT3VSNkVUZ2FQVlJmbHEyaFVaQUFQ
cFR2OXNFNDFzTDNsRUpJaXU2T2ckDQo8L3NwYW4+PGJyPg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+
DQo8L2JvZHk+DQo8L2h0bWw+DQo=

--_000_B3432BD54AFA4DFA807AE314518ACF28junipernet_--


From nobody Thu Jun 11 22:51:19 2020
Return-Path: <session-request@ietf.org>
X-Original-To: rift@ietf.org
Delivered-To: rift@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 507793A0940; Thu, 11 Jun 2020 22:51:17 -0700 (PDT)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: IETF Meeting Session Request Tool <session-request@ietf.org>
To: <session-request@ietf.org>
Cc: rift@ietf.org, jefftant.ietf@gmail.com, aretana.ietf@gmail.com, rift-chairs@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 7.3.1
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <159194107675.22127.12046355447582112302@ietfa.amsl.com>
Date: Thu, 11 Jun 2020 22:51:17 -0700
Archived-At: <https://mailarchive.ietf.org/arch/msg/rift/8shd36b928ZzGZ4iY4QZXqiqKoY>
Subject: [Rift] rift - New Meeting Session Request for IETF 108
X-BeenThere: rift@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Discussion of Routing in Fat Trees <rift.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rift>, <mailto:rift-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rift/>
List-Post: <mailto:rift@ietf.org>
List-Help: <mailto:rift-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rift>, <mailto:rift-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 12 Jun 2020 05:51:17 -0000

A new meeting session request has just been submitted by Jeff Tantsura, a Chair of the rift working group.


---------------------------------------------------------
Working Group Name: Routing In Fat Trees
Area Name: Routing Area
Session Requester: Jeff Tantsura


Number of Sessions: 1
Length of Session(s):  50 Minutes
Number of Attendees: 
Conflicts to Avoid: 
 Chair Conflict: idr bier bess lsr lsvr mboned pim rtgarea rtgwg spring teas nmrg







People who must be present:
  Alvaro Retana
  Zhaohui (Jeffrey) Zhang
  Jeff Tantsura

Resources Requested:

Special Requests:
  
---------------------------------------------------------



From nobody Tue Jun 30 08:01:45 2020
Return-Path: <brunorijsman@gmail.com>
X-Original-To: rift@ietfa.amsl.com
Delivered-To: rift@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 139703A1177 for <rift@ietfa.amsl.com>; Tue, 30 Jun 2020 03:21:41 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Level: 
X-Spam-Status: No, score=-2.098 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8DqmJJV_nCaG for <rift@ietfa.amsl.com>; Tue, 30 Jun 2020 03:21:39 -0700 (PDT)
Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7393C3A1175 for <rift@ietf.org>; Tue, 30 Jun 2020 03:21:38 -0700 (PDT)
Received: by mail-ed1-x52d.google.com with SMTP id by13so5777292edb.11 for <rift@ietf.org>; Tue, 30 Jun 2020 03:21:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;  h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=owJThwCknUWYjthMONQKxQSN0+T6ZLbnC1cMTwtZnMo=; b=BU3EOXmmyyQtjw13g9dO5+gNscwEqDOSBLogjh4xvaTxG8wjUIhzSW7Cdwn0HsUYhI +LGwkjEpN6Cf5JpcqQhjH9rr8IxOxQfc0IuhnD3Jdc8F1cqcQXQZvIqNcok7zV458Li+ OqketzfFJ3Cq1CgSfwCWDY0DbiFSNrUua5yRpKHS3JrsUXytRX0QMamClf1w648fUYI3 ieuP4GwhMeRzK6l1W2jnTsq2or8GwlmuZPg46YtAaQroU5giGbpZ5j5nWLa3D7aqNMzC a75oESgZVuuqu7/6zp4CXHBymMbdG700EGI8tlZIIrpszq/U96lcojWBStEA9854G6Aw P1BA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=owJThwCknUWYjthMONQKxQSN0+T6ZLbnC1cMTwtZnMo=; b=Db5TBU7X3vlX5CMjJBmjteV8djQZGTztHXu5XCf7fTQhVriGXNkWBrzddlH+rt3igz HexMdYssXWhk/sO1sIRRcD22JlPOJByMQVg8TShUz9AfE6lq7nSDjvRGUl7IXvFFKTy8 oPtkmvSgJfBs1Hp45DGBOwBP07wpTJGCpqN3ldw4hSm84GgDZloLNYzLFT46ar/pTBLj Jxmc1MR+nEkaUNeUMpgoFjHXyoBP4UqlytWS4oU6+RZ5fcOq6BzOXNyEWe/yK1jHfZYu L4uC8j8s0DiQYnPsuqGJZtq4nlIr1lca/Z41XSukAVfvUrou3kk+CwEEPUt0uyCriW+/ E5TQ==
X-Gm-Message-State: AOAM531ov2/RzTC/hC5smerxsNrQNJsSNZRsUXDQ9CiZ3bi1yhOlCTkT oOilsV09I/zwVhPj3vSas+A=
X-Google-Smtp-Source: ABdhPJzXjL2/NGItdxRy9F34CVhsN84dbLiHs3PalGeweDktPaB2jJ1gZvSx/3Gfcjm58qGxZ1NgyA==
X-Received: by 2002:a05:6402:1614:: with SMTP id f20mr21252055edv.129.1593512496763;  Tue, 30 Jun 2020 03:21:36 -0700 (PDT)
Received: from [192.168.2.13] (ip4da78921.direct-adsl.nl. [77.167.137.33]) by smtp.gmail.com with ESMTPSA id p4sm1638192eji.123.2020.06.30.03.21.33 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 30 Jun 2020 03:21:36 -0700 (PDT)
From: Bruno Rijsman <brunorijsman@gmail.com>
Message-Id: <FB7E6F7F-3BEA-4F33-866D-8598865E6D99@gmail.com>
Content-Type: multipart/alternative; boundary="Apple-Mail=_146301B1-D066-43D3-A7F8-A08728BCEF0B"
Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\))
Date: Tue, 30 Jun 2020 12:21:17 +0200
In-Reply-To: <B35D4561-DB7F-4A32-AA62-1FB68156E7B4@gmail.com>
Cc: Antoni Przygienda <prz@juniper.net>, alankar_sharma@comcast.com, "Pascal Thubert (pthubert)" <pthubert@cisco.com>, Dmitry Afanasiev <fl0w@yandex-team.ru>, zzhang_ietf@hotmail.com, wei.yuehua@zte.com.cn, mashaowen@gmail.com, xufeng.liu.ietf@gmail.com, Jeff Tantsura <jefftant.ietf@gmail.com>, "Jeffrey (Zhaohui) Zhang" <zzhang@juniper.net>, rift@ietf.org
To: zhang.zheng@zte.com.cn
References: <95E6F23B-AC7D-4379-842E-01CB1B2D2BD6@juniper.net> <202006291715550243774@zte.com.cn> <B35D4561-DB7F-4A32-AA62-1FB68156E7B4@gmail.com>
X-Mailer: Apple Mail (2.3608.60.0.2.5)
Archived-At: <https://mailarchive.ietf.org/arch/msg/rift/lj70oWlpYXhJLFbT-WF_4hQiNOU>
X-Mailman-Approved-At: Tue, 30 Jun 2020 08:01:44 -0700
Subject: Re: [Rift] Dear RIFT protocol and RIFT YANG co-author, pls review the updateof RIFT YANG model
X-BeenThere: rift@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Discussion of Routing in Fat Trees <rift.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rift>, <mailto:rift-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rift/>
List-Post: <mailto:rift@ietf.org>
List-Help: <mailto:rift-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rift>, <mailto:rift-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 30 Jun 2020 10:21:41 -0000

--Apple-Mail=_146301B1-D066-43D3-A7F8-A08728BCEF0B
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

+ mailing list

> On Jun 30, 2020, at 12:16 PM, Bruno Rijsman <brunorijsman@gmail.com> =
wrote:
>=20
> I have not yet finished reviewing the complete data model, but here =
are some initial additional comments from me:
>=20
> module: ietf-rift
>   augment =
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
>     +--rw rift!
>        +--rw node
>        |  +--rw name?                         string
>        |  +--rw level?                        level
>=20
> We need to distinguish configured-level vs derived-level (see section =
4.2.7.1. in draft-ietf-rift-rift-12).
>=20
>        |  +--rw system-id                     system-id
>        |  +--rw pod?                          uint32
>        |  +--rw overload?                     boolean
>        |  +--rw node-capability
>=20
> The neighbors container (below) should contain the capabilities =
advertised by each neighbor.
>=20
>        |  |  +--ro protocol-minor-version?   uint16
>=20
> This should not be optional; the RIFT engine always has a specific =
minor version and it is a required field in the Thrift model.
>=20
>        |  |  +--ro hierarchy-indications?    enumeration
>        |  |  +--rw flood-reducing-capable?   boolean {flood-reducing}?
>=20
> Linguistic hairsplitting: is capable the right word? If we set this to =
false, it only means that flood reduction has been disabled, not that =
the node is not capable of flood reduction.
>=20
>        |  |  +--rw nonce-delta?              uint8 =
{nonce-delta-adjust}?
>=20
> Why is this under capabilities?
>=20
>        |  +--rw lie-ipv4-multicast-address?   =
rt-types:ipv4-multicast-group-address
>        |  +--rw lie-ipv6-multicast-address?   =
rt-types:ipv6-multicast-group-address
>        |  +--rw link-capability
>=20
> The link capabilities are per link, so they should be in the neighbor =
table below.
>=20
>        |  |  +--rw bfd?                     boolean {bfd}?
>        |  |  +--rw v4-forwarding-capable?   boolean
>        |  +--rw flood-port?                   inet:port-number
>        |  +--rw lie-rx-port?                  inet:port-number
>        |  +--rw holdtime?                     =
rt-types:timer-value-seconds16
>        |  +--rw tide-generation-interval?     =
rt-types:timer-value-seconds16
>        |  +--rw tie-security-key-id?          uint32 {authentication}?
>        |  +--rw local-nonce?                  uint16
>=20
> This should be ro instead of rw
> Distinguish nonce-local (sent) versus nonce-remote (received)
> Nonces are per interface, so it should be in the neighbor table below
>=20
>        |  +--ro interfaces
>        |  |  +--ro interface* [name]
>        |  |     +--ro local-link-id?                 linkid-type
>        |  |     +--ro name                           if:interface-ref
>=20
> YANG newbie question, all tables in this document have this approach =
using 2 levels of nesting. Why is it not simply 1 level of nesting like =
this:
>=20
>   +--ro interfaces
>      +--ro interface* [name]
>      +--ro local-link-id
>      +--ro name
>      ...
>=20
>        |  |     +--ro address?                       inet:ip-address
>=20
> The address of the interface does not belong here in the RIFT model; =
there is a separate IETF YANG data model for interfaces.
> You could make an argument that the source address used for sending =
RIFT packets could be modeled; if so, must use separate fields for =
lie-ipv4-source-address, lie-ipv6-source-address (LIEs are sent BOTH on =
IPv4 and IPv6), flooding-source-address (flooding is done on IPv4 OR =
IPv6).
>=20
>        |  |     +--ro if-index?                      uint32
>=20
> Belongs in the interface YANG model, not in the RIFT YANG model.
>=20
>        |  |     +--ro direction-type?                enumeration
>        |  |     +--ro you-are-flood-repeater?        boolean
>        |  |     +--ro not-a-ztp-offer?               boolean
>        |  |     +--ro you-are-sending-too-quickly?   boolean
>        |  +--rw miscabled-links*              linkid-type
>        |  +--rw (algorithm-type)?
>        |  |  +--:(spf)
>        |  |  +--:(all-path)
>        |  +--ro hal?                          level
>        |  +--ro vol-list
>        |  |  +--ro vol* [system-id]
>        |  |     +--ro offered-level?   level
>        |  |     +--ro name?            string
>        |  |     +--ro level?           level
>        |  |     +--ro system-id        system-id
>        |  |     +--ro pod?             uint32
>        |  +--rw instance-label?               uint32
>        +--ro neighbor
>=20
> In RIFT you cannot have multiple (>1) neighbors per interface.
> Thus, a neighbor should be an optional single-element container under =
neighbor.
> Even if you do not agree with that and want to keep neighbor ourside =
of interface, it should be under node and not under rift
>=20
>        |  +--ro nbrs* [system-id]
>=20
> Spell nbrs out (neighbors)
>=20
>        |     +--ro name?           string
>        |     +--ro level?          level
>        |     +--ro system-id       system-id
>        |     +--ro pod?            uint32
>        |     +--ro address?        inet:ip-address
>        |     +--ro cost?           uint32
>        |     +--ro remote-nonce?   uint16
>        |     +--ro link-id-pair* [remote-id]
>        |     |  +--ro local-id?                uint32
>        |     |  +--ro remote-id                uint32
>        |     |  +--ro if-index?                uint32
>        |     |  +--ro if-name?                 if:interface-ref
>        |     |  +--ro bfd-up?                  boolean
>        |     |  +--ro outer-security-key-id?   uint8 {authentication}?
>        |     |  +--ro address-families
>        |     |     +--ro address-family* [address-family]
>        |     |        +--ro address-family    =
iana-rt-types:address-family
>        |     +--ro bandwidth?      uint32
>        |     +--ro state?          enumeration
>        +--ro database
>=20
> The database container should be under node and not under rift
>=20
>        |  +--ro ties* [direction-type originator tie-type tie-number]
>        |     +--ro direction-type          enumeration
>        |     +--ro originator              system-id
>        |     +--ro tie-type                enumeration
>        |     +--ro tie-number              uint32
>        |     +--ro seq?                    uint64
>        |     +--ro origination-time?       uint32
>        |     +--ro origination-lifetime?   uint32
>        |     +--ro node
>        |     |  +--ro name?              string
>        |     |  +--ro level?             level
>        |     |  +--ro system-id          system-id
>        |     |  +--ro pod?               uint32
>        |     |  +--ro node-capability
>        |     |  |  +--ro protocol-minor-version?   uint16
>        |     |  |  +--ro hierarchy-indications?    enumeration
>        |     |  |  +--ro flood-reducing-capable?   boolean =
{flood-reducing}?
>        |     |  |  +--ro nonce-delta?              uint8 =
{nonce-delta-adjust}?
>        |     |  +--ro overload?          boolean
>        |     |  +--ro startup-time?      uint64
>        |     |  +--ro neighbors* [system-id]
>        |     |  |  +--ro name?           string
>        |     |  |  +--ro level?          level
>        |     |  |  +--ro system-id       system-id
>        |     |  |  +--ro pod?            uint32
>        |     |  |  +--ro address?        inet:ip-address
>        |     |  |  +--ro cost?           uint32
>        |     |  |  +--ro remote-nonce?   uint16
>        |     |  |  +--ro link-id-pair* [remote-id]
>        |     |  |  |  +--ro local-id?                uint32
>        |     |  |  |  +--ro remote-id                uint32
>        |     |  |  |  +--ro if-index?                uint32
>        |     |  |  |  +--ro if-name?                 if:interface-ref
>        |     |  |  |  +--ro bfd-up?                  boolean
>        |     |  |  |  +--ro outer-security-key-id?   uint8 =
{authentication}?
>        |     |  |  |  +--ro address-families
>        |     |  |  |     +--ro address-family* [address-family]
>        |     |  |  |        +--ro address-family    =
iana-rt-types:address-family
>        |     |  |  +--ro bandwidth?      uint32
>        |     |  +--ro miscabled-links*   linkid-type
>        |     +--ro prefix
>        |        +--ro prefix?              inet:ip-prefix
>        |        +--ro (type)?
>        |        |  +--:(prefix)
>        |        |  +--:(positive-disaggregation)
>        |        |  +--:(negative-disaggregation)
>        |        |  +--:(external)
>        |        |  +--:(positive-external-disaggregation)
>        |        |  +--:(pgp)
>        |        +--ro metric?              uint32
>        |        +--ro tags*                uint64
>        |        +--ro monotonic-clock
>        |        |  +--ro prefix-sequence-type
>        |        |     +--ro timestamp         =
ieee802-1as-timestamp-type
>        |        |     +--ro transaction-id?   uint8
>        |        +--ro loopback?            boolean
>        |        +--ro directly-attached?   boolean
>        |        +--ro from-link?           linkid-type
>        +--ro kv-store
>           +--ro kvs* [kvs-index]
>              +--ro kvs-index    uint32
>              +--ro kvs-tie
>                 +--ro direction-type?         enumeration
>                 +--ro originator?             system-id
>                 +--ro tie-type?               enumeration
>                 +--ro tie-number?             uint32
>                 +--ro seq?                    uint64
>                 +--ro origination-time?       uint32
>                 +--ro origination-lifetime?   uint32
>                 +--ro key-value
>                    +--ro key?     uint16
>                    +--ro value?   uint32
>=20
>   notifications:
>     +---n error-set
>        +--ro tie-level-error
>        |  +--ro direction-type?         enumeration
>        |  +--ro originator?             system-id
>        |  +--ro tie-type?               enumeration
>        |  +--ro tie-number?             uint32
>        |  +--ro seq?                    uint64
>        |  +--ro origination-time?       uint32
>        |  +--ro origination-lifetime?   uint32
>        +--ro nbr-error
>=20
> Replace nbr by neighbor (spell it out)
>=20
>           +--ro nbrs* [system-id]
>              +--ro name?           string
>              +--ro level?          level
>              +--ro system-id       system-id
>              +--ro pod?            uint32
>              +--ro address?        inet:ip-address
>              +--ro cost?           uint32
>              +--ro remote-nonce?   uint16
>              +--ro link-id-pair* [remote-id]
>              |  +--ro local-id?                uint32
>              |  +--ro remote-id                uint32
>              |  +--ro if-index?                uint32
>              |  +--ro if-name?                 if:interface-ref
>              |  +--ro bfd-up?                  boolean
>              |  +--ro outer-security-key-id?   uint8 {authentication}?
>              |  +--ro address-families
>              |     +--ro address-family* [address-family]
>              |        +--ro address-family    =
iana-rt-types:address-family
>              +--ro bandwidth?      uint32
>=20


--Apple-Mail=_146301B1-D066-43D3-A7F8-A08728BCEF0B
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=us-ascii

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dus-ascii"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" class=3D"">+ =
mailing list<br class=3D""><div><br class=3D""><blockquote type=3D"cite" =
class=3D""><div class=3D"">On Jun 30, 2020, at 12:16 PM, Bruno Rijsman =
&lt;<a href=3D"mailto:brunorijsman@gmail.com" =
class=3D"">brunorijsman@gmail.com</a>&gt; wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><div =
style=3D"word-wrap: break-word; -webkit-nbsp-mode: space; =
-webkit-line-break: after-white-space;" class=3D""><font =
face=3D"Avenir-Book" style=3D"font-size: 14px;" class=3D"">I have not =
yet finished reviewing the complete data model, but here are some =
initial additional comments from me:</font><div class=3D""><br =
class=3D""></div><div class=3D""><div class=3D""><font face=3D"Courier =
New" class=3D"">module: ietf-rift</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; augment =
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:</font></=
div><div class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; =
+--rw rift!</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;+--rw node</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp;+--rw name? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp;+--rw level? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;level</font></div><div =
class=3D""><font face=3D"Courier New" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">We need to distinguish configured-level vs derived-level (see =
section 4.2.7.1. in draft-ietf-rift-rift-12).</font></div><div =
class=3D""><font face=3D"Courier New" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw system-id &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
system-id</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw pod? &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw overload? &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
boolean</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw =
node-capability</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">The neighbors container (below) should =
contain the capabilities advertised by each neighbor.</font></div><div =
class=3D""><font face=3D"Courier New" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp;+--ro =
protocol-minor-version? &nbsp; uint16</font></div><div class=3D""><font =
face=3D"Courier New" class=3D""><br class=3D""></font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">This should not be =
optional; the RIFT engine always has a specific minor version and it is =
a required field in the Thrift model.</font></div><div class=3D""><font =
face=3D"Courier New" class=3D""><br class=3D""></font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp;| &nbsp;+--ro hierarchy-indications? &nbsp; =
&nbsp;enumeration</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp;+--rw =
flood-reducing-capable? &nbsp; boolean =
{flood-reducing}?</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">Linguistic hairsplitting: is capable the =
right word? If we set this to false, it only means that flood reduction =
has been disabled, not that the node is not capable of flood =
reduction.</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| =
&nbsp;+--rw nonce-delta? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint8 {nonce-delta-adjust}?</font></div><div class=3D""><font =
face=3D"Courier New" class=3D""><br class=3D""></font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">Why is this under =
capabilities?</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw =
lie-ipv4-multicast-address? &nbsp; =
rt-types:ipv4-multicast-group-address</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw =
lie-ipv6-multicast-address? &nbsp; =
rt-types:ipv6-multicast-group-address</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw =
link-capability</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">The link capabilities are per link, so =
they should be in the neighbor table below.</font></div><div =
class=3D""><font face=3D"Courier New" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp;+--rw bfd? &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boolean =
{bfd}?</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp;+--rw =
v4-forwarding-capable? &nbsp; boolean</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw =
flood-port? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; inet:port-number</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw lie-rx-port? =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;inet:port-number</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw holdtime? =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
rt-types:timer-value-seconds16</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw =
tide-generation-interval? &nbsp; &nbsp; =
rt-types:timer-value-seconds16</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw =
tie-security-key-id? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint32 =
{authentication}?</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw local-nonce? &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint16</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">This should be ro instead of =
rw</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">Distinguish nonce-local (sent) versus nonce-remote =
(received)</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">Nonces are per interface, so it should be in the neighbor =
table below</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro =
interfaces</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp;+--ro interface* =
[name]</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro =
local-link-id? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
linkid-type</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro name =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; if:interface-ref</font></div><div class=3D""><font =
face=3D"Courier New" class=3D""><br class=3D""></font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">YANG newbie question, =
all tables in this document have this approach using 2 levels of =
nesting. Why is it not simply 1 level of nesting like =
this:</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; +--ro interfaces</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; =
&nbsp;+--ro interface* [name]</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp;+--ro =
local-link-id</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp;+--ro name</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; =
&nbsp;...</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| =
&nbsp; &nbsp; +--ro address? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inet:ip-address</font></div><div =
class=3D""><font face=3D"Courier New" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">The address of the interface does not belong here in the RIFT =
model; there is a separate IETF YANG data model for =
interfaces.</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">You could make an argument that the source address used for =
sending RIFT packets could be modeled; if so, must use separate fields =
for lie-ipv4-source-address, lie-ipv6-source-address (LIEs are sent BOTH =
on IPv4 and IPv6), flooding-source-address (flooding is done on IPv4 OR =
IPv6).</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| =
&nbsp; &nbsp; +--ro if-index? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint32</font></div><div class=3D""><font=
 face=3D"Courier New" class=3D""><br class=3D""></font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">Belongs in the =
interface YANG model, not in the RIFT YANG model.</font></div><div =
class=3D""><font face=3D"Courier New" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro =
direction-type? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;enumeration</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro =
you-are-flood-repeater? &nbsp; &nbsp; &nbsp; =
&nbsp;boolean</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro =
not-a-ztp-offer? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
boolean</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro =
you-are-sending-too-quickly? &nbsp; boolean</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp;+--rw miscabled-links* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;linkid-type</font></div><div class=3D""><font face=3D"Courier=
 New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--rw =
(algorithm-type)?</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| =
&nbsp;+--:(spf)</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| =
&nbsp;+--:(all-path)</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro hal? &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;level</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro =
vol-list</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp;+--ro vol* =
[system-id]</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro =
offered-level? &nbsp; level</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| =
&nbsp; &nbsp; +--ro name? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;string</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro =
level? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; level</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp;| &nbsp; &nbsp; +--ro system-id &nbsp; &nbsp; &nbsp; =
&nbsp;system-id</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro pod? =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uint32</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp;+--rw instance-label? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; uint32</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;+--ro =
neighbor</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">In RIFT you cannot have multiple (&gt;1) =
neighbors per interface.</font></div><div class=3D""><font face=3D"Courier=
 New" class=3D"">Thus, a neighbor should be an optional single-element =
container under neighbor.</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">Even if you do not agree with that and =
want to keep neighbor ourside of interface, it should be under node and =
not under rift</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro =
nbrs* [system-id]</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">Spell nbrs out =
(neighbors)</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; +--ro name? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
string</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; +--ro level? =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;level</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; +--ro system-id &nbsp; &nbsp; &nbsp; system-id</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; +--ro pod? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; +--ro address? =
&nbsp; &nbsp; &nbsp; &nbsp;inet:ip-address</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; +--ro cost? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; +--ro =
remote-nonce? &nbsp; uint16</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; +--ro link-id-pair* [remote-id]</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; | &nbsp;+--ro local-id? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;uint32</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
remote-id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
if-index? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
if-name? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
if:interface-ref</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
bfd-up? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;boolean</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
outer-security-key-id? &nbsp; uint8 {authentication}?</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;+--ro address-families</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp; &nbsp; +--ro address-family* =
[address-family]</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp; &nbsp; =
&nbsp; &nbsp;+--ro address-family &nbsp; =
&nbsp;iana-rt-types:address-family</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; +--ro bandwidth? &nbsp; &nbsp; &nbsp;uint32</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; +--ro state? &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;enumeration</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;+--ro database</font></div><div =
class=3D""><font face=3D"Courier New" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">The database container should be under node and not under =
rift</font></div><div class=3D""><font face=3D"Courier New" class=3D""><br=
 class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro ties* =
[direction-type originator tie-type tie-number]</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; +--ro direction-type &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;enumeration</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; +--ro originator =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;system-id</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; +--ro tie-type =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;enumeration</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; +--ro tie-number =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint32</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; +--ro seq? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint64</font></div><div class=3D""><font=
 face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; +--ro origination-time? &nbsp; &nbsp; &nbsp; =
uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; +--ro =
origination-lifetime? &nbsp; uint32</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; +--ro node</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
name? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;string</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
level? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; level</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;+--ro system-id &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;system-id</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
pod? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
node-capability</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| =
&nbsp;+--ro protocol-minor-version? &nbsp; uint16</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;+--ro hierarchy-indications? =
&nbsp; &nbsp;enumeration</font></div><div class=3D""><font face=3D"Courier=
 New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| =
&nbsp;+--ro flood-reducing-capable? &nbsp; boolean =
{flood-reducing}?</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| =
&nbsp;+--ro nonce-delta? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint8 {nonce-delta-adjust}?</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; | &nbsp;+--ro overload? &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;boolean</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
startup-time? &nbsp; &nbsp; &nbsp;uint64</font></div><div class=3D""><font=
 face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; | &nbsp;+--ro neighbors* [system-id]</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;+--ro name? &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; string</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| =
&nbsp;+--ro level? &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;level</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| =
&nbsp;+--ro system-id &nbsp; &nbsp; &nbsp; system-id</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;+--ro pod? &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp;uint32</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; | &nbsp;| &nbsp;+--ro address? &nbsp; &nbsp; &nbsp; =
&nbsp;inet:ip-address</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| =
&nbsp;+--ro cost? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| =
&nbsp;+--ro remote-nonce? &nbsp; uint16</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; | &nbsp;| &nbsp;+--ro link-id-pair* [remote-id]</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;| &nbsp;+--ro local-id? &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint32</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;| &nbsp;+--ro remote-id &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint32</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;| &nbsp;+--ro if-index? &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint32</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;| &nbsp;+--ro if-name? &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
if:interface-ref</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;| =
&nbsp;+--ro bfd-up? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;boolean</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| =
&nbsp;| &nbsp;+--ro outer-security-key-id? &nbsp; uint8 =
{authentication}?</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;| =
&nbsp;+--ro address-families</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; | &nbsp;| &nbsp;| &nbsp; &nbsp; +--ro address-family* =
[address-family]</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;| &nbsp;| =
&nbsp; &nbsp; &nbsp; &nbsp;+--ro address-family &nbsp; =
&nbsp;iana-rt-types:address-family</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; | &nbsp;| &nbsp;+--ro bandwidth? &nbsp; &nbsp; =
&nbsp;uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp;+--ro =
miscabled-links* &nbsp; linkid-type</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; +--ro prefix</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; =
&nbsp;+--ro prefix? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;inet:ip-prefix</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; =
&nbsp;+--ro (type)?</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp;+--:(prefix)</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; &nbsp; &nbsp;| =
&nbsp;+--:(positive-disaggregation)</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; &nbsp; &nbsp;| =
&nbsp;+--:(negative-disaggregation)</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; &nbsp; &nbsp;| &nbsp;+--:(external)</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;| =
&nbsp;+--:(positive-external-disaggregation)</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--:(pgp)</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;+--ro metric? &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;uint32</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; &nbsp; &nbsp;+--ro tags* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp;uint64</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; &nbsp; &nbsp;+--ro monotonic-clock</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro =
prefix-sequence-type</font></div><div class=3D""><font face=3D"Courier =
New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp; &nbsp; +--ro timestamp &nbsp; &nbsp; &nbsp; &nbsp; =
ieee802-1as-timestamp-type</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; +--ro transaction-id? &nbsp; =
uint8</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;+--ro =
loopback? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;boolean</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;+--ro =
directly-attached? &nbsp; boolean</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; &nbsp; &nbsp;+--ro from-link? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
linkid-type</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;+--ro kv-store</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; +--ro kvs* [kvs-index]</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;+--ro kvs-index &nbsp; &nbsp;uint32</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;+--ro kvs-tie</font></div><div class=3D""><font=
 face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; +--ro direction-type? &nbsp; &nbsp; &nbsp; &nbsp; =
enumeration</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--ro =
originator? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
system-id</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--ro =
tie-type? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
enumeration</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--ro =
tie-number? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--ro =
seq? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint64</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--ro =
origination-time? &nbsp; &nbsp; &nbsp; uint32</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--ro origination-lifetime? &nbsp; =
uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--ro =
key-value</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;+--ro key? &nbsp; &nbsp; uint16</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+--ro value? &nbsp; =
uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; notifications:</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; +---n =
error-set</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;+--ro =
tie-level-error</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro direction-type? =
&nbsp; &nbsp; &nbsp; &nbsp; enumeration</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro =
originator? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
system-id</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro tie-type? &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enumeration</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp;| &nbsp;+--ro tie-number? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro seq? &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint64</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro origination-time? =
&nbsp; &nbsp; &nbsp; uint32</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro =
origination-lifetime? &nbsp; uint32</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp;+--ro =
nbr-error</font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">Replace nbr by neighbor (spell it =
out)</font></div><div class=3D""><font face=3D"Courier New" class=3D""><br=
 class=3D""></font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--ro nbrs* =
[system-id]</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+--ro name? =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;+--ro level? &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;level</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+--ro =
system-id &nbsp; &nbsp; &nbsp; system-id</font></div><div class=3D""><font=
 face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;+--ro pod? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+--ro =
address? &nbsp; &nbsp; &nbsp; &nbsp;inet:ip-address</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;+--ro cost? &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; uint32</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+--ro =
remote-nonce? &nbsp; uint16</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;+--ro link-id-pair* [remote-id]</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro local-id? &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uint32</font></div><div class=3D""><font=
 face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;| &nbsp;+--ro remote-id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp;uint32</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;| &nbsp;+--ro if-index? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp;uint32</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;| &nbsp;+--ro if-name? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; if:interface-ref</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;| &nbsp;+--ro bfd-up? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;boolean</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;| &nbsp;+--ro outer-security-key-id? &nbsp; uint8 =
{authentication}?</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;+--ro =
address-families</font></div><div class=3D""><font face=3D"Courier New" =
class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; =
&nbsp; +--ro address-family* [address-family]</font></div><div =
class=3D""><font face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;+--ro =
address-family &nbsp; =
&nbsp;iana-rt-types:address-family</font></div><div class=3D""><font =
face=3D"Courier New" class=3D"">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp;+--ro bandwidth? &nbsp; &nbsp; =
&nbsp;uint32</font></div></div><div class=3D""><br =
class=3D""></div></div></div></blockquote></div><br =
class=3D""></body></html>=

--Apple-Mail=_146301B1-D066-43D3-A7F8-A08728BCEF0B--

