mopd-2.5.3/Makefile 100444 24732 0 176 6205174126 123140ustar00majawheel# $Id: Makefile,v 1.5 1996/08/16 22:37:51 moj Exp $ SUBDIR= mopd mopprobe moptrace mopchk mopa.out .include mopd-2.5.3/Makefile.inc 100444 24732 0 174 6102742335 130610ustar00majawheel# 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 mopd-2.5.3/common/VERSION 100444 24732 0 6 6207110474 131420ustar00majawheel2.5.3 mopd-2.5.3/common/cmp.c 100444 24732 0 3546 6032763527 131220ustar00majawheel/* * 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)); } mopd-2.5.3/common/cmp.h 100444 24732 0 3560 6032474101 131060ustar00majawheel/* * 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_ mopd-2.5.3/common/common.h 100444 24732 0 7040 6204071625 136210ustar00majawheel/* * 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_ mopd-2.5.3/common/device.c 100444 24732 0 20257 6202227162 136050ustar00majawheel/* * 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 */ } mopd-2.5.3/common/device.h 100444 24732 0 4072 6032477104 135730ustar00majawheel/* * 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_ mopd-2.5.3/common/dl.c 100444 24732 0 20470 6201322425 127370ustar00majawheel/* * 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; } } mopd-2.5.3/common/dl.h 100444 24732 0 3576 6037537000 127400ustar00majawheel/* * 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_ mopd-2.5.3/common/file.c 100444 24732 0 44353 6205174255 132770ustar00majawheel/* * 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 #endif #if defined(__bsdi__) #define NOAOUT #endif #if defined(__FreeBSD__) #include #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%%%*/ mopd-2.5.3/common/file.h 100444 24732 0 6010 6204145461 132440ustar00majawheel/* * 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_ mopd-2.5.3/common/get.c 100444 24732 0 7060 6127552210 131030ustar00majawheel/* * 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 #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); } mopd-2.5.3/common/get.h 100444 24732 0 4761 6035037147 131220ustar00majawheel/* * 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_ mopd-2.5.3/common/loop-bsd.c 100444 24732 0 11016 6205174447 140700ustar00majawheel/* * 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 #include #include #if defined(__bsdi__) || defined(__FreeBSD__) #include #endif #include #include #include #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); } } } } mopd-2.5.3/common/mopdef.c 100444 24732 0 4426 6034014135 135750ustar00majawheel/* * 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]); } mopd-2.5.3/common/mopdef.h 100444 24732 0 21401 6037274461 136270ustar00majawheel/* * 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_ mopd-2.5.3/common/nma.c 100444 24732 0 21543 6032522545 131240ustar00majawheel/* * 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 #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); } mopd-2.5.3/common/nma.h 100444 24732 0 3626 6032522542 131100ustar00majawheel/* * 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_ mopd-2.5.3/common/nmadef.h 100444 24732 0 22053 6000304123 135660ustar00majawheel/* * 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_ mopd-2.5.3/common/os.h 100444 24732 0 4142 6010737112 127450ustar00majawheel/* * 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define DEV_NEW_CONF #endif _OS_H_ mopd-2.5.3/common/pf.c 100444 24732 0 14611 6201652253 127520ustar00majawheel/* * 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #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); } mopd-2.5.3/common/pf.h 100444 24732 0 4545 6037537221 127500ustar00majawheel/* * 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_ mopd-2.5.3/common/print.c 100444 24732 0 40276 6205174522 135110ustar00majawheel/* * 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 #include #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); } } mopd-2.5.3/common/print.h 100444 24732 0 5335 6037537300 134730ustar00majawheel/* * 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_ mopd-2.5.3/common/put.c 100444 24732 0 11274 6205174603 131610ustar00majawheel/* * 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 #include #include #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; } } mopd-2.5.3/common/put.h 100444 24732 0 5040 6034747461 131500ustar00majawheel/* * 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_ mopd-2.5.3/common/rc.c 100444 24732 0 21141 6037536537 127620ustar00majawheel/* * 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; } } mopd-2.5.3/common/rc.h 100444 24732 0 3600 6037536543 127440ustar00majawheel/* * 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_ mopd-2.5.3/mopa.out/Makefile 100444 24732 0 317 6205174744 140610ustar00majawheel # $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 mopd-2.5.3/mopa.out/mopa.out.1 100444 24732 0 4361 6204144742 142620ustar00majawheel.\" .\" 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. mopd-2.5.3/mopa.out/mopa.out.c 100444 24732 0 11617 6205175007 143650ustar00majawheel /* 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 #endif #if defined(__FreeBSD__) #include #endif #if defined(__bsdi__) #include #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); } mopd-2.5.3/mopchk/Makefile 100444 24732 0 1115 6205175116 136070ustar00majawheel# $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 mopd-2.5.3/mopchk/mopchk.1 100444 24732 0 4615 6203461711 135170ustar00majawheel.\" .\" 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). mopd-2.5.3/mopchk/mopchk.c 100444 24732 0 10576 6205175163 136310ustar00majawheel/* * 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; { } mopd-2.5.3/mopd/Makefile 100444 24732 0 1200 6205173752 132640ustar00majawheel# $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 mopd-2.5.3/mopd/TODO 100644 24732 0 57 6203462466 122700ustar00majawheelChange code to send hostname instead of 'ipc'. mopd-2.5.3/mopd/mopd.8 100444 24732 0 7104 6204337372 126640ustar00majawheel.\" .\" 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). mopd-2.5.3/mopd/mopd.c 100444 24732 0 13406 6127555434 127660ustar00majawheel/* * 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; } } mopd-2.5.3/mopd/process.c 100444 24732 0 36105 6207111732 134720ustar00majawheel/* * 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; } } mopd-2.5.3/mopd/process.h 100444 24732 0 4327 6034224540 134600ustar00majawheel/* * 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_ mopd-2.5.3/mopprobe/Makefile 100444 24732 0 1121 6205175314 141460ustar00majawheel# $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 mopd-2.5.3/mopprobe/mopprobe.1 100444 24732 0 4654 6203463434 144320ustar00majawheel.\" .\" 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). mopd-2.5.3/mopprobe/mopprobe.c 100444 24732 0 15341 6203457517 145340ustar00majawheel/* * 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); } } mopd-2.5.3/moptrace/Makefile 100444 24732 0 1164 6205175367 141540ustar00majawheel# $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 mopd-2.5.3/moptrace/moptrace.1 100444 24732 0 5364 6203463650 144070ustar00majawheel.\" .\" 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). mopd-2.5.3/moptrace/moptrace.c 100444 24732 0 10400 6202216444 144700ustar00majawheel/* * 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); } mopd-2.5.3/otherOS/Makefile 100444 24732 0 12173 6204146377 137450ustar00majawheel# 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 mopd-2.5.3/otherOS/loop.c 100444 24732 0 7514 6202225570 133740ustar00majawheel/* * 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); } } } } mopd-2.5.3/otherOS/mdtype 100555 24732 0 1573 6201635016 135050ustar00majawheel#!/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 mopd-2.5.3/otherOS/os-sunos4.h 100444 24732 0 4102 6207112201 142570ustar00majawheel/* * 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 #define FILENAME_MAX 255 /* SunOS 4 is missing it */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef int ssize_t; mopd-2.5.3/otherOS/ostype 100555 24732 0 715 6201635022 135000ustar00majawheel#!/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 mopd-2.5.3/otherOS/pf-snit.c 100444 24732 0 16152 6202352042 140140ustar00majawheel/* * 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 #include #include #include #include #include #include #include #define DEV_NIT "/dev/nit" #include #include #include #include #include #include #include #include #include #include #include #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); }