diff options
Diffstat (limited to 'src/network/networkctl.c')
-rw-r--r-- | src/network/networkctl.c | 137 |
1 files changed, 50 insertions, 87 deletions
diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 631b12cf51..160ed114a4 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -711,29 +711,41 @@ static int get_gateway_description( return -ENODATA; } +static int dump_list(Table *table, const char *prefix, char * const *l) { + int r; + + if (strv_isempty(l)) + return 0; + + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, prefix, + TABLE_STRV, l); + if (r < 0) + return table_log_add_error(r); + + return 0; +} + static int dump_gateways( sd_netlink *rtnl, sd_hwdb *hwdb, Table *table, int ifindex) { _cleanup_free_ struct local_address *local = NULL; + _cleanup_strv_free_ char **buf = NULL; int r, n, i; assert(rtnl); assert(table); n = local_gateways(rtnl, ifindex, AF_UNSPEC, &local); - if (n < 0) + if (n <= 0) return n; for (i = 0; i < n; i++) { _cleanup_free_ char *gateway = NULL, *description = NULL, *with_description = NULL; - - r = table_add_many(table, - TABLE_EMPTY, - TABLE_STRING, i == 0 ? "Gateway:" : ""); - if (r < 0) - return table_log_add_error(r); + char name[IF_NAMESIZE+1]; r = in_addr_to_string(local[i].family, &local[i].address, &gateway); if (r < 0) @@ -741,28 +753,24 @@ static int dump_gateways( r = get_gateway_description(rtnl, hwdb, local[i].ifindex, local[i].family, &local[i].address, &description); if (r < 0) - log_debug_errno(r, "Could not get description of gateway: %m"); + log_debug_errno(r, "Could not get description of gateway, ignoring: %m"); if (description) { with_description = strjoin(gateway, " (", description, ")"); if (!with_description) - return -ENOMEM; + return log_oom(); } - /* Show interface name for the entry if we show - * entries for all interfaces */ - if (ifindex <= 0) { - char name[IF_NAMESIZE+1]; - - r = table_add_cell_stringf(table, NULL, "%s on %s", with_description ?: gateway, - format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT)); - } else - r = table_add_cell(table, NULL, TABLE_STRING, with_description ?: gateway); + /* Show interface name for the entry if we show entries for all interfaces */ + r = strv_extendf(&buf, "%s%s%s", + with_description ?: gateway, + ifindex <= 0 ? " on " : "", + ifindex <= 0 ? format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT) : ""); if (r < 0) - return table_log_add_error(r); + return log_oom(); } - return 0; + return dump_list(table, "Gateway:", buf); } static int dump_addresses( @@ -772,25 +780,21 @@ static int dump_addresses( _cleanup_free_ struct local_address *local = NULL; _cleanup_free_ char *dhcp4_address = NULL; + _cleanup_strv_free_ char **buf = NULL; int r, n, i; assert(rtnl); assert(table); n = local_addresses(rtnl, ifindex, AF_UNSPEC, &local); - if (n < 0) + if (n <= 0) return n; (void) sd_network_link_get_dhcp4_address(ifindex, &dhcp4_address); for (i = 0; i < n; i++) { _cleanup_free_ char *pretty = NULL; - - r = table_add_many(table, - TABLE_EMPTY, - TABLE_STRING, i == 0 ? "Address:" : ""); - if (r < 0) - return table_log_add_error(r); + char name[IF_NAMESIZE+1]; r = in_addr_to_string(local[i].family, &local[i].address, &pretty); if (r < 0) @@ -805,18 +809,15 @@ static int dump_addresses( return log_oom(); } - if (ifindex <= 0) { - char name[IF_NAMESIZE+1]; - - r = table_add_cell_stringf(table, NULL, "%s on %s", pretty, - format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT)); - } else - r = table_add_cell(table, NULL, TABLE_STRING, pretty); + r = strv_extendf(&buf, "%s%s%s", + pretty, + ifindex <= 0 ? " on " : "", + ifindex <= 0 ? format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT) : ""); if (r < 0) - return table_log_add_error(r); + return log_oom(); } - return 0; + return dump_list(table, "Address:", buf); } static int dump_address_labels(sd_netlink *rtnl) { @@ -966,8 +967,9 @@ static int next_lldp_neighbor(FILE *f, sd_lldp_neighbor **ret) { } static int dump_lldp_neighbors(Table *table, const char *prefix, int ifindex) { + _cleanup_strv_free_ char **buf = NULL; _cleanup_fclose_ FILE *f = NULL; - int r, c = 0; + int r; assert(table); assert(prefix); @@ -989,29 +991,21 @@ static int dump_lldp_neighbors(Table *table, const char *prefix, int ifindex) { if (r == 0) break; - r = table_add_many(table, - TABLE_EMPTY, - TABLE_STRING, c == 0 ? prefix : ""); - if (r < 0) - return table_log_add_error(r); - (void) sd_lldp_neighbor_get_system_name(n, &system_name); (void) sd_lldp_neighbor_get_port_id_as_string(n, &port_id); (void) sd_lldp_neighbor_get_port_description(n, &port_description); - r = table_add_cell_stringf(table, NULL, - "%s on port %s%s%s%s", - strna(system_name), strna(port_id), - isempty(port_description) ? "" : " (", - strempty(port_description), - isempty(port_description) ? "" : ")"); + r = strv_extendf(&buf, "%s on port %s%s%s%s", + strna(system_name), + strna(port_id), + isempty(port_description) ? "" : " (", + strempty(port_description), + isempty(port_description) ? "" : ")"); if (r < 0) - return table_log_add_error(r); - - c++; + return log_oom(); } - return c; + return dump_list(table, prefix, buf); } static int dump_ifindexes(Table *table, const char *prefix, const int *ifindexes) { @@ -1035,25 +1029,6 @@ static int dump_ifindexes(Table *table, const char *prefix, const int *ifindexes return 0; } -static int dump_list(Table *table, const char *prefix, char **l) { - char **i; - int r; - - if (strv_isempty(l)) - return 0; - - STRV_FOREACH(i, l) { - r = table_add_many(table, - TABLE_EMPTY, - TABLE_STRING, i == l ? prefix : "", - TABLE_STRING, *i); - if (r < 0) - return table_log_add_error(r); - } - - return 0; -} - #define DUMP_STATS_ONE(name, val_name) \ r = table_add_many(table, \ TABLE_EMPTY, \ @@ -1166,7 +1141,6 @@ static int link_status_one( _cleanup_free_ int *carrier_bound_to = NULL, *carrier_bound_by = NULL; _cleanup_(table_unrefp) Table *table = NULL; TableCell *cell; - char **p; int r; assert(rtnl); @@ -1251,20 +1225,9 @@ static int link_status_one( if (r < 0) return table_log_add_error(r); - STRV_FOREACH(p, info->alternative_names) { - if (p == info->alternative_names) - r = table_add_many(table, - TABLE_EMPTY, - TABLE_STRING, "Alternative Names:", - TABLE_STRING, *p); - else - r = table_add_many(table, - TABLE_EMPTY, - TABLE_EMPTY, - TABLE_STRING, *p); - if (r < 0) - return table_log_add_error(r); - } + r = dump_list(table, "Alternative Names:", info->alternative_names); + if (r < 0) + return r; if (path) { r = table_add_many(table, |