66 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <stdio.h>3#include <string.h>4 5#include <ynl.h>6 7#include <net/if.h>8 9#include "ethtool-user.h"10 11int main(int argc, char **argv)12{13 struct ethtool_channels_get_req_dump creq = {};14 struct ethtool_rings_get_req_dump rreq = {};15 struct ethtool_channels_get_list *channels;16 struct ethtool_rings_get_list *rings;17 struct ynl_sock *ys;18 19 ys = ynl_sock_create(&ynl_ethtool_family, NULL);20 if (!ys)21 return 1;22 23 creq._present.header = 1; /* ethtool needs an empty nest, sigh */24 channels = ethtool_channels_get_dump(ys, &creq);25 if (!channels)26 goto err_close;27 28 printf("Channels:\n");29 ynl_dump_foreach(channels, dev) {30 printf(" %8s: ", dev->header.dev_name);31 if (dev->_present.rx_count)32 printf("rx %d ", dev->rx_count);33 if (dev->_present.tx_count)34 printf("tx %d ", dev->tx_count);35 if (dev->_present.combined_count)36 printf("combined %d ", dev->combined_count);37 printf("\n");38 }39 ethtool_channels_get_list_free(channels);40 41 rreq._present.header = 1; /* ethtool needs an empty nest.. */42 rings = ethtool_rings_get_dump(ys, &rreq);43 if (!rings)44 goto err_close;45 46 printf("Rings:\n");47 ynl_dump_foreach(rings, dev) {48 printf(" %8s: ", dev->header.dev_name);49 if (dev->_present.rx)50 printf("rx %d ", dev->rx);51 if (dev->_present.tx)52 printf("tx %d ", dev->tx);53 printf("\n");54 }55 ethtool_rings_get_list_free(rings);56 57 ynl_sock_destroy(ys);58 59 return 0;60 61err_close:62 fprintf(stderr, "YNL (%d): %s\n", ys->err.code, ys->err.msg);63 ynl_sock_destroy(ys);64 return 2;65}66