218 | | ---- |
| 218 | = Controller Configuration = |
| 219 | |
| 220 | 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. |
| 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 | |
| 224 | 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: |
| 225 | |
| 226 | == Opening another terminal window in Orbit == #point1 |
| 227 | |
| 228 | 1. Open another terminal window in your computer/laptop (Linux:CTRL+ALT+T, Mac: CMD+T, Windows: CTRL+Shift+T) |
| 229 | 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. |
| 230 | |
| 231 | {{{ |
| 232 | #!shell-session |
| 233 | user@local-computer:~$ ssh user@<console-name> |
| 234 | }}} |
| 235 | |
| 236 | 3. 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 |
| 240 | user@console:~$ ssh root@<node> |
| 241 | }}} |
| 242 | |
| 243 | 4. Enter source directory |
| 244 | |
| 245 | {{{#!shell-session |
| 246 | root@<node>:# cd ~/mininet-optical |
| 247 | root@<node>:~/mininet-optical# |
| 248 | }}} |
| 249 | |
| 250 | Unless specified otherwise, all of the configuration commands below should |
| 251 | be entered in terminal-2 at the shell prompt. |
| 252 | 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. |
| 253 | |
| 254 | == Running the configuration script == |
| 255 | |
| 256 | Run the script with the following command in terminal-2 |
| 257 | {{{#!shell-session |
| 258 | root@node:~/mininet-optical# bash -x ./examples/config-sigcommtutorial.sh |
| 259 | }}} |
| 260 | |
| 261 | This executes the configuration file which establishes the ground connections first and turns on the transceivers. |
| 262 | |
| 263 | Mininet-Optical's `Terminal` is the equivalent of the ToR switch |
| 264 | which contains Ethernet interfaces as well as WDM transceivers. Instead of using a Cisco-style CLI to configure it, we use its |
| 265 | default REST API. |
| 266 | |
| 267 | 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. |
| 268 | |
| 269 | We walk through this script below to deep dive into what's happening: |
| 270 | |
| 271 | 1. Connect Ethernet interfaces to Transceivers and set channel |
| 272 | |
| 273 | {{{#!bash |
| 274 | curl "$swda_co1/connect?node=swda-co1ðPort=1&wdmPort=320&wdmInPort=321&channel=61" |
| 275 | curl "$swda_lg1/connect?node=swda-lg1ðPort=2&wdmPort=290&wdmInPort=291&channel=61" |
| 276 | curl "$swda_lg1/connect?node=swda-lg1ðPort=3&wdmPort=310&wdmInPort=311&channel=61" |
| 277 | }}} |
| 278 | |
| 279 | 2. Turn on all transceivers and comb sources |
| 280 | |
| 281 | {{{#!bash |
| 282 | curl "$swda_co1/turn_on?node=swda-co1" |
| 283 | curl "$swda_lg1/turn_on?node=swda-lg1" |
| 284 | curl "$comb1/turn_on?node=comb1" |
| 285 | curl "$comb2/turn_on?node=comb2" |
| 286 | }}} |
| 287 | |
| 288 | 3. [=#point3 Configure Ethernet interfaces and assign IP addresses]: |
| 289 | |
| 290 | {{{#!bash |
| 291 | ... |
| 292 | m=~/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 | |
| 299 | 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.) |
| 300 | |
| 301 | ---- |
| 302 | |
| 303 | === Performing base test configuration |
| 304 | |
| 305 | 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. |
| 306 | |
| 307 | {{{#!shell-session |
| 308 | *** Base test before configuration |
| 309 | press return to test base configuration> |
| 310 | ... |
| 311 | *** srv1_co1 pinging srv1_lg1 |
| 312 | PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
| 313 | From 192.168.1.1 icmp_seq=1 Destination Host Unreachable |
| 314 | From 192.168.1.1 icmp_seq=2 Destination Host Unreachable |
| 315 | From 192.168.1.1 icmp_seq=3 Destination Host Unreachable |
| 316 | |
| 317 | --- 192.168.1.2 ping statistics --- |
| 318 | 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2168ms |
| 319 | ... |
| 320 | *** srv1_co1 pinging srv2_lg1 |
| 321 | PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. |
| 322 | From 192.168.1.1 icmp_seq=1 Destination Host Unreachable |
| 323 | From 192.168.1.1 icmp_seq=2 Destination Host Unreachable |
| 324 | From 192.168.1.1 icmp_seq=3 Destination Host Unreachable |
| 325 | |
| 326 | --- 192.168.1.3 ping statistics --- |
| 327 | 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2192ms |
| 328 | }}} |
| 329 | |
| 330 | As 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 | |
| 334 | You can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps: |
| 335 | |
| 336 | 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: |
| 337 | {{{#!shell-session |
| 338 | mininet-optical> srv1_co1 ping -c3 srv1_lg1 |
| 339 | PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. |
| 340 | From 10.0.0.1 icmp_seq=1 Destination Host Unreachable |
| 341 | From 10.0.0.1 icmp_seq=2 Destination Host Unreachable |
| 342 | From 10.0.0.1 icmp_seq=3 Destination Host Unreachable |
| 343 | |
| 344 | --- 10.0.0.2 ping statistics --- |
| 345 | 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2081ms |
| 346 | }}} |
| 347 | 2. You should also try to ping srv2_lg1 from srv1_co1 using the below command: |
| 348 | {{{#!shell-session |
| 349 | mininet-optical> srv1_co1 ping -c3 srv2_lg1 |
| 350 | PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data. |
| 351 | From 10.0.0.1 icmp_seq=1 Destination Host Unreachable |
| 352 | From 10.0.0.1 icmp_seq=2 Destination Host Unreachable |
| 353 | From 10.0.0.1 icmp_seq=3 Destination Host Unreachable |
| 354 | |
| 355 | --- 10.0.0.3 ping statistics --- |
| 356 | 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2142ms |
| 357 | }}} |
| 358 | |
| 359 | As 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 | |
| 363 | 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. |
| 364 | |
| 365 | For 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 | |
| 369 | As 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 | |
| 384 | Note that the servers are connected to ADD2/DROP2 `[4102/5202]` while ADD11/DROP11 `[4111/5211]` are used |
| 385 | as passthrough ports between rdm1-lg1 and rdm2-lg1. |
| 386 | |
| 387 | ''Also note that these port numbers are the same as the hardware |
| 388 | tutorial page.'' |
| 389 | |
| 390 | == Network Interfaces Configuration for Experiment-1 (short-hop) == |
| 391 | |
| 392 | 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. |
| 393 | 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: |
| 394 | |
| 395 | === Configuring srv1_co1<==>srv1_lg1 Connection 1 on Mininet-Optical using NETCONF === |
| 396 | |
| 397 | |
| 398 | The NETCONF servers for `rdm1-co1` and `rdm1-lg1` are listening on `localhost` at ports 1834 and 1831, respectively. |
| 399 | We will use the `examples/nc_add_connection.py` script to configure connections using NETCONF. |
| 400 | |
| 401 | {{{#!bash |
| 402 | testdir=$(dirname $0) |
| 403 | addc=$testdir/nc_add_connection.py |
| 404 | rdm1co1_netconf=localhost:1834 |
| 405 | rdm1lg1_netconf=localhost:1831 |
| 406 | }}} |
| 407 | |
| 408 | * **rdm1-co1**: |
| 409 | 1. Enable MUX port 4102 “From sw-da-co1” |
| 410 | 2. Add Connection “Exp1_From_sw-da-co1” with Input/ Output Port 4102/4201 with bandwidth [194.30;194.40] THz |
| 411 | 3. Enable DEMUX port 5202 “Toward sw-da-co1” |
| 412 | 4. 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**: |
| 422 | 5. Enable MUX port 4102 “From sw-da-lg1” |
| 423 | 6. Add Connection “Exp1_From_sw-da-lg1” with I/O Port 4102/4201 with bandwidth [194.30;194.40] THz |
| 424 | 7. Enable DEMUX port 5202 “Towards sw-da-lg1” |
| 425 | 8. 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 | |
| 436 | 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. |
| 437 | |
| 438 | |
| 439 | {{{#!shell-session |
| 440 | ... |
| 441 | *** Test configuration 1 |
| 442 | press 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 |
| 447 | PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
| 448 | 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.724 ms |
| 449 | 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.164 ms |
| 450 | 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.130 ms |
| 451 | |
| 452 | --- 192.168.1.2 ping statistics --- |
| 453 | 3 packets transmitted, 3 received, 0% packet loss, time 2130ms |
| 454 | rtt min/avg/max/mdev = 0.130/0.339/0.724/0.272 ms |
| 455 | |
| 456 | ... |
| 457 | |
| 458 | *** srv1_co1 pinging srv2_lg1 |
| 459 | PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. |
| 460 | From 192.168.1.1 icmp_seq=1 Destination Host Unreachable |
| 461 | From 192.168.1.1 icmp_seq=2 Destination Host Unreachable |
| 462 | From 192.168.1.1 icmp_seq=3 Destination Host Unreachable |
| 463 | |
| 464 | --- 192.168.1.3 ping statistics --- |
| 465 | 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2192ms |
| 466 | }}} |
| 467 | |
| 468 | 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. |
| 469 | |
| 470 | Note 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 | |
| 477 | Like before, you can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps: |
| 478 | |
| 479 | 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: |
| 480 | {{{#!shell-session |
| 481 | mininet-optical> srv1_co1 ping -c3 srv1_lg1 |
| 482 | PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
| 483 | 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.377 ms |
| 484 | 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.166 ms |
| 485 | 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.170 ms |
| 486 | |
| 487 | --- 192.168.1.2 ping statistics --- |
| 488 | 3 packets transmitted, 3 received, 0% packet loss, time 2114ms |
| 489 | rtt min/avg/max/mdev = 0.166/0.237/0.377/0.098 ms |
| 490 | }}} |
| 491 | 2. You should also try to ping srv2_lg1 from srv1_co1 using the below command: |
| 492 | {{{#!shell-session |
| 493 | mininet-optical> srv1_co1 ping -c3 srv2_lg1 |
| 494 | PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data. |
| 495 | From 10.0.0.1 icmp_seq=1 Destination Host Unreachable |
| 496 | From 10.0.0.1 icmp_seq=2 Destination Host Unreachable |
| 497 | From 10.0.0.1 icmp_seq=3 Destination Host Unreachable |
| 498 | |
| 499 | --- 10.0.0.3 ping statistics --- |
| 500 | 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2142ms |
| 501 | }}} |
| 502 | |
| 503 | As 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 | |
| 508 | 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: |
| 509 | |
| 510 | === Configuring srv1_co1<==>srv2_lg1 connection on Mininet-Optical using NETCONF === |
| 511 | |
| 512 | 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. |
| 513 | Like Experiment 1 we are using `examples/nc_add_connection.py` script to configure connections using NETCONF. |
| 514 | |
| 515 | {{{#!bash |
| 516 | testdir=$(dirname $0) |
| 517 | addc=$testdir/nc_add_connection.py |
| 518 | rdm1co1_netconf=localhost:1834 |
| 519 | rdm1lg1_netconf=localhost:1831 |
| 520 | rdm2lg1_netconf=localhost:1832 |
| 521 | rdm2co1_netconf=localhost:1833 |
| 522 | }}} |
| 523 | |
| 524 | * **rdm1-co1** ''(Same configuration as for Experiment 1)'': |
| 525 | 1. Enable MUX port 4102 “From sw-da-co1” |
| 526 | 2. Add Connection “Exp2_From_sw-da-co1” with I/O Port 4102/4201 with bandwidth [194.30;194.40] THz |
| 527 | 3. Enable DEMUX port 5202 “Toward sw-da-co1” |
| 528 | 4. 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)'': |
| 536 | 5. Enable MUX port 4111 “Through Port” |
| 537 | 6. Add East-bound Connection “Exp2_East_rdm1-lg1” with I/O Port 4111/4201 with bandwidth [194.30;194.40] THz |
| 538 | 7. Enable DEMUX port 5211 “Through Port” |
| 539 | 8. 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**: |
| 549 | 9. Enable MUX port 4111 “Through Port” |
| 550 | 10. Add East-bound Connection “Exp2_East_rdm2-lg1” with I/O Port 4111/4201 with bandwidth [194.30;194.40] THz |
| 551 | 11. Enable DEMUX port 5211 “Through Port” |
| 552 | 12. 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)'': |
| 562 | 13. Enable MUX port 4102 “From sw-da-lg1” |
| 563 | 14. Add Connection “Exp2_From_sw-da-lg1” with I/O Port 4102/4201 with bandwidth [194.30;194.40] |
| 564 | 15. Enable DEMUX port 5202 “Towards sw-da-lg1” |
| 565 | 16. 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 | |
| 576 | 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. |
| 577 | |
| 578 | {{{#!shell-session |
| 579 | ... |
| 580 | *** Test Experiment 2 |
| 581 | press 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 |
| 586 | PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
| 587 | From 192.168.1.1 icmp_seq=1 Destination Host Unreachable |
| 588 | From 192.168.1.1 icmp_seq=2 Destination Host Unreachable |
| 589 | From 192.168.1.1 icmp_seq=3 Destination Host Unreachable |
| 590 | |
| 591 | --- 192.168.1.2 ping statistics --- |
| 592 | 3 packets transmitted, 0 received, 100% packet loss, time 2070ms |
| 593 | |
| 594 | ... |
| 595 | |
| 596 | *** srv1_co1 pinging srv2_lg1 |
| 597 | PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. |
| 598 | 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.21 ms |
| 599 | 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.385 ms |
| 600 | 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.430 ms |
| 601 | |
| 602 | --- 192.168.1.3 ping statistics --- |
| 603 | 3 packets transmitted, 3 received, 0% packet loss, time 2072ms |
| 604 | rtt min/avg/max/mdev = 0.385/0.675/1.211/0.379 ms |
| 605 | }}} |
| 606 | |
| 607 | |
| 608 | 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. |
| 609 | |
| 610 | 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. |
| 611 | |
| 612 | === Ping Servers Manually === |
| 613 | |
| 614 | Like before, you can also ping all the servers manually in the mininet-optical CLI to check the connections with below steps: |
| 615 | |
| 616 | 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: |
| 617 | {{{#!shell-session |
| 618 | mininet-optical> srv1_co1 ping -c3 srv1_lg1 |
| 619 | PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. |
| 620 | From 192.168.1.1 icmp_seq=1 Destination Host Unreachable |
| 621 | From 192.168.1.1 icmp_seq=2 Destination Host Unreachable |
| 622 | From 192.168.1.1 icmp_seq=3 Destination Host Unreachable |
| 623 | |
| 624 | --- 192.168.1.2 ping statistics --- |
| 625 | 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2134ms |
| 626 | }}} |
| 627 | 2. You should also try to ping srv2_lg1 from srv1_co1 using the below command: |
| 628 | {{{#!shell-session |
| 629 | mininet-optical> srv1_co1 ping -c3 srv2_lg1 |
| 630 | PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. |
| 631 | 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.685 ms |
| 632 | 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.424 ms |
| 633 | 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.416 ms |
| 634 | |
| 635 | --- 192.168.1.3 ping statistics --- |
| 636 | 3 packets transmitted, 3 received, 0% packet loss, time 2192ms |
| 637 | rtt min/avg/max/mdev = 0.416/0.508/0.685/0.124 ms |
| 638 | }}} |
| 639 | |
| 640 | 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. |
| 641 | |
| 642 | = Shutting down Mininet-Optical = |
| 643 | |
| 644 | To exit Mininet-Optical, type `exit` or press control-D at the `mininet-optical>` prompt. |
| 645 | |
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ðPort=1&wdmPort=320&wdmInPort=321&channel=61" |
414 | | curl "$swda_lg1/connect?node=swda-lg1ðPort=2&wdmPort=290&wdmInPort=291&channel=61" |
415 | | curl "$swda_lg1/connect?node=swda-lg1ðPort=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. |