diff --git a/sim_ether.c b/sim_ether.c index 5a19e349..27325791 100644 --- a/sim_ether.c +++ b/sim_ether.c @@ -1805,7 +1805,7 @@ dev->throttle_mask = (1 << dev->throttle_burst) - 1; return SCPE_OK; } -static t_stat _eth_open_port(char *savname, int *eth_api, void **handle, SOCKET *fd_handle, char errbuf[PCAP_ERRBUF_SIZE], char *bpf_filter, void *opaque) +static t_stat _eth_open_port(char *savname, int *eth_api, void **handle, SOCKET *fd_handle, char errbuf[PCAP_ERRBUF_SIZE], char *bpf_filter, void *opaque, DEVICE *dptr, uint32 dbit) { int bufsz = (BUFSIZ < ETH_MAX_PACKET) ? ETH_MAX_PACKET : BUFSIZ; @@ -1924,7 +1924,7 @@ else { /* !tap: */ else { /* !vde: */ if (0 == strncmp("nat:", savname, 4)) { #if defined(HAVE_SLIRP_NETWORK) - if (!(*handle = (void*) sim_slirp_open(savname+4, opaque, &_slirp_callback))) + if (!(*handle = (void*) sim_slirp_open(savname+4, opaque, &_slirp_callback, dptr, dbit))) strncpy(errbuf, strerror(errno), PCAP_ERRBUF_SIZE-1); else { *eth_api = ETH_API_NAT; @@ -2081,7 +2081,7 @@ else { } } -r = _eth_open_port(savname, &dev->eth_api, &dev->handle, &dev->fd_handle, errbuf, NULL, (void *)dev); +r = _eth_open_port(savname, &dev->eth_api, &dev->handle, &dev->fd_handle, errbuf, NULL, (void *)dev, dptr, dbit); if (errbuf[0]) { sim_printf ("Eth: open error - %s\r\n", errbuf); @@ -2462,7 +2462,7 @@ if (dev->error_needs_reset) { _eth_close_port(dev->eth_api, (pcap_t *)dev->handle, dev->fd_handle); sim_os_sleep (ETH_ERROR_REOPEN_PAUSE); - r = _eth_open_port(dev->name, &dev->eth_api, &dev->handle, &dev->fd_handle, errbuf, dev->bpf_filter, (void *)dev); + r = _eth_open_port(dev->name, &dev->eth_api, &dev->handle, &dev->fd_handle, errbuf, dev->bpf_filter, (void *)dev, dev->dptr, dev->dbit); dev->error_needs_reset = FALSE; if (r == SCPE_OK) sim_printf ("%s ReOpened: %s \n", msg, dev->name); diff --git a/slirp/simh/sim_slirp.c b/slirp/simh/sim_slirp.c index 3780e94d..d3fd45fd 100644 --- a/slirp/simh/sim_slirp.c +++ b/slirp/simh/sim_slirp.c @@ -144,9 +144,11 @@ struct sim_slirp { pthread_mutex_t write_buffer_lock; void *opaque; /* opaque value passed during packet delivery */ packet_callback callback; /* slirp arriving packet delivery callback */ + DEVICE *dptr; + uint32 dbit; }; -SLIRP *sim_slirp_open (const char *args, void *opaque, packet_callback callback) +SLIRP *sim_slirp_open (const char *args, void *opaque, packet_callback callback, DEVICE *dptr, uint32 dbit) { SLIRP *slirp = (SLIRP *)g_malloc0(sizeof(*slirp)); char *targs = g_strdup (args); @@ -294,6 +296,8 @@ else { pfd.fd = slirp->db_chime; pfd.events = G_IO_IN; g_array_append_val(slirp->gpollfds, pfd); + slirp->dbit = dbit; + slirp->dptr = dptr; sim_slirp_show(slirp, stdout); if (sim_log && (sim_log != stdout)) @@ -514,14 +518,14 @@ if (select_ret) { /* consume the doorbell wakeup ring */ recv (slirp->db_chime, buf, sizeof (buf), 0); } - fprintf (stderr, "Select returned %d\r\n", select_ret); + sim_debug (slirp->dbit, slirp->dptr, "Select returned %d\r\n", select_ret); for (i=0; idbit, slirp->dptr, "%d: save_rfd=%d, rfd=%d\r\n", i, FD_ISSET(i, &save_rfds), FD_ISSET(i, &rfds)); if (FD_ISSET(i, &wfds) || FD_ISSET(i, &save_wfds)) - fprintf (stderr, "%d: save_wfd=%d, wfd=%d\r\n", i, FD_ISSET(i, &save_wfds), FD_ISSET(i, &wfds)); + sim_debug (slirp->dbit, slirp->dptr, "%d: save_wfd=%d, wfd=%d\r\n", i, FD_ISSET(i, &save_wfds), FD_ISSET(i, &wfds)); if (FD_ISSET(i, &xfds) || FD_ISSET(i, &save_xfds)) - fprintf (stderr, "%d: save_xfd=%d, xfd=%d\r\n", i, FD_ISSET(i, &save_xfds), FD_ISSET(i, &xfds)); + sim_debug (slirp->dbit, slirp->dptr, "%d: save_xfd=%d, xfd=%d\r\n", i, FD_ISSET(i, &save_xfds), FD_ISSET(i, &xfds)); } } return select_ret + 1; /* Force dispatch even on timeout */ diff --git a/slirp/simh/sim_slirp.h b/slirp/simh/sim_slirp.h index 7d16e395..00493ff3 100644 --- a/slirp/simh/sim_slirp.h +++ b/slirp/simh/sim_slirp.h @@ -8,7 +8,7 @@ typedef struct sim_slirp SLIRP; typedef void (*packet_callback)(void *opaque, const unsigned char *buf, int len); -SLIRP *sim_slirp_open (const char *args, void *opaque, packet_callback callback); +SLIRP *sim_slirp_open (const char *args, void *opaque, packet_callback callback, DEVICE *dptr, uint32 dbit); void sim_slirp_close (SLIRP *slirp); int sim_slirp_send (SLIRP *slirp, const char *msg, size_t len, int flags); int sim_slirp_select (SLIRP *slirp, int ms_timeout);