| // SPDX-License-Identifier: GPL-2.0 | |
| #include <stdio.h> | |
| #include <string.h> | |
| #include <ynl.h> | |
| #include <kselftest_harness.h> | |
| #include "devlink-user.h" | |
| FIXTURE(devlink) | |
| { | |
| struct ynl_sock *ys; | |
| }; | |
| FIXTURE_SETUP(devlink) | |
| { | |
| self->ys = ynl_sock_create(&ynl_devlink_family, NULL); | |
| ASSERT_NE(NULL, self->ys) | |
| TH_LOG("failed to create devlink socket"); | |
| } | |
| FIXTURE_TEARDOWN(devlink) | |
| { | |
| ynl_sock_destroy(self->ys); | |
| } | |
| TEST_F(devlink, dump) | |
| { | |
| struct devlink_get_list *devs; | |
| devs = devlink_get_dump(self->ys); | |
| ASSERT_NE(NULL, devs) { | |
| TH_LOG("dump failed: %s", self->ys->err.msg); | |
| } | |
| if (ynl_dump_empty(devs)) { | |
| devlink_get_list_free(devs); | |
| SKIP(return, "no entries in dump"); | |
| } | |
| ynl_dump_foreach(devs, d) { | |
| EXPECT_TRUE((bool)d->_len.bus_name); | |
| EXPECT_TRUE((bool)d->_len.dev_name); | |
| ksft_print_msg("%s/%s\n", d->bus_name, d->dev_name); | |
| } | |
| devlink_get_list_free(devs); | |
| } | |
| TEST_F(devlink, info) | |
| { | |
| struct devlink_get_list *devs; | |
| devs = devlink_get_dump(self->ys); | |
| ASSERT_NE(NULL, devs) { | |
| TH_LOG("dump failed: %s", self->ys->err.msg); | |
| } | |
| if (ynl_dump_empty(devs)) { | |
| devlink_get_list_free(devs); | |
| SKIP(return, "no devices to query"); | |
| } | |
| ynl_dump_foreach(devs, d) { | |
| struct devlink_info_get_req *info_req; | |
| struct devlink_info_get_rsp *info_rsp; | |
| unsigned int i; | |
| EXPECT_TRUE((bool)d->_len.bus_name); | |
| EXPECT_TRUE((bool)d->_len.dev_name); | |
| ksft_print_msg("%s/%s:\n", d->bus_name, d->dev_name); | |
| info_req = devlink_info_get_req_alloc(); | |
| ASSERT_NE(NULL, info_req); | |
| devlink_info_get_req_set_bus_name(info_req, d->bus_name); | |
| devlink_info_get_req_set_dev_name(info_req, d->dev_name); | |
| info_rsp = devlink_info_get(self->ys, info_req); | |
| devlink_info_get_req_free(info_req); | |
| ASSERT_NE(NULL, info_rsp) { | |
| devlink_get_list_free(devs); | |
| TH_LOG("info_get failed: %s", self->ys->err.msg); | |
| } | |
| EXPECT_TRUE((bool)info_rsp->_len.info_driver_name); | |
| if (info_rsp->_len.info_driver_name) | |
| ksft_print_msg(" driver: %s\n", | |
| info_rsp->info_driver_name); | |
| if (info_rsp->_count.info_version_running) | |
| ksft_print_msg(" running fw:\n"); | |
| for (i = 0; i < info_rsp->_count.info_version_running; i++) | |
| ksft_print_msg(" %s: %s\n", | |
| info_rsp->info_version_running[i].info_version_name, | |
| info_rsp->info_version_running[i].info_version_value); | |
| devlink_info_get_rsp_free(info_rsp); | |
| } | |
| devlink_get_list_free(devs); | |
| } | |
| TEST_HARNESS_MAIN |