1 // SPDX-License-Identifier: GPL-2.0 2 #include <stdio.h> 3 #include <string.h> 4 5 #include <ynl.h> 6 7 #include "devlink-user.h" 8 9 int main(int argc, char **argv) 10 { 11 struct devlink_get_list *devs; 12 struct ynl_sock *ys; 13 14 ys = ynl_sock_create(&ynl_devlink_family, NULL); 15 if (!ys) 16 return 1; 17 18 devs = devlink_get_dump(ys); 19 if (!devs) 20 goto err_close; 21 22 ynl_dump_foreach(devs, d) { 23 struct devlink_info_get_req *info_req; 24 struct devlink_info_get_rsp *info_rsp; 25 unsigned i; 26 27 printf("%s/%s:\n", d->bus_name, d->dev_name); 28 29 info_req = devlink_info_get_req_alloc(); 30 devlink_info_get_req_set_bus_name(info_req, d->bus_name); 31 devlink_info_get_req_set_dev_name(info_req, d->dev_name); 32 33 info_rsp = devlink_info_get(ys, info_req); 34 devlink_info_get_req_free(info_req); 35 if (!info_rsp) 36 goto err_free_devs; 37 38 if (info_rsp->_len.info_driver_name) 39 printf(" driver: %s\n", info_rsp->info_driver_name); 40 if (info_rsp->_count.info_version_running) 41 printf(" running fw:\n"); 42 for (i = 0; i < info_rsp->_count.info_version_running; i++) 43 printf(" %s: %s\n", 44 info_rsp->info_version_running[i].info_version_name, 45 info_rsp->info_version_running[i].info_version_value); 46 printf(" ...\n"); 47 devlink_info_get_rsp_free(info_rsp); 48 } 49 devlink_get_list_free(devs); 50 51 ynl_sock_destroy(ys); 52 53 return 0; 54 55 err_free_devs: 56 devlink_get_list_free(devs); 57 err_close: 58 fprintf(stderr, "YNL: %s\n", ys->err.msg); 59 ynl_sock_destroy(ys); 60 return 2; 61 } 62