From ec05adaa9fac8278b48e4cc460aa382a38819a48 Mon Sep 17 00:00:00 2001 From: Ameya Deshpande Date: Fri, 13 Aug 2021 23:33:03 +0000 Subject: [PATCH] nix-vector-routing: Update doc on IPv6, examples and usage --- src/nix-vector-routing/doc/figures/nms.png | Bin 0 -> 52737 bytes .../doc/nix-vector-routing.rst | 178 ++++++++++++++++-- 2 files changed, 161 insertions(+), 17 deletions(-) create mode 100644 src/nix-vector-routing/doc/figures/nms.png diff --git a/src/nix-vector-routing/doc/figures/nms.png b/src/nix-vector-routing/doc/figures/nms.png new file mode 100644 index 0000000000000000000000000000000000000000..c7866d6819fc94817434fa3400df1e1806b97528 GIT binary patch literal 52737 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 n2 -> n3. + +Let's see how the nix-vector will be generated for this path: + +n0 has 2 neighbors i.e. n1 and n3. n0 is connected to both using +separate net-devices. But the net-device for n0 -- n1 p2p link was +created before the netdevice for n0 -- n2 p2p link. Thus, n2 has +neighbor-index of 1 (n1 has 0) with respect to n0. + +n2 has 3 neighbors i.e. n1, n3 and n0. The n2 net-device for n1 -- n2 +p2p link was created before the n2 net-device for n2 -- n3 p2p link +which was before the n2 netdevice for n0 -- n2 p2p link. This, n3 +has neighbor-index of 01 (n1 has 00 and n0 has 10) with repect to n2. + +Thus, the nix-vector for the path from n0 to n3 is 101. + +.. note:: + This neighbor-index or nix-index has total number of bits equal to + minimum number of bits required to represent all the neighbors in + their binary form. + +.. note:: + If there are multiple netdevices connected to the current netdevice + on the channel then it depends on which order netdevices were added + to the channel. + + #. Using IPv4: + .. code-block:: bash + + # By default IPv4 network is selected + ./waf --run src/nix-vector-routing/examples/nix-simple + + #. Using IPv6: + .. code-block:: bash + + # Set ip as "v6" explicity + ./waf --run "src/nix-vector-routing/examples/nix-simple --useIPv6" + +* nms-p2p-nix.cc + +This example demonstrates the advantage of Nix-Vector routing as Nix +performs source-based routing (BFS) to have faster routing. + +.. image:: figures/nms.png + :alt: NMS P2P Network Diagram + + #. Using IPv4: + .. code-block:: bash + + # By default IPv4 network is selected + ./waf --run src/nix-vector-routing/examples/nms-p2p-nix + + #. Using IPv6: + .. code-block:: bash + + # Set ip as "v6" explicity + ./waf --run "src/nix-vector-routing/examples/nms-p2p-nix --useIPv6" + +* nix-simple-multi-address.cc + +This is an IPv4 example demonstrating multiple interface addresses. This +example also shows how address assignment in between the simulation causes +the all the route caches and Nix caches to flush. + +.. code-block:: bash + + # By default IPv4 network is selected + ./waf --run src/nix-vector-routing/examples/nix-simple-multi-address