struct vring_desc *d;
d = &vring->desc[next];
vlib_buffer_t *b = vlib_get_buffer (vm, bi);
+ struct virtio_net_hdr_v1 *hdr = vlib_buffer_get_current (b) - hdr_sz;
+
+ clib_memset (hdr, 0, hdr_sz);
if (PREDICT_TRUE ((b->flags & VLIB_BUFFER_NEXT_PRESENT) == 0))
{
u16 used, next, avail;
u16 sz = vring->size;
u16 mask = sz - 1;
- u32 *buffers = vlib_frame_args (frame);
+ u32 *buffers = vlib_frame_vector_args (frame);
+
+ clib_spinlock_lock_if_init (&vif->lockp);
/* free consumed buffers */
virtio_free_used_desc (vm, vring);
vlib_buffer_free (vm, buffers, n_left);
}
+ clib_spinlock_unlock_if_init (&vif->lockp);
+
return frame->n_vectors - n_left;
}
virtio_main_t *mm = &virtio_main;
vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, hw_if_index);
virtio_if_t *vif = pool_elt_at_index (mm->interfaces, hw->dev_instance);
- static clib_error_t *error = 0;
if (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP)
vif->flags |= VIRTIO_IF_FLAG_ADMIN_UP;
else
vif->flags &= ~VIRTIO_IF_FLAG_ADMIN_UP;
- return error;
return 0;
}