Lines Matching full:cfg
23 def _rss_key_check(cfg, data=None, context=0): argument
25 data = get_rss(cfg, context=context)
32 def get_rss(cfg, context=0): argument
33 return ethtool(f"-x {cfg.ifname} context {context}", json=True)[0]
36 def get_drop_err_sum(cfg): argument
37 stats = ip("-s -s link show dev " + cfg.ifname, json=True)[0]
46 def ethtool_create(cfg, act, opts): argument
47 output = ethtool(f"{act} {cfg.ifname} {opts}").stdout
53 def require_ntuple(cfg): argument
54 features = ethtool(f"-k {cfg.ifname}", json=True)[0]
63 def _get_rx_cnts(cfg, prev=None): argument
64 cfg.wait_hw_stats_settle()
65 data = cfg.netdevnl.qstats_get({"ifindex": cfg.ifindex, "scope": ["queue"]}, dump=True)
76 def _send_traffic_check(cfg, port, name, params): argument
85 cnts = _get_rx_cnts(cfg)
86 GenerateTraffic(cfg, port=port).wait_pkts_and_stop(20000)
87 cnts = _get_rx_cnts(cfg, prev=cnts)
100 def _ntuple_rule_check(cfg, rule_id, ctx_id): argument
102 text = ethtool(f"-n {cfg.ifname} rule {rule_id}").stdout
107 def test_rss_key_indir(cfg): argument
110 qcnt = len(_get_rx_cnts(cfg))
114 data = get_rss(cfg)
122 _rss_key_check(cfg, data=data)
127 ethtool(f"-X {cfg.ifname} hkey " + _rss_key_str(key))
129 data = get_rss(cfg)
134 ethtool(f"-X {cfg.ifname} equal 3 hkey " + _rss_key_str(key))
135 reset_indir = defer(ethtool, f"-X {cfg.ifname} default")
137 data = get_rss(cfg)
138 _rss_key_check(cfg, data=data)
144 ethtool(f"-X {cfg.ifname} default hkey " + _rss_key_str(key))
145 data = get_rss(cfg)
146 _rss_key_check(cfg, data=data)
151 ethtool(f"-X {cfg.ifname} equal 2")
152 data = get_rss(cfg)
157 cnts = _get_rx_cnts(cfg)
158 GenerateTraffic(cfg).wait_pkts_and_stop(20000)
159 cnts = _get_rx_cnts(cfg, prev=cnts)
169 cnts = _get_rx_cnts(cfg)
170 GenerateTraffic(cfg).wait_pkts_and_stop(20000)
171 cnts = _get_rx_cnts(cfg, prev=cnts)
176 def test_rss_queue_reconfigure(cfg, main_ctx=True): argument
186 require_ntuple(cfg)
190 qcnt = len(_get_rx_cnts(cfg))
191 ethtool(f"-L {cfg.ifname} combined 4")
192 defer(ethtool, f"-L {cfg.ifname} combined {qcnt}")
200 ctx_id = ethtool_create(cfg, "-X", "context new")
202 defer(ethtool, f"-X {cfg.ifname} {ctx_ref} delete")
205 data = get_rss(cfg, context=ctx_id)
212 ethtool(f"-L {cfg.ifname} combined 5")
213 data = get_rss(cfg)
216 ethtool(f"-L {cfg.ifname} combined 4")
220 ethtool(f"-X {cfg.ifname} {ctx_ref} weight 1 0 0 1")
223 defer(ethtool, f"-X {cfg.ifname} default")
226 flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id}"
227 ntuple = ethtool_create(cfg, "-N", flow)
228 defer(ethtool, f"-N {cfg.ifname} delete {ntuple}")
230 _send_traffic_check(cfg, port, ctx_ref, { 'target': (0, 3),
234 ethtool(f"-L {cfg.ifname} combined 5")
235 data = get_rss(cfg, context=ctx_id)
238 _send_traffic_check(cfg, port, ctx_ref, { 'target': (0, 3),
243 ethtool(f"-L {cfg.ifname} combined 3")
250 ethtool(f"-L {cfg.ifname} combined 4")
251 …flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id} action 1"
254 ntuple2 = ethtool_create(cfg, "-N", flow)
255 defer(ethtool, f"-N {cfg.ifname} delete {ntuple2}")
261 ethtool(f"-X {cfg.ifname} {ctx_ref} weight 1 0 1 0")
264 ntuple2 = ethtool_create(cfg, "-N", flow)
269 defer(ethtool, f"-N {cfg.ifname} delete {ntuple2}")
272 _send_traffic_check(cfg, port, ctx_ref, { 'target': (1, 3),
276 ethtool(f"-L {cfg.ifname} combined 3")
283 def test_rss_resize(cfg): argument
292 channels = cfg.ethnl.channels_get({'header': {'dev-index': cfg.ifindex}})
299 ethtool(f"-L {cfg.ifname} combined 2")
300 defer(ethtool, f"-L {cfg.ifname} combined {qcnt}")
302 ethtool(f"-X {cfg.ifname} weight 1 7")
303 defer(ethtool, f"-X {cfg.ifname} default")
305 ethtool(f"-L {cfg.ifname} combined {ch_max}")
306 data = get_rss(cfg)
316 def test_hitless_key_update(cfg): argument
326 data = get_rss(cfg)
331 tgen = GenerateTraffic(cfg)
333 errors0, carrier0 = get_drop_err_sum(cfg)
335 ethtool(f"-X {cfg.ifname} hkey " + _rss_key_str(key))
337 errors1, carrier1 = get_drop_err_sum(cfg)
346 def test_rss_context_dump(cfg): argument
352 data = get_rss(cfg)
362 ids.append(ethtool_create(cfg, "-X", f"context new"))
363 defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete")
365 ids.append(ethtool_create(cfg, "-X", f"context new weight 1 1"))
366 defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete")
368 ids.append(ethtool_create(cfg, "-X", f"context new hkey {key}"))
369 defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete")
375 expect_tuples = set([(cfg.ifname, -1)] + [(cfg.ifname, ctx_id) for ctx_id in ids])
378 ctxs = cfg.ethnl.rss_get({}, dump=True)
381 ctx_tuples = set([ctx for ctx in tuples if ctx[0] == cfg.ifname])
397 ctxs = cfg.ethnl.rss_get({'header': {'dev-name': cfg.ifname}}, dump=True)
404 expect_tuples.remove((cfg.ifname, -1))
406 ctxs = cfg.ethnl.rss_get({'start-context': 1}, dump=True)
409 ctx_tuples = set([ctx for ctx in tuples if ctx[0] == cfg.ifname])
413 ctxs = cfg.ethnl.rss_get({'header': {'dev-name': cfg.ifname}, 'start-context': 1}, dump=True)
418 def test_rss_context(cfg, ctx_cnt=1, create_with_cfg=None): argument
426 require_ntuple(cfg)
431 qcnt = len(_get_rx_cnts(cfg))
435 ethtool(f"-L {cfg.ifname} combined {2 + 2 * ctx_cnt}")
436 defer(ethtool, f"-L {cfg.ifname} combined {qcnt}")
443 ethtool(f"-X {cfg.ifname} equal 2")
444 defer(ethtool, f"-X {cfg.ifname} default")
451 ctx_id = ethtool_create(cfg, "-X", f"context new {create_cfg}")
452 defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete")
461 _rss_key_check(cfg, context=ctx_id)
464 ethtool(f"-X {cfg.ifname} context {ctx_id} {want_cfg}")
465 _rss_key_check(cfg, context=ctx_id)
468 data = get_rss(cfg, ctx_id)
469 … ksft_eq(min(data['rss-indirection-table']), 2 + i * 2, "Unexpected context cfg: " + str(data))
470 … ksft_eq(max(data['rss-indirection-table']), 2 + i * 2 + 1, "Unexpected context cfg: " + str(data))
473 … flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {ports[i]} context {ctx_id}"
474 ntuple = ethtool_create(cfg, "-N", flow)
475 defer(ethtool, f"-N {cfg.ifname} delete {ntuple}")
477 _ntuple_rule_check(cfg, ntuple, ctx_id)
480 _send_traffic_check(cfg, ports[i], f"context {i}",
489 def test_rss_context4(cfg): argument
490 test_rss_context(cfg, 4)
493 def test_rss_context32(cfg): argument
494 test_rss_context(cfg, 32)
497 def test_rss_context4_create_with_cfg(cfg): argument
498 test_rss_context(cfg, 4, create_with_cfg=True)
501 def test_rss_context_queue_reconfigure(cfg): argument
502 test_rss_queue_reconfigure(cfg, main_ctx=False)
505 def test_rss_context_out_of_order(cfg, ctx_cnt=4): argument
513 require_ntuple(cfg)
518 qcnt = len(_get_rx_cnts(cfg))
522 ethtool(f"-L {cfg.ifname} combined {2 + 2 * ctx_cnt}")
523 defer(ethtool, f"-L {cfg.ifname} combined {qcnt}")
551 _send_traffic_check(cfg, ports[i], f"context {i}", expected)
554 ethtool(f"-X {cfg.ifname} equal 2")
555 defer(ethtool, f"-X {cfg.ifname} default")
558 ctx_id = ethtool_create(cfg, "-X", f"context new start {2 + i * 2} equal 2")
559 ctx.append(defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete"))
562 … flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {ports[i]} context {ctx_id}"
563 ntuple_id = ethtool_create(cfg, "-N", flow)
564 ntuple.append(defer(ethtool, f"-N {cfg.ifname} delete {ntuple_id}"))
584 def test_rss_context_overlap(cfg, other_ctx=0): argument
590 require_ntuple(cfg)
592 queue_cnt = len(_get_rx_cnts(cfg))
596 ethtool(f"-L {cfg.ifname} combined 4")
597 defer(ethtool, f"-L {cfg.ifname} combined {queue_cnt}")
602 ethtool(f"-X {cfg.ifname} equal 4")
603 defer(ethtool, f"-X {cfg.ifname} default")
605 other_ctx = ethtool_create(cfg, "-X", "context new")
606 ethtool(f"-X {cfg.ifname} context {other_ctx} equal 4")
607 defer(ethtool, f"-X {cfg.ifname} context {other_ctx} delete")
609 ctx_id = ethtool_create(cfg, "-X", "context new")
610 ethtool(f"-X {cfg.ifname} context {ctx_id} start 2 equal 2")
611 defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete")
615 … flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {other_ctx}"
616 ntuple_id = ethtool_create(cfg, "-N", flow)
617 ntuple = defer(ethtool, f"-N {cfg.ifname} delete {ntuple_id}")
620 cnts = _get_rx_cnts(cfg)
621 GenerateTraffic(cfg, port=port).wait_pkts_and_stop(20000)
622 cnts = _get_rx_cnts(cfg, prev=cnts)
633 flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id}"
634 ntuple_id = ethtool_create(cfg, "-N", flow)
635 defer(ethtool, f"-N {cfg.ifname} delete {ntuple_id}")
637 cnts = _get_rx_cnts(cfg)
638 GenerateTraffic(cfg, port=port).wait_pkts_and_stop(20000)
639 cnts = _get_rx_cnts(cfg, prev=cnts)
648 def test_rss_context_overlap2(cfg): argument
649 test_rss_context_overlap(cfg, True)
652 def test_delete_rss_context_busy(cfg): argument
658 require_ntuple(cfg)
661 ctx_id = ethtool_create(cfg, "-X", "context new")
662 ctx_deleter = defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete")
666 flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id}"
667 ntuple_id = ethtool_create(cfg, "-N", flow)
668 defer(ethtool, f"-N {cfg.ifname} delete {ntuple_id}")
679 def test_rss_ntuple_addition(cfg): argument
685 require_ntuple(cfg)
687 queue_cnt = len(_get_rx_cnts(cfg))
691 ethtool(f"-L {cfg.ifname} combined 4")
692 defer(ethtool, f"-L {cfg.ifname} combined {queue_cnt}")
697 ethtool(f"-X {cfg.ifname} equal 1")
698 defer(ethtool, f"-X {cfg.ifname} default")
701 ctx_id = ethtool_create(cfg, "-X", "context new equal 2")
702 defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete")
706 …flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id} action 2"
708 ntuple_id = ethtool_create(cfg, "-N", flow)
711 defer(ethtool, f"-N {cfg.ifname} delete {ntuple_id}")
713 _send_traffic_check(cfg, port, f"context {ctx_id}", { 'target': (2, 3),
719 with NetDrvEpEnv(__file__, nsim_test=False) as cfg:
720 cfg.ethnl = EthtoolFamily()
721 cfg.netdevnl = NetdevFamily()
730 args=(cfg, ))