mirror of
https://github.com/dreamlayers/netbsd-mopd.git
synced 2026-02-27 00:49:48 +00:00
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:
5
Makefile
Normal file
5
Makefile
Normal 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
4
Makefile.inc
Normal 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
1
common/VERSION
Normal file
@@ -0,0 +1 @@
|
||||
2.5.3
|
||||
41
common/cmp.c
Normal file
41
common/cmp.c
Normal 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
44
common/cmp.h
Normal 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
92
common/common.h
Normal 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
331
common/device.c
Normal 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
52
common/device.h
Normal 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
315
common/dl.c
Normal 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
44
common/dl.h
Normal 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
843
common/file.c
Normal 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
67
common/file.h
Normal 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
148
common/get.c
Normal 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
58
common/get.h
Normal 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
179
common/loop-bsd.c
Normal 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
49
common/mopdef.c
Normal 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
196
common/mopdef.h
Normal 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
224
common/nma.c
Normal 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
46
common/nma.h
Normal 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
181
common/nmadef.h
Normal 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
57
common/os.h
Normal 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
279
common/pf.c
Normal 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
56
common/pf.h
Normal 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
703
common/print.c
Normal 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
62
common/print.h
Normal 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
186
common/put.c
Normal 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
56
common/put.h
Normal 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
316
common/rc.c
Normal 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
44
common/rc.h
Normal 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
10
mopa.out/Makefile
Normal 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
59
mopa.out/mopa.out.1
Normal 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
154
mopa.out/mopa.out.c
Normal 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
18
mopchk/Makefile
Normal 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
65
mopchk/mopchk.1
Normal 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
177
mopchk/mopchk.c
Normal 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
20
mopd/Makefile
Normal 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>
|
||||
113
mopd/mopd.8
Normal file
113
mopd/mopd.8
Normal 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
241
mopd/mopd.c
Normal 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
637
mopd/process.c
Normal 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
50
mopd/process.h
Normal 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
17
mopprobe/Makefile
Normal 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
70
mopprobe/mopprobe.1
Normal 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
292
mopprobe/mopprobe.c
Normal 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
20
moptrace/Makefile
Normal 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
83
moptrace/moptrace.1
Normal 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
169
moptrace/moptrace.c
Normal 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
172
otherOS/Makefile
Normal 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
178
otherOS/loop.c
Normal 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
51
otherOS/mdtype
Executable 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
51
otherOS/os-sunos4.h
Normal 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
33
otherOS/ostype
Executable 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
340
otherOS/pf-snit.c
Normal 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)𝔦
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user