1 // SPDX-License-Identifier: GPL-2.0 2 #include <stdio.h> 3 #include <string.h> 4 5 #include <ynl.h> 6 7 #include <kselftest_harness.h> 8 9 #include "devlink-user.h" 10 11 FIXTURE(devlink) 12 { 13 struct ynl_sock *ys; 14 }; 15 16 FIXTURE_SETUP(devlink) 17 { 18 self->ys = ynl_sock_create(&ynl_devlink_family, NULL); 19 ASSERT_NE(NULL, self->ys) 20 TH_LOG("failed to create devlink socket"); 21 } 22 23 FIXTURE_TEARDOWN(devlink) 24 { 25 ynl_sock_destroy(self->ys); 26 } 27 28 TEST_F(devlink, dump) 29 { 30 struct devlink_get_list *devs; 31 32 devs = devlink_get_dump(self->ys); 33 ASSERT_NE(NULL, devs) { 34 TH_LOG("dump failed: %s", self->ys->err.msg); 35 } 36 37 if (ynl_dump_empty(devs)) { 38 devlink_get_list_free(devs); 39 SKIP(return, "no entries in dump"); 40 } 41 42 ynl_dump_foreach(devs, d) { 43 EXPECT_TRUE((bool)d->_len.bus_name); 44 EXPECT_TRUE((bool)d->_len.dev_name); 45 ksft_print_msg("%s/%s\n", d->bus_name, d->dev_name); 46 } 47 48 devlink_get_list_free(devs); 49 } 50 51 TEST_F(devlink, info) 52 { 53 struct devlink_get_list *devs; 54 55 devs = devlink_get_dump(self->ys); 56 ASSERT_NE(NULL, devs) { 57 TH_LOG("dump failed: %s", self->ys->err.msg); 58 } 59 60 if (ynl_dump_empty(devs)) { 61 devlink_get_list_free(devs); 62 SKIP(return, "no devices to query"); 63 } 64 65 ynl_dump_foreach(devs, d) { 66 struct devlink_info_get_req *info_req; 67 struct devlink_info_get_rsp *info_rsp; 68 unsigned int i; 69 70 EXPECT_TRUE((bool)d->_len.bus_name); 71 EXPECT_TRUE((bool)d->_len.dev_name); 72 ksft_print_msg("%s/%s:\n", d->bus_name, d->dev_name); 73 74 info_req = devlink_info_get_req_alloc(); 75 ASSERT_NE(NULL, info_req); 76 devlink_info_get_req_set_bus_name(info_req, d->bus_name); 77 devlink_info_get_req_set_dev_name(info_req, d->dev_name); 78 79 info_rsp = devlink_info_get(self->ys, info_req); 80 devlink_info_get_req_free(info_req); 81 ASSERT_NE(NULL, info_rsp) { 82 devlink_get_list_free(devs); 83 TH_LOG("info_get failed: %s", self->ys->err.msg); 84 } 85 86 EXPECT_TRUE((bool)info_rsp->_len.info_driver_name); 87 if (info_rsp->_len.info_driver_name) 88 ksft_print_msg(" driver: %s\n", 89 info_rsp->info_driver_name); 90 if (info_rsp->_count.info_version_running) 91 ksft_print_msg(" running fw:\n"); 92 for (i = 0; i < info_rsp->_count.info_version_running; i++) 93 ksft_print_msg(" %s: %s\n", 94 info_rsp->info_version_running[i].info_version_name, 95 info_rsp->info_version_running[i].info_version_value); 96 devlink_info_get_rsp_free(info_rsp); 97 } 98 devlink_get_list_free(devs); 99 } 100 101 TEST_HARNESS_MAIN 102