Next Previous Contents

# RPC2 User Guide and Reference Manual

## M. Satyanarayanan (Editor) Richard Draves, James Kistler, Anders Klemets, Qi Lu, Lily Mummert, David Nichols, Larry Raper, Gowthami Rajendran, Jonathan Rosenberg, Ellen Siegel

Thanks This work has been supported by the Defense Advanced Research Projects Agency (Avionics Lab, Wright Research and Development Center, Aeronautical Systems Division (AFSC), U.S. Air Force, Wright-Patterson AFB, Ohio, 45433-6543 under Contract F33615-90-C-1465, ARPA Order No. 7597), the National Science Foundation (CCR-8657907), and the IBM Corporation (Andrew Project, Faculty Development Grant, Research Initiation Grant), and Digital Equipment Corporation (External Research Project). The views and conclusion expressed in this paper are those of the authors, and should not be interpreted as those of DARPA, NSF, IBM, DEC or Carnegie Mellon University.

This manual describes the programming interface and internal design of RPC2, a highly portable and extensible remote procedure call package for Unix. RPC2 runs on top of the IP/UDP protocol, and provides support for streaming file transfer, parallel RPC calls, and IP-level multicast. The manual also describes two other packages used by RPC2: RP2Gen, a stub generator, and LWP, a coroutine-based lightweight process package. All the software described in this manual runs at user-level on the Unix 4.3BSD interface; no kernel modifications are necessary. The software has been ported to a variety of machine architectures (such as IBM-RT, MIPS, Sun2, Sun3, Sparc, and i386) and to variants of the Unix operating system (such as Mach, SunOS and AIX).

## 1. Preface

## 2. Overview and Examples

- 2.1 Components
- 2.2 Client-Server Model and Binding
- 2.3 How RPC2 uses LWPs
- 2.4 Side Effects
- 2.5 Security
- 2.6 Examples

## 3. The RP2Gen Stub Generator

- 3.1 Introduction
- 3.2 Usage
- 3.3 Format of the Description File
- 3.4 Command Line Parameters
- 3.5 The C Interface
- 3.6 External Data Representations

## 4. RPC2 Runtime System

- 4.1 Client-related Calls
- 4.2 Server-related RPC Calls
- 4.3 Miscellaneous Calls

## 5. SFTP: A Side Effect for Bulk Data Transfer

- 5.1 General Usage
- 5.2 An Example

## 6. MultiRPC

- 6.1 Design Issues
- 6.2 Examples
- 6.3 C Interface Specification
- 6.4 Runtime Calls

## 7. Multicast

- 7.1 General Usage
- 7.2 Runtime Calls

## 8. Chapter(The Basic LWP Package)

- 8.1 A word about initialization
- 8.2 A Simple Example
- 8.3 LWP Runtime Calls

## 9. The Lock Package

- 9.1 Key Design Choices
- 9.2 Lock Primitives

## 10. The IOMGR Package

- 10.1 Key Design Choices
- 10.2 A Simple Example
- 10.3 IOMGR Primitives

## 11. The Timer Package

- 11.1 A Simple Example

## 12. The Preemption Package

- 12.1 Key Design Choices
- 12.2 A Simple Example
- 12.3 Preemption Primitives

## 13. The Fast Time Package

- 13.1 Fast Time Primitives

## 14. RPC2 Internals

- 14.1 Background
- 14.2 The LWP package

## 15. Failure Detection

- 15.1 Retransmission Algorithm

## 16. SFTP Internals

- 16.1 Background
- 16.2 SFTP Code Structure
- 16.3 Packet formats
- 16.4 Adjusting the Retransmission Interval
- 16.5 Performance

## 17. Adding New Kinds of Side Effects

- 17.1 Usage Notes
- 17.2 Entry Point Templates

## 18. Implementation of MultiRPC

- 18.1 The Client Handler
- 18.2 Flow of Control in MultiRPC
- 18.3 MultiRPC Related Calls

## 19. Usage and Implementation Notes

- 19.1 Current Limitations
- 19.2 Where to Find Files at Carnegie Mellon
- 19.3 Debugging

Next Previous Contents