Lines Matching refs:ctx
163 typedef int (*testfunc_t)(struct TestContext *ctx);
175 port_info_get(struct TestContext *ctx) in port_info_get() argument
182 printf("Testing NETMAP_REQ_PORT_INFO_GET on '%s'\n", ctx->ifname_ext); in port_info_get()
184 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_info_get()
188 req.nr_mem_id = ctx->nr_mem_id; in port_info_get()
189 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_info_get()
208 ctx->nr_tx_slots = req.nr_tx_slots; in port_info_get()
209 ctx->nr_rx_slots = req.nr_rx_slots; in port_info_get()
210 ctx->nr_tx_rings = req.nr_tx_rings; in port_info_get()
211 ctx->nr_rx_rings = req.nr_rx_rings; in port_info_get()
212 ctx->nr_mem_id = req.nr_mem_id; in port_info_get()
219 port_register(struct TestContext *ctx) in port_register() argument
228 ctx->nr_mode, ctx->nr_ringid, (unsigned long long)ctx->nr_flags, in port_register()
229 ctx->ifname_ext); in port_register()
231 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_register()
234 hdr.nr_options = (uintptr_t)ctx->nr_opt; in port_register()
236 req.nr_mem_id = ctx->nr_mem_id; in port_register()
237 req.nr_mode = ctx->nr_mode; in port_register()
238 req.nr_ringid = ctx->nr_ringid; in port_register()
239 req.nr_flags = ctx->nr_flags; in port_register()
240 req.nr_tx_slots = ctx->nr_tx_slots; in port_register()
241 req.nr_rx_slots = ctx->nr_rx_slots; in port_register()
242 req.nr_tx_rings = ctx->nr_tx_rings; in port_register()
243 req.nr_host_tx_rings = ctx->nr_host_tx_rings; in port_register()
244 req.nr_host_rx_rings = ctx->nr_host_rx_rings; in port_register()
245 req.nr_rx_rings = ctx->nr_rx_rings; in port_register()
246 req.nr_extra_bufs = ctx->nr_extra_bufs; in port_register()
247 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_register()
263 success = req.nr_memsize && (ctx->nr_mode == req.nr_mode) && in port_register()
264 (ctx->nr_ringid == req.nr_ringid) && in port_register()
265 (ctx->nr_flags == req.nr_flags) && in port_register()
266 ((!ctx->nr_tx_slots && req.nr_tx_slots) || in port_register()
267 (ctx->nr_tx_slots == req.nr_tx_slots)) && in port_register()
268 ((!ctx->nr_rx_slots && req.nr_rx_slots) || in port_register()
269 (ctx->nr_rx_slots == req.nr_rx_slots)) && in port_register()
270 ((!ctx->nr_tx_rings && req.nr_tx_rings) || in port_register()
271 (ctx->nr_tx_rings == req.nr_tx_rings)) && in port_register()
272 ((!ctx->nr_rx_rings && req.nr_rx_rings) || in port_register()
273 (ctx->nr_rx_rings == req.nr_rx_rings)) && in port_register()
274 ((!ctx->nr_host_tx_rings && req.nr_host_tx_rings) || in port_register()
275 (ctx->nr_host_tx_rings == req.nr_host_tx_rings)) && in port_register()
276 ((!ctx->nr_host_rx_rings && req.nr_host_rx_rings) || in port_register()
277 (ctx->nr_host_rx_rings == req.nr_host_rx_rings)) && in port_register()
278 ((!ctx->nr_mem_id && req.nr_mem_id) || in port_register()
279 (ctx->nr_mem_id == req.nr_mem_id)) && in port_register()
280 (ctx->nr_extra_bufs == req.nr_extra_bufs); in port_register()
286 ctx->nr_tx_slots = req.nr_tx_slots; in port_register()
287 ctx->nr_rx_slots = req.nr_rx_slots; in port_register()
288 ctx->nr_tx_rings = req.nr_tx_rings; in port_register()
289 ctx->nr_rx_rings = req.nr_rx_rings; in port_register()
290 ctx->nr_host_tx_rings = req.nr_host_tx_rings; in port_register()
291 ctx->nr_host_rx_rings = req.nr_host_rx_rings; in port_register()
292 ctx->nr_mem_id = req.nr_mem_id; in port_register()
293 ctx->nr_extra_bufs = req.nr_extra_bufs; in port_register()
299 niocregif(struct TestContext *ctx, int netmap_api) in niocregif() argument
305 printf("Testing legacy NIOCREGIF on '%s'\n", ctx->ifname_ext); in niocregif()
308 memcpy(req.nr_name, ctx->ifname_ext, sizeof(req.nr_name)); in niocregif()
311 req.nr_ringid = ctx->nr_ringid; in niocregif()
312 req.nr_flags = ctx->nr_mode | ctx->nr_flags; in niocregif()
313 req.nr_tx_slots = ctx->nr_tx_slots; in niocregif()
314 req.nr_rx_slots = ctx->nr_rx_slots; in niocregif()
315 req.nr_tx_rings = ctx->nr_tx_rings; in niocregif()
316 req.nr_rx_rings = ctx->nr_rx_rings; in niocregif()
317 req.nr_arg2 = ctx->nr_mem_id; in niocregif()
318 req.nr_arg3 = ctx->nr_extra_bufs; in niocregif()
320 ret = ioctl(ctx->fd, NIOCREGIF, &req); in niocregif()
339 (ctx->nr_ringid == req.nr_ringid) && in niocregif()
340 ((ctx->nr_mode | ctx->nr_flags) == req.nr_flags) && in niocregif()
341 ((!ctx->nr_tx_slots && req.nr_tx_slots) || in niocregif()
342 (ctx->nr_tx_slots == req.nr_tx_slots)) && in niocregif()
343 ((!ctx->nr_rx_slots && req.nr_rx_slots) || in niocregif()
344 (ctx->nr_rx_slots == req.nr_rx_slots)) && in niocregif()
345 ((!ctx->nr_tx_rings && req.nr_tx_rings) || in niocregif()
346 (ctx->nr_tx_rings == req.nr_tx_rings)) && in niocregif()
347 ((!ctx->nr_rx_rings && req.nr_rx_rings) || in niocregif()
348 (ctx->nr_rx_rings == req.nr_rx_rings)) && in niocregif()
349 ((!ctx->nr_mem_id && req.nr_arg2) || in niocregif()
350 (ctx->nr_mem_id == req.nr_arg2)) && in niocregif()
351 (ctx->nr_extra_bufs == req.nr_arg3); in niocregif()
357 ctx->nr_tx_slots = req.nr_tx_slots; in niocregif()
358 ctx->nr_rx_slots = req.nr_rx_slots; in niocregif()
359 ctx->nr_tx_rings = req.nr_tx_rings; in niocregif()
360 ctx->nr_rx_rings = req.nr_rx_rings; in niocregif()
361 ctx->nr_mem_id = req.nr_arg2; in niocregif()
362 ctx->nr_extra_bufs = req.nr_arg3; in niocregif()
376 legacy_regif_default(struct TestContext *ctx) in legacy_regif_default() argument
378 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_default()
382 legacy_regif_all_nic(struct TestContext *ctx) in legacy_regif_all_nic() argument
384 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_all_nic()
385 return niocregif(ctx, NETMAP_API); in legacy_regif_all_nic()
389 legacy_regif_12(struct TestContext *ctx) in legacy_regif_12() argument
391 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_12()
392 return niocregif(ctx, NETMAP_API_NIOCREGIF+1); in legacy_regif_12()
396 legacy_regif_sw(struct TestContext *ctx) in legacy_regif_sw() argument
398 ctx->nr_mode = NR_REG_SW; in legacy_regif_sw()
399 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_sw()
403 legacy_regif_future(struct TestContext *ctx) in legacy_regif_future() argument
405 ctx->nr_mode = NR_REG_NIC_SW; in legacy_regif_future()
409 return niocregif(ctx, NETMAP_API+2); in legacy_regif_future()
413 legacy_regif_extra_bufs(struct TestContext *ctx) in legacy_regif_extra_bufs() argument
415 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_extra_bufs()
416 ctx->nr_extra_bufs = 20; /* arbitrary number of extra bufs */ in legacy_regif_extra_bufs()
417 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_extra_bufs()
421 legacy_regif_extra_bufs_pipe(struct TestContext *ctx) in legacy_regif_extra_bufs_pipe() argument
423 strncat(ctx->ifname_ext, "{pipeexbuf", sizeof(ctx->ifname_ext)); in legacy_regif_extra_bufs_pipe()
424 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_extra_bufs_pipe()
425 ctx->nr_extra_bufs = 58; /* arbitrary number of extra bufs */ in legacy_regif_extra_bufs_pipe()
427 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_extra_bufs_pipe()
431 legacy_regif_extra_bufs_pipe_vale(struct TestContext *ctx) in legacy_regif_extra_bufs_pipe_vale() argument
433 strncpy(ctx->ifname_ext, "valeX1:Y4", sizeof(ctx->ifname_ext)); in legacy_regif_extra_bufs_pipe_vale()
434 return legacy_regif_extra_bufs_pipe(ctx); in legacy_regif_extra_bufs_pipe_vale()
439 num_registered_rings(struct TestContext *ctx) in num_registered_rings() argument
441 if (ctx->nr_flags & NR_TX_RINGS_ONLY) { in num_registered_rings()
442 return ctx->nr_tx_rings; in num_registered_rings()
444 if (ctx->nr_flags & NR_RX_RINGS_ONLY) { in num_registered_rings()
445 return ctx->nr_rx_rings; in num_registered_rings()
448 return ctx->nr_tx_rings + ctx->nr_rx_rings; in num_registered_rings()
452 port_register_hwall_host(struct TestContext *ctx) in port_register_hwall_host() argument
454 ctx->nr_mode = NR_REG_NIC_SW; in port_register_hwall_host()
455 return port_register(ctx); in port_register_hwall_host()
459 port_register_hostall(struct TestContext *ctx) in port_register_hostall() argument
461 ctx->nr_mode = NR_REG_SW; in port_register_hostall()
462 return port_register(ctx); in port_register_hostall()
466 port_register_hwall(struct TestContext *ctx) in port_register_hwall() argument
468 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall()
469 return port_register(ctx); in port_register_hwall()
473 port_register_single_hw_pair(struct TestContext *ctx) in port_register_single_hw_pair() argument
475 ctx->nr_mode = NR_REG_ONE_NIC; in port_register_single_hw_pair()
476 ctx->nr_ringid = 0; in port_register_single_hw_pair()
477 return port_register(ctx); in port_register_single_hw_pair()
481 port_register_single_host_pair(struct TestContext *ctx) in port_register_single_host_pair() argument
483 ctx->nr_mode = NR_REG_ONE_SW; in port_register_single_host_pair()
484 ctx->nr_host_tx_rings = 2; in port_register_single_host_pair()
485 ctx->nr_host_rx_rings = 2; in port_register_single_host_pair()
486 ctx->nr_ringid = 1; in port_register_single_host_pair()
487 return port_register(ctx); in port_register_single_host_pair()
491 port_register_hostall_many(struct TestContext *ctx) in port_register_hostall_many() argument
493 ctx->nr_mode = NR_REG_SW; in port_register_hostall_many()
494 ctx->nr_host_tx_rings = 5; in port_register_hostall_many()
495 ctx->nr_host_rx_rings = 4; in port_register_hostall_many()
496 return port_register(ctx); in port_register_hostall_many()
500 port_register_hwall_tx(struct TestContext *ctx) in port_register_hwall_tx() argument
502 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall_tx()
503 ctx->nr_flags |= NR_TX_RINGS_ONLY; in port_register_hwall_tx()
504 return port_register(ctx); in port_register_hwall_tx()
508 port_register_hwall_rx(struct TestContext *ctx) in port_register_hwall_rx() argument
510 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall_rx()
511 ctx->nr_flags |= NR_RX_RINGS_ONLY; in port_register_hwall_rx()
512 return port_register(ctx); in port_register_hwall_rx()
517 vale_attach(struct TestContext *ctx) in vale_attach() argument
521 char vpname[sizeof(ctx->bdgname) + 1 + sizeof(ctx->ifname_ext)]; in vale_attach()
524 snprintf(vpname, sizeof(vpname), "%s:%s", ctx->bdgname, ctx->ifname_ext); in vale_attach()
531 req.reg.nr_mem_id = ctx->nr_mem_id; in vale_attach()
532 if (ctx->nr_mode == 0) { in vale_attach()
533 ctx->nr_mode = NR_REG_ALL_NIC; /* default */ in vale_attach()
535 req.reg.nr_mode = ctx->nr_mode; in vale_attach()
536 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_attach()
543 return ((!ctx->nr_mem_id && req.reg.nr_mem_id > 1) || in vale_attach()
544 (ctx->nr_mem_id == req.reg.nr_mem_id)) && in vale_attach()
545 (ctx->nr_flags == req.reg.nr_flags) in vale_attach()
552 vale_detach(struct TestContext *ctx) in vale_detach() argument
559 snprintf(vpname, sizeof(vpname), "%s:%s", ctx->bdgname, ctx->ifname_ext); in vale_detach()
565 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_detach()
576 vale_attach_detach(struct TestContext *ctx) in vale_attach_detach() argument
580 if ((ret = vale_attach(ctx)) != 0) { in vale_attach_detach()
584 return vale_detach(ctx); in vale_attach_detach()
588 vale_attach_detach_host_rings(struct TestContext *ctx) in vale_attach_detach_host_rings() argument
590 ctx->nr_mode = NR_REG_NIC_SW; in vale_attach_detach_host_rings()
591 return vale_attach_detach(ctx); in vale_attach_detach_host_rings()
597 port_hdr_set_and_get(struct TestContext *ctx) in port_hdr_set_and_get() argument
603 printf("Testing NETMAP_REQ_PORT_HDR_SET on '%s'\n", ctx->ifname_ext); in port_hdr_set_and_get()
605 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_hdr_set_and_get()
609 req.nr_hdr_len = ctx->nr_hdr_len; in port_hdr_set_and_get()
610 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_hdr_set_and_get()
616 if (req.nr_hdr_len != ctx->nr_hdr_len) { in port_hdr_set_and_get()
620 printf("Testing NETMAP_REQ_PORT_HDR_GET on '%s'\n", ctx->ifname_ext); in port_hdr_set_and_get()
623 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_hdr_set_and_get()
630 return (req.nr_hdr_len == ctx->nr_hdr_len) ? 0 : -1; in port_hdr_set_and_get()
642 vale_ephemeral_port_hdr_manipulation(struct TestContext *ctx) in vale_ephemeral_port_hdr_manipulation() argument
646 strncpy(ctx->ifname_ext, "vale:eph0", sizeof(ctx->ifname_ext)); in vale_ephemeral_port_hdr_manipulation()
647 ctx->nr_mode = NR_REG_ALL_NIC; in vale_ephemeral_port_hdr_manipulation()
648 if ((ret = port_register(ctx))) { in vale_ephemeral_port_hdr_manipulation()
652 ctx->nr_hdr_len = VIRTIO_NET_HDR_LEN_WITH_MERGEABLE_RXBUFS; in vale_ephemeral_port_hdr_manipulation()
653 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
656 ctx->nr_hdr_len = 0; in vale_ephemeral_port_hdr_manipulation()
657 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
660 ctx->nr_hdr_len = VIRTIO_NET_HDR_LEN; in vale_ephemeral_port_hdr_manipulation()
661 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
668 vale_persistent_port(struct TestContext *ctx) in vale_persistent_port() argument
675 strncpy(ctx->ifname_ext, "per4", sizeof(ctx->ifname_ext)); in vale_persistent_port()
677 printf("Testing NETMAP_REQ_VALE_NEWIF on '%s'\n", ctx->ifname_ext); in vale_persistent_port()
679 nmreq_hdr_init(&hdr, ctx->ifname_ext); in vale_persistent_port()
683 req.nr_mem_id = ctx->nr_mem_id; in vale_persistent_port()
684 req.nr_tx_slots = ctx->nr_tx_slots; in vale_persistent_port()
685 req.nr_rx_slots = ctx->nr_rx_slots; in vale_persistent_port()
686 req.nr_tx_rings = ctx->nr_tx_rings; in vale_persistent_port()
687 req.nr_rx_rings = ctx->nr_rx_rings; in vale_persistent_port()
688 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_persistent_port()
695 result = vale_attach_detach(ctx); in vale_persistent_port()
697 printf("Testing NETMAP_REQ_VALE_DELIF on '%s'\n", ctx->ifname_ext); in vale_persistent_port()
700 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_persistent_port()
713 pools_info_get(struct TestContext *ctx) in pools_info_get() argument
719 printf("Testing NETMAP_REQ_POOLS_INFO_GET on '%s'\n", ctx->ifname_ext); in pools_info_get()
721 nmreq_hdr_init(&hdr, ctx->ifname_ext); in pools_info_get()
725 req.nr_mem_id = ctx->nr_mem_id; in pools_info_get()
726 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in pools_info_get()
757 pools_info_get_and_register(struct TestContext *ctx) in pools_info_get_and_register() argument
763 ret = pools_info_get(ctx); in pools_info_get_and_register()
768 ctx->nr_mode = NR_REG_ONE_NIC; in pools_info_get_and_register()
769 ret = port_register(ctx); in pools_info_get_and_register()
773 ctx->nr_mem_id = 1; in pools_info_get_and_register()
776 return pools_info_get(ctx); in pools_info_get_and_register()
780 pools_info_get_empty_ifname(struct TestContext *ctx) in pools_info_get_empty_ifname() argument
782 strncpy(ctx->ifname_ext, "", sizeof(ctx->ifname_ext)); in pools_info_get_empty_ifname()
783 return pools_info_get(ctx) != 0 ? 0 : -1; in pools_info_get_empty_ifname()
787 pipe_master(struct TestContext *ctx) in pipe_master() argument
789 strncat(ctx->ifname_ext, "{pipeid1", sizeof(ctx->ifname_ext)); in pipe_master()
790 ctx->nr_mode = NR_REG_NIC_SW; in pipe_master()
792 if (port_register(ctx) == 0) { in pipe_master()
796 ctx->nr_mode = NR_REG_ALL_NIC; in pipe_master()
798 return port_register(ctx); in pipe_master()
802 pipe_slave(struct TestContext *ctx) in pipe_slave() argument
804 strncat(ctx->ifname_ext, "}pipeid2", sizeof(ctx->ifname_ext)); in pipe_slave()
805 ctx->nr_mode = NR_REG_ALL_NIC; in pipe_slave()
807 return port_register(ctx); in pipe_slave()
813 pipe_port_info_get(struct TestContext *ctx) in pipe_port_info_get() argument
815 strncat(ctx->ifname_ext, "}pipeid3", sizeof(ctx->ifname_ext)); in pipe_port_info_get()
817 return port_info_get(ctx); in pipe_port_info_get()
821 pipe_pools_info_get(struct TestContext *ctx) in pipe_pools_info_get() argument
823 strncat(ctx->ifname_ext, "{xid", sizeof(ctx->ifname_ext)); in pipe_pools_info_get()
825 return pools_info_get(ctx); in pipe_pools_info_get()
830 vale_polling_enable(struct TestContext *ctx) in vale_polling_enable() argument
837 snprintf(vpname, sizeof(vpname), "%s:%s", ctx->bdgname, ctx->ifname_ext); in vale_polling_enable()
844 req.nr_mode = ctx->nr_mode; in vale_polling_enable()
845 req.nr_first_cpu_id = ctx->nr_first_cpu_id; in vale_polling_enable()
846 req.nr_num_polling_cpus = ctx->nr_num_polling_cpus; in vale_polling_enable()
847 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_polling_enable()
853 return (req.nr_mode == ctx->nr_mode && in vale_polling_enable()
854 req.nr_first_cpu_id == ctx->nr_first_cpu_id && in vale_polling_enable()
855 req.nr_num_polling_cpus == ctx->nr_num_polling_cpus) in vale_polling_enable()
862 vale_polling_disable(struct TestContext *ctx) in vale_polling_disable() argument
869 snprintf(vpname, sizeof(vpname), "%s:%s", ctx->bdgname, ctx->ifname_ext); in vale_polling_disable()
876 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_polling_disable()
886 vale_polling_enable_disable(struct TestContext *ctx) in vale_polling_enable_disable() argument
890 if ((ret = vale_attach(ctx)) != 0) { in vale_polling_enable_disable()
894 ctx->nr_mode = NETMAP_POLLING_MODE_SINGLE_CPU; in vale_polling_enable_disable()
895 ctx->nr_num_polling_cpus = 1; in vale_polling_enable_disable()
896 ctx->nr_first_cpu_id = 0; in vale_polling_enable_disable()
897 if ((ret = vale_polling_enable(ctx))) { in vale_polling_enable_disable()
898 vale_detach(ctx); in vale_polling_enable_disable()
909 if ((ret = vale_polling_disable(ctx))) { in vale_polling_enable_disable()
910 vale_detach(ctx); in vale_polling_enable_disable()
914 return vale_detach(ctx); in vale_polling_enable_disable()
918 push_option(struct nmreq_option *opt, struct TestContext *ctx) in push_option() argument
920 opt->nro_next = (uintptr_t)ctx->nr_opt; in push_option()
921 ctx->nr_opt = opt; in push_option()
925 clear_options(struct TestContext *ctx) in clear_options() argument
927 ctx->nr_opt = NULL; in clear_options()
953 unsupported_option(struct TestContext *ctx) in unsupported_option() argument
957 printf("Testing unsupported option on %s\n", ctx->ifname_ext); in unsupported_option()
961 push_option(&opt, ctx); in unsupported_option()
964 if (port_register_hwall(ctx) >= 0) in unsupported_option()
967 clear_options(ctx); in unsupported_option()
973 infinite_options(struct TestContext *ctx) in infinite_options() argument
977 printf("Testing infinite list of options on %s\n", ctx->ifname_ext); in infinite_options()
980 push_option(&opt, ctx); in infinite_options()
982 if (port_register_hwall(ctx) >= 0) in infinite_options()
984 clear_options(ctx); in infinite_options()
1024 push_extmem_option(struct TestContext *ctx, const struct nmreq_pools_info *pi, in push_extmem_option() argument
1041 push_option(&e->nro_opt, ctx); in push_extmem_option()
1047 pop_extmem_option(struct TestContext *ctx, struct nmreq_opt_extmem *exp) in pop_extmem_option() argument
1052 e = (struct nmreq_opt_extmem *)(uintptr_t)ctx->nr_opt; in pop_extmem_option()
1053 ctx->nr_opt = (struct nmreq_option *)(uintptr_t)ctx->nr_opt->nro_next; in pop_extmem_option()
1078 _extmem_option(struct TestContext *ctx, in _extmem_option() argument
1084 if ((ret = push_extmem_option(ctx, pi, &e)) < 0) in _extmem_option()
1089 strncpy(ctx->ifname_ext, "vale0:0", sizeof(ctx->ifname_ext)); in _extmem_option()
1090 ctx->nr_tx_slots = 16; in _extmem_option()
1091 ctx->nr_rx_slots = 16; in _extmem_option()
1093 if ((ret = port_register_hwall(ctx))) in _extmem_option()
1096 ret = pop_extmem_option(ctx, &save); in _extmem_option()
1132 extmem_option(struct TestContext *ctx) in extmem_option() argument
1139 return _extmem_option(ctx, &pools_info); in extmem_option()
1143 bad_extmem_option(struct TestContext *ctx) in bad_extmem_option() argument
1154 return _extmem_option(ctx, &pools_info) < 0 ? 0 : -1; in bad_extmem_option()
1158 duplicate_extmem_options(struct TestContext *ctx) in duplicate_extmem_options() argument
1168 if ((ret = push_extmem_option(ctx, &pools_info, &e1)) < 0) in duplicate_extmem_options()
1171 if ((ret = push_extmem_option(ctx, &pools_info, &e2)) < 0) { in duplicate_extmem_options()
1172 clear_options(ctx); in duplicate_extmem_options()
1179 strncpy(ctx->ifname_ext, "vale0:0", sizeof(ctx->ifname_ext)); in duplicate_extmem_options()
1180 ctx->nr_tx_slots = 16; in duplicate_extmem_options()
1181 ctx->nr_rx_slots = 16; in duplicate_extmem_options()
1183 ret = port_register_hwall(ctx); in duplicate_extmem_options()
1190 if ((ret = pop_extmem_option(ctx, &save2))) in duplicate_extmem_options()
1194 if ((ret = pop_extmem_option(ctx, &save1))) in duplicate_extmem_options()
1202 push_csb_option(struct TestContext *ctx, struct nmreq_opt_csb *opt) in push_csb_option() argument
1208 ctx->nr_flags |= NR_EXCLUSIVE; in push_csb_option()
1211 ret = port_info_get(ctx); in push_csb_option()
1215 num_entries = num_registered_rings(ctx); in push_csb_option()
1220 if (ctx->csb) { in push_csb_option()
1221 free(ctx->csb); in push_csb_option()
1223 ret = posix_memalign(&ctx->csb, sizeof(struct nm_csb_atok), csb_size); in push_csb_option()
1231 opt->csb_atok = (uintptr_t)ctx->csb; in push_csb_option()
1232 opt->csb_ktoa = (uintptr_t)(((uint8_t *)ctx->csb) + in push_csb_option()
1236 push_option(&opt->nro_opt, ctx); in push_csb_option()
1242 csb_mode(struct TestContext *ctx) in csb_mode() argument
1247 ret = push_csb_option(ctx, &opt); in csb_mode()
1252 ret = port_register_hwall(ctx); in csb_mode()
1253 clear_options(ctx); in csb_mode()
1259 csb_mode_invalid_memory(struct TestContext *ctx) in csb_mode_invalid_memory() argument
1268 push_option(&opt.nro_opt, ctx); in csb_mode_invalid_memory()
1270 ctx->nr_flags = NR_EXCLUSIVE; in csb_mode_invalid_memory()
1271 ret = port_register_hwall(ctx); in csb_mode_invalid_memory()
1272 clear_options(ctx); in csb_mode_invalid_memory()
1278 sync_kloop_stop(struct TestContext *ctx) in sync_kloop_stop() argument
1283 printf("Testing NETMAP_REQ_SYNC_KLOOP_STOP on '%s'\n", ctx->ifname_ext); in sync_kloop_stop()
1285 nmreq_hdr_init(&hdr, ctx->ifname_ext); in sync_kloop_stop()
1287 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in sync_kloop_stop()
1298 struct TestContext *ctx = opaque; in sync_kloop_worker() local
1303 printf("Testing NETMAP_REQ_SYNC_KLOOP_START on '%s'\n", ctx->ifname_ext); in sync_kloop_worker()
1305 nmreq_hdr_init(&hdr, ctx->ifname_ext); in sync_kloop_worker()
1308 hdr.nr_options = (uintptr_t)ctx->nr_opt; in sync_kloop_worker()
1311 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in sync_kloop_worker()
1316 if (ctx->sem) { in sync_kloop_worker()
1317 sem_post(ctx->sem); in sync_kloop_worker()
1324 sync_kloop_start_stop(struct TestContext *ctx) in sync_kloop_start_stop() argument
1330 ret = pthread_create(&th, NULL, sync_kloop_worker, ctx); in sync_kloop_start_stop()
1336 ret = sync_kloop_stop(ctx); in sync_kloop_start_stop()
1350 sync_kloop(struct TestContext *ctx) in sync_kloop() argument
1354 ret = csb_mode(ctx); in sync_kloop()
1359 return sync_kloop_start_stop(ctx); in sync_kloop()
1363 sync_kloop_eventfds(struct TestContext *ctx) in sync_kloop_eventfds() argument
1374 modeopt.mode = ctx->sync_kloop_mode; in sync_kloop_eventfds()
1375 push_option(&modeopt.nro_opt, ctx); in sync_kloop_eventfds()
1377 num_entries = num_registered_rings(ctx); in sync_kloop_eventfds()
1392 push_option(&evopt->nro_opt, ctx); in sync_kloop_eventfds()
1395 ret = sync_kloop_start_stop(ctx); in sync_kloop_eventfds()
1398 clear_options(ctx); in sync_kloop_eventfds()
1409 clear_options(ctx); in sync_kloop_eventfds()
1415 sync_kloop_eventfds_all_mode(struct TestContext *ctx, in sync_kloop_eventfds_all_mode() argument
1420 ret = csb_mode(ctx); in sync_kloop_eventfds_all_mode()
1425 ctx->sync_kloop_mode = sync_kloop_mode; in sync_kloop_eventfds_all_mode()
1427 return sync_kloop_eventfds(ctx); in sync_kloop_eventfds_all_mode()
1431 sync_kloop_eventfds_all(struct TestContext *ctx) in sync_kloop_eventfds_all() argument
1433 return sync_kloop_eventfds_all_mode(ctx, 0); in sync_kloop_eventfds_all()
1437 sync_kloop_eventfds_all_tx(struct TestContext *ctx) in sync_kloop_eventfds_all_tx() argument
1442 ret = push_csb_option(ctx, &opt); in sync_kloop_eventfds_all_tx()
1447 ret = port_register_hwall_tx(ctx); in sync_kloop_eventfds_all_tx()
1451 clear_options(ctx); in sync_kloop_eventfds_all_tx()
1453 return sync_kloop_eventfds(ctx); in sync_kloop_eventfds_all_tx()
1457 sync_kloop_eventfds_all_direct(struct TestContext *ctx) in sync_kloop_eventfds_all_direct() argument
1459 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct()
1464 sync_kloop_eventfds_all_direct_tx(struct TestContext *ctx) in sync_kloop_eventfds_all_direct_tx() argument
1466 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct_tx()
1471 sync_kloop_eventfds_all_direct_rx(struct TestContext *ctx) in sync_kloop_eventfds_all_direct_rx() argument
1473 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct_rx()
1478 sync_kloop_nocsb(struct TestContext *ctx) in sync_kloop_nocsb() argument
1482 ret = port_register_hwall(ctx); in sync_kloop_nocsb()
1489 return sync_kloop_start_stop(ctx) != 0 ? 0 : -1; in sync_kloop_nocsb()
1493 csb_enable(struct TestContext *ctx) in csb_enable() argument
1500 ret = push_csb_option(ctx, &opt); in csb_enable()
1507 nmreq_hdr_init(&hdr, ctx->ifname_ext); in csb_enable()
1509 hdr.nr_options = (uintptr_t)ctx->nr_opt; in csb_enable()
1512 printf("Testing NETMAP_REQ_CSB_ENABLE on '%s'\n", ctx->ifname_ext); in csb_enable()
1514 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in csb_enable()
1521 clear_options(ctx); in csb_enable()
1527 sync_kloop_csb_enable(struct TestContext *ctx) in sync_kloop_csb_enable() argument
1531 ctx->nr_flags |= NR_EXCLUSIVE; in sync_kloop_csb_enable()
1532 ret = port_register_hwall(ctx); in sync_kloop_csb_enable()
1537 ret = csb_enable(ctx); in sync_kloop_csb_enable()
1542 return sync_kloop_start_stop(ctx); in sync_kloop_csb_enable()
1546 sync_kloop_conflict(struct TestContext *ctx) in sync_kloop_conflict() argument
1556 ret = push_csb_option(ctx, &opt); in sync_kloop_conflict()
1561 ret = port_register_hwall(ctx); in sync_kloop_conflict()
1565 clear_options(ctx); in sync_kloop_conflict()
1572 ctx->sem = &sem; in sync_kloop_conflict()
1574 ret = pthread_create(&th1, NULL, sync_kloop_worker, ctx); in sync_kloop_conflict()
1580 ret = pthread_create(&th2, NULL, sync_kloop_worker, ctx); in sync_kloop_conflict()
1597 err |= sync_kloop_stop(ctx); in sync_kloop_conflict()
1612 ctx->sem = NULL; in sync_kloop_conflict()
1625 sync_kloop_eventfds_mismatch(struct TestContext *ctx) in sync_kloop_eventfds_mismatch() argument
1630 ret = push_csb_option(ctx, &opt); in sync_kloop_eventfds_mismatch()
1635 ret = port_register_hwall_rx(ctx); in sync_kloop_eventfds_mismatch()
1639 clear_options(ctx); in sync_kloop_eventfds_mismatch()
1645 ctx->nr_flags &= ~NR_RX_RINGS_ONLY; in sync_kloop_eventfds_mismatch()
1647 return (sync_kloop_eventfds(ctx) != 0) ? 0 : -1; in sync_kloop_eventfds_mismatch()
1651 null_port(struct TestContext *ctx) in null_port() argument
1655 ctx->nr_mem_id = 1; in null_port()
1656 ctx->nr_mode = NR_REG_NULL; in null_port()
1657 ctx->nr_tx_rings = 10; in null_port()
1658 ctx->nr_rx_rings = 5; in null_port()
1659 ctx->nr_tx_slots = 256; in null_port()
1660 ctx->nr_rx_slots = 100; in null_port()
1661 ret = port_register(ctx); in null_port()
1669 null_port_all_zero(struct TestContext *ctx) in null_port_all_zero() argument
1673 ctx->nr_mem_id = 1; in null_port_all_zero()
1674 ctx->nr_mode = NR_REG_NULL; in null_port_all_zero()
1675 ctx->nr_tx_rings = 0; in null_port_all_zero()
1676 ctx->nr_rx_rings = 0; in null_port_all_zero()
1677 ctx->nr_tx_slots = 0; in null_port_all_zero()
1678 ctx->nr_rx_slots = 0; in null_port_all_zero()
1679 ret = port_register(ctx); in null_port_all_zero()
1687 null_port_sync(struct TestContext *ctx) in null_port_sync() argument
1691 ctx->nr_mem_id = 1; in null_port_sync()
1692 ctx->nr_mode = NR_REG_NULL; in null_port_sync()
1693 ctx->nr_tx_rings = 10; in null_port_sync()
1694 ctx->nr_rx_rings = 5; in null_port_sync()
1695 ctx->nr_tx_slots = 256; in null_port_sync()
1696 ctx->nr_rx_slots = 100; in null_port_sync()
1697 ret = port_register(ctx); in null_port_sync()
1701 ret = ioctl(ctx->fd, NIOCTXSYNC, 0); in null_port_sync()
1779 context_cleanup(struct TestContext *ctx) in context_cleanup() argument
1781 if (ctx->csb) { in context_cleanup()
1782 free(ctx->csb); in context_cleanup()
1783 ctx->csb = NULL; in context_cleanup()
1786 close(ctx->fd); in context_cleanup()
1787 ctx->fd = -1; in context_cleanup()