On 5/19/07, Blue Swirl <[EMAIL PROTECTED]> wrote:
On 5/19/07, Mark Glines <[EMAIL PROTECTED]> wrote:
> The weird thing is, when I add "-net nic,model=lance" to my command line
> right before "-net user", the crash does not occur.  I kinda assumed from
> the above backtrace that the lance driver was selected on sparc32 by
> default...

This patch fixes the crash. But I'm not convinced it's the right one,
perhaps the default net parameter logic could be improved instead:
   /* init network clients */
   if (nb_net_clients == 0) {
       /* if no clients, we use a default config */
       pstrcpy(net_clients[0], sizeof(net_clients[0]),
               "nic");
       pstrcpy(net_clients[1], sizeof(net_clients[0]),
               "user");
       nb_net_clients = 2;
   }

Also one of the network options could be a black hole kind of device,
such that unlike the "none" type, the device exists, it just can't
send or receive anything.
Index: qemu/hw/sun4m.c
===================================================================
--- qemu.orig/hw/sun4m.c	2007-05-19 18:36:33.000000000 +0000
+++ qemu/hw/sun4m.c	2007-05-19 18:40:39.000000000 +0000
@@ -304,15 +304,13 @@
     }
     tcx_init(ds, hwdef->tcx_base, phys_ram_base + ram_size, ram_size,
              hwdef->vram_size, graphic_width, graphic_height, graphic_depth);
-    if (nd_table[0].vlan) {
-        if (nd_table[0].model == NULL
-            || strcmp(nd_table[0].model, "lance") == 0) {
-            main_lance = lance_init(&nd_table[0], hwdef->le_base, dma,
-                                    slavio_irq[hwdef->le_irq]);
-        } else {
-            fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd_table[0].model);
-            exit (1);
-        }
+    if (nd_table[0].model == NULL
+        || strcmp(nd_table[0].model, "lance") == 0) {
+        main_lance = lance_init(&nd_table[0], hwdef->le_base, dma,
+                                slavio_irq[hwdef->le_irq]);
+    } else {
+        fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd_table[0].model);
+        exit (1);
     }
     nvram = m48t59_init(slavio_irq[0], hwdef->nvram_base, 0,
                         hwdef->nvram_size, 8);
Index: qemu/hw/pcnet.c
===================================================================
--- qemu.orig/hw/pcnet.c	2007-05-19 18:37:57.000000000 +0000
+++ qemu/hw/pcnet.c	2007-05-19 18:50:52.000000000 +0000
@@ -1267,7 +1267,8 @@
             if (CSR_LOOP(s))
                 pcnet_receive(s, s->buffer, s->xmit_pos);
             else
-                qemu_send_packet(s->vc, s->buffer, s->xmit_pos);
+                if (s->vc)
+                    qemu_send_packet(s->vc, s->buffer, s->xmit_pos);
 
             s->csr[0] &= ~0x0008;   /* clear TDMD */
             s->csr[4] |= 0x0004;    /* set TXSTRT */
@@ -1562,7 +1563,8 @@
 
     /* Initialize the PROM */
 
-    memcpy(s->prom, s->nd->macaddr, 6);
+    if (s->nd)
+        memcpy(s->prom, s->nd->macaddr, 6);
     s->prom[12] = s->prom[13] = 0x00;
     s->prom[14] = s->prom[15] = 0x57;
 
@@ -1898,18 +1900,21 @@
 
     d->nd = nd;
 
-    d->vc = qemu_new_vlan_client(nd->vlan, pcnet_receive, 
-                                 pcnet_can_receive, d);
-    
-    snprintf(d->vc->info_str, sizeof(d->vc->info_str),
-             "pcnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
-             d->nd->macaddr[0],
-             d->nd->macaddr[1],
-             d->nd->macaddr[2],
-             d->nd->macaddr[3],
-             d->nd->macaddr[4],
-             d->nd->macaddr[5]);
-
+    if (nd && nd->vlan) {
+        d->vc = qemu_new_vlan_client(nd->vlan, pcnet_receive,
+                                     pcnet_can_receive, d);
+
+        snprintf(d->vc->info_str, sizeof(d->vc->info_str),
+                 "pcnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
+                 d->nd->macaddr[0],
+                 d->nd->macaddr[1],
+                 d->nd->macaddr[2],
+                 d->nd->macaddr[3],
+                 d->nd->macaddr[4],
+                 d->nd->macaddr[5]);
+    } else {
+        d->vc = NULL;
+    }
     pcnet_h_reset(d);
     register_savevm("pcnet", 0, 2, pcnet_save, pcnet_load, d);
 }

Reply via email to