1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-27 10:25:37 +03:00

Merge pull request #15104 from ssahani/networkctl-qdisc

networkctl: Add support to display qdisc
This commit is contained in:
Yu Watanabe 2020-03-16 12:14:00 +09:00 committed by GitHub
commit 9790ca75fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 4 deletions

View File

@ -543,9 +543,7 @@ static const NLType rtnl_link_types[] = {
[IFLA_IFNAME] = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ - 1 }, [IFLA_IFNAME] = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ - 1 },
[IFLA_MTU] = { .type = NETLINK_TYPE_U32 }, [IFLA_MTU] = { .type = NETLINK_TYPE_U32 },
[IFLA_LINK] = { .type = NETLINK_TYPE_U32 }, [IFLA_LINK] = { .type = NETLINK_TYPE_U32 },
/* [IFLA_QDISC] = { .type = NETLINK_TYPE_STRING },
[IFLA_QDISC],
*/
[IFLA_STATS] = { .size = sizeof(struct rtnl_link_stats) }, [IFLA_STATS] = { .size = sizeof(struct rtnl_link_stats) },
/* /*
[IFLA_COST], [IFLA_COST],

View File

@ -125,6 +125,7 @@ typedef struct LinkInfo {
uint32_t max_mtu; uint32_t max_mtu;
uint32_t tx_queues; uint32_t tx_queues;
uint32_t rx_queues; uint32_t rx_queues;
char *qdisc;
char **alternative_names; char **alternative_names;
union { union {
@ -179,6 +180,7 @@ static const LinkInfo* link_info_array_free(LinkInfo *array) {
for (unsigned i = 0; array && array[i].needs_freeing; i++) { for (unsigned i = 0; array && array[i].needs_freeing; i++) {
sd_device_unref(array[i].sd_device); sd_device_unref(array[i].sd_device);
free(array[i].ssid); free(array[i].ssid);
free(array[i].qdisc);
strv_free(array[i].alternative_names); strv_free(array[i].alternative_names);
} }
@ -249,7 +251,7 @@ static int decode_netdev(sd_netlink_message *m, LinkInfo *info) {
static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns, bool matched_patterns[]) { static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns, bool matched_patterns[]) {
_cleanup_strv_free_ char **altnames = NULL; _cleanup_strv_free_ char **altnames = NULL;
const char *name; const char *name, *qdisc;
int ifindex, r; int ifindex, r;
uint16_t type; uint16_t type;
@ -333,6 +335,13 @@ static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns, b
else if (sd_netlink_message_read(m, IFLA_STATS, sizeof info->stats, &info->stats) >= 0) else if (sd_netlink_message_read(m, IFLA_STATS, sizeof info->stats, &info->stats) >= 0)
info->has_stats = true; info->has_stats = true;
r = sd_netlink_message_read_string(m, IFLA_QDISC, &qdisc);
if (r >= 0) {
info->qdisc = strdup(qdisc);
if (!info->qdisc)
return log_oom();
}
/* fill kind info */ /* fill kind info */
(void) decode_netdev(m, info); (void) decode_netdev(m, info);
@ -1336,6 +1345,15 @@ static int link_status_one(
return table_log_add_error(r); return table_log_add_error(r);
} }
if (info->qdisc) {
r = table_add_many(table,
TABLE_EMPTY,
TABLE_STRING, "QDisc:",
TABLE_STRING, info->qdisc);
if (r < 0)
return table_log_add_error(r);
}
if (streq_ptr(info->netdev_kind, "bridge")) { if (streq_ptr(info->netdev_kind, "bridge")) {
r = table_add_many(table, r = table_add_many(table,
TABLE_EMPTY, TABLE_EMPTY,