Download as pdf or txt
Download as pdf or txt
You are on page 1of 98

Presented by

MININET DEMO Momina Masood

1
INTRODUCTION TO MININET

 Mininet
 A network emulator which creates realistic virtual network
 Runs real kernel, switch and application code on a single machine

 Provides both Command Line Interface (CLI) and Application Programming Interface (API)
• CLI: interactive commanding
• API: automation

 Abstraction
• Host: emulated as an OS level process
• Switch: emulated by using software-based switch
• E.g., Open vSwitch, SoftSwitch
2
INTRODUCTION TO MININET

VM, native laptop, or native server

Your SDN

Command-Line Interface

Scripting API
3
FLOW OF THE LAB

 Download the virtual machine


 Setup the virtual machine
 Check the setup in Linux
 Create the network
 Examine the network
 Work with basic OpenFlow commands
 Add a controller

4
DOWNLOAD THE VIRTUAL MACHINE

 For this lab a virtual machine appliance in ovf format must be


downloaded from the OpenFlow Tutorial website here
 https://github.com/downloads/mininet/mininet/mininet -2.0.0-113012-amd64-ovf.zip
 Download this file
 Expand the zip file
 You should see these files

5
SETUP THE VIRTUAL MACHINE

 To import this appliance into VirtualBox


 Select
 File
 Import Appliance
 Select the ovf image
 Press the Import button

 This lab requires two virtual NICs


 The first one should be set to host-only network
 The second one to NAT

6
CHECK LINUX

 Mininet is a command line tool that runs in Linux


 The Mininet prompt looks like this
 mininet>
 The Linux prompt ends with a $ for a normal user
 It ends in # for the root account
 We will use the sudo command to run the Linux commands with root
privileges at the normal user prompt

7
LOGIN VM

 Start the virtual machine


 Login to Linux
 The login is
 mininet
 mininet
 The screen should look like this

8
LOGIN VM

9
VM NETWORK CONFIGURATION

 Let’s see if the two network interfaces are setup correctly


 At the Linux prompt enter
 ifconfig

10
VM NETWORK CONFIGURATION

 Three interfaces should appear


 Two physical interfaces called
 eth0
 eth1
 And the loopback interface

11
VM NETWORK CONFIGURATION

 One of the physical interfaces should have a 192 address and the
other a 10 address
 We will access the virtual machine using a terminal program using the
192 address
 If either of the eth Ethernet interfaces are missing, run this command
 sudo dhclient ethx
 Where the x in ethx is the number of the interface

12
SET UP NETWORK ACCESS

13
SET UP NETWORK ACCESS

 As you can see the eth1 interface is missing


 After the dhclient command is run this appears
 sudo dhclient ethx
 Where the x in ethx is the number of the interface

14
SET UP NETWORK ACCESS

15
ACCESS VM VIA SSH

 The tutorial VM is shipped without a desktop environment, to reduce its size. All
the exercises will be done through X forwarding, where programs display graphics
through an X server running on the host OS.

 Open a terminal (Terminal.app in Mac, Gnome terminal in Ubuntu, etc). In that


terminal, run:
 $ ssh -X [user]@[Guest IP Here]
 Replace [user] with the correct user name for your VM image.
 Replace [Guest] with the IP you just noted.
 If ssh does not connect, make sure that you can ping the IP address you are connecting to.

16
ALTERNATIVE: RUN A GUI IN THE VM CONSOLE
WINDOW

 To not use X11 and log in to the VM console window - not via an ssh
session!
 Install GUI
 Login VM, and type:
$ sudo apt-get update && sudo apt-get install xinit lxde virtualbox-guest-dkms

 At this point, you should be able to start an X11 session in the VM


console window by typing:
$ startx

17
MININET TUTORIAL

 Mininet Command Line Interface Usage


 Interact with hosts and switches
• Start a minimal topology
$ sudo mn

The default run of Mininet sudo mn will create a topology consisting of one controller (c0), one switc
h (s1) and two hosts (h1 and h2).
• Display nodes
mininet> nodes
• Display links
The switches generated with Mininet will
mininet> net
be just simple forwarding devices, without
• Dump information about all nodes any "brain" of their own (no control plane)
mininet> dump
• Exit Mininet:
mininet> exit

18
MININET TUTORIAL

To help you start up, here are the most important options for running Mininet:
 --topo=TOPO represents the topology of the virtual network, where TOPO could
be:
 minimal - this is the default topology with 1 switch and 2 hosts
 single,X - a single switch with X hosts attached to it
 linear,X - creates X switches connected in a linear/daisy-chain fashion, each switch with one
host attached
 tree,X,Y - a tree topology with X depth, Y fanout
 --switch=SWITCH creates different type of switches, such as:
 ovsk - this is the default Open vSwitch that comes preinstalled in the VM
 user - this is a switch running in software namespace (much slower)

19
MININET TUTORIAL

 --controller=CONTROLLER where CONTROLLER can be:


 ovsc - this creates the default OVS Controller that comes preinstalled in the VM
 nox - this creates the well-known NOX controller
 remote - does not create a controller but instead listens for connections from
external controllers
 --mac set easy-to-read MAC addresses for the devices

 For more information


$ mn help

20
MORE COMMANDS

 Display Mininet Command Line Interface (CLI) commands:


mininet> help
 Display nodes:
mininet> nodes
 If the first string of the CLI command is a host, switch or controller name, the
command is executed on that node. For instance, to show the interface of host
h1:
mininet> h1 ifconfig
 Test connectivity between hosts. For example, test the connectivity between h1
and h2:
mininet> h1 ping h2
 Alternatively, you can test the connectivity between all hosts by typing:
mininet> pingall
 Exit Mininet:
mininet> exit
 Clean up: After every exit do cleanup
$ sudo mn -c
21
NETWORK TOPOLOGY

 sudo mn --topo single,4 --mac --switch ovsk

22
NETWORK TOPOLOGY

 $ sudo mn --topo linear,3

23
NETWORK TOPOLOGY

 sudo mn --topo tree,2,3 --mac --switch ovsk --controller=remote


Where (--topo tree,depth=2,fanout=3)

24
EXAMPLE

sudo mn --link tc,bw=20,delay=20ms


Take a moment to think about our current, very basic,
topology.

(h1)-----20ms-----(s1)-----20ms-----(h2)

Q: When you send a ping, you measure the roundtrip delay for
an ICMP packet to travel from one host to another. Assuming
our current deployment, what will be the reported roundtrip
delay?
25
EXAMPLE (CONT..)

A1: ~80 ms
 Let’s test that assertion!
 mininet> h1 ping -c 8 h2

26
SIMPLE EXERCISE

 Do not confuse the dpctl with a controller (it's not the same thing) -
dpctl is just a management/monitoring utility!

Use ovs-oftcl instead of dpctl


for open vSwitch when running
a controller

In this scenario we have no


remote controller running

27
EXERCISE (CONT..)

STEP 1: Start Mininet with a single switch (the default, Open vSwitch =
ovsk) and 3 hosts:
 mininet@mininet-vm:~$ sudo mn --topo=single,3 --mac --switch=ovsk --
controller=remote

This message: "Unable to contact the remote


controller at 127.0.0.1:6633". This is because,
for the time being, we are going to use mininet
without any controller

28
EXERCISE (CONT..)

 In order to double-check that everything started correctly, use the


following mininet commands:
 nodes - to list all virtual devices in the topology
 net - to list of links between them
 dump - to see more info about the hosts

29
EXERCISE (CONT..)

STEP 2: Open terminals for each host and run tcpdump on each:
Attention: for Windows/MAC users, make sure you installed & run Xming/XQuartz,
plus you enabled X-forwarding if you are using ssh session to the Mininet VM!
> xterm h1 h2 h3
 In the xterms for h2 and h3, run tcpdump, a utility to print the packets seen by a
host:
# tcpdump -XX -n -i h2-eth0
and respectively:
# tcpdump -XX -n -i h3-eth0
 In the xterm for h1, send a ping:
# ping -c1 10.0.0.2

30
EXERCISE (CONT..)

STEP 3: Test connectivity between h1 and h2: on host h1 perform a


ping -c3 10.0.0.2 (the IP address of host h2)

31
EXERCISE (CONT..)

Results:
 ping will fail, because the switch does NOT know what to do with
such traffic (and remember, we don't run any controller)

32
CHECKING FLOW RULES

 Checking the list of flows on the switch (with command dpctl dump-
flows) will show an empty list (again, nobody told the switch how to
deal with the traffic)

33
CHECKING FLOW RULES

Open new terminal window or create a second SSH window, if you


don't already have one, and run:
$ dpctl show tcp:127.0.0.1:6634
 The 'show' command connects to the switch and dumps out its port
state and capabilities.
$ dpctl dump-flows tcp:127.0.0.1:6634
 Since we haven't started any controller yet, the flow -table should be
empty.

34
ADDING FLOW RULES

STEP 4: Manually add flows on the switch to allow connectivity


between h1 and h2
 Use the dpctl add-flow utility to manually install flows on the switch
that will allow connectivity between host h1 and host h2.
 $ dpctl add-flow tcp:127.0.0.1:6634 in_port=1,actions=output:2
everything received on port 1 (in_port) send out on port 2
 $ dpctl add-flow tcp:127.0.0.1:6634 in_port=2,actions=output:1
everything received on port 2 (return traffic) send out on port 1

35
FLOW RULES

36
FLOW RULES

Result:
 ping is successful
 tcpdump on host h2 shows the traffic from/to h1 (ARP and ICMP)
 tcpdump on host h3 does not see anything (not even the ARP which
should be broadcast)!

37
ACTIVATE WIRESHARK

 Start Wireshark as a background process


 $sudo wireshark $
 Click on OK to clear any error messages

38
OBSERVE SDN TRAFFIC

 Start a capture in Wireshark using the loopback interface


 Create and apply a filter for just the OpenFlow traffic by entering a
display filter in Wireshark using the string
 of

39
LOAD THE CONTROLLER

 To generate some traffic we will load a controller as that is the next


step anyway
 There are a number of software based or hardware based controllers
that can be used in an SDN
 In this example we will load the POX controller

40
LOAD THE CONTROLLER

 To start POX enter these commands


 $cd pox
 ./pox.py forwarding.l2_learning

41
LOAD THE CONTROLLER

42
OBSERVE SDN TRAFFIC

 Switch back to the Wireshark window to see the activity as the


controller loads

43
OBSERVE SDN TRAFFIC

44
MININET APPS

GUI - Automatic Creation of Mininet Scripts


 Visual Network Description - VND (http://www.ramonfontes.com/vnd) - A GUI tool
that allows automatic creation of Mininet and Openflow Controllers Scripts.

GUI - MiniEdit
 Included in Mininet in the examples/ directory. miniedit.py

45
START MINIEDIT

 The MiniEdit script is located in Mininet’s examples folder.


 To run MiniEdit, execute the command:
$ sudo ~/mininet/examples/miniedit.py

 Mininet needs to run with root privileges so start MiniEdit using the
sudo command.

46
MINIEDIT GUI

47
CREATE A CUSTOM NETWORK TOPOLOGY

48
CONFIGURE THE CONTROLLERS

 Right-click on each controller and select Properties from the menu


that appears.
 The default port number for each controller is 6633.
 Change this so the port numbers used by controllers c0, c1, and c2 are 6633, 6634,
and 6635, respectively.

49
CONFIGURE THE CONTROLLERS

50
SET MINIEDIT PREFERENCES

 To set MiniEdit preferences, Edit → Preferences. In the dialogue box


that appears, make the changes you need.

51
SET MINIEDIT PREFERENCES

 Set the Start CLI option

52
SAVE THE CONFIGURATION

Save topology file


 To save the Mininet Topology (*.mn) file, click on File in the top menu
bar and select Save from the drop-down menu. Type in a file name
and save the file.
Save custom Mininet script
 To save the Mininet Custom Topology ( *.py) file, click on File in the
top menu bar and select Save Level 2 Script from the drop-down
menu. Type in the file name and save the file.

53
RUN THE MINIEDIT NETWORK SCENARIO

 To start the simulation scenario, click the Run button on the MiniEdit
GUI

In the terminal window from which


you started MiniEdit, you will see
some messages showing the
progress of the simulation startup and
then the Miniedit CLI prompt
(because we checked Start CLI box in
the MiniEdit preferences window).

54
EXPERIMENT WITH THE NETWORK

View Open vSwitch configurations

55
CONT..

Check switch flow tables

56
CONT..

 First change the userid from root to mininet


# su mininet
 Then, check the flow table on switch s1 using the commands below.
It should be empty.
$ sudo ovs-ofctl dump-flows s1

57
RUN PROGRAMS TO GENERATE AND MONITOR
TRAFFIC
 Open a xterm window on hosts h1 and h8. Right-click on each host in
the MiniEdit GUI and select Terminal from the menu that appears.
 In the h1 xterm window, start a Wireshark with the command, wireshark &.
 In the h8 xterm window, start a packet trace with the command tcpdump.
$ tcpdump –n –i h8-eth0

 Run a ping command to send traffic between host h1 and h8


mininet> h1 ping h8

58
CONT..

59
SIMULATE A BROKEN LINK

 Right-click on link. Choose Link Down from the menu that appears

60
CONT..

 Ping again
 no more traffic is received at host h8 and that the ping command shows packets
sent from host h1 are not being responded to
 Restore the link by choosing Link Up
 Check flow tables
$ sudo ovs-ofctl dump-flows s1

61
STOP THE SIMULATION

 Quit Wireshark and tcpdump on hosts h1 and h8.


 Quit the ping command in the MiniEdit console window by pressing
Ctrl-C on the keyboard.
 Then, quit the Mininet CLI by typing exit at the mininet> prompt.
 Now, press the Stop button on the MiniEdit GUI.

62
RUN A SAVED MININET CUSTOM TOPOLOGY
SCRIPT
 $ cd ~/mininet/<filepath>
 $ sudo chmod 777 <filename>.py
 $ sudo ./<filename>.py

63
VISUAL NETWORK DESCRIPTION(VND)

 Open web browser and go to http://www.ramonfontes.com/vnd/#

64
CREATE A CUSTOM NETWORK TOPOLOGY

 Create the following topology using drag/drop

65
SAVE TOPOLOGY

66
CONT..

67
CONT..

 Set the file executable

68
RUN CONTROLLER

 Using the l2_multi pox controller module to find the shortest path
from sender to receiver to send packets.
 Run the l2_multi pox controller.
 Use discovery module to construct the network topology.
 When the topology is known, the l2_multi can use Floyd-Warshall
algorithm to find a shortest path.
 Note l2_multi.py is under /pox/pox/forwarding and discovery.py is
under /pox/pox/openflow

69
RUN CONTROLLER

 ./pox.py log.level --DEBUG log forwarding.l2_multi


openflow.discovery

70
RUN SCRIPT

 Open another terminal and run the script

71
CONT..

 Ping test

72
CONT..

 There are two paths from h1 to h2, i.e.


 h1->s3->s4->h2
 h1->s3->s5->s6->s4->h4.
 The shortest path is h1->s3->s4->h2.
 Check the rules for s3 (we can see the rules for arp and ip operations
between 10.0.0.1 (h1) and 10.0.0.2(h2))

73
CONT..

mininet> sh ovs-ofctl dump-flows s3

74
CONT..

 Check the rules for s4 (we can see the rules for arp and ip operations
between 10.0.0.1 (h1) and 10.0.0.2(h2))

75
CONT..

 No rules for s5 and s6.


Because the packets from h1 will not go via s5 and s6 to h2.

76
RYU CONTROLLER

77
INSTALL RYU

$ sudo apt-get install git python-dev python-setuptools python-pip


$ git clone https://github.com/osrg/ryu.git
$ cd ryu
$ sudo pip install .

78
SWITCHING HUB

 Switching hubs have a variety of functions


 Learns the MAC address of the host connected to a port and retains it in the MAC
address table.
 When receiving packets addressed to a host already learned, transfers them to the
port connected to the host.
 When receiving packets addressed to an unknown host, performs flooding.

79
SWITCHING HUB BY OPENFLOW

 Initial status

80
SWITCHING HUB BY OPENFLOW

 Host A -> Host B

81
SWITCHING HUB BY OPENFLOW

 Host B -> Host A

82
SWITCHING HUB BY OPENFLOW

 Host A -> Host B

83
EXECUTION OF RYU APPLICATION

84
CONT..

85
CONT..

86
CONT..

87
EXECUTING THE SWITCHING HUB

88
CONT..

89
CONFIRMING OPERATION

 Execute ping from host 1 to host 2


 mininet> h1 ping –c 1 h2
 Before executing the ping command, execute the tcpdump command so that it is
possible to check what packets were received by each host.

90
PING TEST

91
CONT..

92
CONT..

93
DUMP FLOW RULES

94
CONT..

95
CONT..

96
REFRENCES

 for more:http://www.brianlinkletter.com/how-to-use-miniedit-mininets-
graphical-user-interface/
 https://github.com/ramonfontes/vnd-sdn-
version/blob/master/README.md

97
98

You might also like