Squashed commit of the following:

commit b905df2f2634c892e6cf322efe59c334d9fe61a7
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Mon Nov 18 17:00:25 2013 -0800

    Added FlowSync flag to FlowProgrammer.

commit 10e0856a42c855b3823efc67e90786add29e19ab
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Mon Nov 18 10:55:23 2013 -0800

    Added FlowPusher enabling flag (false by default).

commit dab231cc977eb013b344dc886fd0b543148f05ca
Author: Brian O'Connor <bocon@onlab.us>
Date:   Thu Nov 14 21:11:50 2013 -0800

    reorganized and cleaned up FlowSynchronizer

commit 1c381e099f286ac27023b22c2f534d713d493c6b
Author: Brian O'Connor <bocon@onlab.us>
Date:   Thu Nov 14 18:41:48 2013 -0800

    created FlowProgrammer module and implemented FlowPusher and FlowSynchronizer as services, also modified FlowManager to use the service exported by FlowProgrammer

commit ddbc870fc089f72765cf8abee3c79faf226616d5
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Wed Nov 13 10:43:33 2013 -0800

    Limited number of messages sent at once

commit 7d74dea34013611f159833ecfd4a7ad95307f9d8
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Tue Nov 12 17:58:34 2013 -0800

    Separated flowprogrammer package from flowmanager.

commit c11fda8d1c1e058ededf5f602e5ed3faefdb3e36
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Tue Nov 12 14:59:43 2013 -0800

    Made FlowPusher multi-threaded.

commit 21b7c1fa8c2d2c0459407510bbd4d224ee9ca804
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Tue Nov 12 11:21:36 2013 -0800

    Added FlowPath/FlowEntry version interfaces to FlowPusher

commit ec4c43da51a3807defba115148e886a4b31eb8c8
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Mon Nov 11 15:51:17 2013 -0800

    Finished implementing FlowPusherService.

commit 267cfaafbf4d7d7ac5ec82bbce076d8616d552a8
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Tue Nov 5 15:52:38 2013 -0800

    Modified FlowManager to use FlowPusher instead of OFMessageDamper and FlowSwitchOperation.

commit 0b8f3a6cf6d27f0986770b1b93935dfdfee2f38c
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Tue Nov 5 10:18:12 2013 -0800

    Refactored FlowPusher

commit 73c1690e626b61945ebbe166b3fc8af259348ac6
Author: Brian O'Connor <bocon@onlab.us>
Date:   Tue Nov 5 15:26:19 2013 -0800

    removing FlowSync from Floodlight modules

commit e9f5881a0a5ab1b1f0a0b93706d282ee420b71e6
Author: Brian O'Connor <bocon@onlab.us>
Date:   Tue Nov 5 15:17:44 2013 -0800

    incremental commit before changing origins; moving FlowSync to service from module, added helper code to construct and send OF messages

commit 669cb73862ede66dcb8cd3a35cf3c5e6d0903172
Author: Brian O'Connor <bocon@onlab.us>
Date:   Wed Oct 30 20:49:59 2013 -0700

    adding FlowSynchronizer module

commit 0baf9c1f0d4cf9a0c1fba7cd39fc600440ff7a92
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Thu Oct 31 17:14:13 2013 -0700

    Remove "suspended" member from FlowQueueTable.

commit f9d4a9a57570d9b012365a22485210ed3ce25774
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Thu Oct 31 15:36:01 2013 -0700

    Created FlowQueueTable basic structure.

commit c54f0df74b9d0d79919b57afdd56cdb3153af210
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Thu Oct 31 11:40:32 2013 -0700

    Added comments

commit 8a74ddad4c2b6e983c201f41443f5625fd713114
Author: Naoki Shiota <n-shiota@onlab.us>
Date:   Thu Oct 31 10:55:32 2013 -0700

    Added FlowPusher.java basic implementation

commit f6e58e13d76e127a2ff86f9c7af8ea52115d85db
Merge: 6d7e0c4 71d458c
Author: pavlin-r <pavlin@onlab.us>
Date:   Thu Nov 14 13:51:34 2013 -0800

    Merge pull request #451 from jonohart/master

    Incremental changes to proxy ARP and reactive forwarding

commit 71d458ca5f3887b400adb7be7ed74b9d42e77e04
Author: Jonathan Hart <jono@onlab.us>
Date:   Thu Nov 14 13:40:16 2013 -0800

    Use FlowManager's flow ID service rather thanhave Forwarding generate its own IDs

commit 293b03c4749fa579d931115ff246f561a43c4b4f
Author: Jonathan Hart <jono@onlab.us>
Date:   Thu Nov 14 13:28:17 2013 -0800

    Reverted eclipse auto-indent on these files

commit f05769c7539d3f9d9f941cd4f9c582c3a3760854
Author: Jonathan Hart <jono@onlab.us>
Date:   Thu Nov 14 11:36:06 2013 -0800

    Implemented hashcode() and equals() on Dpid, Port and SwitchPort in order to make SwitchPort comparison easier

commit 41d364178b7042891bac6bcfd6525e312adf5e22
Author: Jonathan Hart <jono@onlab.us>
Date:   Thu Nov 14 11:34:59 2013 -0800

    Improvements to Forwarding to not add flows that already exist

commit a94627b26540c1579f73f485dca3330353de7ebe
Author: Jonathan Hart <jono@onlab.us>
Date:   Thu Nov 14 11:33:46 2013 -0800

    Changes to Device and Switch storage to improve accuracy of device data. For now we will clear the devices when we add or remove ports.

commit c7579becf2f556fb10f8ea25c7607f395ddd1333
Author: Jonathan Hart <jono@onlab.us>
Date:   Tue Nov 12 12:57:29 2013 -0800

    Cleaned up ARP stuff in the HazelcastDatagrid slightly

commit a136fe441a7b76bb312dad0b38900f8dc3dfd663
Merge: 4ca022b 6d7e0c4
Author: Jonathan Hart <jono@onlab.us>
Date:   Tue Nov 12 11:56:48 2013 -0800

    Merge branch 'master' of https://github.com/OPENNETWORKINGLAB/ONOS

commit 4ca022b3023a59794dd3b15310ae5034b1a89a0a
Author: Jonathan Hart <jono@onlab.us>
Date:   Tue Nov 12 11:56:23 2013 -0800

    Minor changes to ARP

commit 0a0ac376619e7c589c7e217bc9981b5148b064b2
Merge: 4b7fd06 5361e9d
Author: Jonathan Hart <jono@onlab.us>
Date:   Mon Nov 11 22:50:00 2013 -0800

    Merge in changes to Forwarding

commit 4b7fd06b4466ccfd8eae7c517f4c5eb4d40ec653
Author: Jonathan Hart <jono@onlab.us>
Date:   Mon Nov 11 22:49:55 2013 -0800

    Began implementing IPC with Hazelcast in order to broadcast ARP via other ONOS nodes

commit 5361e9dbab638d0ff339bc8f09e0052a1425e6dc
Author: Jonathan Hart <jono@onlab.us>
Date:   Thu Nov 7 22:41:32 2013 -0800

    Fixed the use of the FlowManager API to provide rudimentary reactive forwarding
14 files changed
tree: aaf4adb52656d2b49dd44be03e4ac1ebaf175a0e
  1. .gitignore
  2. Authors
  3. Documentation/
  4. README.md
  5. cluster-mgmt/
  6. conf/
  7. demo-scripts/
  8. kryo2/
  9. lib/
  10. onos-embedded.sh
  11. pom.xml
  12. scripts/
  13. setup-eclipse.sh
  14. setup-local-maven.sh
  15. src/
  16. start-cassandra.sh
  17. start-onos-embedded.sh
  18. start-onos.sh
  19. start-rest.sh
  20. start-zk.sh
  21. test-network/
  22. testbed-ctrl-add-ext.sh
  23. testbed-ctrl-none.sh
  24. titan/
  25. web/
README.md

ONOS (Open Networking Operating System)

ONOS (Open Networking Operating System) is an experimental distributed SDN OS. Currently, it is under active development. ONOS was announced and demonstrated at ONS'13.

Steps to download and setup a development Virtual Machine

http://wiki.onlab.us/display/Eng/ONOS+Development+VM

Building ONOS

  1. Install custom jars and dependencies (needs to be run only once)

    $ ./setup-local-maven.sh

  2. Cleanly build ONOS

    $ mvn clean $ mvn compile

    NOTE: installing maven for the first time may switch java version from 1.7 to 1.6. This might prevent Cassandra to run.

Dependencies

  1. Zookeeper Download and install apache-zookeeper-3.4.5: http://zookeeper.apache.org/releases.html

    Edit file (ONOS-INSTALL-DIR)/start-zk.sh and set variable "ZK_DIR" to point to the Zookeeper directory.

  2. Cassandra Download and install apache-cassandra-1.2.4: http://cassandra.apache.org/download/

    Edit file (ONOS-INSTALL-DIR)/start-cassandra.sh and set variable "CASSANDRA_DIR" to point to the Cassandra directory.

Running ONOS with Cassandra as a separate process

[See below for information how to run ONOS with Embedded Cassandra]

  1. Start Zookeeper

    $ cd (ONOS-INSTALL-DIR)/ $ ./start-zk.sh start

    Confirm Zookeeper is running:

    $ ./start.zk.sh status

  2. Start Cassandra

    $ cd (ONOS-INSTALL-DIR)/ $ ./start-cassandra.sh start

    Confirm Cassandra is running:

    $ ./start-cassandra.sh status

  3. Start ONOS

    $ cd (ONOS-INSTALL-DIR)/ $ ./start-onos.sh start

    Confirm ONOS is running:

    $ ./start-onos.sh status

  4. Start ONOS REST API server

    $ cd (ONOS-INSTALL-DIR)/ $ ./start-rest.sh start

    Confirm the REST API server is running:

    $ ./start-rest.sh status

Running ONOS with Cassandra embedded (Optional)

  1. Start Zookeeper

    $ cd (ONOS-INSTALL-DIR)/ $ ./start-zk.sh start

    Confirm Zookeeper is running:

    $ ./start.zk.sh status

  2. Start ONOS and Cassandra embedded

    $ cd (ONOS-INSTALL_DIR)/ $ ./start-onos-embedded.sh start

    Confirm ONOS is running:

    $ ./start-onos-embedded.sh status

  3. Start ONOS REST API server

    $ cd (ONOS-INSTALL-DIR)/ $ ./start-rest.sh start

    Confirm the REST API server is running:

    $ ./start-rest.sh status

Running in offline mode (Optional)

Maven is used to build and run ONOS. By default, maven tries to reach the repositories. The '-o' option can be given to the 'mvn' command to suppress this behavior. The MVN environmental variable can be used to set additional options to the 'mvn' command used in ONOS.

  • Example: Running in offline mode

    $ env MVN="mvn -o" ./start-onos.sh start