projects/linux·blob master · refs

92 lines · 2.2 KiB

1// SPDX-License-Identifier: GPL-2.0
2#include <stdio.h>
3#include <string.h>
4
5#include <ynl.h>
6
7#include <net/if.h>
8
9#include <kselftest_harness.h>
10
11#include "ethtool-user.h"
12
13FIXTURE(ethtool)
14{
15 struct ynl_sock *ys;
16};
17
18FIXTURE_SETUP(ethtool)
19{
20 self->ys = ynl_sock_create(&ynl_ethtool_family, NULL);
21 ASSERT_NE(NULL, self->ys)
22 TH_LOG("failed to create ethtool socket");
23}
24
25FIXTURE_TEARDOWN(ethtool)
26{
27 ynl_sock_destroy(self->ys);
28}
29
30TEST_F(ethtool, channels)
31{
32 struct ethtool_channels_get_req_dump creq = {};
33 struct ethtool_channels_get_list *channels;
34
35 creq._present.header = 1; /* ethtool needs an empty nest */
36 channels = ethtool_channels_get_dump(self->ys, &creq);
37 ASSERT_NE(NULL, channels) {
38 TH_LOG("channels dump failed: %s", self->ys->err.msg);
39 }
40
41 if (ynl_dump_empty(channels)) {
42 ethtool_channels_get_list_free(channels);
43 SKIP(return, "no entries in channels dump");
44 }
45
46 ynl_dump_foreach(channels, dev) {
47 EXPECT_TRUE((bool)dev->header._len.dev_name);
48 ksft_print_msg("%8s: ", dev->header.dev_name);
49 EXPECT_TRUE(dev->_present.rx_count ||
50 dev->_present.tx_count ||
51 dev->_present.combined_count);
52 if (dev->_present.rx_count)
53 printf("rx %d ", dev->rx_count);
54 if (dev->_present.tx_count)
55 printf("tx %d ", dev->tx_count);
56 if (dev->_present.combined_count)
57 printf("combined %d ", dev->combined_count);
58 printf("\n");
59 }
60 ethtool_channels_get_list_free(channels);
61}
62
63TEST_F(ethtool, rings)
64{
65 struct ethtool_rings_get_req_dump rreq = {};
66 struct ethtool_rings_get_list *rings;
67
68 rreq._present.header = 1; /* ethtool needs an empty nest */
69 rings = ethtool_rings_get_dump(self->ys, &rreq);
70 ASSERT_NE(NULL, rings) {
71 TH_LOG("rings dump failed: %s", self->ys->err.msg);
72 }
73
74 if (ynl_dump_empty(rings)) {
75 ethtool_rings_get_list_free(rings);
76 SKIP(return, "no entries in rings dump");
77 }
78
79 ynl_dump_foreach(rings, dev) {
80 EXPECT_TRUE((bool)dev->header._len.dev_name);
81 ksft_print_msg("%8s: ", dev->header.dev_name);
82 EXPECT_TRUE(dev->_present.rx || dev->_present.tx);
83 if (dev->_present.rx)
84 printf("rx %d ", dev->rx);
85 if (dev->_present.tx)
86 printf("tx %d ", dev->tx);
87 printf("\n");
88 }
89 ethtool_rings_get_list_free(rings);
90}
91
92TEST_HARNESS_MAIN