@@ -215,12 +215,14 @@ def bpftool_map_list_wait(expected=0, n_retry=20, ns=""):
215
215
raise Exception ("Time out waiting for map counts to stabilize want %d, have %d" % (expected , nmaps ))
216
216
217
217
def 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 ):
219
219
args = "prog load %s %s" % (os .path .join (bpf_test_dir , sample ), file_name )
220
220
if prog_type is not None :
221
221
args += " type " + prog_type
222
222
if dev is not None :
223
223
args += " dev " + dev
224
+ elif dev_bind is not None :
225
+ args += " xdpmeta_dev " + dev_bind
224
226
if len (maps ):
225
227
args += " map " + " map " .join (maps )
226
228
@@ -980,6 +982,16 @@ def test_multi_prog(simdev, sim, obj, modename, modeid):
980
982
rm ("/sys/fs/bpf/offload" )
981
983
sim .wait_for_flush ()
982
984
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
+
983
995
start_test ("Test XDP load failure..." )
984
996
sim .dfs ["dev/bpf_bind_verifier_accept" ] = 0
985
997
ret , _ , err = bpftool_prog_load ("sample_ret0.bpf.o" , "/sys/fs/bpf/offload" ,
0 commit comments