/* called by frontend, send pkt to VNET */
static int vnet_nic_send(uint8_t * buf, uint32_t len,
- void * private_data,
- struct vm_device * dest_dev){
- struct vnet_nic_state *vnetnic = (struct vnet_nic_state *)private_data;
+ void * private_data) {
+ struct vnet_nic_state * vnetnic = (struct vnet_nic_state *)private_data;
struct v3_vnet_pkt pkt;
pkt.size = len;
}
-static int vnet_nic_free(struct vm_device * dev) {
+static int vnet_nic_free(struct vnet_nic_state * vnetnic) {
+
+
+ V3_Free(vnetnic);
return 0;
}
static struct v3_device_ops dev_ops = {
- .free = vnet_nic_free,
- .reset = NULL,
- .start = NULL,
- .stop = NULL,
+ .free = (int (*)(void *))vnet_nic_free,
+
};
static struct v3_vnet_dev_ops vnet_dev_ops = {
vnetnic = (struct vnet_nic_state *)V3_Malloc(sizeof(struct vnet_nic_state));
memset(vnetnic, 0, sizeof(struct vnet_nic_state));
- struct vm_device * dev = v3_allocate_device(dev_id, &dev_ops, vnetnic);
+ struct vm_device * dev = v3_add_device(vm, dev_id, &dev_ops, vnetnic);
- if (v3_attach_device(vm, dev) == -1) {
+ if (dev == NULL) {
PrintError("Could not attach device %s\n", dev_id);
+ V3_Free(vnetnic);
return -1;
}
&(vnetnic->net_ops), frontend_cfg, vnetnic) == -1) {
PrintError("Could not connect %s to frontend %s\n",
dev_id, v3_cfg_val(frontend_cfg, "tag"));
+ v3_remove_device(dev);
return -1;
}
if ((vnet_dev_id = register_to_vnet(vm, vnetnic, dev_id, vnetnic->mac)) == -1) {
PrintError("Vnet-nic device %s (mac: %s) fails to registered to VNET\n", dev_id, macstr);
+ v3_remove_device(dev);
+ return 0;
}
+
vnetnic->vnet_dev_id = vnet_dev_id;
PrintDebug("Vnet-nic device %s (mac: %s, %ld) registered to VNET\n",