This is release 1.0 of rwhod++, a new rwho daemon. * Overview The classic UNIX rwhod program is based on broadcasting and can therefore significantly degrade network and host performance as the number of hosts in the network increases. For this reason, rwhod is often disabled at sites with more than a few hosts. rwhod++ is intended as a compatible replacement for the standard rwhod program. It avoids the drawbacks of rwhod by using an entirely different approach: rwhod++ actively polls a list of hosts using asynchronous RPC. As the data files generated by rwhod++ are identical to those maintained by rwhod, client programs such as rwho and ruptime need not be replaced when rwhod++ is used. rwhod++ collects the replies received from remote hosts asynchronously to avoid blocking during RPC calls to hosts that are down, and to precisely meet the user-specified time span for one round through the list of hosts. On startup, rwhod++ reads a set of hosts from one or more NIS netgroups or files. The hosts are then contacted in a round-robin fashion using `rusers' and `rstat' RPC requests. In the first round through the list of hosts, rwhod++ resolves the hostnames and queries the portmapper on each host to obtain the port numbers. If no positive reply is received from a host after a user-defined number of requests, the host is `reset'. This causes the hostname to be resolved again and the remote portmapper to be (re-)contacted during the next round to take care of hosts that went down temporarily or whose IP addresses have changed since rwhod++ was started. * rwho/ruptime cache rwhod++ is usually run on a single host in the local network. This host's /usr/spool/rwho can then be exported via NFS to any number of machines. However, as rwhod++ is using the classic rwhod's data format which was not designed for use by more than a single host (it is byte-order dependent), all hosts using the same data files must have identical byte-order (MSB-first). The canonical way to avoid this problem is to maintain a simple rwho/ruptime cache: The host running rwhod++ periodically starts rwho and ruptime to save their output into cache files under /usr/spool/rwho/cache (actually, rwho and ruptime need to be run once for each permutation of command line options). On all the client machines, the rwho and rupime commands can then be replaced by trivial shell scripts that just `cat' the respective cache files. This scheme has the additional benefit to greatly reduce the number of NFS requests generated by running vanilla rwho or ruptime. The rwho command used to periodically refresh the rwho cache must be a copy of the ordinary rwho executable. The ruptime command used to update the ruptime cache must not have the artificial limit on the number of hosts which is present in most versions of ruptime (for example, the 4.4BSD ruptime works fine). Example shell scripts implementing the rwho/ruptime cache as well as a boot-time startup script are included in the distribution (see directory `support'). * Installation Run the shell script `configure' to create a Makefile; then call `make'. If you need help with `configure', read the generic installation notes in the file INSTALL. If your system's C compiler requires unusual options (e.g. -Ae under HP-UX 9.x), set the environment CFLAGS before calling `configure': CFLAGS=-Ae ./configure or: env CFLAGS=-Ae ./configure When `make' is finished, choose a machine where you would like to run rwhod++. Export this machine's /usr/spool/rwho via NFS to a number of clients. You may want to export it via automount as /home/rwho and then just replace each client machine's /usr/spool/rwho by a symbolic link to /home/rwho. Create a NIS netgroup or a file with the names of the hosts you would like to poll. We are using a netgroup `rwhohosts' for the local hosts and an additional file for any external hosts we want to be included in the rwho/ruptime output. Start rwhod++ on the machine with the spool directory. The arguments and options are explained in the manual page rwhod++.1. Don't forget to check your syslog for any error messages. Make sure the standard rwhod is disabled when using rwhod++. If you have any LSB-first machines, and/or if you have more than just a few hosts, you may consider creating an rwho/ruptime cache as described above. The example scripts in `support' may be helpful. * Availability The source distribution of rwhod++ 1.0 is available under http://www-rn.informatik.uni-bremen.de/software/rwhod ftp://ftp.uni-bremen.de/pub/unix/networking/rwhod++/rwhod++-1.0.tar.gz * Acknowledgements Wilhelm Köhler demonstrated the rwho/ruptime caching scheme and use of RPC calls to poll a set of hosts. Carsten Bormann suggested to directly implement the relevant parts of the RPC protocol (rather than use the RPC library) to achieve asynchronous RPC. -- Oliver Laumann $Revision: 1.8 $