accel/qaic: Add AIC200 support
[drm/drm-misc.git] / tools / testing / selftests / net / tcp_ao / connect.c
blobf1d8d29e393f619d53ff0f370779ff5d227a7f5b
1 // SPDX-License-Identifier: GPL-2.0
2 /* Author: Dmitry Safonov <dima@arista.com> */
3 #include <inttypes.h>
4 #include "aolib.h"
6 static void *server_fn(void *arg)
8 int sk, lsk;
9 ssize_t bytes;
11 lsk = test_listen_socket(this_ip_addr, test_server_port, 1);
13 if (test_add_key(lsk, DEFAULT_TEST_PASSWORD, this_ip_dest, -1, 100, 100))
14 test_error("setsockopt(TCP_AO_ADD_KEY)");
15 synchronize_threads();
17 if (test_wait_fd(lsk, TEST_TIMEOUT_SEC, 0))
18 test_error("test_wait_fd()");
20 sk = accept(lsk, NULL, NULL);
21 if (sk < 0)
22 test_error("accept()");
24 synchronize_threads();
26 bytes = test_server_run(sk, 0, 0);
28 test_fail("server served: %zd", bytes);
29 return NULL;
32 static void *client_fn(void *arg)
34 int sk = socket(test_family, SOCK_STREAM, IPPROTO_TCP);
35 uint64_t before_aogood, after_aogood;
36 const size_t nr_packets = 20;
37 struct netstat *ns_before, *ns_after;
38 struct tcp_ao_counters ao1, ao2;
40 if (sk < 0)
41 test_error("socket()");
43 if (test_add_key(sk, DEFAULT_TEST_PASSWORD, this_ip_dest, -1, 100, 100))
44 test_error("setsockopt(TCP_AO_ADD_KEY)");
46 synchronize_threads();
47 if (test_connect_socket(sk, this_ip_dest, test_server_port) <= 0)
48 test_error("failed to connect()");
49 synchronize_threads();
51 ns_before = netstat_read();
52 before_aogood = netstat_get(ns_before, "TCPAOGood", NULL);
53 if (test_get_tcp_ao_counters(sk, &ao1))
54 test_error("test_get_tcp_ao_counters()");
56 if (test_client_verify(sk, 100, nr_packets, TEST_TIMEOUT_SEC)) {
57 test_fail("verify failed");
58 return NULL;
61 ns_after = netstat_read();
62 after_aogood = netstat_get(ns_after, "TCPAOGood", NULL);
63 if (test_get_tcp_ao_counters(sk, &ao2))
64 test_error("test_get_tcp_ao_counters()");
65 netstat_print_diff(ns_before, ns_after);
66 netstat_free(ns_before);
67 netstat_free(ns_after);
69 if (nr_packets > (after_aogood - before_aogood)) {
70 test_fail("TCPAOGood counter mismatch: %zu > (%" PRIu64 " - %" PRIu64 ")",
71 nr_packets, after_aogood, before_aogood);
72 return NULL;
74 if (test_tcp_ao_counters_cmp("connect", &ao1, &ao2, TEST_CNT_GOOD))
75 return NULL;
77 test_ok("connect TCPAOGood %" PRIu64 "/%" PRIu64 "/%" PRIu64 " => %" PRIu64 "/%" PRIu64 "/%" PRIu64 ", sent %zu",
78 before_aogood, ao1.ao_info_pkt_good,
79 ao1.key_cnts[0].pkt_good,
80 after_aogood, ao2.ao_info_pkt_good,
81 ao2.key_cnts[0].pkt_good,
82 nr_packets);
83 return NULL;
86 int main(int argc, char *argv[])
88 test_init(2, server_fn, client_fn);
89 return 0;