wiki:Internal/OpenFlow/QuantaOpenflow

OpenFlow on the LB9A

This page describes that various !Op[enfLow related aspects of the Quanta LB9A, such as OVS. ref: http://prontosystems.wordpress.com/2011/09/21/running-ovs-on-pronto/

Using OVS support mode

Switches must be running the latest version of the firmware in order to support OVS. The general steps for updating firmware is as follows:

  1. Boot switch into Linux shell mode
  2. Delete contents of /cf_card
  3. FTP new image tarball to /cf_card directory and untar
  4. Reboot; enter u-boot CLI
  5. Create a new boot environment variable and re-link bootcmd
  6. Reboot; when prompted choose option 3 or 4 depending on needs.

The full manual can be found as an attachment to this page.

The LB9A startup process and manipulation of u-boot is described in detail here.
The latest tarball can be found at repository1:/tftpboot/pronto3290.tgz.
The new boot variable parameters are:

setenv bootargs root=/dev/hda1 rw noinitrd console=ttyS0,$baudrate;ext2load ide 0:1 0x1000000 boot/uImage;ext2load ide 0:1 0x400000 boot/LB9A.dtb;bootm 1000000 - 400000

OpenFlow related OVS configuration is described here and here.

Switching between Xorp+ (Regular switching) and Open flow

In order to switch between the two firmware modes, the switch must be rebooted. Once rebooted you have to intercept the boot loader countdown (otherwise it will boot it's default). Once the countdown in interrupted you will be in the Uboot PreOs. From here you can modify the boot varibles to swtich between the diffrent firmwares. A few usefull Uboot commands:

  • printenv - List current environment varibles
  • setenv - sets the env variable. Syntax is: setenv VARNAME 'VARVALUE'
  • saveenv - saves modifications
  • boot - Once env varibles are set to desired varibles, continues the boot process

Complete list at the bottom

The output of printenv currently looks like this:

=> printenv
bootdelay=5
baudrate=115200
loads_echo=1
ethaddr=00:E0:0C:00:00:FD
eth1addr=00:E0:0C:00:01:FD
eth2addr=00:E0:0C:00:02:FD
rootpath=/nfsroot
hostname=LB9A_X
loadaddr=4000000
ethact=TSEC0
ipaddr=10.50.0.93
gatewayip=10.50.0.42
netmask=255.255.0.0
serverip=10.50.0.42
bootfile=LB9A.dtb
filesize=1860
fileaddr=2000000
flash_bootcmd=setenv bootargs root=/dev/ram console=ttyS0,$baudrate rw DEV_ADDR=172.16.20.253 ETH0_IP=172.16.20.253; bootm ffd00000 ff000000 ffee0000
cfcard_bootcmd=setenv bootargs root=/dev/ram console=ttyS0,$baudrate rw; ext2load ide 0:1 0x1000000 /uImage;ext2load ide 0:1 0x2000000 /uInitrd2m;ext2load ide 0:1 0x400000 /LB9A.dtb;bootm 1000000 2000000 400000
bootcmd=run cfcard_bootcmd
stdin=serial
stdout=serial
stderr=serial

Environment size: 742/8188 bytes

The major varibles we'll be concerned with are:

  • flash_bootcmd - Open flow boot commands
  • cfcard_bootcmd - Xorp+ boot commands
  • bootcmd - Uboot consults this varible to determine what to boot

The bootcmd variable is the one that dictates what actually gets booted. It is currently configured (this should be the default) to run the cfcard_bootcmd varible. This variable will be substituted with it contents, which are the commands required to boot from the cfcard into the xorp environment. We will change this from 'run cfcard_bootcmd' to 'run flash_bootcmd'.

setenv bootcmd 'run flash_bootcmd'

From here we can simply boot if we don't want to change the default boot config. Or we could do a saveenv if we require that default booting behavior be changed.


The complete uboot command list as per the ? command

?       - alias for 'help'
autoscr - run script from memory
base    - print or set address offset
bdinfo  - print Board Info structure
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootm   - boot application image from memory
bootp   - boot image via network using BootP/TFTP protocol
cmp     - memory compare
coninfo - print console devices and information
copy    - download image file from tftp server
cp      - memory copy
crc32   - checksum calculation
dhcp    - invoke DHCP client to obtain IP/boot params
diskboot- boot from IDE device
echo    - echo args to console
erase   - erase FLASH memory
exit    - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
flinfo  - print FLASH memory information
go      - start application at address 'addr'
help    - print online help
icrc32  - checksum calculation
ide     - IDE sub-system
iloop   - infinite loop on address range
imd     - i2c memory display
iminfo  - print header information for application image
imls    - list all images found in flash
imm     - i2c memory modify (auto-incrementing)
imw     - memory write (fill)
inm     - memory modify (constant address)
iprobe  - probe to discover valid I2C chip addresses
itest   - return true/false on integer compare
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
md      - memory display
mii     - MII utility commands
mm      - memory modify (auto-incrementing)
mtest   - simple RAM test
mw      - memory write (fill)
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
pci     - list and access PCI Configuration Space
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv  - set environment variables
sleep   - delay execution for some time
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
version - print monitor version
Last modified 8 years ago Last modified on Feb 6, 2012, 8:42:55 PM

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.