Next Previous Contents

1. General information

1.1 What is Ivy?

Ivy is a software bus designed at CENA (France). A software bus is a system that allows software applications to exchange information with the illusion of broadcasting that information, selection being performed by the receiving applications. Using a software bus is very similar to dealing with events in a graphical toolkit: on one side, messages are emitted without caring about who will handle them, and on the other side, one decide to handle the messages that have a certain type or follow a certain pattern. Software buses are mainly aimed at facilitating the rapid development of new agents, and at managing a dynamic collection of agents on the bus: agents show up, emit messages and receive some, then leave the bus without blocking the others.

Architecture and principles

As opposed to other software buses, Ivy does not depend on a centralised server. Actually, Ivy is mostly a communication convention between processes, implemented through a collection of libraries in several languages.

From the programmer's point of view, Ivy is an information broadcasting channel. The main functions are:

Ivy's decentralised connection scheme probably incurs limitations in terms of how many applications can be connected to an Ivy bus, but this simplifies management a lot. Basically, an Ivy bus is just a set of applications that decide to communicate together. The only conventions between these applications are:

  1. the use of the Ivy protocol (for obvious reasons)
  2. a bus address, made of a broadcast port number (a bit like a citizen band channel) and a set of networks addresses
When an application wants to connect to a bus, it sends a broadcast message on the networks specified in the bus address, so that all applications present on those networks and listening on the specified port number connect to it. It then becomes part of the bus, and listens like the other ones.

The messages are exchanged in text format, and bindings are based on regular expressions with captures. If an application subscribes to HELLO (.*) an if another application emits the message HELLO WORLD, a callback will be called in the first application with WORLD as an argument.

Using Ivy

You can use Ivy through applications that have been provided to you. This is the case for ivyprobe, an Ivy agent that allows you to examine the messages exchanged on a given bus and to send messages on that bus. You can refer to the web site http: for a list of available agents. However, what you will usually want to do is to develop your own applications. In order to do that you can use an Ivy connection kit, that is a library that implements Ivy.

Libraries that implement Ivy are available in the following environments:

Connecting your application to an Ivy bus just consists in choosing the appropriate library, add the appropriate message emission and reception calls to your code, use the main loop provided in the library or make the necessary integrations, and get your code running!

1.2 The Ivy C library

The Ivy C library (aka Ivy-C or ivy-c) is a C library that allows you to connect applications to an Ivy bus. You can use it to write applications in C or any other language that supports C extensions. This guide documents how you can do that.

The Ivy C library is known to compile and work in WindowsNT and Linux environments. It should be easy to use on most Posix environments.

The Ivy C library was originally developed by François-Régis Colin at CENA. It is maintained by the CENA-Toulouse team.


Next Previous Contents