Building IODS

Getting IODS

You can download a VM image from the web. See the download section at http://www.openflowhub.org/display/Indigo/. These VMs were generated with VMWare. If anyone wants to post information on converting this to other hypervisors, please do so in the openflow.org Indigo forums, or send to dan.talayco at bigswitch.com.

You can also download the source from github at https://github.com/bigswitch/iods.

Logging in

If you are using the VM, the username is indigo, the password is indigo. ssh is enabled, but you will have to know the IP address of the machine. The machine has its hostname set to iods.

Building the Source

The quick way to get started is:

(If using the VM) log in as indigo (password indigo) and change directory to iods: 'cd iods'

This code is in a git repository checked out as read-only from github at git://github.com/bigswitch/iods.git. You may want to pull the latest updates from there depending on what features you wish to use: 'git pull'

Now change directory to the core build directory: 'cd indigo-core'

Then 'make <platform>' where platform is one of:

  • gsm73xx: The Netgear GSM7328SO and GSM7352SO target platforms
  • lb9a: The Pronto 3290 platform
  • lb8: The Pronto 3780 platform
  • lb4g: The Pronto 3240 platform
  • t2ref: The Broadcom Triumph 2 reference design

Once you've built the image, the results will be in indigo-core/build-images/<platform>. For the Pronto platforms, the result is in a file called uInitrd2m. For the Netgear platforms it is in a file called mtd0image. For the Broadcom reference design, it is recommended that you use NFS for booting. (Apologies: A description of this will be written up soon.)

See below for more details on the source code organization.

What's Installed Where

Package

Where

Notes

iods source

/home/indigo/iods

The source code release for building Indigo

Tool Chain root

/tools

Also linked to /home/indigo/tools

Pronto ELDK Toolchain

/tools/ELDK_4.2

The toolchain for targeting Pronto platforms.

Netgear ELDK Toolchain

/tools/ntgr-bld-env

The toolchain for targeting Pronto platforms.

Wireshark

/usr/bin/wireshark

Packet inspector with OpenFlow plugin installed

For additional details of other installed packages, see the IODS VM Bringup guide available at openflowhub.

Source Code Organization

The source is located in /home/indigo/iods. It is organized into different directories.

Directory

Purpose

indigo-core

The common build root for all platforms. All "make" commands are issued here. The common components such as the openflow directory and busybox are located here.

indigo-ui

The common UI components such as Lua and Haserl. These are generally prebuilt, but are included for completeness.

indigo-gsm73xx

The platform directory for the Netgear GSM7328SO and GSM7352SO targets

indigo-lb9a

The platform directory for the Pronto 3290 target

indigo-lb8

The platform directory for the Pronto 3780 target

indigo-lb4g

The platform directory for the Pronto 3240 target

indigo-bcm-ref

The platform directory for the Broadcom Triumph 2 target

cmdsrv

The non-NDA portion of the command server interface code. This component provides an external (REST-like) interface to the switch component and is used for web and CLI access to the switch driver

For each platform you will see a file iods-<release>-<platform>.tgz. These files contain the binary component for the platform and each is untarred directly on top of the target root file system during the build.

When a build is done, the main target is the root filesystem. This is typically generated in a couple of stages.

  • Create an empty target directory
  • Copy the common directory tree from indigo-core/common-rootfs-template to the target directory
  • For Pronto systems, there is a pronto common directory tree in indigo-core/pronto-rootfs-template.
  • Copy the platform specific directory tree, usually from indigo-<platform>/platform-rootfs-template to the target directory
  • Build the components from available source such as dropbear, openflow and busybox. Some components are not built in this system because they contain proprietary source code. So...
  • Copy the pre-built binary components by untarring the file iods-<release>-<platform>.tgz to the target directory.
  • Generate the binary root file system
    • Create an empty file
    • Mount the file as a filesystem
    • Copy the contents of the target root file system into the mounted file
    • Unmount the filesystem
    • Compress and add a u-boot header to get a flashable binary image