Commit of original mopd-2.5.3 source, downloaded from:

ftp://ftp.linux-mips.org/pub/linux/mips/people/macro/mopd/mopd-2.5.3.tar.gz
SHA256 = 6876cf56a763fea8db1f7d76723689bcf00b76edd4124052155f74f64e2b4ed3
This commit is contained in:
Mats O Jansson
1996-08-22 13:10:00 -04:00
committed by Boris Gjenero
commit b14a737a42
53 changed files with 7700 additions and 0 deletions

5
Makefile Normal file
View File

@@ -0,0 +1,5 @@
# $Id: Makefile,v 1.5 1996/08/16 22:37:51 moj Exp $
SUBDIR= mopd mopprobe moptrace mopchk mopa.out
.include <bsd.subdir.mk>

4
Makefile.inc Normal file
View File

@@ -0,0 +1,4 @@
# from: @(#)Makefile.inc 5.1 (Berkeley) 5/11/90
# $Id: Makefile.inc,v 1.0 1996/01/28 18:47:38 moj Exp $
BINDIR?= /usr/sbin

1
common/VERSION Normal file
View File

@@ -0,0 +1 @@
2.5.3

41
common/cmp.c Normal file
View File

@@ -0,0 +1,41 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: cmp.c,v 1.2 1995/09/29 12:30:42 moj Exp $";
#endif
#include "os.h"
int
mopCmpEAddr(addr1, addr2)
register u_char *addr1, *addr2;
{
return(bcmp((char *)addr1, (char *)addr2, 6));
}

44
common/cmp.h Normal file
View File

@@ -0,0 +1,44 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: cmp.h,v 1.2 1995/09/28 10:24:01 moj Exp $
*
*/
#ifndef _CMP_H_
#define _CMP_H_
#ifdef NO__P
int mopCmpEAddr (/* u_char *,u_char * */);
#else
__BEGIN_DECLS
int mopCmpEAddr __P((u_char *,u_char *));
__END_DECLS
#endif
#endif _CMP_H_

92
common/common.h Normal file
View File

@@ -0,0 +1,92 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: common.h,v 1.14 1996/08/13 12:22:29 moj Exp $
*
*/
#ifndef _COMMON_H_
#define _COMMON_H_
#define MAXDL 16 /* maximum number concurrent load */
#define IFNAME_SIZE 32 /* maximum size if interface name */
#define BUFSIZE 1600 /* main receive buffer size */
#define HDRSIZ 22 /* room for 803.2 header */
#ifndef MOP_FILE_PATH
#define MOP_FILE_PATH "/tftpboot/mop"
#endif
#define DEBUG_ONELINE 1
#define DEBUG_HEADER 2
#define DEBUG_INFO 3
/*
* structure per interface
*
*/
struct if_info {
int fd; /* File Descriptor */
int trans; /* Transport type Ethernet/802.3 */
u_char eaddr[6]; /* Ethernet addr of this interface */
char if_name[IFNAME_SIZE]; /* Interface Name */
int (*iopen)(); /* Interface Open Routine */
int (*write)(); /* Interface Write Routine */
void (*read)(); /* Interface Read Routine */
struct if_info *next; /* Next Interface */
};
#define DL_STATUS_FREE 0
#define DL_STATUS_READ_IMGHDR 1
#define DL_STATUS_SENT_MLD 2
#define DL_STATUS_SENT_PLT 3
struct dllist {
u_char status; /* Status byte */
struct if_info *ii; /* interface pointer */
u_char eaddr[6]; /* targets ethernet addres */
int ldfd; /* filedescriptor for loadfile */
u_short dl_bsz; /* Data Link Buffer Size */
int timeout; /* Timeout counter */
u_char count; /* Packet Counter */
u_long loadaddr; /* Load Address */
u_long xferaddr; /* Transfer Address */
u_long nloadaddr; /* Next Load Address */
long lseek; /* Seek before last read */
int aout; /* Is it an a.out file */
u_long a_text; /* Size of text segment */
u_long a_text_fill; /* Size of text segment fill */
u_long a_data; /* Size of data segment */
u_long a_data_fill; /* Size of data segment fill */
u_long a_bss; /* Size of bss segment */
u_long a_bss_fill; /* Size of bss segment fill */
long a_lseek; /* Keep track of pos in newfile */
};
#endif _COMMON_H_

331
common/device.c Normal file
View File

@@ -0,0 +1,331 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: device.c,v 1.21 1996/08/08 00:00:59 moj Exp $";
#endif
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
struct if_info *iflist; /* Interface List */
void mopReadDL();
void mopReadRC();
#ifdef NO__P
int mopOpenDL(/* struct if_info *, int */);
int mopOpenRC(/* struct if_info *, int */);
#else
int mopOpenDL(struct if_info *, int);
int mopOpenRC(struct if_info *, int);
#endif
int pfTrans();
int pfInit();
int pfWrite();
#ifdef DEV_NEW_CONF
/*
* Return ethernet adress for interface
*/
void
deviceEthAddr(ifname, eaddr)
char *ifname;
u_char *eaddr;
{
char inbuf[8192];
struct ifconf ifc;
struct ifreq *ifr;
struct sockaddr_dl *sdl;
int fd;
int i, len;
/* We cannot use SIOCGIFADDR on the BPF descriptor.
We must instead get all the interfaces with SIOCGIFCONF
and find the right one. */
/* Use datagram socket to get Ethernet address. */
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
syslog(LOG_ERR, "deviceEthAddr: socket: %m");
exit(1);
}
ifc.ifc_len = sizeof(inbuf);
ifc.ifc_buf = inbuf;
if (ioctl(fd, SIOCGIFCONF, (caddr_t)&ifc) < 0 ||
ifc.ifc_len < sizeof(struct ifreq)) {
syslog(LOG_ERR, "deviceEthAddr: SIOGIFCONF: %m");
exit(1);
}
ifr = ifc.ifc_req;
for (i = 0; i < ifc.ifc_len;
i += len, ifr = (struct ifreq *)((caddr_t)ifr + len)) {
len = sizeof(ifr->ifr_name) + ifr->ifr_addr.sa_len;
sdl = (struct sockaddr_dl *)&ifr->ifr_addr;
if (sdl->sdl_family != AF_LINK || sdl->sdl_type != IFT_ETHER ||
sdl->sdl_alen != 6)
continue;
if (!strncmp(ifr->ifr_name, ifname, sizeof(ifr->ifr_name))) {
bcopy((caddr_t)LLADDR(sdl), (caddr_t)eaddr, 6);
return;
}
}
syslog(LOG_ERR, "deviceEthAddr: Never saw interface `%s'!", ifname);
exit(1);
}
#endif /* DEV_NEW_CONF */
void
deviceOpen(ifname, proto, trans)
char *ifname;
u_short proto;
int trans;
{
struct if_info *p, tmp;
strcpy(tmp.if_name,ifname);
tmp.iopen = pfInit;
switch (proto) {
case MOP_K_PROTO_RC:
tmp.read = mopReadRC;
tmp.fd = mopOpenRC(&tmp, trans);
break;
case MOP_K_PROTO_DL:
tmp.read = mopReadDL;
tmp.fd = mopOpenDL(&tmp, trans);
break;
default:
break;
}
if (tmp.fd != -1) {
p = (struct if_info *)malloc(sizeof(*p));
if (p == 0) {
syslog(LOG_ERR, "deviceOpen: malloc: %m");
exit(1);
}
p->next = iflist;
iflist = p;
strcpy(p->if_name,tmp.if_name);
p->iopen = tmp.iopen;
p->write = pfWrite;
p->read = tmp.read;
bzero((char *)p->eaddr,sizeof(p->eaddr));
p->fd = tmp.fd;
#ifdef DEV_NEW_CONF
deviceEthAddr(p->if_name,&p->eaddr[0]);
#else
p->eaddr[0]= tmp.eaddr[0];
p->eaddr[1]= tmp.eaddr[1];
p->eaddr[2]= tmp.eaddr[2];
p->eaddr[3]= tmp.eaddr[3];
p->eaddr[4]= tmp.eaddr[4];
p->eaddr[5]= tmp.eaddr[5];
#endif /* DEV_NEW_CONF */
}
}
void
deviceInitOne(ifname)
char *ifname;
{
char interface[IFNAME_SIZE];
struct if_info *p;
int trans;
#ifdef _AIX
char dev[IFNAME_SIZE];
int unit,j;
unit = 0;
for (j = 0; j < strlen(ifname); j++) {
if (isalpha(ifname[j])) {
dev[j] = ifname[j];
} else {
if (isdigit(ifname[j])) {
unit = unit*10 + ifname[j] - '0';
dev[j] = '\0';
}
}
}
if ((strlen(dev) == 2) &&
(dev[0] == 'e') &&
((dev[1] == 'n') || (dev[1] == 't'))) {
sprintf(interface,"ent%d\0",unit);
} else {
sprintf(interface,"%s%d\0",dev,unit);
}
#else
sprintf(interface,"%s",ifname);
#endif /* _AIX */
/* Ok, init it just once */
p = iflist;
for (p = iflist; p; p = p->next) {
if (strcmp(p->if_name,interface) == 0) {
return;
}
}
syslog(LOG_INFO, "Initialized %s", interface);
/* Ok, get transport information */
trans = pfTrans(interface);
#ifndef NORC
/* Start with MOP Remote Console */
switch (trans) {
case TRANS_ETHER:
deviceOpen(interface,MOP_K_PROTO_RC,TRANS_ETHER);
break;
case TRANS_8023:
deviceOpen(interface,MOP_K_PROTO_RC,TRANS_8023);
break;
case TRANS_ETHER+TRANS_8023:
deviceOpen(interface,MOP_K_PROTO_RC,TRANS_ETHER);
deviceOpen(interface,MOP_K_PROTO_RC,TRANS_8023);
break;
case TRANS_ETHER+TRANS_8023+TRANS_AND:
deviceOpen(interface,MOP_K_PROTO_RC,TRANS_ETHER+TRANS_8023);
break;
}
#endif
#ifndef NODL
/* and next MOP Dump/Load */
switch (trans) {
case TRANS_ETHER:
deviceOpen(interface,MOP_K_PROTO_DL,TRANS_ETHER);
break;
case TRANS_8023:
deviceOpen(interface,MOP_K_PROTO_DL,TRANS_8023);
break;
case TRANS_ETHER+TRANS_8023:
deviceOpen(interface,MOP_K_PROTO_DL,TRANS_ETHER);
deviceOpen(interface,MOP_K_PROTO_DL,TRANS_8023);
break;
case TRANS_ETHER+TRANS_8023+TRANS_AND:
deviceOpen(interface,MOP_K_PROTO_DL,TRANS_ETHER+TRANS_8023);
break;
}
#endif
}
/*
* Initialize all "candidate" interfaces that are in the system
* configuration list. A "candidate" is up, not loopback and not
* point to point.
*/
void
deviceInitAll()
{
#ifdef DEV_NEW_CONF
char inbuf[8192];
struct ifconf ifc;
struct ifreq *ifr;
struct sockaddr_dl *sdl;
int fd;
int i, len;
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
syslog(LOG_ERR, "deviceInitAll: socket: %m");
exit(1);
}
ifc.ifc_len = sizeof(inbuf);
ifc.ifc_buf = inbuf;
if (ioctl(fd, SIOCGIFCONF, (caddr_t)&ifc) < 0 ||
ifc.ifc_len < sizeof(struct ifreq)) {
syslog(LOG_ERR, "deviceInitAll: SIOCGIFCONF: %m");
exit(1);
}
ifr = ifc.ifc_req;
for (i = 0; i < ifc.ifc_len;
i += len, ifr = (struct ifreq *)((caddr_t)ifr + len)) {
len = sizeof(ifr->ifr_name) + ifr->ifr_addr.sa_len;
sdl = (struct sockaddr_dl *)&ifr->ifr_addr;
if (sdl->sdl_family != AF_LINK || sdl->sdl_type != IFT_ETHER ||
sdl->sdl_alen != 6)
continue;
if (ioctl(fd, SIOCGIFFLAGS, (caddr_t)ifr) < 0) {
syslog(LOG_ERR, "deviceInitAll: SIOCGIFFLAGS: %m");
continue;
}
if ((ifr->ifr_flags &
(IFF_UP | IFF_LOOPBACK | IFF_POINTOPOINT)) != IFF_UP)
continue;
deviceInitOne(ifr->ifr_name);
}
(void) close(fd);
#else
int fd;
int n;
struct ifreq ibuf[8], *ifrp;
struct ifconf ifc;
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
syslog(LOG_ERR, "deviceInitAll: old socket: %m");
exit(1);
}
ifc.ifc_len = sizeof ibuf;
ifc.ifc_buf = (caddr_t)ibuf;
if (ioctl(fd, SIOCGIFCONF, (char *)&ifc) < 0 ||
ifc.ifc_len < sizeof(struct ifreq)) {
syslog(LOG_ERR, "deviceInitAll: old SIOCGIFCONF: %m");
exit(1);
}
ifrp = ibuf;
n = ifc.ifc_len / sizeof(*ifrp);
for (; --n >= 0; ++ifrp) {
if (ioctl(fd, SIOCGIFFLAGS, (char *)ifrp) < 0) {
continue;
}
if (/*(ifrp->ifr_flags & IFF_UP) == 0 ||*/
ifrp->ifr_flags & IFF_LOOPBACK ||
ifrp->ifr_flags & IFF_POINTOPOINT)
continue;
deviceInitOne(ifrp->ifr_name);
}
(void) close(fd);
#endif /* DEV_NEW_CONF */
}

52
common/device.h Normal file
View File

@@ -0,0 +1,52 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: device.h,v 1.3 1995/09/28 10:49:41 moj Exp $
*
*/
#ifndef _DEVICE_H_
#define _DEVICE_H_
#ifdef NO__P
#ifdef DEV_NEW_CONF
void deviceEthAddr (/* char *,u_char * */);
#endif
void deviceInitOne (/* char * */);
void deviceInitAll (/* void */);
#else
__BEGIN_DECLS
#ifdef DEV_NEW_CONF
void deviceEthAddr __P((char *,u_char *));
#endif
void deviceInitOne __P((char *));
void deviceInitAll __P((void));
__END_DECLS
#endif
#endif _DEVICE_H_

315
common/dl.c Normal file
View File

@@ -0,0 +1,315 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: dl.c,v 1.7 1996/08/05 07:37:53 moj Exp $";
#endif
#include "os.h"
#include "common/get.h"
#include "common/print.h"
#include "common/mopdef.h"
void
mopDumpDL(fd, pkt, trans)
FILE *fd;
u_char *pkt;
int trans;
{
int i,index = 0;
long tmpl;
u_char tmpc,c,program[17],code,*ucp;
u_short len,tmps,moplen;
len = mopGetLength(pkt, trans);
switch (trans) {
case TRANS_8023:
index = 22;
moplen = len - 8;
break;
default:
index = 16;
moplen = len;
}
code = mopGetChar(pkt,&index);
switch (code) {
case MOP_K_CODE_MLT:
tmpc = mopGetChar(pkt,&index); /* Load Number */
(void)fprintf(fd,"Load Number : %02x\n",tmpc);
if (moplen > 6) {
tmpl = mopGetLong(pkt,&index);/* Load Address */
(void)fprintf(fd,"Load Address : %08x\n",tmpl);
}
if (moplen > 10) {
#ifndef SHORT_PRINT
for (i = 0; i < (moplen - 10); i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0) {
(void)fprintf(fd,
"Image Data : %04x ",
moplen-10);
} else {
(void)fprintf(fd,
" ");
}
}
(void)fprintf(fd, "%02x ",
mopGetChar(pkt,&index));
if ((i % 16) == 15)
(void)fprintf(fd,"\n");
}
if ((i % 16) != 15)
(void)fprintf(fd,"\n");
#else
index = index + moplen - 10;
#endif
}
tmpl = mopGetLong(pkt,&index); /* Load Address */
(void)fprintf(fd,"Xfer Address : %08x\n",tmpl);
break;
case MOP_K_CODE_DCM:
/* Empty Message */
break;
case MOP_K_CODE_MLD:
tmpc = mopGetChar(pkt,&index); /* Load Number */
(void)fprintf(fd,"Load Number : %02x\n",tmpc);
tmpl = mopGetLong(pkt,&index); /* Load Address */
(void)fprintf(fd,"Load Address : %08x\n",tmpl);
if (moplen > 6) {
#ifndef SHORT_PRINT
for (i = 0; i < (moplen - 6); i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0) {
(void)fprintf(fd,
"Image Data : %04x ",
moplen-6);
} else {
(void)fprintf(fd,
" ");
}
}
(void)fprintf(fd,"%02x ",
mopGetChar(pkt,&index));
if ((i % 16) == 15)
(void)fprintf(fd,"\n");
}
if ((i % 16) != 15)
(void)fprintf(fd,"\n");
#else
index = index + moplen - 6;
#endif
}
break;
case MOP_K_CODE_ASV:
/* Empty Message */
break;
case MOP_K_CODE_RMD:
tmpl = mopGetLong(pkt,&index); /* Memory Address */
(void)fprintf(fd,"Mem Address : %08x\n",tmpl);
tmps = mopGetShort(pkt,&index); /* Count */
(void)fprintf(fd,"Count : %04x (%d)\n",tmps,tmps);
break;
case MOP_K_CODE_RPR:
tmpc = mopGetChar(pkt,&index); /* Device Type */
(void)fprintf(fd, "Device Type : %02x ",tmpc);
mopPrintDevice(fd, tmpc); (void)fprintf(fd, "\n");
tmpc = mopGetChar(pkt,&index); /* Format Version */
(void)fprintf(fd,"Format : %02x\n",tmpc);
tmpc = mopGetChar(pkt,&index); /* Program Type */
(void)fprintf(fd,"Program Type : %02x ",tmpc);
mopPrintPGTY(fd, tmpc); (void)fprintf(fd, "\n");
program[0] = 0;
tmpc = mopGetChar(pkt,&index); /* Software ID Len */
for (i = 0; i < tmpc; i++) {
program[i] = mopGetChar(pkt,&index);
program[i+1] = '\0';
}
(void)fprintf(fd,"Software : %02x '%s'\n",tmpc,program);
tmpc = mopGetChar(pkt,&index); /* Processor */
(void)fprintf(fd,"Processor : %02x ",tmpc);
mopPrintBPTY(fd, tmpc); (void)fprintf(fd, "\n");
mopPrintInfo(fd, pkt, &index, moplen, code, trans);
break;
case MOP_K_CODE_RML:
tmpc = mopGetChar(pkt,&index); /* Load Number */
(void)fprintf(fd,"Load Number : %02x\n",tmpc);
tmpc = mopGetChar(pkt,&index); /* Error */
(void)fprintf(fd,"Error : %02x (",tmpc);
if ((tmpc == 0)) {
(void)fprintf(fd,"no error)\n");
} else {
(void)fprintf(fd,"error)\n");
}
break;
case MOP_K_CODE_RDS:
tmpc = mopGetChar(pkt,&index); /* Device Type */
(void)fprintf(fd, "Device Type : %02x ",tmpc);
mopPrintDevice(fd, tmpc); (void)fprintf(fd, "\n");
tmpc = mopGetChar(pkt,&index); /* Format Version */
(void)fprintf(fd,"Format : %02x\n",tmpc);
tmpl = mopGetLong(pkt,&index); /* Memory Size */
(void)fprintf(fd,"Memory Size : %08x\n",tmpl);
tmpc = mopGetChar(pkt,&index); /* Bits */
(void)fprintf(fd,"Bits : %02x\n",tmpc);
mopPrintInfo(fd, pkt, &index, moplen, code, trans);
break;
case MOP_K_CODE_MDD:
tmpl = mopGetLong(pkt,&index); /* Memory Address */
(void)fprintf(fd,"Mem Address : %08x\n",tmpl);
if (moplen > 5) {
#ifndef SHORT_PRINT
for (i = 0; i < (moplen - 5); i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0) {
(void)fprintf(fd,
"Image Data : %04x ",
moplen-5);
} else {
(void)fprintf(fd,
" ");
}
}
(void)fprintf(fd,"%02x ",
mopGetChar(pkt,&index));
if ((i % 16) == 15)
(void)fprintf(fd,"\n");
}
if ((i % 16) != 15)
(void)fprintf(fd,"\n");
#else
index = index + moplen - 5;
#endif
}
break;
case MOP_K_CODE_PLT:
tmpc = mopGetChar(pkt,&index); /* Load Number */
(void)fprintf(fd,"Load Number : %02x\n",tmpc);
tmpc = mopGetChar(pkt,&index); /* Parameter Type */
while (tmpc != MOP_K_PLTP_END) {
c = mopGetChar(pkt,&index); /* Parameter Length */
switch(tmpc) {
case MOP_K_PLTP_TSN: /* Target Name */
(void)fprintf(fd,"Target Name : %02x '",
tmpc);
for (i = 0; i < ((int) c); i++) {
(void)fprintf(fd,"%c",
mopGetChar(pkt,&index));
}
(void)fprintf(fd,"'\n");
break;
case MOP_K_PLTP_TSA: /* Target Address */
(void)fprintf(fd,"Target Addr : %02x ",c);
for (i = 0; i < ((int) c); i++) {
(void)fprintf(fd,"%02x ",
mopGetChar(pkt,&index));
}
(void)fprintf(fd,"\n");
break;
case MOP_K_PLTP_HSN: /* Host Name */
(void)fprintf(fd,"Host Name : %02x '",
tmpc);
for (i = 0; i < ((int) c); i++) {
(void)fprintf(fd,"%c",
mopGetChar(pkt,&index));
}
(void)fprintf(fd,"'\n");
break;
case MOP_K_PLTP_HSA: /* Host Address */
(void)fprintf(fd,"Host Addr : %02x ",c);
for (i = 0; i < ((int) c); i++) {
(void)fprintf(fd,"%02x ",
mopGetChar(pkt,&index));
}
(void)fprintf(fd,"\n");
break;
case MOP_K_PLTP_HST: /* Host Time */
ucp = pkt + index; index = index + 10;
(void)fprintf(fd,"Host Time : ");
mopPrintTime(fd, ucp);
(void)fprintf(fd,"\n");
break;
default:
break;
}
tmpc = mopGetChar(pkt,&index);/* Parameter Type */
}
tmpl = mopGetLong(pkt,&index); /* Transfer Address */
(void)fprintf(fd,"Transfer Addr: %08x\n",tmpl);
break;
default:
break;
}
}

44
common/dl.h Normal file
View File

@@ -0,0 +1,44 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: dl.h,v 1.4 1995/10/13 19:28:38 moj Exp $
*
*/
#ifndef _DL_H_
#define _DL_H_
#ifdef NO__P
void mopDumpDL (/* FILE *, u_char *, int */);
#else
__BEGIN_DECLS
void mopDumpDL __P((FILE *, u_char *, int));
__END_DECLS
#endif
#endif _DL_H_

843
common/file.c Normal file
View File

@@ -0,0 +1,843 @@
/*
* Copyright (c) 1995-96 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: file.c,v 1.4 1996/08/16 22:39:22 moj Exp $";
#endif
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
#ifndef NOAOUT
#if defined(__NetBSD__) || defined(__OpenBSD__)
#include <sys/exec_aout.h>
#endif
#if defined(__bsdi__)
#define NOAOUT
#endif
#if defined(__FreeBSD__)
#include <sys/imgact_aout.h>
#endif
#if !defined(MID_VAX)
#define MID_VAX 140
#endif
#endif
void
mopFilePutLX(buf, index, value, cnt)
u_char *buf;
int index, cnt;
u_long value;
{
int i;
for (i = 0; i < cnt; i++) {
buf[index+i] = value % 256;
value = value / 256;
}
}
void
mopFilePutBX(buf, index, value, cnt)
u_char *buf;
int index, cnt;
u_long value;
{
int i;
for (i = 0; i < cnt; i++) {
buf[index+cnt-1-i] = value % 256;
value = value / 256;
}
}
u_long
mopFileGetLX(buf, index, cnt)
u_char *buf;
int index, cnt;
{
u_long ret = 0;
int i;
for (i = 0; i < cnt; i++) {
ret = ret*256 + buf[index+cnt-1-i];
}
return(ret);
}
u_long
mopFileGetBX(buf, index, cnt)
u_char *buf;
int index, cnt;
{
u_long ret = 0;
int i;
for (i = 0; i < cnt; i++) {
ret = ret*256 + buf[index+i];
}
return(ret);
}
void
mopFileSwapX(buf, index, cnt)
u_char *buf;
int index, cnt;
{
int i;
u_char c;
for (i = 0; i < (cnt / 2); i++) {
c = buf[index+i];
buf[index+i] = buf[index+cnt-1-i];
buf[index+cnt-1-i] = c;
}
}
int
CheckMopFile(fd)
int fd;
{
u_char header[512];
short image_type;
if (read(fd, header, 512) != 512)
return(-1);
(void)lseek(fd, (off_t) 0, SEEK_SET);
image_type = (u_short)(header[IHD_W_ALIAS+1]*256 +
header[IHD_W_ALIAS]);
switch(image_type) {
case IHD_C_NATIVE: /* Native mode image (VAX) */
case IHD_C_RSX: /* RSX image produced by TKB */
case IHD_C_BPA: /* BASIC plus analog */
case IHD_C_ALIAS: /* Alias */
case IHD_C_CLI: /* Image is CLI */
case IHD_C_PMAX: /* PMAX system image */
case IHD_C_ALPHA: /* ALPHA system image */
break;
default:
return(-1);
}
return(0);
}
int
GetMopFileInfo(fd, load, xfr)
int fd;
u_long *load, *xfr;
{
u_char header[512];
short image_type;
u_long load_addr, xfr_addr, isd, iha, hbcnt, isize;
if (read(fd, header, 512) != 512)
return(-1);
image_type = (u_short)(header[IHD_W_ALIAS+1]*256 +
header[IHD_W_ALIAS]);
switch(image_type) {
case IHD_C_NATIVE: /* Native mode image (VAX) */
isd = (header[IHD_W_SIZE+1]*256 +
header[IHD_W_SIZE]);
iha = (header[IHD_W_ACTIVOFF+1]*256 +
header[IHD_W_ACTIVOFF]);
hbcnt = (header[IHD_B_HDRBLKCNT]);
isize = (header[isd+ISD_W_PAGCNT+1]*256 +
header[isd+ISD_W_PAGCNT]) * 512;
load_addr = ((header[isd+ISD_V_VPN+1]*256 +
header[isd+ISD_V_VPN]) & ISD_M_VPN)
* 512;
xfr_addr = (header[iha+IHA_L_TFRADR1+3]*0x1000000 +
header[iha+IHA_L_TFRADR1+2]*0x10000 +
header[iha+IHA_L_TFRADR1+1]*0x100 +
header[iha+IHA_L_TFRADR1]) & 0x7fffffff;
#ifdef INFO
printf("Native Image (VAX)\n");
printf("Header Block Count: %d\n",hbcnt);
printf("Image Size: %08x\n",isize);
printf("Load Address: %08x\n",load_addr);
printf("Transfer Address: %08x\n",xfr_addr);
#endif
break;
case IHD_C_RSX: /* RSX image produced by TKB */
hbcnt = header[L_BBLK+1]*256 + header[L_BBLK];
isize = (header[L_BLDZ+1]*256 + header[L_BLDZ]) * 64;
load_addr = header[L_BSA+1]*256 + header[L_BSA];
xfr_addr = header[L_BXFR+1]*256 + header[L_BXFR];
#ifdef INFO
printf("RSX Image\n");
printf("Header Block Count: %d\n",hbcnt);
printf("Image Size: %08x\n",isize);
printf("Load Address: %08x\n",load_addr);
printf("Transfer Address: %08x\n",xfr_addr);
#endif
break;
case IHD_C_BPA: /* BASIC plus analog */
#ifdef INFO
printf("BASIC-Plus Image, not supported\n");
#endif
return(-1);
break;
case IHD_C_ALIAS: /* Alias */
#ifdef INFO
printf("Alias, not supported\n");
#endif
return(-1);
break;
case IHD_C_CLI: /* Image is CLI */
#ifdef INFO
printf("CLI, not supported\n");
#endif
return(-1);
break;
case IHD_C_PMAX: /* PMAX system image */
isd = (header[IHD_W_SIZE+1]*256 +
header[IHD_W_SIZE]);
iha = (header[IHD_W_ACTIVOFF+1]*256 +
header[IHD_W_ACTIVOFF]);
hbcnt = (header[IHD_B_HDRBLKCNT]);
isize = (header[isd+ISD_W_PAGCNT+1]*256 +
header[isd+ISD_W_PAGCNT]) * 512;
load_addr = (header[isd+ISD_V_VPN+1]*256 +
header[isd+ISD_V_VPN]) * 512;
xfr_addr = (header[iha+IHA_L_TFRADR1+3]*0x1000000 +
header[iha+IHA_L_TFRADR1+2]*0x10000 +
header[iha+IHA_L_TFRADR1+1]*0x100 +
header[iha+IHA_L_TFRADR1]);
#ifdef INFO
printf("PMAX Image \n");
printf("Header Block Count: %d\n",hbcnt);
printf("Image Size: %08x\n",isize);
printf("Load Address: %08x\n",load_addr);
printf("Transfer Address: %08x\n",xfr_addr);
#endif
break;
case IHD_C_ALPHA: /* ALPHA system image */
isd = (header[EIHD_L_ISDOFF+3]*0x1000000 +
header[EIHD_L_ISDOFF+2]*0x10000 +
header[EIHD_L_ISDOFF+1]*0x100 +
header[EIHD_L_ISDOFF]);
hbcnt = (header[EIHD_L_HDRBLKCNT+3]*0x1000000 +
header[EIHD_L_HDRBLKCNT+2]*0x10000 +
header[EIHD_L_HDRBLKCNT+1]*0x100 +
header[EIHD_L_HDRBLKCNT]);
isize = (header[isd+EISD_L_SECSIZE+3]*0x1000000 +
header[isd+EISD_L_SECSIZE+2]*0x10000 +
header[isd+EISD_L_SECSIZE+1]*0x100 +
header[isd+EISD_L_SECSIZE]);
load_addr = 0;
xfr_addr = 0;
#ifdef INFO
printf("Alpha Image \n");
printf("Header Block Count: %d\n",hbcnt);
printf("Image Size: %08x\n",isize);
printf("Load Address: %08x\n",load_addr);
printf("Transfer Address: %08x\n",xfr_addr);
#endif
break;
default:
#ifdef INFO
printf("Unknown Image (%d)\n",image_type);
#endif
return(-1);
}
if (load != NULL) {
*load = load_addr;
}
if (xfr != NULL) {
*xfr = xfr_addr;
}
return(0);
}
#ifndef NOAOUT
int
getMID(old_mid,new_mid)
int old_mid, new_mid;
{
int mid;
mid = old_mid;
switch (new_mid) {
case MID_I386:
mid = MID_I386;
break;
#ifdef MID_M68K
case MID_M68K:
mid = MID_M68K;
break;
#endif
#ifdef MID_M68K4K
case MID_M68K4K:
mid = MID_M68K4K;
break;
#endif
#ifdef MID_NS32532
case MID_NS32532:
mid = MID_NS32532;
break;
#endif
/*###323 [cc] for each function it appears in.)%%%*/
/*###323 [cc] (Each undeclared identifier is reported only once%%%*/
/*###323 [cc] `MID_SPARC' undeclared (first use this function)%%%*/
case MID_SPARC:
mid = MID_SPARC;
break;
#ifdef MID_PMAX
case MID_PMAX:
mid = MID_PMAX;
break;
#endif
#ifdef MID_VAX
case MID_VAX:
mid = MID_VAX;
break;
#endif
#ifdef MID_ALPHA
case MID_ALPHA:
mid = MID_ALPHA;
break;
#endif
#ifdef MID_MIPS
case MID_MIPS:
mid = MID_MIPS;
break;
#endif
#ifdef MID_ARM6
case MID_ARM6:
mid = MID_ARM6;
break;
#endif
default:
/*###352 [cc] syntax error before `}'%%%*/
}
return(mid);
}
int
getCLBYTES(mid)
int mid;
{
int clbytes;
switch (mid) {
#ifdef MID_VAX
case MID_VAX:
clbytes = 1024;
break;
#endif
case MID_I386:
#ifdef MID_M68K4K
case MID_M68K4K:
#endif
#ifdef MID_NS32532
case MID_NS32532:
#endif
case MID_SPARC: /* It might be 8192 */
#ifdef MID_PMAX
case MID_PMAX:
#endif
#ifdef MID_MIPS
case MID_MIPS:
#endif
#ifdef MID_ARM6
case MID_ARM6:
#endif
clbytes = 4096;
break;
#ifdef MID_M68K
case MID_M68K:
#endif
#ifdef MID_ALPHA
case MID_ALPHA:
#endif
#if defined(MID_M68K) || defined(MID_ALPHA)
clbytes = 8192;
break;
#endif
default:
clbytes = 0;
}
return(clbytes);
}
#endif
/*###406 [cc] syntax error before `int'%%%*/
int
CheckAOutFile(fd)
int fd;
{
#ifdef NOAOUT
return(-1);
#else
struct exec ex, ex_swap;
int mid = -1;
/*###416 [cc] `fd' undeclared (first use this function)%%%*/
if (read(fd, (char *)&ex, sizeof(ex)) != sizeof(ex))
return(-1);
(void)lseek(fd, (off_t) 0, SEEK_SET);
if (read(fd, (char *)&ex_swap, sizeof(ex_swap)) != sizeof(ex_swap))
return(-1);
(void)lseek(fd, (off_t) 0, SEEK_SET);
mid = getMID(mid, N_GETMID (ex));
if (mid == -1) {
mid = getMID(mid, N_GETMID (ex_swap));
}
if (mid != -1) {
return(0);
} else {
return(-1);
}
#endif NOAOUT
}
/*###440 [cc] syntax error before `int'%%%*/
int
GetAOutFileInfo(fd, load, xfr, a_text, a_text_fill,
a_data, a_data_fill, a_bss, a_bss_fill, aout)
int fd, *aout;
u_long *load, *xfr, *a_text, *a_text_fill;
u_long *a_data, *a_data_fill, *a_bss, *a_bss_fill;
{
#ifdef NOAOUT
return(-1);
#else
struct exec ex, ex_swap;
int mid = -1;
u_long magic, clbytes, clofset;
if (read(fd, (char *)&ex, sizeof(ex)) != sizeof(ex))
return(-1);
(void)lseek(fd, (off_t) 0, SEEK_SET);
if (read(fd, (char *)&ex_swap, sizeof(ex_swap)) != sizeof(ex_swap))
return(-1);
mopFileSwapX((u_char *)&ex_swap, 0, 4);
mid = getMID(mid, N_GETMID (ex));
if (mid == -1) {
mid = getMID(mid, N_GETMID (ex_swap));
if (mid != -1) {
mopFileSwapX((u_char *)&ex, 0, 4);
}
}
if (mid == -1) {
return(-1);
}
if (N_BADMAG (ex)) {
return(-1);
}
switch (mid) {
case MID_I386:
#ifdef MID_NS32532
case MID_NS32532:
#endif
#ifdef MID_PMAX
case MID_PMAX:
#endif
#ifdef MID_VAX
case MID_VAX:
#endif
#ifdef MID_ALPHA
case MID_ALPHA:
#endif
#ifdef MID_ARM6
case MID_ARM6:
#endif
ex.a_text = mopFileGetLX((u_char *)&ex_swap, 4, 4);
ex.a_data = mopFileGetLX((u_char *)&ex_swap, 8, 4);
ex.a_bss = mopFileGetLX((u_char *)&ex_swap, 12, 4);
ex.a_syms = mopFileGetLX((u_char *)&ex_swap, 16, 4);
ex.a_entry = mopFileGetLX((u_char *)&ex_swap, 20, 4);
ex.a_trsize= mopFileGetLX((u_char *)&ex_swap, 24, 4);
ex.a_drsize= mopFileGetLX((u_char *)&ex_swap, 28, 4);
break;
#ifdef MID_M68K
case MID_M68K:
#endif
#ifdef MID_M68K4K
case MID_M68K4K:
#endif
case MID_SPARC:
#ifdef MID_MIPS
case MID_MIPS:
#endif
ex.a_text = mopFileGetBX((u_char *)&ex_swap, 4, 4);
ex.a_data = mopFileGetBX((u_char *)&ex_swap, 8, 4);
ex.a_bss = mopFileGetBX((u_char *)&ex_swap, 12, 4);
ex.a_syms = mopFileGetBX((u_char *)&ex_swap, 16, 4);
ex.a_entry = mopFileGetBX((u_char *)&ex_swap, 20, 4);
ex.a_trsize= mopFileGetBX((u_char *)&ex_swap, 24, 4);
ex.a_drsize= mopFileGetBX((u_char *)&ex_swap, 28, 4);
break;
default:
/*###525 [cc] syntax error before `}'%%%*/
}
#ifdef INFO
printf("a.out image (");
switch (N_GETMID (ex)) {
case MID_I386:
printf("i386");
break;
#ifdef MID_M68K
case MID_M68K:
printf("m68k");
break;
#endif
#ifdef MID_M68K4K
case MID_M68K4K:
printf("m68k 4k");
break;
#endif
#ifdef MID_NS32532
case MID_NS32532:
printf("pc532");
break;
#endif
case MID_SPARC:
printf("sparc");
break;
#ifdef MID_PMAX
case MID_PMAX:
printf("pmax");
break;
#endif
#ifdef MID_VAX
case MID_VAX:
printf("vax");
break;
#endif
#ifdef MID_ALPHA
case MID_ALPHA:
printf("alpha");
break;
#endif
#ifdef MID_MIPS
case MID_MIPS:
printf("mips");
break;
#endif
#ifdef MID_ARM6
case MID_ARM6:
printf("arm32");
break;
#endif
default:
}
printf(") Magic: ");
switch (N_GETMAGIC (ex)) {
case OMAGIC:
printf("OMAGIC");
break;
case NMAGIC:
printf("NMAGIC");
break;
case ZMAGIC:
printf("ZMAGIC");
break;
case QMAGIC:
printf("QMAGIC");
break;
default:
printf("Unknown %d",N_GETMAGIC (ex));
}
printf("\n");
printf("Size of text: %08x\n",ex.a_text);
printf("Size of data: %08x\n",ex.a_data);
printf("Size of bss: %08x\n",ex.a_bss);
printf("Size of symbol tab: %08x\n",ex.a_syms);
printf("Transfer Address: %08x\n",ex.a_entry);
printf("Size of reloc text: %08x\n",ex.a_trsize);
printf("Size of reloc data: %08x\n",ex.a_drsize);
#endif
magic = N_GETMAGIC (ex);
clbytes = getCLBYTES(mid);
clofset = clbytes - 1;
/*###608 [cc] `load' undeclared (first use this function)%%%*/
if (load != NULL) {
*load = 0;
}
/*###612 [cc] `xfr' undeclared (first use this function)%%%*/
if (xfr != NULL) {
*xfr = ex.a_entry;
}
/*###616 [cc] `a_text' undeclared (first use this function)%%%*/
if (a_text != NULL) {
*a_text = ex.a_text;
}
/*###620 [cc] `a_text_fill' undeclared (first use this function)%%%*/
if (a_text_fill != NULL) {
if (magic == ZMAGIC || magic == NMAGIC) {
*a_text_fill = clbytes - (ex.a_text & clofset);
if (*a_text_fill == clbytes) {
*a_text_fill = 0;
}
} else {
*a_text_fill = 0;
}
}
/*###631 [cc] `a_data' undeclared (first use this function)%%%*/
if (a_data != NULL) {
*a_data = ex.a_data;
}
/*###635 [cc] `a_data_fill' undeclared (first use this function)%%%*/
if (a_data_fill != NULL) {
if (magic == ZMAGIC || magic == NMAGIC) {
*a_data_fill = clbytes - (ex.a_data & clofset);
if (*a_data_fill == clbytes) {
*a_data_fill = 0;
}
} else {
*a_data_fill = 0;
}
}
/*###646 [cc] `a_bss' undeclared (first use this function)%%%*/
if (a_bss != NULL) {
*a_bss = ex.a_bss;
}
/*###650 [cc] `a_bss_fill' undeclared (first use this function)%%%*/
if (a_bss_fill != NULL) {
if (magic == ZMAGIC || magic == NMAGIC) {
*a_bss_fill = clbytes - (ex.a_bss & clofset);
if (*a_bss_fill == clbytes) {
*a_bss_fill = 0;
}
} else {
*a_bss_fill = clbytes -
((ex.a_text+ex.a_data+ex.a_bss) & clofset);
if (*a_text_fill == clbytes) {
*a_text_fill = 0;
}
}
}
/*###665 [cc] `aout' undeclared (first use this function)%%%*/
if (aout != NULL) {
*aout = mid;
}
return(0);
#endif NOAOUT
}
/*###673 [cc] syntax error before `int'%%%*/
int
GetFileInfo(fd, load, xfr, aout,
a_text, a_text_fill, a_data, a_data_fill, a_bss, a_bss_fill)
int fd, *aout;
u_long *load, *xfr, *a_text, *a_text_fill;
u_long *a_data, *a_data_fill, *a_bss, *a_bss_fill;
{
int err;
err = CheckAOutFile(fd);
if (err == 0) {
err = GetAOutFileInfo(fd, load, xfr,
a_text, a_text_fill,
a_data, a_data_fill,
a_bss, a_bss_fill,
aout);
if (err != 0) {
return(-1);
}
} else {
err = CheckMopFile(fd);
if (err == 0) {
err = GetMopFileInfo(fd, load, xfr);
if (err != 0) {
return(-1);
}
*aout = -1;
} else {
return(-1);
}
}
return(0);
}
ssize_t
/*###711 [cc] syntax error before `mopFileRead'%%%*/
mopFileRead(dlslot, buf)
struct dllist *dlslot;
u_char *buf;
{
ssize_t len, outlen;
int bsz;
long pos, notdone, total;
/*###719 [cc] `dlslot' undeclared (first use this function)%%%*/
if (dlslot->aout == -1) {
/*###720 [cc] `buf' undeclared (first use this function)%%%*/
len = read(dlslot->ldfd,buf,dlslot->dl_bsz);
} else {
bsz = dlslot->dl_bsz;
pos = dlslot->a_lseek;
len = 0;
total = dlslot->a_text;
if (pos < total) {
notdone = total - pos;
if (notdone <= bsz) {
/*###731 [cc] subscripted value is neither array nor pointer%%%*/
outlen = read(dlslot->ldfd,&buf[len],notdone);
} else {
/*###733 [cc] subscripted value is neither array nor pointer%%%*/
outlen = read(dlslot->ldfd,&buf[len],bsz);
}
len = len + outlen;
pos = pos + outlen;
bsz = bsz - outlen;
}
total = total + dlslot->a_text_fill;
if ((bsz > 0) && (pos < total)) {
notdone = total - pos;
if (notdone <= bsz) {
outlen = notdone;
} else {
outlen = bsz;
}
/*###749 [cc] subscripted value is neither array nor pointer%%%*/
bzero(&buf[len],outlen);
len = len + outlen;
pos = pos + outlen;
bsz = bsz - outlen;
}
total = total + dlslot->a_data;
if ((bsz > 0) && (pos < total)) {
notdone = total - pos;
if (notdone <= bsz) {
/*###760 [cc] subscripted value is neither array nor pointer%%%*/
outlen = read(dlslot->ldfd,&buf[len],notdone);
} else {
/*###762 [cc] subscripted value is neither array nor pointer%%%*/
outlen = read(dlslot->ldfd,&buf[len],bsz);
}
len = len + outlen;
pos = pos + outlen;
bsz = bsz - outlen;
}
total = total + dlslot->a_data_fill;
if ((bsz > 0) && (pos < total)) {
notdone = total - pos;
if (notdone <= bsz) {
outlen = notdone;
} else {
outlen = bsz;
}
/*###778 [cc] subscripted value is neither array nor pointer%%%*/
bzero(&buf[len],outlen);
len = len + outlen;
pos = pos + outlen;
bsz = bsz - outlen;
}
total = total + dlslot->a_bss;
if ((bsz > 0) && (pos < total)) {
notdone = total - pos;
if (notdone <= bsz) {
outlen = notdone;
} else {
outlen = bsz;
}
/*###793 [cc] subscripted value is neither array nor pointer%%%*/
bzero(&buf[len],outlen);
len = len + outlen;
pos = pos + outlen;
bsz = bsz - outlen;
}
total = total + dlslot->a_bss_fill;
if ((bsz > 0) && (pos < total)) {
notdone = total - pos;
if (notdone <= bsz) {
outlen = notdone;
} else {
outlen = bsz;
}
/*###808 [cc] subscripted value is neither array nor pointer%%%*/
bzero(&buf[len],outlen);
len = len + outlen;
pos = pos + outlen;
bsz = bsz - outlen;
}
dlslot->a_lseek = pos;
}
return(len);
}
/*###820 [cc] syntax error at end of input%%%*/

67
common/file.h Normal file
View File

@@ -0,0 +1,67 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: file.h,v 1.2 1996/08/13 18:36:17 moj Exp $
*
*/
#ifndef _FILE_H_
#define _FILE_H_
#ifdef NO__P
void mopFilePutLX (/* u_char *, int, u_long, int */);
void mopFilePutBX (/* u_char *, int, u_long, int */);
u_long mopFileGetLX (/* u_char *, int, int */);
u_long mopFileGetBX (/* u_char *, int, int */);
void mopFileSwapX (/* u_char *, int, int */);
int CheckMopFile (/* int */);
int GetMopFileInfo (/* int, u_long *, u_long * */);
int CheckAOutFile (/* int */);
int GetAOutFileInfo(/* int, u_long *, u_long *, u_long *, u_long *,
u_long *, u_long *, u_long *, u_long * */);
int GetFileInfo (/* int, u_long *, u_long *, int *, u_long *, u_long *,
u_long *, u_long *, u_long *, u_long * */);
#else
__BEGIN_DECLS
void mopFilePutLX __P((u_char *, int, u_long, int));
void mopFilePutBX __P((u_char *, int, u_long, int));
u_long mopFileGetLX __P((u_char *, int, int));
u_long mopFileGetBX __P((u_char *, int, int));
void mopFileSwapX __P((u_char *, int, int));
int CheckMopFile __P((int));
int GetMopFileInfo __P((int, u_long *, u_long *));
int CheckAOutFile __P((int));
int GetAOutFileInfo __P((int, u_long *, u_long *, u_long *, u_long *,
u_long *, u_long *, u_long *, u_long *, int *));
int GetFileInfo __P((int, u_long *, u_long *, int *,
u_long *, u_long *, u_long *, u_long *,
u_long *, u_long *));
__END_DECLS
#endif
#endif _FILE_H_

148
common/get.c Normal file
View File

@@ -0,0 +1,148 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: get.c,v 1.5 1996/03/31 18:50:14 moj Exp $";
#endif
#include <sys/types.h>
#include "common/mopdef.h"
u_char
mopGetChar(pkt, index)
register u_char *pkt;
register int *index;
{
u_char ret;
ret = pkt[*index];
*index = *index + 1;
return(ret);
}
u_short
mopGetShort(pkt, index)
register u_char *pkt;
register int *index;
{
u_short ret;
ret = pkt[*index] + pkt[*index+1]*256;
*index = *index + 2;
return(ret);
}
u_long
mopGetLong(pkt, index)
register u_char *pkt;
register int *index;
{
u_long ret;
ret = pkt[*index] +
pkt[*index+1]*0x100 +
pkt[*index+2]*0x10000 +
pkt[*index+3]*0x1000000;
*index = *index + 4;
return(ret);
}
void
mopGetMulti(pkt, index, dest, size)
register u_char *pkt,*dest;
register int *index,size;
{
int i;
for (i = 0; i < size; i++) {
dest[i] = pkt[*index+i];
}
*index = *index + size;
}
int
mopGetTrans(pkt, trans)
u_char *pkt;
int trans;
{
u_short *ptype;
if (trans == 0) {
ptype = (u_short *)(pkt+12);
if (ntohs(*ptype) < 1600) {
trans = TRANS_8023;
} else {
trans = TRANS_ETHER;
}
}
return(trans);
}
void
mopGetHeader(pkt, index, dst, src, proto, len, trans)
u_char *pkt, **dst, **src;
int *index, *len, trans;
u_short *proto;
{
*dst = pkt;
*src = pkt + 6;
*index = *index + 12;
switch(trans) {
case TRANS_ETHER:
*proto = (u_short)(pkt[*index]*256 + pkt[*index+1]);
*index = *index + 2;
*len = (int)(pkt[*index+1]*256 + pkt[*index]);
*index = *index + 2;
break;
case TRANS_8023:
*len = (int)(pkt[*index]*256 + pkt[*index+1]);
*index = *index + 8;
*proto = (u_short)(pkt[*index]*256 + pkt[*index+1]);
*index = *index + 2;
break;
}
}
u_short
mopGetLength(pkt, trans)
u_char *pkt;
int trans;
{
switch(trans) {
case TRANS_ETHER:
return(pkt[15]*256 + pkt[14]);
break;
case TRANS_8023:
return(pkt[12]*256 + pkt[13]);
break;
}
return(0);
}

58
common/get.h Normal file
View File

@@ -0,0 +1,58 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: get.h,v 1.4 1995/10/05 20:21:31 moj Exp $
*
*/
#ifndef _GET_H_
#define _GET_H_
#ifdef NO__P
u_char mopGetChar (/* u_char *, int * */);
u_short mopGetShort (/* u_char *, int * */);
u_long mopGetLong (/* u_char *, int * */);
void mopGetMulti (/* u_char *, int *,u_char *,int */);
int mopGetTrans (/* u_char *, int */);
void mopGetHeader (/* u_char *, int *, u_char **, u_char **, u_short *,
int *, int */);
u_short mopGetLength (/* u_char *, int */);
#else
__BEGIN_DECLS
u_char mopGetChar __P((u_char *,int *));
u_short mopGetShort __P((u_char *,int *));
u_long mopGetLong __P((u_char *,int *));
void mopGetMulti __P((u_char *,int *,u_char *,int));
int mopGetTrans __P((u_char *, int));
void mopGetHeader __P((u_char *, int *, u_char **, u_char **, u_short *,
int *, int));
u_short mopGetLength __P((u_char *, int));
__END_DECLS
#endif
#endif _GET_H_

179
common/loop-bsd.c Normal file
View File

@@ -0,0 +1,179 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: loop-bsd.c,v 1.11 1996/08/16 22:41:28 moj Exp $";
#endif
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
#if defined(__bsdi__) || defined(__FreeBSD__)
#include <sys/time.h>
#endif
#include <net/bpf.h>
#include <sys/ioctl.h>
#include <sys/errno.h>
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
int
mopOpenRC(p, trans)
struct if_info *p;
int trans;
{
#ifndef NORC
return (*(p->iopen))(p->if_name,
O_RDWR,
MOP_K_PROTO_RC,
trans);
#else
return -1;
#endif
}
int
mopOpenDL(p, trans)
struct if_info *p;
int trans;
{
#ifndef NODL
return (*(p->iopen))(p->if_name,
O_RDWR,
MOP_K_PROTO_DL,
trans);
#else
return -1;
#endif
}
void
mopReadRC()
{
}
void
mopReadDL()
{
}
/*
* The list of all interfaces that are being listened to. loop()
* "selects" on the descriptors in this list.
*/
struct if_info *iflist;
void mopProcess __P((struct if_info *, u_char *));
/*
* Loop indefinitely listening for MOP requests on the
* interfaces in 'iflist'.
*/
void
Loop()
{
u_char *buf, *bp, *ep;
int cc;
fd_set fds, listeners;
int bufsize, maxfd = 0;
struct if_info *ii;
if (iflist == 0) {
syslog(LOG_ERR, "no interfaces");
exit(0);
}
if (iflist->fd != -1) {
if (ioctl(iflist->fd, BIOCGBLEN, (caddr_t) & bufsize) < 0) {
syslog(LOG_ERR, "BIOCGBLEN: %m");
exit(0);
}
}
buf = (u_char *) malloc((unsigned) bufsize);
if (buf == 0) {
syslog(LOG_ERR, "malloc: %m");
exit(0);
}
/*
* Find the highest numbered file descriptor for select().
* Initialize the set of descriptors to listen to.
*/
FD_ZERO(&fds);
for (ii = iflist; ii; ii = ii->next) {
if (ii->fd != -1) {
FD_SET(ii->fd, &fds);
if (ii->fd > maxfd)
maxfd = ii->fd;
}
}
while (1) {
listeners = fds;
if (select(maxfd + 1, &listeners, (struct fd_set *) 0,
(struct fd_set *) 0, (struct timeval *) 0) < 0) {
syslog(LOG_ERR, "select: %m");
exit(0);
}
for (ii = iflist; ii; ii = ii->next) {
if (ii->fd != -1) {
if (!FD_ISSET(ii->fd, &listeners))
continue;
}
again:
cc = read(ii->fd, (char *) buf, bufsize);
/* Don't choke when we get ptraced */
if (cc < 0 && errno == EINTR)
goto again;
/* Due to a SunOS bug, after 2^31 bytes, the file
* offset overflows and read fails with EINVAL. The
* lseek() to 0 will fix things. */
if (cc < 0) {
if (errno == EINVAL &&
(lseek(ii->fd, 0, SEEK_CUR) + bufsize) < 0) {
(void) lseek(ii->fd, 0, 0);
goto again;
}
syslog(LOG_ERR, "read: %m");
exit(0);
}
/* Loop through the packet(s) */
#define bhp ((struct bpf_hdr *)bp)
bp = buf;
ep = bp + cc;
while (bp < ep) {
register int caplen, hdrlen;
caplen = bhp->bh_caplen;
hdrlen = bhp->bh_hdrlen;
mopProcess(ii, bp + hdrlen);
bp += BPF_WORDALIGN(hdrlen + caplen);
}
}
}
}

49
common/mopdef.c Normal file
View File

@@ -0,0 +1,49 @@
/*
* Copyright (c) 1995 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: mopdef.c,v 1.2 1995/10/02 16:50:22 moj Exp $";
#endif
#define MOPDEF_SURPESS_EXTERN
#include "common/mopdef.h"
char dl_mcst[6] = MOP_DL_MULTICAST; /* Dump/Load Multicast */
char rc_mcst[6] = MOP_RC_MULTICAST; /* Remote Console Multicast */
char dl_802_proto[5] = MOP_K_PROTO_802_DL; /* MOP Dump/Load 802.2 */
char rc_802_proto[5] = MOP_K_PROTO_802_RC; /* MOP Remote Console 802.2 */
char lp_802_proto[5] = MOP_K_PROTO_802_LP; /* Loopback 802.2 */
int
mopdef_dummy()
{
/* Just to keep them as variables */
return(dl_mcst[0]-rc_mcst[0]-
lp_802_proto[1]-rc_802_proto[1]-lp_802_proto[1]);
}

196
common/mopdef.h Normal file
View File

@@ -0,0 +1,196 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: mopdef.h,v 1.11 1995/10/12 20:22:21 moj Exp $
*
*/
#ifndef _MOPDEF_H_
#define _MOPDEF_H_
#define MOP_K_PROTO_DL 0x6001 /* MOP Load/Dump Protocol */
#define MOP_K_PROTO_RC 0x6002 /* MOP Remote Console Protocol */
#define MOP_K_PROTO_LP 0x9000 /* MOP Loopback Protocol */
#define MOP_K_PROTO_802_DL { 0x08, 0x00, 0x2b, 0x60, 0x01 }
#define MOP_K_PROTO_802_RC { 0x08, 0x00, 0x2b, 0x60, 0x02 }
#define MOP_K_PROTO_802_LP { 0x08, 0x00, 0x2b, 0x90, 0x00 }
#define MOP_K_PROTO_802_DSAP 0xaa
#define MOP_K_PROTO_802_SSAP 0xaa
#define MOP_K_PROTO_802_CNTL 0x03
#define TRANS_ETHER 1 /* Packet in Ethernet format */
#define TRANS_8023 2 /* Packet in 802.3 format */
#define TRANS_AND 0x1000 /* Both Ethernet and 802.3 */
/* The following constants are defined in module MOPDEF.SDL in MOM */
#define MOP_K_CODE_MIN 0
#define MOP_K_CODE_MLT 0 /* Memory Load with transfer address */
#define MOP_K_CODE_DCM 1 /* Dump Complete */
#define MOP_K_CODE_MLD 2 /* Memory Load */
#define MOP_K_CODE_ASV 3 /* Assistance volunteer (NI only */
#define MOP_K_CODE_RMD 4 /* Request memory dump */
#define MOP_K_CODE_RID 5 /* Request ID */
#define MOP_K_CODE_BOT 6 /* Boot */
#define MOP_K_CODE_SID 7 /* System ID */
#define MOP_K_CODE_RPR 8 /* Request program */
#define MOP_K_CODE_RQC 9 /* Request Counters */
#define MOP_K_CODE_RML 10 /* Request memory load */
#define MOP_K_CODE_CNT 11 /* Counters */
#define MOP_K_CODE_RDS 12 /* Request Dump Service */
#define MOP_K_CODE_MMR 12 /* MOP Mode Running */
#define MOP_K_CODE_RVC 13 /* Reserve Console */
#define MOP_K_CODE_MDD 14 /* Memory dump data */
#define MOP_K_CODE_RLC 15 /* Release Console */
#define MOP_K_CODE_CCP 17 /* Console Command and Poll */
#define MOP_K_CODE_CRA 19 /* Console Response and Acknnowledge */
#define MOP_K_CODE_PLT 20 /* Parameter load with transfer address*/
#define MOP_K_CODE_ALD 24 /* Active loop data */
#define MOP_K_CODE_PLD 26 /* Passive looped data */
#define MOP_K_CODE_MAX 26
#define MOP_K_PGTY_MIN 0
#define MOP_K_PGTY_SECLDR 0 /* Secondary Loader */
#define MOP_K_PGTY_TERLDR 1 /* Tertiary Loader */
#define MOP_K_PGTY_OPRSYS 2 /* Operating System */
#define MOP_K_PGTY_MGNTFL 3 /* Management File */
#define MOP_K_PGTY_MAX 3
#define MOP_K_BPTY_MIN 0
#define MOP_K_BPTY_SYS 0 /* System Processor */
#define MOP_K_BPTY_COM 1 /* Communication Processor */
#define MOP_K_BPTY_MAX 1
#define MOP_K_RML_ERROR_MIN 0
#define MOP_K_RML_ERROR_NONE 0 /* None */
#define MOP_K_RML_ERROR_NO_LOAD 1 /* Image data not properly loaded */
#define MOP_K_RML_ERROR_MAX 1
#define MOP_K_PLTP_MIN 0
#define MOP_K_PLTP_END 0 /* End Mark */
#define MOP_K_PLTP_TSN 1 /* Target System Name */
#define MOP_K_PLTP_TSA 2 /* Target System Address */
#define MOP_K_PLTP_HSN 3 /* Host System Name */
#define MOP_K_PLTP_HSA 4 /* Host System Address */
#define MOP_K_PLTP_HST 5 /* Host System Time */
#define MOP_K_PLTP_MAX 5
#define MOP_K_BOT_CNTL_MIN 0
#define MOP_K_BOT_CNTL_SERVER 0 /* Boot-Server */
#define MOP_K_BOT_CNTL_DEVICE 1 /* Boot-Device */
#define MOP_K_BOT_CNTL_MAX 1
#define MOP_K_INFO_VER 1 /* Maintenance Version */
#define MOP_K_INFO_MFCT 2 /* Maintenance Functions */
#define MOP_K_INFO_CNU 3 /* Console User */
#define MOP_K_INFO_RTM 4 /* Reservation Timer */
#define MOP_K_INFO_CSZ 5 /* Console Command Size */
#define MOP_K_INFO_RSZ 6 /* Console Response Size */
#define MOP_K_INFO_HWA 7 /* Hardware Address */
#define MOP_K_INFO_TIME 8 /* System Time */
#define MOP_K_INFO_SOFD 100 /* Communication Device */
#define MOP_K_INFO_SFID 200 /* Software ID */
#define MOP_K_INFO_PRTY 300 /* System Processor */
#define MOP_K_INFO_DLTY 400 /* Data Link Type */
#define MOP_K_INFO_DLBSZ 401 /* Data Link Buffer Size */
#define MOP_K_DLTY_MIN 1
#define MOP_K_DLTY_NI 1 /* Ethernet */
#define MOP_K_DLTY_DDCMP 2 /* DDCMP */
#define MOP_K_DLTY_LAPB 3 /* LAPB (frame level of X.25) */
#define MOP_K_DLTY_MAX 3
#define MOP_K_PRTY_MIN 0
#define MOP_K_PRTY_11 1 /* PDP-11 (UNIBUS) */
#define MOP_K_PRTY_CMSV 2 /* Communication Server */
#define MOP_K_PRTY_PRO 3 /* Professional */
#define MOP_K_PRTY_SCO 4 /* Scorpio */
#define MOP_K_PRTY_AMB 5 /* Amber */
#define MOP_K_PRTY_BRI 6 /* XLII Bridge */
#define MOP_K_PRTY_MAX 6
#define MOP_K_SFID_FORM_MIN -2
#define MOP_K_SFID_FORM_MAINT -2 /* Maintenance System */
#define MOP_K_SFID_FORM_OPRSYS -1 /* Standard Operating System */
#define MOP_K_SFID_FORM_NONE 0 /* None */
#define MOP_K_SFID_FORM_MAX 0
#define MOP_K_SFID_CUST 'CP' /* Customer product */
#define MOP_K_SFID_DEC 'DP' /* DEC product */
#define MOP_K_SFID_DELIM_ID '#' /* Delimiter identifier */
#define MOP_K_DLBSZ_DEFAULT 262 /* Buffersize */
#define MOP_K_NILOOP_REPLY 1 /* Response */
#define MOP_K_NILOOP_FORWARD 2 /* Forward Data */
#define MOP_DL_MULTICAST { 0xab, 0x00, 0x00, 0x01, 0x00, 0x00 }
#define MOP_RC_MULTICAST { 0xab, 0x00, 0x00, 0x02, 0x00, 0x00 }
#define MOP_LP_MULTICAST { 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MOP_K_RPR_FORMAT_V3 1 /* Format Version of RPR */
#define MOP_K_RPR_FORMAT 4 /* Format Version of RPR */
#define IHD_C_MINCODE -1 /* Low bound of ALIAS value */
#define IHD_C_NATIVE -1 /* Native mode image */
#define IHD_C_RSX 0 /* RSX image produced by TKB */
#define IHD_C_BPA 1 /* BASIC plus analog */
#define IHD_C_ALIAS 2 /* Last 126 bytes contains ASCIC of image to activate */
#define IHD_C_CLI 3 /* Image is CLI, run LOGINOUT */
#define IHD_C_PMAX 4 /* PMAX system image */
#define IHD_C_ALPHA 5 /* ALPHA system image */
#define IHD_C_MAXCODE 5 /* High bound of ALIAS value */
#define IHD_W_SIZE 0
#define IHD_W_ACTIVOFF 2
#define IHD_B_HDRBLKCNT 16
#define IHD_W_ALIAS 510
#define ISD_W_PAGCNT 2
#define ISD_V_VPN 4
#define ISD_M_VPN 0x1fffff
#define IHA_L_TFRADR1 0
#define EISD_L_SECSIZE 12
#define EIHD_L_ISDOFF 12
#define EIHD_L_HDRBLKCNT 76
#define L_BSA 0x08 /* RSX base address */
#define L_BLDZ 0x0e /* RSX image size (* 64) */
#define L_BXFR 0xe8 /* RSX transfer address */
#define L_BBLK 0xf0 /* RSX header block count */
#ifndef MOPDEF_SUPRESS_EXTERN
extern char dl_mcst[];
extern char rc_mcst[];
extern char dl_802_proto[];
extern char rc_802_proto[];
extern char lp_802_proto[];
#endif MOPDEF_SUPRESS_EXTERN
#endif _MOPDEF_H_

224
common/nma.c Normal file
View File

@@ -0,0 +1,224 @@
/*
* Copyright (c) 1995 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: nma.c,v 1.5 1995/09/28 13:37:10 moj Exp $";
#endif
#include <stddef.h>
#include "common/nmadef.h"
struct commDev {
int val;
char *sname;
char *name;
};
struct commDev nmaCommDev[] = {
{ NMA_C_SOFD_DP , "DP ", "DP11-DA" },
{ NMA_C_SOFD_UNA, "UNA", "DEUNA" },
{ NMA_C_SOFD_DU , "DU ", "DU11-DA" },
{ NMA_C_SOFD_CNA, "CNA", "DECNA" },
{ NMA_C_SOFD_DL , "DL ", "DL11-C, -E, or -WA" },
{ NMA_C_SOFD_QNA, "QNA", "DEQNA" },
{ NMA_C_SOFD_DQ , "DQ ", "DQ11-DA" },
{ NMA_C_SOFD_CI , "CI ", "Computer Interconnect" },
{ NMA_C_SOFD_DA , "DA ", "DA11-B or -AL" },
{ NMA_C_SOFD_PCL, "PCL", "PCL11-B" },
{ NMA_C_SOFD_DUP, "DUP", "DUP11-DA" },
{ NMA_C_SOFD_LUA, "LUA", "DELUA" },
{ NMA_C_SOFD_DMC, "DMC", "DMC11-DA/AR, -FA/AR, -MA/AL or -MD/AL" },
{ NMA_C_SOFD_LNA, "LNA", "MicroServer Lance" },
{ NMA_C_SOFD_DN , "DN ", "DN11-BA or -AA" },
{ NMA_C_SOFD_DLV, "DLV", "DLV11-E, -F, -J, MXV11-A or -B" },
{ NMA_C_SOFD_LCS, "LCS", "DECServer 100" },
{ NMA_C_SOFD_DMP, "DMP", "DMP11" },
{ NMA_C_SOFD_AMB, "AMB", "AMBER" },
{ NMA_C_SOFD_DTE, "DTE", "DTE20" },
{ NMA_C_SOFD_DBT, "DBT", "DEBET" },
{ NMA_C_SOFD_DV , "DV ", "DV11-AA/BA" },
{ NMA_C_SOFD_BNA, "BNA", "DEBNA" },
{ NMA_C_SOFD_BNT, "BNT", "DEBNT" },
{ NMA_C_SOFD_DZ , "DZ ", "DZ11-A, -B, -C, -D" },
{ NMA_C_SOFD_LPC, "LPC", "PCXX" },
{ NMA_C_SOFD_DSV, "DSV", "DSV11" },
{ NMA_C_SOFD_CEC, "CEC", "3-COM/IBM-PC" },
{ NMA_C_SOFD_KDP, "KDP", "KMC11/DUP11-DA" },
{ NMA_C_SOFD_IEC, "IEC", "Interlan/IBM-PC" },
{ NMA_C_SOFD_KDZ, "KDZ", "KMC11/DZ11-A, -B, -C, or -D" },
{ NMA_C_SOFD_UEC, "UEC", "Univation/RAINBOW-100" },
{ NMA_C_SOFD_KL8, "KL8", "KL8-J" },
{ NMA_C_SOFD_DS2, "DS2", "DECServer 200" },
{ NMA_C_SOFD_DMV, "DMV", "DMV11" },
{ NMA_C_SOFD_DS5, "DS5", "DECServer 500" },
{ NMA_C_SOFD_DPV, "DPV", "DPV11" },
{ NMA_C_SOFD_LQA, "LQA", "DELQA" },
{ NMA_C_SOFD_DMF, "DMF", "DMF32" },
{ NMA_C_SOFD_SVA, "SVA", "DESVA" },
{ NMA_C_SOFD_DMR, "DMR", "DMR11-AA, -AB, -AC, or -AE" },
{ NMA_C_SOFD_MUX, "MUX", "MUXserver" },
{ NMA_C_SOFD_KMY, "KMY", "KMS11-PX" },
{ NMA_C_SOFD_DEP, "DEP", "DEPCA PCSG/IBM-PC" },
{ NMA_C_SOFD_KMX, "KMX", "KMS11-BD/BE" },
{ NMA_C_SOFD_LTM, "LTM", "LTM Ethernet monitor" },
{ NMA_C_SOFD_DMB, "DMB", "DMB-32" },
{ NMA_C_SOFD_DES, "DES", "DESNC" },
{ NMA_C_SOFD_KCP, "KCP", "KCP" },
{ NMA_C_SOFD_MX3, "MX3", "MUXServer 300" },
{ NMA_C_SOFD_SYN, "SYN", "MicroServer" },
{ NMA_C_SOFD_MEB, "MEB", "DEMEB" },
{ NMA_C_SOFD_DSB, "DSB", "DSB32" },
{ NMA_C_SOFD_BAM, "BAM", "DEBAM LANBridge-200" },
{ NMA_C_SOFD_DST, "DST", "DST-32 TEAMmate" },
{ NMA_C_SOFD_FAT, "FAT", "DEFAT" },
{ NMA_C_SOFD_RSM, "RSM", "DERSM - Remote Segment Monitor" },
{ NMA_C_SOFD_RES, "RES", "DERES - Remote Environmental Sensor" },
{ NMA_C_SOFD_3C2, "3C2", "3COM Etherlink II (3C503)" },
{ NMA_C_SOFD_3CM, "3CM", "3COM Etherlink/MC (3C523)" },
{ NMA_C_SOFD_DS3, "DS3", "DECServer 300" },
{ NMA_C_SOFD_MF2, "MF2", "Mayfair-2" },
{ NMA_C_SOFD_MMR, "MMR", "DEMMR" },
{ NMA_C_SOFD_VIT, "VIT", "Vitalink TransLAN III/IV (NP3A) Bridge " },
{ NMA_C_SOFD_VT5, "VT5", "Vitalink TransLAN 350 (NPC25) Bridge " },
{ NMA_C_SOFD_BNI, "BNI", "DEBNI" },
{ NMA_C_SOFD_MNA, "MNA", "DEMNA" },
{ NMA_C_SOFD_PMX, "PMX", "PMAX (KN01)" },
{ NMA_C_SOFD_NI5, "NI5", "Interlan NI5210-8" },
{ NMA_C_SOFD_NI9, "NI9", "Interlan NI9210" },
{ NMA_C_SOFD_KMK, "KMK", "KMS11-K" },
{ NMA_C_SOFD_3CP, "3CP", "3COM Etherlink Plus (3C505) " },
{ NMA_C_SOFD_DP2, "DP2", "DPNserver-200" },
{ NMA_C_SOFD_ISA, "ISA", "SGEC" },
{ NMA_C_SOFD_DIV, "DIV", "DIV-32 DEC WAN controller-100" },
{ NMA_C_SOFD_QTA, "QTA", "DEQTA" },
{ NMA_C_SOFD_B15, "B15", "LANbridge-150" },
{ NMA_C_SOFD_WD8, "WD8", "WD8003 Family" },
{ NMA_C_SOFD_ILA, "ILA", "BICC ISOLAN 4110-2" },
{ NMA_C_SOFD_ILM, "ILM", "BICC ISOLAN 4110-3" },
{ NMA_C_SOFD_APR, "APR", "Apricot Xen-S and Qi" },
{ NMA_C_SOFD_ASN, "ASN", "AST EtherNode" },
{ NMA_C_SOFD_ASE, "ASE", "AST Ethernet" },
{ NMA_C_SOFD_TRW, "TRW", "TRW HC-2001" },
{ NMA_C_SOFD_EDX, "EDX", "Ethernet-XT/AT" },
{ NMA_C_SOFD_EDA, "EDA", "Ethernet-AT" },
{ NMA_C_SOFD_DR2, "DR2", "DECrouter-250" },
{ NMA_C_SOFD_SCC, "SCC", "DECrouter-250 DUSCC" },
{ NMA_C_SOFD_DCA, "DCA", "DCA Series 300" },
{ NMA_C_SOFD_TIA, "TIA", "LANcard/E" },
{ NMA_C_SOFD_FBN, "FBN", "DEFEB DECbridge-500" },
{ NMA_C_SOFD_FEB, "FEB", "DEFEB DECbridge-500 FDDI" },
{ NMA_C_SOFD_FCN, "FCN", "DEFCN DECconcentrator-500" },
{ NMA_C_SOFD_MFA, "MFA", "DEMFA" },
{ NMA_C_SOFD_MXE, "MXE", "MIPS workstation family" },
{ NMA_C_SOFD_CED, "CED", "Cabletron Ethernet Desktop" },
{ NMA_C_SOFD_C20, "C20", "3Com CS/200" },
{ NMA_C_SOFD_CS1, "CS1", "3Com CS/1" },
{ NMA_C_SOFD_C2M, "C2M", "3Com CS/210, CS/2000, CS/2100" },
{ NMA_C_SOFD_ACA, "ACA", "ACA/32000 system" },
{ NMA_C_SOFD_GSM, "GSM", "Gandalf StarMaster" },
{ NMA_C_SOFD_DSF, "DSF", "DSF32" },
{ NMA_C_SOFD_CS5, "CS5", "3Com CS/50" },
{ NMA_C_SOFD_XIR, "XIR", "XIRCOM PE10B2" },
{ NMA_C_SOFD_KFE, "KFE", "KFE52" },
{ NMA_C_SOFD_RT3, "RT3", "rtVAX-300" },
{ NMA_C_SOFD_SPI, "SPI", "Spiderport M250" },
{ NMA_C_SOFD_FOR, "FOR", "LAT gateway" },
{ NMA_C_SOFD_MER, "MER", "Meridian" },
{ NMA_C_SOFD_PER, "PER", "Persoft" },
{ NMA_C_SOFD_STR, "STR", "AT&T StarLan-10" },
{ NMA_C_SOFD_MPS, "MPS", "MIPSfair" },
{ NMA_C_SOFD_L20, "L20", "LPS20 print server" },
{ NMA_C_SOFD_VT2, "VT2", "Vitalink TransLAN 320 Bridge" },
{ NMA_C_SOFD_DWT, "DWT", "VT-1000" },
{ NMA_C_SOFD_WGB, "WGB", "DEWGB" },
{ NMA_C_SOFD_ZEN, "ZEN", "Zenith Z-LAN4000, Z-LAN" },
{ NMA_C_SOFD_TSS, "TSS", "Thursby Software Systems" },
{ NMA_C_SOFD_MNE, "MNE", "3MIN (KN02-BA)" },
{ NMA_C_SOFD_FZA, "FZA", "DEFZA" },
{ NMA_C_SOFD_90L, "90L", "DS90L" },
{ NMA_C_SOFD_CIS, "CIS", "Cisco Systems" },
{ NMA_C_SOFD_STC, "STC", "STRTC" },
{ NMA_C_SOFD_UBE, "UBE", "Ungermann-Bass PC2030, PC3030" },
{ NMA_C_SOFD_DW2, "DW2", "DECwindows terminal II" },
{ NMA_C_SOFD_FUE, "FUE", "Fujitsu Etherstar MB86950" },
{ NMA_C_SOFD_M38, "M38", "MUXServer 380" },
{ NMA_C_SOFD_NTI, "NTI", "NTI Group PC Ethernet Card" },
{ NMA_C_SOFD_RAD, "RAD", "RADLINX LAN Gateway" },
{ NMA_C_SOFD_INF, "INF", "Infotron Commix" },
{ NMA_C_SOFD_XMX, "XMX", "Xyplex MAXserver" },
{ NMA_C_SOFD_NDI, "NDI", "NDIS data link driver for MS/DOS systems" },
{ NMA_C_SOFD_ND2, "ND2", "NDIS data link driver for OS/2 systems" },
{ NMA_C_SOFD_TRN, "TRN", "DEC LANcontroller 520" },
{ NMA_C_SOFD_DEV, "DEV", "Develcon Electronics Ltd. LAT gateway" },
{ NMA_C_SOFD_ACE, "ACE", "Acer 5220, 5270 adapter" },
{ NMA_C_SOFD_PNT, "PNT", "ProNet-4/18 #1390" },
{ NMA_C_SOFD_ISE, "ISE", "Network Integration Server 600" },
{ NMA_C_SOFD_IST, "IST", "Network Integration Server 600 T1" },
{ NMA_C_SOFD_ISH, "ISH", "Network Integration Server 64 kb HDLC" },
{ NMA_C_SOFD_ISF, "ISF", "Network Integration Server 600 FDDI" },
{ NMA_C_SOFD_DSW, "DSW", "DSW-21" },
{ NMA_C_SOFD_DW4, "DW4", "DSW-41/42" },
{ NMA_C_SOFD_TRA, "TRA", "DETRA-AA" },
{ 0, 0, 0 },
};
char *
nmaGetShort(devno)
int devno;
{
struct commDev *current;
current = nmaCommDev;
while (current->sname != NULL) {
if (current->val == devno)
break;
current++;
}
return(current->sname);
}
char *
nmaGetDevice(devno)
int devno;
{
struct commDev *current;
current = nmaCommDev;
while (current->name != NULL) {
if (current->val == devno)
break;
current++;
}
return(current->name);
}

46
common/nma.h Normal file
View File

@@ -0,0 +1,46 @@
/*
* Copyright (c) 1995 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: nma.h,v 1.3 1995/09/28 13:36:55 moj Exp $
*
*/
#ifndef _NMA_H_
#define _NMA_H_
#ifdef NO__P
char *nmaGetShort (/* int */);
char *nmaGetDevice (/* int */);
#else
__BEGIN_DECLS
char *nmaGetShort __P((int));
char *nmaGetDevice __P((int));
__END_DECLS
#endif
#endif _NMA_H_

181
common/nmadef.h Normal file
View File

@@ -0,0 +1,181 @@
/*
* Copyright (c) 1995 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: nmadef.h,v 1.1 1995/07/10 20:06:06 moj Exp $
*
*/
#ifndef _NMADEF_H_
#define _NMADEF_H_
#define NMA_C_SOFD_DP 0 /* DP11-DA */
#define NMA_C_SOFD_UNA 1 /* DEUNA */
#define NMA_C_SOFD_DU 2 /* DU11-DA */
#define NMA_C_SOFD_CNA 3 /* DECNA */
#define NMA_C_SOFD_DL 4 /* DL11-C, -E, or -WA */
#define NMA_C_SOFD_QNA 5 /* DEQNA */
#define NMA_C_SOFD_DQ 6 /* DQ11-DA */
#define NMA_C_SOFD_CI 7 /* Computer Interconnect */
#define NMA_C_SOFD_DA 8 /* DA11-B or -AL */
#define NMA_C_SOFD_PCL 9 /* PCL11-B */
#define NMA_C_SOFD_DUP 10 /* DUP11-DA */
#define NMA_C_SOFD_LUA 11 /* DELUA */
#define NMA_C_SOFD_DMC 12 /* DMC11-DA/AR, -FA/AR, -MA/AL or -MD/AL */
#define NMA_C_SOFD_LNA 13 /* MicroServer Lance */
#define NMA_C_SOFD_DN 14 /* DN11-BA or -AA */
#define NMA_C_SOFD_DLV 16 /* DLV11-E, -F, -J, MXV11-A or -B */
#define NMA_C_SOFD_LCS 17 /* DECServer 100 */
#define NMA_C_SOFD_DMP 18 /* DMP11 */
#define NMA_C_SOFD_AMB 19 /* AMBER */
#define NMA_C_SOFD_DTE 20 /* DTE20 */
#define NMA_C_SOFD_DBT 21 /* DEBET */
#define NMA_C_SOFD_DV 22 /* DV11-AA/BA */
#define NMA_C_SOFD_BNA 23 /* DEBNA */
#define NMA_C_SOFD_BNT 23 /* DEBNT */
#define NMA_C_SOFD_DZ 24 /* DZ11-A, -B, -C, -D */
#define NMA_C_SOFD_LPC 25 /* PCXX */
#define NMA_C_SOFD_DSV 26 /* DSV11 */
#define NMA_C_SOFD_CEC 27 /* 3-COM/IBM-PC */
#define NMA_C_SOFD_KDP 28 /* KMC11/DUP11-DA */
#define NMA_C_SOFD_IEC 29 /* Interlan/IBM-PC */
#define NMA_C_SOFD_KDZ 30 /* KMC11/DZ11-A, -B, -C, or -D */
#define NMA_C_SOFD_UEC 31 /* Univation/RAINBOW-100 */
#define NMA_C_SOFD_KL8 32 /* KL8-J */
#define NMA_C_SOFD_DS2 33 /* DECServer 200 */
#define NMA_C_SOFD_DMV 34 /* DMV11 */
#define NMA_C_SOFD_DS5 35 /* DECServer 500 */
#define NMA_C_SOFD_DPV 36 /* DPV11 */
#define NMA_C_SOFD_LQA 37 /* DELQA */
#define NMA_C_SOFD_DMF 38 /* DMF32 */
#define NMA_C_SOFD_SVA 39 /* DESVA */
#define NMA_C_SOFD_DMR 40 /* DMR11-AA, -AB, -AC, or -AE */
#define NMA_C_SOFD_MUX 41 /* MUXserver */
#define NMA_C_SOFD_KMY 42 /* KMS11-PX */
#define NMA_C_SOFD_DEP 43 /* DEPCA PCSG/IBM-PC */
#define NMA_C_SOFD_KMX 44 /* KMS11-BD/BE */
#define NMA_C_SOFD_LTM 45 /* LTM Ethernet monitor */
#define NMA_C_SOFD_DMB 46 /* DMB-32 */
#define NMA_C_SOFD_DES 47 /* DESNC */
#define NMA_C_SOFD_KCP 48 /* KCP */
#define NMA_C_SOFD_MX3 49 /* MUXServer 300 */
#define NMA_C_SOFD_SYN 50 /* MicroServer */
#define NMA_C_SOFD_MEB 51 /* DEMEB */
#define NMA_C_SOFD_DSB 52 /* DSB32 */
#define NMA_C_SOFD_BAM 53 /* DEBAM LANBridge-200 */
#define NMA_C_SOFD_DST 54 /* DST-32 TEAMmate */
#define NMA_C_SOFD_FAT 55 /* DEFAT */
#define NMA_C_SOFD_RSM 56 /* DERSM - Remote Segment Monitor */
#define NMA_C_SOFD_RES 57 /* DERES - Remote Environmental Sensor */
#define NMA_C_SOFD_3C2 58 /* 3COM Etherlink II (3C503) */
#define NMA_C_SOFD_3CM 59 /* 3COM Etherlink/MC (3C523) */
#define NMA_C_SOFD_DS3 60 /* DECServer 300 */
#define NMA_C_SOFD_MF2 61 /* Mayfair-2 */
#define NMA_C_SOFD_MMR 62 /* DEMMR */
#define NMA_C_SOFD_VIT 63 /* Vitalink TransLAN III/IV (NP3A) Bridge */
#define NMA_C_SOFD_VT5 64 /* Vitalink TransLAN 350 (NPC25) Bridge */
#define NMA_C_SOFD_BNI 65 /* DEBNI */
#define NMA_C_SOFD_MNA 66 /* DEMNA */
#define NMA_C_SOFD_PMX 67 /* PMAX (KN01) */
#define NMA_C_SOFD_NI5 68 /* Interlan NI5210-8 */
#define NMA_C_SOFD_NI9 69 /* Interlan NI9210 */
#define NMA_C_SOFD_KMK 70 /* KMS11-K */
#define NMA_C_SOFD_3CP 71 /* 3COM Etherlink Plus (3C505) */
#define NMA_C_SOFD_DP2 72 /* DPNserver-200 */
#define NMA_C_SOFD_ISA 73 /* SGEC */
#define NMA_C_SOFD_DIV 74 /* DIV-32 DEC WAN controller-100 */
#define NMA_C_SOFD_QTA 75 /* DEQTA */
#define NMA_C_SOFD_B15 76 /* LANbridge-150 */
#define NMA_C_SOFD_WD8 77 /* WD8003 Family */
#define NMA_C_SOFD_ILA 78 /* BICC ISOLAN 4110-2 */
#define NMA_C_SOFD_ILM 79 /* BICC ISOLAN 4110-3 */
#define NMA_C_SOFD_APR 80 /* Apricot Xen-S and Qi */
#define NMA_C_SOFD_ASN 81 /* AST EtherNode */
#define NMA_C_SOFD_ASE 82 /* AST Ethernet */
#define NMA_C_SOFD_TRW 83 /* TRW HC-2001 */
#define NMA_C_SOFD_EDX 84 /* Ethernet-XT/AT */
#define NMA_C_SOFD_EDA 85 /* Ethernet-AT */
#define NMA_C_SOFD_DR2 86 /* DECrouter-250 */
#define NMA_C_SOFD_SCC 87 /* DECrouter-250 DUSCC */
#define NMA_C_SOFD_DCA 88 /* DCA Series 300 */
#define NMA_C_SOFD_TIA 89 /* LANcard/E */
#define NMA_C_SOFD_FBN 90 /* DEFEB DECbridge-500 */
#define NMA_C_SOFD_FEB 91 /* DEFEB DECbridge-500 FDDI */
#define NMA_C_SOFD_FCN 92 /* DEFCN DECconcentrator-500 */
#define NMA_C_SOFD_MFA 93 /* DEMFA */
#define NMA_C_SOFD_MXE 94 /* MIPS workstation family */
#define NMA_C_SOFD_CED 95 /* Cabletron Ethernet Desktop */
#define NMA_C_SOFD_C20 96 /* 3Com CS/200 */
#define NMA_C_SOFD_CS1 97 /* 3Com CS/1 */
#define NMA_C_SOFD_C2M 98 /* 3Com CS/210, CS/2000, CS/2100 */
#define NMA_C_SOFD_ACA 99 /* ACA/32000 system */
#define NMA_C_SOFD_GSM 100 /* Gandalf StarMaster */
#define NMA_C_SOFD_DSF 101 /* DSF32 */
#define NMA_C_SOFD_CS5 102 /* 3Com CS/50 */
#define NMA_C_SOFD_XIR 103 /* XIRCOM PE10B2 */
#define NMA_C_SOFD_KFE 104 /* KFE52 */
#define NMA_C_SOFD_RT3 105 /* rtVAX-300 */
#define NMA_C_SOFD_SPI 106 /* Spiderport M250 */
#define NMA_C_SOFD_FOR 107 /* LAT gateway */
#define NMA_C_SOFD_MER 108 /* Meridian */
#define NMA_C_SOFD_PER 109 /* Persoft */
#define NMA_C_SOFD_STR 110 /* AT&T StarLan-10 */
#define NMA_C_SOFD_MPS 111 /* MIPSfair */
#define NMA_C_SOFD_L20 112 /* LPS20 print server */
#define NMA_C_SOFD_VT2 113 /* Vitalink TransLAN 320 Bridge */
#define NMA_C_SOFD_DWT 114 /* VT-1000 */
#define NMA_C_SOFD_WGB 115 /* DEWGB */
#define NMA_C_SOFD_ZEN 116 /* Zenith Z-LAN4000, Z-LAN */
#define NMA_C_SOFD_TSS 117 /* Thursby Software Systems */
#define NMA_C_SOFD_MNE 118 /* 3MIN (KN02-BA) */
#define NMA_C_SOFD_FZA 119 /* DEFZA */
#define NMA_C_SOFD_90L 120 /* DS90L */
#define NMA_C_SOFD_CIS 121 /* Cisco Systems */
#define NMA_C_SOFD_STC 122 /* STRTC */
#define NMA_C_SOFD_UBE 123 /* Ungermann-Bass PC2030, PC3030 */
#define NMA_C_SOFD_DW2 124 /* DECwindows terminal II */
#define NMA_C_SOFD_FUE 125 /* Fujitsu Etherstar MB86950 */
#define NMA_C_SOFD_M38 126 /* MUXServer 380 */
#define NMA_C_SOFD_NTI 127 /* NTI Group PC Ethernet Card */
#define NMA_C_SOFD_RAD 130 /* RADLINX LAN Gateway */
#define NMA_C_SOFD_INF 131 /* Infotron Commix */
#define NMA_C_SOFD_XMX 132 /* Xyplex MAXserver */
#define NMA_C_SOFD_NDI 133 /* NDIS data link driver for MS/DOS systems */
#define NMA_C_SOFD_ND2 134 /* NDIS data link driver for OS/2 systems */
#define NMA_C_SOFD_TRN 135 /* DEC LANcontroller 520 */
#define NMA_C_SOFD_DEV 136 /* Develcon Electronics Ltd. LAT gateway */
#define NMA_C_SOFD_ACE 137 /* Acer 5220, 5270 adapter */
#define NMA_C_SOFD_PNT 138 /* ProNet-4/18 #1390 */
#define NMA_C_SOFD_ISE 139 /* Network Integration Server 600 */
#define NMA_C_SOFD_IST 140 /* Network Integration Server 600 T1 */
#define NMA_C_SOFD_ISH 141 /* Network Integration Server 64 kb HDLC */
#define NMA_C_SOFD_ISF 142 /* Network Integration Server 600 FDDI */
#define NMA_C_SOFD_DSW 149 /* DSW-21 */
#define NMA_C_SOFD_DW4 150 /* DSW-41/42 */
#define NMA_C_SOFD_TRA 175 /* DETRA-AA */
#endif _NMADEF_H_

57
common/os.h Normal file
View File

@@ -0,0 +1,57 @@
/*
* Copyright (c) 1994-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: os.h,v 1.5 1995/08/05 18:53:37 moj Exp $
*
*/
#ifndef _OS_H_
#define _OS_H_
#include <stdio.h>
#include <syslog.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <sys/socket.h>
#include <net/if.h>
#include <net/if_dl.h>
#include <net/if_types.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
#include <fcntl.h>
#include <strings.h>
#include <unistd.h>
#define DEV_NEW_CONF
#endif _OS_H_

279
common/pf.c Normal file
View File

@@ -0,0 +1,279 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* This code is partly derived from rarpd.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: pf.c,v 1.16 1996/08/06 14:19:48 moj Exp $";
#endif
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/file.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <net/if.h>
#include <net/bpf.h>
#include <sys/errno.h>
#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <netdb.h>
#include <ctype.h>
#include <strings.h>
#include <syslog.h>
#include <varargs.h>
#include "common/mopdef.h"
/*
* Variables
*/
extern int errno;
extern int promisc;
/*
* Return information to device.c how to open device.
* In this case the driver can handle both Ethernet type II and
* IEEE 802.3 frames (SNAP) in a single pfOpen.
*/
int
pfTrans(interface)
char *interface;
{
return TRANS_ETHER+TRANS_8023+TRANS_AND;
}
/*
* Open and initialize packet filter.
*/
int
pfInit(interface, mode, protocol, typ)
char *interface;
u_short protocol;
int typ, mode;
{
int fd;
int n = 0;
char device[sizeof "/dev/bpf000"];
struct ifreq ifr;
u_int dlt;
int immediate;
static struct bpf_insn insns[] = {
BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12),
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x4711, 4, 0),
BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20),
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x4711, 0, 3),
BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 14),
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0xaaaa, 0, 1),
BPF_STMT(BPF_RET | BPF_K, 1520),
BPF_STMT(BPF_RET | BPF_K, 0),
};
static struct bpf_program filter = {
sizeof insns / sizeof(insns[0]),
insns
};
/* Go through all the minors and find one that isn't in use. */
do {
(void) sprintf(device, "/dev/bpf%d", n++);
fd = open(device, mode);
} while (fd < 0 && errno == EBUSY);
if (fd < 0) {
syslog(LOG_ERR,"pfInit: open bpf %m");
return(-1);
}
/* Set immediate mode so packets are processed as they arrive. */
immediate = 1;
if (ioctl(fd, BIOCIMMEDIATE, &immediate) < 0) {
syslog(LOG_ERR,"pfInit: BIOCIMMEDIATE: %m");
return(-1);
}
(void) strncpy(ifr.ifr_name, interface, sizeof ifr.ifr_name);
if (ioctl(fd, BIOCSETIF, (caddr_t) & ifr) < 0) {
syslog(LOG_ERR,"pfInit: BIOCSETIF: %m");
return(-1);
}
/* Check that the data link layer is an Ethernet; this code won't work
* with anything else. */
if (ioctl(fd, BIOCGDLT, (caddr_t) & dlt) < 0) {
syslog(LOG_ERR,"pfInit: BIOCGDLT: %m");
return(-1);
}
if (dlt != DLT_EN10MB) {
syslog(LOG_ERR,"pfInit: %s is not ethernet", device);
return(-1);
}
if (promisc) {
/* Set promiscuous mode. */
if (ioctl(fd, BIOCPROMISC, (caddr_t)0) < 0) {
syslog(LOG_ERR,"pfInit: BIOCPROMISC: %m");
return(-1);
}
}
/* Set filter program. */
insns[1].k = protocol;
insns[3].k = protocol;
if (ioctl(fd, BIOCSETF, (caddr_t) & filter) < 0) {
syslog(LOG_ERR,"pfInit: BIOCSETF: %m");
return(-1);
}
return(fd);
}
/*
* Add a Multicast address to the interface
*/
int
pfAddMulti(s, interface, addr)
int s;
char *interface, *addr;
{
struct ifreq ifr;
int fd;
strcpy(ifr.ifr_name, interface);
ifr.ifr_addr.sa_family = AF_UNSPEC;
bcopy(addr, ifr.ifr_addr.sa_data, 6);
/*
* open a socket, temporarily, to use for SIOC* ioctls
*
*/
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
syslog(LOG_ERR, "pfAddMulti: socket: %m");
return(-1);
}
if (ioctl(fd, SIOCADDMULTI, (caddr_t)&ifr) < 0) {
syslog(LOG_ERR, "pfAddMulti: SIOCADDMULTI: %m");
close(fd);
return(-1);
}
close(fd);
return(0);
}
/*
* Delete a Multicast address from the interface
*/
int
pfDelMulti(s, interface, addr)
int s;
char *interface, *addr;
{
struct ifreq ifr;
int fd;
strcpy(ifr.ifr_name, interface);
ifr.ifr_addr.sa_family = AF_UNSPEC;
bcopy(addr, ifr.ifr_addr.sa_data, 6);
/*
* open a socket, temporarily, to use for SIOC* ioctls
*
*/
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
syslog(LOG_ERR, "pfDelMulti: socket: %m");
return(-1);
}
if (ioctl(fd, SIOCDELMULTI, (caddr_t)&ifr) < 0) {
syslog(LOG_ERR, "pfAddMulti: SIOCDELMULTI: %m");
close(fd);
return(-1);
}
close(fd);
return(0);
}
/*
* read a packet
*/
int
pfRead(fd, buf, len)
int fd, len;
u_char *buf;
{
return(read(fd, buf, len));
}
/*
* write a packet
*/
int
pfWrite(fd, buf, len, trans)
int fd, len, trans;
u_char *buf;
{
struct iovec iov[2];
switch (trans) {
case TRANS_8023:
iov[0].iov_base = (caddr_t)buf;
iov[0].iov_len = 22;
iov[1].iov_base = (caddr_t)buf+22;
iov[1].iov_len = len-22;
break;
default:
iov[0].iov_base = (caddr_t)buf;
iov[0].iov_len = 14;
iov[1].iov_base = (caddr_t)buf+14;
iov[1].iov_len = len-14;
break;
}
if (writev(fd, iov, 2) == len)
return(len);
return(-1);
}

56
common/pf.h Normal file
View File

@@ -0,0 +1,56 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: pf.h,v 1.4 1995/10/13 19:30:46 moj Exp $
*
*/
#ifndef _PF_H_
#define _PF_H_
#ifdef NO__P
int pfTrans (/* char * */);
int pfInit (/* char *, int, u_short, int */);
int pfEthAddr (/* int, u_char * */);
int pfAddMulti (/* int, char *, char * */);
int pfDelMulti (/* int, char *, char * */);
int pfRead (/* int, u_char *, int */);
int pfWrite (/* int, u_char *, int, int */);
#else
__BEGIN_DECLS
int pfTrans __P((char *));
int pfInit __P((char *, int, u_short, int));
int pfEthAddr __P((int, u_char *));
int pfAddMulti __P((int, char *, char *));
int pfDelMulti __P((int, char *, char *));
int pfRead __P((int, u_char *, int));
int pfWrite __P((int, u_char *, int, int));
__END_DECLS
#endif
#endif _PF_H_

703
common/print.c Normal file
View File

@@ -0,0 +1,703 @@
/*
* Copyright (c) 1993-96 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: print.c,v 1.18 1996/08/16 22:42:08 moj Exp $";
#endif
#include <sys/types.h>
#include <stdio.h>
#include "os.h"
#include "common/mopdef.h"
#include "common/nmadef.h"
#include "common/nma.h"
#include "common/cmp.h"
#include "common/get.h"
#define SHORT_PRINT
void
mopPrintHWA(fd, ap)
FILE *fd;
u_char *ap;
{
(void)fprintf(fd, "%x:%x:%x:%x:%x:%x",
ap[0],ap[1],ap[2],ap[3],ap[4],ap[5]);
if (ap[0] < 10) (void)fprintf(fd, " ");
if (ap[1] < 10) (void)fprintf(fd, " ");
if (ap[2] < 10) (void)fprintf(fd, " ");
if (ap[3] < 10) (void)fprintf(fd, " ");
if (ap[4] < 10) (void)fprintf(fd, " ");
if (ap[5] < 10) (void)fprintf(fd, " ");
}
void
mopPrintBPTY(fd, bpty)
FILE *fd;
u_char bpty;
{
switch(bpty) {
case MOP_K_BPTY_SYS:
(void)fprintf(fd, "System Processor");
break;
case MOP_K_BPTY_COM:
(void)fprintf(fd, "Communication Processor");
break;
default:
(void)fprintf(fd, "Unknown");
break;
};
};
void
mopPrintPGTY(fd, pgty)
FILE *fd;
u_char pgty;
{
switch(pgty) {
case MOP_K_PGTY_SECLDR:
(void)fprintf(fd, "Secondary Loader");
break;
case MOP_K_PGTY_TERLDR:
(void)fprintf(fd, "Tertiary Loader");
break;
case MOP_K_PGTY_OPRSYS:
(void)fprintf(fd, "Operating System");
break;
case MOP_K_PGTY_MGNTFL:
(void)fprintf(fd, "Management File");
break;
default:
(void)fprintf(fd, "Unknown");
break;
};
}
void
mopPrintOneline(fd, pkt, trans)
FILE *fd;
u_char *pkt;
int trans;
{
int index = 0;
u_char *dst, *src, code;
u_short proto;
int len;
trans = mopGetTrans(pkt, trans);
mopGetHeader(pkt, &index, &dst, &src, &proto, &len, trans);
code = mopGetChar(pkt, &index);
switch (proto) {
case MOP_K_PROTO_DL:
(void)fprintf(fd, "MOP DL ");
break;
case MOP_K_PROTO_RC:
(void)fprintf(fd, "MOP RC ");
break;
case MOP_K_PROTO_LP:
(void)fprintf(fd, "MOP LP ");
break;
default:
switch((proto % 256)*256 + (proto / 256)) {
case MOP_K_PROTO_DL:
(void)fprintf(fd, "MOP DL ");
proto = MOP_K_PROTO_DL;
break;
case MOP_K_PROTO_RC:
(void)fprintf(fd, "MOP RC ");
proto = MOP_K_PROTO_RC;
break;
case MOP_K_PROTO_LP:
(void)fprintf(fd, "MOP LP ");
proto = MOP_K_PROTO_LP;
break;
default:
(void)fprintf(fd, "MOP ?? ");
break;
}
}
if (trans == TRANS_8023) {
(void)fprintf(fd, "802.3 ");
}
mopPrintHWA(fd, src); (void)fprintf(fd," > ");
mopPrintHWA(fd, dst);
if (len < 1600) {
(void)fprintf(fd, " len %4d code %02x ",len,code);
} else {
(void)fprintf(fd, " len %4d code %02x ",
(len % 256)*256 + (len /256), code);
}
switch (proto) {
case MOP_K_PROTO_DL:
switch (code) {
case MOP_K_CODE_MLT:
(void)fprintf(fd, "MLT ");
break;
case MOP_K_CODE_DCM:
(void)fprintf(fd, "DCM ");
break;
case MOP_K_CODE_MLD:
(void)fprintf(fd, "MLD ");
break;
case MOP_K_CODE_ASV:
(void)fprintf(fd, "ASV ");
break;
case MOP_K_CODE_RMD:
(void)fprintf(fd, "RMD ");
break;
case MOP_K_CODE_RPR:
(void)fprintf(fd, "RPR ");
break;
case MOP_K_CODE_RML:
(void)fprintf(fd, "RML ");
break;
case MOP_K_CODE_RDS:
(void)fprintf(fd, "RDS ");
break;
case MOP_K_CODE_MDD:
(void)fprintf(fd, "MDD ");
break;
case MOP_K_CODE_PLT:
(void)fprintf(fd, "PLT ");
break;
default:
(void)fprintf(fd, "??? ");
break;
}
break;
case MOP_K_PROTO_RC:
switch (code) {
case MOP_K_CODE_RID:
(void)fprintf(fd, "RID ");
break;
case MOP_K_CODE_BOT:
(void)fprintf(fd, "BOT ");
break;
case MOP_K_CODE_SID:
(void)fprintf(fd, "SID ");
break;
case MOP_K_CODE_RQC:
(void)fprintf(fd, "RQC ");
break;
case MOP_K_CODE_CNT:
(void)fprintf(fd, "CNT ");
break;
case MOP_K_CODE_RVC:
(void)fprintf(fd, "RVC ");
break;
case MOP_K_CODE_RLC:
(void)fprintf(fd, "RLC ");
break;
case MOP_K_CODE_CCP:
(void)fprintf(fd, "CCP ");
break;
case MOP_K_CODE_CRA:
(void)fprintf(fd, "CRA ");
break;
default:
(void)fprintf(fd, "??? ");
break;
}
break;
case MOP_K_PROTO_LP:
switch (code) {
case MOP_K_CODE_ALD:
(void)fprintf(fd, "ALD ");
break;
case MOP_K_CODE_PLD:
(void)fprintf(fd, "PLD ");
break;
default:
(void)fprintf(fd, "??? ");
break;
}
break;
default:
(void)fprintf(fd, "??? ");
break;
}
(void)fprintf(fd, "\n");
}
void
mopPrintHeader(fd, pkt, trans)
FILE *fd;
u_char *pkt;
int trans;
{
u_char *dst, *src;
u_short proto;
int len, index = 0;
trans = mopGetTrans(pkt, trans);
mopGetHeader(pkt, &index, &dst, &src, &proto, &len, trans);
(void)fprintf(fd,"\nDst : ");
mopPrintHWA(fd, dst);
if (mopCmpEAddr(dl_mcst,dst) == 0) {
(void)fprintf(fd," MOP Dump/Load Multicast");
};
if (mopCmpEAddr(rc_mcst,dst) == 0) {
(void)fprintf(fd," MOP Remote Console Multicast");
};
(void)fprintf(fd,"\n");
(void)fprintf(fd,"Src : ");
mopPrintHWA(fd, src);
(void)fprintf(fd,"\n");
(void)fprintf(fd,"Proto : %04x ",proto);
switch (proto) {
case MOP_K_PROTO_DL:
switch (trans) {
case TRANS_8023:
(void)fprintf(fd, "MOP Dump/Load (802.3)\n");
break;
default:
(void)fprintf(fd, "MOP Dump/Load\n");
}
break;
case MOP_K_PROTO_RC:
switch (trans) {
case TRANS_8023:
(void)fprintf(fd, "MOP Remote Console (802.3)\n");
break;
default:
(void)fprintf(fd, "MOP Remote Console\n");
}
break;
case MOP_K_PROTO_LP:
switch (trans) {
case TRANS_8023:
(void)fprintf(fd, "MOP Loopback (802.3)\n");
break;
default:
(void)fprintf(fd, "MOP Loopback\n");
}
break;
default:
(void)fprintf(fd, "\n");
break;
}
(void)fprintf(fd,"Length : %04x (%d)\n",len,len);
}
void
mopPrintMopHeader(fd, pkt, trans)
FILE *fd;
u_char *pkt;
int trans;
{
u_char *dst, *src;
u_short proto;
int len, index = 0;
u_char code;
trans = mopGetTrans(pkt, trans);
mopGetHeader(pkt, &index, &dst, &src, &proto, &len, trans);
code = mopGetChar(pkt, &index);
(void)fprintf(fd, "Code : %02x ",code);
switch (proto) {
case MOP_K_PROTO_DL:
switch (code) {
case MOP_K_CODE_MLT:
(void)fprintf(fd,
"Memory Load with transfer address\n");
break;
case MOP_K_CODE_DCM:
(void)fprintf(fd, "Dump Complete\n");
break;
case MOP_K_CODE_MLD:
(void)fprintf(fd, "Memory Load\n");
break;
case MOP_K_CODE_ASV:
(void)fprintf(fd, "Assistance volunteer\n");
break;
case MOP_K_CODE_RMD:
(void)fprintf(fd, "Request memory dump\n");
break;
case MOP_K_CODE_RPR:
(void)fprintf(fd, "Request program\n");
break;
case MOP_K_CODE_RML:
(void)fprintf(fd, "Request memory load\n");
break;
case MOP_K_CODE_RDS:
(void)fprintf(fd, "Request Dump Service\n");
break;
case MOP_K_CODE_MDD:
(void)fprintf(fd, "Memory dump data\n");
break;
case MOP_K_CODE_PLT:
(void)fprintf(fd,
"Parameter load with transfer addres\n");
break;
default:
(void)fprintf(fd, "(unknown)\n");
break;
}
break;
case MOP_K_PROTO_RC:
switch (code) {
case MOP_K_CODE_RID:
(void)fprintf(fd, "Request ID\n");
break;
case MOP_K_CODE_BOT:
(void)fprintf(fd, "Boot\n");
break;
case MOP_K_CODE_SID:
(void)fprintf(fd, "System ID\n");
break;
case MOP_K_CODE_RQC:
(void)fprintf(fd, "Request Counters\n");
break;
case MOP_K_CODE_CNT:
(void)fprintf(fd, "Counters\n");
break;
case MOP_K_CODE_RVC:
(void)fprintf(fd, "Reserve Console\n");
break;
case MOP_K_CODE_RLC:
(void)fprintf(fd, "Release Console\n");
break;
case MOP_K_CODE_CCP:
(void)fprintf(fd, "Console Command and Poll\n");
break;
case MOP_K_CODE_CRA:
(void)fprintf(fd,
"Console Response and Acknnowledge\n");
break;
default:
(void)fprintf(fd, "(unknown)\n");
break;
}
break;
case MOP_K_PROTO_LP:
switch (code) {
case MOP_K_CODE_ALD:
(void)fprintf(fd, "Active loop data\n");
break;
case MOP_K_CODE_PLD:
(void)fprintf(fd, "Passive looped data\n");
break;
default:
(void)fprintf(fd, "(unknown)\n");
break;
}
break;
default:
(void)fprintf(fd, "(unknown)\n");
break;
}
}
void
mopPrintDevice(fd, device)
FILE *fd;
u_char device;
{
char *sname, *name;
sname = nmaGetShort((int) device);
name = nmaGetDevice((int) device);
(void)fprintf(fd, "%s '%s'",sname,name);
}
void
mopPrintTime(fd, ap)
FILE *fd;
u_char *ap;
{
(void)fprintf(fd,
"%04d-%02d-%02d %02d:%02d:%02d.%02d %d:%02d",
ap[0]*100 + ap[1],
ap[2],ap[3],ap[4],ap[5],ap[6],ap[7],ap[8],ap[9]);
}
void
mopPrintInfo(fd, pkt, index, moplen, mopcode, trans)
FILE *fd;
u_char *pkt, mopcode;
int *index, trans;
u_short moplen;
{
u_short itype,tmps;
u_char ilen ,tmpc,device;
u_char uc1,uc2,uc3,*ucp;
int i;
device = 0;
switch(trans) {
case TRANS_ETHER:
moplen = moplen + 16;
break;
case TRANS_8023:
moplen = moplen + 14;
break;
}
itype = mopGetShort(pkt,index);
while (*index < (int)(moplen + 2)) {
ilen = mopGetChar(pkt,index);
switch (itype) {
case 0:
tmpc = mopGetChar(pkt,index);
*index = *index + tmpc;
break;
case MOP_K_INFO_VER:
uc1 = mopGetChar(pkt,index);
uc2 = mopGetChar(pkt,index);
uc3 = mopGetChar(pkt,index);
(void)fprintf(fd,"Maint Version: %d.%d.%d\n",
uc1,uc2,uc3);
break;
case MOP_K_INFO_MFCT:
tmps = mopGetShort(pkt,index);
(void)fprintf(fd,"Maint Funcion: %04x ( ",tmps);
if (tmps & 1) (void)fprintf(fd, "Loop ");
if (tmps & 2) (void)fprintf(fd, "Dump ");
if (tmps & 4) (void)fprintf(fd, "Pldr ");
if (tmps & 8) (void)fprintf(fd, "MLdr ");
if (tmps & 16) (void)fprintf(fd, "Boot ");
if (tmps & 32) (void)fprintf(fd, "CC ");
if (tmps & 64) (void)fprintf(fd, "DLC ");
if (tmps & 128) (void)fprintf(fd, "CCR ");
(void)fprintf(fd, ")\n");
break;
case MOP_K_INFO_CNU:
ucp = pkt + *index; *index = *index + 6;
(void)fprintf(fd,"Console User : ");
mopPrintHWA(fd, ucp);
(void)fprintf(fd, "\n");
break;
case MOP_K_INFO_RTM:
tmps = mopGetShort(pkt,index);
(void)fprintf(fd,"Reserv Timer : %04x (%d)\n",
tmps,tmps);
break;
case MOP_K_INFO_CSZ:
tmps = mopGetShort(pkt,index);
(void)fprintf(fd,"Cons Cmd Size: %04x (%d)\n",
tmps,tmps);
break;
case MOP_K_INFO_RSZ:
tmps = mopGetShort(pkt,index);
(void)fprintf(fd,"Cons Res Size: %04x (%d)\n",
tmps,tmps);
break;
case MOP_K_INFO_HWA:
ucp = pkt + *index; *index = *index + 6;
(void)fprintf(fd,"Hardware Addr: ");
mopPrintHWA(fd, ucp);
(void)fprintf(fd, "\n");
break;
case MOP_K_INFO_TIME:
ucp = pkt + *index; *index = *index + 10;
(void)fprintf(fd,"System Time: ");
mopPrintTime(fd, ucp);
(void)fprintf(fd,"\n");
break;
case MOP_K_INFO_SOFD:
device = mopGetChar(pkt,index);
(void)fprintf(fd,"Comm Device : %02x ",device);
mopPrintDevice(fd, device);
(void)fprintf(fd, "\n");
break;
case MOP_K_INFO_SFID:
tmpc = mopGetChar(pkt,index);
(void)fprintf(fd,"Software ID : %02x ",tmpc);
if ((tmpc == 0)) {
(void)fprintf(fd,"No software id");
}
if ((tmpc == 254)) {
(void)fprintf(fd,"Maintenance system");
tmpc = 0;
}
if ((tmpc == 255)) {
(void)fprintf(fd,"Standard operating system");
tmpc = 0;
}
if ((tmpc > 0)) {
(void)fprintf(fd,"'");
for (i = 0; i < ((int) tmpc); i++) {
(void)fprintf(fd,"%c",
mopGetChar(pkt,index));
}
(void)fprintf(fd,"'");
}
(void)fprintf(fd,"\n");
break;
case MOP_K_INFO_PRTY:
tmpc = mopGetChar(pkt,index);
(void)fprintf(fd,"System Proc : %02x ",tmpc);
switch (tmpc) {
case MOP_K_PRTY_11:
(void)fprintf(fd, "PDP-11\n");
break;
case MOP_K_PRTY_CMSV:
(void)fprintf(fd,
"Communication Server\n");
break;
case MOP_K_PRTY_PRO:
(void)fprintf(fd, "Professional\n");
break;
case MOP_K_PRTY_SCO:
(void)fprintf(fd, "Scorpio\n");
break;
case MOP_K_PRTY_AMB:
(void)fprintf(fd, "Amber\n");
break;
case MOP_K_PRTY_BRI:
(void)fprintf(fd, "XLII Bridge\n");
break;
default:
(void)fprintf(fd, "Unknown\n");
break;
};
break;
case MOP_K_INFO_DLTY:
tmpc = mopGetChar(pkt,index);
(void)fprintf(fd,"Data Link Typ: %02x ",tmpc);
switch (tmpc) {
case MOP_K_DLTY_NI:
(void)fprintf(fd, "Ethernet\n");
break;
case MOP_K_DLTY_DDCMP:
(void)fprintf(fd, "DDCMP\n");
break;
case MOP_K_DLTY_LAPB:
(void)fprintf(fd, "LAPB (X.25)\n");
break;
default:
(void)fprintf(fd, "Unknown\n");
break;
};
break;
case MOP_K_INFO_DLBSZ:
tmps = mopGetShort(pkt,index);
(void)fprintf(fd,"DL Buff Size : %04x (%d)\n",
tmps,tmps);
break;
default:
if (((device = NMA_C_SOFD_LCS) || /* DECserver 100 */
(device = NMA_C_SOFD_DS2) || /* DECserver 200 */
(device = NMA_C_SOFD_DP2) || /* DECserver 250 */
(device = NMA_C_SOFD_DS3)) && /* DECserver 300 */
((itype > 101) && (itype < 107)))
{
switch (itype) {
case 102:
ucp = pkt + *index;
*index = *index + ilen;
(void)fprintf(fd,
"ROM Sftwr Ver: %02x '",
ilen);
for (i = 0; i < ilen; i++) {
(void)fprintf(fd,"%c",ucp[i]);
}
(void)fprintf(fd, "'\n");
break;
case 103:
ucp = pkt + *index;
*index = *index + ilen;
(void)fprintf(fd,
"Software Ver : %02x '",
ilen);
for (i = 0; i < ilen; i++) {
(void)fprintf(fd, "%c",ucp[i]);
}
(void)fprintf(fd, "'\n");
break;
case 104:
tmps = mopGetShort(pkt,index);
(void)fprintf(fd,
"DECnet Addr : %d.%d (%d)\n",
tmps / 1024,
tmps % 1024,
tmps);
break;
case 105:
ucp = pkt + *index;
*index = *index + ilen;
(void)fprintf(fd,
"Node Name : %02x '",
ilen);
for (i = 0; i < ilen; i++) {
(void)fprintf(fd, "%c",ucp[i]);
}
(void)fprintf(fd, "'\n");
break;
case 106:
ucp = pkt + *index;
*index = *index + ilen;
(void)fprintf(fd,
"Node Ident : %02x '",
ilen);
for (i = 0; i < ilen; i++) {
(void)fprintf(fd, "%c",ucp[i]);
}
(void)fprintf(fd, "'\n");
break;
};
} else {
ucp = pkt + *index; *index = *index + ilen;
(void)fprintf(fd, "Info Type : %04x (%d)\n",
itype,
itype);
(void)fprintf(fd, "Info Data : %02x ",
ilen);
for (i = 0; i < ilen; i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0) {
} else {
(void)fprintf(fd,
"\n ");
};
};
(void)fprintf(fd, "%02x ",ucp[i]);
}
(void)fprintf(fd, "\n");
};
}
itype = mopGetShort(pkt,index);
}
}

62
common/print.h Normal file
View File

@@ -0,0 +1,62 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: print.h,v 1.8 1995/10/13 19:31:58 moj Exp $
*
*/
#ifndef _PRINT_H_
#define _PRINT_H_
#ifdef NO__P
void mopPrintHWA (/* FILE *, u_char * */);
void mopPrintBPTY (/* FILE *, u_char */);
void mopPrintPGTY (/* FILE *, u_char */);
void mopPrintOneline (/* FILE *, u_char *, int */);
void mopPrintHeader (/* FILE *, u_char *, int */);
void mopPrintMopHeader (/* FILE *, u_char *, int */);
void mopPrintDevice (/* FILE *, u_char */);
void mopPrintTime (/* FILE *, u_char * */);
void mopPrintInfo (/* FILE *, u_char *, int *, u_short,
u_char, int */);
#else
__BEGIN_DECLS
void mopPrintHWA __P((FILE *, u_char *));
void mopPrintBPTY __P((FILE *, u_char));
void mopPrintPGTY __P((FILE *, u_char));
void mopPrintOneline __P((FILE *, u_char *, int));
void mopPrintHeader __P((FILE *, u_char *, int));
void mopPrintMopHeader __P((FILE *, u_char *, int));
void mopPrintDevice __P((FILE *, u_char));
void mopPrintTime __P((FILE *, u_char *));
void mopPrintInfo __P((FILE *, u_char *, int *, u_short,
u_char, int));
__END_DECLS
#endif
#endif _PRINT_H_

186
common/put.c Normal file
View File

@@ -0,0 +1,186 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: put.c,v 1.5 1996/08/16 22:42:56 moj Exp $";
#endif
#include <stddef.h>
#include <sys/types.h>
#include <time.h>
#include "common/mopdef.h"
void
mopPutChar(pkt, index, value)
register u_char *pkt;
register int *index;
u_char value;
{
pkt[*index] = value;
*index = *index + 1;
}
void
mopPutShort(pkt, index, value)
register u_char *pkt;
register int *index;
u_short value;
{
int i;
for (i = 0; i < 2; i++) {
pkt[*index+i] = value % 256;
value = value / 256;
}
*index = *index + 2;
}
void
mopPutLong(pkt, index, value)
register u_char *pkt;
register int *index;
u_long value;
{
int i;
for (i = 0; i < 4; i++) {
pkt[*index+i] = value % 256;
value = value / 256;
}
*index = *index + 4;
}
void
mopPutMulti(pkt, index, value, size)
register u_char *pkt,*value;
register int *index,size;
{
int i;
for (i = 0; i < size; i++) {
pkt[*index+i] = value[i];
}
*index = *index + size;
}
void
mopPutTime(pkt, index, value)
register u_char *pkt;
register int *index;
time_t value;
{
time_t tnow;
struct tm *timenow;
if ((value == 0)) {
tnow = time(NULL);
} else {
tnow = value;
}
timenow = localtime(&tnow);
mopPutChar (pkt,index,10);
mopPutChar (pkt,index,(timenow->tm_year / 100) + 19);
mopPutChar (pkt,index,(timenow->tm_year % 100));
mopPutChar (pkt,index,(timenow->tm_mon + 1));
mopPutChar (pkt,index,(timenow->tm_mday));
mopPutChar (pkt,index,(timenow->tm_hour));
mopPutChar (pkt,index,(timenow->tm_min));
mopPutChar (pkt,index,(timenow->tm_sec));
mopPutChar (pkt,index,0x00);
mopPutChar (pkt,index,0x00);
mopPutChar (pkt,index,0x00);
}
void
mopPutHeader(pkt, index, dst, src, proto, trans)
register u_char *pkt;
register int *index;
char dst[], src[];
u_short proto;
int trans;
{
mopPutMulti(pkt, index, dst, 6);
mopPutMulti(pkt, index, src, 6);
if (trans == TRANS_8023) {
mopPutShort(pkt, index, 0);
mopPutChar (pkt, index, MOP_K_PROTO_802_DSAP);
mopPutChar (pkt, index, MOP_K_PROTO_802_SSAP);
mopPutChar (pkt, index, MOP_K_PROTO_802_CNTL);
mopPutChar (pkt, index, 0x08);
mopPutChar (pkt, index, 0x00);
mopPutChar (pkt, index, 0x2b);
}
#if !defined(__FreeBSD__)
mopPutChar(pkt, index, (proto / 256));
mopPutChar(pkt, index, (proto % 256));
#else
if (trans == TRANS_8023) {
mopPutChar(pkt, index, (proto / 256));
mopPutChar(pkt, index, (proto % 256));
} else {
mopPutChar(pkt, index, (proto % 256));
mopPutChar(pkt, index, (proto / 256));
}
#endif
if (trans == TRANS_ETHER)
mopPutShort(pkt, index, 0);
}
void
mopPutLength(pkt, trans, len)
register u_char *pkt;
int trans;
u_short len;
{
int index = 0;
switch(trans) {
case TRANS_ETHER:
index = 14;
mopPutChar(pkt, &index, ((len - 16) % 256));
mopPutChar(pkt, &index, ((len - 16) / 256));
break;
case TRANS_8023:
index = 12;
#if !defined(__FreeBSD__)
mopPutChar(pkt, &index, ((len - 14) / 256));
mopPutChar(pkt, &index, ((len - 14) % 256));
#else
mopPutChar(pkt, &index, ((len - 14) % 256));
mopPutChar(pkt, &index, ((len - 14) / 256));
#endif
break;
}
}

56
common/put.h Normal file
View File

@@ -0,0 +1,56 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: put.h,v 1.3 1995/10/05 12:26:59 moj Exp $
*
*/
#ifndef _PUT_H_
#define _PUT_H_
#ifdef NO__P
void mopPutChar (/* u_char *, int *, u_char */);
void mopPutShort (/* u_char *, int *, u_short */);
void mopPutLong (/* u_char *, int *, u_long */);
void mopPutMulti (/* u_char *, int *, u_char *, int */);
void mopPutTime (/* u_char *, int *, time_t */);
void mopPutHeader (/* u_char *, int *, u_char *, u_char *, u_short, int */);
void mopPutLength (/* u_char *, int, u_short */);
#else
__BEGIN_DECLS
void mopPutChar __P((u_char *, int *, u_char));
void mopPutShort __P((u_char *, int *, u_short));
void mopPutLong __P((u_char *, int *, u_long));
void mopPutMulti __P((u_char *, int *, u_char *, int));
void mopPutTime __P((u_char *, int *, time_t));
void mopPutHeader __P((u_char *, int *, u_char *, u_char *, u_short, int));
void mopPutLength __P((u_char *, int, u_short));
__END_DECLS
#endif
#endif _PUT_H_

316
common/rc.c Normal file
View File

@@ -0,0 +1,316 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: rc.c,v 1.8 1995/10/13 19:25:34 moj Exp $";
#endif
#include "os.h"
#include "common/get.h"
#include "common/print.h"
#include "common/mopdef.h"
void
mopDumpRC(fd, pkt, trans)
FILE *fd;
u_char *pkt;
int trans;
{
int i,index = 0;
long tmpl;
u_char tmpc,code,control;
u_short len,tmps,moplen;
len = mopGetLength(pkt, trans);
switch (trans) {
case TRANS_8023:
index = 22;
moplen = len - 8;
break;
default:
index = 16;
moplen = len;
}
code = mopGetChar(pkt,&index);
switch (code) {
case MOP_K_CODE_RID:
tmpc = mopGetChar(pkt,&index);
(void)fprintf(fd,"Reserved : %02x\n",tmpc);
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Receipt Nbr : %04x\n",tmps);
break;
case MOP_K_CODE_BOT:
if ((moplen == 5)) {
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Verification : %04x\n",tmps);
} else {
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Verification : %08x\n",tmpl);
tmpc = mopGetChar(pkt,&index); /* Processor */
(void)fprintf(fd,"Processor : %02x ",tmpc);
mopPrintBPTY(fd, tmpc); (void)fprintf(fd, "\n");
control = mopGetChar(pkt,&index); /* Control */
(void)fprintf(fd,"Control : %02x ",control);
if ((control & (1>>MOP_K_BOT_CNTL_SERVER))) {
(void)fprintf(fd,
"Bootserver Requesting system ");
} else {
(void)fprintf(fd,
"Bootserver System default ");
}
if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
(void)fprintf(fd,
"Bootdevice Specified device");
} else {
(void)fprintf(fd,
"Bootdevice System default");
}
(void)fprintf(fd,"\n");
if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
tmpc = mopGetChar(pkt,&index);/* Device ID */
(void)fprintf(fd,
"Device ID : %02x '",tmpc);
for (i = 0; i < ((int) tmpc); i++) {
(void)fprintf(fd,"%c",
mopGetChar(pkt,&index));
}
(void)fprintf(fd,"'\n");
}
tmpc = mopGetChar(pkt,&index); /* Software ID */
(void)fprintf(fd,"Software ID : %02x ",tmpc);
if ((tmpc == 0)) {
(void)fprintf(fd,"No software id");
}
if ((tmpc == 254)) {
(void)fprintf(fd,"Maintenance system");
tmpc = 0;
}
if ((tmpc == 255)) {
(void)fprintf(fd,"Standard operating system");
tmpc = 0;
}
if ((tmpc > 0)) {
(void)fprintf(fd,"'");
for (i = 0; i < ((int) tmpc); i++) {
(void)fprintf(fd,"%c",
mopGetChar(pkt,&index));
}
(void)fprintf(fd,"'");
}
(void)fprintf(fd,"'\n");
}
break;
case MOP_K_CODE_SID:
tmpc = mopGetChar(pkt,&index); /* Reserved */
(void)fprintf(fd, "Reserved : %02x\n",tmpc);
tmps = mopGetShort(pkt,&index); /* Receipt # */
(void)fprintf(fd, "Receipt Nbr : %04x\n",tmpc);
mopPrintInfo(fd, pkt, &index, moplen, code, trans);
break;
case MOP_K_CODE_RQC:
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Receipt Nbr : %04x\n",tmps);
break;
case MOP_K_CODE_CNT:
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Receipt Nbr : %04x %d\n",tmps,tmps);
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Last Zeroed : %04x %d\n",tmps,tmps);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Bytes rec : %08x %d\n",tmpl,tmpl);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Bytes snd : %08x %d\n",tmpl,tmpl);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Frames rec : %08x %d\n",tmpl,tmpl);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Frames snd : %08x %d\n",tmpl,tmpl);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Mcst Bytes re: %08x %d\n",tmpl,tmpl);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Mcst Frame re: %08x %d\n",tmpl,tmpl);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Frame snd,def: %08x %d\n",tmpl,tmpl);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Frame snd,col: %08x %d\n",tmpl,tmpl);
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Frame snd,mcl: %08x %d\n",tmpl,tmpl);
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Snd failure : %04x %d\n",tmps,tmps);
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Snd fail reas: %04x ",tmps);
if ((tmps & 1)) (void)fprintf(fd,"Excess col ");
if ((tmps & 2)) (void)fprintf(fd,"Carrier chk fail ");
if ((tmps & 4)) (void)fprintf(fd,"Short circ ");
if ((tmps & 8)) (void)fprintf(fd,"Open circ ");
if ((tmps & 16)) (void)fprintf(fd,"Frm to long ");
if ((tmps & 32)) (void)fprintf(fd,"Rem fail to defer ");
(void)fprintf(fd,"\n");
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Rec failure : %04x %d\n",tmps,tmps);
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Rec fail reas: %04x ",tmps);
if ((tmps & 1)) (void)fprintf(fd,"Block chk err ");
if ((tmps & 2)) (void)fprintf(fd,"Framing err ");
if ((tmps & 4)) (void)fprintf(fd,"Frm to long ");
(void)fprintf(fd,"\n");
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Unrec frm dst: %04x %d\n",tmps,tmps);
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Data overrun : %04x %d\n",tmps,tmps);
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Sys Buf Unava: %04x %d\n",tmps,tmps);
tmps = mopGetShort(pkt,&index);
(void)fprintf(fd,"Usr Buf Unava: %04x %d\n",tmps,tmps);
break;
case MOP_K_CODE_RVC:
tmpl = mopGetLong(pkt,&index);
(void)fprintf(fd,"Verification : %08x\n",tmpl);
break;
case MOP_K_CODE_RLC:
/* Empty message */
break;
case MOP_K_CODE_CCP:
tmpc = mopGetChar(pkt,&index);
(void)fprintf(fd,
"Control Flags: %02x Message %d ",tmpc,tmpc & 1);
if ((tmpc & 2))
(void)fprintf(fd,"Break");
(void)fprintf(fd,"\n");
if (moplen > 2) {
#ifndef SHORT_PRINT
for (i = 0; i < (moplen - 2); i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0) {
(void)fprintf(fd,
"Image Data : %04x ",
moplen-2);
} else {
(void)fprintf(fd,
" ");
}
}
(void)fprintf(fd,"%02x ",
mopGetChar(pkt,&index));
if ((i % 16) == 15)
(void)fprintf(fd,"\n");
}
if ((i % 16) != 15)
(void)fprintf(fd,"\n");
#else
index = index + moplen - 2;
#endif
}
break;
case MOP_K_CODE_CRA:
tmpc = mopGetChar(pkt,&index);
(void)fprintf(fd,
"Control Flags: %02x Message %d ",tmpc,tmpc & 1);
if ((tmpc & 2))
(void)fprintf(fd,"Cmd Data Lost ");
if ((tmpc & 4))
(void)fprintf(fd,"Resp Data Lost ");
(void)fprintf(fd,"\n");
if (moplen > 2) {
#ifndef SHORT_PRINT
for (i = 0; i < (moplen - 2); i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0) {
(void)fprintf(fd,
"Image Data : %04x ",
moplen-2);
} else {
(void)fprintf(fd,
" ");
}
}
(void)fprintf(fd,"%02x ",
mopGetChar(pkt,&index));
if ((i % 16) == 15)
(void)fprintf(fd,"\n");
}
if ((i % 16) != 15)
(void)fprintf(fd,"\n");
#else
index = index + moplen - 2;
#endif
}
break;
default:
break;
}
}

44
common/rc.h Normal file
View File

@@ -0,0 +1,44 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: rc.h,v 1.4 1995/10/13 19:26:03 moj Exp $
*
*/
#ifndef _RC_H_
#define _RC_H_
#ifdef NO__P
void mopDumpRC (/* FILE *, u_char *, int */);
#else
__BEGIN_DECLS
void mopDumpRC __P((FILE *, u_char *, int));
__END_DECLS
#endif
#endif _RC_H_

10
mopa.out/Makefile Normal file
View File

@@ -0,0 +1,10 @@
# $Id: Makefile,v 1.3 1996/08/16 22:44:35 moj Exp $
PROG= mopa.out
SRCS= mopa.out.c file.c
CFLAGS+= -I${.CURDIR} -I${.CURDIR}/.. -I${.CURDIR}/../common
.PATH: ${.CURDIR}/../common
.include <bsd.prog.mk>

59
mopa.out/mopa.out.1 Normal file
View File

@@ -0,0 +1,59 @@
.\"
.\" Copyright (c) 1996 Mats O Jansson. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Mats O Jansson.
.\" 4. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#) $Id: mopa.out.1,v 1.2 1996/08/13 18:30:12 moj Exp $
.\"
.Dd August 11, 1996
.Dt MOPA.OUT 1
.Sh NAME
.Nm mopa.out
.Nd Create MOP image from a a.out file
.Sh SYNOPSIS
.Nm mopa.out
.Ar infile
.Ar outfile
.Sh DESCRIPTION
.Nm mopa.out
is used to convert an a.out file to a MOP-image.
.Pp
This program will check if
.Xr a.out 5
machine-id is recognized. If not it will try to swap the
.Xr a.out 5
header, and try again.
.Sh BUGS
This program just supports the VAX machine-id for now.
.Sh SEE ALSO
.Xr a.out 5 ,
.Xr mopchk 1 ,
.Xr mopd 8 ,
.Xr mopprobe 1 ,
.Xr moptrace 1
.Sh AUTHORS
Lloyd Parkes.

154
mopa.out/mopa.out.c Normal file
View File

@@ -0,0 +1,154 @@
/* mopa.out - Convert a Unix format kernel into something that
* can be transfered via MOP.
*
* This code was written while refering to the NetBSD/vax boot
* loader. Therefore anything that can be booted by the Vax
* should be convertable with this program.
*
* If necessary, the a.out header is stripped, and the program
* segments are padded out. The BSS segment is zero filled.
* A header is prepended that looks like an IHD header. In
* particular the Unix mahine ID is placed where mopd expects
* the image type to be (offset is IHD_W_ALIAS). If the machine
* ID could be mistaken for a DEC image type, then the conversion
* is aborted. The original a.out header is copied into the front
* of the header so that once we have detected the Unix machine
* ID we can haul the load address and the xfer address out.
*/
/*
* Copyright (c) 1996 Lloyd Parkes. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Lloyd Parkes.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: mopa.out.c,v 1.5 1996/08/16 22:44:58 moj Exp $";
#endif
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
#include "common/file.h"
#if defined(__NetBSD__) || defined(__OpenBSD__)
#include <sys/exec_aout.h>
#endif
#if defined(__FreeBSD__)
#include <sys/imgact_aout.h>
#endif
#if defined(__bsdi__)
#include <a.out.h>
#define NOAOUT
#endif
#if !defined(MID_VAX)
#define MID_VAX 140
#endif
u_char header[512]; /* The VAX header we generate is 1 block. */
struct exec ex, ex_swap;
int
main (int argc, char **argv)
{
FILE *out; /* A FILE because that is easier. */
int i;
struct dllist dl;
#ifdef NOAOUT
fprintf(stderr, "%s: has no function in OS/BSD\n", argv[0]);
return(1);
#endif
if (argc != 3) {
fprintf (stderr, "usage: %s kernel-in sys-out\n", argv[0]);
return (1);
}
dl.ldfd = open (argv[1], O_RDONLY);
if (dl.ldfd == -1) {
perror (argv[1]);
return (2);
}
GetFileInfo(dl.ldfd,
&dl.loadaddr,
&dl.xferaddr,
&dl.aout,
&dl.a_text,&dl.a_text_fill,
&dl.a_data,&dl.a_data_fill,
&dl.a_bss ,&dl.a_bss_fill );
if (dl.aout == -1) {
fprintf(stderr,"s%: not an a.out file\n",argv[1]);
return (3);
}
if (dl.aout != MID_VAX) {
fprintf(stderr,"%s: file is not a VAX image (mid=%d)\n",
argv[1],dl.aout);
return (4);
}
i = dl.a_text + dl.a_text_fill + dl.a_data + dl.a_data_fill +
dl.a_bss + dl.a_bss_fill;
i = (i+1) / 512;
dl.nloadaddr = dl.loadaddr;
dl.lseek = lseek(dl.ldfd,0L,SEEK_CUR);
dl.a_lseek = 0;
dl.count = 0;
dl.dl_bsz = 512;
mopFilePutLX(header,IHD_W_SIZE,0xd4,2); /* Offset to ISD section. */
mopFilePutLX(header,IHD_W_ACTIVOFF,0x30,2);/* Offset to 1st section.*/
mopFilePutLX(header,IHD_W_ALIAS,IHD_C_NATIVE,2);/* It's a VAX image.*/
mopFilePutLX(header,IHD_B_HDRBLKCNT,1,1); /* Only one header block. */
mopFilePutLX(header,0x30+IHA_L_TFRADR1,dl.xferaddr,4); /* Xfer Addr */
mopFilePutLX(header,0xd4+ISD_W_PAGCNT,i,2);/* Imagesize in blks.*/
out = fopen (argv[2], "w");
if (!out) {
perror (argv[2]);
return (2);
}
/* Now we do the actual work. Write VAX MOP-image header */
fwrite (header, sizeof (header), 1, out);
fprintf (stderr, "copying %lu", dl.a_text);
fprintf (stderr, "+%lu", dl.a_data);
fprintf (stderr, "+%lu", dl.a_bss);
fprintf (stderr, "->%lu", dl.xferaddr);
fprintf (stderr, "\n");
while ((i = mopFileRead(&dl,header)) > 0) {
(void)fwrite(header, i, 1, out);
}
fclose (out);
}

18
mopchk/Makefile Normal file
View File

@@ -0,0 +1,18 @@
# $Id: Makefile,v 1.4 1996/08/16 22:46:24 moj Exp $
PROG= mopchk
SRCS= mopchk.c device.c version.c pf.c loop-bsd.c file.c
CFLAGS+= -I${.CURDIR} -I${.CURDIR}/.. -I${.CURDIR}/../common -DINFO
CLEANFILES= version.c version.h
LDADD= -lkvm
.PATH: ${.CURDIR}/.. ${.CURDIR}/../common
version.c version.h: ${.CURDIR}/../common/VERSION
rm -f version.c; \
sed 's/.*/char version[] = "&";/' ${.ALLSRC} > version.c
set `sed 's/\([0-9]*\)\.\([0-9]*\).*/\1 \2/' ${.ALLSRC}` ; \
{ echo '#define VERSION_MAJOR' $$1 ; \
echo '#define VERSION_MINOR' $$2 ; } > version.h
.include <bsd.prog.mk>

65
mopchk/mopchk.1 Normal file
View File

@@ -0,0 +1,65 @@
.\"
.\" Copyright (c) 1996 Mats O Jansson. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Mats O Jansson.
.\" 4. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#) $Id: mopchk.1,v 1.1 1996/08/11 22:47:11 moj Exp $
.\"
.Dd October 2, 1995
.Dt MOPCHK 1
.Sh NAME
.Nm mopchk
.Nd MOP Check Utility
.Sh SYNOPSIS
.Nm mopchk
.Op Fl a
.Op Fl v
.Op Ar filename
.Sh DESCRIPTION
.Nm Mopchk
shows information about which devices are known, version of mopd suite or
information about a MOP-image.
.Pp
If
.Ar filename
is given, information about the MOP-image is read from the header of the
file.
.Sh OPTIONS
.Bl -tag -width indent
.It Fl a
Show all the Ethernets attached to the system.
.It Fl v
Show version of mopprobe.
.El
.Sh BUGS
In some implementation the same interface can occure more than once.
.Sh SEE ALSO
.Xr mopa.out 1 ,
.Xr mopprobe 1 ,
.Xr moptrace 1 ,
.Xr mopd 8
.Sh AUTHORS
Mats O Jansson (moj@stacken.kth.se).

177
mopchk/mopchk.c Normal file
View File

@@ -0,0 +1,177 @@
/*
* Copyright (c) 1995-96 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: mopchk.c,v 1.5 1996/08/16 22:46:55 moj Exp $";
#endif
/*
* mopchk - MOP Check Utility
*
* Usage: mopchk [-a] [-v] [filename...]
*/
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
#include "common/device.h"
#include "common/pf.h"
#include "common/file.h"
/*
* The list of all interfaces that are being listened to. rarp_loop()
* "selects" on the descriptors in this list.
*/
struct if_info *iflist;
#ifdef NO__P
void Usage (/* void */);
void mopProcess (/* struct if_info *, u_char * */);
#else
void Usage __P((void));
void mopProcess __P((struct if_info *, u_char *));
#endif
int AllFlag = 0; /* listen on "all" interfaces */
int VersionFlag = 0; /* Show version */
int promisc = 0; /* promisc mode not needed */
char *Program;
char version[];
void
main(argc, argv)
int argc;
char **argv;
{
int op, i, fd;
char *filename;
struct if_info *ii;
int err, aout;
extern int optind, opterr;
if ((Program = strrchr(argv[0], '/')))
Program++;
else
Program = argv[0];
if (*Program == '-')
Program++;
/* All error reporting is done through syslogs. */
openlog(Program, LOG_PID | LOG_CONS, LOG_DAEMON);
opterr = 0;
while ((op = getopt(argc, argv, "av")) != EOF) {
switch (op) {
case 'a':
AllFlag++;
break;
case 'v':
VersionFlag++;
break;
default:
Usage();
/* NOTREACHED */
}
}
if (VersionFlag)
printf("%s: Version %s\n",Program,version);
if (AllFlag) {
if (VersionFlag)
printf("\n");
iflist = NULL;
deviceInitAll();
if (iflist == NULL) {
printf("No interface\n");
} else {
printf("Interface Address\n");
for (ii = iflist; ii; ii = ii->next) {
printf("%-9s %x:%x:%x:%x:%x:%x\n",
ii->if_name,
ii->eaddr[0],ii->eaddr[1],ii->eaddr[2],
ii->eaddr[3],ii->eaddr[4],ii->eaddr[5]);
}
}
}
if (VersionFlag || AllFlag)
i = 1;
else
i = 0;
while (argc > optind) {
if (i) printf("\n");
i++;
filename = argv[optind++];
printf("Checking: %s\n",filename);
fd = open(filename, O_RDONLY, 0);
if (fd == -1) {
printf("Unknown file.\n");
} else {
err = CheckAOutFile(fd);
if (err == 0) {
if (GetAOutFileInfo(fd, 0, 0, 0, 0,
0, 0, 0, 0, &aout) < 0) {
printf("Some failure in GetAOutFileInfo\n");
aout = -1;
}
} else {
aout = -1;
}
if (aout == -1)
err = CheckMopFile(fd);
if (aout == -1 && err == 0) {
if (GetMopFileInfo(fd, 0, 0) < 0) {
printf("Some failure in GetMopFileInfo\n");
}
};
}
}
}
void
Usage()
{
(void) fprintf(stderr, "usage: %d [-a] [-v] [filename...]\n",Program);
exit(1);
}
/*
* Process incomming packages, NOT.
*/
void
mopProcess(ii, pkt)
struct if_info *ii;
u_char *pkt;
{
}

20
mopd/Makefile Normal file
View File

@@ -0,0 +1,20 @@
# $Id: Makefile,v 1.11 1996/08/16 22:36:06 moj Exp $
PROG= mopd
SRCS= mopd.c process.c print.c cmp.c get.c put.c mopdef.c nma.c device.c \
version.c pf.c loop-bsd.c dl.c rc.c file.c
MAN= mopd.8
CFLAGS+= -I${.CURDIR} -I${.CURDIR}/.. -I${.CURDIR}/../common
CLEANFILES= version.c version.h
LDADD= -lkvm
.PATH: ${.CURDIR}/../common
version.c version.h: ${.CURDIR}/../common/VERSION
rm -f version.c; \
sed 's/.*/char version[] = "&";/' ${.ALLSRC} > version.c
set `sed 's/\([0-9]*\)\.\([0-9]*\).*/\1 \2/' ${.ALLSRC}` ; \
{ echo '#define VERSION_MAJOR' $$1 ; \
echo '#define VERSION_MINOR' $$2 ; } > version.h
.include <bsd.prog.mk>

1
mopd/TODO Normal file
View File

@@ -0,0 +1 @@
Change code to send hostname instead of 'ipc'.

113
mopd/mopd.8 Normal file
View File

@@ -0,0 +1,113 @@
.\"
.\" Copyright (c) 1993-96 Mats O Jansson. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Mats O Jansson.
.\" 4. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#) $Id: mopd.8,v 1.3 1996/08/14 11:55:33 moj Exp $
.\"
.Dd September 24, 1995
.Dt MOPD 8
.Sh NAME
.Nm mopd
.Nd MOP Loader Daemon
.Sh SYNOPSIS
.Nm mopd
.Op Fl adf
.Op Ar interface
.Sh DESCRIPTION
.Nm Mopd
services MOP Load requests on the Ethernet connected to
.Ar interface
or all interfaces if
.Sq Fl a
is given.
In a load request received by
.Nm mopd
a filename can be given. This is the normal case for e.g. terminal servers.
If a filename isn't given
.Nm mopd
must know what image to load.
.Pp
Upon receiving a request,
.Nm mopd
checks if the requested file exists in
.Pa /tftpboot/mop ,
the filename is normaly uppercase and with an extension of
.Pa .SYS .
If the filename isn't given, the ethernet address of the target is used as
filename, e.g.
.Pa 08002b09f4de.SYS
and it might be a soft link to another file.
.Pp
.Nm Mopd
supports two kinds of files. The first type that is check is if the file is
in
.Xr a.out 5
format. If not, a couple of Digital's formats are checked.
.Pp
In normal operation,
.Nm mopd
forks a copy of itself and runs in
the background. Anomalies and errors are reported via
.Xr syslog 3 .
.Sh OPTIONS
.Bl -tag -width indent
.It Fl a
Listen on all the Ethernets attached to the system.
If
.Sq Fl a
is omitted, an interface must be specified.
.It Fl d
Run in debug mode, with all the output to stdout. The process will run in
the foreground.
.It Fl f
Run in the foreground.
.El
.Sh BUGS
.Xr a.out 5
isn't supported yet non bsd implementations (otherOS).
.Sh FILES
.Bl -tag -width Pa -compact
.It Pa /tftpboot/mop
.El
.Sh SEE ALSO
.Xr bpf 4 ,
.Xr mopa.out 1 ,
.Xr mopchk 1 ,
.Xr mopprobe 1 ,
.Xr moptrace 1
.Rs
DECnet Digital Network Architecture Phase IV,
.%R Maintenance Operations Functional Specification V3.0.0
.%N AA-X436A-TK
.Re
.Rs
DECnet Digital Network Architecture,
.%R Maintenance Operations Protocol Functional Specification V4.0.0
.%N EK-DNA11-FS-001
.Re
.Sh AUTHORS
Mats O Jansson (moj@stacken.kth.se).

241
mopd/mopd.c Normal file
View File

@@ -0,0 +1,241 @@
/*
* Copyright (c) 1993-96 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: mopd.c,v 1.14 1996/03/31 19:20:42 moj Exp $";
#endif
/*
* mopd - MOP Dump/Load Daemon
*
* Usage: mopd -a [ -d -f -v ] [ -3 | -4 ]
* mopd [ -d -f -v ] [ -3 | -4 ] interface
*/
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
#include "common/device.h"
#include "common/print.h"
#include "common/pf.h"
#include "common/cmp.h"
#include "common/get.h"
#include "common/dl.h"
#include "common/rc.h"
#include "process.h"
/*
* The list of all interfaces that are being listened to.
* "selects" on the descriptors in this list.
*/
struct if_info *iflist;
#ifdef NO__P
void Loop (/* void */);
void Usage (/* void */);
void mopProcess (/* struct if_info *, u_char * */);
#else
void Loop __P((void));
void Usage __P((void));
void mopProcess __P((struct if_info *, u_char *));
#endif
int AllFlag = 0; /* listen on "all" interfaces */
int DebugFlag = 0; /* print debugging messages */
int ForegroundFlag = 0; /* run in foreground */
int VersionFlag = 0; /* print version */
int Not3Flag = 0; /* Not MOP V3 messages. */
int Not4Flag = 0; /* Not MOP V4 messages. */
int promisc = 1; /* Need promisc mode */
char *Program;
void
main(argc, argv)
int argc;
char **argv;
{
int c, pid, devnull, f;
char *interface;
extern int optind;
extern char version[];
if ((Program = strrchr(argv[0], '/')))
Program++;
else
Program = argv[0];
if (*Program == '-')
Program++;
while ((c = getopt(argc, argv, "34adfv")) != EOF)
switch (c) {
case '3':
Not3Flag++;
break;
case '4':
Not4Flag++;
break;
case 'a':
AllFlag++;
break;
case 'd':
DebugFlag++;
break;
case 'f':
ForegroundFlag++;
break;
case 'v':
VersionFlag++;
break;
default:
Usage();
/* NOTREACHED */
}
if (VersionFlag) {
fprintf(stdout,"%s: version %s\n", Program, version);
exit(0);
}
interface = argv[optind++];
if ((AllFlag && interface) ||
(!AllFlag && interface == 0) ||
(argc > optind) ||
(Not3Flag && Not4Flag))
Usage();
/* All error reporting is done through syslogs. */
openlog(Program, LOG_PID | LOG_CONS, LOG_DAEMON);
if ((!ForegroundFlag) && DebugFlag) {
fprintf(stdout,
"%s: not running as daemon, -d given.\n",
Program);
}
if ((!ForegroundFlag) && (!DebugFlag)) {
pid = fork();
if (pid > 0)
/* Parent exits, leaving child in background. */
exit(0);
else
if (pid == -1) {
syslog(LOG_ERR, "cannot fork");
exit(0);
}
/* Fade into the background */
f = open("/dev/tty", O_RDWR);
if (f >= 0) {
if (ioctl(f, TIOCNOTTY, 0) < 0) {
syslog(LOG_ERR, "TIOCNOTTY: %m");
exit(0);
}
(void) close(f);
}
(void) chdir("/");
#ifdef SETPGRP_NOPARAM
(void) setpgrp();
#else
(void) setpgrp(0, getpid());
#endif
devnull = open("/dev/null", O_RDWR);
if (devnull >= 0) {
(void) dup2(devnull, 0);
(void) dup2(devnull, 1);
(void) dup2(devnull, 2);
if (devnull > 2)
(void) close(devnull);
}
}
syslog(LOG_INFO, "%s %s started.", Program, version);
if (AllFlag)
deviceInitAll();
else
deviceInitOne(interface);
Loop();
}
void
Usage()
{
(void) fprintf(stderr, "usage: %s -a [ -d -f -v ] [ -3 | -4 ]\n",Program);
(void) fprintf(stderr, " %s [ -d -f -v ] [ -3 | -4 ] interface\n",Program);
exit(1);
}
/*
* Process incomming packages.
*/
void
mopProcess(ii, pkt)
struct if_info *ii;
u_char *pkt;
{
u_char *dst, *src;
u_short ptype;
int index, trans, len;
/* We don't known with transport, Guess! */
trans = mopGetTrans(pkt, 0);
/* Ok, return if we don't wan't this message */
if ((trans == TRANS_ETHER) && Not3Flag) return;
if ((trans == TRANS_8023) && Not4Flag) return;
index = 0;
mopGetHeader(pkt, &index, &dst, &src, &ptype, &len, trans);
/*
* Ignore our own transmissions
*
*/
if (mopCmpEAddr(ii->eaddr,src) == 0)
return;
switch(ptype) {
case MOP_K_PROTO_DL:
mopProcessDL(stdout, ii, pkt, &index, dst, src, trans, len);
break;
case MOP_K_PROTO_RC:
mopProcessRC(stdout, ii, pkt, &index, dst, src, trans, len);
break;
default:
break;
}
}

637
mopd/process.c Normal file
View File

@@ -0,0 +1,637 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: process.c,v 1.21 1996/08/22 17:04:07 moj Exp $";
#endif
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
#include "common/nmadef.h"
#include "common/get.h"
#include "common/put.h"
#include "common/print.h"
#include "common/pf.h"
#include "common/cmp.h"
#include "common/dl.h"
#include "common/rc.h"
#include "common/file.h"
extern u_char buf[];
extern int DebugFlag;
struct dllist dllist[MAXDL]; /* dump/load list */
extern char dl_mcst[]; /* Dump/Load Multicast */
extern char rc_mcst[]; /* Remote Console Multicast */
void
mopProcessInfo(pkt,index,moplen,dl_rpr,trans)
u_char *pkt;
int *index, trans;
u_short moplen;
struct dllist *dl_rpr;
{
u_short itype,tmps;
u_char ilen ,tmpc,device;
u_char uc1,uc2,uc3,*ucp;
device = 0;
switch(trans) {
case TRANS_ETHER:
moplen = moplen + 16;
break;
case TRANS_8023:
moplen = moplen + 14;
break;
}
itype = mopGetShort(pkt,index);
while (*index < (int)(moplen)) {
ilen = mopGetChar(pkt,index);
switch (itype) {
case 0:
tmpc = mopGetChar(pkt,index);
*index = *index + tmpc;
break;
case MOP_K_INFO_VER:
uc1 = mopGetChar(pkt,index);
uc2 = mopGetChar(pkt,index);
uc3 = mopGetChar(pkt,index);
break;
case MOP_K_INFO_MFCT:
tmps = mopGetShort(pkt,index);
break;
case MOP_K_INFO_CNU:
ucp = pkt + *index; *index = *index + 6;
break;
case MOP_K_INFO_RTM:
tmps = mopGetShort(pkt,index);
break;
case MOP_K_INFO_CSZ:
tmps = mopGetShort(pkt,index);
break;
case MOP_K_INFO_RSZ:
tmps = mopGetShort(pkt,index);
break;
case MOP_K_INFO_HWA:
ucp = pkt + *index; *index = *index + 6;
break;
case MOP_K_INFO_TIME:
ucp = pkt + *index; *index = *index + 10;
break;
case MOP_K_INFO_SOFD:
device = mopGetChar(pkt,index);
break;
case MOP_K_INFO_SFID:
tmpc = mopGetChar(pkt,index);
ucp = pkt + *index; *index = *index + tmpc;
break;
case MOP_K_INFO_PRTY:
tmpc = mopGetChar(pkt,index);
break;
case MOP_K_INFO_DLTY:
tmpc = mopGetChar(pkt,index);
break;
case MOP_K_INFO_DLBSZ:
tmps = mopGetShort(pkt,index);
dl_rpr->dl_bsz = tmps;
break;
default:
if (((device = NMA_C_SOFD_LCS) || /* DECserver 100 */
(device = NMA_C_SOFD_DS2) || /* DECserver 200 */
(device = NMA_C_SOFD_DP2) || /* DECserver 250 */
(device = NMA_C_SOFD_DS3)) && /* DECserver 300 */
((itype > 101) && (itype < 107)))
{
switch (itype) {
case 102:
ucp = pkt + *index;
*index = *index + ilen;
break;
case 103:
ucp = pkt + *index;
*index = *index + ilen;
break;
case 104:
tmps = mopGetShort(pkt,index);
break;
case 105:
ucp = pkt + *index;
*index = *index + ilen;
break;
case 106:
ucp = pkt + *index;
*index = *index + ilen;
break;
};
} else {
ucp = pkt + *index; *index = *index + ilen;
};
}
itype = mopGetShort(pkt,index);
}
}
void
mopSendASV(dst, src, ii, trans)
u_char *dst,*src;
struct if_info *ii;
int trans;
{
u_char pkt[200], *p;
int index;
u_char mopcode = MOP_K_CODE_ASV;
u_short newlen = 0,ptype = MOP_K_PROTO_DL;
index = 0;
mopPutHeader(pkt, &index, dst, src, ptype, trans);
p = &pkt[index];
mopPutChar(pkt,&index,mopcode);
mopPutLength(pkt, trans, index);
newlen = mopGetLength(pkt, trans);
if ((DebugFlag == DEBUG_ONELINE)) {
mopPrintOneline(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_HEADER)) {
mopPrintHeader(stdout, pkt, trans);
mopPrintMopHeader(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_INFO)) {
mopDumpDL(stdout, pkt, trans);
}
if (pfWrite(ii->fd, pkt, index, trans) != index) {
if (DebugFlag) {
(void)fprintf(stderr, "error pfWrite()\n");
}
}
}
void
mopStartLoad(dst, src, dl_rpr, trans)
u_char *dst,*src;
struct dllist *dl_rpr;
int trans;
{
int len;
int i, slot;
u_char pkt[BUFSIZE], *p;
int index;
u_char mopcode = MOP_K_CODE_MLD;
u_short newlen,ptype = MOP_K_PROTO_DL;
slot = -1;
/* Look if we have a non terminated load, if so, use it's slot */
for (i = 0; i < MAXDL; i++) {
if (dllist[i].status != DL_STATUS_FREE) {
if (mopCmpEAddr(dllist[i].eaddr,dst) == 0) {
slot = i;
}
}
}
/* If no slot yet, then find first free */
if (slot == -1) {
for (i = 0; i < MAXDL; i++) {
if (dllist[i].status == DL_STATUS_FREE) {
if (slot == -1) {
slot = i;
bcopy((char *)dst,
(char *)dllist[i].eaddr, 6);
}
}
}
}
/* If no slot yet, then return. No slot is free */
if (slot == -1)
return;
/* Ok, save info from RPR */
dllist[slot] = *dl_rpr;
dllist[slot].status = DL_STATUS_READ_IMGHDR;
/* Get Load and Transfer Address. */
GetFileInfo(dllist[slot].ldfd,
&dllist[slot].loadaddr,
&dllist[slot].xferaddr,
&dllist[slot].aout,
&dllist[slot].a_text, &dllist[slot].a_text_fill,
&dllist[slot].a_data, &dllist[slot].a_data_fill,
&dllist[slot].a_bss, &dllist[slot].a_bss_fill);
dllist[slot].nloadaddr = dllist[slot].loadaddr;
dllist[slot].lseek = lseek(dllist[slot].ldfd,0L,SEEK_CUR);
dllist[slot].a_lseek = 0;
dllist[slot].count = 0;
if (dllist[slot].dl_bsz >= 1492)
dllist[slot].dl_bsz = 1492;
if (dllist[slot].dl_bsz == 1030) /* VS/uVAX 2000 needs this */
dllist[slot].dl_bsz = 1000;
if (trans == TRANS_8023)
dllist[slot].dl_bsz = dllist[slot].dl_bsz - 8;
index = 0;
mopPutHeader(pkt, &index, dst, src, ptype, trans);
p = &pkt[index];
mopPutChar (pkt,&index,mopcode);
mopPutChar (pkt,&index,dllist[slot].count);
mopPutLong (pkt,&index,dllist[slot].loadaddr);
len = mopFileRead(&dllist[slot],&pkt[index]);
dllist[slot].nloadaddr = dllist[slot].loadaddr + len;
index = index + len;
mopPutLength(pkt, trans, index);
newlen = mopGetLength(pkt, trans);
if ((DebugFlag == DEBUG_ONELINE)) {
mopPrintOneline(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_HEADER)) {
mopPrintHeader(stdout, pkt, trans);
mopPrintMopHeader(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_INFO)) {
mopDumpDL(stdout, pkt, trans);
}
if (pfWrite(dllist[slot].ii->fd, pkt, index, trans) != index) {
if (DebugFlag) {
(void)fprintf(stderr, "error pfWrite()\n");
}
}
dllist[slot].status = DL_STATUS_SENT_MLD;
}
void
mopNextLoad(dst, src, new_count, trans)
u_char *dst,*src,new_count;
int trans;
{
int len;
int i, slot;
u_char pkt[BUFSIZE], *p;
int index, pindex;
char line[100];
u_short newlen = 0,ptype = MOP_K_PROTO_DL;
u_char mopcode;
slot = -1;
for (i = 0; i < MAXDL; i++) {
if (dllist[i].status != DL_STATUS_FREE) {
if (mopCmpEAddr(dst,dllist[i].eaddr) == 0)
slot = i;
}
}
/* If no slot yet, then return. No slot is free */
if (slot == -1)
return;
if ((new_count == ((dllist[slot].count+1) % 256))) {
dllist[slot].loadaddr = dllist[slot].nloadaddr;
dllist[slot].count = new_count;
} else {
return;
}
if (dllist[slot].status == DL_STATUS_SENT_PLT) {
close(dllist[slot].ldfd);
dllist[slot].ldfd = 0;
dllist[slot].status = DL_STATUS_FREE;
sprintf(line,
"%x:%x:%x:%x:%x:%x Load completed",
dst[0],dst[1],dst[2],dst[3],dst[4],dst[5]);
syslog(LOG_INFO, line);
return;
}
dllist[slot].lseek = lseek(dllist[slot].ldfd,0L,SEEK_CUR);
if (dllist[slot].dl_bsz >= 1492)
dllist[slot].dl_bsz = 1492;
index = 0;
mopPutHeader(pkt, &index, dst, src, ptype, trans);
p = &pkt[index];
mopcode = MOP_K_CODE_MLD;
pindex = index;
mopPutChar (pkt,&index,mopcode);
mopPutChar (pkt,&index,dllist[slot].count);
mopPutLong (pkt,&index,dllist[slot].loadaddr);
len = mopFileRead(&dllist[slot],&pkt[index]);
if (len > 0 ) {
dllist[slot].nloadaddr = dllist[slot].loadaddr + len;
index = index + len;
mopPutLength(pkt, trans, index);
newlen = mopGetLength(pkt, trans);
} else {
if (len == 0) {
index = pindex;
mopcode = MOP_K_CODE_PLT;
mopPutChar (pkt,&index,mopcode);
mopPutChar (pkt,&index,dllist[slot].count);
mopPutChar (pkt,&index,MOP_K_PLTP_HSN);
mopPutChar (pkt,&index,3);
mopPutMulti(pkt,&index,"ipc",3);
mopPutChar (pkt,&index,MOP_K_PLTP_HSA);
mopPutChar (pkt,&index,6);
mopPutMulti(pkt,&index,src,6);
mopPutChar (pkt,&index,MOP_K_PLTP_HST);
mopPutTime (pkt,&index, 0);
mopPutChar (pkt,&index,0);
mopPutLong (pkt,&index,dllist[slot].xferaddr);
mopPutLength(pkt, trans, index);
newlen = mopGetLength(pkt, trans);
dllist[slot].status = DL_STATUS_SENT_PLT;
} else {
dllist[slot].status = DL_STATUS_FREE;
return;
}
}
if ((DebugFlag == DEBUG_ONELINE)) {
mopPrintOneline(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_HEADER)) {
mopPrintHeader(stdout, pkt, trans);
mopPrintMopHeader(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_INFO)) {
mopDumpDL(stdout, pkt, trans);
}
if (pfWrite(dllist[slot].ii->fd, pkt, index, trans) != index) {
if (DebugFlag) {
(void)fprintf(stderr, "error pfWrite()\n");
}
}
}
void
mopProcessDL(fd, ii, pkt, index, dst, src, trans, len)
FILE *fd;
struct if_info *ii;
u_char *pkt, *dst, *src;
int *index, trans;
u_short len;
{
u_char tmpc;
u_short moplen;
u_char pfile[17], mopcode;
char filename[FILENAME_MAX];
char line[100];
int i,nfd,iindex;
struct dllist dl,*dl_rpr;
u_char rpr_pgty,load;
if ((DebugFlag == DEBUG_ONELINE)) {
mopPrintOneline(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_HEADER)) {
mopPrintHeader(stdout, pkt, trans);
mopPrintMopHeader(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_INFO)) {
mopDumpDL(stdout, pkt, trans);
}
moplen = mopGetLength(pkt, trans);
mopcode = mopGetChar(pkt,index);
switch (mopcode) {
case MOP_K_CODE_MLT:
break;
case MOP_K_CODE_DCM:
break;
case MOP_K_CODE_MLD:
break;
case MOP_K_CODE_ASV:
break;
case MOP_K_CODE_RMD:
break;
case MOP_K_CODE_RPR:
tmpc = mopGetChar(pkt,index); /* Device Type */
tmpc = mopGetChar(pkt,index); /* Format Version */
if ((tmpc != MOP_K_RPR_FORMAT) &&
(tmpc != MOP_K_RPR_FORMAT_V3)) {
(void)fprintf(stderr,"mopd: Unknown RPR Format (%d) from ",tmpc);
mopPrintHWA(stderr,src);
(void)fprintf(stderr,"\n");
}
rpr_pgty = mopGetChar(pkt,index); /* Program Type */
tmpc = mopGetChar(pkt,index); /* Software ID Len */
for (i = 0; i < tmpc; i++) {
pfile[i] = mopGetChar(pkt,index);
pfile[i+1] = '\0';
}
if (tmpc == 0) {
/* In a normal implementation of a MOP Loader this */
/* would cause a question to NML (DECnet) if this */
/* node is known and if so what image to load. But */
/* we don't have DECnet so we don't have anybody */
/* to ask. My solution is to use the ethernet addr */
/* as filename. Implementing a database would be */
/* overkill. */
sprintf(pfile,"%02x%02x%02x%02x%02x%02x%c",
src[0],src[1],src[2],src[3],src[4],src[5],0);
}
tmpc = mopGetChar(pkt,index); /* Processor */
iindex = *index;
dl_rpr = &dl;
bzero(dl_rpr,sizeof(*dl_rpr));
dl_rpr->ii = ii;
bcopy((char *)src, (char *)(dl_rpr->eaddr), 6);
mopProcessInfo(pkt,index,moplen,dl_rpr,trans);
sprintf(filename,"%s/%s.SYS", MOP_FILE_PATH, pfile);
if ((mopCmpEAddr(dst,dl_mcst) == 0)) {
if ((nfd = open(filename, O_RDONLY, 0)) != -1) {
close(nfd);
mopSendASV(src, ii->eaddr, ii, trans);
sprintf(line,
"%x:%x:%x:%x:%x:%x (%d) Do you have %s? (Yes)",
src[0],src[1],src[2],
src[3],src[4],src[5],trans,pfile);
} else {
sprintf(line,
"%x:%x:%x:%x:%x:%x (%d) Do you have %s? (No)",
src[0],src[1],src[2],
src[3],src[4],src[5],trans,pfile);
}
syslog(LOG_INFO, line);
} else {
if ((mopCmpEAddr(dst,ii->eaddr) == 0)) {
dl_rpr->ldfd = open(filename, O_RDONLY, 0);
mopStartLoad(src, ii->eaddr, dl_rpr, trans);
sprintf(line,
"%x:%x:%x:%x:%x:%x Send me %s",
src[0],src[1],src[2],
src[3],src[4],src[5],pfile);
syslog(LOG_INFO, line);
}
}
break;
case MOP_K_CODE_RML:
load = mopGetChar(pkt,index); /* Load Number */
tmpc = mopGetChar(pkt,index); /* Error */
if ((mopCmpEAddr(dst,ii->eaddr) == 0)) {
mopNextLoad(src, ii->eaddr, load, trans);
}
break;
case MOP_K_CODE_RDS:
break;
case MOP_K_CODE_MDD:
break;
case MOP_K_CODE_CCP:
break;
case MOP_K_CODE_PLT:
break;
default:
break;
}
}
void
mopProcessRC(fd, ii, pkt, index, dst, src, trans, len)
FILE *fd;
struct if_info *ii;
u_char *pkt, *dst, *src;
int *index, trans;
u_short len;
{
u_char tmpc;
u_short tmps, moplen = 0;
u_char mopcode;
struct dllist dl,*dl_rpr;
if ((DebugFlag == DEBUG_ONELINE)) {
mopPrintOneline(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_HEADER)) {
mopPrintHeader(stdout, pkt, trans);
mopPrintMopHeader(stdout, pkt, trans);
}
if ((DebugFlag >= DEBUG_INFO)) {
mopDumpRC(stdout, pkt, trans);
}
moplen = mopGetLength(pkt, trans);
mopcode = mopGetChar(pkt,index);
switch (mopcode) {
case MOP_K_CODE_RID:
break;
case MOP_K_CODE_BOT:
break;
case MOP_K_CODE_SID:
tmpc = mopGetChar(pkt,index); /* Reserved */
if ((DebugFlag >= DEBUG_INFO)) {
(void)fprintf(stderr, "Reserved : %02x\n",tmpc);
}
tmps = mopGetShort(pkt,index); /* Receipt # */
if ((DebugFlag >= DEBUG_INFO)) {
(void)fprintf(stderr, "Receipt Nbr : %04x\n",tmpc);
}
dl_rpr = &dl;
bzero(dl_rpr,sizeof(*dl_rpr));
dl_rpr->ii = ii;
bcopy((char *)src, (char *)(dl_rpr->eaddr), 6);
mopProcessInfo(pkt,index,moplen,dl_rpr,trans);
break;
case MOP_K_CODE_RQC:
break;
case MOP_K_CODE_CNT:
break;
case MOP_K_CODE_RVC:
break;
case MOP_K_CODE_RLC:
break;
case MOP_K_CODE_CCP:
break;
case MOP_K_CODE_CRA:
break;
default:
break;
}
}

50
mopd/process.h Normal file
View File

@@ -0,0 +1,50 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: process.h,v 1.5 1995/10/03 12:13:51 moj Exp $
*
*/
#ifndef _PROCESS_H_
#define _PROCESS_H_
#ifdef NO__P
void mopProcessDL (/* FILE *, struct if_info *, u_char *, int *,
u_char *, u_char *, int, u_short */);
void mopProcessRC (/* FILE *, struct if_info *, u_char *, int *,
u_char *, u_char *, int, u_short */);
#else
__BEGIN_DECLS
void mopProcessDL __P((FILE *, struct if_info *, u_char *, int *,
u_char *, u_char *, int, u_short));
void mopProcessRC __P((FILE *, struct if_info *, u_char *, int *,
u_char *, u_char *, int, u_short));
__END_DECLS
#endif
#endif _PROCESS_H_

17
mopprobe/Makefile Normal file
View File

@@ -0,0 +1,17 @@
# $Id: Makefile,v 1.10 1996/08/16 22:48:30 moj Exp $
PROG= mopprobe
SRCS= mopprobe.c device.c get.c cmp.c mopdef.c version.c pf.c loop-bsd.c
CFLAGS+= -I${.CURDIR} -I${.CURDIR}/.. -I${.CURDIR}/../common -DNODL
CLEANFILES= version.c version.h
LDADD= -lkvm
.PATH: ${.CURDIR}/../common
version.c version.h: ${.CURDIR}/../common/VERSION
rm -f version.c; \
sed 's/.*/char version[] = "&";/' ${.ALLSRC} > version.c
set `sed 's/\([0-9]*\)\.\([0-9]*\).*/\1 \2/' ${.ALLSRC}` ; \
{ echo '#define VERSION_MAJOR' $$1 ; \
echo '#define VERSION_MINOR' $$2 ; } > version.h
.include <bsd.prog.mk>

70
mopprobe/mopprobe.1 Normal file
View File

@@ -0,0 +1,70 @@
.\"
.\" Copyright (c) 1996 Mats O Jansson. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Mats O Jansson.
.\" 4. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#) $Id: mopprobe.1,v 1.1 1996/08/11 23:01:09 moj Exp $
.\"
.Dd October 2, 1995
.Dt MOPPROBE 1
.Sh NAME
.Nm mopprobe
.Nd MOP Probe Utility
.Sh SYNOPSIS
.Nm mopprobe
.Fl a
.Op Fl 3 | 4
.Pp
.Nm mopprobe
.Op Fl 3 | 4
.Ar interface
.Sh DESCRIPTION
.Nm Mopprobe
prints the ethernet address and nodename of MOP SID message on the Ethernet
connected to
.Ar interface
or all known interfaces if
.Sq Fl a
is given.
.Sh OPTIONS
.Bl -tag -width indent
.It Fl a
Listen on all the Ethernets attached to the system.
If
.Sq Fl a
is omitted, an interface must be specified.
.It Fl 3
Ignore MOP V3 messages (Ethernet II).
.It Fl 4
Ignore MOP V4 messages (Ethernet 802.3).
.El
.Sh SEE ALSO
.Xr mopa.out 1 ,
.Xr mopchk 1 ,
.Xr mopd 8 ,
.Xr moptrace 8
.Sh AUTHORS
Mats O Jansson (moj@stacken.kth.se).

292
mopprobe/mopprobe.c Normal file
View File

@@ -0,0 +1,292 @@
/*
* Copyright (c) 1993-96 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: mopprobe.c,v 1.11 1996/08/11 22:16:10 moj Exp $";
#endif
/*
* mopprobe - MOP Probe Utility
*
* Usage: mopprobe -a [ -3 | -4 ]
* mopprobe [ -3 | -4 ] interface
*/
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
#include "common/device.h"
#include "common/print.h"
#include "common/get.h"
#include "common/cmp.h"
#include "common/pf.h"
#include "common/nmadef.h"
/*
* The list of all interfaces that are being listened to. rarp_loop()
* "selects" on the descriptors in this list.
*/
struct if_info *iflist;
#ifdef NO__P
void Loop (/* void */);
void Usage (/* void */);
void mopProcess (/* struct if_info *, u_char * */);
#else
void Loop __P((void));
void Usage __P((void));
void mopProcess __P((struct if_info *, u_char *));
#endif
int AllFlag = 0; /* listen on "all" interfaces */
int DebugFlag = 0; /* print debugging messages */
int Not3Flag = 0; /* Not MOP V3 messages */
int Not4Flag = 0; /* Not MOP V4 messages */
int oflag = 0; /* print only once */
int promisc = 1; /* Need promisc mode */
char *Program;
void
main(argc, argv)
int argc;
char **argv;
{
int op;
char *interface;
extern int optind, opterr;
if ((Program = strrchr(argv[0], '/')))
Program++;
else
Program = argv[0];
if (*Program == '-')
Program++;
/* All error reporting is done through syslogs. */
openlog(Program, LOG_PID | LOG_CONS, LOG_DAEMON);
opterr = 0;
while ((op = getopt(argc, argv, "ado")) != EOF) {
switch (op) {
case '3':
Not3Flag++;
break;
case '4':
Not4Flag++;
break;
case 'a':
AllFlag++;
break;
case 'd':
DebugFlag++;
break;
case 'o':
oflag++;
break;
default:
Usage();
/* NOTREACHED */
}
}
interface = argv[optind++];
if ((AllFlag && interface) ||
(!AllFlag && interface == 0) ||
(Not3Flag && Not4Flag))
Usage();
if (AllFlag)
deviceInitAll();
else
deviceInitOne(interface);
Loop();
}
void
Usage()
{
(void) fprintf(stderr, "usage: %s -a [ -3 | -4 ]\n",Program);
(void) fprintf(stderr, " %s [ -3 | -4 ] interface\n",Program);
exit(1);
}
/*
* Process incomming packages.
*/
void
mopProcess(ii, pkt)
struct if_info *ii;
u_char *pkt;
{
u_char *dst, *src, *p, mopcode, tmpc, ilen;
u_short *ptype, moplen, tmps, itype, len;
int index, i, device, trans;
dst = pkt;
src = pkt+6;
ptype = (u_short *)(pkt+12);
index = 0;
if (*ptype < 1600) {
len = *ptype;
trans = TRANS_8023;
ptype = (u_short *)(pkt+20);
p = pkt+22;
if (Not4Flag) return;
} else {
len = 0;
trans = TRANS_ETHER;
p = pkt+14;
if (Not3Flag) return;
}
/* Ignore our own messages */
if (mopCmpEAddr(ii->eaddr,src) == 0) {
return;
}
/* Just check multicast */
if (mopCmpEAddr(rc_mcst,dst) != 0) {
return;
}
switch (trans) {
case TRANS_8023:
moplen = len;
break;
default:
moplen = mopGetShort(pkt,&index);
}
mopcode = mopGetChar(p,&index);
/* Just process System Information */
if (mopcode != MOP_K_CODE_SID) {
return;
}
tmpc = mopGetChar(pkt,&index); /* Reserved */
tmps = mopGetShort(pkt,&index); /* Receipt # */
device = 0; /* Unknown Device */
itype = mopGetShort(pkt,&index);
while (index < (int)(moplen + 2)) {
ilen = mopGetChar(pkt,&index);
switch (itype) {
case 0:
tmpc = mopGetChar(pkt,&index);
index = index + tmpc;
break;
case MOP_K_INFO_VER:
index = index + 3;
break;
case MOP_K_INFO_MFCT:
index = index + 2;
break;
case MOP_K_INFO_CNU:
index = index + 6;
break;
case MOP_K_INFO_RTM:
index = index + 2;
break;
case MOP_K_INFO_CSZ:
index = index + 2;
break;
case MOP_K_INFO_RSZ:
index = index + 2;
break;
case MOP_K_INFO_HWA:
index = index + 6;
break;
case MOP_K_INFO_TIME:
index = index + 10;
break;
case MOP_K_INFO_SOFD:
device = mopGetChar(pkt,&index);
break;
case MOP_K_INFO_SFID:
tmpc = mopGetChar(pkt,&index);
if ((index > 0) && (index < 17))
index = index + tmpc;
break;
case MOP_K_INFO_PRTY:
index = index + 1;
break;
case MOP_K_INFO_DLTY:
index = index + 1;
break;
case MOP_K_INFO_DLBSZ:
index = index + 2;
break;
default:
if (((device = NMA_C_SOFD_LCS) || /* DECserver 100 */
(device = NMA_C_SOFD_DS2) || /* DECserver 200 */
(device = NMA_C_SOFD_DP2) || /* DECserver 250 */
(device = NMA_C_SOFD_DS3)) && /* DECserver 300 */
((itype > 101) && (itype < 107)))
{
switch (itype) {
case 102:
index = index + ilen;
break;
case 103:
index = index + ilen;
break;
case 104:
index = index + 2;
break;
case 105:
(void)fprintf(stdout,"%x:%x:%x:%x:%x:%x\t",
src[0],src[1],src[2],src[3],src[4],src[5]);
for (i = 0; i < ilen; i++) {
(void)fprintf(stdout, "%c",pkt[index+i]);
}
index = index + ilen;
(void)fprintf(stdout, "\n");
break;
case 106:
index = index + ilen;
break;
};
} else {
index = index + ilen;
};
}
itype = mopGetShort(pkt,&index);
}
}

20
moptrace/Makefile Normal file
View File

@@ -0,0 +1,20 @@
# $Id: Makefile,v 1.6 1996/08/16 22:49:14 moj Exp $
PROG= moptrace
SRCS= moptrace.c print.c cmp.c get.c mopdef.c nma.c device.c version.c pf.c \
loop-bsd.c dl.c rc.c
MAN= moptrace.1
CFLAGS+= -I${.CURDIR} -I${.CURDIR}/.. -I${.CURDIR}/../common
CLEANFILES= version.c version.h
LDADD= -lkvm
.PATH: ${.CURDIR}/../common
version.c version.h: ${.CURDIR}/../common/VERSION
rm -f version.c; \
sed 's/.*/char version[] = "&";/' ${.ALLSRC} > version.c
set `sed 's/\([0-9]*\)\.\([0-9]*\).*/\1 \2/' ${.ALLSRC}` ; \
{ echo '#define VERSION_MAJOR' $$1 ; \
echo '#define VERSION_MINOR' $$2 ; } > version.h
.include <bsd.prog.mk>

83
moptrace/moptrace.1 Normal file
View File

@@ -0,0 +1,83 @@
.\"
.\" Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Mats O Jansson.
.\" 4. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#) $Id: moptrace.1,v 1.2 1996/08/11 23:03:33 moj Exp $
.\"
.Dd October 2, 1995
.Dt MOPTRACE 1
.Sh NAME
.Nm moptrace
.Nd MOP Trace Utility
.Sh SYNOPSIS
.Nm moptrace
.Op Fl a
.Op Fl d
.Op Fl 3 | 4
.Pp
.Nm moptrace
.Op Fl d
.Op Fl 3 | 4
.Op Ar interface
.Sh DESCRIPTION
.Nm Moptrace
prints the contence of MOP packages on the Ethernet connected to
.Ar interface
or all known interfaces if
.Sq Fl a
is given.
.Sh OPTIONS
.Bl -tag -width indent
.It Fl a
Listen on all the Ethernets attached to the system.
If
.Sq Fl a
is omitted, an interface must be specified.
.It Fl d
Run in debug mode, with all the output to stderr.
.It Fl 3
Ignore MOP V3 messages (Ethernet II).
.It Fl 4
Ignore MOP V4 messages (Ethernet 802.3).
.El
.Sh SEE ALSO
.Xr mopa.out 1 ,
.Xr mopchk 1 ,
.Xr mopd 8 ,
.Xr mopprobe 1
.Rs
DECnet Digital Network Architecture Phase IV,
.%R Maintenance Operations Functional Specification V3.0.0
.%N AA-X436A-TK
.Re
.Rs
DECnet Digital Network Architecture,
.%R Maintenance Operations Protocol Functional Specification V4.0.0
.%N EK-DNA11-FS-001
.Re
.Sh AUTHORS
Mats O Jansson (moj@stacken.kth.se).

169
moptrace/moptrace.c Normal file
View File

@@ -0,0 +1,169 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: moptrace.c,v 1.10 1996/08/05 07:49:14 moj Exp $";
#endif
/*
* moptrace - MOP Trace Utility
*
* Usage: moptrace -a [ -d ] [ -3 | -4 ]
* moptrace [ -d ] [ -3 | -4 ] interface
*/
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
#include "common/device.h"
#include "common/print.h"
#include "common/pf.h"
#include "common/dl.h"
#include "common/rc.h"
#include "common/get.h"
/*
* The list of all interfaces that are being listened to.
* "selects" on the descriptors in this list.
*/
struct if_info *iflist;
#ifdef NO__P
void Loop (/* void */);
void Usage (/* void */);
void mopProcess (/* struct if_info *, u_char * */);
#else
void Loop __P((void));
void Usage __P((void));
void mopProcess __P((struct if_info *, u_char *));
#endif
int AllFlag = 0; /* listen on "all" interfaces */
int DebugFlag = 0; /* print debugging messages */
int Not3Flag = 0; /* Ignore MOP V3 messages */
int Not4Flag = 0; /* Ignore MOP V4 messages */
int promisc = 1; /* Need promisc mode */
char *Program;
void
main(argc, argv)
int argc;
char **argv;
{
int op;
char *interface;
extern int optind, opterr;
if ((Program = strrchr(argv[0], '/')))
Program++;
else
Program = argv[0];
if (*Program == '-')
Program++;
/* All error reporting is done through syslogs. */
openlog(Program, LOG_PID | LOG_CONS, LOG_DAEMON);
opterr = 0;
while ((op = getopt(argc, argv, "34ad")) != EOF) {
switch (op) {
case '3':
Not3Flag++;
break;
case '4':
Not4Flag++;
break;
case 'a':
AllFlag++;
break;
case 'd':
DebugFlag++;
break;
default:
Usage();
/* NOTREACHED */
}
}
interface = argv[optind++];
if ((AllFlag && interface) ||
(!AllFlag && interface == 0) ||
(Not3Flag && Not4Flag))
Usage();
if (AllFlag)
deviceInitAll();
else
deviceInitOne(interface);
Loop();
}
void
Usage()
{
(void) fprintf(stderr, "usage: %s -a [ -d ] [ -3 | -4 ]\n",Program);
(void) fprintf(stderr, " %s [ -d ] [ -3 | -4 ] interface\n",
Program);
exit(1);
}
/*
* Process incoming packages.
*/
void
mopProcess(ii, pkt)
struct if_info *ii;
u_char *pkt;
{
int trans;
/* We don't known which transport, Guess! */
trans = mopGetTrans(pkt, 0);
/* Ok, return if we don't want this message */
if ((trans == TRANS_ETHER) && Not3Flag) return;
if ((trans == TRANS_8023) && Not4Flag) return;
mopPrintHeader(stdout, pkt, trans);
mopPrintMopHeader(stdout, pkt, trans);
mopDumpDL(stdout, pkt, trans);
mopDumpRC(stdout, pkt, trans);
fprintf(stdout, "\n");
fflush(stdout);
}

172
otherOS/Makefile Normal file
View File

@@ -0,0 +1,172 @@
# Copyright (c) 1993-1994 Mats O Jansson, Stockholm, Sweden
# All rights reserved.
#
# @(#) $Id: Makefile,v 1.4 1996/08/13 18:43:56 moj Exp $
# Script (or program) that returns the machine and os types,
# or jsut edit in the name yourself.
MD=`./mdtype`
OS=`./ostype`
CCOPT = -O
INCLUDES = -I..
#rs6000-aix3#DEFINES = -D_AIX -D_BSD -DNO__P
#mopchk#SPEC_FLAGS= -DINFO -DNODL -DNOAOUT
#mopd#SPEC_FLAGS= -DNOAOUT
#mopprobe#SPEC_FLAGS= -DNODL
#moptrace#SPEC_FLAGS=
# Standard CFLAGS
STANDARD_CFLAGS = $(CCOPT) $(SPEC_FLAGS) $(DEFINES) $(INCLUDES)
# CFLAGS definitions per machine vs. os
#sun3-sunos4#CFLAGS = $(STANDARD_CFLAGS) -DNO__P
#sun4-sunos4#CFLAGS = $(STANDARD_CFLAGS) -DNO__P
#sun4-sunos5#CFLAGS = $(STANDARD_CFLAGS) -DNO__P -DDLPIPF
#rs6000-aix3#CFLAGS = $(STANDARD_CFLAGS)
#sun4-sunos5#LIB = -lsocket
# Change these to cc/lex/yacc if you don't have gcc, flex and/or bison.
CC = cc
LEX = lex
YACC = yacc -y
MAKE = make
# Explicitly define compiliation rule since SunOS 4's make doesn't like gcc.
# Also, gcc does not remove the .o before forking 'as', which can be a
# problem if you don't own the file but can write to the directory.
.c.o:
rm -f $@; $(CC) $(CFLAGS) -c $*.c
DIRS= mopchk mopd mopprobe moptrace
CHFIL= mopchk.c
CHOBJ= mopchk.o
CHHDR=
LDFIL= mopd.c process.c
LDOBJ= mopd.o process.o
LDHDR= process.h
PBFIL= mopprobe.c
PBOBJ= mopprobe.o
PBHDR=
TRFIL= moptrace.c
TROBJ= moptrace.o
TRHDR=
#sun3-sunos4#OSHDR= os-sunos4.h
#sun3-sunos4#PFFIL= pf-snit.c
#sun3-sunos4#LOOP= loop.c
#sun4-sunos4#OSHDR= os-sunos4.h
#sun4-sunos4#PFFIL= pf-snit.c
#sun4-sunos4#LOOP= loop.c
#rs6000-aix3#OSHDR= os-aix3.h
#rs6000-aix3#PFFIL= pf-aix3.c
#rs6000-aix3#LOOP= loop.c
#mopchk#COFIL= device.c file.c mopdef.c
#mopchk#COOBJ= device.o file.o mopdef.o
#mopchk#OTOBJ= pf.o loop.o
#mopd#COFIL= cmp.c device.c dl.c file.c get.c mopdef.c nma.c print.c put.c rc.c
#mopd#COOBJ= cmp.o device.o dl.o file.o get.o mopdef.o nma.o print.o put.o rc.o
#mopd#OTOBJ= pf.o loop.o
#mopprobe#COFIL= cmp.c device.c get.c mopdef.c
#mopprobe#COOBJ= cmp.o device.o get.o mopdef.o
#mopprobe#OTOBJ= pf.o loop.o
#moptrace#COFIL= cmp.c device.c dl.c get.c mopdef.c nma.c print.c rc.c
#moptrace#COOBJ= cmp.o device.o dl.o get.o mopdef.o nma.o print.o rc.o
#moptrace#OTOBJ= pf.o loop.o
toplvl: osmake
oslvl: submake
#mopchk#image: mopchk
#mopd#image: mopd
#mopprobe#image: mopprobe
#moptrace#image: moptrace
MFLAGS=
osmake: force
@dir=$(MD)-$(OS); \
if [ ! -d $$dir ]; then ${MAKE} ${MFLAGS} config; fi; \
cd $$dir; ${MAKE} ${MFLAGS}
submake: force
-@for i in $(DIRS); do if [ ! -d $$i ]; then mkdir $$i; chmod ug+w $$i; \
sed -e "/^oslvl:/d" -e "s/^#$$i#//" Makefile >$$i/Makefile; \
chmod ug+w $$i/Makefile; cd $$i; \
${MAKE} ${MFLAGS} files; cd ..; fi; done; \
for i in $(DIRS); do cd $$i; ${MAKE} ${MFLAGS}; cd ..; done
config:
@md=$(MD); os=$(OS); dir=$$md-$$os; \
mkdir $$dir; chmod ug+w $$dir; \
sed -e "/^toplvl:/d" -e "s/^#$$dir#//" Makefile >$$dir/Makefile; \
chmod ug+w $$dir/Makefile
#mopchk#files: force
#mopchk# echo "Adding files in mopchk"; \
#mopchk# ln -s ../../../common common; \
#mopchk# for i in $(CHFIL) $(CHHDR); do ln -s ../../../mopchk/$$i $$i; done; \
#mopchk# for i in $(COFIL); do ln -s ../../../common/$$i $$i; done; \
#mopchk# ln -s ../../$(OSHDR) os.h; ln -s ../../$(PFFIL) pf.c; \
#mopchk# ln -s ../../$(LOOP) loop.c
#mopd#files: force
#mopd# echo "Adding files in mopd"; \
#mopd# ln -s ../../../common common; \
#mopd# for i in $(LDFIL) $(LDHDR); do ln -s ../../../mopd/$$i $$i; done; \
#mopd# for i in $(COFIL); do ln -s ../../../common/$$i $$i; done; \
#mopd# ln -s ../../$(OSHDR) os.h; ln -s ../../$(PFFIL) pf.c; \
#mopd# ln -s ../../$(LOOP) loop.c
#mopprobe#files: force
#mopprobe# echo "Adding files in mopprobe"; \
#mopprobe# ln -s ../../../common common; \
#mopprobe# for i in $(PBFIL) $(PBHDR); do ln -s ../../../mopprobe/$$i $$i; done; \
#mopprobe# for i in $(COFIL); do ln -s ../../../common/$$i $$i; done; \
#mopprobe# ln -s ../../$(OSHDR) os.h; ln -s ../../$(PFFIL) pf.c; \
#mopprobe# ln -s ../../$(LOOP) loop.c
#moptrace#files: force
#moptrace# echo "Adding files in moptrace"; \
#moptrace# ln -s ../../../common common; \
#moptrace# for i in $(TRFIL) $(TRHDR); do ln -s ../../../moptrace/$$i $$i; done; \
#moptrace# for i in $(COFIL); do ln -s ../../../common/$$i $$i; done; \
#moptrace# ln -s ../../$(OSHDR) os.h; ln -s ../../$(PFFIL) pf.c; \
#moptrace# ln -s ../../$(LOOP) loop.c
mopchk: $(CHOBJ) $(COOBJ) $(OTOBJ) version.o
$(CC) $(CFLAGS) -o $@ $(CHOBJ) $(COOBJ) $(OTOBJ) version.o $(LIB)
mopd: $(LDOBJ) $(COOBJ) $(OTOBJ) version.o
$(CC) $(CFLAGS) -o $@ $(LDOBJ) $(COOBJ) $(OTOBJ) version.o $(LIB)
mopprobe: $(PBOBJ) $(COOBJ) $(OTOBJ) version.o
$(CC) $(CFLAGS) -o $@ $(PBOBJ) $(COOBJ) $(OTOBJ) version.o $(LIB)
moptrace: $(TROBJ) $(COOBJ) $(OTOBJ) version.o
$(CC) $(CFLAGS) -o $@ $(TROBJ) $(COOBJ) $(OTOBJ) version.o $(LIB)
VERSION:
@ln -s ../../../common/VERSION VERSION
version.o: version.c
version.c version.h: VERSION
rm -f version.c ; sed 's/.*/char version[] = "&";/' VERSION > version.c
set `sed 's/\([0-9]*\)\.\([0-9]*\).*/\1 \2/' VERSION` ; \
{ echo '#define VERSION_MAJOR' $$1 ; \
echo '#define VERSION_MINOR' $$2 ; } > version.h
force: /tmp

178
otherOS/loop.c Normal file
View File

@@ -0,0 +1,178 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: loop.c,v 1.8 1996/08/07 23:48:15 moj Exp $";
#endif
#include "os.h"
#include "common/common.h"
#include "common/mopdef.h"
/*
* The list of all interfaces that are being listened to. loop()
* "selects" on the descriptors in this list.
*/
struct if_info *iflist;
u_char buf[BUFSIZE];
void mopProcess (/* struct if_info *, u_char * */);
int
mopOpenRC(p, trans)
struct if_info *p;
int trans;
{
#ifndef NORC
int fd;
fd = (*(p->iopen))(p->if_name,
O_RDWR,
MOP_K_PROTO_RC,
trans);
if (fd >= 0) {
pfAddMulti(fd, p->if_name, rc_mcst);
pfEthAddr(fd, p->eaddr);
}
return fd;
#else
return -1;
#endif
}
int
mopOpenDL(p, trans)
struct if_info *p;
int trans;
{
#ifndef NODL
int fd;
fd = (*(p->iopen))(p->if_name,
O_RDWR,
MOP_K_PROTO_DL,
trans);
if (fd >= 0) {
pfAddMulti(fd, p->if_name, dl_mcst);
pfEthAddr(fd, p->eaddr);
}
return fd;
#else
return -1;
#endif
}
void
mopReadRC(p, fd)
struct if_info *p;
int fd;
{
int cc;
if ((cc = pfRead(fd, buf+HDRSIZ, BUFSIZE-HDRSIZ)) < 0) {
return;
}
if (cc == 0)
return;
mopProcess(p, buf+HDRSIZ);
return;
}
void
mopReadDL(p, fd)
struct if_info *p;
int fd;
{
int cc;
if ((cc = pfRead(fd, buf+HDRSIZ, BUFSIZE-HDRSIZ)) < 0) {
return;
}
if (cc == 0)
return;
mopProcess(p, buf+HDRSIZ);
return;
}
/*
* Loop indefinitely listening for MOP requests on the
* interfaces in 'iflist'.
*/
void
Loop()
{
fd_set fds, listeners;
int maxfd = 0;
struct if_info *ii;
if (iflist == 0) {
fprintf(stderr,"no interfaces");
exit(0);
}
/*
* Find the highest numbered file descriptor for select().
* Initialize the set of descriptors to listen to.
*/
FD_ZERO(&fds);
for (ii = iflist; ii; ii = ii->next) {
if (ii->fd != -1) {
FD_SET(ii->fd, &fds);
if (ii->fd > maxfd)
maxfd = ii->fd;
}
}
while (1) {
listeners = fds;
if (select(maxfd + 1, &listeners, (struct fd_set *) 0,
(struct fd_set *) 0, (struct timeval *) 0) < 0) {
fprintf(stderr, "select: %s");
exit(0);
}
for (ii = iflist; ii; ii = ii->next) {
if (ii->fd != -1) {
if (FD_ISSET(ii->fd, &listeners))
(*(ii->read))(ii,ii->fd);
}
}
}
}

51
otherOS/mdtype Executable file
View File

@@ -0,0 +1,51 @@
#!/bin/sh
#
# @(#) $Id: mdtype,v 1.3 1996/08/06 12:16:45 moj Exp $
#
# Determine machine type.
#
machine="UNKNOWN"
if [ -f /usr/bin/uname ]; then
os=`/usr/bin/uname`
if [ $os = "AIX" ]; then
if [ "`/usr/bin/uname -v`" = "3" ]; then
machine="rs6000"
fi
if [ "`/usr/bin/uname -v`" = "4" ]; then
hw="`/usr/sbin/lsattr -l proc0 -E -a type | /usr/bin/cut -d\ -f2`"
if [ $hw = "PowerPC_601" ]; then
machine="rs6000"
fi
if [ $hw = "POWER" ]; then
machine="rs6000"
fi
if [ $hw = "POWER2" ]; then
machine="rs6000"
fi
fi
fi
if [ $os = "SunOS" ]; then
machine="`/usr/bin/uname -m |/usr/bin/cut -c1-4 `"
fi
if [ $os = "NetBSD" ]; then
machine="`/usr/bin/uname -m`"
fi
if [ $machine = "sparc" ]; then
machine="sun4"
fi
fi
echo $machine
if [ $machine = "UNKNOWN" ]; then
exit 1
else
exit 0
fi

51
otherOS/os-sunos4.h Normal file
View File

@@ -0,0 +1,51 @@
/*
* Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @(#) $Id: os-sunos4.h,v 1.4 1996/08/22 17:06:51 moj Exp $
*/
#include <stdio.h>
#define FILENAME_MAX 255 /* SunOS 4 is missing it */
#include <syslog.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
typedef int ssize_t;

33
otherOS/ostype Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/sh
#
# @(#) $Id: ostype,v 1.3 1996/08/06 12:17:43 moj Exp $
#
# Determine os type.
#
os="UNKNOWN"
if [ -f /usr/bin/uname ]; then
osname=`/usr/bin/uname`
if [ $osname = "AIX" ]; then
os="aix`/usr/bin/uname -v`"
fi
if [ $osname = "SunOS" ]; then
os="sunos`/usr/bin/uname -r | /usr/bin/cut -c1`"
fi
if [ $osname = "NetBSD" ]; then
os="netbsd"
fi
fi
echo $os
if [ $os = "UNKNOWN" ]; then
exit 1
else
exit 0
fi

340
otherOS/pf-snit.c Normal file
View File

@@ -0,0 +1,340 @@
/*
* Copyright (c) 1993-96 Mats O Jansson. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Mats O Jansson.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LINT
static char rcsid[] = "$Id: pf-snit.c,v 1.1 1996/08/08 11:47:33 moj Exp $";
#endif
#include <stdio.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/file.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <net/if.h>
#define DEV_NIT "/dev/nit"
#include <net/nit.h>
#include <net/nit_if.h>
#include <net/nit_pf.h>
#include <net/nit_buf.h>
#include <net/packetfilt.h>
#include <stropts.h>
#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <netdb.h>
#include <ctype.h>
#include <syslog.h>
#include "common/mopdef.h"
/*
* Variables
*/
/* struct ifreq ifr; */
extern int errno;
extern int promisc;
/*
* Return information to device.c how to open device.
* In this case the driver can handle both Ethernet type II and
* IEEE 802.3 frames (SNAP) in a single pfOpen.
*/
int
pfTrans(interface)
char *interface;
{
return TRANS_ETHER+TRANS_8023+TRANS_AND;
}
/*
* Open and initialize packet filter.
*/
int
pfInit(interface, mode, protocol, trans)
char *interface;
u_short protocol;
int trans, mode;
{
int fd;
int ioarg;
char device[64];
unsigned long if_flags;
struct ifreq ifr;
struct strioctl si;
/* get clone */
if ((fd = open(DEV_NIT, mode)) < 0) {
syslog(LOG_ERR,"pfInit: open nit %m");
return(-1);
}
/*
* set filter for protocol
*/
if (setup_pf(fd, protocol, trans) < 0)
return(-1);
/*
* set options, bind to underlying interface
*/
strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name));
/* bind */
si.ic_cmd = NIOCBIND; /* bind to underlying interface */
si.ic_timout = 10;
si.ic_len = sizeof(ifr);
si.ic_dp = (caddr_t)&ifr;
if (ioctl(fd, I_STR, (caddr_t)&si) < 0) {
syslog(LOG_ERR,"pfinit: I_STR %m");
return(-1);
}
if (promisc) {
if_flags = NI_PROMISC;
si.ic_cmd = NIOCSFLAGS;
si.ic_timout = 10;
si.ic_len = sizeof(if_flags);
si.ic_dp = (caddr_t)&if_flags;
if (ioctl(fd, I_STR, (caddr_t)&si) < 0) {
syslog(LOG_ERR,"pfInit: I_STR (promisc) %m");
return(-1);
}
}
/* set up messages */
if (ioctl(fd, I_SRDOPT, (char *)RMSGD) < 0) { /* want messages */
syslog(LOG_ERR,"pfInit: I_SRDOPT %m");
return(-1);
}
/* flush read queue */
if (ioctl(fd, I_FLUSH, (char *)FLUSHR) < 0) {
syslog(LOG_ERR,"pfInit: I_FLUSH %m");
return(-1);
}
return(fd);
}
/*
* establish protocol filter
*/
int
setup_pf(s, prot, trans)
int s, trans;
u_short prot;
{
int ioarg;
u_short offset;
struct packetfilt pf;
register u_short *fwp = pf.Pf_Filter;
struct strioctl si;
#define s_offset(structp, element) (&(((structp)0)->element))
bzero(&pf, sizeof(pf));
pf.Pf_Priority = 128;
offset = ((int)s_offset(struct ether_header *, ether_type))/sizeof(u_short);
*fwp++ = ENF_PUSHWORD + offset; /* Check Ethernet type II */
*fwp++ = ENF_PUSHLIT | ENF_EQ; /* protocol prot */
*fwp++ = htons(prot);
*fwp++ = ENF_PUSHWORD + offset + 4; /* Check 802.3 protocol prot */
*fwp++ = ENF_PUSHLIT | ENF_EQ;
*fwp++ = htons(prot);
*fwp++ = ENF_PUSHWORD + offset + 1; /* Check for SSAP and DSAP */
*fwp++ = ENF_PUSHLIT | ENF_EQ;
*fwp++ = htons(0xaaaa);
*fwp++ = ENF_AND;
*fwp++ = ENF_OR;
pf.Pf_FilterLen = 11;
si.ic_cmd = NIOCSETF;
si.ic_timout = 10;
si.ic_len = sizeof(pf);
si.ic_dp = (char *)&pf;
if (ioctl(s, I_PUSH, "pf") < 0) {
syslog(LOG_ERR,"setup_pf: I_PUSH %m");
return(-1);
}
if (ioctl(s, I_STR, (char *)&si) < 0) {
syslog(LOG_ERR,"setup_pf: I_STR %m");
return(-1);
}
return(0);
}
/*
* Get the interface ethernet address
*/
int
pfEthAddr(fd, addr)
int fd;
u_char *addr;
{
struct ifreq ifr;
struct sockaddr *sa;
if (ioctl(fd, SIOCGIFADDR, &ifr) < 0) {
syslog(LOG_ERR,"pfEthAddr: SIOCGIFADDR %m");
return(-1);
}
sa = (struct sockaddr *)ifr.ifr_data;
bcopy((char *)sa->sa_data, (char *)addr, 6);
return(0);
}
/*
* Add a Multicast address to the interface
*/
int
pfAddMulti(s, interface, addr)
int s;
char *interface, *addr;
{
struct ifreq ifr;
int fd;
strcpy(ifr.ifr_name, interface);
ifr.ifr_addr.sa_family = AF_UNSPEC;
bcopy(addr, ifr.ifr_addr.sa_data, 6);
/*
* open a socket, temporarily, to use for SIOC* ioctls
*/
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
syslog(LOG_ERR,"pfAddMulti: socket() %m");
return(-1);
}
if (ioctl(fd, SIOCADDMULTI, (caddr_t)&ifr) < 0) {
syslog(LOG_ERR,"pfAddMulti: SIOCADDMULTI %m");
close(fd);
return(-1);
}
close(fd);
return(0);
}
/*
* delete a multicast address from the interface
*/
int
pfDelMulti(s, interface, addr)
int s;
char *interface, *addr;
{
struct ifreq ifr;
int fd;
strcpy(ifr.ifr_name, interface);
ifr.ifr_addr.sa_family = AF_UNSPEC;
bcopy(addr, ifr.ifr_addr.sa_data, 6);
/*
* open a socket, temporarily, to use for SIOC* ioctls
*
*/
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
syslog(LOG_ERR,"pfDelMulti: socket() %m");
return(-1);
}
if (ioctl(fd, SIOCDELMULTI, (caddr_t)&ifr) < 0) {
syslog(LOG_ERR,"pfDelMulti: SIOCDELMULTI %m");
close(fd);
return(-1);
}
close(fd);
return(0);
}
/*
* read a packet
*/
int
pfRead(fd, buf, len)
int fd, len;
u_char *buf;
{
return(read(fd, buf, len));
}
/*
* write a packet
*/
int
pfWrite(fd, buf, len, trans)
int fd, len, trans;
u_char *buf;
{
struct sockaddr sa;
struct strbuf pbuf, dbuf;
sa.sa_family = AF_UNSPEC;
bcopy(buf, sa.sa_data, sizeof(sa.sa_data));
switch (trans) {
default:
pbuf.len = sizeof(struct sockaddr);
pbuf.buf = (char *) &sa;
dbuf.len = len-14;
dbuf.buf = (char *)buf+14;
break;
}
if (putmsg(fd, &pbuf, &dbuf, 0) == 0)
return(len);
return(-1);
}