• Stars
    star
    232
  • Rank 172,847 (Top 4 %)
  • Language
    Python
  • Created over 9 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

SDN Coursera Coursework

Coursera SDN Virtual Machine Setup

Setting up the course VM

Prerequisite

To get started install these softwares on your host machine:

  1. Install Vagrant, it is a wrapper around virtualization softwares like VirtualBox, VMWare etc.: http://www.vagrantup.com/downloads

  2. Install VirtualBox, this would be your VM provider: https://www.virtualbox.org/wiki/Downloads

  3. Install Git, it is a distributed version control system: https://git-scm.com/downloads

  4. Install X Server and SSH capable terminal

    • For Windows install Xming and Putty.
    • For MAC OS install XQuartz and Terminal.app (builtin)
    • Linux comes pre-installed with X server and Gnome terminal + SSH (buitlin)

Basics

  • Clone the course repository from Github:
$ git clone https://github.com/PrincetonUniversity/Coursera-SDN
  • Change the directory to Coursera-SDN:
$ cd Coursera-SDN
  • Now run the vagrant up command. This will read the Vagrantfile from the current directory and provision the VM accordingly:
$ vagrant up

If you want to tear down your vagrant session, you have multiple options to do so, each has its pros and cons. These options are as follows:

  • vagrant suspend: With this option you will be able to save the state of the VM and stop it.
  • vagrant halt: This will gracefully shutdown the guest operating system and power down the guest machine.
  • vagrant destroy: If you want to remove all traces of the guest machine from your system, this is the command you should use. It will power down the machine and remove all guest hard disks

Go here for more information about vagrant teardown.

Note: By default it will instantiate a 64 bit VM. In case you want to run a 32 bit VM, you will need to change the config.vm.box_url parameter in the Vagrantfile as shown below:

## 64 bit Vagrant Box
#config.vm.box_url = "https://d396qusza40orc.cloudfront.net/sdn1/srcs/Vagrant%20Box/coursera-sdn-2015_64bit.box"

## 32 bit Vagrant Box 
config.vm.box_url = "https://d396qusza40orc.cloudfront.net/sdn1/srcs/Vagrant%20Box/coursera-sdn-2015_32bit.box"
  • Now SSH into the VM:
$ vagrant ssh
  • Programming assignments: You will find the programming assignments in the vm under the directory: /vagrant/assignments.
vagrant@coursera-sdn:~$ ls /vagrant/
assignments  README.md  setup  Vagrantfile
  • To perform a simple test to check if your VM setup is correct, run the command:
sudo mn

This will start a Mininet bash terminal. Type xterm h1 h2 in this terminal. If two external terminals pop out, then your setup worked as expected.

Notes and Tips for running vagrant and the course VM

  • Follow the instructions closely
  • If you are running a 64bit OS, run a 64 bit VM
  • If you are running a 32bit OS, run a 32 bit VM
  • Disable Hyper-V on Windows
  • Enable Virtualization support on the host (BIOS setup)
  • The VM runs 192.168.0.0/24 as default network, if you use that network locally you need to change it (edit Vagrantfile: config.vm.network :private_network, ip: "192.168.0.100โ€)
  • The host machine needs to run an X server (itโ€™s native on Linux; OS X and Windowns require the installation of an X Server)
  • Alternative methods to ssh to the VM: run "ssh -X [email protected]" password is vagrant
  • If you see "ssh_exchange_identification: read: Connection reset by peer" when trying to connect using "vagrant ssh" use the alternative method provided above since it has been reported as a valid workaround, this issue is under investigation
  • The shared folder: "Coursera-SDN" git cloned folder for the host and /vagrant for the guest
  • Some students reported that on old/slower machines some assignments might fail because of extra delay on the computation wich translates to increaced delay on ping request/response. The original default vagrant configuration for VBox was 2Gb RAM and 1 CPU with 50% cap. We changed this to 1GB RAM and 1 CPU with no cap. We think this new configuration will be good for most, but if you want to you can always tweek this to your requirements or likings (edit the line that starts with "# CPU & RAM" on Vagrantfile)

Sample setup output for reference

  • Following output is from MacOS
Coursera-SDN TestUser$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 6633 => 6635 (adapter 1)
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/TestUser/git/Coursera-SDN



TestUser-MBP:Coursera-SDN TestUser$ vagrant ssh
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-49-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

 System information disabled due to load higher than 1.0

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud


Last login: Mon May 25 18:00:05 2015 from 10.0.2.2
vagrant@coursera-sdn:~$ ls /vagrant/
assignments  README.md	setup  Vagrantfile
vagrant@coursera-sdn:~$ sudo mn
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 
*** Adding switches:
s1 
*** Adding links:
(h1, s1) (h2, s1) 
*** Configuring hosts
h1 h2 
*** Starting controller
c0 
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> help

Documented commands (type help <topic>):
========================================
EOF    gterm  iperfudp  nodes        pingpair      py      switch
dpctl  help   link      noecho       pingpairfull  quit    time  
dump   intfs  links     pingall      ports         sh      x     
exit   iperf  net       pingallfull  px            source  xterm 

You may also send a command to a node using:
  <node> command {args}
For example:
  mininet> h1 ifconfig

The interpreter automatically substitutes IP addresses
for node names when a node is the first arg, so commands
like
  mininet> h2 ping h3
should work.

Some character-oriented interactive commands require
noecho:
  mininet> noecho h2 vi foo.py
However, starting up an xterm/gterm is generally better:
  mininet> xterm h2

mininet> h1 ifconfig
h1-eth0   Link encap:Ethernet  HWaddr 12:1e:ad:14:fe:b3  
          inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::101e:adff:fe14:feb3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1128 (1.1 KB)  TX bytes:648 (648.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


mininet> 
mininet> 
mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=2.15 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.331 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.165 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.073 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=0.085 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=0.035 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=0.099 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=0.088 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=0.139 ms
64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=0.089 ms
^C
--- 10.0.0.2 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9016ms
rtt min/avg/max/mdev = 0.035/0.326/2.156/0.614 ms
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2 
h2 -> h1 
*** Results: 0% dropped (2/2 received)
mininet> pingallfull
*** Ping: testing ping reachability
h1 -> h2 
h2 -> h1 
*** Results: 
 h1->h2: 1/1, rtt min/avg/max/mdev 0.850/0.850/0.850/0.000 ms
 h2->h1: 1/1, rtt min/avg/max/mdev 0.114/0.114/0.114/0.000 ms
mininet> pingpairfull
h1 -> h2 
h2 -> h1 
*** Results: 
 h1->h2: 1/1, rtt min/avg/max/mdev 0.243/0.243/0.243/0.000 ms
 h2->h1: 1/1, rtt min/avg/max/mdev 0.122/0.122/0.122/0.000 ms
mininet> time
*** Elapsed time: 0.000005 secs
mininet> nodes
available nodes are: 
c0 h1 h2 s1

mininet> quit
*** Stopping 1 controllers
c0 
*** Stopping 2 links
..
*** Stopping 1 switches
s1 
*** Stopping 2 hosts
h1 h2 
*** Done
completed in 324.923 seconds

vagrant@coursera-sdn:~$ exit
logout
Connection to 127.0.0.1 closed.

More Repositories

1

research-course

"How to Do Great Research" Course for Ph.D. Students
TeX
105
star
2

netml

Feature Extraction and Machine Learning from Network Traffic Traces
Python
59
star
3

paper-skeleton

Skeleton for writing conference papers in Latex
TeX
40
star
4

NetDiffusion_Generator

Python
25
star
5

nsf-template

Template for NSF Proposals
TeX
14
star
6

ml-networking

Jupyter Notebook
10
star
7

ml-systems

Machine Learning for Computer Systems
8
star
8

networking-deadlines

Countdowns to top Networking and Measurement conference deadlines.
HTML
8
star
9

vcaml

Estimating WebRTC Video QoE Metrics Without Using Application Headers
Jupyter Notebook
7
star
10

censorship-course

Internet Censorship Course / Book Workshop
6
star
11

rcc

The Routing Configuration Checker (rcc). Static configuration analysis of BGP and IGP configuration.
Perl
6
star
12

biblio-gen

Software for auto-generating nice annotated bibliographies from Bibtex files
TeX
5
star
13

privacy-extensions

Source code for the paper "Understanding The Performance Costs and Benefits of Privacy-focused Browser Extensions"
Python
5
star
14

dns-measurement

Measurements of Performance and Availability of Emerging DNS Protocols, including DNS-over-TLS, and DNS-over-HTTPS
Jupyter Notebook
5
star
15

automated-dns-censorship

4
star
16

ML-Cybersecurity

Machine Learning for Cybersecurity Certificate Course at UChicago
Jupyter Notebook
4
star
17

iotlab

IoT Lab Resources
Jupyter Notebook
3
star
18

feamster-phd-thesis

Latex Source Code for Feamster Ph.D. Thesis
PostScript
2
star
19

ddns

Public repository for academic paper "Encryption without Centralization: Distributing DNS Queries Across Recursive Resolvers"
Python
2
star
20

netdisco-python-wrapper

Python
1
star
21

exam-template

Exam template that is friendly for auto-grading (e.g., Gradescope)
TeX
1
star
22

security-course

Security, Privacy, and Consumer Protection
PostScript
1
star