}
-static int vnet_nic_free(struct vm_device * dev) {
- struct nic_bridge_state * bridge = dev->private_data;
+static int vnet_nic_free(struct nic_bridge_state * bridge) {
/*detach from front device */
}
static struct v3_device_ops dev_ops = {
- .free = vnet_nic_free,
+ .free = (int (*)(void *))vnet_nic_free,
};
bridge = (struct nic_bridge_state *)V3_Malloc(sizeof(struct nic_bridge_state));
memset(bridge, 0, sizeof(struct nic_bridge_state));
- struct vm_device * dev = v3_allocate_device(dev_id, &dev_ops, bridge);
+ struct vm_device * dev = v3_add_device(vm, dev_id, &dev_ops, bridge);
- if (v3_attach_device(vm, dev) == -1) {
+ if (dev == NULL) {
PrintError("Could not attach device %s\n", dev_id);
+ V3_Free(bridge);
return -1;
}
&(bridge->net_ops), frontend_cfg, bridge) == -1) {
PrintError("Could not connect %s to frontend %s\n",
dev_id, v3_cfg_val(frontend_cfg, "tag"));
+ v3_remove_device(dev);
return -1;
}