From 1528ed5d01ddd8a0de14711de59861d16f727a3e Mon Sep 17 00:00:00 2001
From: Michal Cmarada <michal.cmarada@pantheon.tech>
Date: Fri, 15 Jun 2018 10:37:14 +0200
Subject: Add SRv6 5 node docker demo

This demo is intended to test SRv6 implementation. There are
two options how to run the demo. First one is to use VPP only
configuration and the second one uses honeycomb to configure
SRv6 on nodes.

For detailed information about the demo read documentation in
./asciidoc/Readme.adoc file. Follow the instructions to run
the demo and use provided commands to verify the operation
of VPP nodes.

Change-Id: I7d17db0096cc48b06e9148e7c78faaf9d7b8a97d
Signed-off-by: Michal Cmarada <michal.cmarada@pantheon.tech>
---
 examples/docker/SRv6_5-node/asciidoc/Readme.adoc | 87 ++++++++++++++++++++++++
 1 file changed, 87 insertions(+)
 create mode 100644 examples/docker/SRv6_5-node/asciidoc/Readme.adoc

(limited to 'examples/docker/SRv6_5-node/asciidoc/Readme.adoc')

diff --git a/examples/docker/SRv6_5-node/asciidoc/Readme.adoc b/examples/docker/SRv6_5-node/asciidoc/Readme.adoc
new file mode 100644
index 000000000..275159632
--- /dev/null
+++ b/examples/docker/SRv6_5-node/asciidoc/Readme.adoc
@@ -0,0 +1,87 @@
+= SRv6-5 node Demo
+
+Requirements::
+
+- docker
+- deb packages for honeycomb (hc2vpp) and vpp
+
+Usage::
+
+. download or build vpp and honeycomb deb packages and place them inside _"../packages"_ folder:
+- honeycomb-*.deb (hc2vpp is required, use _"hc2vpp/packaging/deb/xenial/debuild.sh"_ to build deb package locally)
+- vpp-*.deb
+- vpp-lib*.deb
+- vpp-plugins*.deb
+- you can download vpp packages from
+https://nexus.fd.io/content/repositories/fd.io.master.ubuntu.xenial.main/io/fd/[Nexus Fd.io]
+
+. Run the script _"./create_image.sh"_ in parent directory to create docker image with HC and VPP pre-installed.
+It should be added to docker automatically (a tar file of the image can be created as backup, see content of
+create_image.sh).
+. Start the demo using _"start_demo.sh <demo_type>"_ script where _<demo_type>_ is _"vpp"_ for vpp only setup or _"hc"_
+for setup with honeycomb
+. Clean everything with "clean_demo.sh" script
+. if you need to restart the whole demo use _"restart_demo.sh <demo_type>"_. You don't have to use the same demo type as
+in start_demo script. Current setup will be cleaned and started as a fresh demo.
+
+Topology::
+
+- 5VPP nodes (*vppA* = A::, *vppB* = B::, *vppC* = C::, *vppD* = D::, *vppE* = E::)
+- each node was preassigned with IPv6 addresses on host-veth interfaces (marked red)
+- green dashed line represents how traffic should flow from source to the destination
+- blue dashed line represents return traffic from destination back to source
+
+image::resources/SRv6-5node.svg[SRv6 5node topology]
+
+Testing/debuging::
+
+. to list configuration for all nodes use `./show_configuration.sh` script
+. to test ping for IPv6 use:
+- *hostA:* +
+_sudo ip netns exec VNET_A ping6 E::1_ +
+_sudo ip netns exec VNET_A ping6 E::1 -c 1000 -s 1024 -i 0.0001_ (for bigger flow)
+- *hostE:* +
+_sudo ip netns exec VNET_E ping6 A::1_ +
+_sudo ip netns exec VNET_E ping6 A::1 -c 1000 -s 1024 -i 0.0001_ (for bigger flow)
+
+
+
+. to run packet trace simply use _"pcap_vpp.sh"_ script +
+e.g. ./pcap_vpp.sh <nodeName> <packetCount> +
+_"./pcap_vpp.sh vppA 3"_ +
+
+
+. to observe packet flow use _"watch_int_vpp.sh"_ script +
+e.g. ./watch_int_vpp.sh <nodeName> +
+_"./watch_int_vpp.sh vppA"_
+
+. to check the packet flow on hostE use tcpdump: +
+`sudo ip netns exec VNET_E tcpdump -i vethE -vv -c 4`
+
+Sample packet capture on hostE::
+....
+sudo ip netns exec VNET_E tcpdump -i vethE -vv -c 4
+
+tcpdump: listening on vethE, link-type EN10MB (Ethernet), capture size 262144 bytes
+12:21:00.210165 IP6 (flowlabel 0x3d90e, hlim 62, next-header ICMPv6 (58) payload length: 64) a::1 > e::1: [icmp6 sum ok] ICMP6, echo request, seq 285
+12:21:00.210250 IP6 (flowlabel 0x8fd85, hlim 64, next-header ICMPv6 (58) payload length: 64) e::1 > a::1: [icmp6 sum ok] ICMP6, echo reply, seq 285
+12:21:01.213350 IP6 (flowlabel 0x3d90e, hlim 62, next-header ICMPv6 (58) payload length: 64) a::1 > e::1: [icmp6 sum ok] ICMP6, echo request, seq 286
+12:21:01.213435 IP6 (flowlabel 0x8fd85, hlim 64, next-header ICMPv6 (58) payload length: 64) e::1 > a::1: [icmp6 sum ok] ICMP6, echo reply, seq 286
+4 packets captured
+4 packets received by filter
+0 packets dropped by kernel
+....
+
+Usefull VPP commands::
+
+Note: to use vpp commands for this demo use syntax like this: +
+`"sudo docker exec vppC vppctl sh hardware"`
+
+- vppctl show hardware (show interfaces with L2 addresses)
+- vppctl show int (show interfaces with counters)
+- vppctl show int address (show interfaces with L3 addresses)
+- vppctl show sr localsids (shows local sid table)
+- vppctl show sr policies (list of configured SR policies)
+- vppctl show sr steering-policies (list of configured steering SR policies)
+- vppctl show ip6 fib (shows routing table)
+- vppctl show ip6 fib <dst_ip_mask> (shows routing table and filter matches by destination IP)
-- 
cgit 1.2.3-korg

