Lines Matching +full:num +full:- +full:rings

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
32 * # kyua test -k /usr/tests/sys/netmap/Kyuafile
35 * # ./ctrl-api-test
66 return -1; in eventfd()
83 for (i = 0; i < argc - 1; i++) { in exec_command()
86 return -1; in exec_command()
106 for (i--; i >= 0; i--) { in exec_command()
109 return -1; in exec_command()
118 for (i = 0; i < argc - 1; i++) { in exec_command()
138 return -1; in exec_command()
149 uint32_t nr_tx_slots; /* slots in tx rings */
150 uint32_t nr_rx_slots; /* slots in rx rings */
151 uint16_t nr_tx_rings; /* number of tx rings */
152 uint16_t nr_rx_rings; /* number of rx rings */
153 uint16_t nr_host_tx_rings; /* number of host tx rings */
154 uint16_t nr_host_rx_rings; /* number of host rx rings */
163 uint32_t sync_kloop_mode; /* sync-kloop */
183 hdr->nr_version = NETMAP_API; in nmreq_hdr_init()
185 strncpy(hdr->nr_name, ifname, sizeof(hdr->nr_name)); in nmreq_hdr_init()
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()
219 return -1; 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()
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()
297 return -1; 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()
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()
324 req.nr_name[sizeof(req.nr_name) - 1] = '\0'; 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()
368 return -1; 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()
399 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_all_nic()
406 ctx->nr_mode = NR_REG_ALL_NIC; in legacy_regif_12()
413 ctx->nr_mode = NR_REG_SW; in legacy_regif_sw()
420 ctx->nr_mode = NR_REG_NIC_SW; in legacy_regif_future()
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()
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()
448 strncpy(ctx->ifname_ext, "valeX1:Y4", sizeof(ctx->ifname_ext)); in legacy_regif_extra_bufs_pipe_vale()
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()
469 ctx->nr_mode = NR_REG_NIC_SW; in port_register_hwall_host()
476 ctx->nr_mode = NR_REG_SW; in port_register_hostall()
483 ctx->nr_mode = NR_REG_ALL_NIC; in port_register_hwall()
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()
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()
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()
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()
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()
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()
536 NM_IFNAMSZ - 1); in vale_mkname()
537 return -1; in vale_mkname()
553 return -1; 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()
576 : -1; in vale_attach()
589 return -1; in vale_detach()
595 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_detach()
620 ctx->nr_mode = NR_REG_NIC_SW; in vale_attach_detach_host_rings()
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()
647 return -1; 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()
666 * http://docs.oasis-open.org/virtio/virtio/v1.0/cs04/virtio-v1.0-cs04.html
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()
682 ctx->nr_hdr_len = VIRTIO_NET_HDR_LEN_WITH_MERGEABLE_RXBUFS; in vale_ephemeral_port_hdr_manipulation()
686 ctx->nr_hdr_len = 0; in vale_ephemeral_port_hdr_manipulation()
690 ctx->nr_hdr_len = VIRTIO_NET_HDR_LEN; in vale_ephemeral_port_hdr_manipulation()
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()
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()
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()
783 : -1; in pools_info_get()
798 ctx->nr_mode = NR_REG_ONE_NIC; in pools_info_get_and_register()
803 ctx->nr_mem_id = 1; in pools_info_get_and_register()
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()
819 strncat(ctx->ifname_ext, "{pipeid1", sizeof(ctx->ifname_ext)); in pipe_master()
820 ctx->nr_mode = NR_REG_NIC_SW; in pipe_master()
824 return -1; in pipe_master()
826 ctx->nr_mode = NR_REG_ALL_NIC; in pipe_master()
834 strncat(ctx->ifname_ext, "}pipeid2", sizeof(ctx->ifname_ext)); in pipe_slave()
835 ctx->nr_mode = NR_REG_ALL_NIC; in pipe_slave()
845 strncat(ctx->ifname_ext, "}pipeid3", sizeof(ctx->ifname_ext)); in pipe_port_info_get()
853 strncat(ctx->ifname_ext, "{xid", sizeof(ctx->ifname_ext)); in pipe_pools_info_get()
868 return -1; 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()
889 : -1; in vale_polling_enable()
902 return -1; in vale_polling_disable()
910 ret = ioctl(ctx->fd, NIOCCTRL, &hdr); in vale_polling_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()
954 opt->nro_next = (uintptr_t)ctx->nr_opt; in push_option()
955 ctx->nr_opt = opt; in push_option()
961 ctx->nr_opt = NULL; in clear_options()
967 if (opt->nro_next != exp->nro_next) { in checkoption()
969 (void *)(uintptr_t)opt->nro_next, in checkoption()
970 (void *)(uintptr_t)exp->nro_next); in checkoption()
971 return -1; in checkoption()
973 if (opt->nro_reqtype != exp->nro_reqtype) { in checkoption()
974 printf("nro_reqtype %u expected %u\n", opt->nro_reqtype, in checkoption()
975 exp->nro_reqtype); in checkoption()
976 return -1; in checkoption()
978 if (opt->nro_status != exp->nro_status) { in checkoption()
979 printf("nro_status %u expected %u\n", opt->nro_status, in checkoption()
980 exp->nro_status); in checkoption()
981 return -1; in checkoption()
991 printf("Testing unsupported option on %s\n", ctx->ifname_ext); in unsupported_option()
999 return -1; in unsupported_option()
1011 printf("Testing infinite list of options on %s (invalid options)\n", ctx->ifname_ext); in infinite_options()
1018 return -1; in infinite_options()
1020 return (errno == EMSGSIZE ? 0 : -1); in infinite_options()
1028 printf("Testing infinite list of options on %s (valid options)\n", ctx->ifname_ext); in infinite_options2()
1035 return -1; in infinite_options2()
1037 return (errno == EINVAL ? 0 : -1); in infinite_options2()
1049 strncat(param, pname, sizeof(param) - 1); in change_param()
1054 return -1; in change_param()
1059 return -1; in change_param()
1067 return -1; in change_param()
1070 printf("change_param: %s: %ld -> %ld\n", pname, oldv, newv); in change_param()
1081 addr = mmap(NULL, pi->nr_memsize, PROT_READ | PROT_WRITE, in push_extmem_option()
1082 MAP_ANONYMOUS | MAP_SHARED, -1, 0); in push_extmem_option()
1085 return -1; in push_extmem_option()
1089 e->nro_opt.nro_reqtype = NETMAP_REQ_OPT_EXTMEM; in push_extmem_option()
1090 e->nro_info = *pi; in push_extmem_option()
1091 e->nro_usrptr = (uintptr_t)addr; in push_extmem_option()
1093 push_option(&e->nro_opt, ctx); in push_extmem_option()
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()
1107 if ((ret = checkoption(&e->nro_opt, &exp->nro_opt))) { in pop_extmem_option()
1111 if (e->nro_usrptr != exp->nro_usrptr) { in pop_extmem_option()
1113 e->nro_usrptr, exp->nro_usrptr); in pop_extmem_option()
1114 return -1; in pop_extmem_option()
1116 if (e->nro_info.nr_memsize != exp->nro_info.nr_memsize) { in pop_extmem_option()
1118 e->nro_info.nr_memsize, exp->nro_info.nr_memsize); in pop_extmem_option()
1119 return -1; in pop_extmem_option()
1122 if ((ret = munmap((void *)(uintptr_t)e->nro_usrptr, in pop_extmem_option()
1123 e->nro_info.nr_memsize))) in pop_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()
1158 tot += pi->nr_if_pool_objtotal * pi->nr_if_pool_objsize; in pools_info_min_memsize()
1159 tot += pi->nr_ring_pool_objtotal * pi->nr_ring_pool_objsize; in pools_info_min_memsize()
1160 tot += pi->nr_buf_pool_objtotal * pi->nr_buf_pool_objsize; in pools_info_min_memsize()
1169 * rings, netmap ifs, and buffers to support a VALE port.
1174 pi->nr_if_pool_objtotal = 2; in pools_info_fill()
1175 pi->nr_if_pool_objsize = 1024; in pools_info_fill()
1176 pi->nr_ring_pool_objtotal = 64; in pools_info_fill()
1177 pi->nr_ring_pool_objsize = 512; in pools_info_fill()
1178 pi->nr_buf_pool_objtotal = 4096; in pools_info_fill()
1179 pi->nr_buf_pool_objsize = 2048; in pools_info_fill()
1180 pi->nr_memsize = pools_info_min_memsize(pi); in pools_info_fill()
1206 return _extmem_option(ctx, &pools_info) < 0 ? 0 : -1; in bad_extmem_option()
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()
1238 return -1; in duplicate_extmem_options()
1260 ctx->nr_flags |= NR_EXCLUSIVE; 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()
1282 opt->nro_opt.nro_reqtype = NETMAP_REQ_OPT_CSB; 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()
1322 ctx->nr_flags = NR_EXCLUSIVE; in csb_mode_invalid_memory()
1326 return (ret < 0) ? 0 : -1; in csb_mode_invalid_memory()
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()
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()
1385 return -1; in sync_kloop_start_stop()
1398 return thret == THRET_SUCCESS ? 0 : -1; in sync_kloop_start_stop()
1426 modeopt.mode = ctx->sync_kloop_mode; in sync_kloop_eventfds()
1430 opt_size = sizeof(*evopt) + num_entries * sizeof(evopt->eventfds[0]); in sync_kloop_eventfds()
1432 evopt->nro_opt.nro_next = 0; in sync_kloop_eventfds()
1433 evopt->nro_opt.nro_reqtype = NETMAP_REQ_OPT_SYNC_KLOOP_EVENTFDS; in sync_kloop_eventfds()
1434 evopt->nro_opt.nro_status = 0; in sync_kloop_eventfds()
1435 evopt->nro_opt.nro_size = opt_size; in sync_kloop_eventfds()
1439 evopt->eventfds[i].ioeventfd = efd; in sync_kloop_eventfds()
1441 evopt->eventfds[i].irqfd = efd; in sync_kloop_eventfds()
1444 push_option(&evopt->nro_opt, ctx); in sync_kloop_eventfds()
1445 evsave = evopt->nro_opt; in sync_kloop_eventfds()
1459 ret = checkoption(&evopt->nro_opt, &evsave); in sync_kloop_eventfds()
1477 ctx->sync_kloop_mode = sync_kloop_mode; in sync_kloop_eventfds_all_mode()
1541 return sync_kloop_start_stop(ctx) != 0 ? 0 : -1; in sync_kloop_nocsb()
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()
1583 ctx->nr_flags |= NR_EXCLUSIVE; in sync_kloop_csb_enable()
1625 ctx->sem = &sem;
1645 * CPU on a single-CPU system until the semaphore timeout
1673 ctx->sem = NULL;
1682 : -1;
1705 * rings were registered, and allocate the wrong number of 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()
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()
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()
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()
1763 ret = ioctl(ctx->fd, NIOCTXSYNC, 0); in null_port_sync()
1782 * - port: what should go into hdr.nr_name
1783 * - suff: the trailing part of the input after parsing (NULL means equal to port spec)
1784 * - err: the expected return value, interpreted as follows
1789 * - mode, ringid flags: what should go into the corresponding nr_* fields in the
1795 { "netmap:eth0-1", "eth0", "", 0, NR_REG_ONE_NIC, 1, 0 },
1796 { "netmap:eth0-", "eth0", "-", -EINVAL,0, 0, 0 },
1801 { "netmap:eth0-2/Tx", "eth0", "", 0, NR_REG_ONE_NIC, 2, NR_TX_RINGS_ONLY|NR_EXCLUSIVE },
1809 { "netmap:eth0@2/R@3", "eth0", "@2/R@3", -EINVAL,0, 0, 0 },
1810 { "netmap:eth0@", "eth0", "@", -EINVAL,0, 0, 0 },
1818 { "valeXXX:YYY-4", "valeXXX:YYY", "", 0, NR_REG_ONE_NIC, 4, 0 },
1823 { "netmap:pipe{in-7", "pipe{in", "", 0, NR_REG_ONE_NIC, 7, 0 },
1828 { "vale0:0-3@opt", "vale0:0", "@opt", 0, NR_REG_ONE_NIC, 3, 0 },
1829 { "vale0:0@", "vale0:0", "@", -EINVAL,0, 0, 0 },
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()
1857 if (t->exp_error > 0) { in nmreq_hdr_parsing()
1858 if (errno != t->exp_error) { in nmreq_hdr_parsing()
1860 errno, t->exp_error); in nmreq_hdr_parsing()
1861 return -1; in nmreq_hdr_parsing()
1863 if (ctx->ifparse != save) { in nmreq_hdr_parsing()
1865 return -1; in nmreq_hdr_parsing()
1869 return -1; in nmreq_hdr_parsing()
1874 return -1; in nmreq_hdr_parsing()
1876 if (t->exp_error > 0) { in nmreq_hdr_parsing()
1877 printf("!!! nmreq_header_decode returns 0, but error %d was expected\n", t->exp_error); in nmreq_hdr_parsing()
1878 return -1; in nmreq_hdr_parsing()
1880 if (strcmp(t->exp_port, hdr->nr_name) != 0) { in nmreq_hdr_parsing()
1881 printf("!!! got '%s', want '%s'\n", hdr->nr_name, t->exp_port); in nmreq_hdr_parsing()
1882 return -1; in nmreq_hdr_parsing()
1884 if (hdr->nr_reqtype != orig_hdr.nr_reqtype || in nmreq_hdr_parsing()
1885 hdr->nr_options != orig_hdr.nr_options || in nmreq_hdr_parsing()
1886 hdr->nr_body != orig_hdr.nr_body) { in nmreq_hdr_parsing()
1888 return -1; in nmreq_hdr_parsing()
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()
1907 if (t->exp_error < 0) { in nmreq_reg_parsing()
1908 if (errno != -t->exp_error) { in nmreq_reg_parsing()
1910 errno, -t->exp_error); in nmreq_reg_parsing()
1911 return -1; in nmreq_reg_parsing()
1913 if (ctx->ifparse != save) { in nmreq_reg_parsing()
1915 return -1; in nmreq_reg_parsing()
1919 return -1; in nmreq_reg_parsing()
1924 return -1; in nmreq_reg_parsing()
1926 if (t->exp_error < 0) { in nmreq_reg_parsing()
1927 printf("!!! nmreq_register_decode returns 0, but error %d was expected\n", -t->exp_error); in nmreq_reg_parsing()
1928 return -1; in nmreq_reg_parsing()
1930 if (reg->nr_mode != t->exp_mode) { in nmreq_reg_parsing()
1931 printf("!!! got nr_mode '%d', want '%d'\n", reg->nr_mode, t->exp_mode); in nmreq_reg_parsing()
1932 return -1; in nmreq_reg_parsing()
1934 if (reg->nr_ringid != t->exp_ringid) { in nmreq_reg_parsing()
1935 printf("!!! got nr_ringid '%d', want '%d'\n", reg->nr_ringid, t->exp_ringid); in nmreq_reg_parsing()
1936 return -1; in nmreq_reg_parsing()
1938 if (reg->nr_flags != t->exp_flags) { in nmreq_reg_parsing()
1939 printf("!!! got nm_flags '%llx', want '%llx\n", (unsigned long long)reg->nr_flags, in nmreq_reg_parsing()
1940 (unsigned long long)t->exp_flags); in nmreq_reg_parsing()
1941 return -1; in nmreq_reg_parsing()
1943 if (reg->nr_offset != orig_reg.nr_offset || in nmreq_reg_parsing()
1944 reg->nr_memsize != orig_reg.nr_memsize || in nmreq_reg_parsing()
1945 reg->nr_tx_slots != orig_reg.nr_tx_slots || in nmreq_reg_parsing()
1946 reg->nr_rx_slots != orig_reg.nr_rx_slots || in nmreq_reg_parsing()
1947 reg->nr_tx_rings != orig_reg.nr_tx_rings || in nmreq_reg_parsing()
1948 reg->nr_rx_rings != orig_reg.nr_rx_rings || in nmreq_reg_parsing()
1949 reg->nr_extra_bufs != orig_reg.nr_extra_bufs) in nmreq_reg_parsing()
1952 return -1; in nmreq_reg_parsing()
1976 return -1; in nmreq_parsing()
1980 ctx->nmctx = &test_nmctx; in nmreq_parsing()
1981 for (t = nmreq_parse_tests; t->ifname != NULL; t++) { in nmreq_parsing()
1982 const char *exp_suff = t->exp_suff != NULL ? in nmreq_parsing()
1983 t->exp_suff : t->ifname; in nmreq_parsing()
1989 ret = -1; in nmreq_parsing()
1990 } else if (t->exp_error <= 0 && nmreq_reg_parsing(ctx, t, &reg) < 0) { in nmreq_parsing()
1991 ret = -1; in nmreq_parsing()
1993 if (strcmp(ctx->ifparse, exp_suff) != 0) { in nmreq_parsing()
1995 ctx->ifparse, exp_suff); in nmreq_parsing()
1996 ret = -1; in nmreq_parsing()
1999 ctx->nmctx = NULL; in nmreq_parsing()
2010 return -1;\ in binarycomp()
2037 printf("%s -i IFNAME\n" in usage()
2038 "[-j TEST_NUM1[-[TEST_NUM2]] | -[TEST_NUM_2]]\n" in usage()
2039 "[-l (list test cases)]\n", in usage()
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()
2128 *k = -1; in parse_interval()
2129 if (*scan == '-') { in parse_interval()
2136 *j = *k - 1; in parse_interval()
2138 if (*scan == '-') { in parse_interval()
2139 *k = -1; in parse_interval()
2155 fprintf(stderr, "syntax error in '%s', must be num[-[num]] or -[num]\n", arg); in parse_interval()
2156 return -1; in parse_interval()
2195 int k = -1; in main()
2214 while ((opt = getopt(argc, argv, "hi:j:l")) != -1) { in main()
2221 strncpy(ctx_.ifname, optarg, sizeof(ctx_.ifname) - 1); in main()
2228 return -1; in main()
2240 return -1; in main()
2247 fprintf(stderr, "Test interval %d-%d out of range (%d-%d)\n", in main()
2249 return -1; in main()
2284 return -1; in main()