1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-23 21:35:11 +03:00

networkctl: sort ifindexes in status command

Before:
$ networkctl status
● Interfaces: 372, 368, 373, 375, 376, 377, 378, 379, 381, 391, 3, 1201, 1202, 1184, 1610, 9, 8, 1340, 2, 1, 1256, 7

After:
$ networkctl status
● Interfaces: 1, 2, 3, 7, 8, 9, 368, 372, 373, 375, 376, 377, 378, 379, 381, 391, 1184, 1201, 1202, 1256, 1340, 1610
This commit is contained in:
Yu Watanabe 2024-10-07 12:18:54 +09:00 committed by Daan De Meyer
parent dd9a02ce88
commit a02166297c

View File

@ -9,11 +9,51 @@
#include "networkctl-journal.h"
#include "networkctl-status-system.h"
#include "networkctl-util.h"
#include "sort-util.h"
#include "strv.h"
static int ifindex_str_compare_func(char * const *a, char * const *b) {
size_t al, bl;
int r;
al = strlen_ptr(*a);
bl = strlen_ptr(*b);
r = CMP(al, bl);
if (r != 0)
return r;
return strcmp_ptr(*a, *b);
}
static int get_netifs(char **ret) {
_cleanup_strv_free_ char **netifs = NULL;
_cleanup_free_ char *joined = NULL;
int r;
assert(ret);
r = get_files_in_directory("/run/systemd/netif/links/", &netifs);
if (IN_SET(r, 0, -ENOENT)) {
*ret = NULL;
return 0;
}
if (r < 0)
return log_error_errno(r, "Failed to list network interfaces: %m");
typesafe_qsort(netifs, strv_length(netifs), ifindex_str_compare_func);
joined = strv_join(netifs, ", ");
if (!joined)
return log_oom();
*ret = TAKE_PTR(joined);
return 0;
}
int system_status(sd_netlink *rtnl, sd_hwdb *hwdb) {
_cleanup_free_ char *operational_state = NULL, *online_state = NULL, *netifs_joined = NULL;
_cleanup_strv_free_ char **netifs = NULL, **dns = NULL, **ntp = NULL, **search_domains = NULL, **route_domains = NULL;
_cleanup_strv_free_ char **dns = NULL, **ntp = NULL, **search_domains = NULL, **route_domains = NULL;
const char *on_color_operational, *off_color_operational, *on_color_online;
_cleanup_(table_unrefp) Table *table = NULL;
int r;
@ -33,14 +73,9 @@ int system_status(sd_netlink *rtnl, sd_hwdb *hwdb) {
if (arg_full)
table_set_width(table, 0);
r = get_files_in_directory("/run/systemd/netif/links/", &netifs);
if (r < 0 && r != -ENOENT)
return log_error_errno(r, "Failed to list network interfaces: %m");
else if (r > 0) {
netifs_joined = strv_join(netifs, ", ");
if (!netifs_joined)
return log_oom();
}
r = get_netifs(&netifs_joined);
if (r < 0)
return r;
r = table_add_many(table,
TABLE_FIELD, "State",