= 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 "_ script where __ 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 "_. 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 + _"./pcap_vpp.sh vppA 3"_ + . to observe packet flow use _"watch_int_vpp.sh"_ script + e.g. ./watch_int_vpp.sh + _"./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 (shows routing table and filter matches by destination IP)