Message ID | 1254918996-26050-5-git-send-email-kraxel@redhat.com |
---|---|
State | RFC |
Headers | show |
On Wed, 2009-10-07 at 14:36 +0200, Gerd Hoffmann wrote: > - s->vc = qdev_get_vlan_client(&dev->qdev, > - ne2000_can_receive, ne2000_receive, NULL, > - isa_ne2000_cleanup, s); > - qemu_format_nic_info_str(s->vc, s->macaddr); > + if (s->vlan != -1) { > + s->vc = qemu_new_vlan_client(qemu_find_vlan(s->vlan, 1), > + dev->qdev.info->name, dev->qdev.id, > + ne2000_can_receive, ne2000_receive, NULL, > + isa_ne2000_cleanup, s); > + qemu_format_nic_info_str(s->vc, s->macaddr); > + } else { > + qemu_error("warning: no vlan specfied, ne2k_isa is unconnected\n"); > + } I'll be posting a patch later which allows qemu_new_vlan_client() to take a NULL vlan thereafter drop any packets passed to it. I think that makes more sense, as VLANClientState should become a NetClient structure which can represent a NIC, backend or even a vlan itself. Cheers, Mark.
On 10/07/09 15:50, Mark McLoughlin wrote: > On Wed, 2009-10-07 at 14:36 +0200, Gerd Hoffmann wrote: > >> - s->vc = qdev_get_vlan_client(&dev->qdev, >> - ne2000_can_receive, ne2000_receive, NULL, >> - isa_ne2000_cleanup, s); >> - qemu_format_nic_info_str(s->vc, s->macaddr); >> + if (s->vlan != -1) { >> + s->vc = qemu_new_vlan_client(qemu_find_vlan(s->vlan, 1), >> + dev->qdev.info->name, dev->qdev.id, >> + ne2000_can_receive, ne2000_receive, NULL, >> + isa_ne2000_cleanup, s); >> + qemu_format_nic_info_str(s->vc, s->macaddr); >> + } else { >> + qemu_error("warning: no vlan specfied, ne2k_isa is unconnected\n"); >> + } > > I'll be posting a patch later which allows qemu_new_vlan_client() to > take a NULL vlan thereafter drop any packets passed to it. > > I think that makes more sense, as VLANClientState should become a > NetClient structure which can represent a NIC, backend or even a vlan > itself. Fine with me. I just had to pull out something out of thin air as placeholder for net changes which are in the pipeline but not posted yet. Will adjust to whatever comes with for the next respin ;) cheers, Gerd
diff --git a/hw/ne2000-isa.c b/hw/ne2000-isa.c index 54c0478..7a24088 100644 --- a/hw/ne2000-isa.c +++ b/hw/ne2000-isa.c @@ -65,13 +65,18 @@ static int isa_ne2000_initfn(ISADevice *dev) isa_init_irq(dev, &s->irq, isa->isairq); - qdev_get_macaddr(&dev->qdev, s->macaddr); + qemu_macaddr_default_if_unset(s->macaddr); ne2000_reset(s); - s->vc = qdev_get_vlan_client(&dev->qdev, - ne2000_can_receive, ne2000_receive, NULL, - isa_ne2000_cleanup, s); - qemu_format_nic_info_str(s->vc, s->macaddr); + if (s->vlan != -1) { + s->vc = qemu_new_vlan_client(qemu_find_vlan(s->vlan, 1), + dev->qdev.info->name, dev->qdev.id, + ne2000_can_receive, ne2000_receive, NULL, + isa_ne2000_cleanup, s); + qemu_format_nic_info_str(s->vc, s->macaddr); + } else { + qemu_error("warning: no vlan specfied, ne2k_isa is unconnected\n"); + } register_savevm("ne2000", -1, 2, ne2000_save, ne2000_load, s); return 0; @@ -84,9 +89,11 @@ void isa_ne2000_init(int base, int irq, NICInfo *nd) qemu_check_nic_model(nd, "ne2k_isa"); dev = isa_create("ne2k_isa"); - dev->qdev.nd = nd; /* hack alert */ qdev_prop_set_uint32(&dev->qdev, "iobase", base); qdev_prop_set_uint32(&dev->qdev, "irq", irq); + qdev_prop_set_macaddr(&dev->qdev, "mac", nd->macaddr); + if (nd->vlan) + qdev_prop_set_int32(&dev->qdev, "vlan", nd->vlan->id); qdev_init(&dev->qdev); } @@ -95,8 +102,10 @@ static ISADeviceInfo ne2000_isa_info = { .qdev.size = sizeof(ISANE2000State), .init = isa_ne2000_initfn, .qdev.props = (Property[]) { - DEFINE_PROP_HEX32("iobase", ISANE2000State, iobase, 0x300), - DEFINE_PROP_UINT32("irq", ISANE2000State, isairq, 9), + DEFINE_PROP_HEX32("iobase", ISANE2000State, iobase, 0x300), + DEFINE_PROP_UINT32("irq", ISANE2000State, isairq, 9), + DEFINE_PROP_MACADDR("mac", ISANE2000State, ne2000.macaddr), + DEFINE_PROP_INT32("vlan", ISANE2000State, ne2000.vlan, -1), DEFINE_PROP_END_OF_LIST(), }, }; diff --git a/hw/ne2000.h b/hw/ne2000.h index 92a2ddb..7936fb2 100644 --- a/hw/ne2000.h +++ b/hw/ne2000.h @@ -22,8 +22,9 @@ typedef struct NE2000State { uint8_t curpag; uint8_t mult[8]; /* multicast mask array */ qemu_irq irq; + int32_t vlan; VLANClientState *vc; - uint8_t macaddr[6]; + macaddr_t macaddr; uint8_t mem[NE2000_MEM_SIZE]; } NE2000State;
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/ne2000-isa.c | 25 +++++++++++++++++-------- hw/ne2000.h | 3 ++- 2 files changed, 19 insertions(+), 9 deletions(-)