Difference between revisions of "Ivy"

From PaparazziUAV
Jump to navigation Jump to search
(ivyprobe)
 
(5 intermediate revisions by 3 users not shown)
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.  Software applications employing Ivy announce their presence on the local network by UDP broadcast and share subscriptions.  All messages are communicated thereafter via direct TCP connections.  While the traffic is TCP, the use of UDP protocol for broadcast announcements requires that peers reside within the same network subnet.
 
Paparazzi software applications default to binding to locahost and thus unable to communicate with peers residing elsewhere on the local area network.  Ivy and subsequently the paparazzi software applications can be directed to bind to a local network interface instead, thereby permitting LAN communication with peers by simply supplying a bus designation command-line 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 https://ivybus.gitlab.io/ .
 
== 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); The following are all valid:
 
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 Network Bridging ====
 
[[TCP_Aircraft_Server|TCP Aircraft Server]]
 
-- 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:

Latest revision as of 02:11, 24 August 2023

Ivy is a Publish-Subscribe (or pub/sub) bus used in Paparazzi to link the different components of the ground network together. See 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. Software applications employing Ivy announce their presence on the local network by UDP broadcast and share subscriptions. All messages are communicated thereafter via direct TCP connections. While the traffic is TCP, the use of UDP protocol for broadcast announcements requires that peers reside within the same network subnet.

Paparazzi software applications default to binding to locahost and thus unable to communicate with peers residing elsewhere on the local area network. Ivy and subsequently the paparazzi software applications can be directed to bind to a local network interface instead, thereby permitting LAN communication with peers by simply supplying a bus designation command-line 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 https://ivybus.gitlab.io/ .

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); The following are all valid:

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 Network Bridging

TCP Aircraft Server

-- 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 '(.*)'