= !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 1. Delete contents of /cf_card 1. FTP new image tarball to /cf_card directory and untar 1. Reboot; enter u-boot CLI 1. Create a new boot environment variable and re-link `bootcmd` 1. 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 [wiki:Internal/OpenFlow/QuantaSetup here]. [[BR]] The latest tarball can be found at repository1:/tftpboot/pronto3290.tgz. [[BR]] 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 [http://prontosystems.wordpress.com/2011/09/21/running-ovs-on-pronto/ here] and [wiki:Documentation/OpenFlow/ofTopology#OVS 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 }}}