@@ -1170,6 +1170,52 @@ static void test_admin_id_nsid_ctrl_list(struct nvme_mi_ep *ep)
11701170 assert (!rc );
11711171}
11721172
1173+ static int test_admin_id_secondary_ctrl_list_cb (struct nvme_mi_ep * ep ,
1174+ struct nvme_mi_req * req ,
1175+ struct nvme_mi_resp * resp ,
1176+ void * data )
1177+ {
1178+ __u16 cns , ctrlid ;
1179+ __u32 nsid ;
1180+ __u8 * hdr ;
1181+
1182+ hdr = (__u8 * )req -> hdr ;
1183+ assert (hdr [4 ] == nvme_admin_identify );
1184+
1185+ assert (req -> data_len == 0 );
1186+
1187+ cns = hdr [45 ] << 8 | hdr [44 ];
1188+ assert (cns == NVME_IDENTIFY_CNS_SECONDARY_CTRL_LIST );
1189+
1190+ nsid = hdr [11 ] << 24 | hdr [10 ] << 16 | hdr [9 ] << 8 | hdr [8 ];
1191+ assert (nsid == 0x01020304 );
1192+
1193+ ctrlid = hdr [47 ] << 8 | hdr [46 ];
1194+ assert (ctrlid == 5 );
1195+
1196+ resp -> data_len = sizeof (struct nvme_secondary_ctrl_list );
1197+ test_transport_resp_calc_mic (resp );
1198+
1199+ return 0 ;
1200+ }
1201+
1202+ static void test_admin_id_secondary_ctrl_list (struct nvme_mi_ep * ep )
1203+ {
1204+ struct nvme_secondary_ctrl_list list ;
1205+ nvme_mi_ctrl_t ctrl ;
1206+ int rc ;
1207+
1208+ test_set_transport_callback (ep , test_admin_id_secondary_ctrl_list_cb ,
1209+ NULL );
1210+
1211+ ctrl = nvme_mi_init_ctrl (ep , 5 );
1212+ assert (ctrl );
1213+
1214+ rc = nvme_mi_admin_identify_secondary_ctrl_list (ctrl , 0x01020304 ,
1215+ 5 , & list );
1216+ assert (!rc );
1217+ }
1218+
11731219static int test_admin_ns_mgmt_cb (struct nvme_mi_ep * ep ,
11741220 struct nvme_mi_req * req ,
11751221 struct nvme_mi_resp * resp ,
@@ -1522,6 +1568,7 @@ struct test {
15221568 DEFINE_TEST (admin_id_alloc_ns ),
15231569 DEFINE_TEST (admin_id_active_ns ),
15241570 DEFINE_TEST (admin_id_nsid_ctrl_list ),
1571+ DEFINE_TEST (admin_id_secondary_ctrl_list ),
15251572 DEFINE_TEST (admin_ns_mgmt_create ),
15261573 DEFINE_TEST (admin_ns_mgmt_delete ),
15271574 DEFINE_TEST (admin_ns_attach ),
0 commit comments