hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/tools/testing/selftests/bpf/test_offload.py
....@@ -1,6 +1,7 @@
11 #!/usr/bin/env python3
22
33 # Copyright (C) 2017 Netronome Systems, Inc.
4
+# Copyright (c) 2019 Mellanox Technologies. All rights reserved
45 #
56 # This software is licensed under the GNU General License Version 2,
67 # June 1991 as shown in the file COPYING in the top-level directory of this
....@@ -15,14 +16,18 @@
1516
1617 from datetime import datetime
1718 import argparse
19
+import errno
1820 import json
1921 import os
2022 import pprint
2123 import random
24
+import re
25
+import stat
2226 import string
2327 import struct
2428 import subprocess
2529 import time
30
+import traceback
2631
2732 logfile = None
2833 log_level = 1
....@@ -78,7 +83,9 @@
7883 if not cond:
7984 return
8085 print("FAIL: " + msg)
81
- log("FAIL: " + msg, "", level=1)
86
+ tb = "".join(traceback.extract_stack().format())
87
+ print(tb)
88
+ log("FAIL: " + msg, tb, level=1)
8289 os.sys.exit(1)
8390
8491 def start_test(msg):
....@@ -177,9 +184,7 @@
177184 def bpftool_map_list(expected=None, ns=""):
178185 _, maps = bpftool("map show", JSON=True, ns=ns, fail=True)
179186 # Remove the base maps
180
- for m in base_maps:
181
- if m in maps:
182
- maps.remove(m)
187
+ maps = [m for m in maps if m not in base_maps and m.get('name') not in base_map_names]
183188 if expected is not None:
184189 if len(maps) != expected:
185190 fail(True, "%d BPF maps loaded, expected %d" %
....@@ -303,8 +308,17 @@
303308
304309 _, out = cmd('ls ' + path)
305310 for f in out.split():
311
+ if f == "ports":
312
+ continue
313
+
306314 p = os.path.join(path, f)
315
+ if not os.stat(p).st_mode & stat.S_IRUSR:
316
+ continue
317
+
307318 if os.path.isfile(p):
319
+ # We need to init trap_flow_action_cookie before read it
320
+ if f == "trap_flow_action_cookie":
321
+ cmd('echo deadbeef > %s/%s' % (path, f))
308322 _, out = cmd('cat %s/%s' % (path, f))
309323 dfs[f] = out.strip()
310324 elif os.path.isdir(p):
....@@ -318,42 +332,120 @@
318332
319333 return dfs
320334
335
+class NetdevSimDev:
336
+ """
337
+ Class for netdevsim bus device and its attributes.
338
+ """
339
+ @staticmethod
340
+ def ctrl_write(path, val):
341
+ fullpath = os.path.join("/sys/bus/netdevsim/", path)
342
+ try:
343
+ with open(fullpath, "w") as f:
344
+ f.write(val)
345
+ except OSError as e:
346
+ log("WRITE %s: %r" % (fullpath, val), -e.errno)
347
+ raise e
348
+ log("WRITE %s: %r" % (fullpath, val), 0)
349
+
350
+ def __init__(self, port_count=1):
351
+ addr = 0
352
+ while True:
353
+ try:
354
+ self.ctrl_write("new_device", "%u %u" % (addr, port_count))
355
+ except OSError as e:
356
+ if e.errno == errno.ENOSPC:
357
+ addr += 1
358
+ continue
359
+ raise e
360
+ break
361
+ self.addr = addr
362
+
363
+ # As probe of netdevsim device might happen from a workqueue,
364
+ # so wait here until all netdevs appear.
365
+ self.wait_for_netdevs(port_count)
366
+
367
+ ret, out = cmd("udevadm settle", fail=False)
368
+ if ret:
369
+ raise Exception("udevadm settle failed")
370
+ ifnames = self.get_ifnames()
371
+
372
+ devs.append(self)
373
+ self.dfs_dir = "/sys/kernel/debug/netdevsim/netdevsim%u/" % addr
374
+
375
+ self.nsims = []
376
+ for port_index in range(port_count):
377
+ self.nsims.append(NetdevSim(self, port_index, ifnames[port_index]))
378
+
379
+ def get_ifnames(self):
380
+ ifnames = []
381
+ listdir = os.listdir("/sys/bus/netdevsim/devices/netdevsim%u/net/" % self.addr)
382
+ for ifname in listdir:
383
+ ifnames.append(ifname)
384
+ ifnames.sort()
385
+ return ifnames
386
+
387
+ def wait_for_netdevs(self, port_count):
388
+ timeout = 5
389
+ timeout_start = time.time()
390
+
391
+ while True:
392
+ try:
393
+ ifnames = self.get_ifnames()
394
+ except FileNotFoundError as e:
395
+ ifnames = []
396
+ if len(ifnames) == port_count:
397
+ break
398
+ if time.time() < timeout_start + timeout:
399
+ continue
400
+ raise Exception("netdevices did not appear within timeout")
401
+
402
+ def dfs_num_bound_progs(self):
403
+ path = os.path.join(self.dfs_dir, "bpf_bound_progs")
404
+ _, progs = cmd('ls %s' % (path))
405
+ return len(progs.split())
406
+
407
+ def dfs_get_bound_progs(self, expected):
408
+ progs = DebugfsDir(os.path.join(self.dfs_dir, "bpf_bound_progs"))
409
+ if expected is not None:
410
+ if len(progs) != expected:
411
+ fail(True, "%d BPF programs bound, expected %d" %
412
+ (len(progs), expected))
413
+ return progs
414
+
415
+ def remove(self):
416
+ self.ctrl_write("del_device", "%u" % (self.addr, ))
417
+ devs.remove(self)
418
+
419
+ def remove_nsim(self, nsim):
420
+ self.nsims.remove(nsim)
421
+ self.ctrl_write("devices/netdevsim%u/del_port" % (self.addr, ),
422
+ "%u" % (nsim.port_index, ))
423
+
321424 class NetdevSim:
322425 """
323426 Class for netdevsim netdevice and its attributes.
324427 """
325428
326
- def __init__(self, link=None):
327
- self.link = link
429
+ def __init__(self, nsimdev, port_index, ifname):
430
+ # In case udev renamed the netdev to according to new schema,
431
+ # check if the name matches the port_index.
432
+ nsimnamere = re.compile("eni\d+np(\d+)")
433
+ match = nsimnamere.match(ifname)
434
+ if match and int(match.groups()[0]) != port_index + 1:
435
+ raise Exception("netdevice name mismatches the expected one")
328436
329
- self.dev = self._netdevsim_create()
330
- devs.append(self)
331
-
437
+ self.nsimdev = nsimdev
438
+ self.port_index = port_index
332439 self.ns = ""
333
-
334
- self.dfs_dir = '/sys/kernel/debug/netdevsim/%s' % (self.dev['ifname'])
335
- self.sdev_dir = self.dfs_dir + '/sdev/'
440
+ self.dfs_dir = "%s/ports/%u/" % (nsimdev.dfs_dir, port_index)
336441 self.dfs_refresh()
442
+ _, [self.dev] = ip("link show dev %s" % ifname)
337443
338444 def __getitem__(self, key):
339445 return self.dev[key]
340446
341
- def _netdevsim_create(self):
342
- link = "" if self.link is None else "link " + self.link.dev['ifname']
343
- _, old = ip("link show")
344
- ip("link add sim%d {link} type netdevsim".format(link=link))
345
- _, new = ip("link show")
346
-
347
- for dev in new:
348
- f = filter(lambda x: x["ifname"] == dev["ifname"], old)
349
- if len(list(f)) == 0:
350
- return dev
351
-
352
- raise Exception("failed to create netdevsim device")
353
-
354447 def remove(self):
355
- devs.remove(self)
356
- ip("link del dev %s" % (self.dev["ifname"]), ns=self.ns)
448
+ self.nsimdev.remove_nsim(self)
357449
358450 def dfs_refresh(self):
359451 self.dfs = DebugfsDir(self.dfs_dir)
....@@ -364,22 +456,9 @@
364456 _, data = cmd('cat %s' % (path))
365457 return data.strip()
366458
367
- def dfs_num_bound_progs(self):
368
- path = os.path.join(self.sdev_dir, "bpf_bound_progs")
369
- _, progs = cmd('ls %s' % (path))
370
- return len(progs.split())
371
-
372
- def dfs_get_bound_progs(self, expected):
373
- progs = DebugfsDir(os.path.join(self.sdev_dir, "bpf_bound_progs"))
374
- if expected is not None:
375
- if len(progs) != expected:
376
- fail(True, "%d BPF programs bound, expected %d" %
377
- (len(progs), expected))
378
- return progs
379
-
380459 def wait_for_flush(self, bound=0, total=0, n_retry=20):
381460 for i in range(n_retry):
382
- nbound = self.dfs_num_bound_progs()
461
+ nbound = self.nsimdev.dfs_num_bound_progs()
383462 nprogs = len(bpftool_prog_list())
384463 if nbound == bound and nprogs == total:
385464 return
....@@ -589,6 +668,15 @@
589668 return
590669 fail(True, "Missing or incorrect message from netdevsim in verifier log")
591670
671
+def check_multi_basic(two_xdps):
672
+ fail(two_xdps["mode"] != 4, "Bad mode reported with multiple programs")
673
+ fail("prog" in two_xdps, "Base program reported in multi program mode")
674
+ fail(len(two_xdps["attached"]) != 2,
675
+ "Wrong attached program count with two programs")
676
+ fail(two_xdps["attached"][0]["prog"]["id"] ==
677
+ two_xdps["attached"][1]["prog"]["id"],
678
+ "Offloaded and other programs have the same id")
679
+
592680 def test_spurios_extack(sim, obj, skip_hw, needle):
593681 res = sim.cls_bpf_add_filter(obj, prio=1, handle=1, skip_hw=skip_hw,
594682 include_stderr=True)
....@@ -600,6 +688,66 @@
600688 include_stderr=True)
601689 check_no_extack(res, needle)
602690
691
+def test_multi_prog(simdev, sim, obj, modename, modeid):
692
+ start_test("Test multi-attachment XDP - %s + offload..." %
693
+ (modename or "default", ))
694
+ sim.set_xdp(obj, "offload")
695
+ xdp = sim.ip_link_show(xdp=True)["xdp"]
696
+ offloaded = sim.dfs_read("bpf_offloaded_id")
697
+ fail("prog" not in xdp, "Base program not reported in single program mode")
698
+ fail(len(xdp["attached"]) != 1,
699
+ "Wrong attached program count with one program")
700
+
701
+ sim.set_xdp(obj, modename)
702
+ two_xdps = sim.ip_link_show(xdp=True)["xdp"]
703
+
704
+ fail(xdp["attached"][0] not in two_xdps["attached"],
705
+ "Offload program not reported after other activated")
706
+ check_multi_basic(two_xdps)
707
+
708
+ offloaded2 = sim.dfs_read("bpf_offloaded_id")
709
+ fail(offloaded != offloaded2,
710
+ "Offload ID changed after loading other program")
711
+
712
+ start_test("Test multi-attachment XDP - replace...")
713
+ ret, _, err = sim.set_xdp(obj, "offload", fail=False, include_stderr=True)
714
+ fail(ret == 0, "Replaced one of programs without -force")
715
+ check_extack(err, "XDP program already attached.", args)
716
+
717
+ start_test("Test multi-attachment XDP - remove without mode...")
718
+ ret, _, err = sim.unset_xdp("", force=True,
719
+ fail=False, include_stderr=True)
720
+ fail(ret == 0, "Removed program without a mode flag")
721
+ check_extack(err, "More than one program loaded, unset mode is ambiguous.", args)
722
+
723
+ sim.unset_xdp("offload")
724
+ xdp = sim.ip_link_show(xdp=True)["xdp"]
725
+ offloaded = sim.dfs_read("bpf_offloaded_id")
726
+
727
+ fail(xdp["mode"] != modeid, "Bad mode reported after multiple programs")
728
+ fail("prog" not in xdp,
729
+ "Base program not reported after multi program mode")
730
+ fail(xdp["attached"][0] not in two_xdps["attached"],
731
+ "Offload program not reported after other activated")
732
+ fail(len(xdp["attached"]) != 1,
733
+ "Wrong attached program count with remaining programs")
734
+ fail(offloaded != "0", "Offload ID reported with only other program left")
735
+
736
+ start_test("Test multi-attachment XDP - reattach...")
737
+ sim.set_xdp(obj, "offload")
738
+ two_xdps = sim.ip_link_show(xdp=True)["xdp"]
739
+
740
+ fail(xdp["attached"][0] not in two_xdps["attached"],
741
+ "Other program not reported after offload activated")
742
+ check_multi_basic(two_xdps)
743
+
744
+ start_test("Test multi-attachment XDP - device remove...")
745
+ simdev.remove()
746
+
747
+ simdev = NetdevSimDev()
748
+ sim, = simdev.nsims
749
+ sim.set_ethtool_tc_offloads(True)
750
+ return [simdev, sim]
603751
604752 # Parse command line
605753 parser = argparse.ArgumentParser()
....@@ -620,6 +768,9 @@
620768 skip(ret != 0, "bpftool not installed")
621769 base_progs = progs
622770 _, base_maps = bpftool("map")
771
+base_map_names = [
772
+ 'pid_iter.rodata' # created on each bpftool invocation
773
+]
623774
624775 # Check netdevsim
625776 ret, out = cmd("modprobe netdevsim", fail=False)
....@@ -656,12 +807,14 @@
656807 bytecode = bpf_bytecode("1,6 0 0 4294967295,")
657808
658809 start_test("Test destruction of generic XDP...")
659
- sim = NetdevSim()
810
+ simdev = NetdevSimDev()
811
+ sim, = simdev.nsims
660812 sim.set_xdp(obj, "generic")
661
- sim.remove()
813
+ simdev.remove()
662814 bpftool_prog_list_wait(expected=0)
663815
664
- sim = NetdevSim()
816
+ simdev = NetdevSimDev()
817
+ sim, = simdev.nsims
665818 sim.tc_add_ingress()
666819
667820 start_test("Test TC non-offloaded...")
....@@ -671,7 +824,7 @@
671824 start_test("Test TC non-offloaded isn't getting bound...")
672825 ret, _ = sim.cls_bpf_add_filter(obj, fail=False)
673826 fail(ret != 0, "Software TC filter did not load")
674
- sim.dfs_get_bound_progs(expected=0)
827
+ simdev.dfs_get_bound_progs(expected=0)
675828
676829 sim.tc_flush_filters()
677830
....@@ -688,7 +841,7 @@
688841 start_test("Test TC offload by default...")
689842 ret, _ = sim.cls_bpf_add_filter(obj, fail=False)
690843 fail(ret != 0, "Software TC filter did not load")
691
- sim.dfs_get_bound_progs(expected=0)
844
+ simdev.dfs_get_bound_progs(expected=0)
692845 ingress = sim.tc_show_ingress(expected=1)
693846 fltr = ingress[0]
694847 fail(not fltr["in_hw"], "Filter not offloaded by default")
....@@ -698,7 +851,7 @@
698851 start_test("Test TC cBPF bytcode tries offload by default...")
699852 ret, _ = sim.cls_bpf_add_filter(bytecode, fail=False)
700853 fail(ret != 0, "Software TC filter did not load")
701
- sim.dfs_get_bound_progs(expected=0)
854
+ simdev.dfs_get_bound_progs(expected=0)
702855 ingress = sim.tc_show_ingress(expected=1)
703856 fltr = ingress[0]
704857 fail(not fltr["in_hw"], "Bytecode not offloaded by default")
....@@ -759,14 +912,21 @@
759912
760913 sim.tc_flush_filters()
761914
915
+ start_test("Test TC offloads failure...")
916
+ sim.dfs["dev/bpf_bind_verifier_accept"] = 0
917
+ ret, _, err = sim.cls_bpf_add_filter(obj, verbose=True, skip_sw=True,
918
+ fail=False, include_stderr=True)
919
+ fail(ret == 0, "TC filter did not reject with TC offloads enabled")
920
+ check_verifier_log(err, "[netdevsim] Hello from netdevsim!")
921
+ sim.dfs["dev/bpf_bind_verifier_accept"] = 1
922
+
762923 start_test("Test TC offloads work...")
763924 ret, _, err = sim.cls_bpf_add_filter(obj, verbose=True, skip_sw=True,
764925 fail=False, include_stderr=True)
765926 fail(ret != 0, "TC filter did not load with TC offloads enabled")
766
- check_verifier_log(err, "[netdevsim] Hello from netdevsim!")
767927
768928 start_test("Test TC offload basics...")
769
- dfs = sim.dfs_get_bound_progs(expected=1)
929
+ dfs = simdev.dfs_get_bound_progs(expected=1)
770930 progs = bpftool_prog_list(expected=1)
771931 ingress = sim.tc_show_ingress(expected=1)
772932
....@@ -802,18 +962,20 @@
802962
803963 start_test("Test destroying device gets rid of TC filters...")
804964 sim.cls_bpf_add_filter(obj, skip_sw=True)
805
- sim.remove()
965
+ simdev.remove()
806966 bpftool_prog_list_wait(expected=0)
807967
808
- sim = NetdevSim()
968
+ simdev = NetdevSimDev()
969
+ sim, = simdev.nsims
809970 sim.set_ethtool_tc_offloads(True)
810971
811972 start_test("Test destroying device gets rid of XDP...")
812973 sim.set_xdp(obj, "offload")
813
- sim.remove()
974
+ simdev.remove()
814975 bpftool_prog_list_wait(expected=0)
815976
816
- sim = NetdevSim()
977
+ simdev = NetdevSimDev()
978
+ sim, = simdev.nsims
817979 sim.set_ethtool_tc_offloads(True)
818980
819981 start_test("Test XDP prog reporting...")
....@@ -843,17 +1005,9 @@
8431005 ret, _, err = sim.set_xdp(obj, "generic", force=True,
8441006 fail=False, include_stderr=True)
8451007 fail(ret == 0, "Replaced XDP program with a program in different mode")
846
- fail(err.count("File exists") != 1, "Replaced driver XDP with generic")
847
- ret, _, err = sim.set_xdp(obj, "", force=True,
848
- fail=False, include_stderr=True)
849
- fail(ret == 0, "Replaced XDP program with a program in different mode")
850
- check_extack(err, "program loaded with different flags.", args)
851
-
852
- start_test("Test XDP prog remove with bad flags...")
853
- ret, _, err = sim.unset_xdp("", force=True,
854
- fail=False, include_stderr=True)
855
- fail(ret == 0, "Removed program with a bad mode")
856
- check_extack(err, "program loaded with different flags.", args)
1008
+ check_extack(err,
1009
+ "Native and generic XDP can't be active at the same time.",
1010
+ args)
8571011
8581012 start_test("Test MTU restrictions...")
8591013 ret, _ = sim.set_mtu(9000, fail=False)
....@@ -883,8 +1037,17 @@
8831037 offload = bpf_pinned("/sys/fs/bpf/offload")
8841038 ret, _, err = sim.set_xdp(offload, "drv", fail=False, include_stderr=True)
8851039 fail(ret == 0, "attached offloaded XDP program to drv")
886
- check_extack(err, "using device-bound program without HW_MODE flag is not supported.", args)
1040
+ check_extack(err, "Using device-bound program without HW_MODE flag is not supported.", args)
8871041 rm("/sys/fs/bpf/offload")
1042
+ sim.wait_for_flush()
1043
+
1044
+ start_test("Test XDP load failure...")
1045
+ sim.dfs["dev/bpf_bind_verifier_accept"] = 0
1046
+ ret, _, err = bpftool_prog_load("sample_ret0.o", "/sys/fs/bpf/offload",
1047
+ dev=sim['ifname'], fail=False, include_stderr=True)
1048
+ fail(ret == 0, "verifier should fail on load")
1049
+ check_verifier_log(err, "[netdevsim] Hello from netdevsim!")
1050
+ sim.dfs["dev/bpf_bind_verifier_accept"] = 1
8881051 sim.wait_for_flush()
8891052
8901053 start_test("Test XDP offload...")
....@@ -894,10 +1057,9 @@
8941057 progs = bpftool_prog_list(expected=1)
8951058 prog = progs[0]
8961059 fail(link_xdp["id"] != prog["id"], "Loaded program has wrong ID")
897
- check_verifier_log(err, "[netdevsim] Hello from netdevsim!")
8981060
8991061 start_test("Test XDP offload is device bound...")
900
- dfs = sim.dfs_get_bound_progs(expected=1)
1062
+ dfs = simdev.dfs_get_bound_progs(expected=1)
9011063 dprog = dfs[0]
9021064
9031065 fail(prog["id"] != link_xdp["id"], "Program IDs don't match")
....@@ -916,7 +1078,8 @@
9161078 bpftool_prog_list_wait(expected=0)
9171079
9181080 start_test("Test attempt to use a program for a wrong device...")
919
- sim2 = NetdevSim()
1081
+ simdev2 = NetdevSimDev()
1082
+ sim2, = simdev2.nsims
9201083 sim2.set_xdp(obj, "offload")
9211084 pin_file, pinned = pin_prog("/sys/fs/bpf/tmp")
9221085
....@@ -924,7 +1087,7 @@
9241087 fail=False, include_stderr=True)
9251088 fail(ret == 0, "Pinned program loaded for a different device accepted")
9261089 check_extack_nsim(err, "program bound to different dev.", args)
927
- sim2.remove()
1090
+ simdev2.remove()
9281091 ret, _, err = sim.set_xdp(pinned, "offload",
9291092 fail=False, include_stderr=True)
9301093 fail(ret == 0, "Pinned program loaded for a removed device accepted")
....@@ -932,59 +1095,9 @@
9321095 rm(pin_file)
9331096 bpftool_prog_list_wait(expected=0)
9341097
935
- start_test("Test multi-attachment XDP - attach...")
936
- sim.set_xdp(obj, "offload")
937
- xdp = sim.ip_link_show(xdp=True)["xdp"]
938
- offloaded = sim.dfs_read("bpf_offloaded_id")
939
- fail("prog" not in xdp, "Base program not reported in single program mode")
940
- fail(len(ipl["xdp"]["attached"]) != 1,
941
- "Wrong attached program count with one program")
942
-
943
- sim.set_xdp(obj, "")
944
- two_xdps = sim.ip_link_show(xdp=True)["xdp"]
945
- offloaded2 = sim.dfs_read("bpf_offloaded_id")
946
-
947
- fail(two_xdps["mode"] != 4, "Bad mode reported with multiple programs")
948
- fail("prog" in two_xdps, "Base program reported in multi program mode")
949
- fail(xdp["attached"][0] not in two_xdps["attached"],
950
- "Offload program not reported after driver activated")
951
- fail(len(two_xdps["attached"]) != 2,
952
- "Wrong attached program count with two programs")
953
- fail(two_xdps["attached"][0]["prog"]["id"] ==
954
- two_xdps["attached"][1]["prog"]["id"],
955
- "offloaded and drv programs have the same id")
956
- fail(offloaded != offloaded2,
957
- "offload ID changed after loading driver program")
958
-
959
- start_test("Test multi-attachment XDP - replace...")
960
- ret, _, err = sim.set_xdp(obj, "offload", fail=False, include_stderr=True)
961
- fail(err.count("busy") != 1, "Replaced one of programs without -force")
962
-
963
- start_test("Test multi-attachment XDP - detach...")
964
- ret, _, err = sim.unset_xdp("drv", force=True,
965
- fail=False, include_stderr=True)
966
- fail(ret == 0, "Removed program with a bad mode")
967
- check_extack(err, "program loaded with different flags.", args)
968
-
969
- sim.unset_xdp("offload")
970
- xdp = sim.ip_link_show(xdp=True)["xdp"]
971
- offloaded = sim.dfs_read("bpf_offloaded_id")
972
-
973
- fail(xdp["mode"] != 1, "Bad mode reported after multiple programs")
974
- fail("prog" not in xdp,
975
- "Base program not reported after multi program mode")
976
- fail(xdp["attached"][0] not in two_xdps["attached"],
977
- "Offload program not reported after driver activated")
978
- fail(len(ipl["xdp"]["attached"]) != 1,
979
- "Wrong attached program count with remaining programs")
980
- fail(offloaded != "0", "offload ID reported with only driver program left")
981
-
982
- start_test("Test multi-attachment XDP - device remove...")
983
- sim.set_xdp(obj, "offload")
984
- sim.remove()
985
-
986
- sim = NetdevSim()
987
- sim.set_ethtool_tc_offloads(True)
1098
+ simdev, sim = test_multi_prog(simdev, sim, obj, "", 1)
1099
+ simdev, sim = test_multi_prog(simdev, sim, obj, "drv", 1)
1100
+ simdev, sim = test_multi_prog(simdev, sim, obj, "generic", 2)
9881101
9891102 start_test("Test mixing of TC and XDP...")
9901103 sim.tc_add_ingress()
....@@ -1031,15 +1144,15 @@
10311144
10321145 start_test("Test if netdev removal waits for translation...")
10331146 delay_msec = 500
1034
- sim.dfs["bpf_bind_verifier_delay"] = delay_msec
1147
+ sim.dfs["dev/bpf_bind_verifier_delay"] = delay_msec
10351148 start = time.time()
10361149 cmd_line = "tc filter add dev %s ingress bpf %s da skip_sw" % \
10371150 (sim['ifname'], obj)
10381151 tc_proc = cmd(cmd_line, background=True, fail=False)
10391152 # Wait for the verifier to start
1040
- while sim.dfs_num_bound_progs() <= 2:
1153
+ while simdev.dfs_num_bound_progs() <= 2:
10411154 pass
1042
- sim.remove()
1155
+ simdev.remove()
10431156 end = time.time()
10441157 ret, _ = cmd_result(tc_proc, fail=False)
10451158 time_diff = end - start
....@@ -1054,7 +1167,8 @@
10541167 clean_up()
10551168 bpftool_prog_list_wait(expected=0)
10561169
1057
- sim = NetdevSim()
1170
+ simdev = NetdevSimDev()
1171
+ sim, = simdev.nsims
10581172 map_obj = bpf_obj("sample_map_ret0.o")
10591173 start_test("Test loading program with maps...")
10601174 sim.set_xdp(map_obj, "offload", JSON=False) # map fixup msg breaks JSON
....@@ -1076,7 +1190,7 @@
10761190
10771191 prog_file, _ = pin_prog("/sys/fs/bpf/tmp_prog")
10781192 map_file, _ = pin_map("/sys/fs/bpf/tmp_map", idx=1, expected=2)
1079
- sim.remove()
1193
+ simdev.remove()
10801194
10811195 start_test("Test bpftool bound info reporting (removed dev)...")
10821196 check_dev_info_removed(prog_file=prog_file, map_file=map_file)
....@@ -1085,7 +1199,8 @@
10851199 clean_up()
10861200 bpftool_prog_list_wait(expected=0)
10871201
1088
- sim = NetdevSim()
1202
+ simdev = NetdevSimDev()
1203
+ sim, = simdev.nsims
10891204
10901205 start_test("Test map update (no flags)...")
10911206 sim.set_xdp(map_obj, "offload", JSON=False) # map fixup msg breaks JSON
....@@ -1166,27 +1281,29 @@
11661281 start_test("Test map remove...")
11671282 sim.unset_xdp("offload")
11681283 bpftool_map_list_wait(expected=0)
1169
- sim.remove()
1284
+ simdev.remove()
11701285
1171
- sim = NetdevSim()
1286
+ simdev = NetdevSimDev()
1287
+ sim, = simdev.nsims
11721288 sim.set_xdp(map_obj, "offload", JSON=False) # map fixup msg breaks JSON
1173
- sim.remove()
1289
+ simdev.remove()
11741290 bpftool_map_list_wait(expected=0)
11751291
11761292 start_test("Test map creation fail path...")
1177
- sim = NetdevSim()
1293
+ simdev = NetdevSimDev()
1294
+ sim, = simdev.nsims
11781295 sim.dfs["bpf_map_accept"] = "N"
11791296 ret, _ = sim.set_xdp(map_obj, "offload", JSON=False, fail=False)
11801297 fail(ret == 0,
11811298 "netdevsim didn't refuse to create a map with offload disabled")
11821299
1183
- sim.remove()
1300
+ simdev.remove()
11841301
11851302 start_test("Test multi-dev ASIC program reuse...")
1186
- simA = NetdevSim()
1187
- simB1 = NetdevSim()
1188
- simB2 = NetdevSim(link=simB1)
1189
- simB3 = NetdevSim(link=simB1)
1303
+ simdevA = NetdevSimDev()
1304
+ simA, = simdevA.nsims
1305
+ simdevB = NetdevSimDev(3)
1306
+ simB1, simB2, simB3 = simdevB.nsims
11901307 sims = (simA, simB1, simB2, simB3)
11911308 simB = (simB1, simB2, simB3)
11921309
....@@ -1198,13 +1315,13 @@
11981315 progB = bpf_pinned("/sys/fs/bpf/nsimB")
11991316
12001317 simA.set_xdp(progA, "offload", JSON=False)
1201
- for d in simB:
1318
+ for d in simdevB.nsims:
12021319 d.set_xdp(progB, "offload", JSON=False)
12031320
12041321 start_test("Test multi-dev ASIC cross-dev replace...")
12051322 ret, _ = simA.set_xdp(progB, "offload", force=True, JSON=False, fail=False)
12061323 fail(ret == 0, "cross-ASIC program allowed")
1207
- for d in simB:
1324
+ for d in simdevB.nsims:
12081325 ret, _ = d.set_xdp(progA, "offload", force=True, JSON=False, fail=False)
12091326 fail(ret == 0, "cross-ASIC program allowed")
12101327
....@@ -1216,7 +1333,7 @@
12161333 fail=False, include_stderr=True)
12171334 fail(ret == 0, "cross-ASIC program allowed")
12181335 check_extack_nsim(err, "program bound to different dev.", args)
1219
- for d in simB:
1336
+ for d in simdevB.nsims:
12201337 ret, _, err = d.set_xdp(progA, "offload", force=True, JSON=False,
12211338 fail=False, include_stderr=True)
12221339 fail(ret == 0, "cross-ASIC program allowed")
....@@ -1253,11 +1370,11 @@
12531370 start_test("Test multi-dev ASIC cross-dev destruction...")
12541371 bpftool_prog_list_wait(expected=2)
12551372
1256
- simA.remove()
1373
+ simdevA.remove()
12571374 bpftool_prog_list_wait(expected=1)
12581375
12591376 ifnameB = bpftool("prog show %s" % (progB))[1]["dev"]["ifname"]
1260
- fail(ifnameB != simB1['ifname'], "program not bound to originial device")
1377
+ fail(ifnameB != simB1['ifname'], "program not bound to original device")
12611378 simB1.remove()
12621379 bpftool_prog_list_wait(expected=1)
12631380
....@@ -1271,6 +1388,7 @@
12711388 fail(ifnameB != simB3['ifname'], "program not bound to remaining device")
12721389
12731390 simB3.remove()
1391
+ simdevB.remove()
12741392 bpftool_prog_list_wait(expected=0)
12751393
12761394 start_test("Test multi-dev ASIC cross-dev destruction - orphaned...")