Lines Matching full:cfg
45 def _probe_devmem(cfg, rx_page_size): argument
46 """Return True if ncdevmem can bind cfg.ifname at @rx_page_size."""
47 probe_command = f"{cfg.bin_local} -f {cfg.ifname}"
53 def require_devmem(cfg, rx_page_size=RX_PAGE_SIZE_DEFAULT): argument
54 """Probe ncdevmem on cfg.ifname and SKIP the test if devmem isn't supported."""
60 if not hasattr(cfg, "devmem_supported"):
64 cfg.devmem_supported = {size: _probe_devmem(cfg, size)
67 if not cfg.devmem_supported[RX_PAGE_SIZE_DEFAULT]:
77 if not cfg.devmem_supported[rx_page_size]:
82 def configure_nic(cfg): argument
84 if not hasattr(cfg, "devmem_supported"):
89 if not hasattr(cfg, 'netns'):
92 cfg.require_ipver('6')
95 channels = ethnl.channels_get({'header': {'dev-index': cfg.ifindex}})
102 rings = ethnl.rings_get({'header': {'dev-index': cfg.ifindex}})
106 ethnl.rings_set({'header': {'dev-index': cfg.ifindex},
110 defer(ethnl.rings_set, {'header': {'dev-index': cfg.ifindex},
115 cfg.src_queue = channels - 1
116 ethtool(f"-X {cfg.ifname} equal {cfg.src_queue}")
117 defer(ethtool, f"-X {cfg.ifname} default")
119 if not hasattr(cfg, 'nk_queue'):
120 with NetNSEnter(str(cfg.netns)):
123 "ifindex": cfg.nk_guest_ifindex,
126 "ifindex": cfg.ifindex,
127 "queue": {"id": cfg.src_queue, "type": "rx"},
131 cfg.nk_queue = lease_result['id']
134 def set_flow_rule(cfg, port): argument
137 f"-N {cfg.ifname} flow-type tcp6 dst-port {port}"
138 f" action {cfg.src_queue}"
143 def ncdevmem_rx(cfg, port, verify=True, fail_on_linear=False, flow_steer=False, argument
146 if hasattr(cfg, 'netns'):
147 flow_rule_id = set_flow_rule(cfg, port)
148 defer(ethtool, f"-N {cfg.ifname} delete {flow_rule_id}")
150 ifname = cfg.nk_guest_ifname
151 addr = cfg.nk_guest_ipv6
152 extras = [f"-t {cfg.nk_queue}", "-q 1", "-n"]
154 ifname = cfg.ifname
155 addr = cfg.addr
158 extras.append(f"-c {cfg.remote_addr}")
167 parts = [cfg.bin_local, "-l", f"-f {ifname}", f"-s {addr}",
172 def ncdevmem_tx(cfg, port, chunk_size=0): argument
174 if hasattr(cfg, 'netns'):
175 ifname = cfg.nk_guest_ifname
176 addr = cfg.remote_addr_v['6']
179 ifname = cfg.ifname
180 addr = cfg.remote_addr
186 parts = [cfg.bin_local, f"-f {ifname}", f"-s {addr}",
191 def socat_send(cfg, port, buf_size=0): argument
197 proto = f"TCP{cfg.addr_ipver}"
199 if hasattr(cfg, 'netns'):
200 addr = f"[{cfg.nk_guest_ipv6}]"
202 addr = cfg.baddr
204 suffix = f",bind={cfg.remote_baddr}:{port}"
214 def socat_listen(cfg, port): argument
216 return f"socat -U - TCP{cfg.addr_ipver}-LISTEN:{port}"
219 def setup_test(cfg, bin_local): argument
220 """Stash the local ncdevmem path on cfg and deploy it to the remote."""
221 cfg.bin_local = bin_local
222 cfg.bin_remote = cfg.remote.deploy(cfg.bin_local)
225 def run_rx(cfg): argument
227 require_devmem(cfg)
228 configure_nic(cfg)
230 socat = socat_send(cfg, port)
233 netns = getattr(cfg, "netns", None)
235 listen_cmd = ncdevmem_rx(cfg, port, flow_steer=not hasattr(cfg, 'netns'))
238 cmd(data_pipe, host=cfg.remote, shell=True)
242 def run_tx(cfg): argument
244 require_devmem(cfg)
245 configure_nic(cfg)
246 netns = getattr(cfg, "netns", None)
248 tx_cmd = ncdevmem_tx(cfg, port)
249 listen_cmd = socat_listen(cfg, port)
251 with bkg(listen_cmd, host=cfg.remote, exit_wait=True) as socat:
252 wait_port_listen(port, host=cfg.remote)
257 def run_tx_chunks(cfg): argument
259 require_devmem(cfg)
260 configure_nic(cfg)
261 netns = getattr(cfg, "netns", None)
263 tx_cmd = ncdevmem_tx(cfg, port, chunk_size=3)
264 listen_cmd = socat_listen(cfg, port)
266 with bkg(listen_cmd, host=cfg.remote, exit_wait=True) as socat:
267 wait_port_listen(port, host=cfg.remote)
272 def run_rx_large_niov(cfg): argument
279 require_devmem(cfg, rx_page_size=RX_PAGE_SIZE_16K)
281 configure_nic(cfg)
282 netns = getattr(cfg, "netns", None)
286 socat = socat_send(cfg, port)
287 listen_cmd = ncdevmem_rx(cfg, port,
294 cmd(data_pipe, host=cfg.remote, shell=True)
299 def run_rx_hds(cfg): argument
301 require_devmem(cfg)
302 configure_nic(cfg)
303 netns = getattr(cfg, "netns", None)
308 listen_cmd = ncdevmem_rx(cfg, port, verify=False,
310 socat = socat_send(cfg, port, buf_size=size)
315 f"{socat}", host=cfg.remote, shell=True)