diff options
author | Steve Price <steve@FreeBSD.org> | 1997-06-29 18:50:34 +0000 |
---|---|---|
committer | Steve Price <steve@FreeBSD.org> | 1997-06-29 18:50:34 +0000 |
commit | 6bc912a9a45d29faeb9a56a7753491300e3c8e73 (patch) | |
tree | 95b95cb1946158d472e694afbcf4405b97cc5d88 /libexec/rbootd | |
parent | b3174ab1ce9d342df26328a26bbe2a80e6e3f2a1 (diff) | |
parent | 0559b33149171859c5c0a8c618eede70e44da85d (diff) | |
download | src-6bc912a9a45d29faeb9a56a7753491300e3c8e73.tar.gz src-6bc912a9a45d29faeb9a56a7753491300e3c8e73.zip |
Notes
Diffstat (limited to 'libexec/rbootd')
-rw-r--r-- | libexec/rbootd/conf.c | 16 | ||||
-rw-r--r-- | libexec/rbootd/defs.h | 21 | ||||
-rw-r--r-- | libexec/rbootd/pathnames.h | 6 | ||||
-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 |
7 files changed, 147 insertions, 129 deletions
diff --git a/libexec/rbootd/conf.c b/libexec/rbootd/conf.c index b890eeadae7c..51ad23bac5ca 100644 --- a/libexec/rbootd/conf.c +++ b/libexec/rbootd/conf.c @@ -1,3 +1,5 @@ +/* $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). @@ -38,14 +40,15 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)conf.c 8.1 (Berkeley) 6/4/93 + * from: @(#)conf.c 8.1 (Berkeley) 6/4/93 * - * Utah $Hdr: conf.c 3.1 92/07/06$ + * From: 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 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 $"; #endif /* not lint */ #include <sys/param.h> @@ -65,9 +68,8 @@ static char sccsid[] = "@(#)conf.c 8.1 (Berkeley) 6/4/93"; ** simplify the boot file search code. */ -char *ProgName; /* path-stripped argv[0] */ char MyHost[MAXHOSTNAMELEN+1]; /* host name */ -int MyPid; /* process id */ +pid_t MyPid; /* process id */ int DebugFlg = 0; /* set true if debugging */ int BootAny = 0; /* set true if we boot anyone */ @@ -80,11 +82,11 @@ char *DbgFile = _PATH_RBOOTDDBG; /* debug output file */ FILE *DbgFp = NULL; /* debug file pointer */ char *IntfName = NULL; /* intf we are attached to */ -u_short SessionID = 0; /* generated session ID */ +u_int16_t 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 */ -char RmpMcastAddr[RMP_ADDRLEN] = RMP_ADDR; /* RMP multicast address */ +u_int8_t RmpMcastAddr[RMP_ADDRLEN] = RMP_ADDR; /* RMP multicast address */ diff --git a/libexec/rbootd/defs.h b/libexec/rbootd/defs.h index a2e0cd0616c7..9ff814e2c309 100644 --- a/libexec/rbootd/defs.h +++ b/libexec/rbootd/defs.h @@ -1,3 +1,5 @@ +/* $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). @@ -38,9 +40,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)defs.h 8.1 (Berkeley) 6/4/93 + * from: @(#)defs.h 8.1 (Berkeley) 6/4/93 * - * Utah $Hdr: defs.h 3.1 92/07/06$ + * From: Utah Hdr: defs.h 3.1 92/07/06 * Author: Jeff Forys, University of Utah CSS */ @@ -107,7 +109,7 @@ * (unless there are no restrictions on who we can boot). */ typedef struct client_s { - u_char addr[RMP_ADDRLEN]; /* addr of machine */ + u_int8_t addr[RMP_ADDRLEN]; /* addr of machine */ char *files[C_MAXFILE]; /* boot-able files */ struct client_s *next; /* ptr to next */ } CLIENT; @@ -126,9 +128,8 @@ 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 int MyPid; /* this processes' ID */ +extern pid_t MyPid; /* this processes' ID */ extern int DebugFlg; /* set true if debugging */ extern int BootAny; /* set true if we can boot anyone */ @@ -141,14 +142,14 @@ extern char *BootDir; /* directory w/boot files */ extern FILE *DbgFp; /* debug file pointer */ extern char *IntfName; /* interface we are attached to */ -extern u_short SessionID; /* generated session ID */ +extern u_int16_t 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 char RmpMcastAddr[]; /* RMP multicast address */ +extern u_int8_t RmpMcastAddr[]; /* RMP multicast address */ void AddConn __P((RMPCONN *)); int BootDone __P((RMPCONN *)); @@ -169,11 +170,11 @@ void FreeClients __P((void)); void FreeConn __P((RMPCONN *)); void FreeConns __P((void)); int GetBootFiles __P((void)); -char *GetEtherAddr __P((u_char *)); -CLIENT *NewClient __P((u_char *)); +char *GetEtherAddr __P((u_int8_t *)); +CLIENT *NewClient __P((u_int8_t *)); RMPCONN *NewConn __P((RMPCONN *)); char *NewStr __P((char *)); -u_char *ParseAddr __P((char *)); +u_int8_t *ParseAddr __P((char *)); int ParseConfig __P((void)); void ProcessPacket __P((RMPCONN *, CLIENT *)); void ReConfig __P((int)); diff --git a/libexec/rbootd/pathnames.h b/libexec/rbootd/pathnames.h index d960dcee96ac..381864abc45c 100644 --- a/libexec/rbootd/pathnames.h +++ b/libexec/rbootd/pathnames.h @@ -1,3 +1,5 @@ +/* $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). @@ -38,9 +40,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)pathnames.h 8.1 (Berkeley) 6/4/93 + * from: @(#)pathnames.h 8.1 (Berkeley) 6/4/93 * - * Utah $Hdr: pathnames.h 3.1 92/07/06$ + * From: Utah Hdr: pathnames.h 3.1 92/07/06 * Author: Jeff Forys, University of Utah CSS */ diff --git a/libexec/rbootd/rmp.h b/libexec/rbootd/rmp.h index d3b016760d35..4a686ef2b451 100644 --- a/libexec/rbootd/rmp.h +++ b/libexec/rbootd/rmp.h @@ -1,3 +1,5 @@ +/* $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). @@ -38,9 +40,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)rmp.h 8.1 (Berkeley) 6/4/93 + * from: @(#)rmp.h 8.1 (Berkeley) 6/4/93 * - * Utah $Hdr: rmp.h 3.1 92/07/06$ + * From: Utah Hdr: rmp.h 3.1 92/07/06 * Author: Jeff Forys, University of Utah CSS */ @@ -75,21 +77,21 @@ */ struct hp_hdr { - u_char daddr[RMP_ADDRLEN]; - u_char saddr[RMP_ADDRLEN]; - u_short len; + u_int8_t daddr[RMP_ADDRLEN]; + u_int8_t saddr[RMP_ADDRLEN]; + u_int16_t len; }; /* * HP uses 802.2 LLC with their own local extensions. This struct makes - * sence out of this data (encapsulated in the above 802.3 packet). + * sense out of this data (encapsulated in the above 802.3 packet). */ struct hp_llc { - 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 */ + 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 */ }; diff --git a/libexec/rbootd/rmp_var.h b/libexec/rbootd/rmp_var.h index 7df1e87465fc..c60b6ddf3637 100644 --- a/libexec/rbootd/rmp_var.h +++ b/libexec/rbootd/rmp_var.h @@ -1,3 +1,5 @@ +/* $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). @@ -38,9 +40,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)rmp_var.h 8.1 (Berkeley) 6/4/93 + * from: @(#)rmp_var.h 8.1 (Berkeley) 6/4/93 * - * Utah $Hdr: rmp_var.h 3.1 92/07/06$ + * from: Utah Hdr: rmp_var.h 3.1 92/07/06 * Author: Jeff Forys, University of Utah CSS */ @@ -100,12 +102,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_char)) + - sizeof(u_int8_t)) #define RMPDONESIZE (sizeof(struct hp_hdr) + sizeof(struct hp_llc) + \ sizeof(struct rmp_boot_done)) #define RMPBOOTDATA 255 #define RMPREADDATA (RMPDATALEN - \ - (2*sizeof(u_char)+sizeof(u_short)+sizeof(u_word))) + (2*sizeof(u_int8_t)+sizeof(u_int16_t)+sizeof(u_word))) /* * This protocol defines some field sizes as "rest of ethernet packet". @@ -117,9 +119,9 @@ typedef char restofpkt; /* * Due to the RMP packet layout, we'll run into alignment problems - * 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. + * 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. * * The following macros are used to deal with this problem: * WORDZE(w) Return True if u_word `w' is zero, False otherwise. @@ -127,25 +129,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. We do not support little endian alignment-challenged machines. + * + * N.B. Endianness is handled by use of ntohl/htonl */ -#if defined(vax) || defined(tahoe) || defined(hp300) +#if defined(__vax__) || defined(__tahoe__) || defined(__m68k__) -typedef u_int u_word; +typedef u_int32_t u_word; #define WORDZE(w) ((w) == 0) #define ZEROWORD(w) (w) = 0 #define COPYWORD(w1,w2) (w2) = (w1) -#define GETWORD(w, i) (i) = (w) -#define PUTWORD(i, w) (w) = (i) +#define GETWORD(w, i) (i) = ntohl(w) +#define PUTWORD(i, w) (w) = htonl(i) #else -#define _WORD_HIGHPART 0 /* XXX: assume Big Endian for now */ +#define _WORD_HIGHPART 0 #define _WORD_LOWPART 1 -typedef struct _uword { u_short val[2]; } u_word; +typedef struct _uword { u_int16_t val[2]; } u_word; #define WORDZE(w) \ ((w.val[_WORD_HIGHPART] == 0) && (w.val[_WORD_LOWPART] == 0)) @@ -156,10 +158,10 @@ typedef struct _uword { u_short val[2]; } u_word; (w2).val[_WORD_LOWPART] = (w1).val[_WORD_LOWPART]; \ } #define GETWORD(w, i) \ - (i) = (((u_int)(w).val[_WORD_HIGHPART]) << 16) | (w).val[_WORD_LOWPART] + (i) = (((u_int32_t)ntohs((w).val[_WORD_HIGHPART])) << 16) | ntohs((w).val[_WORD_LOWPART]) #define PUTWORD(i, w) \ - { (w).val[_WORD_HIGHPART] = (u_short) (((i) >> 16) & 0xffff); \ - (w).val[_WORD_LOWPART] = (u_short) (i & 0xffff); \ + { (w).val[_WORD_HIGHPART] = htons((u_int16_t) ((i >> 16) & 0xffff)); \ + (w).val[_WORD_LOWPART] = htons((u_int16_t) (i & 0xffff)); \ } #endif @@ -169,53 +171,53 @@ typedef struct _uword { u_short val[2]; } u_word; */ struct rmp_raw { /* generic RMP packet */ - u_char rmp_type; /* packet type */ - u_char rmp_rawdata[RMPDATALEN-1]; + u_int8_t rmp_type; /* packet type */ + u_int8_t rmp_rawdata[RMPDATALEN-1]; }; struct rmp_boot_req { /* boot request */ - 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 */ + 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 */ restofpkt rmp_flnm; /* name of file to be read */ }; struct rmp_boot_repl { /* boot reply */ - 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 */ + 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 */ restofpkt rmp_flnm; /* name of file (from boot req) */ }; struct rmp_read_req { /* read request */ - 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 */ + 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 */ }; struct rmp_read_repl { /* read reply */ - 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) */ + 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) */ restofpkt rmp_data; /* data (max size from read req) */ - u_char rmp_unused; /* padding to 16-bit boundary */ + u_int8_t rmp_unused; /* padding to 16-bit boundary */ }; struct rmp_boot_done { /* boot complete */ - 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) */ + 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) */ }; struct rmp_packet { @@ -236,7 +238,7 @@ struct rmp_packet { */ #define r_type rmp_proto.rmp_raw.rmp_type -#define r_data rmp_proto.rmp_raw.rmp_data +#define r_data rmp_proto.rmp_raw.rmp_rawdata #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 d0a8d4a8086f..12a6f5cb1777 100644 --- a/libexec/rbootd/rmpproto.c +++ b/libexec/rbootd/rmpproto.c @@ -1,3 +1,5 @@ +/* $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). @@ -38,14 +40,15 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)rmpproto.c 8.1 (Berkeley) 6/4/93 + * from: @(#)rmpproto.c 8.1 (Berkeley) 6/4/93 * - * Utah $Hdr: rmpproto.c 3.1 92/07/06$ + * From: 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 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 $"; #endif /* not lint */ #include <sys/param.h> @@ -111,7 +114,7 @@ ProcessPacket(rconn, client) * of active connections, otherwise delete it since * an error was encountered. */ - if (rmp->r_brq.rmp_session == RMP_PROBESID) { + if (ntohs(rmp->r_brq.rmp_session) == RMP_PROBESID) { if (WORDZE(rmp->r_brq.rmp_seqno)) (void) SendServerID(rconnout); else @@ -177,7 +180,7 @@ SendServerID(rconn) { register struct rmp_packet *rpl; register char *src, *dst; - register u_char *size; + register u_int8_t *size; rpl = &rconn->rmp; /* cache ptr to RMP packet */ @@ -188,7 +191,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 = RMP_VERSION; + rpl->r_brpl.rmp_version = htons(RMP_VERSION); size = &rpl->r_brpl.rmp_flnmsize; /* ptr to length of host name */ @@ -231,7 +234,8 @@ SendFileNo(req, rconn, filelist) { register struct rmp_packet *rpl; register char *src, *dst; - register u_char *size, i; + register u_int8_t *size; + register int i; GETWORD(req->r_brpl.rmp_seqno, i); /* SeqNo is really FileNo */ rpl = &rconn->rmp; /* cache ptr to RMP packet */ @@ -243,7 +247,7 @@ SendFileNo(req, rconn, filelist) PUTWORD(i, rpl->r_brpl.rmp_seqno); i--; rpl->r_brpl.rmp_session = 0; - rpl->r_brpl.rmp_version = RMP_VERSION; + rpl->r_brpl.rmp_version = htons(RMP_VERSION); size = &rpl->r_brpl.rmp_flnmsize; /* ptr to length of filename */ *size = 0; /* init length to zero */ @@ -296,7 +300,7 @@ SendBootRepl(req, rconn, filelist) RMPCONN *oldconn; register struct rmp_packet *rpl; register char *src, *dst1, *dst2; - register u_char i; + register u_int8_t i; /* * If another connection already exists, delete it since we @@ -315,8 +319,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 = GenSessID(); - rpl->r_brpl.rmp_version = RMP_VERSION; + rpl->r_brpl.rmp_session = htons(GenSessID()); + rpl->r_brpl.rmp_version = htons(RMP_VERSION); rpl->r_brpl.rmp_flnmsize = req->r_brq.rmp_flnmsize; /* @@ -398,7 +402,7 @@ int SendReadRepl(rconn) RMPCONN *rconn; { - int retval; + int retval = 0; RMPCONN *oldconn; register struct rmp_packet *rpl, *req; register int size = 0; @@ -428,9 +432,9 @@ SendReadRepl(rconn) /* * Make sure Session ID's match. */ - if (req->r_rrq.rmp_session != - ((rpl->r_type == RMP_BOOT_REPL)? rpl->r_brpl.rmp_session: - rpl->r_rrpl.rmp_session)) { + 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))) { syslog(LOG_ERR, "SendReadRepl: bad session id (%s)", EnetStr(rconn)); rpl->r_rrpl.rmp_retcode = RMP_E_BADSID; @@ -446,8 +450,8 @@ SendReadRepl(rconn) * to work. This is necessary for bpfwrite() on machines * with MCLBYTES less than 1514. */ - if (req->r_rrq.rmp_size > RMPREADDATA) - req->r_rrq.rmp_size = RMPREADDATA; + if (ntohs(req->r_rrq.rmp_size) > RMPREADDATA) + req->r_rrq.rmp_size = htons(RMPREADDATA); /* * Position read head on file according to info in request packet. @@ -465,7 +469,7 @@ SendReadRepl(rconn) * Read data directly into reply packet. */ if ((size = read(oldconn->bootfd, &rpl->r_rrpl.rmp_data, - (int) req->r_rrq.rmp_size)) <= 0) { + (int) ntohs(req->r_rrq.rmp_size))) <= 0) { if (size < 0) { syslog(LOG_ERR, "SendReadRepl: read: %m (%s)", EnetStr(rconn)); @@ -533,9 +537,9 @@ BootDone(rconn) /* * Make sure Session ID's match. */ - if (rconn->rmp.r_rrq.rmp_session != - ((rpl->r_type == RMP_BOOT_REPL)? rpl->r_brpl.rmp_session: - rpl->r_rrpl.rmp_session)) { + 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))) { syslog(LOG_ERR, "BootDone: bad session id (%s)", EnetStr(rconn)); return(0); @@ -570,13 +574,18 @@ 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 = HPEXT_SXSAP; - rconn->rmp.hp_llc.sxsap = HPEXT_DXSAP; + rconn->rmp.hp_llc.dxsap = htons(HPEXT_SXSAP); + rconn->rmp.hp_llc.sxsap = htons(HPEXT_DXSAP); /* * Last time this connection was active. diff --git a/libexec/rbootd/utils.c b/libexec/rbootd/utils.c index 58ead7c7144b..5d37a25bd9ea 100644 --- a/libexec/rbootd/utils.c +++ b/libexec/rbootd/utils.c @@ -1,3 +1,5 @@ +/* $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). @@ -38,18 +40,18 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)utils.c 8.2 (Berkeley) 2/22/94 + * from: @(#)utils.c 8.1 (Berkeley) 6/4/93 * - * Utah $Hdr: utils.c 3.1 92/07/06$ + * From: Utah Hdr: utils.c 3.1 92/07/06 * Author: Jeff Forys, University of Utah CSS */ #ifndef lint -static char sccsid[] = "@(#)utils.c 8.2 (Berkeley) 2/22/94"; +/*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 $"; #endif /* not lint */ #include <sys/param.h> -#include <sys/time.h> #include <fcntl.h> #include <signal.h> @@ -85,7 +87,7 @@ DispPkt(rconn, direct) struct tm *tmp; register struct rmp_packet *rmp; int i, omask; - u_int t; + u_int32_t t; /* * Since we will be working with RmpConns as well as DbgFp, we @@ -113,11 +115,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, rmp->hp_llc.cntrl); + rmp->hp_llc.dsap, rmp->hp_llc.ssap, ntohs(rmp->hp_llc.cntrl)); /* display HP extensions to 802.2 Logical Link Control header */ (void) fprintf(DbgFp, "\tHP Ext: DXSAP:%x SXSAP:%x\n", - rmp->hp_llc.dxsap, rmp->hp_llc.sxsap); + ntohs(rmp->hp_llc.dxsap), ntohs(rmp->hp_llc.sxsap)); /* * Display information about RMP packet using type field to @@ -127,7 +129,7 @@ DispPkt(rconn, direct) case RMP_BOOT_REQ: /* boot request */ (void) fprintf(DbgFp, "\tBoot Request:"); GETWORD(rmp->r_brq.rmp_seqno, t); - if (rmp->r_brq.rmp_session == RMP_PROBESID) { + if (ntohs(rmp->r_brq.rmp_session) == RMP_PROBESID) { if (WORDZE(rmp->r_brq.rmp_seqno)) fputs(" (Send Server ID)", DbgFp); else @@ -135,8 +137,8 @@ DispPkt(rconn, direct) } (void) fputc('\n', DbgFp); (void) fprintf(DbgFp, BootFmt, rmp->r_brq.rmp_retcode, - t, rmp->r_brq.rmp_session, - rmp->r_brq.rmp_version); + t, ntohs(rmp->r_brq.rmp_session), + ntohs(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); @@ -146,23 +148,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, rmp->r_brpl.rmp_session, - rmp->r_brpl.rmp_version); + t, ntohs(rmp->r_brpl.rmp_session), + ntohs(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, rmp->r_rrq.rmp_session); + t, ntohs(rmp->r_rrq.rmp_session)); (void) fprintf(DbgFp, "\t\tNoOfBytes: %u\n", - rmp->r_rrq.rmp_size); + ntohs(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, rmp->r_rrpl.rmp_session); + t, ntohs(rmp->r_rrpl.rmp_session)); (void) fprintf(DbgFp, "\t\tNoOfBytesSent: %d\n", rconn->rmplen - RMPREADSIZE(0)); break; @@ -170,7 +172,7 @@ DispPkt(rconn, direct) (void) fprintf(DbgFp, "\tBoot Complete:\n"); (void) fprintf(DbgFp, "\t\tRetCode:%u SessID:%x\n", rmp->r_done.rmp_retcode, - rmp->r_done.rmp_session); + ntohs(rmp->r_done.rmp_session)); break; default: /* ??? */ (void) fprintf(DbgFp, "\tUnknown Type:(%d)\n", @@ -202,32 +204,30 @@ 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_char *addr; + u_int8_t *addr; { static char Hex[] = "0123456789abcdef"; static char etherstr[RMP_ADDRLEN*3]; register int i; - register char *cp1, *cp2; + register char *cp; /* * For each byte in `addr', convert it to "<hexchar><hexchar>:". * The last byte does not get a trailing `:' appended. */ i = 0; - cp1 = (char *)addr; - cp2 = etherstr; + cp = etherstr; for(;;) { - *cp2++ = Hex[*cp1 >> 4 & 0xf]; - *cp2++ = Hex[*cp1++ & 0xf]; + *cp++ = Hex[*addr >> 4 & 0xf]; + *cp++ = Hex[*addr++ & 0xf]; if (++i == RMP_ADDRLEN) break; - *cp2++ = ':'; + *cp++ = ':'; } - *cp2 = '\0'; + *cp = '\0'; return(etherstr); } @@ -253,7 +253,7 @@ DspFlnm(size, flnm) { register int i; - (void) fprintf(DbgFp, "\n\t\tFile Name (%d): <", size); + (void) fprintf(DbgFp, "\n\t\tFile Name (%u): <", 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_char *addr; + u_int8_t *addr; { CLIENT *ctmp; |