Lines Matching refs:dev
60 static int tun_alloc(struct vdev_info *dev, char *tun_name) in tun_alloc() argument
98 memcpy(dev->mac, &ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN); in tun_alloc()
102 static void vdev_create_socket(struct vdev_info *dev, char *tun_name) in vdev_create_socket() argument
106 dev->sock = socket(AF_PACKET, SOCK_RAW, htons(TEST_PTYPE)); in vdev_create_socket()
107 assert(dev->sock != -1); in vdev_create_socket()
110 assert(ioctl(dev->sock, SIOCGIFINDEX, &ifr) >= 0); in vdev_create_socket()
112 dev->ifindex = ifr.ifr_ifindex; in vdev_create_socket()
115 assert(ioctl(dev->sock, SIOCGIFFLAGS, &ifr) >= 0); in vdev_create_socket()
117 assert(ioctl(dev->sock, SIOCSIFFLAGS, &ifr) >= 0); in vdev_create_socket()
120 static void vdev_send_packet(struct vdev_info *dev) in vdev_send_packet() argument
122 char *sendbuf = dev->test_buf + HDR_LEN; in vdev_send_packet()
124 int sockfd = dev->sock; in vdev_send_packet()
128 saddrll.sll_ifindex = dev->ifindex; in vdev_send_packet()
150 static void vhost_vq_setup(struct vdev_info *dev, struct vq_info *info) in vhost_vq_setup() argument
163 r = ioctl(dev->control, VHOST_SET_VRING_NUM, &state); in vhost_vq_setup()
167 r = ioctl(dev->control, VHOST_SET_VRING_BASE, &state); in vhost_vq_setup()
170 r = ioctl(dev->control, VHOST_SET_VRING_ADDR, &addr); in vhost_vq_setup()
174 r = ioctl(dev->control, VHOST_SET_VRING_KICK, &file); in vhost_vq_setup()
191 static void vq_info_add(struct vdev_info *dev, int idx, int num, int fd) in vq_info_add() argument
194 struct vq_info *info = &dev->vqs[idx]; in vq_info_add()
201 vq_reset(info, num, &dev->vdev); in vq_info_add()
202 vhost_vq_setup(dev, info); in vq_info_add()
204 r = ioctl(dev->control, VHOST_NET_SET_BACKEND, &backend); in vq_info_add()
208 static void vdev_info_init(struct vdev_info *dev, unsigned long long features) in vdev_info_init() argument
213 dev->vdev.features = features; in vdev_info_init()
214 INIT_LIST_HEAD(&dev->vdev.vqs); in vdev_info_init()
215 spin_lock_init(&dev->vdev.vqs_list_lock); in vdev_info_init()
217 dev->buf_size = (HDR_LEN + TEST_BUF_LEN) * 2; in vdev_info_init()
218 dev->buf = malloc(dev->buf_size); in vdev_info_init()
219 assert(dev->buf); in vdev_info_init()
220 dev->test_buf = dev->buf; in vdev_info_init()
221 dev->res_buf = dev->test_buf + HDR_LEN + TEST_BUF_LEN; in vdev_info_init()
223 memset(dev->test_buf, 0, HDR_LEN + TEST_BUF_LEN); in vdev_info_init()
224 eh = (struct ether_header *)(dev->test_buf + HDR_LEN); in vdev_info_init()
226 memcpy(eh->ether_dhost, dev->mac, ETHER_ADDR_LEN); in vdev_info_init()
227 memcpy(eh->ether_shost, dev->mac, ETHER_ADDR_LEN); in vdev_info_init()
230 dev->test_buf[i + HDR_LEN] = (char)i; in vdev_info_init()
232 dev->control = open("/dev/vhost-net", O_RDWR); in vdev_info_init()
233 assert(dev->control >= 0); in vdev_info_init()
235 r = ioctl(dev->control, VHOST_SET_OWNER, NULL); in vdev_info_init()
238 dev->mem = malloc(offsetof(struct vhost_memory, regions) + in vdev_info_init()
239 sizeof(dev->mem->regions[0])); in vdev_info_init()
240 assert(dev->mem); in vdev_info_init()
241 memset(dev->mem, 0, offsetof(struct vhost_memory, regions) + in vdev_info_init()
242 sizeof(dev->mem->regions[0])); in vdev_info_init()
243 dev->mem->nregions = 1; in vdev_info_init()
244 dev->mem->regions[0].guest_phys_addr = (long)dev->buf; in vdev_info_init()
245 dev->mem->regions[0].userspace_addr = (long)dev->buf; in vdev_info_init()
246 dev->mem->regions[0].memory_size = dev->buf_size; in vdev_info_init()
248 r = ioctl(dev->control, VHOST_SET_MEM_TABLE, dev->mem); in vdev_info_init()
251 r = ioctl(dev->control, VHOST_SET_FEATURES, &features); in vdev_info_init()
254 dev->nvqs = 2; in vdev_info_init()
275 static void run_tx_test(struct vdev_info *dev, struct vq_info *vq, in run_tx_test() argument
291 sg_init_one(&sl, dev->test_buf, HDR_LEN + TEST_BUF_LEN); in run_tx_test()
293 dev->test_buf + vq->started, in run_tx_test()
313 n = recvfrom(dev->sock, dev->res_buf, TEST_BUF_LEN, 0, NULL, NULL); in run_tx_test()
315 verify_res_buf(dev->res_buf); in run_tx_test()
342 static void run_rx_test(struct vdev_info *dev, struct vq_info *vq, in run_rx_test() argument
357 sg_init_one(&sl, dev->res_buf, HDR_LEN + TEST_BUF_LEN); in run_rx_test()
360 dev->res_buf + vq->started, in run_rx_test()
367 vdev_send_packet(dev); in run_rx_test()
382 eh = (struct ether_header *)(dev->res_buf + HDR_LEN); in run_rx_test()
389 verify_res_buf(dev->res_buf + HDR_LEN); in run_rx_test()
481 struct vdev_info dev; in main() local
517 memset(&dev, 0, sizeof(dev)); in main()
520 fd = tun_alloc(&dev, tun_name); in main()
523 vdev_info_init(&dev, features); in main()
524 vq_info_add(&dev, 0, DESC_NUM, fd); in main()
525 vq_info_add(&dev, 1, DESC_NUM, fd); in main()
526 vdev_create_socket(&dev, tun_name); in main()
528 run_rx_test(&dev, &dev.vqs[0], delayed, nbufs); in main()
529 run_tx_test(&dev, &dev.vqs[1], delayed, nbufs); in main()