Commit bf38c1a0e1d7ebbe0930d8926dbc499b88a2d7db

Authored by aliguori
1 parent f7b4a940

Add a model string to VLANClientState (Mark McLoughlin)

Don't lose track of what type/model a vlan client is so that we can
e.g. assign a global per-model id to clients.

The entire patch is basically a tedious excercise in making sure the
type/model string gets propagated down to qemu_new_vlan_client().

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6216 c046a42c-6fe2-441c-8c8c-71466251a162
hw/e1000.c
@@ -1071,8 +1071,8 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -1071,8 +1071,8 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn)
1071 d->rxbuf_min_shift = 1; 1071 d->rxbuf_min_shift = 1;
1072 memset(&d->tx, 0, sizeof d->tx); 1072 memset(&d->tx, 0, sizeof d->tx);
1073 1073
1074 - d->vc = qemu_new_vlan_client(nd->vlan, e1000_receive,  
1075 - e1000_can_receive, d); 1074 + d->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  1075 + e1000_receive, e1000_can_receive, d);
1076 1076
1077 snprintf(d->vc->info_str, sizeof(d->vc->info_str), 1077 snprintf(d->vc->info_str, sizeof(d->vc->info_str),
1078 "%s macaddr=%02x:%02x:%02x:%02x:%02x:%02x", info_str, 1078 "%s macaddr=%02x:%02x:%02x:%02x:%02x:%02x", info_str,
hw/eepro100.c
@@ -1776,7 +1776,8 @@ static void nic_init(PCIBus * bus, NICInfo * nd, @@ -1776,7 +1776,8 @@ static void nic_init(PCIBus * bus, NICInfo * nd,
1776 1776
1777 nic_reset(s); 1777 nic_reset(s);
1778 1778
1779 - s->vc = qemu_new_vlan_client(nd->vlan, nic_receive, nic_can_receive, s); 1779 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  1780 + nic_receive, nic_can_receive, s);
1780 1781
1781 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 1782 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
1782 "eepro100 pci macaddr=%02x:%02x:%02x:%02x:%02x:%02x", 1783 "eepro100 pci macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
hw/etraxfs_eth.c
@@ -572,7 +572,7 @@ void *etraxfs_eth_init(NICInfo *nd, CPUState *env, @@ -572,7 +572,7 @@ void *etraxfs_eth_init(NICInfo *nd, CPUState *env,
572 eth->ethregs = cpu_register_io_memory(0, eth_read, eth_write, eth); 572 eth->ethregs = cpu_register_io_memory(0, eth_read, eth_write, eth);
573 cpu_register_physical_memory (base, 0x5c, eth->ethregs); 573 cpu_register_physical_memory (base, 0x5c, eth->ethregs);
574 574
575 - eth->vc = qemu_new_vlan_client(nd->vlan, 575 + eth->vc = qemu_new_vlan_client(nd->vlan, nd->model,
576 eth_receive, eth_can_receive, eth); 576 eth_receive, eth_can_receive, eth);
577 577
578 return dma; 578 return dma;
hw/mcf_fec.c
@@ -452,7 +452,7 @@ void mcf_fec_init(NICInfo *nd, target_phys_addr_t base, qemu_irq *irq) @@ -452,7 +452,7 @@ void mcf_fec_init(NICInfo *nd, target_phys_addr_t base, qemu_irq *irq)
452 mcf_fec_writefn, s); 452 mcf_fec_writefn, s);
453 cpu_register_physical_memory(base, 0x400, iomemtype); 453 cpu_register_physical_memory(base, 0x400, iomemtype);
454 454
455 - s->vc = qemu_new_vlan_client(nd->vlan, mcf_fec_receive,  
456 - mcf_fec_can_receive, s); 455 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  456 + mcf_fec_receive, mcf_fec_can_receive, s);
457 memcpy(s->macaddr, nd->macaddr, 6); 457 memcpy(s->macaddr, nd->macaddr, 6);
458 } 458 }
hw/mipsnet.c
@@ -250,8 +250,8 @@ void mipsnet_init (int base, qemu_irq irq, NICInfo *nd) @@ -250,8 +250,8 @@ void mipsnet_init (int base, qemu_irq irq, NICInfo *nd)
250 s->irq = irq; 250 s->irq = irq;
251 s->nd = nd; 251 s->nd = nd;
252 if (nd && nd->vlan) { 252 if (nd && nd->vlan) {
253 - s->vc = qemu_new_vlan_client(nd->vlan, mipsnet_receive,  
254 - mipsnet_can_receive, s); 253 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  254 + mipsnet_receive, mipsnet_can_receive, s);
255 } else { 255 } else {
256 s->vc = NULL; 256 s->vc = NULL;
257 } 257 }
hw/musicpal.c
@@ -718,7 +718,8 @@ static void mv88w8618_eth_init(NICInfo *nd, uint32_t base, qemu_irq irq) @@ -718,7 +718,8 @@ static void mv88w8618_eth_init(NICInfo *nd, uint32_t base, qemu_irq irq)
718 if (!s) 718 if (!s)
719 return; 719 return;
720 s->irq = irq; 720 s->irq = irq;
721 - s->vc = qemu_new_vlan_client(nd->vlan, eth_receive, eth_can_receive, s); 721 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  722 + eth_receive, eth_can_receive, s);
722 iomemtype = cpu_register_io_memory(0, mv88w8618_eth_readfn, 723 iomemtype = cpu_register_io_memory(0, mv88w8618_eth_readfn,
723 mv88w8618_eth_writefn, s); 724 mv88w8618_eth_writefn, s);
724 cpu_register_physical_memory(base, MP_ETH_SIZE, iomemtype); 725 cpu_register_physical_memory(base, MP_ETH_SIZE, iomemtype);
hw/ne2000.c
@@ -741,8 +741,8 @@ void isa_ne2000_init(int base, qemu_irq irq, NICInfo *nd) @@ -741,8 +741,8 @@ void isa_ne2000_init(int base, qemu_irq irq, NICInfo *nd)
741 741
742 ne2000_reset(s); 742 ne2000_reset(s);
743 743
744 - s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive,  
745 - ne2000_can_receive, s); 744 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  745 + ne2000_receive, ne2000_can_receive, s);
746 746
747 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 747 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
748 "ne2000 macaddr=%02x:%02x:%02x:%02x:%02x:%02x", 748 "ne2000 macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
@@ -811,8 +811,8 @@ void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -811,8 +811,8 @@ void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn)
811 s->pci_dev = (PCIDevice *)d; 811 s->pci_dev = (PCIDevice *)d;
812 memcpy(s->macaddr, nd->macaddr, 6); 812 memcpy(s->macaddr, nd->macaddr, 6);
813 ne2000_reset(s); 813 ne2000_reset(s);
814 - s->vc = qemu_new_vlan_client(nd->vlan, ne2000_receive,  
815 - ne2000_can_receive, s); 814 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  815 + ne2000_receive, ne2000_can_receive, s);
816 816
817 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 817 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
818 "ne2000 pci macaddr=%02x:%02x:%02x:%02x:%02x:%02x", 818 "ne2000 pci macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
hw/pcnet.c
@@ -1936,8 +1936,8 @@ static void pcnet_common_init(PCNetState *d, NICInfo *nd, const char *info_str) @@ -1936,8 +1936,8 @@ static void pcnet_common_init(PCNetState *d, NICInfo *nd, const char *info_str)
1936 d->nd = nd; 1936 d->nd = nd;
1937 1937
1938 if (nd && nd->vlan) { 1938 if (nd && nd->vlan) {
1939 - d->vc = qemu_new_vlan_client(nd->vlan, pcnet_receive,  
1940 - pcnet_can_receive, d); 1939 + d->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  1940 + pcnet_receive, pcnet_can_receive, d);
1941 1941
1942 snprintf(d->vc->info_str, sizeof(d->vc->info_str), 1942 snprintf(d->vc->info_str, sizeof(d->vc->info_str),
1943 "pcnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x", 1943 "pcnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
hw/rtl8139.c
@@ -3438,8 +3438,8 @@ void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -3438,8 +3438,8 @@ void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn)
3438 s->pci_dev = (PCIDevice *)d; 3438 s->pci_dev = (PCIDevice *)d;
3439 memcpy(s->macaddr, nd->macaddr, 6); 3439 memcpy(s->macaddr, nd->macaddr, 6);
3440 rtl8139_reset(s); 3440 rtl8139_reset(s);
3441 - s->vc = qemu_new_vlan_client(nd->vlan, rtl8139_receive,  
3442 - rtl8139_can_receive, s); 3441 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  3442 + rtl8139_receive, rtl8139_can_receive, s);
3443 3443
3444 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 3444 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
3445 "rtl8139 pci macaddr=%02x:%02x:%02x:%02x:%02x:%02x", 3445 "rtl8139 pci macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
hw/smc91c111.c
@@ -704,7 +704,7 @@ void smc91c111_init(NICInfo *nd, uint32_t base, qemu_irq irq) @@ -704,7 +704,7 @@ void smc91c111_init(NICInfo *nd, uint32_t base, qemu_irq irq)
704 704
705 smc91c111_reset(s); 705 smc91c111_reset(s);
706 706
707 - s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive,  
708 - smc91c111_can_receive, s); 707 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  708 + smc91c111_receive, smc91c111_can_receive, s);
709 /* ??? Save/restore. */ 709 /* ??? Save/restore. */
710 } 710 }
hw/stellaris_enet.c
@@ -397,8 +397,8 @@ void stellaris_enet_init(NICInfo *nd, uint32_t base, qemu_irq irq) @@ -397,8 +397,8 @@ void stellaris_enet_init(NICInfo *nd, uint32_t base, qemu_irq irq)
397 memcpy(s->macaddr, nd->macaddr, 6); 397 memcpy(s->macaddr, nd->macaddr, 6);
398 398
399 if (nd->vlan) 399 if (nd->vlan)
400 - s->vc = qemu_new_vlan_client(nd->vlan, stellaris_enet_receive,  
401 - stellaris_enet_can_receive, s); 400 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  401 + stellaris_enet_receive, stellaris_enet_can_receive, s);
402 402
403 stellaris_enet_reset(s); 403 stellaris_enet_reset(s);
404 register_savevm("stellaris_enet", -1, 1, 404 register_savevm("stellaris_enet", -1, 1,
hw/usb-net.c
@@ -1453,7 +1453,7 @@ USBDevice *usb_net_init(NICInfo *nd) @@ -1453,7 +1453,7 @@ USBDevice *usb_net_init(NICInfo *nd)
1453 1453
1454 pstrcpy(s->dev.devname, sizeof(s->dev.devname), 1454 pstrcpy(s->dev.devname, sizeof(s->dev.devname),
1455 "QEMU USB Network Interface"); 1455 "QEMU USB Network Interface");
1456 - s->vc = qemu_new_vlan_client(nd->vlan, 1456 + s->vc = qemu_new_vlan_client(nd->vlan, nd->model,
1457 usbnet_receive, usbnet_can_receive, s); 1457 usbnet_receive, usbnet_can_receive, s);
1458 1458
1459 snprintf(s->usbstring_mac, sizeof(s->usbstring_mac), 1459 snprintf(s->usbstring_mac, sizeof(s->usbstring_mac),
hw/virtio-net.c
@@ -315,8 +315,8 @@ PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -315,8 +315,8 @@ PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn)
315 n->rx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_rx); 315 n->rx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_rx);
316 n->tx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_tx); 316 n->tx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_tx);
317 memcpy(n->mac, nd->macaddr, 6); 317 memcpy(n->mac, nd->macaddr, 6);
318 - n->vc = qemu_new_vlan_client(nd->vlan, virtio_net_receive,  
319 - virtio_net_can_receive, n); 318 + n->vc = qemu_new_vlan_client(nd->vlan, nd->model,
  319 + virtio_net_receive, virtio_net_can_receive, n);
320 320
321 n->tx_timer = qemu_new_timer(vm_clock, virtio_net_tx_timer, n); 321 n->tx_timer = qemu_new_timer(vm_clock, virtio_net_tx_timer, n);
322 n->tx_timer_active = 0; 322 n->tx_timer_active = 0;
@@ -297,6 +297,7 @@ static int parse_unix_path(struct sockaddr_un *uaddr, const char *str) @@ -297,6 +297,7 @@ static int parse_unix_path(struct sockaddr_un *uaddr, const char *str)
297 #endif 297 #endif
298 298
299 VLANClientState *qemu_new_vlan_client(VLANState *vlan, 299 VLANClientState *qemu_new_vlan_client(VLANState *vlan,
  300 + const char *model,
300 IOReadHandler *fd_read, 301 IOReadHandler *fd_read,
301 IOCanRWHandler *fd_can_read, 302 IOCanRWHandler *fd_can_read,
302 void *opaque) 303 void *opaque)
@@ -305,6 +306,7 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, @@ -305,6 +306,7 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan,
305 vc = qemu_mallocz(sizeof(VLANClientState)); 306 vc = qemu_mallocz(sizeof(VLANClientState));
306 if (!vc) 307 if (!vc)
307 return NULL; 308 return NULL;
  309 + vc->model = strdup(model);
308 vc->fd_read = fd_read; 310 vc->fd_read = fd_read;
309 vc->fd_can_read = fd_can_read; 311 vc->fd_can_read = fd_can_read;
310 vc->opaque = opaque; 312 vc->opaque = opaque;
@@ -325,6 +327,7 @@ void qemu_del_vlan_client(VLANClientState *vc) @@ -325,6 +327,7 @@ void qemu_del_vlan_client(VLANClientState *vc)
325 while (*pvc != NULL) 327 while (*pvc != NULL)
326 if (*pvc == vc) { 328 if (*pvc == vc) {
327 *pvc = vc->next; 329 *pvc = vc->next;
  330 + free(vc->model);
328 free(vc); 331 free(vc);
329 break; 332 break;
330 } else 333 } else
@@ -442,13 +445,13 @@ static void slirp_receive(void *opaque, const uint8_t *buf, int size) @@ -442,13 +445,13 @@ static void slirp_receive(void *opaque, const uint8_t *buf, int size)
442 slirp_input(buf, size); 445 slirp_input(buf, size);
443 } 446 }
444 447
445 -static int net_slirp_init(VLANState *vlan) 448 +static int net_slirp_init(VLANState *vlan, const char *model)
446 { 449 {
447 if (!slirp_inited) { 450 if (!slirp_inited) {
448 slirp_inited = 1; 451 slirp_inited = 1;
449 slirp_init(); 452 slirp_init();
450 } 453 }
451 - slirp_vc = qemu_new_vlan_client(vlan, 454 + slirp_vc = qemu_new_vlan_client(vlan, model,
452 slirp_receive, NULL, NULL); 455 slirp_receive, NULL, NULL);
453 snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector"); 456 snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
454 return 0; 457 return 0;
@@ -662,7 +665,7 @@ static void tap_send(void *opaque) @@ -662,7 +665,7 @@ static void tap_send(void *opaque)
662 665
663 /* fd support */ 666 /* fd support */
664 667
665 -static TAPState *net_tap_fd_init(VLANState *vlan, int fd) 668 +static TAPState *net_tap_fd_init(VLANState *vlan, const char *model, int fd)
666 { 669 {
667 TAPState *s; 670 TAPState *s;
668 671
@@ -670,7 +673,7 @@ static TAPState *net_tap_fd_init(VLANState *vlan, int fd) @@ -670,7 +673,7 @@ static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
670 if (!s) 673 if (!s)
671 return NULL; 674 return NULL;
672 s->fd = fd; 675 s->fd = fd;
673 - s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s); 676 + s->vc = qemu_new_vlan_client(vlan, model, tap_receive, NULL, s);
674 #ifdef HAVE_IOVEC 677 #ifdef HAVE_IOVEC
675 s->vc->fd_readv = tap_receive_iov; 678 s->vc->fd_readv = tap_receive_iov;
676 #endif 679 #endif
@@ -905,7 +908,7 @@ static int launch_script(const char *setup_script, const char *ifname, int fd) @@ -905,7 +908,7 @@ static int launch_script(const char *setup_script, const char *ifname, int fd)
905 return 0; 908 return 0;
906 } 909 }
907 910
908 -static int net_tap_init(VLANState *vlan, const char *ifname1, 911 +static int net_tap_init(VLANState *vlan, const char *model, const char *ifname1,
909 const char *setup_script, const char *down_script) 912 const char *setup_script, const char *down_script)
910 { 913 {
911 TAPState *s; 914 TAPState *s;
@@ -926,7 +929,7 @@ static int net_tap_init(VLANState *vlan, const char *ifname1, @@ -926,7 +929,7 @@ static int net_tap_init(VLANState *vlan, const char *ifname1,
926 if (launch_script(setup_script, ifname, fd)) 929 if (launch_script(setup_script, ifname, fd))
927 return -1; 930 return -1;
928 } 931 }
929 - s = net_tap_fd_init(vlan, fd); 932 + s = net_tap_fd_init(vlan, model, fd);
930 if (!s) 933 if (!s)
931 return -1; 934 return -1;
932 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 935 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
@@ -969,8 +972,8 @@ static void vde_from_qemu(void *opaque, const uint8_t *buf, int size) @@ -969,8 +972,8 @@ static void vde_from_qemu(void *opaque, const uint8_t *buf, int size)
969 } 972 }
970 } 973 }
971 974
972 -static int net_vde_init(VLANState *vlan, const char *sock, int port,  
973 - const char *group, int mode) 975 +static int net_vde_init(VLANState *vlan, const char *model, const char *sock,
  976 + int port, const char *group, int mode)
974 { 977 {
975 VDEState *s; 978 VDEState *s;
976 char *init_group = strlen(group) ? (char *)group : NULL; 979 char *init_group = strlen(group) ? (char *)group : NULL;
@@ -990,7 +993,7 @@ static int net_vde_init(VLANState *vlan, const char *sock, int port, @@ -990,7 +993,7 @@ static int net_vde_init(VLANState *vlan, const char *sock, int port,
990 free(s); 993 free(s);
991 return -1; 994 return -1;
992 } 995 }
993 - s->vc = qemu_new_vlan_client(vlan, vde_from_qemu, NULL, s); 996 + s->vc = qemu_new_vlan_client(vlan, model, vde_from_qemu, NULL, s);
994 qemu_set_fd_handler(vde_datafd(s->vde), vde_to_qemu, NULL, s); 997 qemu_set_fd_handler(vde_datafd(s->vde), vde_to_qemu, NULL, s);
995 snprintf(s->vc->info_str, sizeof(s->vc->info_str), "vde: sock=%s fd=%d", 998 snprintf(s->vc->info_str, sizeof(s->vc->info_str), "vde: sock=%s fd=%d",
996 sock, vde_datafd(s->vde)); 999 sock, vde_datafd(s->vde));
@@ -1011,6 +1014,7 @@ typedef struct NetSocketState { @@ -1011,6 +1014,7 @@ typedef struct NetSocketState {
1011 1014
1012 typedef struct NetSocketListenState { 1015 typedef struct NetSocketListenState {
1013 VLANState *vlan; 1016 VLANState *vlan;
  1017 + char *model;
1014 int fd; 1018 int fd;
1015 } NetSocketListenState; 1019 } NetSocketListenState;
1016 1020
@@ -1164,8 +1168,8 @@ fail: @@ -1164,8 +1168,8 @@ fail:
1164 return -1; 1168 return -1;
1165 } 1169 }
1166 1170
1167 -static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd,  
1168 - int is_connected) 1171 +static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, const char *model,
  1172 + int fd, int is_connected)
1169 { 1173 {
1170 struct sockaddr_in saddr; 1174 struct sockaddr_in saddr;
1171 int newfd; 1175 int newfd;
@@ -1208,7 +1212,7 @@ static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd, @@ -1208,7 +1212,7 @@ static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd,
1208 return NULL; 1212 return NULL;
1209 s->fd = fd; 1213 s->fd = fd;
1210 1214
1211 - s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s); 1215 + s->vc = qemu_new_vlan_client(vlan, model, net_socket_receive_dgram, NULL, s);
1212 qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s); 1216 qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
1213 1217
1214 /* mcast: save bound address as dst */ 1218 /* mcast: save bound address as dst */
@@ -1227,15 +1231,15 @@ static void net_socket_connect(void *opaque) @@ -1227,15 +1231,15 @@ static void net_socket_connect(void *opaque)
1227 qemu_set_fd_handler(s->fd, net_socket_send, NULL, s); 1231 qemu_set_fd_handler(s->fd, net_socket_send, NULL, s);
1228 } 1232 }
1229 1233
1230 -static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd,  
1231 - int is_connected) 1234 +static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, const char *model,
  1235 + int fd, int is_connected)
1232 { 1236 {
1233 NetSocketState *s; 1237 NetSocketState *s;
1234 s = qemu_mallocz(sizeof(NetSocketState)); 1238 s = qemu_mallocz(sizeof(NetSocketState));
1235 if (!s) 1239 if (!s)
1236 return NULL; 1240 return NULL;
1237 s->fd = fd; 1241 s->fd = fd;
1238 - s->vc = qemu_new_vlan_client(vlan, 1242 + s->vc = qemu_new_vlan_client(vlan, model,
1239 net_socket_receive, NULL, s); 1243 net_socket_receive, NULL, s);
1240 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 1244 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
1241 "socket: fd=%d", fd); 1245 "socket: fd=%d", fd);
@@ -1247,8 +1251,8 @@ static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd, @@ -1247,8 +1251,8 @@ static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd,
1247 return s; 1251 return s;
1248 } 1252 }
1249 1253
1250 -static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd,  
1251 - int is_connected) 1254 +static NetSocketState *net_socket_fd_init(VLANState *vlan, const char *model,
  1255 + int fd, int is_connected)
1252 { 1256 {
1253 int so_type=-1, optlen=sizeof(so_type); 1257 int so_type=-1, optlen=sizeof(so_type);
1254 1258
@@ -1259,13 +1263,13 @@ static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd, @@ -1259,13 +1263,13 @@ static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd,
1259 } 1263 }
1260 switch(so_type) { 1264 switch(so_type) {
1261 case SOCK_DGRAM: 1265 case SOCK_DGRAM:
1262 - return net_socket_fd_init_dgram(vlan, fd, is_connected); 1266 + return net_socket_fd_init_dgram(vlan, model, fd, is_connected);
1263 case SOCK_STREAM: 1267 case SOCK_STREAM:
1264 - return net_socket_fd_init_stream(vlan, fd, is_connected); 1268 + return net_socket_fd_init_stream(vlan, model, fd, is_connected);
1265 default: 1269 default:
1266 /* who knows ... this could be a eg. a pty, do warn and continue as stream */ 1270 /* who knows ... this could be a eg. a pty, do warn and continue as stream */
1267 fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd); 1271 fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
1268 - return net_socket_fd_init_stream(vlan, fd, is_connected); 1272 + return net_socket_fd_init_stream(vlan, model, fd, is_connected);
1269 } 1273 }
1270 return NULL; 1274 return NULL;
1271 } 1275 }
@@ -1287,7 +1291,7 @@ static void net_socket_accept(void *opaque) @@ -1287,7 +1291,7 @@ static void net_socket_accept(void *opaque)
1287 break; 1291 break;
1288 } 1292 }
1289 } 1293 }
1290 - s1 = net_socket_fd_init(s->vlan, fd, 1); 1294 + s1 = net_socket_fd_init(s->vlan, s->model, fd, 1);
1291 if (!s1) { 1295 if (!s1) {
1292 closesocket(fd); 1296 closesocket(fd);
1293 } else { 1297 } else {
@@ -1297,7 +1301,8 @@ static void net_socket_accept(void *opaque) @@ -1297,7 +1301,8 @@ static void net_socket_accept(void *opaque)
1297 } 1301 }
1298 } 1302 }
1299 1303
1300 -static int net_socket_listen_init(VLANState *vlan, const char *host_str) 1304 +static int net_socket_listen_init(VLANState *vlan, const char *model,
  1305 + const char *host_str)
1301 { 1306 {
1302 NetSocketListenState *s; 1307 NetSocketListenState *s;
1303 int fd, val, ret; 1308 int fd, val, ret;
@@ -1332,12 +1337,14 @@ static int net_socket_listen_init(VLANState *vlan, const char *host_str) @@ -1332,12 +1337,14 @@ static int net_socket_listen_init(VLANState *vlan, const char *host_str)
1332 return -1; 1337 return -1;
1333 } 1338 }
1334 s->vlan = vlan; 1339 s->vlan = vlan;
  1340 + s->model = strdup(model);
1335 s->fd = fd; 1341 s->fd = fd;
1336 qemu_set_fd_handler(fd, net_socket_accept, NULL, s); 1342 qemu_set_fd_handler(fd, net_socket_accept, NULL, s);
1337 return 0; 1343 return 0;
1338 } 1344 }
1339 1345
1340 -static int net_socket_connect_init(VLANState *vlan, const char *host_str) 1346 +static int net_socket_connect_init(VLANState *vlan, const char *model,
  1347 + const char *host_str)
1341 { 1348 {
1342 NetSocketState *s; 1349 NetSocketState *s;
1343 int fd, connected, ret, err; 1350 int fd, connected, ret, err;
@@ -1375,7 +1382,7 @@ static int net_socket_connect_init(VLANState *vlan, const char *host_str) @@ -1375,7 +1382,7 @@ static int net_socket_connect_init(VLANState *vlan, const char *host_str)
1375 break; 1382 break;
1376 } 1383 }
1377 } 1384 }
1378 - s = net_socket_fd_init(vlan, fd, connected); 1385 + s = net_socket_fd_init(vlan, model, fd, connected);
1379 if (!s) 1386 if (!s)
1380 return -1; 1387 return -1;
1381 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 1388 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
@@ -1384,7 +1391,8 @@ static int net_socket_connect_init(VLANState *vlan, const char *host_str) @@ -1384,7 +1391,8 @@ static int net_socket_connect_init(VLANState *vlan, const char *host_str)
1384 return 0; 1391 return 0;
1385 } 1392 }
1386 1393
1387 -static int net_socket_mcast_init(VLANState *vlan, const char *host_str) 1394 +static int net_socket_mcast_init(VLANState *vlan, const char *model,
  1395 + const char *host_str)
1388 { 1396 {
1389 NetSocketState *s; 1397 NetSocketState *s;
1390 int fd; 1398 int fd;
@@ -1398,7 +1406,7 @@ static int net_socket_mcast_init(VLANState *vlan, const char *host_str) @@ -1398,7 +1406,7 @@ static int net_socket_mcast_init(VLANState *vlan, const char *host_str)
1398 if (fd < 0) 1406 if (fd < 0)
1399 return -1; 1407 return -1;
1400 1408
1401 - s = net_socket_fd_init(vlan, fd, 0); 1409 + s = net_socket_fd_init(vlan, model, fd, 0);
1402 if (!s) 1410 if (!s)
1403 return -1; 1411 return -1;
1404 1412
@@ -1488,7 +1496,7 @@ int net_client_init(const char *device, const char *p) @@ -1488,7 +1496,7 @@ int net_client_init(const char *device, const char *p)
1488 pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf); 1496 pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf);
1489 } 1497 }
1490 vlan->nb_host_devs++; 1498 vlan->nb_host_devs++;
1491 - ret = net_slirp_init(vlan); 1499 + ret = net_slirp_init(vlan, device);
1492 } else 1500 } else
1493 #endif 1501 #endif
1494 #ifdef _WIN32 1502 #ifdef _WIN32
@@ -1499,7 +1507,7 @@ int net_client_init(const char *device, const char *p) @@ -1499,7 +1507,7 @@ int net_client_init(const char *device, const char *p)
1499 return -1; 1507 return -1;
1500 } 1508 }
1501 vlan->nb_host_devs++; 1509 vlan->nb_host_devs++;
1502 - ret = tap_win32_init(vlan, ifname); 1510 + ret = tap_win32_init(vlan, device, ifname);
1503 } else 1511 } else
1504 #elif defined (_AIX) 1512 #elif defined (_AIX)
1505 #else 1513 #else
@@ -1512,7 +1520,7 @@ int net_client_init(const char *device, const char *p) @@ -1512,7 +1520,7 @@ int net_client_init(const char *device, const char *p)
1512 fd = strtol(buf, NULL, 0); 1520 fd = strtol(buf, NULL, 0);
1513 fcntl(fd, F_SETFL, O_NONBLOCK); 1521 fcntl(fd, F_SETFL, O_NONBLOCK);
1514 ret = -1; 1522 ret = -1;
1515 - if (net_tap_fd_init(vlan, fd)) 1523 + if (net_tap_fd_init(vlan, device, fd))
1516 ret = 0; 1524 ret = 0;
1517 } else { 1525 } else {
1518 if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) { 1526 if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
@@ -1524,7 +1532,7 @@ int net_client_init(const char *device, const char *p) @@ -1524,7 +1532,7 @@ int net_client_init(const char *device, const char *p)
1524 if (get_param_value(down_script, sizeof(down_script), "downscript", p) == 0) { 1532 if (get_param_value(down_script, sizeof(down_script), "downscript", p) == 0) {
1525 pstrcpy(down_script, sizeof(down_script), DEFAULT_NETWORK_DOWN_SCRIPT); 1533 pstrcpy(down_script, sizeof(down_script), DEFAULT_NETWORK_DOWN_SCRIPT);
1526 } 1534 }
1527 - ret = net_tap_init(vlan, ifname, setup_script, down_script); 1535 + ret = net_tap_init(vlan, device, ifname, setup_script, down_script);
1528 } 1536 }
1529 } else 1537 } else
1530 #endif 1538 #endif
@@ -1533,14 +1541,14 @@ int net_client_init(const char *device, const char *p) @@ -1533,14 +1541,14 @@ int net_client_init(const char *device, const char *p)
1533 int fd; 1541 int fd;
1534 fd = strtol(buf, NULL, 0); 1542 fd = strtol(buf, NULL, 0);
1535 ret = -1; 1543 ret = -1;
1536 - if (net_socket_fd_init(vlan, fd, 1)) 1544 + if (net_socket_fd_init(vlan, device, fd, 1))
1537 ret = 0; 1545 ret = 0;
1538 } else if (get_param_value(buf, sizeof(buf), "listen", p) > 0) { 1546 } else if (get_param_value(buf, sizeof(buf), "listen", p) > 0) {
1539 - ret = net_socket_listen_init(vlan, buf); 1547 + ret = net_socket_listen_init(vlan, device, buf);
1540 } else if (get_param_value(buf, sizeof(buf), "connect", p) > 0) { 1548 } else if (get_param_value(buf, sizeof(buf), "connect", p) > 0) {
1541 - ret = net_socket_connect_init(vlan, buf); 1549 + ret = net_socket_connect_init(vlan, device, buf);
1542 } else if (get_param_value(buf, sizeof(buf), "mcast", p) > 0) { 1550 } else if (get_param_value(buf, sizeof(buf), "mcast", p) > 0) {
1543 - ret = net_socket_mcast_init(vlan, buf); 1551 + ret = net_socket_mcast_init(vlan, device, buf);
1544 } else { 1552 } else {
1545 fprintf(stderr, "Unknown socket options: %s\n", p); 1553 fprintf(stderr, "Unknown socket options: %s\n", p);
1546 return -1; 1554 return -1;
@@ -1568,7 +1576,7 @@ int net_client_init(const char *device, const char *p) @@ -1568,7 +1576,7 @@ int net_client_init(const char *device, const char *p)
1568 } else { 1576 } else {
1569 vde_mode = 0700; 1577 vde_mode = 0700;
1570 } 1578 }
1571 - ret = net_vde_init(vlan, vde_sock, vde_port, vde_group, vde_mode); 1579 + ret = net_vde_init(vlan, device, vde_sock, vde_port, vde_group, vde_mode);
1572 } else 1580 } else
1573 #endif 1581 #endif
1574 { 1582 {
@@ -18,6 +18,7 @@ struct VLANClientState { @@ -18,6 +18,7 @@ struct VLANClientState {
18 void *opaque; 18 void *opaque;
19 struct VLANClientState *next; 19 struct VLANClientState *next;
20 struct VLANState *vlan; 20 struct VLANState *vlan;
  21 + char *model;
21 char info_str[256]; 22 char info_str[256];
22 }; 23 };
23 24
@@ -30,6 +31,7 @@ struct VLANState { @@ -30,6 +31,7 @@ struct VLANState {
30 31
31 VLANState *qemu_find_vlan(int id); 32 VLANState *qemu_find_vlan(int id);
32 VLANClientState *qemu_new_vlan_client(VLANState *vlan, 33 VLANClientState *qemu_new_vlan_client(VLANState *vlan,
  34 + const char *model,
33 IOReadHandler *fd_read, 35 IOReadHandler *fd_read,
34 IOCanRWHandler *fd_can_read, 36 IOCanRWHandler *fd_can_read,
35 void *opaque); 37 void *opaque);
sysemu.h
@@ -75,7 +75,7 @@ void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque); @@ -75,7 +75,7 @@ void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
75 #endif 75 #endif
76 76
77 /* TAP win32 */ 77 /* TAP win32 */
78 -int tap_win32_init(VLANState *vlan, const char *ifname); 78 +int tap_win32_init(VLANState *vlan, const char *model, const char *ifname);
79 79
80 /* SLIRP */ 80 /* SLIRP */
81 void do_info_slirp(void); 81 void do_info_slirp(void);
tap-win32.c
@@ -660,7 +660,7 @@ static void tap_win32_send(void *opaque) @@ -660,7 +660,7 @@ static void tap_win32_send(void *opaque)
660 } 660 }
661 } 661 }
662 662
663 -int tap_win32_init(VLANState *vlan, const char *ifname) 663 +int tap_win32_init(VLANState *vlan, const char *model, const char *ifname)
664 { 664 {
665 TAPState *s; 665 TAPState *s;
666 666
@@ -672,7 +672,7 @@ int tap_win32_init(VLANState *vlan, const char *ifname) @@ -672,7 +672,7 @@ int tap_win32_init(VLANState *vlan, const char *ifname)
672 return -1; 672 return -1;
673 } 673 }
674 674
675 - s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s); 675 + s->vc = qemu_new_vlan_client(vlan, model, tap_receive, NULL, s);
676 676
677 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 677 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
678 "tap: ifname=%s", ifname); 678 "tap: ifname=%s", ifname);