@@ -215,12 +215,14 @@ def bpftool_map_list_wait(expected=0, n_retry=20, ns=""):
215215 raise Exception ("Time out waiting for map counts to stabilize want %d, have %d" % (expected , nmaps ))
216216
217217def bpftool_prog_load (sample , file_name , maps = [], prog_type = "xdp" , dev = None ,
218- fail = True , include_stderr = False ):
218+ fail = True , include_stderr = False , dev_bind = None ):
219219 args = "prog load %s %s" % (os .path .join (bpf_test_dir , sample ), file_name )
220220 if prog_type is not None :
221221 args += " type " + prog_type
222222 if dev is not None :
223223 args += " dev " + dev
224+ elif dev_bind is not None :
225+ args += " xdpmeta_dev " + dev_bind
224226 if len (maps ):
225227 args += " map " + " map " .join (maps )
226228
@@ -980,6 +982,16 @@ def test_multi_prog(simdev, sim, obj, modename, modeid):
980982 rm ("/sys/fs/bpf/offload" )
981983 sim .wait_for_flush ()
982984
985+ bpftool_prog_load ("sample_ret0.bpf.o" , "/sys/fs/bpf/devbound" ,
986+ dev_bind = sim ['ifname' ])
987+ devbound = bpf_pinned ("/sys/fs/bpf/devbound" )
988+ start_test ("Test dev-bound program in generic mode..." )
989+ ret , _ , err = sim .set_xdp (devbound , "generic" , fail = False , include_stderr = True )
990+ fail (ret == 0 , "devbound program in generic mode allowed" )
991+ check_extack (err , "Can't attach device-bound programs in generic mode." , args )
992+ rm ("/sys/fs/bpf/devbound" )
993+ sim .wait_for_flush ()
994+
983995 start_test ("Test XDP load failure..." )
984996 sim .dfs ["dev/bpf_bind_verifier_accept" ] = 0
985997 ret , _ , err = bpftool_prog_load ("sample_ret0.bpf.o" , "/sys/fs/bpf/offload" ,
0 commit comments