Re: [Rift] RIFT protocol implementation

Leonardo Alberro Zimmermann <lalberro@fing.edu.uy> Sat, 06 June 2020 21:51 UTC

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, 06 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

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