diff options
author | Thomas Haller <thaller@redhat.com> | 2020-09-21 19:06:41 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-09-24 09:43:56 +0200 |
commit | 23a6965ce2001ea76f82077787a2a1f2a15dbe76 (patch) | |
tree | f7bf823055799e35c076c950dff06de5f07a18c7 | |
parent | 7ff1beabdb28472db417f31633b7c2f75d3e8428 (diff) | |
download | NetworkManager-23a6965ce2001ea76f82077787a2a1f2a15dbe76.tar.gz |
l3cfg: add nm_l3_config_data_log() function
-rw-r--r-- | src/nm-l3-config-data.c | 262 | ||||
-rw-r--r-- | src/nm-l3-config-data.h | 8 |
2 files changed, 270 insertions, 0 deletions
diff --git a/src/nm-l3-config-data.c b/src/nm-l3-config-data.c index 91cb7190eb..2de59963c6 100644 --- a/src/nm-l3-config-data.c +++ b/src/nm-l3-config-data.c @@ -8,8 +8,10 @@ #include <linux/if_addr.h> #include <linux/rtnetlink.h> +#include "nm-glib-aux/nm-enum-utils.h" #include "nm-core-internal.h" #include "platform/nm-platform.h" +#include "platform/nm-platform-utils.h" #include "platform/nmp-object.h" #include "NetworkManagerUtils.h" @@ -257,6 +259,19 @@ _garray_inaddr_get (GArray *arr, return arr->data; } +static gconstpointer +_garray_inaddr_at (GArray *arr, + guint idx, + gboolean IS_IPv4) +{ + nm_assert (arr); + nm_assert (idx < arr->len); + + if (IS_IPv4) + return &g_array_index (arr, in_addr_t, idx); + return &g_array_index (arr, struct in6_addr, idx); +} + static gboolean _garray_inaddr_add (GArray **p_arr, int addr_family, @@ -323,6 +338,250 @@ _strv_ptrarray_merge (GPtrArray **p_dst, const GPtrArray *src) /*****************************************************************************/ +void +nm_l3_config_data_log (const NML3ConfigData *self, + const char *title, + const char *prefix, + NMLogLevel log_level, + NMLogDomain log_domain) +{ + char sbuf[sizeof (_nm_utils_to_string_buffer)]; + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + int IS_IPv4; + guint i; + + if (!nm_logging_enabled (log_level, log_domain)) + return; + +#define _L(...) \ + _nm_log (log_level, \ + log_domain, \ + 0, \ + NULL, \ + NULL, \ + "%s" _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \ + prefix \ + _NM_UTILS_MACRO_REST(__VA_ARGS__)) + + if (!prefix) + prefix = ""; + + if (!self) { + _L ("l3cd %s%s%s(NULL)", + NM_PRINT_FMT_QUOTED (title, "\"", title, "\" ", "")); + return; + } + + nm_assert (!NM_FLAGS_ANY (self->flags, ~( NM_L3_CONFIG_DAT_FLAGS_IGNORE_MERGE_NO_DEFAULT_ROUTES + | NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY_4 + | NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY_6))); + + _L ("l3cd %s%s%s("NM_HASH_OBFUSCATE_PTR_FMT", ifindex=%d%s%s%s%s)", + NM_PRINT_FMT_QUOTED (title, "\"", title, "\" ", ""), + NM_HASH_OBFUSCATE_PTR (self), + self->ifindex, + NM_PRINT_FMT_QUOTED2 (self->source != NM_IP_CONFIG_SOURCE_UNKNOWN, + ", source=", + nmp_utils_ip_config_source_to_string (self->source, sbuf, sizeof (sbuf)), + ""), + NM_FLAGS_HAS (self->flags, NM_L3_CONFIG_DAT_FLAGS_IGNORE_MERGE_NO_DEFAULT_ROUTES) + ? ", merge-no-default-routes" + : "", + !self->is_sealed ? ", not-sealed" : ""); + + if ( self->mtu != 0 + || self->ip6_mtu != 0) { + _L ("mtu: %u, ip6-mtu: %u", + self->mtu, + self->ip6_mtu); + } + + for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) { + const int addr_family = IS_IPv4 ? AF_INET : AF_INET6; + NMDedupMultiIter iter; + const NMPObject *obj; + + i = 0; + nm_l3_config_data_iter_obj_for_each (&iter, self, &obj, NMP_OBJECT_TYPE_IP_ADDRESS (IS_IPv4)) { + _L ("address%c[%u]: %s", + nm_utils_addr_family_to_char (addr_family), + i, + nmp_object_to_string (obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof (sbuf))); + i++; + } + + if (!IS_IPv4) { + if (self->ip6_privacy != NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN) { + gs_free char *s = NULL; + + _L ("ip6-privacy: %s", + (s = _nm_utils_enum_to_str_full (nm_setting_ip6_config_privacy_get_type (), + self->ip6_privacy, + " ", + NULL))); + } + } + + i = 0; + nm_l3_config_data_iter_obj_for_each (&iter, self, &obj, NMP_OBJECT_TYPE_IP_ROUTE (IS_IPv4)) { + _L ("route%c[%u]: %s%s", + nm_utils_addr_family_to_char (addr_family), + i, + self->best_default_route_x[IS_IPv4] == obj ? "[DEFAULT] " : "", + nmp_object_to_string (obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof (sbuf))); + i++; + } + + if (self->route_table_sync_x[IS_IPv4] != NM_IP_ROUTE_TABLE_SYNC_MODE_NONE) { + _L ("route-table-sync-mode%c: %d", + nm_utils_addr_family_to_char (addr_family), + (int) self->route_table_sync_x[IS_IPv4]); + } + + if (!IS_IPv4) { + if ( self->ndisc_hop_limit_set + || self->ndisc_reachable_time_msec_set + || self->ndisc_retrans_timer_msec_set) { + gsize l = sizeof (sbuf); + char *p = sbuf; + const char *s_prefix = "ndisc: "; + + if (self->ndisc_hop_limit_set) { + nm_utils_strbuf_append (&p, + &l, + "%shop-limit=%d", + s_prefix, + self->ndisc_hop_limit_val); + s_prefix = ", "; + } + if (self->ndisc_reachable_time_msec_set) { + nm_utils_strbuf_append (&p, + &l, + "%sreachable-time-msec=%u", + s_prefix, + self->ndisc_reachable_time_msec_val); + s_prefix = ", "; + } + if (self->ndisc_retrans_timer_msec_set) { + nm_utils_strbuf_append (&p, + &l, + "%sretrans-timer-msec=%u", + s_prefix, + self->ndisc_retrans_timer_msec_val); + s_prefix = ", "; + } + _L ("%s", sbuf); + } + } + + if (NM_FLAGS_ANY (self->flags, NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY (IS_IPv4))) { + _L ("dns-priority%c: %d", + nm_utils_addr_family_to_char (addr_family), + self->dns_priority_x[IS_IPv4]); + } + + for (i = 0; i < nm_g_array_len (self->nameservers_x[IS_IPv4]); i++) { + _L ("nameserver%c[%u]: %s", + nm_utils_addr_family_to_char (addr_family), + i, + nm_utils_inet_ntop (addr_family, + _garray_inaddr_at (self->nameservers_x[IS_IPv4], IS_IPv4, i), + sbuf_addr)); + } + + for (i = 0; i < nm_g_ptr_array_len (self->domains_x[IS_IPv4]); i++) { + _L ("domain%c[%u]: %s", + nm_utils_addr_family_to_char (addr_family), + i, + (const char *) self->domains_x[IS_IPv4]->pdata[i]); + } + + for (i = 0; i < nm_g_ptr_array_len (self->searches_x[IS_IPv4]); i++) { + _L ("search%c[%u]: %s", + nm_utils_addr_family_to_char (addr_family), + i, + (const char *) self->searches_x[IS_IPv4]->pdata[i]); + } + + for (i = 0; i < nm_g_ptr_array_len (self->dns_options_x[IS_IPv4]); i++) { + _L ("dns_option%c[%u]: %s", + nm_utils_addr_family_to_char (addr_family), + i, + (const char *) self->dns_options_x[IS_IPv4]->pdata[i]); + } + + if (IS_IPv4) { + for (i = 0; i < nm_g_array_len (self->wins); i++) { + _L ("wins[%u]: %s", + i, + _nm_utils_inet4_ntop (g_array_index (self->wins, in_addr_t, i), sbuf_addr)); + } + for (i = 0; i < nm_g_array_len (self->nis_servers); i++) { + _L ("nis-server[%u]: %s", + i, + _nm_utils_inet4_ntop (g_array_index (self->nis_servers, in_addr_t, i), sbuf_addr)); + } + if (self->nis_domain) + _L ("nis-domain: %s", self->nis_domain); + } + + if (self->dhcp_lease_x[IS_IPv4]) { + gs_free NMUtilsNamedValue *options_free = NULL; + NMUtilsNamedValue options_buffer[30]; + NMUtilsNamedValue *options; + guint options_len; + + options = nm_utils_named_values_from_strdict (nm_dhcp_lease_get_options (self->dhcp_lease_x[IS_IPv4]), + &options_len, + options_buffer, + &options_free); + if (options_len == 0) { + _L ("dhcp-lease%c (%u options)", + nm_utils_addr_family_to_char (addr_family), + options_len); + } + for (i = 0; i < options_len; i++) { + _L ("dhcp-lease%c[%u]: \"%s\" => \"%s\"", + nm_utils_addr_family_to_char (addr_family), + i, + options[i].name, + options[i].value_str); + } + } + } + + if (self->mdns != NM_SETTING_CONNECTION_MDNS_DEFAULT) { + gs_free char *s = NULL; + + _L ("mdns: %s", + (s = _nm_utils_enum_to_str_full (nm_setting_connection_mdns_get_type (), + self->mdns, + " ", + NULL))); + } + + if (self->llmnr != NM_SETTING_CONNECTION_LLMNR_DEFAULT) { + gs_free char *s = NULL; + + _L ("llmnr: %s", + (s = _nm_utils_enum_to_str_full (nm_setting_connection_llmnr_get_type (), + self->llmnr, + " ", + NULL))); + } + + if (self->metered != NM_TERNARY_DEFAULT) { + _L ("metered: %s", + self->metered + ? "yes" + : "no"); + } + +#undef _L +} + +/*****************************************************************************/ + static gboolean _route_valid_4 (const NMPlatformIP4Route *r) { @@ -1345,6 +1604,9 @@ nm_l3_config_data_set_metered (NML3ConfigData *self, NMTernary metered) { nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE)); + nm_assert (NM_IN_SET (metered, NM_TERNARY_DEFAULT, + NM_TERNARY_FALSE, + NM_TERNARY_TRUE)); if (self->metered == metered) return FALSE; diff --git a/src/nm-l3-config-data.h b/src/nm-l3-config-data.h index 1f3a33eaac..cd1930110c 100644 --- a/src/nm-l3-config-data.h +++ b/src/nm-l3-config-data.h @@ -153,6 +153,14 @@ void nm_l3_config_data_add_dependent_routes (NML3ConfigData *self, /*****************************************************************************/ +void nm_l3_config_data_log (const NML3ConfigData *self, + const char *title, + const char *prefix, + NMLogLevel log_level, + NMLogDomain log_domain); + +/*****************************************************************************/ + int nm_l3_config_data_get_ifindex (const NML3ConfigData *self); static inline gboolean |