Commit bf38c1a0e1d7ebbe0930d8926dbc499b88a2d7db
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
Showing
17 changed files
with
74 additions
and
62 deletions
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; |
net.c
@@ -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 | { |
net.h
@@ -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); |