Difference between revisions of "Ivy"
(7 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
Ivy is a text-based | 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 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 == | |||
=== 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 '(.*)' | |||
[[Category:Communication]] | [[Category:Communication]] |
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
-- 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 '(.*)'