Lines Matching refs:ctx

179 typedef int (*testfunc_t)(struct TestContext *ctx);
192 port_info_get(struct TestContext *ctx) in port_info_get() argument
199 printf("Testing NETMAP_REQ_PORT_INFO_GET on '%s'\n", ctx->ifname_ext); in port_info_get()
201 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_info_get()
205 req.nr_mem_id = ctx->nr_mem_id; in port_info_get()
206 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_info_get()
225 ctx->nr_tx_slots = req.nr_tx_slots; in port_info_get()
226 ctx->nr_rx_slots = req.nr_rx_slots; in port_info_get()
227 ctx->nr_tx_rings = req.nr_tx_rings; in port_info_get()
228 ctx->nr_rx_rings = req.nr_rx_rings; in port_info_get()
229 ctx->nr_mem_id = req.nr_mem_id; in port_info_get()
236 port_register(struct TestContext *ctx) in port_register() argument
245 ctx->nr_mode, ctx->nr_ringid, (unsigned long long)ctx->nr_flags, in port_register()
246 ctx->ifname_ext); in port_register()
248 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_register()
251 hdr.nr_options = (uintptr_t)ctx->nr_opt; in port_register()
253 req.nr_mem_id = ctx->nr_mem_id; in port_register()
254 req.nr_mode = ctx->nr_mode; in port_register()
255 req.nr_ringid = ctx->nr_ringid; in port_register()
256 req.nr_flags = ctx->nr_flags; in port_register()
257 req.nr_tx_slots = ctx->nr_tx_slots; in port_register()
258 req.nr_rx_slots = ctx->nr_rx_slots; in port_register()
259 req.nr_tx_rings = ctx->nr_tx_rings; in port_register()
260 req.nr_host_tx_rings = ctx->nr_host_tx_rings; in port_register()
261 req.nr_host_rx_rings = ctx->nr_host_rx_rings; in port_register()
262 req.nr_rx_rings = ctx->nr_rx_rings; in port_register()
263 req.nr_extra_bufs = ctx->nr_extra_bufs; in port_register()
264 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_register()
280 success = req.nr_memsize && (ctx->nr_mode == req.nr_mode) && in port_register()
281 (ctx->nr_ringid == req.nr_ringid) && in port_register()
282 (ctx->nr_flags == req.nr_flags) && in port_register()
283 ((!ctx->nr_tx_slots && req.nr_tx_slots) || in port_register()
284 (ctx->nr_tx_slots == req.nr_tx_slots)) && in port_register()
285 ((!ctx->nr_rx_slots && req.nr_rx_slots) || in port_register()
286 (ctx->nr_rx_slots == req.nr_rx_slots)) && in port_register()
287 ((!ctx->nr_tx_rings && req.nr_tx_rings) || 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_rx_rings == req.nr_rx_rings)) && in port_register()
291 ((!ctx->nr_host_tx_rings && req.nr_host_tx_rings) || in port_register()
292 (ctx->nr_host_tx_rings == req.nr_host_tx_rings)) && in port_register()
293 ((!ctx->nr_host_rx_rings && req.nr_host_rx_rings) || in port_register()
294 (ctx->nr_host_rx_rings == req.nr_host_rx_rings)) && in port_register()
295 ((!ctx->nr_mem_id && req.nr_mem_id) || in port_register()
296 (ctx->nr_mem_id == req.nr_mem_id)) && in port_register()
297 (ctx->nr_extra_bufs == req.nr_extra_bufs); in port_register()
303 ctx->nr_tx_slots = req.nr_tx_slots; in port_register()
304 ctx->nr_rx_slots = req.nr_rx_slots; in port_register()
305 ctx->nr_tx_rings = req.nr_tx_rings; in port_register()
306 ctx->nr_rx_rings = req.nr_rx_rings; in port_register()
307 ctx->nr_host_tx_rings = req.nr_host_tx_rings; in port_register()
308 ctx->nr_host_rx_rings = req.nr_host_rx_rings; in port_register()
309 ctx->nr_mem_id = req.nr_mem_id; in port_register()
310 ctx->nr_extra_bufs = req.nr_extra_bufs; in port_register()
316 niocregif(struct TestContext *ctx, int netmap_api) in niocregif() argument
322 printf("Testing legacy NIOCREGIF on '%s'\n", ctx->ifname_ext); in niocregif()
325 memcpy(req.nr_name, ctx->ifname_ext, sizeof(req.nr_name)); in niocregif()
328 req.nr_ringid = ctx->nr_ringid; in niocregif()
329 req.nr_flags = ctx->nr_mode | ctx->nr_flags; in niocregif()
330 req.nr_tx_slots = ctx->nr_tx_slots; in niocregif()
331 req.nr_rx_slots = ctx->nr_rx_slots; in niocregif()
332 req.nr_tx_rings = ctx->nr_tx_rings; in niocregif()
333 req.nr_rx_rings = ctx->nr_rx_rings; in niocregif()
334 req.nr_arg2 = ctx->nr_mem_id; in niocregif()
335 req.nr_arg3 = ctx->nr_extra_bufs; in niocregif()
337 ret = ioctl(ctx->fd, NIOCREGIF, &req); in niocregif()
356 (ctx->nr_ringid == req.nr_ringid) && in niocregif()
357 ((ctx->nr_mode | ctx->nr_flags) == req.nr_flags) && in niocregif()
358 ((!ctx->nr_tx_slots && req.nr_tx_slots) || in niocregif()
359 (ctx->nr_tx_slots == req.nr_tx_slots)) && in niocregif()
360 ((!ctx->nr_rx_slots && req.nr_rx_slots) || in niocregif()
361 (ctx->nr_rx_slots == req.nr_rx_slots)) && in niocregif()
362 ((!ctx->nr_tx_rings && req.nr_tx_rings) || in niocregif()
363 (ctx->nr_tx_rings == req.nr_tx_rings)) && in niocregif()
364 ((!ctx->nr_rx_rings && req.nr_rx_rings) || in niocregif()
365 (ctx->nr_rx_rings == req.nr_rx_rings)) && in niocregif()
366 ((!ctx->nr_mem_id && req.nr_arg2) || in niocregif()
367 (ctx->nr_mem_id == req.nr_arg2)) && in niocregif()
368 (ctx->nr_extra_bufs == req.nr_arg3); in niocregif()
374 ctx->nr_tx_slots = req.nr_tx_slots; in niocregif()
375 ctx->nr_rx_slots = req.nr_rx_slots; in niocregif()
376 ctx->nr_tx_rings = req.nr_tx_rings; in niocregif()
377 ctx->nr_rx_rings = req.nr_rx_rings; in niocregif()
378 ctx->nr_mem_id = req.nr_arg2; in niocregif()
379 ctx->nr_extra_bufs = req.nr_arg3; in niocregif()
393 legacy_regif_default(struct TestContext *ctx) in legacy_regif_default() argument
395 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_default()
399 legacy_regif_all_nic(struct TestContext *ctx) in legacy_regif_all_nic() argument
401 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_all_nic()
402 return niocregif(ctx, NETMAP_API); in legacy_regif_all_nic()
406 legacy_regif_12(struct TestContext *ctx) in legacy_regif_12() argument
408 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_12()
409 return niocregif(ctx, NETMAP_API_NIOCREGIF+1); in legacy_regif_12()
413 legacy_regif_sw(struct TestContext *ctx) in legacy_regif_sw() argument
415 ctx->nr_mode = NR_REG_SW; in legacy_regif_sw()
416 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_sw()
420 legacy_regif_future(struct TestContext *ctx) in legacy_regif_future() argument
422 ctx->nr_mode = NR_REG_NIC_SW; in legacy_regif_future()
426 return niocregif(ctx, NETMAP_API+2); in legacy_regif_future()
430 legacy_regif_extra_bufs(struct TestContext *ctx) in legacy_regif_extra_bufs() argument
432 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_extra_bufs()
433 ctx->nr_extra_bufs = 20; /* arbitrary number of extra bufs */ in legacy_regif_extra_bufs()
434 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_extra_bufs()
438 legacy_regif_extra_bufs_pipe(struct TestContext *ctx) in legacy_regif_extra_bufs_pipe() argument
440 strncat(ctx->ifname_ext, "{pipeexbuf", sizeof(ctx->ifname_ext)); in legacy_regif_extra_bufs_pipe()
441 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_extra_bufs_pipe()
442 ctx->nr_extra_bufs = 58; /* arbitrary number of extra bufs */ in legacy_regif_extra_bufs_pipe()
444 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_extra_bufs_pipe()
448 legacy_regif_extra_bufs_pipe_vale(struct TestContext *ctx) in legacy_regif_extra_bufs_pipe_vale() argument
450 strncpy(ctx->ifname_ext, "valeX1:Y4", sizeof(ctx->ifname_ext)); in legacy_regif_extra_bufs_pipe_vale()
451 return legacy_regif_extra_bufs_pipe(ctx); in legacy_regif_extra_bufs_pipe_vale()
456 num_registered_rings(struct TestContext *ctx) in num_registered_rings() argument
458 if (ctx->nr_flags & NR_TX_RINGS_ONLY) { in num_registered_rings()
459 return ctx->nr_tx_rings; in num_registered_rings()
461 if (ctx->nr_flags & NR_RX_RINGS_ONLY) { in num_registered_rings()
462 return ctx->nr_rx_rings; in num_registered_rings()
465 return ctx->nr_tx_rings + ctx->nr_rx_rings; in num_registered_rings()
469 port_register_hwall_host(struct TestContext *ctx) in port_register_hwall_host() argument
471 ctx->nr_mode = NR_REG_NIC_SW; in port_register_hwall_host()
472 return port_register(ctx); in port_register_hwall_host()
476 port_register_hostall(struct TestContext *ctx) in port_register_hostall() argument
478 ctx->nr_mode = NR_REG_SW; in port_register_hostall()
479 return port_register(ctx); in port_register_hostall()
483 port_register_hwall(struct TestContext *ctx) in port_register_hwall() argument
485 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall()
486 return port_register(ctx); in port_register_hwall()
490 port_register_single_hw_pair(struct TestContext *ctx) in port_register_single_hw_pair() argument
492 ctx->nr_mode = NR_REG_ONE_NIC; in port_register_single_hw_pair()
493 ctx->nr_ringid = 0; in port_register_single_hw_pair()
494 return port_register(ctx); in port_register_single_hw_pair()
498 port_register_single_host_pair(struct TestContext *ctx) in port_register_single_host_pair() argument
500 ctx->nr_mode = NR_REG_ONE_SW; in port_register_single_host_pair()
501 ctx->nr_host_tx_rings = 2; in port_register_single_host_pair()
502 ctx->nr_host_rx_rings = 2; in port_register_single_host_pair()
503 ctx->nr_ringid = 1; in port_register_single_host_pair()
504 return port_register(ctx); in port_register_single_host_pair()
508 port_register_hostall_many(struct TestContext *ctx) in port_register_hostall_many() argument
510 ctx->nr_mode = NR_REG_SW; in port_register_hostall_many()
511 ctx->nr_host_tx_rings = 5; in port_register_hostall_many()
512 ctx->nr_host_rx_rings = 4; in port_register_hostall_many()
513 return port_register(ctx); in port_register_hostall_many()
517 port_register_hwall_tx(struct TestContext *ctx) in port_register_hwall_tx() argument
519 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall_tx()
520 ctx->nr_flags |= NR_TX_RINGS_ONLY; in port_register_hwall_tx()
521 return port_register(ctx); in port_register_hwall_tx()
525 port_register_hwall_rx(struct TestContext *ctx) in port_register_hwall_rx() argument
527 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall_rx()
528 ctx->nr_flags |= NR_RX_RINGS_ONLY; in port_register_hwall_rx()
529 return port_register(ctx); in port_register_hwall_rx()
534 vale_mkname(char *vpname, struct TestContext *ctx) in vale_mkname() argument
536 if (snprintf(vpname, NM_IFNAMSZ, "%s:%s", ctx->bdgname, ctx->ifname_ext) >= NM_IFNAMSZ) { in vale_mkname()
537 fprintf(stderr, "%s:%s too long (max %d chars)\n", ctx->bdgname, ctx->ifname_ext, in vale_mkname()
547 vale_attach(struct TestContext *ctx) in vale_attach() argument
554 if (vale_mkname(vpname, ctx) < 0) in vale_attach()
562 req.reg.nr_mem_id = ctx->nr_mem_id; in vale_attach()
563 if (ctx->nr_mode == 0) { in vale_attach()
564 ctx->nr_mode = NR_REG_ALL_NIC; /* default */ in vale_attach()
566 req.reg.nr_mode = ctx->nr_mode; in vale_attach()
567 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_attach()
574 return ((!ctx->nr_mem_id && req.reg.nr_mem_id > 1) || in vale_attach()
575 (ctx->nr_mem_id == req.reg.nr_mem_id)) && in vale_attach()
576 (ctx->nr_flags == req.reg.nr_flags) in vale_attach()
583 vale_detach(struct TestContext *ctx) in vale_detach() argument
590 if (vale_mkname(vpname, ctx) < 0) in vale_detach()
597 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_detach()
608 vale_attach_detach(struct TestContext *ctx) in vale_attach_detach() argument
612 if ((ret = vale_attach(ctx)) != 0) { in vale_attach_detach()
616 return vale_detach(ctx); in vale_attach_detach()
620 vale_attach_detach_host_rings(struct TestContext *ctx) in vale_attach_detach_host_rings() argument
622 ctx->nr_mode = NR_REG_NIC_SW; in vale_attach_detach_host_rings()
623 return vale_attach_detach(ctx); in vale_attach_detach_host_rings()
629 port_hdr_set_and_get(struct TestContext *ctx) in port_hdr_set_and_get() argument
635 printf("Testing NETMAP_REQ_PORT_HDR_SET on '%s'\n", ctx->ifname_ext); in port_hdr_set_and_get()
637 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_hdr_set_and_get()
641 req.nr_hdr_len = ctx->nr_hdr_len; in port_hdr_set_and_get()
642 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_hdr_set_and_get()
648 if (req.nr_hdr_len != ctx->nr_hdr_len) { in port_hdr_set_and_get()
652 printf("Testing NETMAP_REQ_PORT_HDR_GET on '%s'\n", ctx->ifname_ext); in port_hdr_set_and_get()
655 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_hdr_set_and_get()
662 return (req.nr_hdr_len == ctx->nr_hdr_len) ? 0 : -1; in port_hdr_set_and_get()
674 vale_ephemeral_port_hdr_manipulation(struct TestContext *ctx) in vale_ephemeral_port_hdr_manipulation() argument
678 strncpy(ctx->ifname_ext, "vale:eph0", sizeof(ctx->ifname_ext)); in vale_ephemeral_port_hdr_manipulation()
679 ctx->nr_mode = NR_REG_ALL_NIC; in vale_ephemeral_port_hdr_manipulation()
680 if ((ret = port_register(ctx))) { in vale_ephemeral_port_hdr_manipulation()
684 ctx->nr_hdr_len = VIRTIO_NET_HDR_LEN_WITH_MERGEABLE_RXBUFS; in vale_ephemeral_port_hdr_manipulation()
685 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
688 ctx->nr_hdr_len = 0; in vale_ephemeral_port_hdr_manipulation()
689 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
692 ctx->nr_hdr_len = VIRTIO_NET_HDR_LEN; in vale_ephemeral_port_hdr_manipulation()
693 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
700 vale_persistent_port(struct TestContext *ctx) in vale_persistent_port() argument
707 strncpy(ctx->ifname_ext, "per4", sizeof(ctx->ifname_ext)); in vale_persistent_port()
709 printf("Testing NETMAP_REQ_VALE_NEWIF on '%s'\n", ctx->ifname_ext); in vale_persistent_port()
711 nmreq_hdr_init(&hdr, ctx->ifname_ext); in vale_persistent_port()
715 req.nr_mem_id = ctx->nr_mem_id; in vale_persistent_port()
716 req.nr_tx_slots = ctx->nr_tx_slots; in vale_persistent_port()
717 req.nr_rx_slots = ctx->nr_rx_slots; in vale_persistent_port()
718 req.nr_tx_rings = ctx->nr_tx_rings; in vale_persistent_port()
719 req.nr_rx_rings = ctx->nr_rx_rings; in vale_persistent_port()
720 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_persistent_port()
727 result = vale_attach_detach(ctx); in vale_persistent_port()
729 printf("Testing NETMAP_REQ_VALE_DELIF on '%s'\n", ctx->ifname_ext); in vale_persistent_port()
732 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_persistent_port()
745 pools_info_get(struct TestContext *ctx) in pools_info_get() argument
751 printf("Testing NETMAP_REQ_POOLS_INFO_GET on '%s'\n", ctx->ifname_ext); in pools_info_get()
753 nmreq_hdr_init(&hdr, ctx->ifname_ext); in pools_info_get()
757 req.nr_mem_id = ctx->nr_mem_id; in pools_info_get()
758 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in pools_info_get()
789 pools_info_get_and_register(struct TestContext *ctx) in pools_info_get_and_register() argument
795 ret = pools_info_get(ctx); in pools_info_get_and_register()
800 ctx->nr_mode = NR_REG_ONE_NIC; in pools_info_get_and_register()
801 ret = port_register(ctx); in pools_info_get_and_register()
805 ctx->nr_mem_id = 1; in pools_info_get_and_register()
808 return pools_info_get(ctx); in pools_info_get_and_register()
812 pools_info_get_empty_ifname(struct TestContext *ctx) in pools_info_get_empty_ifname() argument
814 strncpy(ctx->ifname_ext, "", sizeof(ctx->ifname_ext)); in pools_info_get_empty_ifname()
815 return pools_info_get(ctx) != 0 ? 0 : -1; in pools_info_get_empty_ifname()
819 pipe_master(struct TestContext *ctx) in pipe_master() argument
821 strncat(ctx->ifname_ext, "{pipeid1", sizeof(ctx->ifname_ext)); in pipe_master()
822 ctx->nr_mode = NR_REG_NIC_SW; in pipe_master()
824 if (port_register(ctx) == 0) { in pipe_master()
828 ctx->nr_mode = NR_REG_ALL_NIC; in pipe_master()
830 return port_register(ctx); in pipe_master()
834 pipe_slave(struct TestContext *ctx) in pipe_slave() argument
836 strncat(ctx->ifname_ext, "}pipeid2", sizeof(ctx->ifname_ext)); in pipe_slave()
837 ctx->nr_mode = NR_REG_ALL_NIC; in pipe_slave()
839 return port_register(ctx); in pipe_slave()
845 pipe_port_info_get(struct TestContext *ctx) in pipe_port_info_get() argument
847 strncat(ctx->ifname_ext, "}pipeid3", sizeof(ctx->ifname_ext)); in pipe_port_info_get()
849 return port_info_get(ctx); in pipe_port_info_get()
853 pipe_pools_info_get(struct TestContext *ctx) in pipe_pools_info_get() argument
855 strncat(ctx->ifname_ext, "{xid", sizeof(ctx->ifname_ext)); in pipe_pools_info_get()
857 return pools_info_get(ctx); in pipe_pools_info_get()
862 vale_polling_enable(struct TestContext *ctx) in vale_polling_enable() argument
869 if (vale_mkname(vpname, ctx) < 0) in vale_polling_enable()
878 req.nr_mode = ctx->nr_mode; in vale_polling_enable()
879 req.nr_first_cpu_id = ctx->nr_first_cpu_id; in vale_polling_enable()
880 req.nr_num_polling_cpus = ctx->nr_num_polling_cpus; in vale_polling_enable()
881 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_polling_enable()
887 return (req.nr_mode == ctx->nr_mode && in vale_polling_enable()
888 req.nr_first_cpu_id == ctx->nr_first_cpu_id && in vale_polling_enable()
889 req.nr_num_polling_cpus == ctx->nr_num_polling_cpus) in vale_polling_enable()
896 vale_polling_disable(struct TestContext *ctx) in vale_polling_disable() argument
903 if (vale_mkname(vpname, ctx) < 0) in vale_polling_disable()
912 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_polling_disable()
922 vale_polling_enable_disable(struct TestContext *ctx) in vale_polling_enable_disable() argument
926 if ((ret = vale_attach(ctx)) != 0) { in vale_polling_enable_disable()
930 ctx->nr_mode = NETMAP_POLLING_MODE_SINGLE_CPU; in vale_polling_enable_disable()
931 ctx->nr_num_polling_cpus = 1; in vale_polling_enable_disable()
932 ctx->nr_first_cpu_id = 0; in vale_polling_enable_disable()
933 if ((ret = vale_polling_enable(ctx))) { in vale_polling_enable_disable()
934 vale_detach(ctx); in vale_polling_enable_disable()
945 if ((ret = vale_polling_disable(ctx))) { in vale_polling_enable_disable()
946 vale_detach(ctx); in vale_polling_enable_disable()
950 return vale_detach(ctx); in vale_polling_enable_disable()
954 push_option(struct nmreq_option *opt, struct TestContext *ctx) in push_option() argument
956 opt->nro_next = (uintptr_t)ctx->nr_opt; in push_option()
957 ctx->nr_opt = opt; in push_option()
961 clear_options(struct TestContext *ctx) in clear_options() argument
963 ctx->nr_opt = NULL; in clear_options()
989 unsupported_option(struct TestContext *ctx) in unsupported_option() argument
993 printf("Testing unsupported option on %s\n", ctx->ifname_ext); in unsupported_option()
997 push_option(&opt, ctx); in unsupported_option()
1000 if (port_register_hwall(ctx) >= 0) in unsupported_option()
1003 clear_options(ctx); in unsupported_option()
1009 infinite_options(struct TestContext *ctx) in infinite_options() argument
1013 printf("Testing infinite list of options on %s (invalid options)\n", ctx->ifname_ext); in infinite_options()
1017 push_option(&opt, ctx); in infinite_options()
1019 if (port_register_hwall(ctx) >= 0) in infinite_options()
1021 clear_options(ctx); in infinite_options()
1026 infinite_options2(struct TestContext *ctx) in infinite_options2() argument
1030 printf("Testing infinite list of options on %s (valid options)\n", ctx->ifname_ext); in infinite_options2()
1034 push_option(&opt, ctx); in infinite_options2()
1036 if (port_register_hwall(ctx) >= 0) in infinite_options2()
1038 clear_options(ctx); in infinite_options2()
1078 push_extmem_option(struct TestContext *ctx, const struct nmreq_pools_info *pi, in push_extmem_option() argument
1095 push_option(&e->nro_opt, ctx); in push_extmem_option()
1101 pop_extmem_option(struct TestContext *ctx, struct nmreq_opt_extmem *exp) in pop_extmem_option() argument
1106 e = (struct nmreq_opt_extmem *)(uintptr_t)ctx->nr_opt; in pop_extmem_option()
1107 ctx->nr_opt = (struct nmreq_option *)(uintptr_t)ctx->nr_opt->nro_next; in pop_extmem_option()
1132 _extmem_option(struct TestContext *ctx, in _extmem_option() argument
1138 if ((ret = push_extmem_option(ctx, pi, &e)) < 0) in _extmem_option()
1143 strncpy(ctx->ifname_ext, "vale0:0", sizeof(ctx->ifname_ext)); in _extmem_option()
1144 ctx->nr_tx_slots = 16; in _extmem_option()
1145 ctx->nr_rx_slots = 16; in _extmem_option()
1147 if ((ret = port_register_hwall(ctx))) in _extmem_option()
1150 ret = pop_extmem_option(ctx, &save); in _extmem_option()
1186 extmem_option(struct TestContext *ctx) in extmem_option() argument
1193 return _extmem_option(ctx, &pools_info); in extmem_option()
1197 bad_extmem_option(struct TestContext *ctx) in bad_extmem_option() argument
1208 return _extmem_option(ctx, &pools_info) < 0 ? 0 : -1; in bad_extmem_option()
1212 duplicate_extmem_options(struct TestContext *ctx) in duplicate_extmem_options() argument
1222 if ((ret = push_extmem_option(ctx, &pools_info, &e1)) < 0) in duplicate_extmem_options()
1225 if ((ret = push_extmem_option(ctx, &pools_info, &e2)) < 0) { in duplicate_extmem_options()
1226 clear_options(ctx); in duplicate_extmem_options()
1233 strncpy(ctx->ifname_ext, "vale0:0", sizeof(ctx->ifname_ext)); in duplicate_extmem_options()
1234 ctx->nr_tx_slots = 16; in duplicate_extmem_options()
1235 ctx->nr_rx_slots = 16; in duplicate_extmem_options()
1237 ret = port_register_hwall(ctx); in duplicate_extmem_options()
1244 if ((ret = pop_extmem_option(ctx, &save2))) in duplicate_extmem_options()
1248 if ((ret = pop_extmem_option(ctx, &save1))) in duplicate_extmem_options()
1256 push_csb_option(struct TestContext *ctx, struct nmreq_opt_csb *opt) in push_csb_option() argument
1262 ctx->nr_flags |= NR_EXCLUSIVE; in push_csb_option()
1265 ret = port_info_get(ctx); in push_csb_option()
1269 num_entries = num_registered_rings(ctx); in push_csb_option()
1274 if (ctx->csb) { in push_csb_option()
1275 free(ctx->csb); in push_csb_option()
1277 ret = posix_memalign(&ctx->csb, sizeof(struct nm_csb_atok), csb_size); in push_csb_option()
1285 opt->csb_atok = (uintptr_t)ctx->csb; in push_csb_option()
1286 opt->csb_ktoa = (uintptr_t)(((uint8_t *)ctx->csb) + in push_csb_option()
1290 push_option(&opt->nro_opt, ctx); in push_csb_option()
1296 csb_mode(struct TestContext *ctx) in csb_mode() argument
1301 ret = push_csb_option(ctx, &opt); in csb_mode()
1306 ret = port_register_hwall(ctx); in csb_mode()
1307 clear_options(ctx); in csb_mode()
1313 csb_mode_invalid_memory(struct TestContext *ctx) in csb_mode_invalid_memory() argument
1322 push_option(&opt.nro_opt, ctx); in csb_mode_invalid_memory()
1324 ctx->nr_flags = NR_EXCLUSIVE; in csb_mode_invalid_memory()
1325 ret = port_register_hwall(ctx); in csb_mode_invalid_memory()
1326 clear_options(ctx); in csb_mode_invalid_memory()
1332 sync_kloop_stop(struct TestContext *ctx) in sync_kloop_stop() argument
1337 printf("Testing NETMAP_REQ_SYNC_KLOOP_STOP on '%s'\n", ctx->ifname_ext); in sync_kloop_stop()
1339 nmreq_hdr_init(&hdr, ctx->ifname_ext); in sync_kloop_stop()
1341 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in sync_kloop_stop()
1352 struct TestContext *ctx = opaque; in sync_kloop_worker() local
1357 printf("Testing NETMAP_REQ_SYNC_KLOOP_START on '%s'\n", ctx->ifname_ext); in sync_kloop_worker()
1359 nmreq_hdr_init(&hdr, ctx->ifname_ext); in sync_kloop_worker()
1362 hdr.nr_options = (uintptr_t)ctx->nr_opt; in sync_kloop_worker()
1365 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in sync_kloop_worker()
1370 if (ctx->sem) { in sync_kloop_worker()
1371 sem_post(ctx->sem); in sync_kloop_worker()
1378 sync_kloop_start_stop(struct TestContext *ctx) in sync_kloop_start_stop() argument
1384 ret = pthread_create(&th, NULL, sync_kloop_worker, ctx); in sync_kloop_start_stop()
1390 ret = sync_kloop_stop(ctx); in sync_kloop_start_stop()
1404 sync_kloop(struct TestContext *ctx) in sync_kloop() argument
1408 ret = csb_mode(ctx); in sync_kloop()
1413 return sync_kloop_start_stop(ctx); in sync_kloop()
1417 sync_kloop_eventfds(struct TestContext *ctx) in sync_kloop_eventfds() argument
1428 modeopt.mode = ctx->sync_kloop_mode; in sync_kloop_eventfds()
1429 push_option(&modeopt.nro_opt, ctx); in sync_kloop_eventfds()
1431 num_entries = num_registered_rings(ctx); in sync_kloop_eventfds()
1446 push_option(&evopt->nro_opt, ctx); in sync_kloop_eventfds()
1449 ret = sync_kloop_start_stop(ctx); in sync_kloop_eventfds()
1452 clear_options(ctx); in sync_kloop_eventfds()
1463 clear_options(ctx); in sync_kloop_eventfds()
1469 sync_kloop_eventfds_all_mode(struct TestContext *ctx, in sync_kloop_eventfds_all_mode() argument
1474 ret = csb_mode(ctx); in sync_kloop_eventfds_all_mode()
1479 ctx->sync_kloop_mode = sync_kloop_mode; in sync_kloop_eventfds_all_mode()
1481 return sync_kloop_eventfds(ctx); in sync_kloop_eventfds_all_mode()
1485 sync_kloop_eventfds_all(struct TestContext *ctx) in sync_kloop_eventfds_all() argument
1487 return sync_kloop_eventfds_all_mode(ctx, 0); in sync_kloop_eventfds_all()
1491 sync_kloop_eventfds_all_tx(struct TestContext *ctx) in sync_kloop_eventfds_all_tx() argument
1496 ret = push_csb_option(ctx, &opt); in sync_kloop_eventfds_all_tx()
1501 ret = port_register_hwall_tx(ctx); in sync_kloop_eventfds_all_tx()
1505 clear_options(ctx); in sync_kloop_eventfds_all_tx()
1507 return sync_kloop_eventfds(ctx); in sync_kloop_eventfds_all_tx()
1511 sync_kloop_eventfds_all_direct(struct TestContext *ctx) in sync_kloop_eventfds_all_direct() argument
1513 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct()
1518 sync_kloop_eventfds_all_direct_tx(struct TestContext *ctx) in sync_kloop_eventfds_all_direct_tx() argument
1520 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct_tx()
1525 sync_kloop_eventfds_all_direct_rx(struct TestContext *ctx) in sync_kloop_eventfds_all_direct_rx() argument
1527 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct_rx()
1532 sync_kloop_nocsb(struct TestContext *ctx) in sync_kloop_nocsb() argument
1536 ret = port_register_hwall(ctx); in sync_kloop_nocsb()
1543 return sync_kloop_start_stop(ctx) != 0 ? 0 : -1; in sync_kloop_nocsb()
1547 csb_enable(struct TestContext *ctx) in csb_enable() argument
1554 ret = push_csb_option(ctx, &opt); in csb_enable()
1561 nmreq_hdr_init(&hdr, ctx->ifname_ext); in csb_enable()
1563 hdr.nr_options = (uintptr_t)ctx->nr_opt; in csb_enable()
1566 printf("Testing NETMAP_REQ_CSB_ENABLE on '%s'\n", ctx->ifname_ext); in csb_enable()
1568 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in csb_enable()
1575 clear_options(ctx); in csb_enable()
1581 sync_kloop_csb_enable(struct TestContext *ctx) in sync_kloop_csb_enable() argument
1585 ctx->nr_flags |= NR_EXCLUSIVE; in sync_kloop_csb_enable()
1586 ret = port_register_hwall(ctx); in sync_kloop_csb_enable()
1591 ret = csb_enable(ctx); in sync_kloop_csb_enable()
1596 return sync_kloop_start_stop(ctx); in sync_kloop_csb_enable()
1600 sync_kloop_conflict(struct TestContext *ctx) in sync_kloop_conflict() argument
1610 ret = push_csb_option(ctx, &opt); in sync_kloop_conflict()
1615 ret = port_register_hwall(ctx); in sync_kloop_conflict()
1619 clear_options(ctx); in sync_kloop_conflict()
1626 ctx->sem = &sem; in sync_kloop_conflict()
1628 ret = pthread_create(&th1, NULL, sync_kloop_worker, ctx); in sync_kloop_conflict()
1634 ret = pthread_create(&th2, NULL, sync_kloop_worker, ctx); in sync_kloop_conflict()
1651 err |= sync_kloop_stop(ctx); in sync_kloop_conflict()
1666 ctx->sem = NULL; in sync_kloop_conflict()
1679 sync_kloop_eventfds_mismatch(struct TestContext *ctx) in sync_kloop_eventfds_mismatch() argument
1684 ret = push_csb_option(ctx, &opt); in sync_kloop_eventfds_mismatch()
1689 ret = port_register_hwall_rx(ctx); in sync_kloop_eventfds_mismatch()
1693 clear_options(ctx); in sync_kloop_eventfds_mismatch()
1699 ctx->nr_flags &= ~NR_RX_RINGS_ONLY; in sync_kloop_eventfds_mismatch()
1701 return (sync_kloop_eventfds(ctx) != 0) ? 0 : -1; in sync_kloop_eventfds_mismatch()
1705 null_port(struct TestContext *ctx) in null_port() argument
1709 ctx->nr_mem_id = 1; in null_port()
1710 ctx->nr_mode = NR_REG_NULL; in null_port()
1711 ctx->nr_tx_rings = 10; in null_port()
1712 ctx->nr_rx_rings = 5; in null_port()
1713 ctx->nr_tx_slots = 256; in null_port()
1714 ctx->nr_rx_slots = 100; in null_port()
1715 ret = port_register(ctx); in null_port()
1723 null_port_all_zero(struct TestContext *ctx) in null_port_all_zero() argument
1727 ctx->nr_mem_id = 1; in null_port_all_zero()
1728 ctx->nr_mode = NR_REG_NULL; in null_port_all_zero()
1729 ctx->nr_tx_rings = 0; in null_port_all_zero()
1730 ctx->nr_rx_rings = 0; in null_port_all_zero()
1731 ctx->nr_tx_slots = 0; in null_port_all_zero()
1732 ctx->nr_rx_slots = 0; in null_port_all_zero()
1733 ret = port_register(ctx); in null_port_all_zero()
1741 null_port_sync(struct TestContext *ctx) in null_port_sync() argument
1745 ctx->nr_mem_id = 1; in null_port_sync()
1746 ctx->nr_mode = NR_REG_NULL; in null_port_sync()
1747 ctx->nr_tx_rings = 10; in null_port_sync()
1748 ctx->nr_rx_rings = 5; in null_port_sync()
1749 ctx->nr_tx_slots = 256; in null_port_sync()
1750 ctx->nr_rx_slots = 100; in null_port_sync()
1751 ret = port_register(ctx); in null_port_sync()
1755 ret = ioctl(ctx->fd, NIOCTXSYNC, 0); in null_port_sync()
1839 nmreq_hdr_parsing(struct TestContext *ctx, in nmreq_hdr_parsing() argument
1846 save = ctx->ifparse = t->ifname; in nmreq_hdr_parsing()
1849 printf("nmreq_header: \"%s\"\n", ctx->ifparse); in nmreq_hdr_parsing()
1850 if (nmreq_header_decode(&ctx->ifparse, hdr, ctx->nmctx) < 0) { in nmreq_hdr_parsing()
1857 if (ctx->ifparse != save) { in nmreq_hdr_parsing()
1888 nmreq_reg_parsing(struct TestContext *ctx, in nmreq_reg_parsing() argument
1896 save = ctx->ifparse; in nmreq_reg_parsing()
1899 printf("nmreq_register: \"%s\"\n", ctx->ifparse); in nmreq_reg_parsing()
1900 if (nmreq_register_decode(&ctx->ifparse, reg, ctx->nmctx) < 0) { in nmreq_reg_parsing()
1907 if (ctx->ifparse != save) { in nmreq_reg_parsing()
1952 nmctx_parsing_error(struct nmctx *ctx, const char *msg) in nmctx_parsing_error() argument
1954 (void)ctx; in nmctx_parsing_error()
1959 nmreq_parsing(struct TestContext *ctx) in nmreq_parsing() argument
1974 ctx->nmctx = &test_nmctx; in nmreq_parsing()
1982 if (nmreq_hdr_parsing(ctx, t, &hdr) < 0) { in nmreq_parsing()
1984 } else if (t->exp_error <= 0 && nmreq_reg_parsing(ctx, t, &reg) < 0) { in nmreq_parsing()
1987 if (strcmp(ctx->ifparse, exp_suff) != 0) { in nmreq_parsing()
1989 ctx->ifparse, exp_suff); in nmreq_parsing()
1993 ctx->nmctx = NULL; in nmreq_parsing()
1998 binarycomp(struct TestContext *ctx) in binarycomp() argument
2008 (void)ctx; in binarycomp()
2102 context_cleanup(struct TestContext *ctx) in context_cleanup() argument
2104 if (ctx->csb) { in context_cleanup()
2105 free(ctx->csb); in context_cleanup()
2106 ctx->csb = NULL; in context_cleanup()
2109 close(ctx->fd); in context_cleanup()
2110 ctx->fd = -1; in context_cleanup()