X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fnic_bridge.c;h=518fa750d61f1dc9ae641adba50d6f56d5083374;hb=ed58e44a111e3bb28e1b2fefd93fe7955962d682;hp=dffe6d29483041591de50eee180818c885b7d18e;hpb=72420d58d18ec71d4777d029daaf0c6a1c820b32;p=palacios.git diff --git a/palacios/src/devices/nic_bridge.c b/palacios/src/devices/nic_bridge.c index dffe6d2..518fa75 100644 --- a/palacios/src/devices/nic_bridge.c +++ b/palacios/src/devices/nic_bridge.c @@ -23,9 +23,9 @@ #include #include #include -#include +#include -#ifndef CONFIG_DEBUG_NIC_BRIDGE +#ifndef V3_CONFIG_DEBUG_NIC_BRIDGE #undef PrintDebug #define PrintDebug(fmt, args...) #endif @@ -36,10 +36,10 @@ struct nic_bridge_state { }; static int bridge_send(uint8_t * buf, uint32_t len, + int synchronize, void * private_data) { - //struct nic_bridge_state *bridge = (struct nic_bridge_state *)private_data; -#ifdef CONFIG_DEBUG_NIC_BRIDGE +#ifdef V3_CONFIG_DEBUG_NIC_BRIDGE { PrintDebug("NIC Bridge: send pkt size: %d\n", len); v3_hexdump(buf, len, NULL, 0); @@ -49,13 +49,17 @@ 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; - - PrintDebug("NIC_BRIDGE: Incoming packet size: %d\n", evt->size); + +#ifdef V3_CONFIG_DEBUG_NIC_BRIDGE + { + PrintDebug("NIC Bridge: recv pkt size: %d\n", evt->size); + v3_hexdump(evt->pkt, evt->size, NULL, 0); + } +#endif return bridge->net_ops.recv(evt->pkt, evt->size, @@ -63,8 +67,7 @@ static int packet_input(struct v3_vm_info * vm, } -static int vnet_nic_free(struct vm_device * dev) { - struct nic_bridge_state * bridge = dev->private_data; +static int nic_bridge_free(struct nic_bridge_state * bridge) { /*detach from front device */ @@ -74,11 +77,11 @@ static int vnet_nic_free(struct vm_device * dev) { } static struct v3_device_ops dev_ops = { - .free = vnet_nic_free, + .free = (int (*)(void *))nic_bridge_free, }; -static int vnet_nic_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { +static int nic_bridge_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { struct nic_bridge_state * bridge = NULL; char * dev_id = v3_cfg_val(cfg, "ID"); @@ -109,9 +112,11 @@ static int vnet_nic_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { PrintDebug("NIC-Bridge: Connect %s to frontend %s\n", dev_id, v3_cfg_val(frontend_cfg, "tag")); + + V3_packet_add_recver(bridge->net_ops.fnt_mac, vm); v3_hook_host_event(vm, HOST_PACKET_EVT, V3_HOST_EVENT_HANDLER(packet_input), bridge); return 0; } -device_register("NIC_BRIDGE", vnet_nic_init) +device_register("NIC_BRIDGE", nic_bridge_init)