| 779 | } |
| 780 | |
| 781 | static int run_basic_tests(void) |
| 782 | { |
| 783 | struct sockaddr_storage addr; |
| 784 | int ret, i, sp[2]; |
| 785 | |
| 786 | /* create TCP IPv6 pair */ |
| 787 | ret = create_socketpair_ip(&addr, &sp[0], &sp[1], true, true, false, true); |
| 788 | if (ret) { |
| 789 | fprintf(stderr, "sock prep failed %d\n", ret); |
| 790 | return -1; |
| 791 | } |
| 792 | |
| 793 | for (i = 0; i < 2; i++) { |
| 794 | struct io_uring ring; |
| 795 | unsigned ring_flags = 0; |
| 796 | |
| 797 | if (i & 1) |
| 798 | ring_flags |= IORING_SETUP_DEFER_TASKRUN; |
| 799 | |
| 800 | ret = io_uring_queue_init(32, &ring, ring_flags); |
| 801 | if (ret) { |
| 802 | if (ret == -EINVAL) |
| 803 | continue; |
| 804 | fprintf(stderr, "queue init failed: %d\n", ret); |
| 805 | return -1; |
| 806 | } |
| 807 | |
| 808 | ret = test_basic_send(&ring, sp[0], sp[1], 0); |
| 809 | if (ret) { |
| 810 | fprintf(stderr, "test_basic_send() nonvec failed\n"); |
| 811 | return -1; |
| 812 | } |
| 813 | |
| 814 | ret = test_basic_send(&ring, sp[0], sp[1], 1); |
| 815 | if (ret) { |
| 816 | fprintf(stderr, "test_basic_send() vec failed\n"); |
| 817 | return -1; |
| 818 | } |
| 819 | |
| 820 | ret = test_send_faults(sp[0], sp[1]); |
| 821 | if (ret) { |
| 822 | fprintf(stderr, "test_send_faults() failed\n"); |
| 823 | return -1; |
| 824 | } |
| 825 | |
| 826 | ret = test_invalid_zc(sp); |
| 827 | if (ret) { |
| 828 | fprintf(stderr, "test_invalid_zc() failed\n"); |
| 829 | return -1; |
| 830 | } |
| 831 | |
| 832 | ret = test_async_addr(&ring); |
| 833 | if (ret) { |
| 834 | fprintf(stderr, "test_async_addr() failed\n"); |
| 835 | return T_EXIT_FAIL; |
| 836 | } |
| 837 | |
| 838 | ret = test_sendzc_report(&ring); |
no test coverage detected