slirp: Enable slirp debugging using XQ DEBUG=ETH
This commit is contained in:
parent
ab8151cdcc
commit
40a3e8b635
3 changed files with 14 additions and 10 deletions
|
@ -1805,7 +1805,7 @@ dev->throttle_mask = (1 << dev->throttle_burst) - 1;
|
||||||
return SCPE_OK;
|
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;
|
int bufsz = (BUFSIZ < ETH_MAX_PACKET) ? ETH_MAX_PACKET : BUFSIZ;
|
||||||
|
|
||||||
|
@ -1924,7 +1924,7 @@ else { /* !tap: */
|
||||||
else { /* !vde: */
|
else { /* !vde: */
|
||||||
if (0 == strncmp("nat:", savname, 4)) {
|
if (0 == strncmp("nat:", savname, 4)) {
|
||||||
#if defined(HAVE_SLIRP_NETWORK)
|
#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);
|
strncpy(errbuf, strerror(errno), PCAP_ERRBUF_SIZE-1);
|
||||||
else {
|
else {
|
||||||
*eth_api = ETH_API_NAT;
|
*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]) {
|
if (errbuf[0]) {
|
||||||
sim_printf ("Eth: open error - %s\r\n", errbuf);
|
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);
|
_eth_close_port(dev->eth_api, (pcap_t *)dev->handle, dev->fd_handle);
|
||||||
sim_os_sleep (ETH_ERROR_REOPEN_PAUSE);
|
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;
|
dev->error_needs_reset = FALSE;
|
||||||
if (r == SCPE_OK)
|
if (r == SCPE_OK)
|
||||||
sim_printf ("%s ReOpened: %s \n", msg, dev->name);
|
sim_printf ("%s ReOpened: %s \n", msg, dev->name);
|
||||||
|
|
|
@ -144,9 +144,11 @@ struct sim_slirp {
|
||||||
pthread_mutex_t write_buffer_lock;
|
pthread_mutex_t write_buffer_lock;
|
||||||
void *opaque; /* opaque value passed during packet delivery */
|
void *opaque; /* opaque value passed during packet delivery */
|
||||||
packet_callback callback; /* slirp arriving packet delivery callback */
|
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));
|
SLIRP *slirp = (SLIRP *)g_malloc0(sizeof(*slirp));
|
||||||
char *targs = g_strdup (args);
|
char *targs = g_strdup (args);
|
||||||
|
@ -294,6 +296,8 @@ else {
|
||||||
pfd.fd = slirp->db_chime;
|
pfd.fd = slirp->db_chime;
|
||||||
pfd.events = G_IO_IN;
|
pfd.events = G_IO_IN;
|
||||||
g_array_append_val(slirp->gpollfds, pfd);
|
g_array_append_val(slirp->gpollfds, pfd);
|
||||||
|
slirp->dbit = dbit;
|
||||||
|
slirp->dptr = dptr;
|
||||||
|
|
||||||
sim_slirp_show(slirp, stdout);
|
sim_slirp_show(slirp, stdout);
|
||||||
if (sim_log && (sim_log != stdout))
|
if (sim_log && (sim_log != stdout))
|
||||||
|
@ -514,14 +518,14 @@ if (select_ret) {
|
||||||
/* consume the doorbell wakeup ring */
|
/* consume the doorbell wakeup ring */
|
||||||
recv (slirp->db_chime, buf, sizeof (buf), 0);
|
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; i<nfds+1; i++) {
|
for (i=0; i<nfds+1; i++) {
|
||||||
if (FD_ISSET(i, &rfds) || FD_ISSET(i, &save_rfds))
|
if (FD_ISSET(i, &rfds) || FD_ISSET(i, &save_rfds))
|
||||||
fprintf (stderr, "%d: save_rfd=%d, rfd=%d\r\n", i, FD_ISSET(i, &save_rfds), FD_ISSET(i, &rfds));
|
sim_debug (slirp->dbit, 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))
|
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))
|
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 */
|
return select_ret + 1; /* Force dispatch even on timeout */
|
||||||
|
|
|
@ -8,7 +8,7 @@ typedef struct sim_slirp SLIRP;
|
||||||
|
|
||||||
typedef void (*packet_callback)(void *opaque, const unsigned char *buf, int len);
|
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);
|
void sim_slirp_close (SLIRP *slirp);
|
||||||
int sim_slirp_send (SLIRP *slirp, const char *msg, size_t len, int flags);
|
int sim_slirp_send (SLIRP *slirp, const char *msg, size_t len, int flags);
|
||||||
int sim_slirp_select (SLIRP *slirp, int ms_timeout);
|
int sim_slirp_select (SLIRP *slirp, int ms_timeout);
|
||||||
|
|
Loading…
Add table
Reference in a new issue