diff options
author | bde <bde@FreeBSD.org> | 1997-08-02 18:46:42 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1997-08-02 18:46:42 +0000 |
commit | 8f319cdcb14dc928566417c29df64948fd22af51 (patch) | |
tree | 1c64f46f045cb1228e939d1166a8eeb4af762f17 /libexec/rbootd | |
parent | c1c1220cb189815fa3905d8cfa0a77566e094f24 (diff) | |
download | FreeBSD-src-8f319cdcb14dc928566417c29df64948fd22af51.zip FreeBSD-src-8f319cdcb14dc928566417c29df64948fd22af51.tar.gz |
Import Lite2's src/libexec, except for makekey (which was spammed
by a repository copy from 1.1.5 and patched back to Lite1) and
rbootd/bootdir/SYSHPBSD (which is binary). All changed files have
already left the vendor branch.
Diffstat (limited to 'libexec/rbootd')
-rw-r--r-- | libexec/rbootd/Makefile | 9 | ||||
-rw-r--r-- | libexec/rbootd/bpf.c | 26 | ||||
-rw-r--r-- | libexec/rbootd/conf.c | 16 | ||||
-rw-r--r-- | libexec/rbootd/defs.h | 21 | ||||
-rw-r--r-- | libexec/rbootd/parseconf.c | 16 | ||||
-rw-r--r-- | libexec/rbootd/pathnames.h | 6 | ||||
-rw-r--r-- | libexec/rbootd/rbootd.8 | 8 | ||||
-rw-r--r-- | libexec/rbootd/rbootd.c | 93 | ||||
-rw-r--r-- | libexec/rbootd/rmp.h | 26 | ||||
-rw-r--r-- | libexec/rbootd/rmp_var.h | 98 | ||||
-rw-r--r-- | libexec/rbootd/rmpproto.c | 55 | ||||
-rw-r--r-- | libexec/rbootd/utils.c | 54 |
12 files changed, 235 insertions, 193 deletions
diff --git a/libexec/rbootd/Makefile b/libexec/rbootd/Makefile index 59d3137..6e377fc 100644 --- a/libexec/rbootd/Makefile +++ b/libexec/rbootd/Makefile @@ -1,8 +1,11 @@ -# from: @(#)Makefile 8.1 (Berkeley) 6/4/93 -# $NetBSD: Makefile,v 1.4 1995/08/21 17:05:08 thorpej Exp $ +# @(#)Makefile 8.1 (Berkeley) 6/4/93 PROG= rbootd SRCS= bpf.c conf.c parseconf.c rbootd.c rmpproto.c utils.c -MAN= rbootd.8 +MAN8= rbootd.0 + +afterinstall: + (cd ${.CURDIR}/bootdir && install -c -o ${BINOWN} -g ${BINGRP} \ + -m 444 * ${DESTDIR}/usr/mdec/) .include <bsd.prog.mk> diff --git a/libexec/rbootd/bpf.c b/libexec/rbootd/bpf.c index 2ccf7da..7ecd419 100644 --- a/libexec/rbootd/bpf.c +++ b/libexec/rbootd/bpf.c @@ -1,5 +1,3 @@ -/* $NetBSD: bpf.c,v 1.7 1997/01/27 22:51:50 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,15 +38,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)bpf.c 8.1 (Berkeley) 6/4/93 + * @(#)bpf.c 8.1 (Berkeley) 6/4/93 * - * From: Utah Hdr: bpf.c 3.1 92/07/06 + * Utah $Hdr: bpf.c 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ #ifndef lint -/*static char sccsid[] = "@(#)bpf.c 8.1 (Berkeley) 6/4/93";*/ -static char rcsid[] = "$NetBSD: bpf.c,v 1.7 1997/01/27 22:51:50 thorpej Exp $"; +static char sccsid[] = "@(#)bpf.c 8.1 (Berkeley) 6/4/93"; #endif /* not lint */ #include <sys/param.h> @@ -71,7 +68,7 @@ static char rcsid[] = "$NetBSD: bpf.c,v 1.7 1997/01/27 22:51:50 thorpej Exp $"; static int BpfFd = -1; static unsigned BpfLen = 0; -static u_int8_t *BpfPkt = NULL; +static u_char *BpfPkt = NULL; /* ** BpfOpen -- Open and initialize a BPF device. @@ -148,9 +145,14 @@ BpfOpen() #endif ifr.ifr_addr.sa_family = AF_UNSPEC; bcopy(&RmpMcastAddr[0], (char *)&ifr.ifr_addr.sa_data[0], RMP_ADDRLEN); - if (ioctl(BpfFd, BIOCPROMISC, (caddr_t)0) < 0) { - syslog(LOG_ERR, "bpf: can't set promiscuous mode: %m"); - Exit(0); + if (ioctl(BpfFd, SIOCADDMULTI, (caddr_t)&ifr) < 0) { + syslog(LOG_WARNING, + "bpf: can't add mcast addr (%m), setting promiscuous mode"); + + if (ioctl(BpfFd, BIOCPROMISC, (caddr_t)0) < 0) { + syslog(LOG_ERR, "bpf: can't set promiscuous mode: %m"); + Exit(0); + } } /* @@ -161,7 +163,7 @@ BpfOpen() Exit(0); } if (BpfPkt == NULL) - BpfPkt = (u_int8_t *)malloc(BpfLen); + BpfPkt = (u_char *)malloc(BpfLen); if (BpfPkt == NULL) { syslog(LOG_ERR, "bpf: out of memory (%u bytes for bpfpkt)", @@ -310,7 +312,7 @@ BpfRead(rconn, doread) int doread; { register int datlen, caplen, hdrlen; - static u_int8_t *bp = NULL, *ep = NULL; + static u_char *bp = NULL, *ep = NULL; int cc; /* diff --git a/libexec/rbootd/conf.c b/libexec/rbootd/conf.c index 51ad23b..b890eea 100644 --- a/libexec/rbootd/conf.c +++ b/libexec/rbootd/conf.c @@ -1,5 +1,3 @@ -/* $NetBSD: conf.c,v 1.5 1995/10/06 05:12:13 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,15 +38,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)conf.c 8.1 (Berkeley) 6/4/93 + * @(#)conf.c 8.1 (Berkeley) 6/4/93 * - * From: Utah Hdr: conf.c 3.1 92/07/06 + * Utah $Hdr: conf.c 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ #ifndef lint -/*static char sccsid[] = "@(#)conf.c 8.1 (Berkeley) 6/4/93";*/ -static char rcsid[] = "$NetBSD: conf.c,v 1.5 1995/10/06 05:12:13 thorpej Exp $"; +static char sccsid[] = "@(#)conf.c 8.1 (Berkeley) 6/4/93"; #endif /* not lint */ #include <sys/param.h> @@ -68,8 +65,9 @@ static char rcsid[] = "$NetBSD: conf.c,v 1.5 1995/10/06 05:12:13 thorpej Exp $"; ** simplify the boot file search code. */ +char *ProgName; /* path-stripped argv[0] */ char MyHost[MAXHOSTNAMELEN+1]; /* host name */ -pid_t MyPid; /* process id */ +int MyPid; /* process id */ int DebugFlg = 0; /* set true if debugging */ int BootAny = 0; /* set true if we boot anyone */ @@ -82,11 +80,11 @@ char *DbgFile = _PATH_RBOOTDDBG; /* debug output file */ FILE *DbgFp = NULL; /* debug file pointer */ char *IntfName = NULL; /* intf we are attached to */ -u_int16_t SessionID = 0; /* generated session ID */ +u_short SessionID = 0; /* generated session ID */ char *BootFiles[C_MAXFILE]; /* list of boot files */ CLIENT *Clients = NULL; /* list of addrs we'll accept */ RMPCONN *RmpConns = NULL; /* list of active connections */ -u_int8_t RmpMcastAddr[RMP_ADDRLEN] = RMP_ADDR; /* RMP multicast address */ +char RmpMcastAddr[RMP_ADDRLEN] = RMP_ADDR; /* RMP multicast address */ diff --git a/libexec/rbootd/defs.h b/libexec/rbootd/defs.h index 9ff814e..a2e0cd0 100644 --- a/libexec/rbootd/defs.h +++ b/libexec/rbootd/defs.h @@ -1,5 +1,3 @@ -/* $NetBSD: defs.h,v 1.5 1995/10/06 05:12:14 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,9 +38,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)defs.h 8.1 (Berkeley) 6/4/93 + * @(#)defs.h 8.1 (Berkeley) 6/4/93 * - * From: Utah Hdr: defs.h 3.1 92/07/06 + * Utah $Hdr: defs.h 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ @@ -109,7 +107,7 @@ * (unless there are no restrictions on who we can boot). */ typedef struct client_s { - u_int8_t addr[RMP_ADDRLEN]; /* addr of machine */ + u_char addr[RMP_ADDRLEN]; /* addr of machine */ char *files[C_MAXFILE]; /* boot-able files */ struct client_s *next; /* ptr to next */ } CLIENT; @@ -128,8 +126,9 @@ typedef struct rmpconn_s { /* * All these variables are defined in "conf.c". */ +extern char *ProgName; /* path-stripped argv[0] */ extern char MyHost[]; /* this hosts' name */ -extern pid_t MyPid; /* this processes' ID */ +extern int MyPid; /* this processes' ID */ extern int DebugFlg; /* set true if debugging */ extern int BootAny; /* set true if we can boot anyone */ @@ -142,14 +141,14 @@ extern char *BootDir; /* directory w/boot files */ extern FILE *DbgFp; /* debug file pointer */ extern char *IntfName; /* interface we are attached to */ -extern u_int16_t SessionID; /* generated session ID */ +extern u_short SessionID; /* generated session ID */ extern char *BootFiles[]; /* list of boot files */ extern CLIENT *Clients; /* list of addrs we'll accept */ extern RMPCONN *RmpConns; /* list of active connections */ -extern u_int8_t RmpMcastAddr[]; /* RMP multicast address */ +extern char RmpMcastAddr[]; /* RMP multicast address */ void AddConn __P((RMPCONN *)); int BootDone __P((RMPCONN *)); @@ -170,11 +169,11 @@ void FreeClients __P((void)); void FreeConn __P((RMPCONN *)); void FreeConns __P((void)); int GetBootFiles __P((void)); -char *GetEtherAddr __P((u_int8_t *)); -CLIENT *NewClient __P((u_int8_t *)); +char *GetEtherAddr __P((u_char *)); +CLIENT *NewClient __P((u_char *)); RMPCONN *NewConn __P((RMPCONN *)); char *NewStr __P((char *)); -u_int8_t *ParseAddr __P((char *)); +u_char *ParseAddr __P((char *)); int ParseConfig __P((void)); void ProcessPacket __P((RMPCONN *, CLIENT *)); void ReConfig __P((int)); diff --git a/libexec/rbootd/parseconf.c b/libexec/rbootd/parseconf.c index e96e927..d00436f 100644 --- a/libexec/rbootd/parseconf.c +++ b/libexec/rbootd/parseconf.c @@ -1,5 +1,3 @@ -/* $NetBSD: parseconf.c,v 1.4 1995/10/06 05:12:16 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,15 +38,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)parseconf.c 8.1 (Berkeley) 6/4/93 + * @(#)parseconf.c 8.1 (Berkeley) 6/4/93 * - * From: Utah Hdr: parseconf.c 3.1 92/07/06 + * Utah $Hdr: parseconf.c 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ #ifndef lint -/*static char sccsid[] = "@(#)parseconf.c 8.1 (Berkeley) 6/4/93";*/ -static char rcsid[] = "$NetBSD: parseconf.c,v 1.4 1995/10/06 05:12:16 thorpej Exp $"; +static char sccsid[] = "@(#)parseconf.c 8.1 (Berkeley) 6/4/93"; #endif /* not lint */ #include <sys/param.h> @@ -85,7 +82,7 @@ ParseConfig() { FILE *fp; CLIENT *client; - u_int8_t *addr; + u_char *addr; char line[C_LINELEN]; register char *cp, *bcp; register int i, j; @@ -244,12 +241,13 @@ ParseConfig() ** Warnings: ** - The return value points to a static buffer; it must ** be copied if it's to be saved. +** - For speed, we assume a u_char consists of 8 bits. */ -u_int8_t * +u_char * ParseAddr(str) char *str; { - static u_int8_t addr[RMP_ADDRLEN]; + static u_char addr[RMP_ADDRLEN]; register char *cp; register unsigned i; register int part, subpart; diff --git a/libexec/rbootd/pathnames.h b/libexec/rbootd/pathnames.h index 381864a..d960dce 100644 --- a/libexec/rbootd/pathnames.h +++ b/libexec/rbootd/pathnames.h @@ -1,5 +1,3 @@ -/* $NetBSD: pathnames.h,v 1.3 1995/08/21 17:05:15 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,9 +38,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)pathnames.h 8.1 (Berkeley) 6/4/93 + * @(#)pathnames.h 8.1 (Berkeley) 6/4/93 * - * From: Utah Hdr: pathnames.h 3.1 92/07/06 + * Utah $Hdr: pathnames.h 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ diff --git a/libexec/rbootd/rbootd.8 b/libexec/rbootd/rbootd.8 index 3b783bb..f4eb364 100644 --- a/libexec/rbootd/rbootd.8 +++ b/libexec/rbootd/rbootd.8 @@ -1,5 +1,3 @@ -.\" $NetBSD: rbootd.8,v 1.4 1997/05/29 01:48:46 cgd Exp $ -.\" .\" Copyright (c) 1988, 1992 The University of Utah and the Center .\" for Software Science (CSS). .\" Copyright (c) 1992, 1993 @@ -39,12 +37,12 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" from: @(#)rbootd.8 8.2 (Berkeley) 12/11/93 +.\" @(#)rbootd.8 8.2 (Berkeley) 12/11/93 .\" -.\" Utah Hdr: rbootd.man 3.1 92/07/06 +.\" Utah $Hdr: rbootd.man 3.1 92/07/06$ .\" Author: Jeff Forys, University of Utah CSS .\" -.Dd December 11, 1993 +.Dd "December 11, 1993" .Dt RBOOTD 8 .Os .Sh NAME diff --git a/libexec/rbootd/rbootd.c b/libexec/rbootd/rbootd.c index 11d5445..aa01583 100644 --- a/libexec/rbootd/rbootd.c +++ b/libexec/rbootd/rbootd.c @@ -1,5 +1,3 @@ -/* $NetBSD: rbootd.c,v 1.5 1995/10/06 05:12:17 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,9 +38,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)rbootd.c 8.1 (Berkeley) 6/4/93 + * @(#)rbootd.c 8.2 (Berkeley) 2/22/94 * - * From: Utah Hdr: rbootd.c 3.1 92/07/06 + * Utah $Hdr: rbootd.c 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ @@ -53,14 +51,14 @@ static char copyright[] = #endif /* not lint */ #ifndef lint -/*static char sccsid[] = "@(#)rbootd.c 8.1 (Berkeley) 6/4/93";*/ -static char rcsid[] = "$NetBSD: rbootd.c,v 1.5 1995/10/06 05:12:17 thorpej Exp $"; +static char sccsid[] = "@(#)rbootd.c 8.2 (Berkeley) 2/22/94"; #endif /* not lint */ #include <sys/param.h> +#include <sys/ioctl.h> #include <sys/time.h> + #include <ctype.h> -#include <err.h> #include <errno.h> #include <fcntl.h> #include <signal.h> @@ -71,7 +69,19 @@ static char rcsid[] = "$NetBSD: rbootd.c,v 1.5 1995/10/06 05:12:17 thorpej Exp $ #include <unistd.h> #include "defs.h" -extern char *__progname; /* from crt0.o */ + +/* fd mask macros (backward compatibility with 4.2BSD) */ +#ifndef FD_SET +#ifdef notdef +typedef struct fd_set { /* this should already be in 4.2 */ + int fds_bits[1]; +} fd_set; +#endif +#define FD_ZERO(p) ((p)->fds_bits[0] = 0) +#define FD_SET(n, p) ((p)->fds_bits[0] |= (1 << (n))) +#define FD_CLR(n, p) ((p)->fds_bits[0] &= ~(1 << (n))) +#define FD_ISSET(n, p) ((p)->fds_bits[0] & (1 << (n))) +#endif int main(argc, argv) @@ -82,6 +92,11 @@ main(argc, argv) fd_set rset; /* + * Find what name we are running under. + */ + ProgName = (ProgName = rindex(argv[0],'/')) ? ++ProgName : *argv; + + /* * Close any open file descriptors. * Temporarily leave stdin & stdout open for `-d', * and stderr open for any pre-syslog error messages. @@ -114,8 +129,9 @@ main(argc, argv) if (ConfigFile == NULL) ConfigFile = argv[optind]; else { - warnx("too many config files (`%s' ignored)\n", - argv[optind]); + fprintf(stderr, + "%s: too many config files (`%s' ignored)\n", + ProgName, argv[optind]); } } @@ -127,16 +143,57 @@ main(argc, argv) (void) signal(SIGUSR1, SIG_IGN); /* dont muck w/DbgFp */ (void) signal(SIGUSR2, SIG_IGN); - (void) fclose(stderr); /* finished with it */ } else { - if (daemon(0, 0)) - err(1, "can't detach from terminal"); + (void) fclose(stdin); /* dont need these */ + (void) fclose(stdout); + + /* + * Fork off a child to do the work & exit. + */ + switch(fork()) { + case -1: /* fork failed */ + fprintf(stderr, "%s: ", ProgName); + perror("fork"); + Exit(0); + case 0: /* this is the CHILD */ + break; + default: /* this is the PARENT */ + _exit(0); + } + + /* + * Try to disassociate from the current tty. + */ + { + char *devtty = "/dev/tty"; + int i; + + if ((i = open(devtty, O_RDWR)) < 0) { + /* probably already disassociated */ + if (setpgrp(0, 0) < 0) { + fprintf(stderr, "%s: ", ProgName); + perror("setpgrp"); + } + } else { + if (ioctl(i, (u_long)TIOCNOTTY, (char *)0) < 0){ + fprintf(stderr, "%s: ", ProgName); + perror("ioctl"); + } + (void) close(i); + } + } (void) signal(SIGUSR1, DebugOn); (void) signal(SIGUSR2, DebugOff); } - openlog(__progname, LOG_PID, LOG_DAEMON); + (void) fclose(stderr); /* finished with it */ + +#ifdef SYSLOG4_2 + openlog(ProgName, LOG_PID); +#else + openlog(ProgName, LOG_PID, LOG_DAEMON); +#endif /* * If no interface was specified, get one now. @@ -180,7 +237,7 @@ main(argc, argv) FILE *fp; if ((fp = fopen(PidFile, "w")) != NULL) { - (void) fprintf(fp, "%d\n", (int) MyPid); + (void) fprintf(fp, "%d\n", MyPid); (void) fclose(fp); } else { syslog(LOG_WARNING, "fopen: failed (%s)", PidFile); @@ -229,11 +286,13 @@ main(argc, argv) r = rset; if (RmpConns == NULL) { /* timeout isnt necessary */ - nsel = select(maxfds, &r, NULL, NULL, NULL); + nsel = select(maxfds, &r, (fd_set *)0, (fd_set *)0, + (struct timeval *)0); } else { timeout.tv_sec = RMP_TIMEOUT; timeout.tv_usec = 0; - nsel = select(maxfds, &r, NULL, NULL, &timeout); + nsel = select(maxfds, &r, (fd_set *)0, (fd_set *)0, + &timeout); } if (nsel < 0) { diff --git a/libexec/rbootd/rmp.h b/libexec/rbootd/rmp.h index 4a686ef..d3b0167 100644 --- a/libexec/rbootd/rmp.h +++ b/libexec/rbootd/rmp.h @@ -1,5 +1,3 @@ -/* $NetBSD: rmp.h,v 1.4 1995/10/06 05:12:18 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,9 +38,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)rmp.h 8.1 (Berkeley) 6/4/93 + * @(#)rmp.h 8.1 (Berkeley) 6/4/93 * - * From: Utah Hdr: rmp.h 3.1 92/07/06 + * Utah $Hdr: rmp.h 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ @@ -77,21 +75,21 @@ */ struct hp_hdr { - u_int8_t daddr[RMP_ADDRLEN]; - u_int8_t saddr[RMP_ADDRLEN]; - u_int16_t len; + u_char daddr[RMP_ADDRLEN]; + u_char saddr[RMP_ADDRLEN]; + u_short len; }; /* * HP uses 802.2 LLC with their own local extensions. This struct makes - * sense out of this data (encapsulated in the above 802.3 packet). + * sence out of this data (encapsulated in the above 802.3 packet). */ struct hp_llc { - u_int8_t dsap; /* 802.2 DSAP */ - u_int8_t ssap; /* 802.2 SSAP */ - u_int16_t cntrl; /* 802.2 control field */ - u_int16_t filler; /* HP filler (must be zero) */ - u_int16_t dxsap; /* HP extended DSAP */ - u_int16_t sxsap; /* HP extended SSAP */ + u_char dsap; /* 802.2 DSAP */ + u_char ssap; /* 802.2 SSAP */ + u_short cntrl; /* 802.2 control field */ + u_short filler; /* HP filler (must be zero) */ + u_short dxsap; /* HP extended DSAP */ + u_short sxsap; /* HP extended SSAP */ }; diff --git a/libexec/rbootd/rmp_var.h b/libexec/rbootd/rmp_var.h index c60b6dd..7df1e87 100644 --- a/libexec/rbootd/rmp_var.h +++ b/libexec/rbootd/rmp_var.h @@ -1,5 +1,3 @@ -/* $NetBSD: rmp_var.h,v 1.8 1995/11/14 08:41:44 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,9 +38,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)rmp_var.h 8.1 (Berkeley) 6/4/93 + * @(#)rmp_var.h 8.1 (Berkeley) 6/4/93 * - * from: Utah Hdr: rmp_var.h 3.1 92/07/06 + * Utah $Hdr: rmp_var.h 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ @@ -102,12 +100,12 @@ sizeof(struct rmp_boot_repl) + s - sizeof(restofpkt)) #define RMPREADSIZE(s) (sizeof(struct hp_hdr) + sizeof(struct hp_llc) + \ sizeof(struct rmp_read_repl) + s - sizeof(restofpkt) \ - - sizeof(u_int8_t)) + - sizeof(u_char)) #define RMPDONESIZE (sizeof(struct hp_hdr) + sizeof(struct hp_llc) + \ sizeof(struct rmp_boot_done)) #define RMPBOOTDATA 255 #define RMPREADDATA (RMPDATALEN - \ - (2*sizeof(u_int8_t)+sizeof(u_int16_t)+sizeof(u_word))) + (2*sizeof(u_char)+sizeof(u_short)+sizeof(u_word))) /* * This protocol defines some field sizes as "rest of ethernet packet". @@ -119,9 +117,9 @@ typedef char restofpkt; /* * Due to the RMP packet layout, we'll run into alignment problems - * on machines that can't access (or don't, by default, align) words - * on half-word boundaries. If you know that your machine does not suffer - * from this problem, add it to the vax/tahoe/m68k #define below. + * on machines that cant access words on half-word boundaries. If + * you know that your machine does not suffer from this problem, + * add it to the hp300 #define below. * * The following macros are used to deal with this problem: * WORDZE(w) Return True if u_word `w' is zero, False otherwise. @@ -129,25 +127,25 @@ typedef char restofpkt; * COPYWORD(w1,w2) Copy u_word `w1' to `w2'. * GETWORD(w,i) Copy u_word `w' into int `i'. * PUTWORD(i,w) Copy int `i' into u_word `w'. - * - * N.B. Endianness is handled by use of ntohl/htonl + * + * N.B. We do not support little endian alignment-challenged machines. */ -#if defined(__vax__) || defined(__tahoe__) || defined(__m68k__) +#if defined(vax) || defined(tahoe) || defined(hp300) -typedef u_int32_t u_word; +typedef u_int u_word; #define WORDZE(w) ((w) == 0) #define ZEROWORD(w) (w) = 0 #define COPYWORD(w1,w2) (w2) = (w1) -#define GETWORD(w, i) (i) = ntohl(w) -#define PUTWORD(i, w) (w) = htonl(i) +#define GETWORD(w, i) (i) = (w) +#define PUTWORD(i, w) (w) = (i) #else -#define _WORD_HIGHPART 0 +#define _WORD_HIGHPART 0 /* XXX: assume Big Endian for now */ #define _WORD_LOWPART 1 -typedef struct _uword { u_int16_t val[2]; } u_word; +typedef struct _uword { u_short val[2]; } u_word; #define WORDZE(w) \ ((w.val[_WORD_HIGHPART] == 0) && (w.val[_WORD_LOWPART] == 0)) @@ -158,10 +156,10 @@ typedef struct _uword { u_int16_t val[2]; } u_word; (w2).val[_WORD_LOWPART] = (w1).val[_WORD_LOWPART]; \ } #define GETWORD(w, i) \ - (i) = (((u_int32_t)ntohs((w).val[_WORD_HIGHPART])) << 16) | ntohs((w).val[_WORD_LOWPART]) + (i) = (((u_int)(w).val[_WORD_HIGHPART]) << 16) | (w).val[_WORD_LOWPART] #define PUTWORD(i, w) \ - { (w).val[_WORD_HIGHPART] = htons((u_int16_t) ((i >> 16) & 0xffff)); \ - (w).val[_WORD_LOWPART] = htons((u_int16_t) (i & 0xffff)); \ + { (w).val[_WORD_HIGHPART] = (u_short) (((i) >> 16) & 0xffff); \ + (w).val[_WORD_LOWPART] = (u_short) (i & 0xffff); \ } #endif @@ -171,53 +169,53 @@ typedef struct _uword { u_int16_t val[2]; } u_word; */ struct rmp_raw { /* generic RMP packet */ - u_int8_t rmp_type; /* packet type */ - u_int8_t rmp_rawdata[RMPDATALEN-1]; + u_char rmp_type; /* packet type */ + u_char rmp_rawdata[RMPDATALEN-1]; }; struct rmp_boot_req { /* boot request */ - u_int8_t rmp_type; /* packet type (RMP_BOOT_REQ) */ - u_int8_t rmp_retcode; /* return code (0) */ - u_word rmp_seqno; /* sequence number (real time clock) */ - u_int16_t rmp_session; /* session id (normally 0) */ - u_int16_t rmp_version; /* protocol version (RMP_VERSION) */ - char rmp_machtype[RMP_MACHLEN]; /* machine type */ - u_int8_t rmp_flnmsize; /* length of rmp_flnm */ + u_char rmp_type; /* packet type (RMP_BOOT_REQ) */ + u_char rmp_retcode; /* return code (0) */ + u_word rmp_seqno; /* sequence number (real time clock) */ + u_short rmp_session; /* session id (normally 0) */ + u_short rmp_version; /* protocol version (RMP_VERSION) */ + char rmp_machtype[RMP_MACHLEN]; /* machine type */ + u_char rmp_flnmsize; /* length of rmp_flnm */ restofpkt rmp_flnm; /* name of file to be read */ }; struct rmp_boot_repl { /* boot reply */ - u_int8_t rmp_type; /* packet type (RMP_BOOT_REPL) */ - u_int8_t rmp_retcode; /* return code (normally 0) */ - u_word rmp_seqno; /* sequence number (from boot req) */ - u_int16_t rmp_session; /* session id (generated) */ - u_int16_t rmp_version; /* protocol version (RMP_VERSION) */ - u_int8_t rmp_flnmsize; /* length of rmp_flnm */ + u_char rmp_type; /* packet type (RMP_BOOT_REPL) */ + u_char rmp_retcode; /* return code (normally 0) */ + u_word rmp_seqno; /* sequence number (from boot req) */ + u_short rmp_session; /* session id (generated) */ + u_short rmp_version; /* protocol version (RMP_VERSION) */ + u_char rmp_flnmsize; /* length of rmp_flnm */ restofpkt rmp_flnm; /* name of file (from boot req) */ }; struct rmp_read_req { /* read request */ - u_int8_t rmp_type; /* packet type (RMP_READ_REQ) */ - u_int8_t rmp_retcode; /* return code (0) */ - u_word rmp_offset; /* file relative byte offset */ - u_int16_t rmp_session; /* session id (from boot repl) */ - u_int16_t rmp_size; /* max no of bytes to send */ + u_char rmp_type; /* packet type (RMP_READ_REQ) */ + u_char rmp_retcode; /* return code (0) */ + u_word rmp_offset; /* file relative byte offset */ + u_short rmp_session; /* session id (from boot repl) */ + u_short rmp_size; /* max no of bytes to send */ }; struct rmp_read_repl { /* read reply */ - u_int8_t rmp_type; /* packet type (RMP_READ_REPL) */ - u_int8_t rmp_retcode; /* return code (normally 0) */ - u_word rmp_offset; /* byte offset (from read req) */ - u_int16_t rmp_session; /* session id (from read req) */ + u_char rmp_type; /* packet type (RMP_READ_REPL) */ + u_char rmp_retcode; /* return code (normally 0) */ + u_word rmp_offset; /* byte offset (from read req) */ + u_short rmp_session; /* session id (from read req) */ restofpkt rmp_data; /* data (max size from read req) */ - u_int8_t rmp_unused; /* padding to 16-bit boundary */ + u_char rmp_unused; /* padding to 16-bit boundary */ }; struct rmp_boot_done { /* boot complete */ - u_int8_t rmp_type; /* packet type (RMP_BOOT_DONE) */ - u_int8_t rmp_retcode; /* return code (0) */ - u_word rmp_unused; /* not used (0) */ - u_int16_t rmp_session; /* session id (from read repl) */ + u_char rmp_type; /* packet type (RMP_BOOT_DONE) */ + u_char rmp_retcode; /* return code (0) */ + u_word rmp_unused; /* not used (0) */ + u_short rmp_session; /* session id (from read repl) */ }; struct rmp_packet { @@ -238,7 +236,7 @@ struct rmp_packet { */ #define r_type rmp_proto.rmp_raw.rmp_type -#define r_data rmp_proto.rmp_raw.rmp_rawdata +#define r_data rmp_proto.rmp_raw.rmp_data #define r_brq rmp_proto.rmp_brq #define r_brpl rmp_proto.rmp_brpl #define r_rrq rmp_proto.rmp_rrq diff --git a/libexec/rbootd/rmpproto.c b/libexec/rbootd/rmpproto.c index 12a6f5c..d0a8d4a 100644 --- a/libexec/rbootd/rmpproto.c +++ b/libexec/rbootd/rmpproto.c @@ -1,5 +1,3 @@ -/* $NetBSD: rmpproto.c,v 1.7 1996/02/01 21:27:46 mycroft Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,15 +38,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)rmpproto.c 8.1 (Berkeley) 6/4/93 + * @(#)rmpproto.c 8.1 (Berkeley) 6/4/93 * - * From: Utah Hdr: rmpproto.c 3.1 92/07/06 + * Utah $Hdr: rmpproto.c 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ #ifndef lint -/*static char sccsid[] = "@(#)rmpproto.c 8.1 (Berkeley) 6/4/93";*/ -static char rcsid[] = "$NetBSD: rmpproto.c,v 1.7 1996/02/01 21:27:46 mycroft Exp $"; +static char sccsid[] = "@(#)rmpproto.c 8.1 (Berkeley) 6/4/93"; #endif /* not lint */ #include <sys/param.h> @@ -114,7 +111,7 @@ ProcessPacket(rconn, client) * of active connections, otherwise delete it since * an error was encountered. */ - if (ntohs(rmp->r_brq.rmp_session) == RMP_PROBESID) { + if (rmp->r_brq.rmp_session == RMP_PROBESID) { if (WORDZE(rmp->r_brq.rmp_seqno)) (void) SendServerID(rconnout); else @@ -180,7 +177,7 @@ SendServerID(rconn) { register struct rmp_packet *rpl; register char *src, *dst; - register u_int8_t *size; + register u_char *size; rpl = &rconn->rmp; /* cache ptr to RMP packet */ @@ -191,7 +188,7 @@ SendServerID(rconn) rpl->r_brpl.rmp_retcode = RMP_E_OKAY; ZEROWORD(rpl->r_brpl.rmp_seqno); rpl->r_brpl.rmp_session = 0; - rpl->r_brpl.rmp_version = htons(RMP_VERSION); + rpl->r_brpl.rmp_version = RMP_VERSION; size = &rpl->r_brpl.rmp_flnmsize; /* ptr to length of host name */ @@ -234,8 +231,7 @@ SendFileNo(req, rconn, filelist) { register struct rmp_packet *rpl; register char *src, *dst; - register u_int8_t *size; - register int i; + register u_char *size, i; GETWORD(req->r_brpl.rmp_seqno, i); /* SeqNo is really FileNo */ rpl = &rconn->rmp; /* cache ptr to RMP packet */ @@ -247,7 +243,7 @@ SendFileNo(req, rconn, filelist) PUTWORD(i, rpl->r_brpl.rmp_seqno); i--; rpl->r_brpl.rmp_session = 0; - rpl->r_brpl.rmp_version = htons(RMP_VERSION); + rpl->r_brpl.rmp_version = RMP_VERSION; size = &rpl->r_brpl.rmp_flnmsize; /* ptr to length of filename */ *size = 0; /* init length to zero */ @@ -300,7 +296,7 @@ SendBootRepl(req, rconn, filelist) RMPCONN *oldconn; register struct rmp_packet *rpl; register char *src, *dst1, *dst2; - register u_int8_t i; + register u_char i; /* * If another connection already exists, delete it since we @@ -319,8 +315,8 @@ SendBootRepl(req, rconn, filelist) */ rpl->r_brpl.rmp_type = RMP_BOOT_REPL; COPYWORD(req->r_brq.rmp_seqno, rpl->r_brpl.rmp_seqno); - rpl->r_brpl.rmp_session = htons(GenSessID()); - rpl->r_brpl.rmp_version = htons(RMP_VERSION); + rpl->r_brpl.rmp_session = GenSessID(); + rpl->r_brpl.rmp_version = RMP_VERSION; rpl->r_brpl.rmp_flnmsize = req->r_brq.rmp_flnmsize; /* @@ -402,7 +398,7 @@ int SendReadRepl(rconn) RMPCONN *rconn; { - int retval = 0; + int retval; RMPCONN *oldconn; register struct rmp_packet *rpl, *req; register int size = 0; @@ -432,9 +428,9 @@ SendReadRepl(rconn) /* * Make sure Session ID's match. */ - if (ntohs(req->r_rrq.rmp_session) != - ((rpl->r_type == RMP_BOOT_REPL)? ntohs(rpl->r_brpl.rmp_session): - ntohs(rpl->r_rrpl.rmp_session))) { + if (req->r_rrq.rmp_session != + ((rpl->r_type == RMP_BOOT_REPL)? rpl->r_brpl.rmp_session: + rpl->r_rrpl.rmp_session)) { syslog(LOG_ERR, "SendReadRepl: bad session id (%s)", EnetStr(rconn)); rpl->r_rrpl.rmp_retcode = RMP_E_BADSID; @@ -450,8 +446,8 @@ SendReadRepl(rconn) * to work. This is necessary for bpfwrite() on machines * with MCLBYTES less than 1514. */ - if (ntohs(req->r_rrq.rmp_size) > RMPREADDATA) - req->r_rrq.rmp_size = htons(RMPREADDATA); + if (req->r_rrq.rmp_size > RMPREADDATA) + req->r_rrq.rmp_size = RMPREADDATA; /* * Position read head on file according to info in request packet. @@ -469,7 +465,7 @@ SendReadRepl(rconn) * Read data directly into reply packet. */ if ((size = read(oldconn->bootfd, &rpl->r_rrpl.rmp_data, - (int) ntohs(req->r_rrq.rmp_size))) <= 0) { + (int) req->r_rrq.rmp_size)) <= 0) { if (size < 0) { syslog(LOG_ERR, "SendReadRepl: read: %m (%s)", EnetStr(rconn)); @@ -537,9 +533,9 @@ BootDone(rconn) /* * Make sure Session ID's match. */ - if (ntohs(rconn->rmp.r_rrq.rmp_session) != - ((rpl->r_type == RMP_BOOT_REPL)? ntohs(rpl->r_brpl.rmp_session): - ntohs(rpl->r_rrpl.rmp_session))) { + if (rconn->rmp.r_rrq.rmp_session != + ((rpl->r_type == RMP_BOOT_REPL)? rpl->r_brpl.rmp_session: + rpl->r_rrpl.rmp_session)) { syslog(LOG_ERR, "BootDone: bad session id (%s)", EnetStr(rconn)); return(0); @@ -574,18 +570,13 @@ SendPacket(rconn) */ bcopy((char *)&rconn->rmp.hp_hdr.saddr[0], (char *)&rconn->rmp.hp_hdr.daddr[0], RMP_ADDRLEN); -#ifdef __FreeBSD__ - /* BPF (incorrectly) wants this in host order. */ rconn->rmp.hp_hdr.len = rconn->rmplen - sizeof(struct hp_hdr); -#else - rconn->rmp.hp_hdr.len = htons(rconn->rmplen - sizeof(struct hp_hdr)); -#endif /* * Reverse 802.2/HP Extended Source & Destination Access Pts. */ - rconn->rmp.hp_llc.dxsap = htons(HPEXT_SXSAP); - rconn->rmp.hp_llc.sxsap = htons(HPEXT_DXSAP); + rconn->rmp.hp_llc.dxsap = HPEXT_SXSAP; + rconn->rmp.hp_llc.sxsap = HPEXT_DXSAP; /* * Last time this connection was active. diff --git a/libexec/rbootd/utils.c b/libexec/rbootd/utils.c index 5d37a25..58ead7c 100644 --- a/libexec/rbootd/utils.c +++ b/libexec/rbootd/utils.c @@ -1,5 +1,3 @@ -/* $NetBSD: utils.c,v 1.6 1995/11/14 08:41:47 thorpej Exp $ */ - /* * Copyright (c) 1988, 1992 The University of Utah and the Center * for Software Science (CSS). @@ -40,18 +38,18 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)utils.c 8.1 (Berkeley) 6/4/93 + * @(#)utils.c 8.2 (Berkeley) 2/22/94 * - * From: Utah Hdr: utils.c 3.1 92/07/06 + * Utah $Hdr: utils.c 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */ #ifndef lint -/*static char sccsid[] = "@(#)utils.c 8.1 (Berkeley) 6/4/93";*/ -static char rcsid[] = "$NetBSD: utils.c,v 1.6 1995/11/14 08:41:47 thorpej Exp $"; +static char sccsid[] = "@(#)utils.c 8.2 (Berkeley) 2/22/94"; #endif /* not lint */ #include <sys/param.h> +#include <sys/time.h> #include <fcntl.h> #include <signal.h> @@ -87,7 +85,7 @@ DispPkt(rconn, direct) struct tm *tmp; register struct rmp_packet *rmp; int i, omask; - u_int32_t t; + u_int t; /* * Since we will be working with RmpConns as well as DbgFp, we @@ -115,11 +113,11 @@ DispPkt(rconn, direct) /* display IEEE 802.2 Logical Link Control header */ (void) fprintf(DbgFp, "\t802.2 LLC: DSAP:%x SSAP:%x CTRL:%x\n", - rmp->hp_llc.dsap, rmp->hp_llc.ssap, ntohs(rmp->hp_llc.cntrl)); + rmp->hp_llc.dsap, rmp->hp_llc.ssap, rmp->hp_llc.cntrl); /* display HP extensions to 802.2 Logical Link Control header */ (void) fprintf(DbgFp, "\tHP Ext: DXSAP:%x SXSAP:%x\n", - ntohs(rmp->hp_llc.dxsap), ntohs(rmp->hp_llc.sxsap)); + rmp->hp_llc.dxsap, rmp->hp_llc.sxsap); /* * Display information about RMP packet using type field to @@ -129,7 +127,7 @@ DispPkt(rconn, direct) case RMP_BOOT_REQ: /* boot request */ (void) fprintf(DbgFp, "\tBoot Request:"); GETWORD(rmp->r_brq.rmp_seqno, t); - if (ntohs(rmp->r_brq.rmp_session) == RMP_PROBESID) { + if (rmp->r_brq.rmp_session == RMP_PROBESID) { if (WORDZE(rmp->r_brq.rmp_seqno)) fputs(" (Send Server ID)", DbgFp); else @@ -137,8 +135,8 @@ DispPkt(rconn, direct) } (void) fputc('\n', DbgFp); (void) fprintf(DbgFp, BootFmt, rmp->r_brq.rmp_retcode, - t, ntohs(rmp->r_brq.rmp_session), - ntohs(rmp->r_brq.rmp_version)); + t, rmp->r_brq.rmp_session, + rmp->r_brq.rmp_version); (void) fprintf(DbgFp, "\n\t\tMachine Type: "); for (i = 0; i < RMP_MACHLEN; i++) (void) fputc(rmp->r_brq.rmp_machtype[i], DbgFp); @@ -148,23 +146,23 @@ DispPkt(rconn, direct) fprintf(DbgFp, "\tBoot Reply:\n"); GETWORD(rmp->r_brpl.rmp_seqno, t); (void) fprintf(DbgFp, BootFmt, rmp->r_brpl.rmp_retcode, - t, ntohs(rmp->r_brpl.rmp_session), - ntohs(rmp->r_brpl.rmp_version)); + t, rmp->r_brpl.rmp_session, + rmp->r_brpl.rmp_version); DspFlnm(rmp->r_brpl.rmp_flnmsize,&rmp->r_brpl.rmp_flnm); break; case RMP_READ_REQ: /* read request */ (void) fprintf(DbgFp, "\tRead Request:\n"); GETWORD(rmp->r_rrq.rmp_offset, t); (void) fprintf(DbgFp, ReadFmt, rmp->r_rrq.rmp_retcode, - t, ntohs(rmp->r_rrq.rmp_session)); + t, rmp->r_rrq.rmp_session); (void) fprintf(DbgFp, "\t\tNoOfBytes: %u\n", - ntohs(rmp->r_rrq.rmp_size)); + rmp->r_rrq.rmp_size); break; case RMP_READ_REPL: /* read reply */ (void) fprintf(DbgFp, "\tRead Reply:\n"); GETWORD(rmp->r_rrpl.rmp_offset, t); (void) fprintf(DbgFp, ReadFmt, rmp->r_rrpl.rmp_retcode, - t, ntohs(rmp->r_rrpl.rmp_session)); + t, rmp->r_rrpl.rmp_session); (void) fprintf(DbgFp, "\t\tNoOfBytesSent: %d\n", rconn->rmplen - RMPREADSIZE(0)); break; @@ -172,7 +170,7 @@ DispPkt(rconn, direct) (void) fprintf(DbgFp, "\tBoot Complete:\n"); (void) fprintf(DbgFp, "\t\tRetCode:%u SessID:%x\n", rmp->r_done.rmp_retcode, - ntohs(rmp->r_done.rmp_session)); + rmp->r_done.rmp_session); break; default: /* ??? */ (void) fprintf(DbgFp, "\tUnknown Type:(%d)\n", @@ -204,30 +202,32 @@ DispPkt(rconn, direct) ** Warnings: ** - The return value points to a static buffer; it must ** be copied if it's to be saved. +** - For speed, we assume a u_char consists of 8 bits. */ char * GetEtherAddr(addr) - u_int8_t *addr; + u_char *addr; { static char Hex[] = "0123456789abcdef"; static char etherstr[RMP_ADDRLEN*3]; register int i; - register char *cp; + register char *cp1, *cp2; /* * For each byte in `addr', convert it to "<hexchar><hexchar>:". * The last byte does not get a trailing `:' appended. */ i = 0; - cp = etherstr; + cp1 = (char *)addr; + cp2 = etherstr; for(;;) { - *cp++ = Hex[*addr >> 4 & 0xf]; - *cp++ = Hex[*addr++ & 0xf]; + *cp2++ = Hex[*cp1 >> 4 & 0xf]; + *cp2++ = Hex[*cp1++ & 0xf]; if (++i == RMP_ADDRLEN) break; - *cp++ = ':'; + *cp2++ = ':'; } - *cp = '\0'; + *cp2 = '\0'; return(etherstr); } @@ -253,7 +253,7 @@ DspFlnm(size, flnm) { register int i; - (void) fprintf(DbgFp, "\n\t\tFile Name (%u): <", size); + (void) fprintf(DbgFp, "\n\t\tFile Name (%d): <", size); for (i = 0; i < size; i++) (void) fputc(*flnm++, DbgFp); (void) fputs(">\n", DbgFp); @@ -275,7 +275,7 @@ DspFlnm(size, flnm) */ CLIENT * NewClient(addr) - u_int8_t *addr; + u_char *addr; { CLIENT *ctmp; |