diff options
author | thorpej <thorpej@pkgsrc.org> | 2002-10-19 21:38:09 +0000 |
---|---|---|
committer | thorpej <thorpej@pkgsrc.org> | 2002-10-19 21:38:09 +0000 |
commit | 18ac973de01e786f570bd4575c83ca74ed94365a (patch) | |
tree | 927a3be0dbbeb82fb4b940524fb48e5a42f08bad /emulators/simh/patches | |
parent | d7ca9840df5e94aa9fe346ac5a40db7ac1fd3190 (diff) | |
download | pkgsrc-18ac973de01e786f570bd4575c83ca74ed94365a.tar.gz |
Add David Hittner's DELQA/DEQNA Ethernet module for SIMH (PDP11 and
VAX). Patches for the sim_ether module to support NetBSD, and a bug
fix to the XQ module from me (both patches sent to author).
Bump package revision to nb1.
NOTE: To work, this requires a patch to libpcap recently posted to
tech-net.
Diffstat (limited to 'emulators/simh/patches')
-rw-r--r-- | emulators/simh/patches/patch-aa | 24 | ||||
-rw-r--r-- | emulators/simh/patches/patch-ab | 137 | ||||
-rw-r--r-- | emulators/simh/patches/patch-ac | 17 |
3 files changed, 178 insertions, 0 deletions
diff --git a/emulators/simh/patches/patch-aa b/emulators/simh/patches/patch-aa new file mode 100644 index 00000000000..e11d2183feb --- /dev/null +++ b/emulators/simh/patches/patch-aa @@ -0,0 +1,24 @@ +$NetBSD: patch-aa,v 1.4 2002/10/19 21:38:10 thorpej Exp $ + +--- Makefile.orig Sat Oct 19 14:23:26 2002 ++++ Makefile Sat Oct 19 14:24:16 2002 +@@ -3,8 +3,8 @@ + # Note: -O2 is sometimes broken in GCC when setjump/longjump is being + # used. Try -O2 only with released simulators. + # +-CC = gcc -O2 -lm -I . +-#CC = gcc -O2 -g -lm -I . ++CC = gcc -O2 -lm -lpcap -I . ++#CC = gcc -O2 -g -lm -lpcap -I . + + + +@@ -12,7 +12,7 @@ + # Common Libraries + # + BIN = BIN/ +-SIM = scp.c scp_tty.c sim_sock.c sim_tmxr.c ++SIM = scp.c scp_tty.c sim_ether.c sim_sock.c sim_tmxr.c + + + diff --git a/emulators/simh/patches/patch-ab b/emulators/simh/patches/patch-ab new file mode 100644 index 00000000000..3b72d453cd1 --- /dev/null +++ b/emulators/simh/patches/patch-ab @@ -0,0 +1,137 @@ +$NetBSD: patch-ab,v 1.1 2002/10/19 21:38:10 thorpej Exp $ + +--- sim_ether.c.orig Sat Oct 19 14:26:01 2002 ++++ sim_ether.c Sat Oct 19 14:26:10 2002 +@@ -70,6 +70,7 @@ + msg, dst, src, *proto, packet->len); + } + ++#ifndef __NetBSD__ + char* eth_getname(int number, char* name) + { + #define ETH_SUPPORTED_DEVICES 10 +@@ -80,6 +81,7 @@ + strcpy(name, list[number].name); + return name; + } ++#endif /* ! __NetBSD__ */ + + void eth_zero(ETH_DEV* dev) + { +@@ -89,7 +91,7 @@ + + /* First, all the non-implemented versions */ + +-#if !defined (WIN32) && !defined(linux) ++#if !defined (WIN32) && !defined(linux) && !defined(__NetBSD__) + t_stat eth_open (ETH_DEV* dev, char* name) + {return SCPE_NOFNC;} + t_stat eth_close (ETH_DEV* dev) +@@ -110,9 +112,13 @@ + #ifdef WIN32 + #include <packet32.h> + #endif /*WIN32*/ +-#ifdef linux ++#ifdef __NetBSD__ ++#include <sys/ioctl.h> ++#include <net/bpf.h> ++#endif /* __NetBSD__ */ ++#if defined(linux) || defined(__NetBSD__) + #include <fcntl.h> +-#endif /*linux*/ ++#endif /*linux || __NetBSD__*/ + + t_stat eth_open(ETH_DEV* dev, char* name) + { +@@ -124,22 +130,34 @@ + /* initialize device */ + eth_zero(dev); + ++#ifndef __NetBSD__ + /* translate name of type "ethX" */ + if ((strlen(name) == 4) && isdigit(name[3])) { + num = atoi(&name[3]); + savname = eth_getname(num, temp); + } ++#endif /* ! __NetBSD__ */ + + /* attempt to connect device */ +- dev->handle = (void*) pcap_open_live(savname, BUFSIZ, ETH_PROMISC, /*ETH_TIMEOUT*/-1, errbuf); ++ dev->handle = (void*) pcap_open_live(savname, ETH_MAX_PACKET, ETH_PROMISC, /*ETH_TIMEOUT*/-1, errbuf); + +- if (!dev->handle) return SCPE_OPENERR; /* can't open device */ ++ if (!dev->handle) { ++ printf("pcap_open_live: %s\n", errbuf); ++ return SCPE_OPENERR; /* can't open device */ ++ } + + /* save name of device */ + dev->name = malloc(strlen(savname)+1); + strcpy(dev->name, savname); + +-#ifdef linux ++#ifdef __NetBSD__ ++ /* tell the kernel that the header is fully-formed when it gets it. this ++ is required in order to fake the src address. */ ++ i = 1; ++ ioctl(pcap_fileno(dev->handle), BIOCSHDRCMPLT, &i); ++#endif /* __NetBSD__ */ ++ ++#if defined(linux) || defined(__NetBSD__) + /* set file non-blocking */ + fcntl(pcap_fileno(dev->handle), F_SETFL, fcntl(pcap_fileno(dev->handle), F_GETFL, 0) | O_NONBLOCK); + #endif /*linux*/ +@@ -373,4 +391,53 @@ + + #endif /*linux*/ + ++#ifdef __NetBSD__ ++ ++#include <sys/types.h> ++#include <sys/socket.h> ++#include <net/if_dl.h> ++#include <net/if_types.h> ++#include <ifaddrs.h> ++#include <string.h> ++ ++int pcap_sendpacket(pcap_t* handle, u_char* msg, int len) ++{ ++ return (write(pcap_fileno(handle), msg, len) == len)?0:-1; ++} ++ ++int PacketGetAdapterNames(char* buffer, int* size) ++{ ++ const struct sockaddr_dl *sdl; ++ struct ifaddrs *ifap, *ifa; ++ char *p; ++ int ptr = 0; ++ ++ if (getifaddrs(&ifap) != 0) { ++ *size = 0; ++ return (0); ++ } ++ ++ p = NULL; ++ for (ifa = ifap; ifa; ifa = ifa->ifa_next) { ++ if (ifa->ifa_addr->sa_family != AF_LINK) ++ continue; ++ if (p && strcmp(p, ifa->ifa_name) == 0) ++ continue; ++ sdl = (const struct sockaddr_dl *) ifa->ifa_addr; ++ if (sdl->sdl_type != IFT_ETHER) ++ continue; ++ ++ strcpy(buffer+ptr, ifa->ifa_name); ++ ptr += strlen(ifa->ifa_name)+1; ++ } ++ ++ freeifaddrs(ifap); ++ ++ buffer[ptr++] = '\0'; ++ buffer[ptr++] = '\0'; ++ *size = ptr; ++ ++ return (ptr); ++} + ++#endif /* __NetBSD__ */ diff --git a/emulators/simh/patches/patch-ac b/emulators/simh/patches/patch-ac new file mode 100644 index 00000000000..13f5904c89e --- /dev/null +++ b/emulators/simh/patches/patch-ac @@ -0,0 +1,17 @@ +$NetBSD: patch-ac,v 1.1 2002/10/19 21:38:10 thorpej Exp $ + +*** PDP11/pdp11_xq.c.orig Sat Oct 19 14:29:44 2002 +--- PDP11/pdp11_xq.c Sat Oct 19 14:30:00 2002 +*************** +*** 766,771 **** +--- 766,775 ---- + if (xq.xbdl_buf[1] & XQ_DSC_H) b_length -= 1; + if (xq.xbdl_buf[1] & XQ_DSC_L) b_length -= 1; + ++ /* protect ourselves from a broken device driver... */ ++ if ((xq.write_buffer.len + b_length) > sizeof(xq.write_buffer.msg)) ++ b_length = sizeof(xq.write_buffer.msg) - xq.write_buffer.len; ++ + /* add to transmit buffer */ + Map_ReadB(address, b_length, &xq.write_buffer.msg[xq.write_buffer.len], NOMAP); + xq.write_buffer.len += b_length; |