Changes between Initial Version and Version 1 of Internal/OpenFlow/SetupLogs


Ignore:
Timestamp:
Jun 1, 2010, 8:15:23 PM (14 years ago)
Author:
akoshibe
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Internal/OpenFlow/SetupLogs

    v1 v1  
     1[wiki:Internal/OpenFlow/ return to OpenFlow index]
     2
     3= Setting up the host for the NetFPGA =
     4Here we provide the links and directions followed to set up a working NetFPGA host. The directions can be found on the following site: http://netfpga.org/netfpgawiki/index.php/Guide
     5
     6== Installing CentOS ==
     7CentOS is the recommended OS for use with NetFPGA. The most current version is 5.3, which is not listed as a version of CentOS that works with NetFPGA, but was used anyways. 
     8
     9=== CentOS 5.3 ===
     10The latest version is CentOS 5.3. 
     11
     12For the installation, the net install iso was chosen because of its small size. This can be found on any mirror site.
     13 * CentOS mirrors : http://isoredirect.centos.org/centos/5/os/i386/
     14 * Network installation of CentOS : http://www.tonybhimani.com/2007/12/20/centos-51-network-install-instructions/
     15 
     16=== CD install of CentOS 5.2 ===
     17The .iso images can be found here: http://vault.centos.org/5.2/isos/i386/
     18You only need CD's 1 through 4. k3b on Ubuntu was used to burn the images since the images burned with Windows seemed to become corrupt. It seems that you need to manually configure the network interface for eth0.
     19
     20 * Network interface configurations: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-networkscripts-interfaces.html
     21 * VLANs on CentOS: http://www.tummy.com/journals/entries/jafo_20061130_063931
     22 
     23
     24Before installing the netFPGA base package, make sure to update the kernel, since the dependencies for NetFPGA software require a newer version of the kernel than the one for 5.3. To install the basic drivers, install teh yum repository and GPG key, followed by the netFPGA base package.
     25{{{
     26rpm -Uhv http://netfpga.org/yum/el5/RPMS/noarch/netfpga-repo-1-1_CentOS5.noarch.rpm
     27yum install netfpga-base
     28/usr/local/NF2/lib/scripts/user_account_setup/user_account_setup.pl
     29}}}
     30The directions then go over installing CAD tools, but since we are just trying to make the FPGA into an !OPenFlow switch, we skip over that section of the guide. cd into the NetFPGA directory, then make, make install, and reboot.
     31{{{
     32make
     33#a bunch of output showing status
     34make install
     35#more outputs
     36reboot
     37}}}
     38after the machine has rebooted, check that drivers are loaded. The PID should show up:
     39{{{
     40[root@localhost ~]# /sbin/lsmod | grep nf2
     41nf2                    22540  0
     42}}}
     43Finally, verify the interfaces with `/sbin/ifconfig -a` at the terminal. This is the output for our setup:
     44{{{
     45eth0      Link encap:Ethernet  HWaddr 00:1C:C0:B4:EC:D4 
     46          inet addr:192.168.202.102  Bcast:192.168.203.255  Mask:255.255.252.0
     47          inet6 addr: fe80::21c:c0ff:feb4:ecd4/64 Scope:Link
     48          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     49          RX packets:825 errors:0 dropped:0 overruns:0 frame:0
     50          TX packets:212 errors:0 dropped:0 overruns:0 carrier:0
     51          collisions:0 txqueuelen:1000
     52          RX bytes:76080 (74.2 KiB)  TX bytes:21489 (20.9 KiB)
     53          Interrupt:50 Base address:0xa000
     54
     55lo        Link encap:Local Loopback 
     56          inet addr:127.0.0.1  Mask:255.0.0.0
     57          inet6 addr: ::1/128 Scope:Host
     58          UP LOOPBACK RUNNING  MTU:16436  Metric:1
     59          RX packets:1162 errors:0 dropped:0 overruns:0 frame:0
     60          TX packets:1162 errors:0 dropped:0 overruns:0 carrier:0
     61          collisions:0 txqueuelen:0
     62          RX bytes:2004680 (1.9 MiB)  TX bytes:2004680 (1.9 MiB)
     63
     64nf2c0     Link encap:Ethernet  HWaddr 00:4E:46:32:43:00 
     65          BROADCAST MULTICAST  MTU:1986  Metric:1
     66          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     67          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     68          collisions:0 txqueuelen:1000
     69          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
     70          Interrupt:58
     71
     72nf2c1     Link encap:Ethernet  HWaddr 00:4E:46:32:43:01 
     73          BROADCAST MULTICAST  MTU:1986  Metric:1
     74          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     75          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     76          collisions:0 txqueuelen:1000
     77          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
     78          Interrupt:58
     79
     80nf2c2     Link encap:Ethernet  HWaddr 00:4E:46:32:43:02 
     81          BROADCAST MULTICAST  MTU:1986  Metric:1
     82          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     83          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     84          collisions:0 txqueuelen:1000
     85          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
     86          Interrupt:58
     87
     88nf2c3     Link encap:Ethernet  HWaddr 00:4E:46:32:43:03 
     89          BROADCAST MULTICAST  MTU:1986  Metric:1
     90          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     91          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     92          collisions:0 txqueuelen:1000
     93          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
     94          Interrupt:58
     95
     96sit0      Link encap:IPv6-in-IPv4 
     97          NOARP  MTU:1480  Metric:1
     98          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     99          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     100          collisions:0 txqueuelen:0
     101          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
     102}}} 
     103
     104== NetFPGA on Ubuntu (11/7) ==
     105
     106Ultimately, the second NetFPGA host was built using Ubuntu 8.04 (kernel 2.6.24-16). To make things neat, user 'netfpga' was created for this process. Make sure the user is added to the sudoers list. 
     107
     108=== installing NetFPGA drivers ===
     109
     110First off, you need an account at netfpga.org to download the .tar files needed to install the netfpga drivers. The files needed are netfpga_base_beta_x_x.tar.gz and netfpga_lib.tar.gz. With an account, they can be downloaded from here: http://netfpga.org/beta/distributions/
     111
     112Untar and the files with `tar -xvf <filename>`. They will untar into one directory called ''NF2''. Do not make and install yet - At this point, follow the directions on the [http://www.netfpga.org/netfpgawiki/index.php/Ubuntu_Compatibility Ubuntu compatibility] page. They ask you to make a few changes on the files located in NF2. A few things to note regarding the directions:
     113
     114 * to edit /boot/grub/menu.lst as per the instructions, use the directions for modifying grub.conf for CentOS, found here: http://www.netfpga.org/netfpgawiki/index.php/Install_Software_1.0#CentOS_Installation_Instructions   
     115
     116 * Environmental variables can be added by the command
     117 {{{
     118 /usr/local/NF2/lib/scripts/user_account_setup/user_account_setup.pl
     119 }}}
     120 as per the [http://netfpga.org/netfpgawiki/index.php/Guide#Verify_the_software_and_hardware Guide], however you might need to edit /usr/local/NF2 in user_account_setup.pl to specify the exact path to your NF2 directory:
     121{{{
     122else
     123{
     124  print "Copying the NF2 directory to your user account\n";
     125  `cp -r /home/netfpga/test/NF2 ~`;
     126}
     127
     128print "Adding the NetFPGA Enviornment Variables to your .bashrc\n";
     129`cat /home/netfpga/test/NF2/bashrc_addon >> ~/.bashrc\n`;
     130}}}
     131
     132Then you can make and install the drivers. Note, the selftest can't be run in Ubuntu.
     133
     134=== installing !OpenFlow on NetFPGA ===
     135
     136General directions are found here: http://netfpga.org/netfpgawiki/index.php/OpenFlow-NetFPGA-090
     137
     138In order to install !OpenFlow on the FPGA you need both the netFPGA !OpenFlow switch driver and the actual !OpenFlow software.
     139 * netFPGA-OpenFLow-switch package : http://netfpga.org/beta/distributions/netfpga_openflow_switch.0_9_0-1.tar.gz (you need an account to access it)
     140 * !OpenFlow : use git (directions below)
     141 
     142Don't bother with the ./install.sh stuff under the '' Usage '' section of the directions found at netfpga.org, since they are custom-fitted for CentOS. Instead, the directions found at [http://openflowswitch.org/wk/index.php?title=CentOS_Install openflowswitch.org] should be referenced. The directions need to be modified slightly for Ubuntu:
     143
     1441. ''' Install Dependencies '''
     145
     146The following are needed to install everything properly (you should be able to `apt-get install` these):
     147 * git-core (recommended)
     148 * curl - dependency for Git that does not get installed properly due to a known bug in some versions of Ubuntu
     149 * autoconf
     150 * automake
     151 * libtool
     152 * gcc
     153 * pkg-config
     154
     155The stuff needed to build kernel modules:
     156 * linux-kernel-devel
     157 * kernel-package
     158 * linux-libc-dev
     159
     160
     1612. ''' Install ''' [[BR]]
     162 
     163The commands, as per the CentOS install page at openflow.org:
     164{{{
     165git clone git://openflowswitch.org/openflow
     166cd openflow
     167./boot.sh
     168}}}
     169Reboot the machine, then build the kernel modules:
     170{{{
     171./configure --with-l26=/lib/modules/`uname -r`/build --enable-hw-tables=nf2
     172make
     173sudo make install
     174}}}
     175
     1763. ''' Check that all is well/ the kernel modules exist: '''
     177
     178the command
     179{{{
     180ls <path-to-your-openflow-directory>/datapath/linux-2.6 | grep ofdatapath
     181}}}
     182should bring up the following 2 things:
     183 * ofdatapath.ko
     184 * ofdatapath_netfpga.ko
     185 
     186
     187== Regression testing ==
     188Connecting the SATA feedback loop seems to prevent the test from loading correctly, throwing the following error:
     189{{{
     190[root@localhost ~]# /root/NF2/lib/C/download/nf2_download ~/NF2/bitfiles/selftest.bit
     191Found net device: nf2c0
     192Bit file built from: nf2_top_par.ncd
     193Part: 2vp50ff1152
     194Date: 2008/ 7/21
     195Time: 17: 0:39
     196After resetting Programming interface, expected status to be 1 (FIFO empty).
     197However status & 0x102 is 0x102
     198
     199Fatal Error, exiting...
     200}}}
     201
     202 In addition, the Ethernet cables used for the cross-connection should be crossover, not straight through. Once the SATA cable was removed, and the test run with the command
     203{{{
     204~/NF2/projects/selftest/sw/selftest -n
     205}}}
     206the proper output was returned.
     207
     208== Installing the !OpenFlow implementation (!OpenFlow-NetFPGA-090) ==   
     209After successfully installing the drivers, you can install the !OpenFlow switch with the following command:
     210{{{
     211[root@localhost ~]# yum install netfpga-openflow_switch
     212}}}
     213
     214= Setting up the NetFPGA host =
     215The goal of this project is to set up two NetFPGA hosts as !OpenFlow switches capable of tunneling. The hosts we are going to be using are the NetFPGA pre-built quad-core rack PCs ([http://www.accenttechnologyinc.com/product_info.php?products_id=5 found here]). Although the PC's come with CentOS pre-installed with the proper drivers needed for the NetFPGAs, we want to use Ubuntu. This section will document the steps needed to build a host running Ubuntu 9.10 Server Edition.
     216
     217Note: We saved the HDD w/ CentOS that came with the PC.
     218
     219=== References ===
     220Following pages will be used to set the hosts up.
     221 
     222 * NetFPGA Installation Guide : http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/Guide
     223 * NetFPGA Ubuntu compatibility page : http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/UbuntuCompatibility
     224 * !OpenFlow tunneling : http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/TunnelingOpenFlowNetFPGA090
     225 
     226=== Host info ===
     227
     228 * Distro used for PC: Ubuntu 9.10 Server Edition 32bit
     229 * IPaddr: 192.168.203.187 (this is dynamic so it might change)
     230 * user: netfpga
     231
     232== Setup Instructions ==
     233=== 1. Installing Ubuntu ===
     2341. Change boot priority of CD drive in BIOS - default will not let you boot into the install CD
     235 
     2362. Follow most of the defaults, except for the following:
     237 * Disk partitioning - choose regular automatic partitioning 
     238 * When prompted with the option to install additional packages, install OpenSSH-server
     239
     2403. Update packages
     241
     2424. Install dependencies for Ubuntu compatibility, as per the [http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/UbuntuCompatibility compatibility page]. The packages are:
     243
     244== 2. Installing NetFPGA Drivers ==
     245Steps described by the NetFPGA tunneling page:
     246 1. Install base package
     247 2. Install !OpenFlow components
     248
     249=== 1. Installing base package ===
     250
     2511. Download the tarballs from http://netfpga.org/beta/distributions/  [[BR]]
     252For this you need a !FosWiki account (register [http://www.netfpga.org/foswiki/bin/view/System/UserRegistration?skin= here]). Download the newest netfpga_base_beta package (currently 2.0.0). Untar:
     253   
     254 tar -xvf netfpga_base_beta_2_0_0.tar.gz
     255   
     256Untarring the package will create the directory NF2. 
     257
     2582. Edit files/ symlinks as per compatibility page [[BR]]
     259
     260Create links:
     261{{{
     262ln /usr/bin/lspci /sbin/lspci
     263ln /usr/bin/setpci /sbin/setpci
     264ln -s /usr/lib/libpcap.so.0.8 /usr/lib/libpcap.so.0.8.3
     265}}}
     266
     267test_loopback_drop/run has been renamed run.pl in the most recent package. In this file you just need to change 'usleep 250' to 'sleep 0.00025'. 
     268
     269NF2/lib/C/kernel/Makefile is already in working condition - you don't need to modify it.
     270
     271*Stopped at this point: The IRQF_SHARED flag is deprecated in kernels greater than 2.6.24. Instead, the SA_SHIRQ flag is used in include/linux/interrupt.h . in Ubuntu compatibility page**   
     272
     2733. Allocate more kernel memory [[BR]]
     274The NetFPGA requires 256M memory allocated. This can be done through /boot/grub/menu.lst on older kernels. For the newer versions of Ubuntu (e.g. 9.10), which uses Grub 2, you need to edit /boot/grub/grub.cfg from
     275{{{
     276GRUB_CMDLINE_LINUX_DEFAULT="quiet splash
     277}}}
     278to
     279{{{
     280GRUB_CMDLINE_LINUX_DEFAULT="vmalloc=256M
     281}}}
     282
     2834. Edit and run user_account_setup.pl [[BR]]
     284The script sets environmental variables. It is located under /NF2/lib/scripts/user_account_setup/ . Running it as is will throw an error saying
     285
     286 cat: /usr/local/NF2/bashrc_addon: No such file or directory   
     287 
     288The easiest thing to do is to edit the script to contain the exact path to your NF2 directory and bashrc_addon:
     289{{{
     290else
     291{
     292  print "Copying the NF2 directory to your user account\n";
     293  `cp -r /home/netfpga/NF2 ~`;
     294}
     295
     296print "Adding the NetFPGA Enviornment Variables to your .bashrc\n";
     297`cat /home/netfpga/NF2/bashrc_addon >> ~/.bashrc\n`;
     298}}}
     299Then it will run correctly (here NF2 is already in the home directory)
     300{{{
     301$ ./user_account_setup.pl NF2 directory already exists copy has been canceled
     302Adding the NetFPGA Enviornment Variables to your .bashrc
     303}}}
     304
     305
     306trying to use the 9.10 compatible stuff, found in http://www.netfpga.org/foswiki/bin/view/NetFPGA/OneGig/RealTimeSwitch
     307
     308----
     309----
     310= Installing Ubuntu, ~~take 3~~ take 4 =
     311After installing 9.10 server (AMD64) and 9.10 server 32 bit, we realized that there may be a "few" complications coming from the changes that were made in the more recent versions of Ubuntu (e.g. Grub 2, discarding "antiquated" libraries, ect), so things were rolled back to installing Ubuntu 9.04 server 32 bit. This should simplify *many* things. Hopefully.
     312
     313== 1. Installation of the OS ==
     3141. Go to the BIOS settings, make CD drive highest boot priority
     315
     3162. Follow the default choices given for intallation, save the following few:
     317 
     318 * no setup of LVM for disk partitioning
     319 * additional packages - install OpenSSH server
     320 * hostname: netfpga1
     321 * user: netfpga
     322 
     3233. When rebooting, go back to the BIOS settings to make sure the HDD is included in the boot priority list. 'x' adds excluded devices to the boot priority list.   
     324
     3254. Who's afraid of a little command line? If you are, y' shoulda stuck with desktop edition.
     326
     327=== Host info ===
     328From past experience, the following info will come in handy when troubleshooting stuff...
     329 * uname -a shows: 2.6.28-11-server i686 GNU/Linux
     330 * IP address: 192.168.203.187 (DHCP - May change)
     331 * bootloader: grub
     332 
     333== 2. Installing drivers (NetFPGA, building NF2.ko module)  == #BuildingNF2
     334The host is named "Netfpga1" because it will be a NetFPGA host. So this is sort of important.
     335
     336 * Ubuntu Compatibility
     337 * http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/Guide
     338
     3390. Get a Foswiki account so you can download the packages you need at their [http://www.netfpga.org/foswiki/bin/view/System/UserRegistration?skin= registration page].
     340
     3411. Update packages, then install the following dependencies as per the [http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/UbuntuCompatibility Comaptibility page]:
     342  * build-essential
     343  * linux-headers-`uname -r`
     344  * ncurses-dev
     345  * libnet1-dev
     346  * libxml-simple-perl
     347  * libio-interface-perl
     348  * liblist-moreutils-perl
     349  * liberror-perl
     350  * libnet-rawip-perl
     351  * sun-java6-jre
     352  * sun-java6-jdk
     353  * libpcap0.8
     354  * libpcap0.8-dev
     355
     3562. Download the base package from http://netfpga.org/beta/distributions/. The page will prompt you  for your !FosWiki username and password. The newest is netfpga_base_beta_2_0_0. Untar:
     357{{{
     358tar xvf netfpga_base_beta_2_0_0.tar.gz
     359}}}   
     360This will create a directory called NF2 in your home directory.
     361
     3623. create symlinks:
     363{{{
     364ln /usr/bin/lspci /sbin/lspci
     365ln /usr/bin/setpci /sbin/setpci
     366}}}
     367
     3684. Acquire libpcap.so.0.9.4 (find on bottom of this page), slap it into /usr/lib, and create symlinks, as such:
     369{{{
     370ln -s /usr/lib/libpcap.so.0.9.4 /usr/lib/libpcap.so.0.9
     371ln -s /usr/lib/libpcap.so.0.9.4 /usr/lib/libpcap.so.0
     372ln -s /usr/lib/libpcap.so.0.9.4 /usr/lib/libpcap.so
     373}}}
     374
     375
     3765. Edit files by following the compatibility page. Some of the stuff there is outdated, so keep an eye out for the following:
     377
     378 * /test_loopback_drop/run is /test_loopback_drop/run.pl
     379 * edit "usleep 250" to "sleep 0.00025" in /test_loopback_drop/run.pl
     380 * Don't change anything on /NF2/lib/C/kernel/Makefile
     381 * Likewise, NF2/lib/C/download/nf2_download.c need not be edited. 
     382
     3836. Edit /boot/grub/menu.lst to allocate more kernel memory:
     384{{{
     385title    Ubuntu 9.04, kernel 2.6.28-16-generic
     386uuid    (BIG number here)
     387kernel  /vmlinuz-2.6.28-16-generic root=UUID=(BIG number here) ro quiet splash vmalloc=256M
     388}}}
     389
     3907. Edit /home/netfpga/NF2/projects/router_kit/sw/rkd.cc to include limits.h
     391
     3928. Replace  asm/semaphores with linux/semaphores in:
     393 * /home/netfpga/NF2/lib/C/kernel/nf2main.c
     394 * /home/netfpga/NF2/lib/C/kernel/nf2_control.c
     395
     3969. `make` and `make install` in user's NF2 directory (you need to be root)
     397
     398== 3. Regression testing ==
     399The selftest will not work on Ubuntu, so we skip right to the Regression tests.
     400 
     4011. Reprogramming the CPCI
     402 
     403In cpci_reprogram.pl line 216, change the offset from 5 to 4:
     404{{{
     405# Search for the NetFPGA device ID
     406                if ($words[4] eq $NF2_device_id)           <<---over here
     407                {
     408                        push (@device_list, $words[0]);
     409                }
     410}}} 
     411
     412Then run cpci_reprogram.pl (run from user home directory):
     413{{{
     414/home/netfpga/NF2/lib/scripts/cpci_reprogram/cpci_reprogram.pl --all
     415}}}
     416Add the same command to /etc/rc.local so this is done automatically each time the machine is rebooted.
     417
     4182. Rename interfaces.
     419
     420Since you need eth1 and 2 for the regression test, you need to change eth0 to eth2. Change "eth0" to "eth2" in /etc/udev/rules.d/70-persistent-net.rules so it looks similar to this:
     421{{{
     422SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:30:48:b1:9d:a9", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
     423
     424# PCI device 0x8086:0x109a (e1000e)
     425SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:30:48:b1:9d:a8", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
     426}}}   
     427 
     428The changes will take effect after you reboot the machine.
     429
     4303. Much is hard-coded for CentOS. Change /sbin/arp to /usr/sbin/arp in NF2/projects/router_kit/regress/test_03_arp_table/setup
     431
     4324. running the regression test
     433
     434The following command can be used to run the tests, which will take about 45 -60 min (according to the Guide).
     435{{{
     436~/NF2/bin/nf2_regress_test.pl
     437}}}
     438
     439Expect some things to  fail; the tests even fail on the CentOS pre-installed.
     440
     441== 4. Installing !OpenFlow components ==
     442   
     443'''Prequisite packages'''
     444 * autoconf
     445 * libtool
     446 * pkg-config
     447 * linux-source (2.6.28)
     448
     449Following the instructions of [http://www.openflowswitch.org/foswiki/bin/view/OpenFlow/Deployment/HOWTO/LabSetup Labsetup]
     450we cloned the 0.8.9 branch of the their git repository, I'll include the steps because their pages don't stay up very long.
     451
     452{{{
     453 $ git clone git://openflowswitch.org/openflow.git
     454 $ cd openflow
     455 $ git checkout -b openflow_089_rev4 origin/release/0.8.9
     456}}}
     457
     458Assuming all the prerequisites are installed, the next step is to compile the source. We're trying to make two kernel objects, and a bit file for the netfpga.
     459
     460{{{
     461 $ ./boot.sh
     462 $ ./configure --with-l26=/lib/modules/`uname -r`/ --enable-hw-tables=nf2 
     463 $ make
     464}}}
     465
     466boot.sh will fail to run if the listed prerequisites are not installed (there may be more preqs based on what was installed prior, build-tools, kernel headers, etc...).
     467
     468The original configure line read "./configure --with-l26=--with-l26=/lib/modules/`uname -r`/build --enable-hw-tables=nf2", while the extra --with-l26 is an obvious error, there are others. The configure script stuffs the argument of --wtih-l26 into a $path variable, then looks for the subdirectories $path/build and $path/source. Specifying --with-l26 as ../`uname -r`/build causes configure to fail, since there is no source directory in the build directory. Instead what they wanted was the directory 1 level up.
     469
     470In our first attempt we just ran make and went on to the next step, however when we tried to insert the modules one of them failed. The problem was with the ofdatapath_netfpga.ko module. When we tried to insert it (with insmod) it would complain about a missing symbol.
     471Dmesg would show an even every time you tried to insert the module that said
     472
     473{{{
     474WARNING: "nf2k_reg_read"
     475WARNING: "nf2k_reg$ ./boot.sh
     476}}}
     477
     478Consulting a reference from the Stanford [$ https://mailman.stanford.edu/pipermail/openflow-discuss/2009-January/000051.html mailing list] on netfpga, we determined that the Module.symvers file needed to be edited. We needed to copy the entries from the ~/NF2/lib/c/kernel/Modules.symvers into the ~/openflow/datapath/linux-2.6/Modules.symvers. The NF2 directory comes from two tar files:
     479 * netfpga_base_beta_2_0_0_0.tar.gz
     480 * netfpga_openflow_switch.0_8_9-1.tar.gz - This file was chosen to match the version of the Netfpga openflow source we're compling.
     481Go to http://netfpga.org/beta/distributions/ in order to download these packages (you'd need your !FosWiki account).
     482
     483Making this change produces the bits files and modules that will be needed in the next section.
     484
     485After a sucessfull complie we needed to load the openflow bitfile onto the netfpga
     486{{{
     487 # cpci_reprogram.pl
     488 # nf2_download ~/openflow/datapath/hwtable_nf2/openflow_switch.bit
     489}}}
     490
     491The actual paths may vary but the basic process is the same. This is fairly straight forward assuming the netfpga tools were already built.
     492
     493Once that was done we inserted the modules (required root privileges)
     494{{{
     495# /sbin/insmod ./openflow/datapath/linux-2.6/ofdatapath.ko
     496# /sbin/insmod ./openflow/datapath/linux-2.6/ofdatapath_netfpga.ko
     497}}}
     498
     499At this point we're ready to try testing the netfpga as a open flow switch. I'm going to pause here and rearrange the networks that the specfic netfpgas belong to.
     500
     501The host has been renamed to of1 and was given an official place in the WINLAB network with IP addr. 192.168.200.86
     502
     503Next, you create the OpenFlow datapaths. What they refer to as ./utilities can be found under your openflow directory. We didn't assign a MAC address to the interface like they did in the tutorial.
     504{{{
     505# ./utilities/dpctl adddp nl:0
     506}}}
     507
     508Then, add the NetFPGA interfaces. Here we encounter another typo in the instructions - there is no nf2c4.
     509{{{
     510# ./utilities/dpctl addif nl:0 nf2c0
     511# ./utilities/dpctl addif nl:0 nf2c1
     512# ./utilities/dpctl addif nl:0 nf2c2
     513# ./utilities/dpctl addif nl:0 nf2c3
     514}}}
     515
     516Then you make the !OpenFlow module listen to your controller. For this setup the controller is a PC running SNAC with the IP address 192.168.203.75. secchan can be found under your openflow directory.   
     517{{{
     518# ./secchan/ofprotocol nl:0 tcp:192.168.203.75:6633
     519}}}
     520
     521=== Building the L2 Tunnel ===
     522
     523==== 2/15/10 ====
     524
     525James guessed that maybe the tunneling code was rolled up into the 0.9.1 version of the NF2 driver. This was incorrect.
     526
     527Following the directions [#BuildingNF2 above], James rebuilt the nf2 drivers, and installed the updated module. We did not notice any changes in the open flow behavior. But the project directory for tunneling was missing.
     528
     529==== 2/16/10 ====
     530
     531The code for the netfpga to do tunneling is present. It includes a different bitfile and some diffrent startup scritps. They claim to be running off version 0.8.9 of somethig (I'm guessing the open flow code)
     532
     533The main script that needs to be modified is the of_setup_to_site1_and_site2.sh script. I've modified the script to reflect our setup:
     534
     535{{{
     536### Variable Setting
     537SRCIP1=192.168.200.87   #For nf2c1  Change accordingly.
     538#SRCIP2=192.168.100.50   #For nf2c2  Change accordingly.
     539SRCMAC1=00:4e:46:32:43:01
     540#SRCMAC2=00:4e:46:32:43:02
     541DSTIP1=10.50.0.62;# IP address of the tunneling target site 1
     542#DSTIP2=12.13.14.15;   # IP address of the tunneling target site 2
     543# Your local Gateway MAC address
     544DSTMAC1=00:4E:46:32:43:01
     545#DSTMAC2=00:d0:05:5d:24:02
     546
     547TUNIF1=nf2c1 # The tunneling target site 1
     548#TUNIF2=nf2c2 # The tunneling target site 2
     549}}}
     550
     551Examining the rest of the script seems to require a setreg tool, that isn't installed as of yet. Ubuntu claims is comes form the package mono-devel.
     552
     553=== Centos Revisited ===
     554
     555==== 2/22/10 ====
     556
     557The ubuntu experiment is failing terribly. The NF2 modules are throwing errors left and right about dma timeouts, and buffer overruns.
     558James is attempting to build the openflow switch on the Centos Refrence installations that came with the the Tyan boxes from the reference vendor.
     559
     560The vendor already ran
     561{{{
     562  yum install netfpga-base
     563}}}
     564
     565From the factory the netfpga packages that were installed are as follows:
     566{{{
     567netfpga-base.i386                          2.0.0-beta                  installed
     568netfpga-kernel.i386                        2.0.0-beta                  installed
     569netfpga-repo.noarch                        1-1_CentOS5                 installed
     570netfpga-utils.i386                         2.0.0-beta                  installed
     571netfpga_lib.i386                           1.1-2                       installed
     572}}}
     573
     574James added one additional package to their netfpga installation
     575{{{
     576netfpga-openflow_switch.i386               0_9_0-1                     installed
     577}}}
     578
     579This mostly populates the /root/NF2/projects/openflow subdir with stuff from the yum repository.
     580
     581
     582In order to build the openflow modules from the 0.8.9~2 [http://openflowswitch.org/downloads/openflow-0.8.9~2.tar.gz tarball], we need a bunch of tools not installed in the refrence CentOS system, this step is copied directly form [http://openflowswitch.org/wk/index.php?title=CentOS_Install CentOS instructions]:
     583{{{
     584sudo yum install git automake pkgconfig libtool gcc
     585}}}
     586
     587Apparently you also need to compile automake from sources:
     588{{{
     589wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.63.tar.gz
     590tar xvzf autoconf-2.63.tar.gz
     591cd autoconf-2.63
     592./configure --prefix=/usr
     593make
     594sudo make install
     595}}}
     596
     597= Ubuntu 10.04 =
     598Current Ubuntu NetFPGAs run Ubuntu version 8.04 and !OpenFlow ver. 1.0. Here we try to move to newer distributions w/ !OpenFlow Ver. 1.0. The hardware we use here is the NetFPGA cube, another version of the NetFPGA pre-built solution. A user named 'test' with root privs was added for this purpose.   
     599
     600'''Linux distro:''' [[BR]]
     601Ubuntu Server 10.04, w/ xfce4 WM [[BR]]
     602kernel: 2.6.32-21-generic-pae
     603
     604'''Packages:''' [[BR]]
     605NetFPGA base 2.1.0 [[BR]]
     606Tunneling OpenFlow NetFPGA 1.0.0
     607
     608'''Host info:''' [[BR]]
     609node1-1: 192.168.202.8  [[BR]]   
     610node1-2: 192.168.202.164   
     611
     612=== Installing Ubuntu. ===
     613
     6141. set boot priority of CD drive to 1st
     6152. If desktop edition, boot as a live CD and install from there. Trying direct install just resulted in the system starting up BusyBox (9.10) or just proceeding to live CD Mode (10.04). Server edition can be installed directly w/out issues.   
     616
     617=== Setup: NetFPGA drivers. ===
     618'''1. dependencies.'''[[BR]]
     619There is an updated dependency list:
     620
     621  * ncurses-dev
     622  * libnet1-dev
     623  * libxml-simple-perl
     624  * libio-interface-perl
     625  * liblist-moreutils-perl
     626  * liberror-perl
     627  * libnet-rawip-perl
     628  * sun-java6-jre
     629  * sun-java6-jdk
     630  * libpcap0.8-dev
     631
     632in 10.04, sun-java6-jre, jdk are obsoleted and moved to the partner repository. This repository can be added w/ the following (ref: https://help.ubuntu.com/community/Repositories/CommandLine):
     633
     634 1. copy "deb http://archive.canonical.com/ lucid partner" sans quotes to /etc/apt/sources.list
     635 1. run apt-get update.
     636 1. run apt-get as usual for the packages.
     637
     638'''2. Kernel memory allocation. '''[[BR]]
     639Ubuntu versions beyond 8.04 (assume anything w/ kernels beyond v 2.6.28) use GRUB 2. GRUB 2 gets rid of menu.lst, so kernel memory must be allocated via the following method (ref. http://ohioloco.ubuntuforums.org/showthread.php?p=8229620):
     640
     641Add "vmalloc=512m" to the following line in /etc/default/grub so it looks like this:
     642{{{
     643GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vmalloc=512m"
     644}}}
     645Then run `update-grub` to regenerate /boot/grub/grub.cfg with the new parameter (you never want to modify grub.cfg directly). 
     646[[BR]] 
     647'''3. Symlinks.'''[[BR]][[BR]]
     648The steps are the same as before...Make sure to slap things into /usr/lib before linking.
     649
     650'''4. Edit files.'''
     651 * edit "usleep 250" to "sleep 0.00025" in /test_loopback_drop/run.pl
     652 * edit /home/netfpga/NF2/projects/router_kit/sw/rkd.cc to include limits.h
     653
     654'''5. Setting Variables.'''[[BR]]
     655Scripts seemed broken, so manually export'd all of them. Specifics of variables pulled from README in base package root directory. 
     656{{{
     657export NF_ROOT=/home/test/netfpga (wherever your netfpga base files are)
     658export NF_DESIGN_DIR="${NF_ROOT}/projects/reference_router" (whatever directory project is in)
     659export PERL5LIB="${NF_DESIGN_DIR}/lib/Perl5:${NF_ROOT}/lib/Perl5:${PERL5LIB}" (from ${NF_ROOT}/bin/nf_profile)
     660}}}
     661
     662'''6. Moment of truth.'''[[BR]]
     663`make` then `make install clean`.
     664
     665check for nf2 module with `lsmod | grep nf2`:
     666{{{
     667nf2                    13425  0
     668}}}
     669and for nf2cn, n=0:3 with `ifconfig -a`.
     670{{{
     671nf2c0     Link encap:Ethernet  HWaddr 00:4e:46:32:43:00 
     672          BROADCAST MULTICAST  MTU:1500  Metric:1
     673          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     674          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     675          collisions:0 txqueuelen:1000
     676          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
     677          Interrupt:16
     678
     679nf2c1     Link encap:Ethernet  HWaddr 00:4e:46:32:43:01 
     680          BROADCAST MULTICAST  MTU:1500  Metric:1
     681          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     682          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     683          collisions:0 txqueuelen:1000
     684          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
     685          Interrupt:16
     686
     687nf2c2     Link encap:Ethernet  HWaddr 00:4e:46:32:43:02 
     688          BROADCAST MULTICAST  MTU:1500  Metric:1
     689          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     690          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     691          collisions:0 txqueuelen:1000
     692          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
     693          Interrupt:16
     694
     695nf2c3     Link encap:Ethernet  HWaddr 00:4e:46:32:43:03 
     696          BROADCAST MULTICAST  MTU:1500  Metric:1
     697          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     698          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     699          collisions:0 txqueuelen:1000
     700          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
     701          Interrupt:16
     702}}}
     703[[BR]]
     704[[BR]]
     705[[BR]]
     706[wiki:Internal/OpenFlow/ return to OpenFlow index]