Difference between revisions of "Ivy"
(ivyprobe) |
|||
Line 1: | Line 1: | ||
Ivy is a | 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 | 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 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 17: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 '(.*)'