ETHER: Fix fault when parsing bad NAT: parameters adding better error reporting
This commit is contained in:
parent
7398e63b00
commit
108291b3d4
3 changed files with 15 additions and 15 deletions
|
@ -1572,10 +1572,10 @@ static void eth_get_nic_hw_addr(ETH_DEV* dev, const char *devname)
|
|||
|
||||
memset(command, 0, sizeof(command));
|
||||
/* try to force an otherwise unused interface to be turned on */
|
||||
snprintf(command, sizeof(command)-1, "ifconfig %s up", devname);
|
||||
snprintf(command, sizeof(command)-1, "ifconfig %.*s up", (int)(sizeof(command) - 14), devname);
|
||||
(void)system(command);
|
||||
for (i=0; patterns[i] && (0 == dev->have_host_nic_phy_addr); ++i) {
|
||||
snprintf(command, sizeof(command)-1, "ifconfig %s | %s >NIC.hwaddr", devname, patterns[i]);
|
||||
snprintf(command, sizeof(command)-1, "ifconfig %.*s | %s >NIC.hwaddr", (int)(sizeof(command) - (26 + strlen(patterns[i]))), devname, patterns[i]);
|
||||
(void)system(command);
|
||||
if (NULL != (f = fopen("NIC.hwaddr", "r"))) {
|
||||
while (0 == dev->have_host_nic_phy_addr) {
|
||||
|
@ -2118,7 +2118,7 @@ else { /* !tap: */
|
|||
|
||||
while (isspace(*devname))
|
||||
++devname;
|
||||
if (!(*handle = (void*) sim_slirp_open(devname, opaque, &_slirp_callback, dptr, dbit)))
|
||||
if (!(*handle = (void*) sim_slirp_open(devname, opaque, &_slirp_callback, dptr, dbit, errbuf, PCAP_ERRBUF_SIZE)))
|
||||
strlcpy(errbuf, strerror(errno), PCAP_ERRBUF_SIZE);
|
||||
else {
|
||||
*eth_api = ETH_API_NAT;
|
||||
|
|
|
@ -172,7 +172,7 @@ uint32 slirp_dbit;
|
|||
}
|
||||
#endif
|
||||
|
||||
SLIRP *sim_slirp_open (const char *args, void *opaque, packet_callback callback, DEVICE *dptr, uint32 dbit)
|
||||
SLIRP *sim_slirp_open (const char *args, void *opaque, packet_callback callback, DEVICE *dptr, uint32 dbit, char *errbuf, size_t errbuf_size)
|
||||
{
|
||||
SLIRP *slirp = (SLIRP *)g_malloc0(sizeof(*slirp));
|
||||
char *targs = g_strdup (args);
|
||||
|
@ -191,6 +191,7 @@ slirp->maskbits = 24;
|
|||
slirp->dhcpmgmt = 1;
|
||||
slirp->db_chime = INVALID_SOCKET;
|
||||
inet_aton(DEFAULT_IP_ADDR,&slirp->vgateway);
|
||||
pthread_mutex_init (&slirp->write_buffer_lock, NULL);
|
||||
|
||||
err = 0;
|
||||
while (*tptr && !err) {
|
||||
|
@ -209,7 +210,7 @@ while (*tptr && !err) {
|
|||
if (cptr && *cptr)
|
||||
slirp->tftp_path = g_strdup (cptr);
|
||||
else {
|
||||
sim_printf ("Missing TFTP Path\n");
|
||||
strlcpy (errbuf, "Missing TFTP Path", errbuf_size);
|
||||
err = 1;
|
||||
}
|
||||
continue;
|
||||
|
@ -218,7 +219,7 @@ while (*tptr && !err) {
|
|||
if (cptr && *cptr)
|
||||
slirp->boot_file = g_strdup (cptr);
|
||||
else {
|
||||
sim_printf ("Missing DHCP Boot file name\n");
|
||||
strlcpy (errbuf, "Missing DHCP Boot file name", errbuf_size);
|
||||
err = 1;
|
||||
}
|
||||
continue;
|
||||
|
@ -228,7 +229,7 @@ while (*tptr && !err) {
|
|||
if (cptr && *cptr)
|
||||
inet_aton (cptr, &slirp->vnameserver);
|
||||
else {
|
||||
sim_printf ("Missing nameserver\n");
|
||||
strlcpy (errbuf, "Missing nameserver", errbuf_size);
|
||||
err = 1;
|
||||
}
|
||||
continue;
|
||||
|
@ -253,7 +254,7 @@ while (*tptr && !err) {
|
|||
} while (name && *name);
|
||||
}
|
||||
else {
|
||||
sim_printf ("Missing DNS search list\n");
|
||||
strlcpy (errbuf, "Missing DNS search list", errbuf_size);
|
||||
err = 1;
|
||||
}
|
||||
continue;
|
||||
|
@ -266,7 +267,7 @@ while (*tptr && !err) {
|
|||
inet_aton (abuf, &slirp->vgateway);
|
||||
}
|
||||
else {
|
||||
sim_printf ("Missing host\n");
|
||||
strlcpy (errbuf, "Missing host", errbuf_size);
|
||||
err = 1;
|
||||
}
|
||||
continue;
|
||||
|
@ -279,7 +280,7 @@ while (*tptr && !err) {
|
|||
inet_aton (abuf, &slirp->vnetwork);
|
||||
}
|
||||
else {
|
||||
sim_printf ("Missing network\n");
|
||||
strlcpy (errbuf, "Missing network", errbuf_size);
|
||||
err = 1;
|
||||
}
|
||||
continue;
|
||||
|
@ -292,7 +293,7 @@ while (*tptr && !err) {
|
|||
if (cptr && *cptr)
|
||||
err = _parse_redirect_port (&slirp->rtcp, cptr, IS_UDP);
|
||||
else {
|
||||
sim_printf ("Missing UDP port mapping\n");
|
||||
strlcpy (errbuf, "Missing UDP port mapping", errbuf_size);
|
||||
err = 1;
|
||||
}
|
||||
continue;
|
||||
|
@ -301,12 +302,12 @@ while (*tptr && !err) {
|
|||
if (cptr && *cptr)
|
||||
err = _parse_redirect_port (&slirp->rtcp, cptr, IS_TCP);
|
||||
else {
|
||||
sim_printf ("Missing TCP port mapping\n");
|
||||
strlcpy (errbuf, "Missing TCP port mapping", errbuf_size);
|
||||
err = 1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
sim_printf ("Unexpected NAT argument: %s\n", gbuf);
|
||||
snprintf (errbuf, errbuf_size - 1, "Unexpected NAT argument: %s", gbuf);
|
||||
err = 1;
|
||||
}
|
||||
if (err) {
|
||||
|
@ -337,7 +338,6 @@ else {
|
|||
GPollFD pfd;
|
||||
int64_t rnd_val = qemu_clock_get_ns ((QEMUClockType)0) / 1000000;
|
||||
|
||||
pthread_mutex_init (&slirp->write_buffer_lock, NULL);
|
||||
slirp->gpollfds = g_array_new(FALSE, FALSE, sizeof(GPollFD));
|
||||
/* setup transmit packet wakeup doorbell */
|
||||
do {
|
||||
|
|
|
@ -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, DEVICE *dptr, uint32 dbit);
|
||||
SLIRP *sim_slirp_open (const char *args, void *opaque, packet_callback callback, DEVICE *dptr, uint32 dbit, char *errbuf, size_t errbuf_size);
|
||||
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);
|
||||
|
|
Loading…
Add table
Reference in a new issue