Skip to content

Commit 81236c7

Browse files
kuba-mooPaolo Abeni
authored andcommitted
selftests: drv-net: psp: add test for auto-adjusting TCP MSS
Test TCP MSS getting auto-adjusted. PSP adds an encapsulation overhead of 40B per packet, when used in transport mode without any virtualization cookie or other optional PSP header fields. The kernel should adjust the MSS for a connection after PSP tx state is reached. Signed-off-by: Jakub Kicinski <[email protected]> Signed-off-by: Daniel Zahka <[email protected]> Link: https://patch.msgid.link/[email protected] Reviewed-by: Willem de Bruijn <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent 2748087 commit 81236c7

File tree

1 file changed

+52
-0
lines changed
  • tools/testing/selftests/drivers/net

1 file changed

+52
-0
lines changed

tools/testing/selftests/drivers/net/psp.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,45 @@ def data_send_disconnect(cfg):
431431
s.close()
432432

433433

434+
def _data_mss_adjust(cfg, ipver):
435+
_init_psp_dev(cfg)
436+
437+
# First figure out what the MSS would be without any adjustments
438+
s = _make_clr_conn(cfg, ipver)
439+
s.send(b"0123456789abcdef" * 1024)
440+
_check_data_rx(cfg, 16 * 1024)
441+
mss = s.getsockopt(socket.IPPROTO_TCP, socket.TCP_MAXSEG)
442+
_close_conn(cfg, s)
443+
444+
s = _make_psp_conn(cfg, 0, ipver)
445+
try:
446+
rx_assoc = cfg.pspnl.rx_assoc({"version": 0,
447+
"dev-id": cfg.psp_dev_id,
448+
"sock-fd": s.fileno()})
449+
rx = rx_assoc['rx-key']
450+
tx = _spi_xchg(s, rx)
451+
452+
rxmss = s.getsockopt(socket.IPPROTO_TCP, socket.TCP_MAXSEG)
453+
ksft_eq(mss, rxmss)
454+
455+
cfg.pspnl.tx_assoc({"dev-id": cfg.psp_dev_id,
456+
"version": 0,
457+
"tx-key": tx,
458+
"sock-fd": s.fileno()})
459+
460+
txmss = s.getsockopt(socket.IPPROTO_TCP, socket.TCP_MAXSEG)
461+
ksft_eq(mss, txmss + 40)
462+
463+
data_len = _send_careful(cfg, s, 100)
464+
_check_data_rx(cfg, data_len)
465+
_check_data_outq(s, 0)
466+
467+
txmss = s.getsockopt(socket.IPPROTO_TCP, socket.TCP_MAXSEG)
468+
ksft_eq(mss, txmss + 40)
469+
finally:
470+
_close_psp_conn(cfg, s)
471+
472+
434473
def data_stale_key(cfg):
435474
""" Test send on a double-rotated key """
436475
_init_psp_dev(cfg)
@@ -470,6 +509,15 @@ def test_case(cfg):
470509
return test_case
471510

472511

512+
def ipver_test_builder(name, test_func, ipver):
513+
"""Build test cases for each IP version"""
514+
def test_case(cfg):
515+
cfg.require_ipver(ipver)
516+
test_case.__name__ = f"{name}_ip{ipver}"
517+
test_func(cfg, ipver)
518+
return test_case
519+
520+
473521
def main() -> None:
474522
""" Ksft boiler plate main """
475523

@@ -497,6 +545,10 @@ def main() -> None:
497545
for version in range(0, 4)
498546
for ipver in ("4", "6")
499547
]
548+
cases += [
549+
ipver_test_builder("data_mss_adjust", _data_mss_adjust, ipver)
550+
for ipver in ("4", "6")
551+
]
500552

501553
ksft_run(cases=cases, globs=globals(),
502554
case_pfx={"dev_", "data_", "assoc_"},

0 commit comments

Comments
 (0)