core-extra/docs/tutorials/tutorial1.md
2023-06-05 13:07:59 -07:00

7.9 KiB

Tutorial 1 - Wired Network

Overview

This tutorial will cover some use cases when using a wired 2 node scenario in CORE.

Files

Below is the list of files used for this tutorial.

  • 2 node wired scenario
    • scenario.xml
    • scenario.py
  • 2 node wired scenario, with n1 running the "Chat App Server" service
    • scenario_service.xml
    • scenario_service.py

Running this Tutorial

This section covers interactions that can be carried out for this scenario.

Our scenario has the following nodes and addresses:

  • n1 - 10.0.0.20
  • n2 - 10.0.0.21

All usages below assume a clean scenario start.

Using Ping

Using the command line utility ping can be a good way to verify connectivity between nodes in CORE.

  • Make sure the CORE daemon is running a terminal, if not already
    sudop core-daemon
    
  • In another terminal run the GUI
    core-gui
    
  • In the GUI menu bar select File->Open..., then navigate to and select scenario.xml

  • You can now click on the Start Session button to run the scenario

  • Open a terminal on n1 by double clicking it in the GUI
  • Run the following in n1 terminal
    ping -c 3 10.0.0.21
    
  • You should see the following output
    PING 10.0.0.21 (10.0.0.21) 56(84) bytes of data.
    64 bytes from 10.0.0.21: icmp_seq=1 ttl=64 time=0.085 ms
    64 bytes from 10.0.0.21: icmp_seq=2 ttl=64 time=0.079 ms
    64 bytes from 10.0.0.21: icmp_seq=3 ttl=64 time=0.072 ms
    
    --- 10.0.0.21 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 1999ms
    rtt min/avg/max/mdev = 0.072/0.078/0.085/0.011 ms
    

Using Tcpdump

Using tcpdump can be very beneficial for examining a network. You can verify traffic being sent/received among many other uses.

  • Make sure the CORE daemon is running a terminal, if not already
    sudop core-daemon
    
  • In another terminal run the GUI
    core-gui
    
  • In the GUI menu bar select File->Open..., then navigate to and select scenario.xml

  • You can now click on the Start Session button to run the scenario

  • Open a terminal on n1 by double clicking it in the GUI
  • Open a terminal on n2 by double clicking it in the GUI
  • Run the following in n2 terminal
    tcpdump -lenni eth0
    
  • Run the following in n1 terminal
    ping -c 1 10.0.0.21
    
  • You should see the following in n2 terminal
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    10:23:04.685292 00:00:00:aa:00:00 > 00:00:00:aa:00:01, ethertype IPv4 (0x0800), length 98: 10.0.0.20 > 10.0.0.21: ICMP echo request, id 67, seq 1, length 64
    10:23:04.685329 00:00:00:aa:00:01 > 00:00:00:aa:00:00, ethertype IPv4 (0x0800), length 98: 10.0.0.21 > 10.0.0.20: ICMP echo reply, id 67, seq 1, length 64
    

You can edit links between nodes in CORE to modify loss, delay, bandwidth, and more. This can be beneficial for understanding how software will behave in adverse conditions.

  • Make sure the CORE daemon is running a terminal, if not already
    sudop core-daemon
    
  • In another terminal run the GUI
    core-gui
    
  • In the GUI menu bar select File->Open..., then navigate to and select scenario.xml

  • You can now click on the Start Session button to run the scenario

  • Right click the link between n1 and n2
  • Select Configure

  • Update the loss to 25

  • Open a terminal on n1 by double clicking it in the GUI
  • Run the following in n1 terminal
    ping -c 10 10.0.0.21
    
  • You should see something similar for the summary output, reflecting the change in loss
    --- 10.0.0.21 ping statistics ---
    10 packets transmitted, 6 received, 40% packet loss, time 9000ms
    rtt min/avg/max/mdev = 0.077/0.093/0.108/0.016 ms
    
  • Remember that the loss above is compounded, since a ping and the loss applied occurs in both directions

Running Software

We will now leverage the installed Chat App software to stand up a server and client within the nodes of our scenario.

  • Make sure the CORE daemon is running a terminal, if not already
    sudop core-daemon
    
  • In another terminal run the GUI
    core-gui
    
  • In the GUI menu bar select File->Open..., then navigate to and select scenario.xml

  • You can now click on the Start Session button to run the scenario

  • Open a terminal on n1 by double clicking it in the GUI
  • Run the following in n1 terminal
    export PATH=$PATH:/usr/local/bin
    chatapp-server
    
  • Open a terminal on n2 by double clicking it in the GUI
  • Run the following in n2 terminal
    export PATH=$PATH:/usr/local/bin
    chatapp-client -a 10.0.0.20
    
  • You will see the following output in n1 terminal
    chat server listening on: :9001
    [server] 10.0.0.21:44362 joining
    
  • Type the following in n2 terminal and hit enter
    hello world
    
  • You will see the following output in n1 terminal
    chat server listening on: :9001
    [server] 10.0.0.21:44362 joining
    [10.0.0.21:44362] hello world
    

Tailing a Log

In this case we are using the service based scenario. This will automatically start and run the Chat App Server on n1 and log to a file. This case will demonstrate using tail -f to observe the output of running software.

  • Make sure the CORE daemon is running a terminal, if not already
    sudop core-daemon
    
  • In another terminal run the GUI
    core-gui
    
  • In the GUI menu bar select File->Open..., then navigate to and select scenario_service.xml

  • You can now click on the Start Session button to run the scenario

  • Open a terminal on n1 by double clicking it in the GUI
  • Run the following in n1 terminal
    tail -f chatapp.log
    
  • Open a terminal on n2 by double clicking it in the GUI
  • Run the following in n2 terminal
    export PATH=$PATH:/usr/local/bin
    chatapp-client -a 10.0.0.20
    
  • You will see the following output in n1 terminal
    chat server listening on: :9001
    [server] 10.0.0.21:44362 joining
    
  • Type the following in n2 terminal and hit enter
    hello world
    
  • You will see the following output in n1 terminal
    chat server listening on: :9001
    [server] 10.0.0.21:44362 joining
    [10.0.0.21:44362] hello world
    

--8<-- "tutorials/common/grpc.md"