Changes between Version 21 and Version 22 of Workshops/Sig Comm2022/Mininet Optical


Ignore:
Timestamp:
Aug 21, 2022, 6:17:01 PM (2 years ago)
Author:
rajag
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Workshops/Sig Comm2022/Mininet Optical

    v21 v22  
    216216Mininet-Optical CLI commands may be entered at the `mininet-optical>` prompt.
    217217
    218 ----
     218= Controller Configuration =
     219
     220Now that we have the topology setup for the network, we want to configure the lightpaths and pass packets using [https://datatracker.ietf.org/group/netconf/about/ NETCONF], which is network management protocol for software defined networks. We have this configuration in the file [https://github.com/Mininet-Optical/mininet-optical/blob/cosmos-tutorial/mnoptical/examples/config-sigcommtutorial.py examples/config-sigcommtutorial.py], which we require to run from another terminal window.
     221
     222(Note: if you want to use the X11 features of Mininet, such as the `xterm` or `plot` commands, you may need to use `sudo HOME=~` rather than just `sudo`.)
     223
     224If you don't have one open already, open up another terminal window with the below instructions. For ease of use, we will call this terminal-2 hereafter:
     225
     226== Opening another terminal window in Orbit == #point1
     227
     2281. Open another terminal window in your computer/laptop (Linux:CTRL+ALT+T, Mac: CMD+T, Windows: CTRL+Shift+T)
     2292. SSH to Orbit console with your username. This is the same step used to login to Orbit console in hardware tutorial [wiki:/Workshops/SigComm2022/SignupInstructions] according to your assigned group.
     230
     231{{{
     232#!shell-session
     233user@local-computer:~$ ssh user@<console-name>
     234}}}
     235
     2363. Connect to the node where Mininet-Optical is installed. This <node> is the same where you are logged in the previous terminal window.
     237
     238{{{
     239#!shell-session
     240user@console:~$ ssh root@<node>
     241}}}
     242
     2434. Enter source directory
     244
     245{{{#!shell-session
     246root@<node>:# cd ~/mininet-optical
     247root@<node>:~/mininet-optical#
     248}}}
     249
     250Unless specified otherwise, all of the configuration commands below should
     251be entered in terminal-2 at the shell prompt.
     252All of these configurations can be performed by Python scripts developed to work with the COSMOS test-bed. The Python commands send NETCONF commands to the ROADM.
     253
     254== Running the configuration script ==
     255
     256Run the script with the following command in terminal-2
     257{{{#!shell-session
     258root@node:~/mininet-optical# bash -x ./examples/config-sigcommtutorial.sh
     259}}}
     260
     261This executes the configuration file which establishes the ground connections first and turns on the transceivers.
     262
     263Mininet-Optical's `Terminal` is the equivalent of the ToR switch
     264which contains Ethernet interfaces as well as WDM transceivers. Instead of using a Cisco-style CLI to configure it, we use its
     265default REST API.
     266
     267As noted above, 194.35 THz corresponds to channel C61 on Mininet-Optical's default 50GHz channel grid. C1's middle frequency is 191350 GHz, so C61 is at 191350 + 60*50 = 194350 GHz.
     268
     269We walk through this script below to deep dive into what's happening:
     270
     2711. Connect Ethernet interfaces to Transceivers and set channel
     272
     273{{{#!bash
     274curl "$swda_co1/connect?node=swda-co1&ethPort=1&wdmPort=320&wdmInPort=321&channel=61"
     275curl "$swda_lg1/connect?node=swda-lg1&ethPort=2&wdmPort=290&wdmInPort=291&channel=61"
     276curl "$swda_lg1/connect?node=swda-lg1&ethPort=3&wdmPort=310&wdmInPort=311&channel=61"
     277}}}
     278
     2792. Turn on all transceivers and comb sources
     280
     281{{{#!bash
     282curl "$swda_co1/turn_on?node=swda-co1"
     283curl "$swda_lg1/turn_on?node=swda-lg1"
     284curl "$comb1/turn_on?node=comb1"
     285curl "$comb2/turn_on?node=comb2"
     286}}}
     287
     2883. [=#point3 Configure Ethernet interfaces and assign IP addresses]:
     289
     290{{{#!bash
     291...
     292m=~/mininet/util/m
     293...
     294$m srv1_co1 ifconfig srv1_co1-eth0 192.168.1.1/24
     295$m srv1_lg1 ifconfig srv1_lg1-eth0 192.168.1.2/24
     296$m srv2_lg1 ifconfig srv2_lg1-eth0 192.168.1.3/24
     297}}}
     298
     299Note that `~/mininet/util/m` can be used to 'log in' to any one of the servers much as you would with `ssh` (but it actually spawns a shell in the appropriate `cgroup`/network namespace.)
     300
     301----
     302
     303=== Performing base test configuration
     304
     305Once you execute the script, the script will ask for a prompt to perform a base test. This test pings 'srv-co1' to 'srv-lg1'; and pings 'srv-co1' to 'srv2_lg1' without establishing any lightpath connections between ROADMS. Press `Return` key to perform the base test.
     306
     307{{{#!shell-session
     308*** Base test before configuration
     309press return to test base configuration>
     310...
     311*** srv1_co1 pinging srv1_lg1
     312PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
     313From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
     314From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
     315From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
     316
     317--- 192.168.1.2 ping statistics ---
     3183 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2168ms
     319...
     320*** srv1_co1 pinging srv2_lg1
     321PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
     322From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
     323From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
     324From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
     325
     326--- 192.168.1.3 ping statistics ---
     3273 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2192ms
     328}}}
     329
     330As expected, none of the servers are able to ping each other because lightpath connections have not been established as of yet.
     331
     332=== Ping Servers Manually ===
     333
     334You can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps:
     335
     3361. Go back to terminal-1 to the mininet-optical CLI. Here you can ping one server from another to check the connection between them. Let's try to ping srv1_lg1 from srv1_co1 using the command `srv1_co1 ping -c3 srv1_lg1` as shown below:
     337{{{#!shell-session
     338mininet-optical> srv1_co1 ping -c3 srv1_lg1
     339PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
     340From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
     341From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
     342From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
     343
     344--- 10.0.0.2 ping statistics ---
     3453 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2081ms
     346}}}
     3472. You should also try to ping srv2_lg1 from srv1_co1 using the below command:
     348{{{#!shell-session
     349mininet-optical> srv1_co1 ping -c3 srv2_lg1
     350PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
     351From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
     352From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
     353From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
     354
     355--- 10.0.0.3 ping statistics ---
     3563 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2142ms
     357}}}
     358
     359As expected, you cannot ping srv1_lg1 and srv2_lg1 from srv1_co1 right now, because no  connections have been established.
     360
     361== Configuring ROADMs
     362
     363ROADMs in Mininet-Optical may be configured via several mechanisms. An internal Python API may be used for configuration within the script that creates the network. More realistically, two external SDN/RPC control interfaces are provided: a simple REST interface and a more realistic NETCONF interface which is partially compatible with the NETCONF interface of the hardware Lumentum ROADM20.
     364
     365For this tutorial, we are using NETCONF interface to configure the ROADMs to closely match the interface used in hardware experiment.
     366
     367=== MUX/DEMUX configuration ===
     368
     369As a reminder, here are the ROADM port numbers:
     370
     371* **rdm1-co1**:
     372        MUX IN/OUT (ADD1/LINEOUT) port: 4101/4201[[BR]]
     373        DEMUX IN/OUT (LINEIN/DROP1)port: 5101/5201
     374* **rdm1-lg1**:
     375        MUX IN/OUT (ADD1/LINEOUT) port: 4101/4201[[BR]]
     376        DEMUX IN/OUT (LINEIN/DROP1) port: 5101/5201
     377* **rdm2-lg1**:
     378        MUX IN/OUT (ADD1/LINEOUT) port: 4101/4201[[BR]]
     379        DEMUX IN/OUT (LINEIN/DROP1) port: 5101/5201
     380* **rdm2-co1**:
     381        MUX IN/OUT (ADD1/LINEOUT) port: 4101/5201[[BR]]
     382        DEMUX IN/OUT (LINEIN/DROP1) port: 5101/5201
     383
     384Note that the servers are connected to ADD2/DROP2 `[4102/5202]` while ADD11/DROP11 `[4111/5211]` are used
     385as passthrough ports between rdm1-lg1 and rdm2-lg1.
     386
     387''Also note that these port numbers are the same as the hardware
     388tutorial page.''
     389
     390== Network Interfaces Configuration for Experiment-1 (short-hop) ==
     391
     392In Experiment 1, we are choosing to pass the optical signal through 1 hop (via a pair of 10km fiber spools). This requires us to establish a connection between rdm1-co1 and rdm1-lg1.
     393Once you perform the base test as described above, the script will prompt you to press `Return` key to perform the test for configuration 1. Before trying the configuration, let's dive into what connections this script will install:
     394
     395=== Configuring srv1_co1<==>srv1_lg1 Connection 1 on Mininet-Optical using NETCONF ===
     396
     397
     398The NETCONF servers for `rdm1-co1` and `rdm1-lg1` are listening on `localhost` at ports 1834 and 1831, respectively.
     399We will use the `examples/nc_add_connection.py` script to configure connections using NETCONF.
     400
     401{{{#!bash
     402testdir=$(dirname $0)
     403addc=$testdir/nc_add_connection.py
     404rdm1co1_netconf=localhost:1834
     405rdm1lg1_netconf=localhost:1831
     406}}}
     407
     408* **rdm1-co1**:
     4091. Enable MUX port 4102 “From sw-da-co1”
     4102. Add Connection “Exp1_From_sw-da-co1” with Input/ Output Port 4102/4201 with bandwidth [194.30;194.40] THz
     4113. Enable DEMUX port 5202 “Toward sw-da-co1”
     4124. Add Connection “Exp1_Toward_sw-da-co1” with I/O Port 5101/5202
     413
     414    Note that MUX/ADD/LINEOUT is module 1 and DEMUX/DROP/LINEIN is module 2. We are calling all of our connections connection 10. The interfaces are `in-service` and `blocked` is `false`. The 5 is an attenuation setting which may currently be ignored in Mininet-Optical.
     415
     416{{{#!bash
     417$addc $rdm1co1_netconf 1 10 in-service false 4102 4201 194300 194400 5 Exp1_From_sw-da-co1
     418$addc $rdm1co1_netconf 2 10 in-service false 5101 5202 194300 194400 5 Exp1-Toward_sw-da_co1
     419}}}
     420
     421* **rdm1-lg1**:
     4225. Enable MUX port 4102 “From sw-da-lg1”
     4236. Add Connection “Exp1_From_sw-da-lg1” with I/O Port 4102/4201 with bandwidth [194.30;194.40] THz
     4247. Enable DEMUX port 5202 “Towards sw-da-lg1”
     4258. Add Connection “Exp1_Towards_sw-da-lg1” with I/O Port 5101/5202
     426
     427{{{#!bash
     428$addc $rdm1lg1_netconf 1 10 in-service false 4102 4201 194300 194400 5 Exp1_From_sw-da-lg1
     429$addc $rdm1lg1_netconf 2 10 in-service false 5101 5202 194300 194400 5 Exp1_Toward_sw-da-lg1
     430}}}
     431
     432----
     433
     434=== Performing Experiment 1 and results
     435
     436Now you can try installing the above lightpaths by yourself. Go to terminal-2, and as prompted by the terminal, press `Return` to install the configuration and perform the test. This will establish the connections between ROADMs as described above, which you can also view with the lines printed.
     437
     438
     439{{{#!shell-session
     440...
     441*** Test configuration 1
     442press return to configure and test configuration 1>
     443...
     444*** Installing ROADM configuration 1 for srv1_co1<-->srv1_lg1 (NETCONF)
     445...
     446*** srv1_co1 pinging srv1_lg1
     447PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
     44864 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.724 ms
     44964 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.164 ms
     45064 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.130 ms
     451
     452--- 192.168.1.2 ping statistics ---
     4533 packets transmitted, 3 received, 0% packet loss, time 2130ms
     454rtt min/avg/max/mdev = 0.130/0.339/0.724/0.272 ms
     455
     456...
     457
     458*** srv1_co1 pinging srv2_lg1
     459PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
     460From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
     461From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
     462From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
     463
     464--- 192.168.1.3 ping statistics ---
     4653 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2192ms
     466}}}
     467
     468As expected, srv1_co1 and srv1_lg1 are able to ping each other because we established the ROADM rules for short-hop configuration. Consequently, srv1_co1 and srv2_lg1 are not able to ping each other because no such connection is established yet.
     469
     470Note that the average ping time for srv1_co1 to srv1_lg1 is 0.339 ms.
     471
     472''Note that the Mininet-Optical ROADM dataplane is currently modeled using OvS switching in the Linux kernel, so each hop will add some delay that would not be seen on hardware. Process scheduling, OS and VM overhead, etc. can create additional delays in a software emulator.''
     473
     474
     475=== Ping Servers Manually ===
     476
     477Like before, you can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps:
     478
     4791. Go back to terminal-1 to the mininet-optical CLI. Here you can ping one server from another to check the connection between them. Let's try to ping srv1_lg1 from srv1_co1 using the command `srv1_co1 ping -c3 srv1_lg1` as shown below:
     480{{{#!shell-session
     481mininet-optical> srv1_co1 ping -c3 srv1_lg1
     482PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
     48364 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.377 ms
     48464 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.166 ms
     48564 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.170 ms
     486
     487--- 192.168.1.2 ping statistics ---
     4883 packets transmitted, 3 received, 0% packet loss, time 2114ms
     489rtt min/avg/max/mdev = 0.166/0.237/0.377/0.098 ms
     490}}}
     4912. You should also try to ping srv2_lg1 from srv1_co1 using the below command:
     492{{{#!shell-session
     493mininet-optical> srv1_co1 ping -c3 srv2_lg1
     494PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
     495From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
     496From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
     497From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
     498
     499--- 10.0.0.3 ping statistics ---
     5003 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2142ms
     501}}}
     502
     503As expected, after installing configuration of Experiment 1, you should only be able to ping srv1_lg1 from srv1_co1.
     504
     505
     506== Network Interfaces Configuration for Experiment-2 (long-hop)
     507
     508In Experiment 2, we are choosing to pass the optical signal through 2 hops (via a pair of 10km fiber spools with the 32km Manhattan dark fiber). This requires us to establish a connection between srv1_co1 and srv2_lg1. Once you perform the experiment 1 as described above, the script will prompt you to press Return key to perform the test for configuration 2. Before trying the configuration, let's dive into what connections this script will install:
     509
     510=== Configuring srv1_co1<==>srv2_lg1 connection on Mininet-Optical using NETCONF ===
     511
     512The NETCONF servers for `rdm1-co1` and `rdm1-lg1` are listening on `localhost` at ports 1834 and 1831 as Experiment 1. We are configuring `rdm2-lg1' and 'rdm2-co1` to listen at ports 1832 and 1833 respectively.
     513Like Experiment 1 we are using `examples/nc_add_connection.py` script to configure connections using NETCONF.
     514
     515{{{#!bash
     516testdir=$(dirname $0)
     517addc=$testdir/nc_add_connection.py
     518rdm1co1_netconf=localhost:1834
     519rdm1lg1_netconf=localhost:1831
     520rdm2lg1_netconf=localhost:1832
     521rdm2co1_netconf=localhost:1833
     522}}}
     523
     524* **rdm1-co1** ''(Same configuration as for Experiment 1)'':
     5251. Enable MUX port 4102 “From sw-da-co1”
     5262. Add Connection “Exp2_From_sw-da-co1” with I/O Port 4102/4201 with bandwidth [194.30;194.40] THz
     5273. Enable DEMUX port 5202 “Toward sw-da-co1”
     5284. Add Connection “Exp2_Toward_sw-da-co1” with I/O Port 5101/5202 with bandwidth [194.30;194.40] THz
     529
     530{{{#!bash
     531$addc $rdm1co1_netconf 1 10 in-service false 4102 4201 194300 194400 5 Exp2_From_sw-da-co1
     532$addc $rdm1co1_netconf 2 10 in-service false 5101 5202 194300 194400 5 Exp2_Toward_sw-da-co1
     533}}}
     534----
     535* **rdm1-lg1** ''(Different configuration from Experiment 1)'':
     5365. Enable MUX port 4111 “Through Port”
     5376. Add East-bound Connection “Exp2_East_rdm1-lg1” with I/O Port 4111/4201 with bandwidth [194.30;194.40] THz
     5387. Enable DEMUX port 5211 “Through Port”
     5398. Add West-bound Connection “Exp2_West_rdm1-lg1” with I/O Port 5101/5211 with bandwidth [194.30;194.40] THz
     540
     541    This time we pass channel 61 through rdm1-lg1:
     542
     543{{{#!bash
     544$addc $rdm1lg1_netconf 1 10 in-service false 4111 4201 194300 194400 5 Exp2_East_rdm1-lg1
     545$addc $rdm1lg1_netconf 2 10 in-service false 5101 5211 194300 194400 5 Exp2_West_rdm1-lg1
     546}}}
     547----
     548* **rdm2-lg1**:
     5499. Enable MUX port 4111 “Through Port”
     55010. Add East-bound Connection “Exp2_East_rdm2-lg1” with I/O Port 4111/4201 with bandwidth [194.30;194.40] THz
     55111. Enable DEMUX port 5211 “Through Port”
     55212. Add West-bound Connection “Exp2_West_rdm2-lg1” with I/O Port 5101/5211 with bandwidth [194.30;194.40] THz
     553
     554    And pass through rdm2-lg1:
     555
     556{{{#!bash
     557$addc $rdm2lg1_netconf 1 10 in-service false 4111 4201 194300 194400 5 Exp2_East_rdm2-lg1
     558$addc $rdm2lg1_netconf 2 10 in-service false 5101 5211 194300 194400 5 Exp2_West_rdm2-lg1
     559}}}
     560----
     561* **rdm2-co1** ''(Same As For rdm1-co1)'':
     56213. Enable MUX port 4102 “From sw-da-lg1”
     56314. Add Connection “Exp2_From_sw-da-lg1” with I/O Port 4102/4201 with bandwidth [194.30;194.40]
     56415. Enable DEMUX port 5202 “Towards sw-da-lg1”
     56516. Add Connection “Exp2_Towards_sw-da-lg1” with I/O Port 5101/5202 with bandwidth [194.30;194.40]
     566
     567    And we drop at rdm2-co1:
     568
     569{{{#!bash
     570$addc $rdm2co1_netconf 1 10 in-service false 4102 4201 194300 194400 5 Exp2_From_sw-da-lg1
     571$addc $rdm2co1_netconf 2 10 in-service false 5101 5202 194300 194400 5 Exp2_Toward_sw-da_lg1
     572}}}
     573----
     574=== Performing Experiment 2 and Results
     575
     576Now you can try installing the above lightpaths for Experiment 2 by yourself. Go to terminal-2, and as prompted by the terminal, press `Return` to install the configuration and perform the test. This will establish the connections between ROADMs as described above, which you can also view with the lines printed.
     577
     578{{{#!shell-session
     579...
     580*** Test Experiment 2
     581press return to configure and perform Experiment 2>
     582...
     583*** Installing ROADM configuration for srv1_co1<-->srv2_lg1 (NETCONF)
     584...
     585*** srv1_co1 pinging srv1_lg1
     586PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
     587From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
     588From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
     589From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
     590
     591--- 192.168.1.2 ping statistics ---
     5923 packets transmitted, 0 received, 100% packet loss, time 2070ms
     593
     594...
     595
     596*** srv1_co1 pinging srv2_lg1
     597PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
     59864 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.21 ms
     59964 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.385 ms
     60064 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.430 ms
     601
     602--- 192.168.1.3 ping statistics ---
     6033 packets transmitted, 3 received, 0% packet loss, time 2072ms
     604rtt min/avg/max/mdev = 0.385/0.675/1.211/0.379 ms
     605}}}
     606
     607
     608As expected, srv1_co1 and srv2_lg1 are able to ping each other because we established the ROADM rules for long-hop configuration. Consequently, as opposed to Experiment 1, srv1_co1 and srv1_lg1 are not able to ping each other because no such connection is established yet.
     609
     610Note that the average ping time for srv1_co1 to srv2_lg1 is 0.675 ms, and the average ping time for srv1_co1 to srv1_lg1 in Experiment 1 is 0.339 ms. Observe the slightly longer RTT to `srv2_lg1`, reflecting the increased propagation time across two 32km fibers to reach the "Central Cloud" data center.
     611
     612=== Ping Servers Manually ===
     613
     614Like before, you can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps:
     615
     6161. Go back to terminal-1 to the mininet-optical CLI. Here you can ping one server from another to check the connection between them. Let's try to ping srv1_lg1 from srv1_co1 using the command `srv1_co1 ping -c3 srv1_lg1` as shown below:
     617{{{#!shell-session
     618mininet-optical> srv1_co1 ping -c3 srv1_lg1
     619PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
     620From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
     621From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
     622From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
     623
     624--- 192.168.1.2 ping statistics ---
     6253 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2134ms
     626}}}
     6272. You should also try to ping srv2_lg1 from srv1_co1 using the below command:
     628{{{#!shell-session
     629mininet-optical> srv1_co1 ping -c3 srv2_lg1
     630PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
     63164 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.685 ms
     63264 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.424 ms
     63364 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.416 ms
     634
     635--- 192.168.1.3 ping statistics ---
     6363 packets transmitted, 3 received, 0% packet loss, time 2192ms
     637rtt min/avg/max/mdev = 0.416/0.508/0.685/0.124 ms
     638}}}
     639
     640As expected, after installing configuration of Experiment 2, you should not be able to ping srv1_lg1 from srv1_co1. But because the ROADMs are configured for the long-hop connection, you can successfully ping srv2_lg1 from srv1_co1.
     641
     642= Shutting down Mininet-Optical =
     643
     644To exit Mininet-Optical, type `exit` or press control-D at the `mininet-optical>` prompt.
     645
    219646
    220647== Mininet-Optical API ==
     
    355782}}}
    356783
    357 = Controller Configuration =
    358 
    359 Now that we have the topology setup for the network, we want to configure the lightpaths and pass packets using [https://datatracker.ietf.org/group/netconf/about/ NETCONF], which is network management protocol for software defined networks. We have this configuration in the file [https://github.com/Mininet-Optical/mininet-optical/blob/cosmos-tutorial/mnoptical/examples/config-sigcommtutorial.py examples/config-sigcommtutorial.py], which we require to run from another terminal window.
    360 
    361 (Note: if you want to use the X11 features of Mininet, such as the `xterm` or `plot` commands, you may need to use `sudo HOME=~` rather than just `sudo`.)
    362 
    363 If you don't have one open already, open up another terminal window with the below instructions. For ease of use, we will call this terminal-2 hereafter:
    364 
    365 == Opening another terminal window in Orbit == #point1
    366 
    367 1. Open another terminal window in your computer/laptop (Linux:CTRL+ALT+T, Mac: CMD+T, Windows: CTRL+Shift+T)
    368 2. SSH to Orbit console with your username. This is the same step used to login to Orbit console in hardware tutorial [wiki:/Workshops/SigComm2022/SignupInstructions] according to your assigned group.
    369 
    370 {{{
    371 #!shell-session
    372 user@local-computer:~$ ssh user@<console-name>
    373 }}}
    374 
    375 3. Connect to the node where Mininet-Optical is installed. This <node> is the same where you are logged in the previous terminal window.
    376 
    377 {{{
    378 #!shell-session
    379 user@console:~$ ssh root@<node>
    380 }}}
    381 
    382 4. Enter source directory
    383 
    384 {{{#!shell-session
    385 root@<node>:# cd ~/mininet-optical
    386 root@<node>:~/mininet-optical#
    387 }}}
    388 
    389 Unless specified otherwise, all of the configuration commands below should
    390 be entered in terminal-2 at the shell prompt.
    391 All of these configurations can be performed by Python scripts developed to work with the COSMOS test-bed. The Python commands send NETCONF commands to the ROADM.
    392 
    393 == Running the configuration script ==
    394 
    395 Run the script with the following command in terminal-2
    396 {{{#!shell-session
    397 root@node:~/mininet-optical# bash -x ./examples/config-sigcommtutorial.sh
    398 }}}
    399 
    400 This executes the configuration file which establishes the ground connections first and turns on the transceivers.
    401 
    402 Mininet-Optical's `Terminal` is the equivalent of the ToR switch
    403 which contains Ethernet interfaces as well as WDM transceivers. Instead of using a Cisco-style CLI to configure it, we use its
    404 default REST API.
    405 
    406 As noted above, 194.35 THz corresponds to channel C61 on Mininet-Optical's default 50GHz channel grid. C1's middle frequency is 191350 GHz, so C61 is at 191350 + 60*50 = 194350 GHz.
    407 
    408 We walk through this script below to deep dive into what's happening:
    409 
    410 1. Connect Ethernet interfaces to Transceivers and set channel
    411 
    412 {{{#!bash
    413 curl "$swda_co1/connect?node=swda-co1&ethPort=1&wdmPort=320&wdmInPort=321&channel=61"
    414 curl "$swda_lg1/connect?node=swda-lg1&ethPort=2&wdmPort=290&wdmInPort=291&channel=61"
    415 curl "$swda_lg1/connect?node=swda-lg1&ethPort=3&wdmPort=310&wdmInPort=311&channel=61"
    416 }}}
    417 
    418 2. Turn on all transceivers and comb sources
    419 
    420 {{{#!bash
    421 curl "$swda_co1/turn_on?node=swda-co1"
    422 curl "$swda_lg1/turn_on?node=swda-lg1"
    423 curl "$comb1/turn_on?node=comb1"
    424 curl "$comb2/turn_on?node=comb2"
    425 }}}
    426 
    427 3. [=#point3 Configure Ethernet interfaces and assign IP addresses]:
    428 
    429 {{{#!bash
    430 ...
    431 m=~/mininet/util/m
    432 ...
    433 $m srv1_co1 ifconfig srv1_co1-eth0 192.168.1.1/24
    434 $m srv1_lg1 ifconfig srv1_lg1-eth0 192.168.1.2/24
    435 $m srv2_lg1 ifconfig srv2_lg1-eth0 192.168.1.3/24
    436 }}}
    437 
    438 Note that `~/mininet/util/m` can be used to 'log in' to any one of the servers much as you would with `ssh` (but it actually spawns a shell in the appropriate `cgroup`/network namespace.)
    439 
    440 ----
    441 
    442 === Performing base test configuration
    443 
    444 Once you execute the script, the script will ask for a prompt to perform a base test. This test pings 'srv-co1' to 'srv-lg1'; and pings 'srv-co1' to 'srv2_lg1' without establishing any lightpath connections between ROADMS. Press `Return` key to perform the base test.
    445 
    446 {{{#!shell-session
    447 *** Base test before configuration
    448 press return to test base configuration>
    449 ...
    450 *** srv1_co1 pinging srv1_lg1
    451 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    452 From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
    453 From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
    454 From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
    455 
    456 --- 192.168.1.2 ping statistics ---
    457 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2168ms
    458 ...
    459 *** srv1_co1 pinging srv2_lg1
    460 PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
    461 From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
    462 From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
    463 From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
    464 
    465 --- 192.168.1.3 ping statistics ---
    466 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2192ms
    467 }}}
    468 
    469 As expected, none of the servers are able to ping each other because lightpath connections have not been established as of yet.
    470 
    471 === Ping Servers Manually ===
    472 
    473 You can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps:
    474 
    475 1. Go back to terminal-1 to the mininet-optical CLI. Here you can ping one server from another to check the connection between them. Let's try to ping srv1_lg1 from srv1_co1 using the command `srv1_co1 ping -c3 srv1_lg1` as shown below:
    476 {{{#!shell-session
    477 mininet-optical> srv1_co1 ping -c3 srv1_lg1
    478 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
    479 From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
    480 From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
    481 From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
    482 
    483 --- 10.0.0.2 ping statistics ---
    484 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2081ms
    485 }}}
    486 2. You should also try to ping srv2_lg1 from srv1_co1 using the below command:
    487 {{{#!shell-session
    488 mininet-optical> srv1_co1 ping -c3 srv2_lg1
    489 PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
    490 From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
    491 From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
    492 From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
    493 
    494 --- 10.0.0.3 ping statistics ---
    495 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2142ms
    496 }}}
    497 
    498 As expected, you cannot ping srv1_lg1 and srv2_lg1 from srv1_co1 right now, because no  connections have been established.
    499 
    500 == Configuring ROADMs
    501 
    502 ROADMs in Mininet-Optical may be configured via several mechanisms. An internal Python API may be used for configuration within the script that creates the network. More realistically, two external SDN/RPC control interfaces are provided: a simple REST interface and a more realistic NETCONF interface which is partially compatible with the NETCONF interface of the hardware Lumentum ROADM20.
    503 
    504 For this tutorial, we are using NETCONF interface to configure the ROADMs to closely match the interface used in hardware experiment.
    505 
    506 === MUX/DEMUX configuration ===
    507 
    508 As a reminder, here are the ROADM port numbers:
    509 
    510 * **rdm1-co1**:
    511         MUX IN/OUT (ADD1/LINEOUT) port: 4101/4201[[BR]]
    512         DEMUX IN/OUT (LINEIN/DROP1)port: 5101/5201
    513 * **rdm1-lg1**:
    514         MUX IN/OUT (ADD1/LINEOUT) port: 4101/4201[[BR]]
    515         DEMUX IN/OUT (LINEIN/DROP1) port: 5101/5201
    516 * **rdm2-lg1**:
    517         MUX IN/OUT (ADD1/LINEOUT) port: 4101/4201[[BR]]
    518         DEMUX IN/OUT (LINEIN/DROP1) port: 5101/5201
    519 * **rdm2-co1**:
    520         MUX IN/OUT (ADD1/LINEOUT) port: 4101/5201[[BR]]
    521         DEMUX IN/OUT (LINEIN/DROP1) port: 5101/5201
    522 
    523 Note that the servers are connected to ADD2/DROP2 `[4102/5202]` while ADD11/DROP11 `[4111/5211]` are used
    524 as passthrough ports between rdm1-lg1 and rdm2-lg1.
    525 
    526 ''Also note that these port numbers are the same as the hardware
    527 tutorial page.''
    528 
    529 == Network Interfaces Configuration for Experiment-1 (short-hop) ==
    530 
    531 In Experiment 1, we are choosing to pass the optical signal through 1 hop (via a pair of 10km fiber spools). This requires us to establish a connection between rdm1-co1 and rdm1-lg1.
    532 Once you perform the base test as described above, the script will prompt you to press `Return` key to perform the test for configuration 1. Before trying the configuration, let's dive into what connections this script will install:
    533 
    534 === Configuring srv1_co1<==>srv1_lg1 Connection 1 on Mininet-Optical using NETCONF ===
    535 
    536 
    537 The NETCONF servers for `rdm1-co1` and `rdm1-lg1` are listening on `localhost` at ports 1834 and 1831, respectively.
    538 We will use the `examples/nc_add_connection.py` script to configure connections using NETCONF.
    539 
    540 {{{#!bash
    541 testdir=$(dirname $0)
    542 addc=$testdir/nc_add_connection.py
    543 rdm1co1_netconf=localhost:1834
    544 rdm1lg1_netconf=localhost:1831
    545 }}}
    546 
    547 * **rdm1-co1**:
    548 1. Enable MUX port 4102 “From sw-da-co1”
    549 2. Add Connection “Exp1_From_sw-da-co1” with Input/ Output Port 4102/4201 with bandwidth [194.30;194.40] THz
    550 3. Enable DEMUX port 5202 “Toward sw-da-co1”
    551 4. Add Connection “Exp1_Toward_sw-da-co1” with I/O Port 5101/5202
    552 
    553     Note that MUX/ADD/LINEOUT is module 1 and DEMUX/DROP/LINEIN is module 2. We are calling all of our connections connection 10. The interfaces are `in-service` and `blocked` is `false`. The 5 is an attenuation setting which may currently be ignored in Mininet-Optical.
    554 
    555 {{{#!bash
    556 $addc $rdm1co1_netconf 1 10 in-service false 4102 4201 194300 194400 5 Exp1_From_sw-da-co1
    557 $addc $rdm1co1_netconf 2 10 in-service false 5101 5202 194300 194400 5 Exp1-Toward_sw-da_co1
    558 }}}
    559 
    560 * **rdm1-lg1**:
    561 5. Enable MUX port 4102 “From sw-da-lg1”
    562 6. Add Connection “Exp1_From_sw-da-lg1” with I/O Port 4102/4201 with bandwidth [194.30;194.40] THz
    563 7. Enable DEMUX port 5202 “Towards sw-da-lg1”
    564 8. Add Connection “Exp1_Towards_sw-da-lg1” with I/O Port 5101/5202
    565 
    566 {{{#!bash
    567 $addc $rdm1lg1_netconf 1 10 in-service false 4102 4201 194300 194400 5 Exp1_From_sw-da-lg1
    568 $addc $rdm1lg1_netconf 2 10 in-service false 5101 5202 194300 194400 5 Exp1_Toward_sw-da-lg1
    569 }}}
    570 
    571 ----
    572 
    573 === Performing Experiment 1 and results
    574 
    575 Now you can try installing the above lightpaths by yourself. Go to terminal-2, and as prompted by the terminal, press `Return` to install the configuration and perform the test. This will establish the connections between ROADMs as described above, which you can also view with the lines printed.
    576 
    577 
    578 {{{#!shell-session
    579 ...
    580 *** Test configuration 1
    581 press return to configure and test configuration 1>
    582 ...
    583 *** Installing ROADM configuration 1 for srv1_co1<-->srv1_lg1 (NETCONF)
    584 ...
    585 *** srv1_co1 pinging srv1_lg1
    586 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    587 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.724 ms
    588 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.164 ms
    589 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.130 ms
    590 
    591 --- 192.168.1.2 ping statistics ---
    592 3 packets transmitted, 3 received, 0% packet loss, time 2130ms
    593 rtt min/avg/max/mdev = 0.130/0.339/0.724/0.272 ms
    594 
    595 ...
    596 
    597 *** srv1_co1 pinging srv2_lg1
    598 PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
    599 From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
    600 From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
    601 From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
    602 
    603 --- 192.168.1.3 ping statistics ---
    604 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2192ms
    605 }}}
    606 
    607 As expected, srv1_co1 and srv1_lg1 are able to ping each other because we established the ROADM rules for short-hop configuration. Consequently, srv1_co1 and srv2_lg1 are not able to ping each other because no such connection is established yet.
    608 
    609 Note that the average ping time for srv1_co1 to srv1_lg1 is 0.339 ms.
    610 
    611 ''Note that the Mininet-Optical ROADM dataplane is currently modeled using OvS switching in the Linux kernel, so each hop will add some delay that would not be seen on hardware. Process scheduling, OS and VM overhead, etc. can create additional delays in a software emulator.''
    612 
    613 
    614 === Ping Servers Manually ===
    615 
    616 Like before, you can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps:
    617 
    618 1. Go back to terminal-1 to the mininet-optical CLI. Here you can ping one server from another to check the connection between them. Let's try to ping srv1_lg1 from srv1_co1 using the command `srv1_co1 ping -c3 srv1_lg1` as shown below:
    619 {{{#!shell-session
    620 mininet-optical> srv1_co1 ping -c3 srv1_lg1
    621 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    622 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.377 ms
    623 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.166 ms
    624 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.170 ms
    625 
    626 --- 192.168.1.2 ping statistics ---
    627 3 packets transmitted, 3 received, 0% packet loss, time 2114ms
    628 rtt min/avg/max/mdev = 0.166/0.237/0.377/0.098 ms
    629 }}}
    630 2. You should also try to ping srv2_lg1 from srv1_co1 using the below command:
    631 {{{#!shell-session
    632 mininet-optical> srv1_co1 ping -c3 srv2_lg1
    633 PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
    634 From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
    635 From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
    636 From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
    637 
    638 --- 10.0.0.3 ping statistics ---
    639 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2142ms
    640 }}}
    641 
    642 As expected, after installing configuration of Experiment 1, you should only be able to ping srv1_lg1 from srv1_co1.
    643 
    644 
    645 == Network Interfaces Configuration for Experiment-2 (long-hop)
    646 
    647 In Experiment 2, we are choosing to pass the optical signal through 2 hops (via a pair of 10km fiber spools with the 32km Manhattan dark fiber). This requires us to establish a connection between srv1_co1 and srv2_lg1. Once you perform the experiment 1 as described above, the script will prompt you to press Return key to perform the test for configuration 2. Before trying the configuration, let's dive into what connections this script will install:
    648 
    649 === Configuring srv1_co1<==>srv2_lg1 connection on Mininet-Optical using NETCONF ===
    650 
    651 The NETCONF servers for `rdm1-co1` and `rdm1-lg1` are listening on `localhost` at ports 1834 and 1831 as Experiment 1. We are configuring `rdm2-lg1' and 'rdm2-co1` to listen at ports 1832 and 1833 respectively.
    652 Like Experiment 1 we are using `examples/nc_add_connection.py` script to configure connections using NETCONF.
    653 
    654 {{{#!bash
    655 testdir=$(dirname $0)
    656 addc=$testdir/nc_add_connection.py
    657 rdm1co1_netconf=localhost:1834
    658 rdm1lg1_netconf=localhost:1831
    659 rdm2lg1_netconf=localhost:1832
    660 rdm2co1_netconf=localhost:1833
    661 }}}
    662 
    663 * **rdm1-co1** ''(Same configuration as for Experiment 1)'':
    664 1. Enable MUX port 4102 “From sw-da-co1”
    665 2. Add Connection “Exp2_From_sw-da-co1” with I/O Port 4102/4201 with bandwidth [194.30;194.40] THz
    666 3. Enable DEMUX port 5202 “Toward sw-da-co1”
    667 4. Add Connection “Exp2_Toward_sw-da-co1” with I/O Port 5101/5202 with bandwidth [194.30;194.40] THz
    668 
    669 {{{#!bash
    670 $addc $rdm1co1_netconf 1 10 in-service false 4102 4201 194300 194400 5 Exp2_From_sw-da-co1
    671 $addc $rdm1co1_netconf 2 10 in-service false 5101 5202 194300 194400 5 Exp2_Toward_sw-da-co1
    672 }}}
    673 ----
    674 * **rdm1-lg1** ''(Different configuration from Experiment 1)'':
    675 5. Enable MUX port 4111 “Through Port”
    676 6. Add East-bound Connection “Exp2_East_rdm1-lg1” with I/O Port 4111/4201 with bandwidth [194.30;194.40] THz
    677 7. Enable DEMUX port 5211 “Through Port”
    678 8. Add West-bound Connection “Exp2_West_rdm1-lg1” with I/O Port 5101/5211 with bandwidth [194.30;194.40] THz
    679 
    680     This time we pass channel 61 through rdm1-lg1:
    681 
    682 {{{#!bash
    683 $addc $rdm1lg1_netconf 1 10 in-service false 4111 4201 194300 194400 5 Exp2_East_rdm1-lg1
    684 $addc $rdm1lg1_netconf 2 10 in-service false 5101 5211 194300 194400 5 Exp2_West_rdm1-lg1
    685 }}}
    686 ----
    687 * **rdm2-lg1**:
    688 9. Enable MUX port 4111 “Through Port”
    689 10. Add East-bound Connection “Exp2_East_rdm2-lg1” with I/O Port 4111/4201 with bandwidth [194.30;194.40] THz
    690 11. Enable DEMUX port 5211 “Through Port”
    691 12. Add West-bound Connection “Exp2_West_rdm2-lg1” with I/O Port 5101/5211 with bandwidth [194.30;194.40] THz
    692 
    693     And pass through rdm2-lg1:
    694 
    695 {{{#!bash
    696 $addc $rdm2lg1_netconf 1 10 in-service false 4111 4201 194300 194400 5 Exp2_East_rdm2-lg1
    697 $addc $rdm2lg1_netconf 2 10 in-service false 5101 5211 194300 194400 5 Exp2_West_rdm2-lg1
    698 }}}
    699 ----
    700 * **rdm2-co1** ''(Same As For rdm1-co1)'':
    701 13. Enable MUX port 4102 “From sw-da-lg1”
    702 14. Add Connection “Exp2_From_sw-da-lg1” with I/O Port 4102/4201 with bandwidth [194.30;194.40]
    703 15. Enable DEMUX port 5202 “Towards sw-da-lg1”
    704 16. Add Connection “Exp2_Towards_sw-da-lg1” with I/O Port 5101/5202 with bandwidth [194.30;194.40]
    705 
    706     And we drop at rdm2-co1:
    707 
    708 {{{#!bash
    709 $addc $rdm2co1_netconf 1 10 in-service false 4102 4201 194300 194400 5 Exp2_From_sw-da-lg1
    710 $addc $rdm2co1_netconf 2 10 in-service false 5101 5202 194300 194400 5 Exp2_Toward_sw-da_lg1
    711 }}}
    712 ----
    713 === Performing Experiment 2 and Results
    714 
    715 Now you can try installing the above lightpaths for Experiment 2 by yourself. Go to terminal-2, and as prompted by the terminal, press `Return` to install the configuration and perform the test. This will establish the connections between ROADMs as described above, which you can also view with the lines printed.
    716 
    717 {{{#!shell-session
    718 ...
    719 *** Test Experiment 2
    720 press return to configure and perform Experiment 2>
    721 ...
    722 *** Installing ROADM configuration for srv1_co1<-->srv2_lg1 (NETCONF)
    723 ...
    724 *** srv1_co1 pinging srv1_lg1
    725 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    726 From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
    727 From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
    728 From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
    729 
    730 --- 192.168.1.2 ping statistics ---
    731 3 packets transmitted, 0 received, 100% packet loss, time 2070ms
    732 
    733 ...
    734 
    735 *** srv1_co1 pinging srv2_lg1
    736 PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
    737 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.21 ms
    738 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.385 ms
    739 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.430 ms
    740 
    741 --- 192.168.1.3 ping statistics ---
    742 3 packets transmitted, 3 received, 0% packet loss, time 2072ms
    743 rtt min/avg/max/mdev = 0.385/0.675/1.211/0.379 ms
    744 }}}
    745 
    746 
    747 As expected, srv1_co1 and srv2_lg1 are able to ping each other because we established the ROADM rules for long-hop configuration. Consequently, as opposed to Experiment 1, srv1_co1 and srv1_lg1 are not able to ping each other because no such connection is established yet.
    748 
    749 Note that the average ping time for srv1_co1 to srv2_lg1 is 0.675 ms, and the average ping time for srv1_co1 to srv1_lg1 in Experiment 1 is 0.339 ms. Observe the slightly longer RTT to `srv2_lg1`, reflecting the increased propagation time across two 32km fibers to reach the "Central Cloud" data center.
    750 
    751 === Ping Servers Manually ===
    752 
    753 Like before, you can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps:
    754 
    755 1. Go back to terminal-1 to the mininet-optical CLI. Here you can ping one server from another to check the connection between them. Let's try to ping srv1_lg1 from srv1_co1 using the command `srv1_co1 ping -c3 srv1_lg1` as shown below:
    756 {{{#!shell-session
    757 mininet-optical> srv1_co1 ping -c3 srv1_lg1
    758 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    759 From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
    760 From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
    761 From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
    762 
    763 --- 192.168.1.2 ping statistics ---
    764 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2134ms
    765 }}}
    766 2. You should also try to ping srv2_lg1 from srv1_co1 using the below command:
    767 {{{#!shell-session
    768 mininet-optical> srv1_co1 ping -c3 srv2_lg1
    769 PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
    770 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.685 ms
    771 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.424 ms
    772 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.416 ms
    773 
    774 --- 192.168.1.3 ping statistics ---
    775 3 packets transmitted, 3 received, 0% packet loss, time 2192ms
    776 rtt min/avg/max/mdev = 0.416/0.508/0.685/0.124 ms
    777 }}}
    778 
    779 As expected, after installing configuration of Experiment 2, you should not be able to ping srv1_lg1 from srv1_co1. But because the ROADMs are configured for the long-hop connection, you can successfully ping srv2_lg1 from srv1_co1.
    780 
    781 = Shutting down Mininet-Optical =
    782 
    783 To exit Mininet-Optical, type `exit` or press control-D at the `mininet-optical>` prompt.
    784784
    785785= References =
     786
     787Mininet-Optical documentation: https://mininet-optical.org
    786788
    787789COSMOS Optical Hardware Testbed Tutorial: [wiki:Workshops/SigComm2022/OpticalTutorial]
     
    793795https://github.com/Mininet-Optical/mininet-optical/blob/cosmos-tutorial/mnoptical/examples/config-sigcommtutorial.sh
    794796
    795 Mininet-Optical documentation: https://mininet-optical.org
    796 
    797797Mininet-Optical code: https://github.com/mininet-optical/mininet-optical
    798798