Difference between revisions of "Ivy"

From PaparazziUAV
Jump to: navigation, search
(ivyprobe)
Line 1: Line 1:
Ivy is a text-based software bus featuring regular expression based message subscription and is used as the Paparazzi project's components' principal communication cord. Including the libivy headers and library and using a predefined set of messages it is possible for any software component to take part in communication in a Paparazzi biotope. The protocol itself is independent of the Paparazzi project and can be obtained along with examples and documentation from http://www.tls.cena.fr/products/ivy/ .
+
Ivy is a [https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern Publish-Subscribe (or pub/sub)] bus used in Paparazzi to link the different components of the ground network together. See [[Overview#System_Architecture System Architecture]] and [[DevGuide/Server_GCS_com]] for a general overview of its role in the Paparazzi UAS.
  
Ivy is used in Paparazzi as a bus to link the different programs of the ground network. See [[Overview#System_Architecture]]. Also see [[DevGuide/Server_GCS_com]] for some more details.
+
Ivy is text-based (ASCII) and features [https://en.wikipedia.org/wiki/Regular_expression regular expression] based message subscription.  Ivy agents (software applications) announce their presence on the local network by UDP broadcast and share subscriptions.  Messages are communicated thereafter via TCP sockets.  While the traffic is TCP, the use of UDP broadcast requires that peers reside within the same network subnet.
 +
 
 +
Paparazzi software applications default to binding to locahost and thus will not communicate with peers residing elsewhere on the local area network.  Most paparazzi components can be directed to bind to a local network interface thereby permitting LAN communication with peers by simply supplying a bus designation commandline argument shown below.  These can be saved in a Paparazzi Center session for persistence.
 +
 
 +
Including the libivy headers and library and using a predefined set of messages, it is possible for any software component to take part in communication in a Paparazzi biotope.  Ivy, the protocol itself is developed independently of the Paparazzi project and can be obtained along with examples and documentation from http://www.tls.cena.fr/products/ivy/ .
 +
 
 +
== Ivy Networks ==
 +
 
 +
=== Binding Ivy Networks ===
 +
 
 +
Ivy defaults to UDP port 2010 if a port is not specified.  Port is specified by '':PORTNUMBER'' suffix on network.
 +
 
 +
Examples:
 +
 
 +
192.168.0.0/24 (192.168.0.x network) UDP/2010
 +
 
 +
The following are all valid:
 +
 
 +
program -b 192.168.0.255
 +
program -b 192.168.0.255:2010
 +
program -b 192.168.0
 +
program -b 192.168.0:2010
 +
 
 +
10.0.0.0/8 (10.x.x.x or 10.255.255.255)
 +
 
 +
program -b 10
 +
program -b 10:2010
 +
program -b 10.255.255.255
 +
program -b 10.255.255.255:2010
 +
 
 +
=== Extending Ivy Networks ===
 +
 
 +
Ivy requires that all peers in the network reside within the same local area network (it does not support routing).  This can be solved by two different approaches.
 +
 
 +
1) Virtual Private Network (VPN)
 +
 
 +
By employing a standard IP VPN, remote hosts may communicate within the Ivy network permitting the VPN configuration is BRIDGED and not ROUTED.  Many (routed) VPN configurations provide a network subnet for VPN clients and then route the traffic to the remote network.  While this is approach is inline with best practices for IT systems, it does not permit Ivy to operate.
 +
 
 +
2) Ivy Bridging
 +
 
 +
-- looking for more information
  
 
== Tools ==
 
== Tools ==
=== ivyprobe ===
+
 
ivyprobe is a nice debug tool that lets you display messages sent on the Ivy bus as specified by a regex.
+
=== Ivyprobe ===
 +
 
 +
Ivyprobe is a command-line tool for sending and receiving messages on the Ivy bus.  This tool is useful for monitoring and troubleshooting an Ivy bus in the same way an Ivy client would behave, with custom regexp match filters.
  
 
Run it with the '''-h''' option to display the help:
 
Run it with the '''-h''' option to display the help:

Revision as of 16:42, 28 July 2015

Ivy is a Publish-Subscribe (or pub/sub) bus used in Paparazzi to link the different components of the ground network together. See Overview#System_Architecture System Architecture and DevGuide/Server_GCS_com for a general overview of its role in the Paparazzi UAS.

Ivy is text-based (ASCII) and features regular expression based message subscription. Ivy agents (software applications) announce their presence on the local network by UDP broadcast and share subscriptions. Messages are communicated thereafter via TCP sockets. While the traffic is TCP, the use of UDP broadcast requires that peers reside within the same network subnet.

Paparazzi software applications default to binding to locahost and thus will not communicate with peers residing elsewhere on the local area network. Most paparazzi components can be directed to bind to a local network interface thereby permitting LAN communication with peers by simply supplying a bus designation commandline argument shown below. These can be saved in a Paparazzi Center session for persistence.

Including the libivy headers and library and using a predefined set of messages, it is possible for any software component to take part in communication in a Paparazzi biotope. Ivy, the protocol itself is developed independently of the Paparazzi project and can be obtained along with examples and documentation from http://www.tls.cena.fr/products/ivy/ .

Ivy Networks

Binding Ivy Networks

Ivy defaults to UDP port 2010 if a port is not specified. Port is specified by :PORTNUMBER suffix on network.

Examples:

192.168.0.0/24 (192.168.0.x network) UDP/2010

The following are all valid:

program -b 192.168.0.255
program -b 192.168.0.255:2010
program -b 192.168.0
program -b 192.168.0:2010

10.0.0.0/8 (10.x.x.x or 10.255.255.255)

program -b 10
program -b 10:2010
program -b 10.255.255.255
program -b 10.255.255.255:2010

Extending Ivy Networks

Ivy requires that all peers in the network reside within the same local area network (it does not support routing). This can be solved by two different approaches.

1) Virtual Private Network (VPN)

By employing a standard IP VPN, remote hosts may communicate within the Ivy network permitting the VPN configuration is BRIDGED and not ROUTED. Many (routed) VPN configurations provide a network subnet for VPN clients and then route the traffic to the remote network. While this is approach is inline with best practices for IT systems, it does not permit Ivy to operate.

2) Ivy Bridging

-- looking for more information

Tools

Ivyprobe

Ivyprobe is a command-line tool for sending and receiving messages on the Ivy bus. This tool is useful for monitoring and troubleshooting an Ivy bus in the same way an Ivy client would behave, with custom regexp match filters.

Run it with the -h option to display the help:

$ ivyprobe -h

E.g. to simply display all messages:

$ ivyprobe '(.*)'