Lines Matching refs:ctx

177 typedef int (*testfunc_t)(struct TestContext *ctx);
190 port_info_get(struct TestContext *ctx) in port_info_get() argument
197 printf("Testing NETMAP_REQ_PORT_INFO_GET on '%s'\n", ctx->ifname_ext); in port_info_get()
199 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_info_get()
203 req.nr_mem_id = ctx->nr_mem_id; in port_info_get()
204 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_info_get()
223 ctx->nr_tx_slots = req.nr_tx_slots; in port_info_get()
224 ctx->nr_rx_slots = req.nr_rx_slots; in port_info_get()
225 ctx->nr_tx_rings = req.nr_tx_rings; in port_info_get()
226 ctx->nr_rx_rings = req.nr_rx_rings; in port_info_get()
227 ctx->nr_mem_id = req.nr_mem_id; in port_info_get()
234 port_register(struct TestContext *ctx) in port_register() argument
243 ctx->nr_mode, ctx->nr_ringid, (unsigned long long)ctx->nr_flags, in port_register()
244 ctx->ifname_ext); in port_register()
246 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_register()
249 hdr.nr_options = (uintptr_t)ctx->nr_opt; in port_register()
251 req.nr_mem_id = ctx->nr_mem_id; in port_register()
252 req.nr_mode = ctx->nr_mode; in port_register()
253 req.nr_ringid = ctx->nr_ringid; in port_register()
254 req.nr_flags = ctx->nr_flags; in port_register()
255 req.nr_tx_slots = ctx->nr_tx_slots; in port_register()
256 req.nr_rx_slots = ctx->nr_rx_slots; in port_register()
257 req.nr_tx_rings = ctx->nr_tx_rings; in port_register()
258 req.nr_host_tx_rings = ctx->nr_host_tx_rings; in port_register()
259 req.nr_host_rx_rings = ctx->nr_host_rx_rings; in port_register()
260 req.nr_rx_rings = ctx->nr_rx_rings; in port_register()
261 req.nr_extra_bufs = ctx->nr_extra_bufs; in port_register()
262 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_register()
278 success = req.nr_memsize && (ctx->nr_mode == req.nr_mode) && in port_register()
279 (ctx->nr_ringid == req.nr_ringid) && in port_register()
280 (ctx->nr_flags == req.nr_flags) && in port_register()
281 ((!ctx->nr_tx_slots && req.nr_tx_slots) || in port_register()
282 (ctx->nr_tx_slots == req.nr_tx_slots)) && in port_register()
283 ((!ctx->nr_rx_slots && req.nr_rx_slots) || in port_register()
284 (ctx->nr_rx_slots == req.nr_rx_slots)) && in port_register()
285 ((!ctx->nr_tx_rings && req.nr_tx_rings) || in port_register()
286 (ctx->nr_tx_rings == req.nr_tx_rings)) && in port_register()
287 ((!ctx->nr_rx_rings && req.nr_rx_rings) || in port_register()
288 (ctx->nr_rx_rings == req.nr_rx_rings)) && in port_register()
289 ((!ctx->nr_host_tx_rings && req.nr_host_tx_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_host_rx_rings == req.nr_host_rx_rings)) && in port_register()
293 ((!ctx->nr_mem_id && req.nr_mem_id) || in port_register()
294 (ctx->nr_mem_id == req.nr_mem_id)) && in port_register()
295 (ctx->nr_extra_bufs == req.nr_extra_bufs); in port_register()
301 ctx->nr_tx_slots = req.nr_tx_slots; in port_register()
302 ctx->nr_rx_slots = req.nr_rx_slots; in port_register()
303 ctx->nr_tx_rings = req.nr_tx_rings; in port_register()
304 ctx->nr_rx_rings = req.nr_rx_rings; in port_register()
305 ctx->nr_host_tx_rings = req.nr_host_tx_rings; in port_register()
306 ctx->nr_host_rx_rings = req.nr_host_rx_rings; in port_register()
307 ctx->nr_mem_id = req.nr_mem_id; in port_register()
308 ctx->nr_extra_bufs = req.nr_extra_bufs; in port_register()
314 niocregif(struct TestContext *ctx, int netmap_api) in niocregif() argument
320 printf("Testing legacy NIOCREGIF on '%s'\n", ctx->ifname_ext); in niocregif()
323 memcpy(req.nr_name, ctx->ifname_ext, sizeof(req.nr_name)); in niocregif()
326 req.nr_ringid = ctx->nr_ringid; in niocregif()
327 req.nr_flags = ctx->nr_mode | ctx->nr_flags; in niocregif()
328 req.nr_tx_slots = ctx->nr_tx_slots; in niocregif()
329 req.nr_rx_slots = ctx->nr_rx_slots; in niocregif()
330 req.nr_tx_rings = ctx->nr_tx_rings; in niocregif()
331 req.nr_rx_rings = ctx->nr_rx_rings; in niocregif()
332 req.nr_arg2 = ctx->nr_mem_id; in niocregif()
333 req.nr_arg3 = ctx->nr_extra_bufs; in niocregif()
335 ret = ioctl(ctx->fd, NIOCREGIF, &req); in niocregif()
354 (ctx->nr_ringid == req.nr_ringid) && in niocregif()
355 ((ctx->nr_mode | ctx->nr_flags) == req.nr_flags) && in niocregif()
356 ((!ctx->nr_tx_slots && req.nr_tx_slots) || 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_rx_slots == req.nr_rx_slots)) && in niocregif()
360 ((!ctx->nr_tx_rings && req.nr_tx_rings) || in niocregif()
361 (ctx->nr_tx_rings == req.nr_tx_rings)) && in niocregif()
362 ((!ctx->nr_rx_rings && req.nr_rx_rings) || in niocregif()
363 (ctx->nr_rx_rings == req.nr_rx_rings)) && in niocregif()
364 ((!ctx->nr_mem_id && req.nr_arg2) || in niocregif()
365 (ctx->nr_mem_id == req.nr_arg2)) && in niocregif()
366 (ctx->nr_extra_bufs == req.nr_arg3); in niocregif()
372 ctx->nr_tx_slots = req.nr_tx_slots; in niocregif()
373 ctx->nr_rx_slots = req.nr_rx_slots; in niocregif()
374 ctx->nr_tx_rings = req.nr_tx_rings; in niocregif()
375 ctx->nr_rx_rings = req.nr_rx_rings; in niocregif()
376 ctx->nr_mem_id = req.nr_arg2; in niocregif()
377 ctx->nr_extra_bufs = req.nr_arg3; in niocregif()
391 legacy_regif_default(struct TestContext *ctx) in legacy_regif_default() argument
393 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_default()
397 legacy_regif_all_nic(struct TestContext *ctx) in legacy_regif_all_nic() argument
399 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_all_nic()
400 return niocregif(ctx, NETMAP_API); in legacy_regif_all_nic()
404 legacy_regif_12(struct TestContext *ctx) in legacy_regif_12() argument
406 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_12()
407 return niocregif(ctx, NETMAP_API_NIOCREGIF+1); in legacy_regif_12()
411 legacy_regif_sw(struct TestContext *ctx) in legacy_regif_sw() argument
413 ctx->nr_mode = NR_REG_SW; in legacy_regif_sw()
414 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_sw()
418 legacy_regif_future(struct TestContext *ctx) in legacy_regif_future() argument
420 ctx->nr_mode = NR_REG_NIC_SW; in legacy_regif_future()
424 return niocregif(ctx, NETMAP_API+2); in legacy_regif_future()
428 legacy_regif_extra_bufs(struct TestContext *ctx) in legacy_regif_extra_bufs() argument
430 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_extra_bufs()
431 ctx->nr_extra_bufs = 20; /* arbitrary number of extra bufs */ in legacy_regif_extra_bufs()
432 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_extra_bufs()
436 legacy_regif_extra_bufs_pipe(struct TestContext *ctx) in legacy_regif_extra_bufs_pipe() argument
438 strncat(ctx->ifname_ext, "{pipeexbuf", sizeof(ctx->ifname_ext)); in legacy_regif_extra_bufs_pipe()
439 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_extra_bufs_pipe()
440 ctx->nr_extra_bufs = 58; /* arbitrary number of extra bufs */ in legacy_regif_extra_bufs_pipe()
442 return niocregif(ctx, NETMAP_API_NIOCREGIF); in legacy_regif_extra_bufs_pipe()
446 legacy_regif_extra_bufs_pipe_vale(struct TestContext *ctx) in legacy_regif_extra_bufs_pipe_vale() argument
448 strncpy(ctx->ifname_ext, "valeX1:Y4", sizeof(ctx->ifname_ext)); in legacy_regif_extra_bufs_pipe_vale()
449 return legacy_regif_extra_bufs_pipe(ctx); in legacy_regif_extra_bufs_pipe_vale()
454 num_registered_rings(struct TestContext *ctx) in num_registered_rings() argument
456 if (ctx->nr_flags & NR_TX_RINGS_ONLY) { in num_registered_rings()
457 return ctx->nr_tx_rings; in num_registered_rings()
459 if (ctx->nr_flags & NR_RX_RINGS_ONLY) { in num_registered_rings()
460 return ctx->nr_rx_rings; in num_registered_rings()
463 return ctx->nr_tx_rings + ctx->nr_rx_rings; in num_registered_rings()
467 port_register_hwall_host(struct TestContext *ctx) in port_register_hwall_host() argument
469 ctx->nr_mode = NR_REG_NIC_SW; in port_register_hwall_host()
470 return port_register(ctx); in port_register_hwall_host()
474 port_register_hostall(struct TestContext *ctx) in port_register_hostall() argument
476 ctx->nr_mode = NR_REG_SW; in port_register_hostall()
477 return port_register(ctx); in port_register_hostall()
481 port_register_hwall(struct TestContext *ctx) in port_register_hwall() argument
483 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall()
484 return port_register(ctx); in port_register_hwall()
488 port_register_single_hw_pair(struct TestContext *ctx) in port_register_single_hw_pair() argument
490 ctx->nr_mode = NR_REG_ONE_NIC; in port_register_single_hw_pair()
491 ctx->nr_ringid = 0; in port_register_single_hw_pair()
492 return port_register(ctx); in port_register_single_hw_pair()
496 port_register_single_host_pair(struct TestContext *ctx) in port_register_single_host_pair() argument
498 ctx->nr_mode = NR_REG_ONE_SW; in port_register_single_host_pair()
499 ctx->nr_host_tx_rings = 2; in port_register_single_host_pair()
500 ctx->nr_host_rx_rings = 2; in port_register_single_host_pair()
501 ctx->nr_ringid = 1; in port_register_single_host_pair()
502 return port_register(ctx); in port_register_single_host_pair()
506 port_register_hostall_many(struct TestContext *ctx) in port_register_hostall_many() argument
508 ctx->nr_mode = NR_REG_SW; in port_register_hostall_many()
509 ctx->nr_host_tx_rings = 5; in port_register_hostall_many()
510 ctx->nr_host_rx_rings = 4; in port_register_hostall_many()
511 return port_register(ctx); in port_register_hostall_many()
515 port_register_hwall_tx(struct TestContext *ctx) in port_register_hwall_tx() argument
517 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall_tx()
518 ctx->nr_flags |= NR_TX_RINGS_ONLY; in port_register_hwall_tx()
519 return port_register(ctx); in port_register_hwall_tx()
523 port_register_hwall_rx(struct TestContext *ctx) in port_register_hwall_rx() argument
525 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall_rx()
526 ctx->nr_flags |= NR_RX_RINGS_ONLY; in port_register_hwall_rx()
527 return port_register(ctx); in port_register_hwall_rx()
532 vale_mkname(char *vpname, struct TestContext *ctx) in vale_mkname() argument
534 if (snprintf(vpname, NM_IFNAMSZ, "%s:%s", ctx->bdgname, ctx->ifname_ext) >= NM_IFNAMSZ) { in vale_mkname()
535 fprintf(stderr, "%s:%s too long (max %d chars)\n", ctx->bdgname, ctx->ifname_ext, in vale_mkname()
545 vale_attach(struct TestContext *ctx) in vale_attach() argument
552 if (vale_mkname(vpname, ctx) < 0) in vale_attach()
560 req.reg.nr_mem_id = ctx->nr_mem_id; in vale_attach()
561 if (ctx->nr_mode == 0) { in vale_attach()
562 ctx->nr_mode = NR_REG_ALL_NIC; /* default */ in vale_attach()
564 req.reg.nr_mode = ctx->nr_mode; in vale_attach()
565 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_attach()
572 return ((!ctx->nr_mem_id && req.reg.nr_mem_id > 1) || in vale_attach()
573 (ctx->nr_mem_id == req.reg.nr_mem_id)) && in vale_attach()
574 (ctx->nr_flags == req.reg.nr_flags) in vale_attach()
581 vale_detach(struct TestContext *ctx) in vale_detach() argument
588 if (vale_mkname(vpname, ctx) < 0) in vale_detach()
595 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_detach()
606 vale_attach_detach(struct TestContext *ctx) in vale_attach_detach() argument
610 if ((ret = vale_attach(ctx)) != 0) { in vale_attach_detach()
614 return vale_detach(ctx); in vale_attach_detach()
618 vale_attach_detach_host_rings(struct TestContext *ctx) in vale_attach_detach_host_rings() argument
620 ctx->nr_mode = NR_REG_NIC_SW; in vale_attach_detach_host_rings()
621 return vale_attach_detach(ctx); in vale_attach_detach_host_rings()
627 port_hdr_set_and_get(struct TestContext *ctx) in port_hdr_set_and_get() argument
633 printf("Testing NETMAP_REQ_PORT_HDR_SET on '%s'\n", ctx->ifname_ext); in port_hdr_set_and_get()
635 nmreq_hdr_init(&hdr, ctx->ifname_ext); in port_hdr_set_and_get()
639 req.nr_hdr_len = ctx->nr_hdr_len; in port_hdr_set_and_get()
640 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_hdr_set_and_get()
646 if (req.nr_hdr_len != ctx->nr_hdr_len) { in port_hdr_set_and_get()
650 printf("Testing NETMAP_REQ_PORT_HDR_GET on '%s'\n", ctx->ifname_ext); in port_hdr_set_and_get()
653 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in port_hdr_set_and_get()
660 return (req.nr_hdr_len == ctx->nr_hdr_len) ? 0 : -1; in port_hdr_set_and_get()
672 vale_ephemeral_port_hdr_manipulation(struct TestContext *ctx) in vale_ephemeral_port_hdr_manipulation() argument
676 strncpy(ctx->ifname_ext, "vale:eph0", sizeof(ctx->ifname_ext)); in vale_ephemeral_port_hdr_manipulation()
677 ctx->nr_mode = NR_REG_ALL_NIC; in vale_ephemeral_port_hdr_manipulation()
678 if ((ret = port_register(ctx))) { in vale_ephemeral_port_hdr_manipulation()
682 ctx->nr_hdr_len = VIRTIO_NET_HDR_LEN_WITH_MERGEABLE_RXBUFS; in vale_ephemeral_port_hdr_manipulation()
683 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
686 ctx->nr_hdr_len = 0; in vale_ephemeral_port_hdr_manipulation()
687 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
690 ctx->nr_hdr_len = VIRTIO_NET_HDR_LEN; in vale_ephemeral_port_hdr_manipulation()
691 if ((ret = port_hdr_set_and_get(ctx))) { in vale_ephemeral_port_hdr_manipulation()
698 vale_persistent_port(struct TestContext *ctx) in vale_persistent_port() argument
705 strncpy(ctx->ifname_ext, "per4", sizeof(ctx->ifname_ext)); in vale_persistent_port()
707 printf("Testing NETMAP_REQ_VALE_NEWIF on '%s'\n", ctx->ifname_ext); in vale_persistent_port()
709 nmreq_hdr_init(&hdr, ctx->ifname_ext); in vale_persistent_port()
713 req.nr_mem_id = ctx->nr_mem_id; in vale_persistent_port()
714 req.nr_tx_slots = ctx->nr_tx_slots; in vale_persistent_port()
715 req.nr_rx_slots = ctx->nr_rx_slots; in vale_persistent_port()
716 req.nr_tx_rings = ctx->nr_tx_rings; in vale_persistent_port()
717 req.nr_rx_rings = ctx->nr_rx_rings; in vale_persistent_port()
718 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_persistent_port()
725 result = vale_attach_detach(ctx); in vale_persistent_port()
727 printf("Testing NETMAP_REQ_VALE_DELIF on '%s'\n", ctx->ifname_ext); in vale_persistent_port()
730 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_persistent_port()
743 pools_info_get(struct TestContext *ctx) in pools_info_get() argument
749 printf("Testing NETMAP_REQ_POOLS_INFO_GET on '%s'\n", ctx->ifname_ext); in pools_info_get()
751 nmreq_hdr_init(&hdr, ctx->ifname_ext); in pools_info_get()
755 req.nr_mem_id = ctx->nr_mem_id; in pools_info_get()
756 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in pools_info_get()
787 pools_info_get_and_register(struct TestContext *ctx) in pools_info_get_and_register() argument
793 ret = pools_info_get(ctx); in pools_info_get_and_register()
798 ctx->nr_mode = NR_REG_ONE_NIC; in pools_info_get_and_register()
799 ret = port_register(ctx); in pools_info_get_and_register()
803 ctx->nr_mem_id = 1; in pools_info_get_and_register()
806 return pools_info_get(ctx); in pools_info_get_and_register()
810 pools_info_get_empty_ifname(struct TestContext *ctx) in pools_info_get_empty_ifname() argument
812 strncpy(ctx->ifname_ext, "", sizeof(ctx->ifname_ext)); in pools_info_get_empty_ifname()
813 return pools_info_get(ctx) != 0 ? 0 : -1; in pools_info_get_empty_ifname()
817 pipe_master(struct TestContext *ctx) in pipe_master() argument
819 strncat(ctx->ifname_ext, "{pipeid1", sizeof(ctx->ifname_ext)); in pipe_master()
820 ctx->nr_mode = NR_REG_NIC_SW; in pipe_master()
822 if (port_register(ctx) == 0) { in pipe_master()
826 ctx->nr_mode = NR_REG_ALL_NIC; in pipe_master()
828 return port_register(ctx); in pipe_master()
832 pipe_slave(struct TestContext *ctx) in pipe_slave() argument
834 strncat(ctx->ifname_ext, "}pipeid2", sizeof(ctx->ifname_ext)); in pipe_slave()
835 ctx->nr_mode = NR_REG_ALL_NIC; in pipe_slave()
837 return port_register(ctx); in pipe_slave()
843 pipe_port_info_get(struct TestContext *ctx) in pipe_port_info_get() argument
845 strncat(ctx->ifname_ext, "}pipeid3", sizeof(ctx->ifname_ext)); in pipe_port_info_get()
847 return port_info_get(ctx); in pipe_port_info_get()
851 pipe_pools_info_get(struct TestContext *ctx) in pipe_pools_info_get() argument
853 strncat(ctx->ifname_ext, "{xid", sizeof(ctx->ifname_ext)); in pipe_pools_info_get()
855 return pools_info_get(ctx); in pipe_pools_info_get()
860 vale_polling_enable(struct TestContext *ctx) in vale_polling_enable() argument
867 if (vale_mkname(vpname, ctx) < 0) in vale_polling_enable()
876 req.nr_mode = ctx->nr_mode; in vale_polling_enable()
877 req.nr_first_cpu_id = ctx->nr_first_cpu_id; in vale_polling_enable()
878 req.nr_num_polling_cpus = ctx->nr_num_polling_cpus; in vale_polling_enable()
879 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_polling_enable()
885 return (req.nr_mode == ctx->nr_mode && in vale_polling_enable()
886 req.nr_first_cpu_id == ctx->nr_first_cpu_id && in vale_polling_enable()
887 req.nr_num_polling_cpus == ctx->nr_num_polling_cpus) in vale_polling_enable()
894 vale_polling_disable(struct TestContext *ctx) in vale_polling_disable() argument
901 if (vale_mkname(vpname, ctx) < 0) in vale_polling_disable()
910 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_polling_disable()
920 vale_polling_enable_disable(struct TestContext *ctx) in vale_polling_enable_disable() argument
924 if ((ret = vale_attach(ctx)) != 0) { in vale_polling_enable_disable()
928 ctx->nr_mode = NETMAP_POLLING_MODE_SINGLE_CPU; in vale_polling_enable_disable()
929 ctx->nr_num_polling_cpus = 1; in vale_polling_enable_disable()
930 ctx->nr_first_cpu_id = 0; in vale_polling_enable_disable()
931 if ((ret = vale_polling_enable(ctx))) { in vale_polling_enable_disable()
932 vale_detach(ctx); in vale_polling_enable_disable()
943 if ((ret = vale_polling_disable(ctx))) { in vale_polling_enable_disable()
944 vale_detach(ctx); in vale_polling_enable_disable()
948 return vale_detach(ctx); in vale_polling_enable_disable()
952 push_option(struct nmreq_option *opt, struct TestContext *ctx) in push_option() argument
954 opt->nro_next = (uintptr_t)ctx->nr_opt; in push_option()
955 ctx->nr_opt = opt; in push_option()
959 clear_options(struct TestContext *ctx) in clear_options() argument
961 ctx->nr_opt = NULL; in clear_options()
987 unsupported_option(struct TestContext *ctx) in unsupported_option() argument
991 printf("Testing unsupported option on %s\n", ctx->ifname_ext); in unsupported_option()
995 push_option(&opt, ctx); in unsupported_option()
998 if (port_register_hwall(ctx) >= 0) in unsupported_option()
1001 clear_options(ctx); in unsupported_option()
1007 infinite_options(struct TestContext *ctx) in infinite_options() argument
1011 printf("Testing infinite list of options on %s (invalid options)\n", ctx->ifname_ext); in infinite_options()
1015 push_option(&opt, ctx); in infinite_options()
1017 if (port_register_hwall(ctx) >= 0) in infinite_options()
1019 clear_options(ctx); in infinite_options()
1024 infinite_options2(struct TestContext *ctx) in infinite_options2() argument
1028 printf("Testing infinite list of options on %s (valid options)\n", ctx->ifname_ext); in infinite_options2()
1032 push_option(&opt, ctx); in infinite_options2()
1034 if (port_register_hwall(ctx) >= 0) in infinite_options2()
1036 clear_options(ctx); in infinite_options2()
1076 push_extmem_option(struct TestContext *ctx, const struct nmreq_pools_info *pi, in push_extmem_option() argument
1093 push_option(&e->nro_opt, ctx); in push_extmem_option()
1099 pop_extmem_option(struct TestContext *ctx, struct nmreq_opt_extmem *exp) in pop_extmem_option() argument
1104 e = (struct nmreq_opt_extmem *)(uintptr_t)ctx->nr_opt; in pop_extmem_option()
1105 ctx->nr_opt = (struct nmreq_option *)(uintptr_t)ctx->nr_opt->nro_next; in pop_extmem_option()
1130 _extmem_option(struct TestContext *ctx, in _extmem_option() argument
1136 if ((ret = push_extmem_option(ctx, pi, &e)) < 0) in _extmem_option()
1141 strncpy(ctx->ifname_ext, "vale0:0", sizeof(ctx->ifname_ext)); in _extmem_option()
1142 ctx->nr_tx_slots = 16; in _extmem_option()
1143 ctx->nr_rx_slots = 16; in _extmem_option()
1145 if ((ret = port_register_hwall(ctx))) in _extmem_option()
1148 ret = pop_extmem_option(ctx, &save); in _extmem_option()
1184 extmem_option(struct TestContext *ctx) in extmem_option() argument
1191 return _extmem_option(ctx, &pools_info); in extmem_option()
1195 bad_extmem_option(struct TestContext *ctx) in bad_extmem_option() argument
1206 return _extmem_option(ctx, &pools_info) < 0 ? 0 : -1; in bad_extmem_option()
1210 duplicate_extmem_options(struct TestContext *ctx) in duplicate_extmem_options() argument
1220 if ((ret = push_extmem_option(ctx, &pools_info, &e1)) < 0) in duplicate_extmem_options()
1223 if ((ret = push_extmem_option(ctx, &pools_info, &e2)) < 0) { in duplicate_extmem_options()
1224 clear_options(ctx); in duplicate_extmem_options()
1231 strncpy(ctx->ifname_ext, "vale0:0", sizeof(ctx->ifname_ext)); in duplicate_extmem_options()
1232 ctx->nr_tx_slots = 16; in duplicate_extmem_options()
1233 ctx->nr_rx_slots = 16; in duplicate_extmem_options()
1235 ret = port_register_hwall(ctx); in duplicate_extmem_options()
1242 if ((ret = pop_extmem_option(ctx, &save2))) in duplicate_extmem_options()
1246 if ((ret = pop_extmem_option(ctx, &save1))) in duplicate_extmem_options()
1254 push_csb_option(struct TestContext *ctx, struct nmreq_opt_csb *opt) in push_csb_option() argument
1260 ctx->nr_flags |= NR_EXCLUSIVE; in push_csb_option()
1263 ret = port_info_get(ctx); in push_csb_option()
1267 num_entries = num_registered_rings(ctx); in push_csb_option()
1272 if (ctx->csb) { in push_csb_option()
1273 free(ctx->csb); in push_csb_option()
1275 ret = posix_memalign(&ctx->csb, sizeof(struct nm_csb_atok), csb_size); in push_csb_option()
1283 opt->csb_atok = (uintptr_t)ctx->csb; in push_csb_option()
1284 opt->csb_ktoa = (uintptr_t)(((uint8_t *)ctx->csb) + in push_csb_option()
1288 push_option(&opt->nro_opt, ctx); in push_csb_option()
1294 csb_mode(struct TestContext *ctx) in csb_mode() argument
1299 ret = push_csb_option(ctx, &opt); in csb_mode()
1304 ret = port_register_hwall(ctx); in csb_mode()
1305 clear_options(ctx); in csb_mode()
1311 csb_mode_invalid_memory(struct TestContext *ctx) in csb_mode_invalid_memory() argument
1320 push_option(&opt.nro_opt, ctx); in csb_mode_invalid_memory()
1322 ctx->nr_flags = NR_EXCLUSIVE; in csb_mode_invalid_memory()
1323 ret = port_register_hwall(ctx); in csb_mode_invalid_memory()
1324 clear_options(ctx); in csb_mode_invalid_memory()
1330 sync_kloop_stop(struct TestContext *ctx) in sync_kloop_stop() argument
1335 printf("Testing NETMAP_REQ_SYNC_KLOOP_STOP on '%s'\n", ctx->ifname_ext); in sync_kloop_stop()
1337 nmreq_hdr_init(&hdr, ctx->ifname_ext); in sync_kloop_stop()
1339 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in sync_kloop_stop()
1350 struct TestContext *ctx = opaque; in sync_kloop_worker() local
1355 printf("Testing NETMAP_REQ_SYNC_KLOOP_START on '%s'\n", ctx->ifname_ext); in sync_kloop_worker()
1357 nmreq_hdr_init(&hdr, ctx->ifname_ext); in sync_kloop_worker()
1360 hdr.nr_options = (uintptr_t)ctx->nr_opt; in sync_kloop_worker()
1363 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in sync_kloop_worker()
1368 if (ctx->sem) { in sync_kloop_worker()
1369 sem_post(ctx->sem); in sync_kloop_worker()
1376 sync_kloop_start_stop(struct TestContext *ctx) in sync_kloop_start_stop() argument
1382 ret = pthread_create(&th, NULL, sync_kloop_worker, ctx); in sync_kloop_start_stop()
1388 ret = sync_kloop_stop(ctx); in sync_kloop_start_stop()
1402 sync_kloop(struct TestContext *ctx) in sync_kloop() argument
1406 ret = csb_mode(ctx); in sync_kloop()
1411 return sync_kloop_start_stop(ctx); in sync_kloop()
1415 sync_kloop_eventfds(struct TestContext *ctx) in sync_kloop_eventfds() argument
1426 modeopt.mode = ctx->sync_kloop_mode; in sync_kloop_eventfds()
1427 push_option(&modeopt.nro_opt, ctx); in sync_kloop_eventfds()
1429 num_entries = num_registered_rings(ctx); in sync_kloop_eventfds()
1444 push_option(&evopt->nro_opt, ctx); in sync_kloop_eventfds()
1447 ret = sync_kloop_start_stop(ctx); in sync_kloop_eventfds()
1450 clear_options(ctx); in sync_kloop_eventfds()
1461 clear_options(ctx); in sync_kloop_eventfds()
1467 sync_kloop_eventfds_all_mode(struct TestContext *ctx, in sync_kloop_eventfds_all_mode() argument
1472 ret = csb_mode(ctx); in sync_kloop_eventfds_all_mode()
1477 ctx->sync_kloop_mode = sync_kloop_mode; in sync_kloop_eventfds_all_mode()
1479 return sync_kloop_eventfds(ctx); in sync_kloop_eventfds_all_mode()
1483 sync_kloop_eventfds_all(struct TestContext *ctx) in sync_kloop_eventfds_all() argument
1485 return sync_kloop_eventfds_all_mode(ctx, 0); in sync_kloop_eventfds_all()
1489 sync_kloop_eventfds_all_tx(struct TestContext *ctx) in sync_kloop_eventfds_all_tx() argument
1494 ret = push_csb_option(ctx, &opt); in sync_kloop_eventfds_all_tx()
1499 ret = port_register_hwall_tx(ctx); in sync_kloop_eventfds_all_tx()
1503 clear_options(ctx); in sync_kloop_eventfds_all_tx()
1505 return sync_kloop_eventfds(ctx); in sync_kloop_eventfds_all_tx()
1509 sync_kloop_eventfds_all_direct(struct TestContext *ctx) in sync_kloop_eventfds_all_direct() argument
1511 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct()
1516 sync_kloop_eventfds_all_direct_tx(struct TestContext *ctx) in sync_kloop_eventfds_all_direct_tx() argument
1518 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct_tx()
1523 sync_kloop_eventfds_all_direct_rx(struct TestContext *ctx) in sync_kloop_eventfds_all_direct_rx() argument
1525 return sync_kloop_eventfds_all_mode(ctx, in sync_kloop_eventfds_all_direct_rx()
1530 sync_kloop_nocsb(struct TestContext *ctx) in sync_kloop_nocsb() argument
1534 ret = port_register_hwall(ctx); in sync_kloop_nocsb()
1541 return sync_kloop_start_stop(ctx) != 0 ? 0 : -1; in sync_kloop_nocsb()
1545 csb_enable(struct TestContext *ctx) in csb_enable() argument
1552 ret = push_csb_option(ctx, &opt); in csb_enable()
1559 nmreq_hdr_init(&hdr, ctx->ifname_ext); in csb_enable()
1561 hdr.nr_options = (uintptr_t)ctx->nr_opt; in csb_enable()
1564 printf("Testing NETMAP_REQ_CSB_ENABLE on '%s'\n", ctx->ifname_ext); in csb_enable()
1566 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in csb_enable()
1573 clear_options(ctx); in csb_enable()
1579 sync_kloop_csb_enable(struct TestContext *ctx) in sync_kloop_csb_enable() argument
1583 ctx->nr_flags |= NR_EXCLUSIVE; in sync_kloop_csb_enable()
1584 ret = port_register_hwall(ctx); in sync_kloop_csb_enable()
1589 ret = csb_enable(ctx); in sync_kloop_csb_enable()
1594 return sync_kloop_start_stop(ctx); in sync_kloop_csb_enable()
1599 sync_kloop_conflict(struct TestContext *ctx)
1609 ret = push_csb_option(ctx, &opt);
1614 ret = port_register_hwall(ctx);
1618 clear_options(ctx);
1625 ctx->sem = &sem;
1627 ret = pthread_create(&th1, NULL, sync_kloop_worker, ctx);
1633 ret = pthread_create(&th2, NULL, sync_kloop_worker, ctx);
1658 err |= sync_kloop_stop(ctx);
1673 ctx->sem = NULL;
1687 sync_kloop_eventfds_mismatch(struct TestContext *ctx) in sync_kloop_eventfds_mismatch() argument
1692 ret = push_csb_option(ctx, &opt); in sync_kloop_eventfds_mismatch()
1697 ret = port_register_hwall_rx(ctx); in sync_kloop_eventfds_mismatch()
1701 clear_options(ctx); in sync_kloop_eventfds_mismatch()
1707 ctx->nr_flags &= ~NR_RX_RINGS_ONLY; in sync_kloop_eventfds_mismatch()
1709 return (sync_kloop_eventfds(ctx) != 0) ? 0 : -1; in sync_kloop_eventfds_mismatch()
1713 null_port(struct TestContext *ctx) in null_port() argument
1717 ctx->nr_mem_id = 1; in null_port()
1718 ctx->nr_mode = NR_REG_NULL; in null_port()
1719 ctx->nr_tx_rings = 10; in null_port()
1720 ctx->nr_rx_rings = 5; in null_port()
1721 ctx->nr_tx_slots = 256; in null_port()
1722 ctx->nr_rx_slots = 100; in null_port()
1723 ret = port_register(ctx); in null_port()
1731 null_port_all_zero(struct TestContext *ctx) in null_port_all_zero() argument
1735 ctx->nr_mem_id = 1; in null_port_all_zero()
1736 ctx->nr_mode = NR_REG_NULL; in null_port_all_zero()
1737 ctx->nr_tx_rings = 0; in null_port_all_zero()
1738 ctx->nr_rx_rings = 0; in null_port_all_zero()
1739 ctx->nr_tx_slots = 0; in null_port_all_zero()
1740 ctx->nr_rx_slots = 0; in null_port_all_zero()
1741 ret = port_register(ctx); in null_port_all_zero()
1749 null_port_sync(struct TestContext *ctx) in null_port_sync() argument
1753 ctx->nr_mem_id = 1; in null_port_sync()
1754 ctx->nr_mode = NR_REG_NULL; in null_port_sync()
1755 ctx->nr_tx_rings = 10; in null_port_sync()
1756 ctx->nr_rx_rings = 5; in null_port_sync()
1757 ctx->nr_tx_slots = 256; in null_port_sync()
1758 ctx->nr_rx_slots = 100; in null_port_sync()
1759 ret = port_register(ctx); in null_port_sync()
1763 ret = ioctl(ctx->fd, NIOCTXSYNC, 0); in null_port_sync()
1845 nmreq_hdr_parsing(struct TestContext *ctx, in nmreq_hdr_parsing() argument
1852 save = ctx->ifparse = t->ifname; in nmreq_hdr_parsing()
1855 printf("nmreq_header: \"%s\"\n", ctx->ifparse); in nmreq_hdr_parsing()
1856 if (nmreq_header_decode(&ctx->ifparse, hdr, ctx->nmctx) < 0) { in nmreq_hdr_parsing()
1863 if (ctx->ifparse != save) { in nmreq_hdr_parsing()
1894 nmreq_reg_parsing(struct TestContext *ctx, in nmreq_reg_parsing() argument
1902 save = ctx->ifparse; in nmreq_reg_parsing()
1905 printf("nmreq_register: \"%s\"\n", ctx->ifparse); in nmreq_reg_parsing()
1906 if (nmreq_register_decode(&ctx->ifparse, reg, ctx->nmctx) < 0) { in nmreq_reg_parsing()
1913 if (ctx->ifparse != save) { in nmreq_reg_parsing()
1958 nmctx_parsing_error(struct nmctx *ctx, const char *msg) in nmctx_parsing_error() argument
1960 (void)ctx; in nmctx_parsing_error()
1965 nmreq_parsing(struct TestContext *ctx) in nmreq_parsing() argument
1980 ctx->nmctx = &test_nmctx; in nmreq_parsing()
1988 if (nmreq_hdr_parsing(ctx, t, &hdr) < 0) { in nmreq_parsing()
1990 } else if (t->exp_error <= 0 && nmreq_reg_parsing(ctx, t, &reg) < 0) { in nmreq_parsing()
1993 if (strcmp(ctx->ifparse, exp_suff) != 0) { in nmreq_parsing()
1995 ctx->ifparse, exp_suff); in nmreq_parsing()
1999 ctx->nmctx = NULL; in nmreq_parsing()
2004 binarycomp(struct TestContext *ctx) in binarycomp() argument
2014 (void)ctx; in binarycomp()
2110 context_cleanup(struct TestContext *ctx) in context_cleanup() argument
2112 if (ctx->csb) { in context_cleanup()
2113 free(ctx->csb); in context_cleanup()
2114 ctx->csb = NULL; in context_cleanup()
2117 close(ctx->fd); in context_cleanup()
2118 ctx->fd = -1; in context_cleanup()