diff options
author | balrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-07-17 21:00:05 +0000 |
---|---|---|
committer | balrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-07-17 21:00:05 +0000 |
commit | dcf414d638254dd6201e3adc74b535b060894d53 (patch) | |
tree | 250cd7e642e82a09bdab20c64e6fb21c2d35d92d | |
parent | 6c9f886ceae5b998dc2b9af2bf77666941689bce (diff) |
Remove the NIC from vlan on usb destroy.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4885 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | hw/usb-net.c | 3 | ||||
-rw-r--r-- | net.h | 1 | ||||
-rw-r--r-- | vl.c | 13 |
3 files changed, 16 insertions, 1 deletions
diff --git a/hw/usb-net.c b/hw/usb-net.c index 0f62f88340..56210b52ec 100644 --- a/hw/usb-net.c +++ b/hw/usb-net.c @@ -1418,7 +1418,8 @@ static void usb_net_handle_destroy(USBDevice *dev) { USBNetState *s = (USBNetState *) dev; - /* FIXME: delete the VLAN client and the nic */ + /* TODO: remove the nd_table[] entry */ + qemu_del_vlan_client(s->vc); rndis_clear_responsequeue(s); qemu_free(s); } @@ -28,6 +28,7 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, IOReadHandler *fd_read, IOCanRWHandler *fd_can_read, void *opaque); +void qemu_del_vlan_client(VLANClientState *vc); int qemu_can_send_packet(VLANClientState *vc); void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size); void qemu_handler_true(void *opaque); @@ -3870,6 +3870,19 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, return vc; } +void qemu_del_vlan_client(VLANClientState *vc) +{ + VLANClientState **pvc = &vc->vlan->first_client; + + while (*pvc != NULL) + if (*pvc == vc) { + *pvc = vc->next; + free(vc); + break; + } else + pvc = &(*pvc)->next; +} + int qemu_can_send_packet(VLANClientState *vc1) { VLANState *vlan = vc1->vlan; |