xref: /linux/tools/net/ynl/tests/devlink.c (revision 91a4855d6c03e770e42f17c798a36a3c46e63de2)
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