mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
selftests: rds: Add helper function snd_rcv_packets() in test.py
Hoist the send/recv logic in test.py into a helper function, snd_rcv_packets(). This is a preparatory refactoring for the rds over ROCE series which can use the same function to run the test over tcp, rdma, or both. No functional changes are introduced in this patch. Signed-off-by: Allison Henderson <achender@kernel.org> Link: https://patch.msgid.link/20260518012443.2629206-8-achender@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
f7baddf08b
commit
3bd27901aa
|
|
@ -167,6 +167,59 @@ def verify_hashes(snd_hashes, rcv_hashes):
|
|||
ksft_pr(f"{key[0]}/{key[1]}: ok")
|
||||
return 0
|
||||
|
||||
def snd_rcv_packets(addrs, netns_list):
|
||||
"""
|
||||
Send packets on the given network interfaces
|
||||
|
||||
:param addrs: list of (ip, port) tuples matching the sockets
|
||||
:param netns_list: list of network namespaces
|
||||
"""
|
||||
|
||||
sockets = [
|
||||
netns_socket(netns_list[0], socket.AF_RDS, socket.SOCK_SEQPACKET),
|
||||
netns_socket(netns_list[1], socket.AF_RDS, socket.SOCK_SEQPACKET),
|
||||
]
|
||||
|
||||
for s, addr in zip(sockets, addrs):
|
||||
s.bind(addr)
|
||||
s.setblocking(0)
|
||||
|
||||
send_hashes = {}
|
||||
recv_hashes = {}
|
||||
|
||||
ep = select.epoll()
|
||||
|
||||
for s in sockets:
|
||||
ep.register(s, select.EPOLLRDNORM)
|
||||
|
||||
num_packets = 50000
|
||||
nr_send = 0
|
||||
nr_recv = 0
|
||||
|
||||
while nr_send < num_packets:
|
||||
|
||||
# Send as much as we can without blocking
|
||||
ksft_pr("sending...", nr_send, nr_recv)
|
||||
nr_send = send_burst(sockets, addrs, send_hashes, nr_send, num_packets)
|
||||
|
||||
# Receive as much as we can without blocking
|
||||
ksft_pr("receiving...", nr_send, nr_recv)
|
||||
while nr_recv < nr_send:
|
||||
nr_recv = recv_burst(ep, sockets, addrs, recv_hashes, nr_recv)
|
||||
|
||||
# exercise net/rds/tcp.c:rds_tcp_sysctl_reset()
|
||||
for net in netns_list:
|
||||
ip(f"netns exec {net} /usr/sbin/sysctl net.rds.tcp.rds_tcp_rcvbuf=10000")
|
||||
ip(f"netns exec {net} /usr/sbin/sysctl net.rds.tcp.rds_tcp_sndbuf=10000")
|
||||
|
||||
ksft_pr("done", nr_send, nr_recv)
|
||||
|
||||
check_info(sockets)
|
||||
|
||||
# We're done sending and receiving stuff, now let's check if what
|
||||
# we received is what we sent.
|
||||
return verify_hashes(send_hashes, recv_hashes)
|
||||
|
||||
def stop_pcaps():
|
||||
"""Stop tcpdump processes.
|
||||
|
||||
|
|
@ -267,7 +320,6 @@ PACKET_CORRUPTION=str(args.corruption)+'%'
|
|||
PACKET_DUPLICATE=str(args.duplicate)+'%'
|
||||
|
||||
setup_tcp()
|
||||
addrs = tcp_addrs
|
||||
|
||||
print("TAP version 13")
|
||||
print("1..1")
|
||||
|
|
@ -277,56 +329,13 @@ if args.timeout > 0:
|
|||
signal.alarm(args.timeout)
|
||||
signal.signal(signal.SIGALRM, signal_handler)
|
||||
|
||||
sockets = [
|
||||
netns_socket(NET0, socket.AF_RDS, socket.SOCK_SEQPACKET),
|
||||
netns_socket(NET1, socket.AF_RDS, socket.SOCK_SEQPACKET),
|
||||
]
|
||||
|
||||
for s, addr in zip(sockets, addrs):
|
||||
s.bind(addr)
|
||||
s.setblocking(0)
|
||||
|
||||
send_hashes = {}
|
||||
recv_hashes = {}
|
||||
|
||||
ep = select.epoll()
|
||||
|
||||
for s in sockets:
|
||||
ep.register(s, select.EPOLLRDNORM)
|
||||
|
||||
NUM_PACKETS = 50000
|
||||
nr_send = 0
|
||||
nr_recv = 0
|
||||
|
||||
while nr_send < NUM_PACKETS:
|
||||
|
||||
# Send as much as we can without blocking
|
||||
ksft_pr("sending...", nr_send, nr_recv)
|
||||
nr_send = send_burst(sockets, addrs, send_hashes, nr_send, NUM_PACKETS)
|
||||
|
||||
# Receive as much as we can without blocking
|
||||
ksft_pr("receiving...", nr_send, nr_recv)
|
||||
while nr_recv < nr_send:
|
||||
nr_recv = recv_burst(ep, sockets, addrs, recv_hashes, nr_recv)
|
||||
|
||||
# exercise net/rds/tcp.c:rds_tcp_sysctl_reset()
|
||||
for net in [NET0, NET1]:
|
||||
ip(f"netns exec {net} /usr/sbin/sysctl net.rds.tcp.rds_tcp_rcvbuf=10000")
|
||||
ip(f"netns exec {net} /usr/sbin/sysctl net.rds.tcp.rds_tcp_sndbuf=10000")
|
||||
|
||||
ksft_pr("done", nr_send, nr_recv)
|
||||
|
||||
check_info(sockets)
|
||||
ret = snd_rcv_packets(tcp_addrs, [NET0, NET1])
|
||||
|
||||
# cancel timeout
|
||||
signal.alarm(0)
|
||||
|
||||
stop_pcaps()
|
||||
|
||||
# We're done sending and receiving stuff, now let's check if what
|
||||
# we received is what we sent.
|
||||
ret = verify_hashes(send_hashes, recv_hashes)
|
||||
|
||||
if ret == 0:
|
||||
ksft_pr("Success")
|
||||
print("ok 1 rds selftest")
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user