*/
//backend device for Virtio NIC
-#include <palacios/vmm_vnet.h>
+#include <vnet/vnet.h>
#include <palacios/vmm.h>
#include <palacios/vmm_dev_mgr.h>
#include <devices/lnx_virtio_pci.h>
#include <palacios/vmm_sprintf.h>
#include <palacios/vmm_ethernet.h>
-#ifndef CONFIG_DEBUG_VNET_NIC
+#ifndef V3_CONFIG_DEBUG_VNET_NIC
#undef PrintDebug
#define PrintDebug(fmt, args...)
#endif
/* called by frontend, send pkt to VNET */
static int vnet_nic_send(uint8_t * buf, uint32_t len,
- int synchronize, void * private_data) {
+ void * private_data) {
struct vnet_nic_state * vnetnic = (struct vnet_nic_state *)private_data;
struct v3_vnet_pkt pkt;
V3_Net_Print(2, "VNET-NIC: send pkt (size: %d, src_id: %d, src_type: %d)\n",
pkt.size, pkt.src_id, pkt.src_type);
- if(v3_net_debug >= 4){
+ if(net_debug >= 4){
v3_hexdump(buf, len, NULL, 0);
}
- return v3_vnet_send_pkt(&pkt, NULL, synchronize);
+ return v3_vnet_send_pkt(&pkt, NULL);
}
/* send pkt to frontend device */
-static int virtio_input(struct v3_vm_info * info,
+static int fnt_input(struct v3_vm_info * info,
struct v3_vnet_pkt * pkt,
void * private_data){
struct vnet_nic_state *vnetnic = (struct vnet_nic_state *)private_data;
pkt->size, pkt->src_id, pkt->src_type, pkt->dst_id, pkt->dst_type);
return vnetnic->net_ops.recv(pkt->data, pkt->size,
- vnetnic->net_ops.frontend_data);
+ vnetnic->net_ops.config.frontend_data);
+}
+
+
+/* poll pkt from frontend device */
+static int fnt_poll(struct v3_vm_info * info,
+ int quote, void * private_data){
+ struct vnet_nic_state *vnetnic = (struct vnet_nic_state *)private_data;
+
+ return vnetnic->net_ops.poll(quote, vnetnic->net_ops.config.frontend_data);
}
};
static struct v3_vnet_dev_ops vnet_dev_ops = {
- .input = virtio_input,
+ .input = fnt_input,
+ .poll = fnt_poll,
};
v3_cfg_tree_t * frontend_cfg = v3_cfg_subtree(cfg, "frontend");
vnetnic = (struct vnet_nic_state *)V3_Malloc(sizeof(struct vnet_nic_state));
+
+ if (!vnetnic) {
+ PrintError("Cannot allocate in init\n");
+ return -1;
+ }
+
memset(vnetnic, 0, sizeof(struct vnet_nic_state));
struct vm_device * dev = v3_add_device(vm, dev_id, &dev_ops, vnetnic);
}
PrintDebug("Vnet-nic: Connect %s to frontend %s\n",
- dev_id, v3_cfg_val(frontend_cfg, "tag"));
+ dev_id, v3_cfg_val(frontend_cfg, "tag"));
- if ((vnet_dev_id = v3_vnet_add_dev(vm, vnetnic->net_ops.fnt_mac, &vnet_dev_ops, (void *)vnetnic)) == -1) {
+ if ((vnet_dev_id = v3_vnet_add_dev(vm, vnetnic->net_ops.config.fnt_mac,
+ &vnet_dev_ops, vnetnic->net_ops.config.quote,
+ vnetnic->net_ops.config.poll, (void *)vnetnic)) == -1) {
PrintError("Vnet-nic device %s fails to registered to VNET\n", dev_id);
v3_remove_device(dev);