home *** CD-ROM | disk | FTP | other *** search
- Multicast extensions for the WATTCP TCP/IP libraries
- ----------------------------------------------------
-
- Introduction
- ------------
- IP Multicasting is a mechanism to send and receive data from
- a group of hosts rather than via the more traditional one on one
- interaction. This technology is being heavily used for experimentation
- into Audio/Video Conferencing over IP, but has the potential to be
- used in a much more far-reaching manner. In fact, one school of
- thought says that multicasting (1->n) is the general case, and that
- unicasts (1->1) are simply a special case.
-
- This package contains the pieces necessary to extend the
- WATTCP libraries to support IP multicasting as defined by RFC-1112[1]
- (Deering). Three new user-level routines have been created to achieve
- this goal. The routines join_mcast_group and leave_mcast_group allow a
- process to join and leave a specified multicast group, and udp_SetTTL
- allows the outgoing ttl on udp packets to be set. Additionally, there
- are two trivial example/test programs. Lister is a simple program that
- watches a specified address/port pair and decodes vat[2] style control
- packets, thus producing a continuous listing of the IDs of the
- participants. Blather is the flip side of lister. It produces a vat
- style control packet and sends it to the specified address and port,
- thus adding a new participant to your vat display.
-
-
- Installation
- ------------
-
- The installation of this package consists of three basic
- steps. The package must first be unzipped, the source files then need
- to be patched, and finally everything needs to be rebuilt.
- Before you begin, you will need to have the WATTCP source
- distribution installed, built, and working. WATTCP is available
- from ftp-ns.rutgers.edu in /pub/msdos/wattcp. The September 30, 1993
- distribution was used as a basis for these extensions. Additionally, a
- connection to the MBone[3], the Internet Multicast Backbone, is a
- great advantage and the default operation of the example programs
- assumes that it is present.
-
- 1. In the same directory that you unzipped the WATTCP distribution,
- unzip the mcast.zip file using version 2.04c or greater of
- pkunzip. Make sure that the "-d" flag is specified so
- that the files end up in the proper subdirectories rather than all
- being dumped at the top level. This will create the following files:
-
- mcast.txt This file
- mcast.dif The patch file
- apps\lister.c The receive example
- apps\blather.c The send example
- src\pcigmp.c code to support IGMP
- src\ipmulti.c generic additional multicast source
-
- 2. You now need to patch the source files to add the extensions. To do
- this, you will need the "patch" program by Larry Wall. It can be found
- on wuarchive.wustl.edu in /mirrors/msdos/filutl as patch12.zip. Now,
- again in that same top level directory, type "patch -p0 < mcast.dif".
- There should be lots of "Hunk Succeeded" messages, and all your code
- will be patched.
-
-
-
- 3. The final step is to rebuild the entire set of libraries and example
- applications. Begin by removing all of the .obj and .exe files in src,
- apps, and elib plus all of the libraries in lib (effectively doing a
- "make clean"). Then just do a make in the top level directory and
- everything will rebuild.
-
- Use
- ___
- Network programming for multicasting isn't very different from
- the network programming that you're already used to. The two basic
- differences are that you need to join and leave a multicast group and
- that you need to specify the outgoing ttl on most multicast packets.
- To join a group you simply need to use the "join_mcast_group"
- call after you've done the udp_open. This registers the use of the
- group with the low level routines that need to interact with the
- multicast router to keep the packets flowing. After you're done,
- you'll then need to leave the multicast group immediately prior to
- issuing the close call by using the "leave_mcast_group" routine.
- The default ttl whenever you open a udp connection with a
- multicast address is set to 1. That way, your multicasts won't leave
- your local net. To expand the scope, you'll need to up the ttl by
- using the "udp_SetTTL" call. This call should be used after the udp_connect
- is done, but before anything is sent, and is persistent for the life of
- the connection.
- Beyond those two points, most things are straightforward. You
- do a udp_open, a join_mcast_group, set the ttl, read and write a few
- things, leave_mcast_group, and close. That's all there is to it. The
- only other thing you need to remember is to define MULTICAST whenever
- you use this code so that you get all of the multicasting prototypes
- from the tcp.h header file.
-
-
-
- Reference
- ---------
-
- join_mcast_group - joins a multicast group
-
- int join_mcast_group( longword ina )
-
- Where:
- ina IP address of the group to be joined
-
- Behavior:
- join_mcast_group registers the use of the multicast
- address with the internals of the tcp stack that
- deal with responding to IGMP queries from the
- multicast router.
-
- Returns:
- 1 if the group was joined successfully
- 0 if attempt failed
-
-
- leave_mcast_group - leaves a multicast group
-
- int leave_mcast_group( longword ina )
-
- Where:
- ina IP address of the group to be joined
-
- Behavior:
- leave_mcast_group deregisters the use of a
- particular multicast address so that no
- IGMP Reports will be sent for that address.
-
- Returns:
- 1 if the group was left successfully
- 0 if attempt failed
-
- udp_SetTTL - Set the TTL on an outgoing UDP datagram.
-
- int udp_SetTTL(udp_Socket *s, byte ttl)
-
- Where:
- s the socket of the UDP connection (?!?) in question
- ttl the desired ttl for the outgoing datagrams
-
- Behavior:
- udp_SetTTL allows the ttl for a particular UDP connection
- to be changed from the default value of 1. As the ttl is
- increased, the scope of the packets will expand until it
- reaches worldwide scope at around 192.
-
- Returns:
- 1 always (there is no error return)
-
-
-
-
- Notes
- -----
-
- [1] RFC-1112, "Host Extensions for IP Multicasting", is a description
- and specification of IP Multicasting by Steve Deering
- (deering@parc.xerox.com) of Xerox PARC. It is available via
- anonymous FTP on ds.internic.net in the /rfc directory as
- "rfc1112.txt".
-
- [2] vat, the Visual Audio Tool, is an audioconferencing application
- for the X-Windowing system written by Van Jacobson (van@ee.lbl.gov)
- of Lawrence Berkeley Labs. It is the de-facto standard for audio on
- the MBone, and can be found via anonymous FTP on ftp.ee.lbl.gov.
-
- [3] The MBone or the Internet Multicast Backbone is an outgrowth of the
- first two IETF "audiocasts". It is a virtual network, layered upon
- parts of the physical Internet to facilitate worldwide routing of
- IP multicasts. More information about the MBone can be found in the
- Frequently Asked Questions document available on venera.isi.edu in
- /mbone as "faq.txt".
-
-
-
- Author
- ------
-
- Jim Martin
- Rutgers University
- jim@noc.rutgers.edu
- 11/10/93
-
-