Inter Process Communication (IPC)

 

IPC provides flexible, efficient message passing between processes. It can transparently send and receive complex data structures, including lists and variable length arrays, using both anonymous "publish/subscribe" and "client/server" message-passing paradigms. A wide variety of languages and operating systems are supported.

IPC was developed in 1994 to support NASA's Deep Space One flight project. It is based on earlier work called the Task Control Architecture (TCA). Although IPC never actually made it to flight, it has been used in many autonomous systems, including DIRA, Skyworker, and NASA's 3T architecture.

IPC provides high-level support for connecting processes using TCP/IP sockets and sending data between processes. It takes care of opening sockets, registering messages, and sending and receiving messages, including both anonymous publish/subscribe and client/server type messages. The IPC library contains functions to marshall (serialize) and unmarshall (de-serialize) data, handles data transfer between machines with different Endian conventions, invoke user-defined handlers when a message is received, and invoke user-defined callbacks at set intervals. IPC uses the more efficient Unix sockets when processes are on the same processor, and does byte-swapping only when necessary. IPC now supports multi-threaded applications (although currently it has been tested only under Linux).

IPC libraries exist for C, C++, and Allegro Common Lisp. IPC for Java is now available (although currently it has been tested only under Linux). IPC currently runs on the following architectures and operating systems: Sparc (running SunOS and Solaris), Intel processors (running Linux, Windows NT, Windows 98), 680xx processors (running VxWorks), SGI (running IRIX), and MacIntosh (running Mac OS and OSX). It is easily ported to any machine that supports Unix-style sockets (for assistance on porting IPC to a new architecture, contact Reid Simmons ).

As part of the Deep Space One project, we also developed comview, a tool for graphically displaying the message traffic between IPC modules. The comview tool is available as part of the IPC distribution. It is described in more detail in this paper.

Click here for a brief history of our research in architectures for task-level control.

Send mail to reids@cs.cmu.edu to be added to the IPC mailing list, ipc-users@cs.cmu.edu.

As of version 3.8.0, IPC is released under the simplified BSD open source license.

 

Download IPC:

Download

Description

Date

IPC 3.9.1

Latest Release

November 3, 2014

IPC Manual

Current Documentation

April 21, 2011

IPC 3.8.6

Previous Minor (Beta) Release

December 17, 2010

IPC 3.7.10

Older (Omega) Release

December 30, 2005

IPC Manual

Older Documentation (for version 3.6)

August 2001

Comview 1.2.0

Visualization Tool

July 19, 2000

comview.ps.gz

Comview Documentation

July 19, 2000

xdrgen.html

xdrgen Documentation

March 16, 2001

Changes for IPC Version 3.9.1:

Changes for IPC Version 3.9.0:

Changes for IPC Version 3.8.6:

  • Split IO mutex into separate read and write mutexes, to help minimize likelihood of deadlock when reading/writing very big messages.
  • Fixed a bug in multi-threaded version where a timeout is not reported correctly (which could cause IPC_listenClear to loop indefinitely).

Change for IPC Version 3.8.5:

  • Fixed invocation of timers -- previous versions might not have respected the timeout provided in IPC_listen/IPC_listenClear.

Main changes for IPC Version 3.8.4:

  • Put IPC java package in its own package.
  • Added port to ARM.
  • Removed memory leak.

Main changes for IPC Version 3.8.3:

  • Updates to java package for use on 64 bit machines;
  • Changed to using snprintf (from sprintf) to avoid corrupting the stack on overflow.
  • Fixed bug in dealing with longs and doubles for 64 bit machines.

Main changes for IPC Version 3.8.0:

  • Released under Simplified BSD license
  • Updates to handle newer compilers (gcc 4.1.x) and OS's.

Main changes for IPC Version 3.7.10:

  • Added support for MacIntosh OSX

Main changes for IPC Version 3.7.4:

  • Updated to run under Solaris, ACL 6.0, and gcc 3.0.1
  • Fixed bug in IPC_listenClear that could hang if central goes down
  • Fixed bug relating to initializing context data structure

Main changes for IPC Version 3.7.3:

  • Removed several small memory leaks.
  • Cleaned up the make files and changed how installed files are placed.

Main changes for IPC Version 3.7.0:

  • Support for JAVA (including automatic marshalling and unmarshalling)
  • Support for multi-threaded applications (IPC is now re-entrant)
Note: Currently, these new features have been tested only under Linux (RedHat 6.1 & 7.2). We expect to continue porting to additional platforms. If you have a particular need, please let us know. Also, the manual has not yet been updated to explain these new features -- that is also coming.

You can find additional versions of IPC here.

Last modified: Tue Nov 4 10:24:53 EST 2014 -- reids+@cs.cmu.edu