Commit dcf414d638254dd6201e3adc74b535b060894d53
1 parent
6c9f886c
Remove the NIC from vlan on usb destroy.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4885 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
16 additions
and
1 deletions
hw/usb-net.c
| @@ -1418,7 +1418,8 @@ static void usb_net_handle_destroy(USBDevice *dev) | @@ -1418,7 +1418,8 @@ static void usb_net_handle_destroy(USBDevice *dev) | ||
| 1418 | { | 1418 | { |
| 1419 | USBNetState *s = (USBNetState *) dev; | 1419 | USBNetState *s = (USBNetState *) dev; |
| 1420 | 1420 | ||
| 1421 | - /* FIXME: delete the VLAN client and the nic */ | 1421 | + /* TODO: remove the nd_table[] entry */ |
| 1422 | + qemu_del_vlan_client(s->vc); | ||
| 1422 | rndis_clear_responsequeue(s); | 1423 | rndis_clear_responsequeue(s); |
| 1423 | qemu_free(s); | 1424 | qemu_free(s); |
| 1424 | } | 1425 | } |
net.h
| @@ -28,6 +28,7 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, | @@ -28,6 +28,7 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, | ||
| 28 | IOReadHandler *fd_read, | 28 | IOReadHandler *fd_read, |
| 29 | IOCanRWHandler *fd_can_read, | 29 | IOCanRWHandler *fd_can_read, |
| 30 | void *opaque); | 30 | void *opaque); |
| 31 | +void qemu_del_vlan_client(VLANClientState *vc); | ||
| 31 | int qemu_can_send_packet(VLANClientState *vc); | 32 | int qemu_can_send_packet(VLANClientState *vc); |
| 32 | void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size); | 33 | void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size); |
| 33 | void qemu_handler_true(void *opaque); | 34 | void qemu_handler_true(void *opaque); |
vl.c
| @@ -3870,6 +3870,19 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, | @@ -3870,6 +3870,19 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, | ||
| 3870 | return vc; | 3870 | return vc; |
| 3871 | } | 3871 | } |
| 3872 | 3872 | ||
| 3873 | +void qemu_del_vlan_client(VLANClientState *vc) | ||
| 3874 | +{ | ||
| 3875 | + VLANClientState **pvc = &vc->vlan->first_client; | ||
| 3876 | + | ||
| 3877 | + while (*pvc != NULL) | ||
| 3878 | + if (*pvc == vc) { | ||
| 3879 | + *pvc = vc->next; | ||
| 3880 | + free(vc); | ||
| 3881 | + break; | ||
| 3882 | + } else | ||
| 3883 | + pvc = &(*pvc)->next; | ||
| 3884 | +} | ||
| 3885 | + | ||
| 3873 | int qemu_can_send_packet(VLANClientState *vc1) | 3886 | int qemu_can_send_packet(VLANClientState *vc1) |
| 3874 | { | 3887 | { |
| 3875 | VLANState *vlan = vc1->vlan; | 3888 | VLANState *vlan = vc1->vlan; |