X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fnic_bridge.c;h=60f606f7a583f4f66ec0d4e163fbd21e3815f6bd;hb=d962f2be029772be3f21d9bd206ddf2a9f6a1d20;hp=eb5500b5b5581cadb397fa18d44e75673b3a1bde;hpb=00460ac661afa22c2bb495eba4d4655d20a1bfdc;p=palacios-OLD.git diff --git a/palacios/src/devices/nic_bridge.c b/palacios/src/devices/nic_bridge.c index eb5500b..60f606f 100644 --- a/palacios/src/devices/nic_bridge.c +++ b/palacios/src/devices/nic_bridge.c @@ -36,7 +36,7 @@ struct nic_bridge_state { }; static int bridge_send(uint8_t * buf, uint32_t len, - void * private_data, struct vm_device *dev){ + void * private_data) { //struct nic_bridge_state *bridge = (struct nic_bridge_state *)private_data; #ifdef CONFIG_DEBUG_NIC_BRIDGE @@ -49,22 +49,20 @@ static int bridge_send(uint8_t * buf, uint32_t len, return V3_send_raw(buf, len); } - -static int packet_input(struct v3_vm_info * vm, - struct v3_packet_event * evt, - void * private_data) { - struct nic_bridge_state *bridge = (struct nic_bridge_state *)private_data; - +static int packet_input(struct v3_vm_info * vm, + struct v3_packet_event * evt, + void * private_data) { + struct nic_bridge_state * bridge = (struct nic_bridge_state *)private_data; + PrintDebug("NIC_BRIDGE: Incoming packet size: %d\n", evt->size); return bridge->net_ops.recv(evt->pkt, - evt->size, - bridge->net_ops.frontend_data); + evt->size, + bridge->net_ops.frontend_data); } -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 */ @@ -74,10 +72,8 @@ static int vnet_nic_free(struct vm_device * dev) { } static struct v3_device_ops dev_ops = { - .free = vnet_nic_free, - .reset = NULL, - .start = NULL, - .stop = NULL, + .free = (int (*)(void *))vnet_nic_free, + }; static int vnet_nic_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { @@ -89,10 +85,11 @@ static int vnet_nic_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { 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; } @@ -103,13 +100,14 @@ static int vnet_nic_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { &(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; } PrintDebug("NIC-Bridge: Connect %s to frontend %s\n", dev_id, v3_cfg_val(frontend_cfg, "tag")); - v3_hook_host_event(vm, HOST_PACKET_EVT, V3_HOST_EVENT_HANDLER(packet_input), dev); + v3_hook_host_event(vm, HOST_PACKET_EVT, V3_HOST_EVENT_HANDLER(packet_input), bridge); return 0; }