Lines Matching full:context

24 def _rss_key_check(cfg, data=None, context=0):  argument
26 data = get_rss(cfg, context=context)
33 def get_rss(cfg, context=0): argument
34 return ethtool(f"-x {cfg.ifname} context {context}", json=True)[0]
49 # Output will be something like: "New RSS context is 1" or
63 # There's no good API to get the context count, so the tests
90 # used for queues of the main context, since some background
110 """Check that ntuple rule references RSS context ID"""
112 pattern = f"RSS Context (ID: )?{ctx_id}"
113 ksft_true(re.search(pattern, text), "RSS context not referenced in ntuple rule")
170 ksft_ge(cnts[0], 5000, "traffic on main context (1/2): " + str(cnts))
171 ksft_ge(cnts[1], 5000, "traffic on main context (2/2): " + str(cnts))
209 ctx_id = ethtool_create(cfg, "-X", "context new")
210 ctx_ref = f"context {ctx_id}"
214 data = get_rss(cfg, context=ctx_id)
235 flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id}"
244 data = get_rss(cfg, context=ctx_id)
256 … raise Exception(f"Driver didn't prevent us from deactivating a used queue (context {ctx_id})")
260 …flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id} action 1"
268 … raise Exception(f"Driver didn't prevent us from targeting a nonexistent queue (context {ctx_id})")
289 … raise Exception(f"Driver didn't prevent us from deactivating a used queue (context {ctx_id})")
371 ids.append(ethtool_create(cfg, "-X", f"context new"))
372 defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete")
374 ids.append(ethtool_create(cfg, "-X", f"context new weight 1 1"))
375 defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete")
377 ids.append(ethtool_create(cfg, "-X", f"context new hkey {key}"))
378 defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete")
388 tuples = [(c['header']['dev-name'], c.get('context', -1)) for c in ctxs]
389 ksft_eq(len(tuples), len(set(tuples)), "duplicates in context dump")
399 if len(ids) > 1 and data.get('context') == ids[1]:
402 if len(ids) > 2 and data.get('context') == ids[2]:
407 tuples = [(c['header']['dev-name'], c.get('context', -1)) for c in ctxs]
409 ksft_eq(len(tuples), len(ctx_tuples), "duplicates in context dump")
415 ctxs = cfg.ethnl.rss_get({'start-context': 1}, dump=True)
416 tuples = [(c['header']['dev-name'], c.get('context', -1)) for c in ctxs]
417 ksft_eq(len(tuples), len(set(tuples)), "duplicates in context dump")
422 ctxs = cfg.ethnl.rss_get({'header': {'dev-name': cfg.ifname}, 'start-context': 1}, dump=True)
423 ctx_tuples = set([(c['header']['dev-name'], c.get('context', -1)) for c in ctxs])
430 The queues will be allocated 2 for each context:
460 ctx_id = ethtool_create(cfg, "-X", f"context new {create_cfg}")
461 defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete")
466 ksft_pr(f"Failed to create context {i + 1}, trying to test what we got")
472 _rss_key_check(cfg, context=ctx_id)
475 ethtool(f"-X {cfg.ifname} context {ctx_id} {want_cfg}")
476 _rss_key_check(cfg, context=ctx_id)
478 # Sanity check the context we just created
480 … ksft_eq(min(data['rss-indirection-table']), 2 + i * 2, "Unexpected context cfg: " + str(data))
481 … ksft_eq(max(data['rss-indirection-table']), 2 + i * 2 + 1, "Unexpected context cfg: " + str(data))
484 … flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {ports[i]} context {ctx_id}"
491 _send_traffic_check(cfg, ports[i], f"context {i}",
561 _send_traffic_check(cfg, ports[i], f"context {i}", expected)
568 ctx_id = ethtool_create(cfg, "-X", f"context new start {2 + i * 2} equal 2")
569 ctx.append(defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete"))
572 … flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {ports[i]} context {ctx_id}"
578 # Remove middle context
582 # Remove first context
586 # Remove last context
594 Use 4 queues for the main context, but only queues 2 and 3 for context 1.
614 other_ctx = ethtool_create(cfg, "-X", "context new")
615 ethtool(f"-X {cfg.ifname} context {other_ctx} equal 4")
616 defer(ethtool, f"-X {cfg.ifname} context {other_ctx} delete")
618 ctx_id = ethtool_create(cfg, "-X", "context new")
619 ethtool(f"-X {cfg.ifname} context {ctx_id} start 2 equal 2")
620 defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete")
624 … flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {other_ctx}"
628 # Test the main context
633 ksft_ge(sum(cnts[ :4]), 20000, "traffic on main context: " + str(cnts))
634 ksft_ge(sum(cnts[ :2]), 7000, "traffic on main context (1/2): " + str(cnts))
635 ksft_ge(sum(cnts[2:4]), 7000, "traffic on main context (2/2): " + str(cnts))
639 # Now create a rule for context 1 and make sure traffic goes to a subset
642 flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id}"
651 ksft_lt(sum(cnts[ :2]), directed / 2, "traffic on main context: " + str(cnts))
652 ksft_ge(directed, 20000, "traffic on extra context: " + str(cnts))
663 Test that we are not allowed to add a rule pointing to an RSS context
669 # Find a context which doesn't exist
672 get_rss(cfg, context=ctx_id)
677 flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port 1234 context {ctx_id}"
686 Test that deletion returns -EBUSY when an rss context is being used
692 # create additional rss context
693 ctx_id = ethtool_create(cfg, "-X", "context new")
694 ctx_deleter = defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete")
696 # utilize context from ntuple filter
698 flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id}"
702 # attempt to delete in-use context
706 raise KsftFailEx(f"deleted context {ctx_id} used by rule {ntuple_id}")
732 # create additional rss context
733 ctx_id = ethtool_create(cfg, "-X", "context new equal 2")
734 defer(ethtool, f"-X {cfg.ifname} context {ctx_id} delete")
736 # utilize context from ntuple filter
738 …flow = f"flow-type tcp{cfg.addr_ipver} dst-ip {cfg.addr} dst-port {port} context {ctx_id} action 2"
745 _send_traffic_check(cfg, port, f"context {ctx_id}", { 'target': (2, 3),