void * private_data;
int active;
- nic_poll_type_t mode; /*vmm_drivern or guest_drivern */
uint64_t bytes_tx, bytes_rx;
uint32_t pkts_tx, pkt_rx;
struct v3_vnet_bridge_ops brg_ops;
uint8_t type;
- nic_poll_type_t mode;
+
int active;
void * private_data;
} __attribute__((packed));
int max_rank = 0;
struct list_head match_list;
struct eth_hdr * hdr = (struct eth_hdr *)(pkt->data);
- // uint8_t src_type = pkt->src_type;
- // uint32_t src_link = pkt->src_id;
+// uint8_t src_type = pkt->src_type;
+ // uint32_t src_link = pkt->src_id;
#ifdef CONFIG_DEBUG_VNET
{
PrintDebug("VNET/P Core: cpu %d: pkt (size %d, src_id:%d, src_type: %d, dst_id: %d, dst_type: %d)\n",
cpu, pkt->size, pkt->src_id,
pkt->src_type, pkt->dst_id, pkt->dst_type);
- //v3_hexdump(pkt->data, pkt->size, NULL, 0);
}
#endif
new_dev->vm = vm;
new_dev->dev_id = 0;
new_dev->active = 1;
- new_dev->mode = GUEST_DRIVERN;
flags = v3_lock_irqsave(vnet_state.lock);
tmp_bridge->brg_ops.poll = ops->poll;
tmp_bridge->private_data = priv_data;
tmp_bridge->active = 1;
- tmp_bridge->mode = GUEST_DRIVERN;
tmp_bridge->type = type;
/* make this atomic to avoid possible race conditions */
void v3_vnet_do_poll(struct v3_vm_info * vm){
- struct vnet_dev * dev = NULL;
+ struct vnet_dev * dev = NULL;
/* TODO: run this on separate threads
* round-robin schedule, with maximal budget for each poll
*/
list_for_each_entry(dev, &(vnet_state.devs), node) {
- if(dev->mode == VMM_DRIVERN){
- dev->dev_ops.poll(vm, -1, dev->private_data);
- }
+ if(dev->dev_ops.poll != NULL){
+ dev->dev_ops.poll(vm, -1, dev->private_data);
+ }
}
}