Difference between revisions of "HOWTO use ns-3 scripts to drive real hardware (experimental)"

From Nsnam
Jump to: navigation, search
 
Line 8: Line 8:
 
to get this HOWTO to work, you will have to set up a VMware environment with
 
to get this HOWTO to work, you will have to set up a VMware environment with
 
two virtual machines, "ns-3-test-1" and "ns-3-test-2" as described in
 
two virtual machines, "ns-3-test-1" and "ns-3-test-2" as described in
 
+
[[HOWTO use VMware to set up virtual networks (Windows)]].  Once you have this
 +
done, you can pick up at the instructions below.
  
 
== HOWTO use ns-3 scripts to drive real hardware (experimental) ==
 
== HOWTO use ns-3 scripts to drive real hardware (experimental) ==
  
1.  Get the VMware server software
+
1.  Start the VMware virtual machines
     a.  You may read in various release notes or documentation that you need
+
     a.  Select the "Start this virtual machine" command on the "ns-3-test-1"
        Microsoft servers of various kinds.  This is not the case.  You can
+
        virtual machine in the VMware Server Console;
        run VMware server on XP just fine;
+
     b.  Recall that you type <Ctrl>+<Alt> to exit the VM;
    b.  Go to http://www.vmware.com/download/server/ to get the software;
+
     c.  Select the "Start this virtual machine" command on the "ns-3-test-2"
    c.  Select the Download Now button (download as usual);
+
         virtual machine in the VMware Server Console;
    d.  Install the software in the usual way;
+
2Clone and build the ns-3-emu experimental repositories on both machines
    e.  Ignore warnings about requiring Microsoft IIS to continue.
+
     a.  Select the "ns-3-test-1" virtual machine and click in the console to
2.  Request a Serial Number
+
         interact with the VM
    a.  Go to http://register.vmware.com/content/registration.html
+
     bLog in as your normal user;
    b.  Fill out the page and select "Submit";
+
     c.  Change into the repos directory;
    c.  You will be redirected to a page with your new serial number;
+
     dClone the repository
    d.  Copy the serial number;
+
        hg clone http://code.nsnam.org/craigdo/ns-3-emu
    e.  Run the VMware server;
+
     eBuild the code
    f.  Select the menu item Help->Enter Serial Number ...
+
        ./waf -d debug configure
    g.  Paste in the new serial number.
+
        ./waf
3.  Install a Virtual Machine
+
     f.  <Ctrl>+<Alt> to exit the VM
    a.  Exit the VMware Server.
+
     g.  Select the "ns-3-test-2" virtual machine and click in the console to
     b.  We prefer Ubuntu JeOS (Just enough OS).  You can download the code from
+
        interact with the VM
        the VMware "Virtual Appliance Marketplace" by going to
+
     h.  Log in as your normal user;
        http://www.vmware.com/appliances/directory/1136 and selecting "Download
+
     i.  Change into the repos directory;
        this Appliance" link from the "Download" box to the right of the
+
     jClone the repository
        appliance name (Ubuntu 7.10 JeOS v1.031 with VMware drivers (70MB));
+
        hg clone http://code.nsnam.org/craigdo/ns-3-emu
     c.  Download the appliance and unzip the file.  You should have a directory
+
     kBuild the code
        named "ub710jeos".  Copy this directory to the "c:\Virtual Machines"  
+
        ./waf -d debug configure
         (VMware) directory.
+
        ./waf
    d.  Run the VMware server.  If you get a complaint about not having a disk
+
3Configure the network interfaces
        in your CD-ROM, just continue;
+
    a.  Select the "ns-3-test-1" virtual machine and click in the console to
    eSelect the "Local Host" radio button and press "OK";
+
        interact with the VM
    f.  Select the File->Open menu option and Browse for the 
+
     b.  Log in as root (su or sudo as you wish);
        "ub710jeos" directory and open the "ub710jeos.vmx" file;
+
     c.  Put the test network interface into promiscuous mode
5.  Start the new Virtual Machine
+
         ifconfig eth1 promisc up
     a.  Select the "Start this virtual machine" command on the VMware Server
+
     d<Ctrl>+<Alt> to exit the VM
        Console;
+
     e.  Select the "ns-3-test-2" virtual machine and click in the console to
    b.  You will get a dialog box asking about a new UUID.  Select the "Create"
+
         interact with the VM
        radio button and press "OK";
+
     f.  Log in as root (su or sudo as you wish);
    c.  Ubuntu JeOS will start in a "console window."  If you want to type into
+
     gPut the test network interface into promiscuous mode
        the JeOS VM, you must click your mouse in the console window.  If you
+
        ifconfig eth1 promisc up
        want to exit to Windows, press <ctrl>+<alt> and you will pop out of
+
     h<Ctrl>+<Alt> to exit the VM
         the VM;
+
4Run the server script as root (I habitually use ns-3-test-2 as the server)
     dLogin as user: root, password root;
+
     a.  Select the "ns-3-test-2" virtual machine and click in the console to
     e.  Change the password (passwd)if you are connected to the real world and
+
         interact with the VM
        like your system intact.
+
     b.  ./waf --run emu-udp-echo-server
     fPing www.google.com to test network connectivity.
+
     c.  <Ctrl>+<Alt> to exit the VM
5.  Freshen the Software Distribution
+
     d'''''You have about 50 seconds to get back and start the client
    a. apt-get update
+
        before the server exits'''''
    b. apt-get install
+
5.  Run the client script as root (I habitually use ns-3-test-1 as the client)
     capt-get install pkg-config libxml2 libxml2-dev
+
     aSelect the "ns-3-test-1" virtual machine and click in the console to
    d. apt-get install gcc g++ make automake autoconf binutils
+
         interact with the VM
    e. apt-get install openssh-server openssh-client openssl libssl-dev
+
     b./waf --run emu-udp-echo-client
     f.  apt-get install python-dev mercurial
+
     cThe client will run for about ten seconds;
     g.  apt-get install tcpdump gdb emacs
+
6Take a look at the client pcap file
     h.  exit
+
     a.  tcpdump -nn -tt -r emu-udp-echo-client-0-0.pcap
6.  Log in as User (Appliance comes pre-configured with one user)
+
     a.  log in as user: user, password user
+
    b.  Change your password (passwd) if you are connected to the real world and
+
        like your system intact
+
7.  Get and Test ns-3-dev
+
    a.  mkdir repos
+
     bcd repos
+
    c.  hg clone http://code.nsnam.org/ns-3-dev
+
     dcd ns-3-dev
+
    e.  ./waf configure -d debug
+
    f.  ./waf
+
    g./waf --regression
+
 
+
As an old math professor once said, "I feel joy"!
+
 
+
Now it's time for a breatherYou have a configured Ubuntu JeOS Virtual Machine
+
and you've built and tested ns-3 on it.  Now might be a good time to copy this
+
VM somewhere safe as your base machine.  If you want to clone your machine you can
+
use this copy, or if you manage to wedge the VM, you can use the copy as a
+
checkpoint and restore a working copy without going through all the pain we just
+
suffered through.
+
 
+
8.  Checkpoint the VM
+
    a.  log out of the VM (exit);
+
     b.  Press the red rectangle (stop) button on the VMware Server Console;
+
     c.  Open My Computer/Virtual Machines
+
    d.  Copy "ub710jeos" to "ub710jeos checkpoint"
+
 
+
Now it's time to start creating that test network that was the reason we started
+
this process.  We'll use the checkpointed VM we just made and copy it to begin.
+
 
+
9.  Create new VM with a Private Network
+
    a.  Copy "c:\Virtual Machines\ub710jeos checkpoint" to another directory in
+
         the "Virtual Machines" directory and call it "ns-3-test-1"
+
     bSelect the File->Open menu option and Browse for the
+
        "ns-3-test-1" directory and open the "ub710jeos.vmx" file;
+
     e.  Select the "Edit virtual machine settings" command on the VMware Server
+
        Console;
+
    d.  Click on the "Options" tab;
+
    e.  Enter "ns-3-test-1" in the "Virtual machine name" text box;
+
    f.  Click on the "Hardware" tab;
+
    g.  Click on the "Add" button.  You will launch the "Add Hardware Wizard";
+
    h.  Click "Next";
+
    i.  Click "Ethernet Adapter" and then "Next";
+
    j.  Click the "Host Only:  A private network shared with the host" radio
+
         button and then "Next";
+
    k.  Click "OK";
+
    l.  Select the "Start this virtual machine" command on the VMware Server
+
        Console;
+
     m.  You will get a dialog box asking about a new UUID.  Select the "Create"
+
        radio button and press "OK";
+
    n.  Ubuntu JeOS will start in a "console window."
+
    o.  Log in as root (you changed the password, right?)
+
     pEdit (vi) "/etc/network/interfaces" and add the following lines
+
        '''''before''''' the similar delcaration of the primary network interface:
+
            # The private network interface
+
            auto eth1
+
            iface eth1 inet dhcp
+
     qEdit (vi) /etc/hosts and replace instances of "ub710jeos" with
+
        "ns-3-test-1";
+
    r.  Edit (vi) /etc/hostname and replace "ub710jeos" with "ns-3-test-1";
+
    s.  Change the host hame by executing "hostname ns-3-test-1";
+
    t.  Log out of the VM;
+
    uPress the red square (stop) button on the VMware Server Console to
+
        stop the VM.
+
 
+
Now you have one VM with a private network on it.  You can repeat step nine
+
as many times as you want, renaming the VMs ns-test-2, ns-test-3, etc.  Go
+
ahead and make a ns-test-2 virtual machine just so we can do something
+
interesting.
+
 
+
10. Start Your Virtual Test Network
+
     a.  Select the "ns-3-test-1" tab on the VMware Server Console;
+
    b.  Select the "Start this virtual machine" command on the VMware Server
+
         Console;
+
     cUbuntu JeOS will start in a "console window";
+
    d. You should see an "ns-3-test-1 login" prompt when it comes up;
+
    e.  Select the "ns-3-test-2" tab on the VMware Server Console;
+
     fSelect the "Start this virtual machine" command on the VMware Server
+
        Console;
+
    g.  Ubuntu JeOS will start in a "console window."
+
    h.  You should see an "ns-3-test-2 login" prompt when it comes up;
+
 
+
You can now switch between the running virtual machines by selecting the
+
appropriate tab on the VMware Server Console.  Enter a VM by clicking in the
+
console window and exit by pressing <ctrl>+<alt>.  Select another tab of a
+
running VM and enter that VM by clicking in the console window.
+
 
+
12. Update /etc/hosts and Check Connectivity
+
     aLog in to "ns-3-test-1" as root;
+
    b.  Run ifconfig -a and note the IP address of eth1;
+
    c.  Log in to "ns-3-test-2" as root;
+
    d.  Run ifconfig -a and note the IP address of eth1;
+
    e.  Edit (vi) "/etc/hosts" on "ns-3-test-1" and add an appropriate line
+
        for "ns-3-test-2".  On my machine it is
+
        "192.168.136.129 ns-3-test-2";
+
     fEdit (vi) "/etc/hosts" on "ns-3-test-2" and add an appropriate line
+
        for "ns-3-test-1".  On my machine it is
+
         "192.168.136.128 ns-3-test-1";
+
     gOn ns-3-test-1 run "ping ns-3-test-2" to verify;
+
     hOn ns-3-test-2 run "ping ns-3-test-1" to verify;
+
 
+
At this point, you probably will want to set up users, shells, aliases, other
+
tools (emacs, ddd, etc) or whatever else you will be needingFor example,
+
I set up a new user to match my user name on all of the other ns-3-related
+
machines I work with, set the shell to bash, copied over my aliases, ssh keys,
+
etc., etc., yadda, yadda.
+
 
+
CAVEATS
+
     a.  Be careful about carelessly using disk space in these VMs.  We have
+
        intentionally limited the size of the backing disk file to 1 GB so we
+
        don't consume all of your Windows resources.  This does mean that you
+
        will be limited to perhaps one or two full builds of ns-3 with regression
+
        traces depending on what other stuff you install.  If you run out of
+
        disk, you can increase it using VMware tools installed for you in the
+
        Windows "Command Prompt."
+
        i.  Open your "Command Prompt";
+
        ii.  Change into "C:\Program Files\VMWare\VMware Server;
+
        iii. There is an executable there named "vmware-vdiskmanager.exe";
+
        iv.  Find the full path to the disk image file you want to increase;
+
        v.  Increase the disk size using the following recipe:
+
            vmware-vdiskmanager -x 16GB "C:\Virtual Machines\ns-3-test-1\ub710jeos.vmdk"
+
 
+
Congratulations, you are now ns-3 emulation ready.
+
  
[[User:Craigdo|Craigdo]] 16:17, 6 August 2008 (EDT)
+
[[User:Craigdo|Craigdo]] 21:54, 13 August 2008 (EDT)

Revision as of 01:54, 14 August 2008

Main Page - Current Development - Developer FAQ - Tools - Related Projects - Project Ideas - Summer Projects

Installation - Troubleshooting - User FAQ - HOWTOs - Samples - Models - Education - Contributed Code - Papers

We provide a realtime emulation package that allows us to connect ns-3 to real networks on real machines. Typically the real network will be a testbed of some kind. The immediate problem for this HOWTO is, of course, that we don't have a testbed handy. What we'll do is show how this can be done in VMware using a couple of virtual machines connected on a dedicated network. In order to get this HOWTO to work, you will have to set up a VMware environment with two virtual machines, "ns-3-test-1" and "ns-3-test-2" as described in HOWTO use VMware to set up virtual networks (Windows). Once you have this done, you can pick up at the instructions below.

HOWTO use ns-3 scripts to drive real hardware (experimental)

1. Start the VMware virtual machines

   a.  Select the "Start this virtual machine" command on the "ns-3-test-1"
       virtual machine in the VMware Server Console;
   b.  Recall that you type <Ctrl>+<Alt> to exit the VM;
   c.  Select the "Start this virtual machine" command on the "ns-3-test-2"
       virtual machine in the VMware Server Console;

2. Clone and build the ns-3-emu experimental repositories on both machines

   a.  Select the "ns-3-test-1" virtual machine and click in the console to
       interact with the VM
   b.  Log in as your normal user;
   c.  Change into the repos directory;
   d.  Clone the repository
       hg clone http://code.nsnam.org/craigdo/ns-3-emu
   e.  Build the code
       ./waf -d debug configure
       ./waf
   f.  <Ctrl>+<Alt> to exit the VM
   g.  Select the "ns-3-test-2" virtual machine and click in the console to
       interact with the VM
   h.  Log in as your normal user;
   i.  Change into the repos directory;
   j.  Clone the repository
       hg clone http://code.nsnam.org/craigdo/ns-3-emu
   k.  Build the code
       ./waf -d debug configure
       ./waf

3. Configure the network interfaces

   a.  Select the "ns-3-test-1" virtual machine and click in the console to
       interact with the VM
   b.  Log in as root (su or sudo as you wish);
   c.  Put the test network interface into promiscuous mode
       ifconfig eth1 promisc up
   d.  <Ctrl>+<Alt> to exit the VM
   e.  Select the "ns-3-test-2" virtual machine and click in the console to
       interact with the VM
   f.  Log in as root (su or sudo as you wish);
   g.  Put the test network interface into promiscuous mode
       ifconfig eth1 promisc up
   h.  <Ctrl>+<Alt> to exit the VM

4. Run the server script as root (I habitually use ns-3-test-2 as the server)

   a.  Select the "ns-3-test-2" virtual machine and click in the console to
       interact with the VM
   b.  ./waf --run emu-udp-echo-server
   c.  <Ctrl>+<Alt> to exit the VM
   d.  You have about 50 seconds to get back and start the client
       before the server exits

5. Run the client script as root (I habitually use ns-3-test-1 as the client)

   a.  Select the "ns-3-test-1" virtual machine and click in the console to
       interact with the VM
   b.  ./waf --run emu-udp-echo-client
   c.  The client will run for about ten seconds;

6. Take a look at the client pcap file

   a.  tcpdump -nn -tt -r emu-udp-echo-client-0-0.pcap

Craigdo 21:54, 13 August 2008 (EDT)