Skip to main content

The ONE Tutorial (Moved)

Contents
  1. Introduction
  2. Why?
  3. Target Audience
  4. Pre-conditions
  5. The Scenario
  6. General Steps
  7. Configuration File(s)
  8. Specify Scenario Settings
  9. Specify Network Interfaces for Nodes
  10. Create a Group of Nodes
  11. Specify Motion Patterns
  12. Specify Traffic Pattern
  13. Specify Reports to be Generated
  14. Running the Simulation


The ONE tutorial has moved to a new page. Please click here to follow.

Introduction

Opportunistic Network Environment is a Java-based simulator targeted for research in Delay Tolerant Networks (DTNs)/Opportunistic Mobile Networks (OMNs). Apart from letting a user to simulate different scenarios quickly and in a flexible manner, it also provides an easy way to generate statistics from the simulation performed.
ONE can be run on Linux, Windows, or any other platform supporting Java. Details about ONE, including how to download and run, can be found from the official site. A list of common questions and their answers are listed here.

Read more »

Comments

  1. Hi,
    thanks for the useful ONE tutorial.
    If possible, I am interested in more details about creating messages by loading an external file containing a list of messages. Like: file structure, parameters, how the file is called from the config file, etc.
    Regards,
    Merza

    ReplyDelete
  2. Thanks for your comments, Mirza! I plan to write a post on the external events. Right now, I would briefly outline it. The external file containing messages should be in the format: time C msg_id node_from node_to size

    Your settings file should include the following:
    Events1.class = ExternalEventsQueue
    Events1.filePath = path/to/message/trace.txt

    ReplyDelete
  3. sounds good, thanks for the answer ..
    one key problem concerning ONE is lacking a good documentation. a single "read me" file can't perform the job !!
    a further question plz: can the sender's and receiver's IDs be randomly generated ?! even if in the "default_settings" file !
    Regards,
    Merza

    ReplyDelete
  4. Very useful Tutorial, I'm new with ONE simulation and your blog it's finally given me a direction to where to Look.

    ReplyDelete
  5. Hi.. I have recently started using ONE for my term project. Your tutorial has been of great help indeed. I had some queries regarding movement models and manually assigning position of nodes.. can u please help me understand that?

    ReplyDelete
    Replies
    1. Alok,

      Please join the ONE mailing list at https://www.netlab.tkk.fi/mailman/listinfo/theone and post your question there. The community would be able to help you.

      Delete
  6. Hello..
    I have recently started my masters final year project on opportunistic networks using one simulator.Your tutorials are extremely helpful. I had some queries regarding the TTL and message creation..Can you please help me??

    I want to know

    What is the Relationship between TTL expiry and New Message Creation???
    How the messages are being created??
    For different messages the TTL are diffferent??? What is the logic behind the TTL??
    Also Epidemic Routing replicates the actual message.But when i saw the event log it displayed messages with different size. Then how it becomes Epidemic Routing??

    ReplyDelete
    Replies
    1. The value of TTL would depend on your application/context. It can be different for different messages. Larger TTL generally translates to better chances of message delivery.

      Delete
  7. Hello sir..
    I have started my project paper on opportunistic network.I have a query.Can you please help me???

    Apart from the prescribed routing algorithm in the one folder ,how will I implement my own routing algorithm so that it will be followed by one simulator???
    What are the steps required?? Where will I start???

    please help me sir...

    ReplyDelete
    Replies
    1. Our forthcoming book, Opportunistic Mobile Networks: Advances and Applications (http://barunsaha.me/the_omn_book.html), has a chapter on this. In general, you should start by studying the existing routing protocols.

      Delete
  8. Hi, mate.
    I am not so familiar with the ONE Simulator. I want to ask you, I look at each node packet carries green, blue, and red. What's the difference? thanks.

    ReplyDelete
    Replies
    1. From the README file, "If a node is carrying messages, each
      message is represented by a green or blue filled rectangle. If node
      carries more than 10 messages, another column of rectangles is drawn for
      each 10 messages but every other rectangle is now red."

      Delete
  9. hello sir,
    I want to ask you, how can I implement selfish behavior in the ONE Simulator, there isn't much more documents and tutorials on that!
    Best regards.

    ReplyDelete
    Replies
    1. Short answer: override the message replication logic so that one or more messages are not sent to a set of node(s).

      Delete

Post a Comment

Popular posts from this blog

Specifying Source and Destination of Messages

One of the frequently asked questions in the community is how to specify which particular nodes would act as source(s) and destination(s) of the messages created in the ONE simulator. The simulator, in fact, provides a pair of settings (shown below in bold face) aimed for this particular purpose.

Let us consider that there are $n + 1$ nodes in an OMN.  Further, let the nodes with addresses from $x$ to $y$, both inclusive, would create messages. The nodes in the range $w$ to $z$, both inclusive, would be the destinations of those messages, where $0 \le x \le y \le n$, and $0 \le w \le z \le n$. Then, the corresponding simulation scenario can be configured as follows.

## Message creation parameters # How many event generators Events.nrof = 1 # Class of the first event generator Events1.class = MessageEventGenerator # (Following settings are specific for the MessageEventGenerator class) # Creation interval in seconds (one new message every 25 to 35 seconds) Events1.interval = 25,35 # Me…

Effects of Buffer Size on Delay Tolerant Routing

In this post, we look at how buffer size affects, if at all, the performance of the routing protocols in DTNs. For this purpose, we will consider the following five routing protocols:
EpidemicPROPHETSpray-and-Wait (SnW) First Contact (FC) Direct Delivery (DD)  Detailed discussion of these protocols is scoped out here. We just note that in case of Epidemic, there is unlimited replication of the messages. In PROPHET, however, the replication is usually less than that of Epidemic. On the other hand, SnW has a fixed limit (L) on possible number of replications of a message. Finally, FC and DD involve message forwarding -- not replication. So, in the latter cases, there is always a single copy of any message in the DTN.

We will consider the buffer sizes from 20 MB to 180 MB, both inclusive, in steps of 20 MB so that we have total 9 different buffer sizes. We will use the real-life connection traces from Infocom'06. Therefore, we will need to simulate 5 * 9 = 45 scenarios to get the rel…

Controlling Transmission Range from within the Simulation

While simulating scenarios with the ONE simulator, one typically defines one or more network interfaces, and add them to the nodes as required. This use case prevails in most of the scenarios. However, a drawback here is that different network interfaces are mutually incompatible — an interface of type 1 can't communicate with any interface not of type 1.

Under certain circumstances, it might be required to control the transmission range of one or more network interfaces dynamically from within the simulation. For example, in one of my works, "On emotional aspects in Mission-Oriented Opportunistic Networks", I have considered the case where users occasionally turn off their device radios based on their contemporary emotions. In particular, the following shows how to set the radio range to 0: ModuleCommunicationBus comBus = host.getComBus(); // Store the original radio range the first time it is reset if (this.originalRadioRange == -1) { this.originalRadioRange = Double…