Yes! If there are questions and answers you think should be added here please do. This is a wiki and you're welcome to register for an account and start editing.
ONOS stands for "Open Network Operating System". We realize it's a bit confusing, considering ON.Lab stands for "Open Networking Laboratory"!
We currently actively support Ubuntu, CentOS, and OS X. ONOS works with Oracle Java 1.8, but OpenJDK should work as well.
Please check our Jira to see what's in progress. If what you are looking for isn't there, you can always help by contributing!
Thank you for your interest! The Contributor Guide should give you the details of what's involved.
You can find the latest documentation on the ONOS Documentation homepage. The tutorials and sample code can be found in Tutorials.
You're already off to a good start by reading this FAQ! First make sure you've read the FAQ and documentation on this wiki. Then you should check the archives for the mailing lists (particularly
onos-discuss) to see if someone else has run into a similar issue or has a similar question. If you still have questions, consider posting to
onos-discuss or slack. Also, you may be able to find people within your organization who can help you with ONOS.
Confluence generates URLs based on a page's name, so renaming it changes its URL. Sadly, Confluence doesn't do automatic redirects from the old URLmbut luckily it automatically updates the links within the wiki, so you don't have to worry about links within the wiki breaking.
For linking to a page from emails, blogs, etc., Confluence recommends using a page's shortened URL, which remains stable across name changes. Press "k" on any page to bring up its shortened URL.
Why should I used shortened URLs for links to this wiki from external sites?
As noted above, Confluence just isn't as smart as other wiki software and it doesn't automatically redirect links to pages whose names have changed!!
Iff you used a shortened URL, then the link will continue to work even after the page is renamed.
Although shortened URLs aren't as easy to read, they are shorter and can be easier to type than lengthy paths based on page titles.
Go to the Tools dropdown and select Link to this Page.... A window should pop up with both a regular and a shortened URL. For example, for this page:
Of course, the result is more dramatic and useful for pages with longer names.
Currently, pages can only be deleted by ONOS wiki administrators. For the time being, you can move your page under the Trashbin and then drop a line in the #onos-docs channel or onos-discuss to have your page removed.
Drag it to a new location using Browse>Space Operations>Pages>Tree View.
The default username/password is
This usually means ONOS did not start up properly, so the ONOS services are not available even though the CLI commands are loaded. Try looking in the ONOS log for exceptions or errors that may indicate why ONOS did not start up.
Please first read the Flow Rule Subsystem page to understand how flows are managed in ONOS. The reason flows are stuck in PENDING_ADD state is because ONOS is unable to confirm that the flow is present on the dataplane.
If you are using OpenFlow, the provider periodically sends FLOW_STATS_REQUEST messages to the device and expects FLOW_STATS_REPLY messages in return. One possible reason for flows being in PENDING_ADD state is the device doesn’t properly support sending FLOW_STATS_REPLY messages doesn’t send the right information in the FLOW_STATS_REPLY.
Another possible reason could be that ONOS simply can’t match the flows in the FLOW_STATS_REPLY with the state in the flow store. The OpenFlow provider uses the FlowModBuilder to map ONOS constructs to OpenFlow, and the FlowEntryBuilder to map OpenFlow constructs back to ONOS constructs. Often flows being stuck in PENDING_ADD means that these mappings are not properly symmetric, i.e. the FlowEntryBuilder doesn’t map the flow stats to the same FlowRule object that was installed. This could be because a new criterion/instruction was added, or a bug in the existing mappings.
This is generally a different symptom of the same problem as above (flows stuck in PENDING_ADD). If ONOS can’t match the returned flow stats with flow rules in the store, it will remove what it considers to be an extraneous flow and install the flow in the store again. The solution to this problem is to ensure that ONOS can match observed flows with its internal flow store.
ONOS' dynamic host discovery works by observing packets sent by hosts on the dataplane that come up to the controller (e.g. OpenFlow devices send packets to the controller by using packet-ins). It looks at the source MAC address of the packets and creates host entries for these MAC addresses. In some situations, packets may be observed by ONOS that are not sent by real hosts in the network. In particular, when using Mininet to emulate a network, sometimes extra hosts will be observed apart from the real hosts in the Mininet network. This is simply an artifact of the way Mininet uses Linux to create networks - it is creating interfaces in Linux which the OS is sending packets out of, and these packets are observed by ONOS and appear as hosts. It is usually safe to simply ignore the extra hosts.
The ONOS log is located on disk at
<KARAF_ROOT>/data/log/karaf.log (e.g. this usually means it can be found at
If you run ONOS locally using
onos-karaf you can use the tool
onos-local-log to follow the log.
If you run ONOS remotely using
onos-install, you can use the tool
onos-log <instance> (e.g.
onos-log $OC1) to follow the log.
If you are using
onos.py, the log is also linked to
onos1 with the name of the ONOS instance whose log you wish to view)
If you are running multi instance onos cluster, you can fetch log files from all instances by
You can also view the ONOS log in the ONOS/karaf console by using commands such as
Often errors can be found in the log if something goes wrong. You can either find the log file on disk and look in there (see above question) or from the ONOS shell you can view the log using
log:exception-display will show the last exception in the log.
log:display | grep ERROR will show any errors in the log.