summaryrefslogtreecommitdiff
path: root/src/nm-l3-config-data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-l3-config-data.c')
-rw-r--r--src/nm-l3-config-data.c4104
1 files changed, 2012 insertions, 2092 deletions
diff --git a/src/nm-l3-config-data.c b/src/nm-l3-config-data.c
index 4d2b99eba7..323e6236b3 100644
--- a/src/nm-l3-config-data.c
+++ b/src/nm-l3-config-data.c
@@ -18,564 +18,546 @@
/*****************************************************************************/
typedef struct {
- NMDedupMultiIdxType parent;
- NMPObjectType obj_type;
+ NMDedupMultiIdxType parent;
+ NMPObjectType obj_type;
} DedupMultiIdxType;
struct _NML3ConfigData {
- NMDedupMultiIndex *multi_idx;
-
- union {
- struct {
- DedupMultiIdxType idx_addresses_6;
- DedupMultiIdxType idx_addresses_4;
- };
- DedupMultiIdxType idx_addresses_x[2];
- };
-
- union {
- struct {
- DedupMultiIdxType idx_routes_6;
- DedupMultiIdxType idx_routes_4;
- };
- DedupMultiIdxType idx_routes_x[2];
- };
-
- union {
- struct {
- const NMPObject *best_default_route_6;
- const NMPObject *best_default_route_4;
- };
- const NMPObject *best_default_route_x[2];
- };
-
- GArray *wins;
- GArray *nis_servers;
-
- char *nis_domain;
-
- union {
- struct {
- NMDhcpLease *dhcp_lease_6;
- NMDhcpLease *dhcp_lease_4;
- };
- NMDhcpLease *dhcp_lease_x[2];
- };
-
- union {
- struct {
- GArray *nameservers_6;
- GArray *nameservers_4;
- };
- GArray *nameservers_x[2];
- };
-
- union {
- struct {
- GPtrArray *domains_6;
- GPtrArray *domains_4;
- };
- GPtrArray *domains_x[2];
- };
-
- union {
- struct {
- GPtrArray *searches_6;
- GPtrArray *searches_4;
- };
- GPtrArray *searches_x[2];
- };
-
- union {
- struct {
- GPtrArray *dns_options_6;
- GPtrArray *dns_options_4;
- };
- GPtrArray *dns_options_x[2];
- };
-
- int ifindex;
-
- int ref_count;
-
- union {
- struct {
- int dns_priority_6;
- int dns_priority_4;
- };
- int dns_priority_x[2];
- };
-
- union {
- struct {
- NMIPRouteTableSyncMode route_table_sync_6;
- NMIPRouteTableSyncMode route_table_sync_4;
- };
- NMIPRouteTableSyncMode route_table_sync_x[2];
- };
-
- NMSettingConnectionMdns mdns;
- NMSettingConnectionLlmnr llmnr;
-
- NML3ConfigDatFlags flags;
-
- NMIPConfigSource source;
-
- int ndisc_hop_limit_val;
-
- guint32 mtu;
- guint32 ip6_mtu;
- guint32 ndisc_reachable_time_msec_val;
- guint32 ndisc_retrans_timer_msec_val;
-
- NMTernary metered:3;
-
- NMSettingIP6ConfigPrivacy ip6_privacy:4;
-
- bool is_sealed:1;
-
- bool has_routes_with_type_local_4_set:1;
- bool has_routes_with_type_local_6_set:1;
- bool has_routes_with_type_local_4_val:1;
- bool has_routes_with_type_local_6_val:1;
-
- bool ndisc_hop_limit_set:1;
- bool ndisc_reachable_time_msec_set:1;
- bool ndisc_retrans_timer_msec_set:1;
+ NMDedupMultiIndex *multi_idx;
+
+ union {
+ struct {
+ DedupMultiIdxType idx_addresses_6;
+ DedupMultiIdxType idx_addresses_4;
+ };
+ DedupMultiIdxType idx_addresses_x[2];
+ };
+
+ union {
+ struct {
+ DedupMultiIdxType idx_routes_6;
+ DedupMultiIdxType idx_routes_4;
+ };
+ DedupMultiIdxType idx_routes_x[2];
+ };
+
+ union {
+ struct {
+ const NMPObject *best_default_route_6;
+ const NMPObject *best_default_route_4;
+ };
+ const NMPObject *best_default_route_x[2];
+ };
+
+ GArray *wins;
+ GArray *nis_servers;
+
+ char *nis_domain;
+
+ union {
+ struct {
+ NMDhcpLease *dhcp_lease_6;
+ NMDhcpLease *dhcp_lease_4;
+ };
+ NMDhcpLease *dhcp_lease_x[2];
+ };
+
+ union {
+ struct {
+ GArray *nameservers_6;
+ GArray *nameservers_4;
+ };
+ GArray *nameservers_x[2];
+ };
+
+ union {
+ struct {
+ GPtrArray *domains_6;
+ GPtrArray *domains_4;
+ };
+ GPtrArray *domains_x[2];
+ };
+
+ union {
+ struct {
+ GPtrArray *searches_6;
+ GPtrArray *searches_4;
+ };
+ GPtrArray *searches_x[2];
+ };
+
+ union {
+ struct {
+ GPtrArray *dns_options_6;
+ GPtrArray *dns_options_4;
+ };
+ GPtrArray *dns_options_x[2];
+ };
+
+ int ifindex;
+
+ int ref_count;
+
+ union {
+ struct {
+ int dns_priority_6;
+ int dns_priority_4;
+ };
+ int dns_priority_x[2];
+ };
+
+ union {
+ struct {
+ NMIPRouteTableSyncMode route_table_sync_6;
+ NMIPRouteTableSyncMode route_table_sync_4;
+ };
+ NMIPRouteTableSyncMode route_table_sync_x[2];
+ };
+
+ NMSettingConnectionMdns mdns;
+ NMSettingConnectionLlmnr llmnr;
+
+ NML3ConfigDatFlags flags;
+
+ NMIPConfigSource source;
+
+ int ndisc_hop_limit_val;
+
+ guint32 mtu;
+ guint32 ip6_mtu;
+ guint32 ndisc_reachable_time_msec_val;
+ guint32 ndisc_retrans_timer_msec_val;
+
+ NMTernary metered : 3;
+
+ NMSettingIP6ConfigPrivacy ip6_privacy : 4;
+
+ bool is_sealed : 1;
+
+ bool has_routes_with_type_local_4_set : 1;
+ bool has_routes_with_type_local_6_set : 1;
+ bool has_routes_with_type_local_4_val : 1;
+ bool has_routes_with_type_local_6_val : 1;
+
+ bool ndisc_hop_limit_set : 1;
+ bool ndisc_reachable_time_msec_set : 1;
+ bool ndisc_retrans_timer_msec_set : 1;
};
/*****************************************************************************/
static GArray *
-_garray_inaddr_ensure (GArray **p_arr,
- int addr_family)
+_garray_inaddr_ensure(GArray **p_arr, int addr_family)
{
- nm_assert (p_arr);
- nm_assert_addr_family (addr_family);
+ nm_assert(p_arr);
+ nm_assert_addr_family(addr_family);
- if (G_UNLIKELY (!*p_arr)) {
- *p_arr = g_array_new (FALSE,
- FALSE,
- nm_utils_addr_family_to_size (addr_family));
- }
- return *p_arr;
+ if (G_UNLIKELY(!*p_arr)) {
+ *p_arr = g_array_new(FALSE, FALSE, nm_utils_addr_family_to_size(addr_family));
+ }
+ return *p_arr;
}
static GArray *
-_garray_inaddr_clone (const GArray *src,
- int addr_family)
+_garray_inaddr_clone(const GArray *src, int addr_family)
{
- const gsize elt_size = nm_utils_addr_family_to_size (addr_family);
- GArray *dst;
+ const gsize elt_size = nm_utils_addr_family_to_size(addr_family);
+ GArray * dst;
- nm_assert_addr_family (addr_family);
+ nm_assert_addr_family(addr_family);
- if ( !src
- || src->len == 0)
- return NULL;
+ if (!src || src->len == 0)
+ return NULL;
- dst = g_array_sized_new (FALSE, FALSE, elt_size, src->len);
- g_array_set_size (dst, src->len);
- memcpy (dst->data, src->data, src->len * elt_size);
- return dst;
+ dst = g_array_sized_new(FALSE, FALSE, elt_size, src->len);
+ g_array_set_size(dst, src->len);
+ memcpy(dst->data, src->data, src->len * elt_size);
+ return dst;
}
static void
-_garray_inaddr_merge (GArray **p_dst,
- const GArray *src,
- int addr_family)
-{
- guint dst_initial_len;
- const char *p_dst_arr;
- const char *p_src;
- gsize elt_size;
- guint i;
- guint j;
-
- if (nm_g_array_len (src) == 0)
- return;
-
- if (!*p_dst) {
- *p_dst = _garray_inaddr_clone (src, addr_family);
- return;
- }
-
- elt_size = nm_utils_addr_family_to_size (addr_family);
-
- dst_initial_len = (*p_dst)->len;
- p_dst_arr = (*p_dst)->data;
- p_src = src->data;
-
- for (i = 0; i < src->len; i++, p_src += elt_size) {
- for (j = 0; j < dst_initial_len; j++) {
- if (memcmp (&p_dst_arr[j * elt_size], p_src, elt_size) == 0)
- goto next;
- }
- g_array_append_vals (*p_dst, p_src, 1);
- p_dst_arr = (*p_dst)->data;
-next:
- ;
- }
+_garray_inaddr_merge(GArray **p_dst, const GArray *src, int addr_family)
+{
+ guint dst_initial_len;
+ const char *p_dst_arr;
+ const char *p_src;
+ gsize elt_size;
+ guint i;
+ guint j;
+
+ if (nm_g_array_len(src) == 0)
+ return;
+
+ if (!*p_dst) {
+ *p_dst = _garray_inaddr_clone(src, addr_family);
+ return;
+ }
+
+ elt_size = nm_utils_addr_family_to_size(addr_family);
+
+ dst_initial_len = (*p_dst)->len;
+ p_dst_arr = (*p_dst)->data;
+ p_src = src->data;
+
+ for (i = 0; i < src->len; i++, p_src += elt_size) {
+ for (j = 0; j < dst_initial_len; j++) {
+ if (memcmp(&p_dst_arr[j * elt_size], p_src, elt_size) == 0)
+ goto next;
+ }
+ g_array_append_vals(*p_dst, p_src, 1);
+ p_dst_arr = (*p_dst)->data;
+next:;
+ }
}
static gssize
-_garray_inaddr_find (GArray *arr,
- int addr_family,
- gconstpointer needle,
- /* (const NMIPAddr **) */ gpointer out_addr)
+_garray_inaddr_find(GArray * arr,
+ int addr_family,
+ gconstpointer needle,
+ /* (const NMIPAddr **) */ gpointer out_addr)
{
- guint i;
+ guint i;
- nm_assert_addr_family (addr_family);
- nm_assert (needle);
+ nm_assert_addr_family(addr_family);
+ nm_assert(needle);
- if (arr) {
- const gsize elt_size = nm_utils_addr_family_to_size (addr_family);
- const char *p;
+ if (arr) {
+ const gsize elt_size = nm_utils_addr_family_to_size(addr_family);
+ const char *p;
- p = arr->data;
- for (i = 0; i < arr->len; i++, p += elt_size) {
- if (memcmp (p, needle, elt_size) == 0) {
- NM_SET_OUT ((gconstpointer *) out_addr, p);
- return i;
- }
- }
- }
- NM_SET_OUT ((gconstpointer *) out_addr, NULL);
- return -1;
+ p = arr->data;
+ for (i = 0; i < arr->len; i++, p += elt_size) {
+ if (memcmp(p, needle, elt_size) == 0) {
+ NM_SET_OUT((gconstpointer *) out_addr, p);
+ return i;
+ }
+ }
+ }
+ NM_SET_OUT((gconstpointer *) out_addr, NULL);
+ return -1;
}
static gconstpointer
-_garray_inaddr_get (GArray *arr,
- guint *out_len)
+_garray_inaddr_get(GArray *arr, guint *out_len)
{
- nm_assert (out_len);
+ nm_assert(out_len);
- if (!arr) {
- *out_len = 0;
- return NULL;
- }
- *out_len = arr->len;
- return arr->data;
+ if (!arr) {
+ *out_len = 0;
+ return NULL;
+ }
+ *out_len = arr->len;
+ return arr->data;
}
static gconstpointer
-_garray_inaddr_at (GArray *arr,
- guint idx,
- gboolean IS_IPv4)
+_garray_inaddr_at(GArray *arr, guint idx, gboolean IS_IPv4)
{
- nm_assert (arr);
- nm_assert (idx < arr->len);
+ 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);
+ 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,
- gconstpointer addr)
+_garray_inaddr_add(GArray **p_arr, int addr_family, gconstpointer addr)
{
- nm_assert (p_arr);
- nm_assert_addr_family (addr_family);
- nm_assert (addr);
+ nm_assert(p_arr);
+ nm_assert_addr_family(addr_family);
+ nm_assert(addr);
- if (!*p_arr)
- _garray_inaddr_ensure (p_arr, addr_family);
- else {
- if (_garray_inaddr_find (*p_arr, addr_family, addr, NULL) >= 0)
- return FALSE;
- }
+ if (!*p_arr)
+ _garray_inaddr_ensure(p_arr, addr_family);
+ else {
+ if (_garray_inaddr_find(*p_arr, addr_family, addr, NULL) >= 0)
+ return FALSE;
+ }
- g_array_append_vals (*p_arr, addr, 1);
- return TRUE;
+ g_array_append_vals(*p_arr, addr, 1);
+ return TRUE;
}
static int
-_garray_inaddr_cmp (const GArray *a, const GArray *b, int addr_family)
+_garray_inaddr_cmp(const GArray *a, const GArray *b, int addr_family)
{
- guint l;
+ guint l;
- l = nm_g_array_len (a);
- NM_CMP_DIRECT (l, nm_g_array_len (b));
+ l = nm_g_array_len(a);
+ NM_CMP_DIRECT(l, nm_g_array_len(b));
- if (l > 0)
- NM_CMP_DIRECT_MEMCMP (a->data, b->data, l * nm_utils_addr_family_to_size (addr_family));
+ if (l > 0)
+ NM_CMP_DIRECT_MEMCMP(a->data, b->data, l * nm_utils_addr_family_to_size(addr_family));
- return 0;
+ return 0;
}
static void
-_strv_ptrarray_merge (GPtrArray **p_dst, const GPtrArray *src)
+_strv_ptrarray_merge(GPtrArray **p_dst, const GPtrArray *src)
{
- guint dst_initial_len;
- guint i;
+ guint dst_initial_len;
+ guint i;
- if (nm_g_ptr_array_len (src) == 0)
- return;
+ if (nm_g_ptr_array_len(src) == 0)
+ return;
- if (!*p_dst) {
- /* we trust src to contain unique strings. Just clone it. */
- *p_dst = nm_strv_ptrarray_clone (src, TRUE);
- return;
- }
+ if (!*p_dst) {
+ /* we trust src to contain unique strings. Just clone it. */
+ *p_dst = nm_strv_ptrarray_clone(src, TRUE);
+ return;
+ }
- nm_strv_ptrarray_ensure (p_dst);
+ nm_strv_ptrarray_ensure(p_dst);
- dst_initial_len = (*p_dst)->len;
+ dst_initial_len = (*p_dst)->len;
- for (i = 0; i < src->len; i++) {
- const char *s = src->pdata[i];
+ for (i = 0; i < src->len; i++) {
+ const char *s = src->pdata[i];
- if ( dst_initial_len > 0
- && nm_utils_strv_find_first ((char **) ((*p_dst)->pdata), dst_initial_len, s) >= 0)
- continue;
+ if (dst_initial_len > 0
+ && nm_utils_strv_find_first((char **) ((*p_dst)->pdata), dst_initial_len, s) >= 0)
+ continue;
- g_ptr_array_add (*p_dst, g_strdup (s));
- }
+ g_ptr_array_add(*p_dst, g_strdup(s));
+ }
}
/*****************************************************************************/
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");
- }
+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
}
@@ -583,1412 +565,1351 @@ nm_l3_config_data_log (const NML3ConfigData *self,
/*****************************************************************************/
static gboolean
-_route_valid_4 (const NMPlatformIP4Route *r)
+_route_valid_4(const NMPlatformIP4Route *r)
{
- return r
- && r->plen <= 32
- && r->network == nm_utils_ip4_address_clear_host_address (r->network, r->plen);
+ return r && r->plen <= 32
+ && r->network == nm_utils_ip4_address_clear_host_address(r->network, r->plen);
}
static gboolean
-_route_valid_6 (const NMPlatformIP6Route *r)
+_route_valid_6(const NMPlatformIP6Route *r)
{
- struct in6_addr n;
+ struct in6_addr n;
- return r
- && r->plen <= 128
- && (memcmp (&r->network,
- nm_utils_ip6_address_clear_host_address (&n, &r->network, r->plen),
- sizeof (n)) == 0);
+ return r && r->plen <= 128
+ && (memcmp(&r->network,
+ nm_utils_ip6_address_clear_host_address(&n, &r->network, r->plen),
+ sizeof(n))
+ == 0);
}
static gboolean
-_route_valid (int addr_family, gconstpointer r)
+_route_valid(int addr_family, gconstpointer r)
{
- nm_assert_addr_family (addr_family);
+ nm_assert_addr_family(addr_family);
- return addr_family == AF_INET
- ? _route_valid_4 (r)
- : _route_valid_6 (r);
+ return addr_family == AF_INET ? _route_valid_4(r) : _route_valid_6(r);
}
static gboolean
-_NM_IS_L3_CONFIG_DATA (const NML3ConfigData *self, gboolean allow_sealed)
+_NM_IS_L3_CONFIG_DATA(const NML3ConfigData *self, gboolean allow_sealed)
{
- nm_assert ( !self
- || ( self->ifindex > 0
- && self->multi_idx
- && self->ref_count > 0));
- return self
- && self->ref_count > 0
- && ( allow_sealed
- || !self->is_sealed);
+ nm_assert(!self || (self->ifindex > 0 && self->multi_idx && self->ref_count > 0));
+ return self && self->ref_count > 0 && (allow_sealed || !self->is_sealed);
}
static void
-_idx_obj_id_hash_update (const NMDedupMultiIdxType *idx_type,
- const NMDedupMultiObj *obj,
- NMHashState *h)
+_idx_obj_id_hash_update(const NMDedupMultiIdxType *idx_type,
+ const NMDedupMultiObj * obj,
+ NMHashState * h)
{
- nmp_object_id_hash_update ((NMPObject *) obj, h);
+ nmp_object_id_hash_update((NMPObject *) obj, h);
}
static gboolean
-_idx_obj_id_equal (const NMDedupMultiIdxType *idx_type,
- const NMDedupMultiObj *obj_a,
- const NMDedupMultiObj *obj_b)
+_idx_obj_id_equal(const NMDedupMultiIdxType *idx_type,
+ const NMDedupMultiObj * obj_a,
+ const NMDedupMultiObj * obj_b)
{
- return nmp_object_id_equal ((NMPObject *) obj_a, (NMPObject *) obj_b);
+ return nmp_object_id_equal((NMPObject *) obj_a, (NMPObject *) obj_b);
}
static void
-_idx_type_init (DedupMultiIdxType *idx_type,
- NMPObjectType obj_type)
+_idx_type_init(DedupMultiIdxType *idx_type, NMPObjectType obj_type)
{
- static const NMDedupMultiIdxTypeClass idx_type_class = {
- .idx_obj_id_hash_update = _idx_obj_id_hash_update,
- .idx_obj_id_equal = _idx_obj_id_equal,
- };
+ static const NMDedupMultiIdxTypeClass idx_type_class = {
+ .idx_obj_id_hash_update = _idx_obj_id_hash_update,
+ .idx_obj_id_equal = _idx_obj_id_equal,
+ };
- nm_dedup_multi_idx_type_init (&idx_type->parent,
- &idx_type_class);
- idx_type->obj_type = obj_type;
+ nm_dedup_multi_idx_type_init(&idx_type->parent, &idx_type_class);
+ idx_type->obj_type = obj_type;
}
NML3ConfigData *
-nm_l3_config_data_new (NMDedupMultiIndex *multi_idx,
- int ifindex)
-{
- NML3ConfigData *self;
-
- nm_assert (multi_idx);
- nm_assert (ifindex > 0);
-
- self = g_slice_new (NML3ConfigData);
- *self = (NML3ConfigData) {
- .ref_count = 1,
- .ifindex = ifindex,
- .multi_idx = nm_dedup_multi_index_ref (multi_idx),
- .mdns = NM_SETTING_CONNECTION_MDNS_DEFAULT,
- .llmnr = NM_SETTING_CONNECTION_LLMNR_DEFAULT,
- .flags = NM_L3_CONFIG_DAT_FLAGS_NONE,
- .metered = NM_TERNARY_DEFAULT,
- .route_table_sync_4 = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE,
- .route_table_sync_6 = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE,
- .source = NM_IP_CONFIG_SOURCE_UNKNOWN,
- .ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
- .ndisc_hop_limit_set = FALSE,
- .ndisc_reachable_time_msec_set = FALSE,
- .ndisc_retrans_timer_msec_set = FALSE,
- };
-
- _idx_type_init (&self->idx_addresses_4, NMP_OBJECT_TYPE_IP4_ADDRESS);
- _idx_type_init (&self->idx_addresses_6, NMP_OBJECT_TYPE_IP6_ADDRESS);
- _idx_type_init (&self->idx_routes_4, NMP_OBJECT_TYPE_IP4_ROUTE);
- _idx_type_init (&self->idx_routes_6, NMP_OBJECT_TYPE_IP6_ROUTE);
-
- return self;
+nm_l3_config_data_new(NMDedupMultiIndex *multi_idx, int ifindex)
+{
+ NML3ConfigData *self;
+
+ nm_assert(multi_idx);
+ nm_assert(ifindex > 0);
+
+ self = g_slice_new(NML3ConfigData);
+ *self = (NML3ConfigData){
+ .ref_count = 1,
+ .ifindex = ifindex,
+ .multi_idx = nm_dedup_multi_index_ref(multi_idx),
+ .mdns = NM_SETTING_CONNECTION_MDNS_DEFAULT,
+ .llmnr = NM_SETTING_CONNECTION_LLMNR_DEFAULT,
+ .flags = NM_L3_CONFIG_DAT_FLAGS_NONE,
+ .metered = NM_TERNARY_DEFAULT,
+ .route_table_sync_4 = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE,
+ .route_table_sync_6 = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE,
+ .source = NM_IP_CONFIG_SOURCE_UNKNOWN,
+ .ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
+ .ndisc_hop_limit_set = FALSE,
+ .ndisc_reachable_time_msec_set = FALSE,
+ .ndisc_retrans_timer_msec_set = FALSE,
+ };
+
+ _idx_type_init(&self->idx_addresses_4, NMP_OBJECT_TYPE_IP4_ADDRESS);
+ _idx_type_init(&self->idx_addresses_6, NMP_OBJECT_TYPE_IP6_ADDRESS);
+ _idx_type_init(&self->idx_routes_4, NMP_OBJECT_TYPE_IP4_ROUTE);
+ _idx_type_init(&self->idx_routes_6, NMP_OBJECT_TYPE_IP6_ROUTE);
+
+ return self;
}
const NML3ConfigData *
-nm_l3_config_data_ref (const NML3ConfigData *self)
+nm_l3_config_data_ref(const NML3ConfigData *self)
{
- if (self) {
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- ((NML3ConfigData *) self)->ref_count++;
- }
- return self;
+ if (self) {
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ ((NML3ConfigData *) self)->ref_count++;
+ }
+ return self;
}
const NML3ConfigData *
-nm_l3_config_data_ref_and_seal (const NML3ConfigData *self)
+nm_l3_config_data_ref_and_seal(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- ((NML3ConfigData *) self)->is_sealed = TRUE;
- ((NML3ConfigData *) self)->ref_count++;
- return self;
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ ((NML3ConfigData *) self)->is_sealed = TRUE;
+ ((NML3ConfigData *) self)->ref_count++;
+ return self;
}
const NML3ConfigData *
-nm_l3_config_data_seal (const NML3ConfigData *self)
+nm_l3_config_data_seal(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- ((NML3ConfigData *) self)->is_sealed = TRUE;
- return self;
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ ((NML3ConfigData *) self)->is_sealed = TRUE;
+ return self;
}
gboolean
-nm_l3_config_data_is_sealed (const NML3ConfigData *self)
+nm_l3_config_data_is_sealed(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- return self->is_sealed;
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ return self->is_sealed;
}
void
-nm_l3_config_data_unref (const NML3ConfigData *self)
+nm_l3_config_data_unref(const NML3ConfigData *self)
{
- NML3ConfigData *mutable;
+ NML3ConfigData *mutable;
- if (!self)
- return;
+ if (!self)
+ return;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- /* NML3ConfigData aims to be an immutable, ref-counted type. The mode of operation
+ /* NML3ConfigData aims to be an immutable, ref-counted type. The mode of operation
* is to create/initialize the instance once, then seal it and pass around the reference.
*
* That means, also ref/unref operate on const pointers (otherwise, you'd have to cast all
* the time). Hence, we cast away the constness during ref/unref/seal operations. */
- mutable = (NML3ConfigData *) self;
+ mutable = (NML3ConfigData *) self;
- if (--mutable->ref_count > 0)
- return;
+ if (--mutable->ref_count > 0)
+ return;
- nm_dedup_multi_index_remove_idx (mutable->multi_idx, &mutable->idx_addresses_4.parent);
- nm_dedup_multi_index_remove_idx (mutable->multi_idx, &mutable->idx_addresses_6.parent);
- nm_dedup_multi_index_remove_idx (mutable->multi_idx, &mutable->idx_routes_4.parent);
- nm_dedup_multi_index_remove_idx (mutable->multi_idx, &mutable->idx_routes_6.parent);
+ nm_dedup_multi_index_remove_idx(mutable->multi_idx, &mutable->idx_addresses_4.parent);
+ nm_dedup_multi_index_remove_idx(mutable->multi_idx, &mutable->idx_addresses_6.parent);
+ nm_dedup_multi_index_remove_idx(mutable->multi_idx, &mutable->idx_routes_4.parent);
+ nm_dedup_multi_index_remove_idx(mutable->multi_idx, &mutable->idx_routes_6.parent);
- nmp_object_unref (mutable->best_default_route_4);
- nmp_object_unref (mutable->best_default_route_6);
+ nmp_object_unref(mutable->best_default_route_4);
+ nmp_object_unref(mutable->best_default_route_6);
- nm_clear_pointer (&mutable->wins, g_array_unref);
- nm_clear_pointer (&mutable->nis_servers, g_array_unref);
+ nm_clear_pointer(&mutable->wins, g_array_unref);
+ nm_clear_pointer(&mutable->nis_servers, g_array_unref);
- nm_clear_pointer (&mutable->dhcp_lease_4, nm_dhcp_lease_unref);
- nm_clear_pointer (&mutable->dhcp_lease_6, nm_dhcp_lease_unref);
+ nm_clear_pointer(&mutable->dhcp_lease_4, nm_dhcp_lease_unref);
+ nm_clear_pointer(&mutable->dhcp_lease_6, nm_dhcp_lease_unref);
- nm_clear_pointer (&mutable->nameservers_4, g_array_unref);
- nm_clear_pointer (&mutable->nameservers_6, g_array_unref);
+ nm_clear_pointer(&mutable->nameservers_4, g_array_unref);
+ nm_clear_pointer(&mutable->nameservers_6, g_array_unref);
- nm_clear_pointer (&mutable->domains_4, g_ptr_array_unref);
- nm_clear_pointer (&mutable->domains_6, g_ptr_array_unref);
+ nm_clear_pointer(&mutable->domains_4, g_ptr_array_unref);
+ nm_clear_pointer(&mutable->domains_6, g_ptr_array_unref);
- nm_clear_pointer (&mutable->searches_4, g_ptr_array_unref);
- nm_clear_pointer (&mutable->searches_6, g_ptr_array_unref);
+ nm_clear_pointer(&mutable->searches_4, g_ptr_array_unref);
+ nm_clear_pointer(&mutable->searches_6, g_ptr_array_unref);
- nm_clear_pointer (&mutable->dns_options_4, g_ptr_array_unref);
- nm_clear_pointer (&mutable->dns_options_6, g_ptr_array_unref);
+ nm_clear_pointer(&mutable->dns_options_4, g_ptr_array_unref);
+ nm_clear_pointer(&mutable->dns_options_6, g_ptr_array_unref);
- nm_dedup_multi_index_unref (mutable->multi_idx);
+ nm_dedup_multi_index_unref(mutable->multi_idx);
- g_free (mutable->nis_domain);
+ g_free(mutable->nis_domain);
- nm_g_slice_free (mutable);
+ nm_g_slice_free(mutable);
}
/*****************************************************************************/
static const NMDedupMultiEntry *
-_lookup_route (const NMDedupMultiIndex *multi_idx,
- const DedupMultiIdxType *idx_type,
- const NMPObject *needle)
+_lookup_route(const NMDedupMultiIndex *multi_idx,
+ const DedupMultiIdxType *idx_type,
+ const NMPObject * needle)
{
- const NMDedupMultiEntry *entry;
+ const NMDedupMultiEntry *entry;
- nm_assert (multi_idx);
- nm_assert (idx_type);
- nm_assert (NM_IN_SET (idx_type->obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE));
- nm_assert (NMP_OBJECT_GET_TYPE (needle) == idx_type->obj_type);
+ nm_assert(multi_idx);
+ nm_assert(idx_type);
+ nm_assert(NM_IN_SET(idx_type->obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE));
+ nm_assert(NMP_OBJECT_GET_TYPE(needle) == idx_type->obj_type);
- entry = nm_dedup_multi_index_lookup_obj (multi_idx,
- &idx_type->parent,
- needle);
- nm_assert ( !entry
- || ( NMP_OBJECT_GET_TYPE (needle) == NMP_OBJECT_TYPE_IP4_ROUTE
- && nm_platform_ip4_route_cmp (NMP_OBJECT_CAST_IP4_ROUTE (entry->obj), NMP_OBJECT_CAST_IP4_ROUTE (needle), NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID) == 0)
- || ( NMP_OBJECT_GET_TYPE (needle) == NMP_OBJECT_TYPE_IP6_ROUTE
- && nm_platform_ip6_route_cmp (NMP_OBJECT_CAST_IP6_ROUTE (entry->obj), NMP_OBJECT_CAST_IP6_ROUTE (needle), NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID) == 0));
+ entry = nm_dedup_multi_index_lookup_obj(multi_idx, &idx_type->parent, needle);
+ nm_assert(!entry
+ || (NMP_OBJECT_GET_TYPE(needle) == NMP_OBJECT_TYPE_IP4_ROUTE
+ && nm_platform_ip4_route_cmp(NMP_OBJECT_CAST_IP4_ROUTE(entry->obj),
+ NMP_OBJECT_CAST_IP4_ROUTE(needle),
+ NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID)
+ == 0)
+ || (NMP_OBJECT_GET_TYPE(needle) == NMP_OBJECT_TYPE_IP6_ROUTE
+ && nm_platform_ip6_route_cmp(NMP_OBJECT_CAST_IP6_ROUTE(entry->obj),
+ NMP_OBJECT_CAST_IP6_ROUTE(needle),
+ NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID)
+ == 0));
- return entry;
+ return entry;
}
const NMDedupMultiEntry *
-nm_l3_config_data_lookup_route_obj (const NML3ConfigData *self,
- const NMPObject *needle)
+nm_l3_config_data_lookup_route_obj(const NML3ConfigData *self, const NMPObject *needle)
{
- gboolean IS_IPv4;
+ gboolean IS_IPv4;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- nm_assert (NM_IN_SET (NMP_OBJECT_GET_TYPE (needle), NMP_OBJECT_TYPE_IP4_ROUTE,
- NMP_OBJECT_TYPE_IP6_ROUTE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ nm_assert(NM_IN_SET(NMP_OBJECT_GET_TYPE(needle),
+ NMP_OBJECT_TYPE_IP4_ROUTE,
+ NMP_OBJECT_TYPE_IP6_ROUTE));
- IS_IPv4 = NM_IS_IPv4 (NMP_OBJECT_GET_ADDR_FAMILY (needle));
- return _lookup_route (self->multi_idx,
- &self->idx_routes_x[IS_IPv4],
- needle);
+ IS_IPv4 = NM_IS_IPv4(NMP_OBJECT_GET_ADDR_FAMILY(needle));
+ return _lookup_route(self->multi_idx, &self->idx_routes_x[IS_IPv4], needle);
}
const NMDedupMultiEntry *
-nm_l3_config_data_lookup_route (const NML3ConfigData *self,
- int addr_family,
- const NMPlatformIPRoute *needle)
+nm_l3_config_data_lookup_route(const NML3ConfigData * self,
+ int addr_family,
+ const NMPlatformIPRoute *needle)
{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
- NMPObject obj_stack;
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
+ NMPObject obj_stack;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- nm_assert_addr_family (addr_family);
- nm_assert (needle);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ nm_assert_addr_family(addr_family);
+ nm_assert(needle);
- return _lookup_route (self->multi_idx,
- &self->idx_routes_x[IS_IPv4],
- nmp_object_stackinit (&obj_stack, NMP_OBJECT_TYPE_IP_ROUTE (IS_IPv4), needle));
+ return _lookup_route(
+ self->multi_idx,
+ &self->idx_routes_x[IS_IPv4],
+ nmp_object_stackinit(&obj_stack, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4), needle));
}
const NMDedupMultiIdxType *
-nm_l3_config_data_lookup_index (const NML3ConfigData *self, NMPObjectType obj_type)
+nm_l3_config_data_lookup_index(const NML3ConfigData *self, NMPObjectType obj_type)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- switch (obj_type) {
- case NMP_OBJECT_TYPE_IP4_ADDRESS:
- return &self->idx_addresses_4.parent;
- case NMP_OBJECT_TYPE_IP6_ADDRESS:
- return &self->idx_addresses_6.parent;
- case NMP_OBJECT_TYPE_IP4_ROUTE:
- return &self->idx_routes_4.parent;
- case NMP_OBJECT_TYPE_IP6_ROUTE:
- return &self->idx_routes_6.parent;
- default:
- return nm_assert_unreachable_val (NULL);
- }
+ switch (obj_type) {
+ case NMP_OBJECT_TYPE_IP4_ADDRESS:
+ return &self->idx_addresses_4.parent;
+ case NMP_OBJECT_TYPE_IP6_ADDRESS:
+ return &self->idx_addresses_6.parent;
+ case NMP_OBJECT_TYPE_IP4_ROUTE:
+ return &self->idx_routes_4.parent;
+ case NMP_OBJECT_TYPE_IP6_ROUTE:
+ return &self->idx_routes_6.parent;
+ default:
+ return nm_assert_unreachable_val(NULL);
+ }
}
const NMDedupMultiHeadEntry *
-nm_l3_config_data_lookup_objs (const NML3ConfigData *self, NMPObjectType obj_type)
+nm_l3_config_data_lookup_objs(const NML3ConfigData *self, NMPObjectType obj_type)
{
- if (!self)
- return NULL;
- return nm_dedup_multi_index_lookup_head (self->multi_idx,
- nm_l3_config_data_lookup_index (self, obj_type),
- NULL);
+ if (!self)
+ return NULL;
+ return nm_dedup_multi_index_lookup_head(self->multi_idx,
+ nm_l3_config_data_lookup_index(self, obj_type),
+ NULL);
}
const NMDedupMultiEntry *
-nm_l3_config_data_lookup_obj (const NML3ConfigData *self,
- const NMPObject *obj)
+nm_l3_config_data_lookup_obj(const NML3ConfigData *self, const NMPObject *obj)
{
- const NMDedupMultiIdxType *idx;
+ const NMDedupMultiIdxType *idx;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- idx = nm_l3_config_data_lookup_index (self,
- NMP_OBJECT_GET_TYPE (obj));
+ idx = nm_l3_config_data_lookup_index(self, NMP_OBJECT_GET_TYPE(obj));
- return nm_dedup_multi_index_lookup_obj (self->multi_idx,
- idx,
- obj);
+ return nm_dedup_multi_index_lookup_obj(self->multi_idx, idx, obj);
}
const NMPlatformIP6Address *
-nm_l3_config_data_lookup_address_6 (const NML3ConfigData *self,
- const struct in6_addr *addr)
+nm_l3_config_data_lookup_address_6(const NML3ConfigData *self, const struct in6_addr *addr)
{
- const NMDedupMultiEntry *head;
- NMPObject obj_stack;
+ const NMDedupMultiEntry *head;
+ NMPObject obj_stack;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- /* this works only, because the primary key for a Ipv6 address is the
+ /* this works only, because the primary key for a Ipv6 address is the
* ifindex and the "struct in6_addr". */
- nmp_object_stackinit_id_ip6_address (&obj_stack,
- self->ifindex,
- addr);
+ nmp_object_stackinit_id_ip6_address(&obj_stack, self->ifindex, addr);
- head = nm_l3_config_data_lookup_obj (self, &obj_stack);
- if (!head)
- return NULL;
+ head = nm_l3_config_data_lookup_obj(self, &obj_stack);
+ if (!head)
+ return NULL;
- return NMP_OBJECT_CAST_IP6_ADDRESS (head->obj);
+ return NMP_OBJECT_CAST_IP6_ADDRESS(head->obj);
}
const NMPObject *
-nmtst_l3_config_data_get_obj_at (const NML3ConfigData *self,
- NMPObjectType obj_type,
- guint i)
+nmtst_l3_config_data_get_obj_at(const NML3ConfigData *self, NMPObjectType obj_type, guint i)
{
- NMDedupMultiIter iter;
- guint j;
+ NMDedupMultiIter iter;
+ guint j;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- j = 0;
- nm_dedup_multi_iter_init (&iter,
- nm_l3_config_data_lookup_objs (self, obj_type));
- while (nm_dedup_multi_iter_next (&iter)) {
- nm_assert (iter.current);
- nm_assert (NMP_OBJECT_GET_TYPE (iter.current->obj) == obj_type);
- if (i == j)
- return iter.current->obj;
- j++;
- }
+ j = 0;
+ nm_dedup_multi_iter_init(&iter, nm_l3_config_data_lookup_objs(self, obj_type));
+ while (nm_dedup_multi_iter_next(&iter)) {
+ nm_assert(iter.current);
+ nm_assert(NMP_OBJECT_GET_TYPE(iter.current->obj) == obj_type);
+ if (i == j)
+ return iter.current->obj;
+ j++;
+ }
- g_return_val_if_reached (NULL);
+ g_return_val_if_reached(NULL);
}
/*****************************************************************************/
gboolean
-nm_l3_config_data_has_routes_with_type_local (const NML3ConfigData *self, int addr_family)
-{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
- NML3ConfigData *self_mutable;
- NMDedupMultiIter iter;
- const NMPObject *obj;
- gboolean val;
-
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- nm_assert_addr_family (addr_family);
-
- if (IS_IPv4) {
- if (G_LIKELY (self->has_routes_with_type_local_4_set))
- return self->has_routes_with_type_local_4_val;
- } else {
- if (G_LIKELY (self->has_routes_with_type_local_6_set))
- return self->has_routes_with_type_local_6_val;
- }
-
- val = FALSE;
- nm_l3_config_data_iter_obj_for_each (&iter, self, &obj, NMP_OBJECT_TYPE_IP_ROUTE (IS_IPv4)) {
- if (NMP_OBJECT_CAST_IP_ROUTE (obj)->type_coerced == nm_platform_route_type_coerce (RTN_LOCAL)) {
- val = TRUE;
- break;
- }
- }
-
- /* the value gets accumulated and cached. Doing that is also permissible to a
+nm_l3_config_data_has_routes_with_type_local(const NML3ConfigData *self, int addr_family)
+{
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
+ NML3ConfigData * self_mutable;
+ NMDedupMultiIter iter;
+ const NMPObject *obj;
+ gboolean val;
+
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ nm_assert_addr_family(addr_family);
+
+ if (IS_IPv4) {
+ if (G_LIKELY(self->has_routes_with_type_local_4_set))
+ return self->has_routes_with_type_local_4_val;
+ } else {
+ if (G_LIKELY(self->has_routes_with_type_local_6_set))
+ return self->has_routes_with_type_local_6_val;
+ }
+
+ val = FALSE;
+ nm_l3_config_data_iter_obj_for_each(&iter, self, &obj, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))
+ {
+ if (NMP_OBJECT_CAST_IP_ROUTE(obj)->type_coerced
+ == nm_platform_route_type_coerce(RTN_LOCAL)) {
+ val = TRUE;
+ break;
+ }
+ }
+
+ /* the value gets accumulated and cached. Doing that is also permissible to a
* const/sealed instance. Hence, we cast the const-ness away. */
- self_mutable = (NML3ConfigData *) self;
- if (IS_IPv4) {
- self_mutable->has_routes_with_type_local_4_set = TRUE;
- self_mutable->has_routes_with_type_local_4_val = val;
- } else {
- self_mutable->has_routes_with_type_local_6_set = TRUE;
- self_mutable->has_routes_with_type_local_6_val = val;
- }
+ self_mutable = (NML3ConfigData *) self;
+ if (IS_IPv4) {
+ self_mutable->has_routes_with_type_local_4_set = TRUE;
+ self_mutable->has_routes_with_type_local_4_val = val;
+ } else {
+ self_mutable->has_routes_with_type_local_6_set = TRUE;
+ self_mutable->has_routes_with_type_local_6_val = val;
+ }
- return val;
+ return val;
}
/*****************************************************************************/
NMDedupMultiIndex *
-nm_l3_config_data_get_multi_idx (const NML3ConfigData *self)
+nm_l3_config_data_get_multi_idx(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- return self->multi_idx;
+ return self->multi_idx;
}
int
-nm_l3_config_data_get_ifindex (const NML3ConfigData *self)
+nm_l3_config_data_get_ifindex(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- return self->ifindex;
+ return self->ifindex;
}
/*****************************************************************************/
NML3ConfigDatFlags
-nm_l3_config_data_get_flags (const NML3ConfigData *self)
+nm_l3_config_data_get_flags(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- return self->flags;
+ return self->flags;
}
void
-nm_l3_config_data_set_flags_full (NML3ConfigData *self,
- NML3ConfigDatFlags flags,
- NML3ConfigDatFlags mask)
+nm_l3_config_data_set_flags_full(NML3ConfigData * self,
+ NML3ConfigDatFlags flags,
+ NML3ConfigDatFlags mask)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert (!NM_FLAGS_ANY (flags, ~mask));
- nm_assert (!NM_FLAGS_ANY (mask, ~NM_L3_CONFIG_DAT_FLAGS_IGNORE_MERGE_NO_DEFAULT_ROUTES));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert(!NM_FLAGS_ANY(flags, ~mask));
+ nm_assert(!NM_FLAGS_ANY(mask, ~NM_L3_CONFIG_DAT_FLAGS_IGNORE_MERGE_NO_DEFAULT_ROUTES));
- self->flags = (self->flags & ~mask)
- | (flags & mask);
+ self->flags = (self->flags & ~mask) | (flags & mask);
}
/*****************************************************************************/
const NMPObject *
-nm_l3_config_data_get_first_obj (const NML3ConfigData *self,
- NMPObjectType obj_type,
- gboolean (*predicate) (const NMPObject *obj))
+nm_l3_config_data_get_first_obj(const NML3ConfigData *self,
+ NMPObjectType obj_type,
+ gboolean (*predicate)(const NMPObject *obj))
{
- NMDedupMultiIter iter;
- const NMPObject *obj;
+ NMDedupMultiIter iter;
+ const NMPObject *obj;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- nm_l3_config_data_iter_obj_for_each (&iter, self, &obj, obj_type) {
- if ( !predicate
- || predicate (obj))
- return obj;
- }
- return NULL;
+ nm_l3_config_data_iter_obj_for_each(&iter, self, &obj, obj_type)
+ {
+ if (!predicate || predicate(obj))
+ return obj;
+ }
+ return NULL;
}
/*****************************************************************************/
static gboolean
-_l3_config_data_add_obj (NMDedupMultiIndex *multi_idx,
- DedupMultiIdxType *idx_type,
- int ifindex,
- const NMPObject *obj_new,
- const NMPlatformObject *pl_new,
- NML3ConfigAddFlags add_flags,
- const NMPObject **out_obj_old /* returns a reference! */,
- const NMPObject **out_obj_new /* does not return a reference */)
-{
- NMPObject obj_new_stackinit;
- const NMDedupMultiEntry *entry_old;
- const NMDedupMultiEntry *entry_new;
-
- nm_assert (nm_utils_is_power_of_two_or_zero (add_flags & ( NM_L3_CONFIG_ADD_FLAGS_MERGE
- | NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE)));
- nm_assert (multi_idx);
- nm_assert (idx_type);
- nm_assert (ifindex > 0);
- nm_assert (NM_IN_SET (idx_type->obj_type, NMP_OBJECT_TYPE_IP4_ADDRESS,
- NMP_OBJECT_TYPE_IP4_ROUTE,
- NMP_OBJECT_TYPE_IP6_ADDRESS,
- NMP_OBJECT_TYPE_IP6_ROUTE));
- /* we go through extra lengths to accept a full obj_new object. That one,
+_l3_config_data_add_obj(NMDedupMultiIndex * multi_idx,
+ DedupMultiIdxType * idx_type,
+ int ifindex,
+ const NMPObject * obj_new,
+ const NMPlatformObject *pl_new,
+ NML3ConfigAddFlags add_flags,
+ const NMPObject ** out_obj_old /* returns a reference! */,
+ const NMPObject ** out_obj_new /* does not return a reference */)
+{
+ NMPObject obj_new_stackinit;
+ const NMDedupMultiEntry *entry_old;
+ const NMDedupMultiEntry *entry_new;
+
+ nm_assert(nm_utils_is_power_of_two_or_zero(
+ add_flags & (NM_L3_CONFIG_ADD_FLAGS_MERGE | NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE)));
+ nm_assert(multi_idx);
+ nm_assert(idx_type);
+ nm_assert(ifindex > 0);
+ nm_assert(NM_IN_SET(idx_type->obj_type,
+ NMP_OBJECT_TYPE_IP4_ADDRESS,
+ NMP_OBJECT_TYPE_IP4_ROUTE,
+ NMP_OBJECT_TYPE_IP6_ADDRESS,
+ NMP_OBJECT_TYPE_IP6_ROUTE));
+ /* we go through extra lengths to accept a full obj_new object. That one,
* can be reused by increasing the ref-count. */
- if (!obj_new) {
- nm_assert (pl_new);
- obj_new = nmp_object_stackinit (&obj_new_stackinit, idx_type->obj_type, pl_new);
- NMP_OBJECT_CAST_OBJ_WITH_IFINDEX (&obj_new_stackinit)->ifindex = ifindex;
- } else {
- nm_assert (!pl_new);
- nm_assert (NMP_OBJECT_GET_TYPE (obj_new) == idx_type->obj_type);
- if (NMP_OBJECT_CAST_OBJ_WITH_IFINDEX (obj_new)->ifindex != ifindex) {
- obj_new = nmp_object_stackinit_obj (&obj_new_stackinit, obj_new);
- NMP_OBJECT_CAST_OBJ_WITH_IFINDEX (&obj_new_stackinit)->ifindex = ifindex;
- }
- }
- nm_assert (NMP_OBJECT_GET_TYPE (obj_new) == idx_type->obj_type);
- nm_assert (nmp_object_is_alive (obj_new));
-
- entry_old = nm_dedup_multi_index_lookup_obj (multi_idx, &idx_type->parent, obj_new);
-
- if (entry_old) {
- gboolean modified = FALSE;
- const NMPObject *obj_old = entry_old->obj;
-
- if (NM_FLAGS_HAS (add_flags, NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE)) {
- nm_dedup_multi_entry_set_dirty (entry_old, FALSE);
- goto append_force_and_out;
- }
-
- if (nmp_object_equal (obj_new, obj_old)) {
- nm_dedup_multi_entry_set_dirty (entry_old, FALSE);
- goto append_force_and_out;
- }
-
- if (NM_FLAGS_HAS (add_flags, NM_L3_CONFIG_ADD_FLAGS_MERGE)) {
- switch (idx_type->obj_type) {
- case NMP_OBJECT_TYPE_IP4_ADDRESS:
- case NMP_OBJECT_TYPE_IP6_ADDRESS:
- /* for addresses that we read from the kernel, we keep the timestamps as defined
+ if (!obj_new) {
+ nm_assert(pl_new);
+ obj_new = nmp_object_stackinit(&obj_new_stackinit, idx_type->obj_type, pl_new);
+ NMP_OBJECT_CAST_OBJ_WITH_IFINDEX(&obj_new_stackinit)->ifindex = ifindex;
+ } else {
+ nm_assert(!pl_new);
+ nm_assert(NMP_OBJECT_GET_TYPE(obj_new) == idx_type->obj_type);
+ if (NMP_OBJECT_CAST_OBJ_WITH_IFINDEX(obj_new)->ifindex != ifindex) {
+ obj_new = nmp_object_stackinit_obj(&obj_new_stackinit, obj_new);
+ NMP_OBJECT_CAST_OBJ_WITH_IFINDEX(&obj_new_stackinit)->ifindex = ifindex;
+ }
+ }
+ nm_assert(NMP_OBJECT_GET_TYPE(obj_new) == idx_type->obj_type);
+ nm_assert(nmp_object_is_alive(obj_new));
+
+ entry_old = nm_dedup_multi_index_lookup_obj(multi_idx, &idx_type->parent, obj_new);
+
+ if (entry_old) {
+ gboolean modified = FALSE;
+ const NMPObject *obj_old = entry_old->obj;
+
+ if (NM_FLAGS_HAS(add_flags, NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE)) {
+ nm_dedup_multi_entry_set_dirty(entry_old, FALSE);
+ goto append_force_and_out;
+ }
+
+ if (nmp_object_equal(obj_new, obj_old)) {
+ nm_dedup_multi_entry_set_dirty(entry_old, FALSE);
+ goto append_force_and_out;
+ }
+
+ if (NM_FLAGS_HAS(add_flags, NM_L3_CONFIG_ADD_FLAGS_MERGE)) {
+ switch (idx_type->obj_type) {
+ case NMP_OBJECT_TYPE_IP4_ADDRESS:
+ case NMP_OBJECT_TYPE_IP6_ADDRESS:
+ /* for addresses that we read from the kernel, we keep the timestamps as defined
* by the previous source (item_old). The reason is, that the other source configured the lifetimes
* with "what should be" and the kernel values are "what turned out after configuring it".
*
* For other sources, the longer lifetime wins. */
- if ( ( obj_new->ip_address.addr_source == NM_IP_CONFIG_SOURCE_KERNEL
- && obj_old->ip_address.addr_source != NM_IP_CONFIG_SOURCE_KERNEL)
- || nm_platform_ip_address_cmp_expiry (NMP_OBJECT_CAST_IP_ADDRESS (obj_old), NMP_OBJECT_CAST_IP_ADDRESS(obj_new)) > 0) {
- obj_new = nmp_object_stackinit_obj (&obj_new_stackinit, obj_new);
- obj_new_stackinit.ip_address.timestamp = NMP_OBJECT_CAST_IP_ADDRESS (obj_old)->timestamp;
- obj_new_stackinit.ip_address.lifetime = NMP_OBJECT_CAST_IP_ADDRESS (obj_old)->lifetime;
- obj_new_stackinit.ip_address.preferred = NMP_OBJECT_CAST_IP_ADDRESS (obj_old)->preferred;
- modified = TRUE;
- }
-
- /* keep the maximum addr_source. */
- if (obj_new->ip_address.addr_source < obj_old->ip_address.addr_source) {
- obj_new = nmp_object_stackinit_obj (&obj_new_stackinit, obj_new);
- obj_new_stackinit.ip_address.addr_source = obj_old->ip_address.addr_source;
- modified = TRUE;
- }
- break;
- case NMP_OBJECT_TYPE_IP4_ROUTE:
- case NMP_OBJECT_TYPE_IP6_ROUTE:
- /* keep the maximum rt_source. */
- if (obj_new->ip_route.rt_source < obj_old->ip_route.rt_source) {
- obj_new = nmp_object_stackinit_obj (&obj_new_stackinit, obj_new);
- obj_new_stackinit.ip_route.rt_source = obj_old->ip_route.rt_source;
- modified = TRUE;
- }
- break;
- default:
- nm_assert_not_reached ();
- break;
- }
-
- if ( modified
- && nmp_object_equal (obj_new, obj_old)) {
- nm_dedup_multi_entry_set_dirty (entry_old, FALSE);
- goto append_force_and_out;
- }
- }
- }
-
- if (!nm_dedup_multi_index_add_full (multi_idx,
- &idx_type->parent,
- obj_new,
- NM_FLAGS_HAS (add_flags, NM_L3_CONFIG_ADD_FLAGS_APPEND_FORCE)
- ? NM_DEDUP_MULTI_IDX_MODE_APPEND_FORCE
- : NM_DEDUP_MULTI_IDX_MODE_APPEND,
- NULL,
- entry_old ?: NM_DEDUP_MULTI_ENTRY_MISSING,
- NULL,
- &entry_new,
- out_obj_old)) {
- nm_assert_not_reached ();
- NM_SET_OUT (out_obj_new, NULL);
- return FALSE;
- }
-
- NM_SET_OUT (out_obj_new, entry_new->obj);
- return TRUE;
+ if ((obj_new->ip_address.addr_source == NM_IP_CONFIG_SOURCE_KERNEL
+ && obj_old->ip_address.addr_source != NM_IP_CONFIG_SOURCE_KERNEL)
+ || nm_platform_ip_address_cmp_expiry(NMP_OBJECT_CAST_IP_ADDRESS(obj_old),
+ NMP_OBJECT_CAST_IP_ADDRESS(obj_new))
+ > 0) {
+ obj_new = nmp_object_stackinit_obj(&obj_new_stackinit, obj_new);
+ obj_new_stackinit.ip_address.timestamp =
+ NMP_OBJECT_CAST_IP_ADDRESS(obj_old)->timestamp;
+ obj_new_stackinit.ip_address.lifetime =
+ NMP_OBJECT_CAST_IP_ADDRESS(obj_old)->lifetime;
+ obj_new_stackinit.ip_address.preferred =
+ NMP_OBJECT_CAST_IP_ADDRESS(obj_old)->preferred;
+ modified = TRUE;
+ }
+
+ /* keep the maximum addr_source. */
+ if (obj_new->ip_address.addr_source < obj_old->ip_address.addr_source) {
+ obj_new = nmp_object_stackinit_obj(&obj_new_stackinit, obj_new);
+ obj_new_stackinit.ip_address.addr_source = obj_old->ip_address.addr_source;
+ modified = TRUE;
+ }
+ break;
+ case NMP_OBJECT_TYPE_IP4_ROUTE:
+ case NMP_OBJECT_TYPE_IP6_ROUTE:
+ /* keep the maximum rt_source. */
+ if (obj_new->ip_route.rt_source < obj_old->ip_route.rt_source) {
+ obj_new = nmp_object_stackinit_obj(&obj_new_stackinit, obj_new);
+ obj_new_stackinit.ip_route.rt_source = obj_old->ip_route.rt_source;
+ modified = TRUE;
+ }
+ break;
+ default:
+ nm_assert_not_reached();
+ break;
+ }
+
+ if (modified && nmp_object_equal(obj_new, obj_old)) {
+ nm_dedup_multi_entry_set_dirty(entry_old, FALSE);
+ goto append_force_and_out;
+ }
+ }
+ }
+
+ if (!nm_dedup_multi_index_add_full(multi_idx,
+ &idx_type->parent,
+ obj_new,
+ NM_FLAGS_HAS(add_flags, NM_L3_CONFIG_ADD_FLAGS_APPEND_FORCE)
+ ? NM_DEDUP_MULTI_IDX_MODE_APPEND_FORCE
+ : NM_DEDUP_MULTI_IDX_MODE_APPEND,
+ NULL,
+ entry_old ?: NM_DEDUP_MULTI_ENTRY_MISSING,
+ NULL,
+ &entry_new,
+ out_obj_old)) {
+ nm_assert_not_reached();
+ NM_SET_OUT(out_obj_new, NULL);
+ return FALSE;
+ }
+
+ NM_SET_OUT(out_obj_new, entry_new->obj);
+ return TRUE;
append_force_and_out:
- NM_SET_OUT (out_obj_old, nmp_object_ref (entry_old->obj));
- NM_SET_OUT (out_obj_new, entry_old->obj);
- if (NM_FLAGS_HAS (add_flags, NM_L3_CONFIG_ADD_FLAGS_APPEND_FORCE)) {
- if (nm_dedup_multi_entry_reorder (entry_old, NULL, TRUE))
- return TRUE;
- }
- return FALSE;
+ NM_SET_OUT(out_obj_old, nmp_object_ref(entry_old->obj));
+ NM_SET_OUT(out_obj_new, entry_old->obj);
+ if (NM_FLAGS_HAS(add_flags, NM_L3_CONFIG_ADD_FLAGS_APPEND_FORCE)) {
+ if (nm_dedup_multi_entry_reorder(entry_old, NULL, TRUE))
+ return TRUE;
+ }
+ return FALSE;
}
static const NMPObject *
-_l3_config_best_default_route_find_better (const NMPObject *obj_cur, const NMPObject *obj_cmp)
-{
- nm_assert ( !obj_cur
- || NM_IN_SET (NMP_OBJECT_GET_TYPE (obj_cur), NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE));
- nm_assert ( !obj_cmp
- || ( !obj_cur
- && NM_IN_SET (NMP_OBJECT_GET_TYPE (obj_cmp), NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE))
- || NMP_OBJECT_GET_TYPE (obj_cur) == NMP_OBJECT_GET_TYPE (obj_cmp));
- nm_assert ( !obj_cur
- || nmp_object_ip_route_is_best_defaut_route (obj_cur));
-
- /* assumes that @obj_cur is already the best default route (or NULL). It checks whether
+_l3_config_best_default_route_find_better(const NMPObject *obj_cur, const NMPObject *obj_cmp)
+{
+ nm_assert(!obj_cur
+ || NM_IN_SET(NMP_OBJECT_GET_TYPE(obj_cur),
+ NMP_OBJECT_TYPE_IP4_ROUTE,
+ NMP_OBJECT_TYPE_IP6_ROUTE));
+ nm_assert(!obj_cmp
+ || (!obj_cur
+ && NM_IN_SET(NMP_OBJECT_GET_TYPE(obj_cmp),
+ NMP_OBJECT_TYPE_IP4_ROUTE,
+ NMP_OBJECT_TYPE_IP6_ROUTE))
+ || NMP_OBJECT_GET_TYPE(obj_cur) == NMP_OBJECT_GET_TYPE(obj_cmp));
+ nm_assert(!obj_cur || nmp_object_ip_route_is_best_defaut_route(obj_cur));
+
+ /* assumes that @obj_cur is already the best default route (or NULL). It checks whether
* @obj_cmp is also a default route and returns the best of both. */
- if ( obj_cmp
- && nmp_object_ip_route_is_best_defaut_route (obj_cmp)) {
- guint32 metric_cur, metric_cmp;
+ if (obj_cmp && nmp_object_ip_route_is_best_defaut_route(obj_cmp)) {
+ guint32 metric_cur, metric_cmp;
- if (!obj_cur)
- return obj_cmp;
+ if (!obj_cur)
+ return obj_cmp;
- if (obj_cur == obj_cmp)
- return obj_cmp;
+ if (obj_cur == obj_cmp)
+ return obj_cmp;
- metric_cur = NMP_OBJECT_CAST_IP_ROUTE (obj_cur)->metric;
- metric_cmp = NMP_OBJECT_CAST_IP_ROUTE (obj_cmp)->metric;
+ metric_cur = NMP_OBJECT_CAST_IP_ROUTE(obj_cur)->metric;
+ metric_cmp = NMP_OBJECT_CAST_IP_ROUTE(obj_cmp)->metric;
- if (metric_cmp < metric_cur)
- return obj_cmp;
+ if (metric_cmp < metric_cur)
+ return obj_cmp;
- if (metric_cmp == metric_cur) {
- int c;
+ if (metric_cmp == metric_cur) {
+ int c;
- /* Routes have the same metric. We still want to deterministically
+ /* Routes have the same metric. We still want to deterministically
* prefer one or the other. It's important to consistently choose one
* or the other, so that the order doesn't matter how routes are added
* (and merged). */
- c = nmp_object_cmp (obj_cur, obj_cmp);
- if (c != 0)
- return c < 0 ? obj_cur : obj_cmp;
+ c = nmp_object_cmp(obj_cur, obj_cmp);
+ if (c != 0)
+ return c < 0 ? obj_cur : obj_cmp;
- /* as last resort, compare pointers. */
- if (((uintptr_t) ((void *) (obj_cmp))) < ((uintptr_t) ((void *) (obj_cur))))
- return obj_cmp;
- }
- }
- return obj_cur;
+ /* as last resort, compare pointers. */
+ if (((uintptr_t)((void *) (obj_cmp))) < ((uintptr_t)((void *) (obj_cur))))
+ return obj_cmp;
+ }
+ }
+ return obj_cur;
}
gboolean
-nm_l3_config_data_add_address_full (NML3ConfigData *self,
- int addr_family,
- const NMPObject *obj_new,
- const NMPlatformIPAddress *pl_new,
- NML3ConfigAddFlags add_flags,
- const NMPObject **out_obj_new)
-{
- const NMPObject *new;
- gboolean changed;
-
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
- nm_assert ((!pl_new) != (!obj_new));
- nm_assert ( !obj_new
- || NMP_OBJECT_GET_ADDR_FAMILY (obj_new) == addr_family);
-
- changed = _l3_config_data_add_obj (self->multi_idx,
- addr_family == AF_INET
- ? &self->idx_addresses_4
- : &self->idx_addresses_6,
- self->ifindex,
- obj_new,
- (const NMPlatformObject *) pl_new,
- add_flags,
- NULL,
- &new);
- NM_SET_OUT (out_obj_new, nmp_object_ref (new));
- return changed;
+nm_l3_config_data_add_address_full(NML3ConfigData * self,
+ int addr_family,
+ const NMPObject * obj_new,
+ const NMPlatformIPAddress *pl_new,
+ NML3ConfigAddFlags add_flags,
+ const NMPObject ** out_obj_new)
+{
+ const NMPObject *new;
+ gboolean changed;
+
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
+ nm_assert((!pl_new) != (!obj_new));
+ nm_assert(!obj_new || NMP_OBJECT_GET_ADDR_FAMILY(obj_new) == addr_family);
+
+ changed = _l3_config_data_add_obj(self->multi_idx,
+ addr_family == AF_INET ? &self->idx_addresses_4
+ : &self->idx_addresses_6,
+ self->ifindex,
+ obj_new,
+ (const NMPlatformObject *) pl_new,
+ add_flags,
+ NULL,
+ &new);
+ NM_SET_OUT(out_obj_new, nmp_object_ref(new));
+ return changed;
}
static gboolean
-_l3_config_best_default_route_merge (const NMPObject **best_default_route, const NMPObject *new_candidate)
+_l3_config_best_default_route_merge(const NMPObject **best_default_route,
+ const NMPObject * new_candidate)
{
- new_candidate = _l3_config_best_default_route_find_better (*best_default_route,
- new_candidate);
- return nmp_object_ref_set (best_default_route, new_candidate);
+ new_candidate = _l3_config_best_default_route_find_better(*best_default_route, new_candidate);
+ return nmp_object_ref_set(best_default_route, new_candidate);
}
gboolean
-nm_l3_config_data_add_route_full (NML3ConfigData *self,
- int addr_family,
- const NMPObject *obj_new,
- const NMPlatformIPRoute *pl_new,
- NML3ConfigAddFlags add_flags,
- const NMPObject **out_obj_new,
- gboolean *out_changed_best_default_route)
-{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
- nm_auto_nmpobj const NMPObject *obj_old = NULL;
- const NMPObject *obj_new_2;
- gboolean changed = FALSE;
- gboolean changed_best_default_route = FALSE;
-
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
- nm_assert ((!pl_new) != (!obj_new));
- nm_assert ( !pl_new
- || _route_valid (addr_family, pl_new));
- nm_assert ( !obj_new
- || ( NMP_OBJECT_GET_ADDR_FAMILY (obj_new) == addr_family
- && _route_valid (addr_family, NMP_OBJECT_CAST_IP_ROUTE (obj_new))));
-
- if (IS_IPv4)
- self->has_routes_with_type_local_4_set = FALSE;
- else
- self->has_routes_with_type_local_6_set = FALSE;
- if (_l3_config_data_add_obj (self->multi_idx,
- addr_family == AF_INET
- ? &self->idx_routes_4
- : &self->idx_routes_6,
- self->ifindex,
- obj_new,
- (const NMPlatformObject *) pl_new,
- add_flags,
- &obj_old,
- &obj_new_2)) {
-
- if ( self->best_default_route_x[IS_IPv4] == obj_old
- && obj_old != obj_new_2) {
- changed_best_default_route = TRUE;
- nm_clear_nmp_object (&self->best_default_route_x[IS_IPv4]);
- }
-
- if (_l3_config_best_default_route_merge (&self->best_default_route_x[IS_IPv4],
- obj_new_2))
- changed_best_default_route = TRUE;
-
- changed = TRUE;
- }
-
- NM_SET_OUT (out_obj_new, nmp_object_ref (obj_new_2));
- NM_SET_OUT (out_changed_best_default_route, changed_best_default_route);
- return changed;
+nm_l3_config_data_add_route_full(NML3ConfigData * self,
+ int addr_family,
+ const NMPObject * obj_new,
+ const NMPlatformIPRoute *pl_new,
+ NML3ConfigAddFlags add_flags,
+ const NMPObject ** out_obj_new,
+ gboolean * out_changed_best_default_route)
+{
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
+ nm_auto_nmpobj const NMPObject *obj_old = NULL;
+ const NMPObject * obj_new_2;
+ gboolean changed = FALSE;
+ gboolean changed_best_default_route = FALSE;
+
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
+ nm_assert((!pl_new) != (!obj_new));
+ nm_assert(!pl_new || _route_valid(addr_family, pl_new));
+ nm_assert(!obj_new
+ || (NMP_OBJECT_GET_ADDR_FAMILY(obj_new) == addr_family
+ && _route_valid(addr_family, NMP_OBJECT_CAST_IP_ROUTE(obj_new))));
+
+ if (IS_IPv4)
+ self->has_routes_with_type_local_4_set = FALSE;
+ else
+ self->has_routes_with_type_local_6_set = FALSE;
+ if (_l3_config_data_add_obj(self->multi_idx,
+ addr_family == AF_INET ? &self->idx_routes_4 : &self->idx_routes_6,
+ self->ifindex,
+ obj_new,
+ (const NMPlatformObject *) pl_new,
+ add_flags,
+ &obj_old,
+ &obj_new_2)) {
+ if (self->best_default_route_x[IS_IPv4] == obj_old && obj_old != obj_new_2) {
+ changed_best_default_route = TRUE;
+ nm_clear_nmp_object(&self->best_default_route_x[IS_IPv4]);
+ }
+
+ if (_l3_config_best_default_route_merge(&self->best_default_route_x[IS_IPv4], obj_new_2))
+ changed_best_default_route = TRUE;
+
+ changed = TRUE;
+ }
+
+ NM_SET_OUT(out_obj_new, nmp_object_ref(obj_new_2));
+ NM_SET_OUT(out_changed_best_default_route, changed_best_default_route);
+ return changed;
}
const NMPObject *
-nm_l3_config_data_get_best_default_route (const NML3ConfigData *self,
- int addr_family)
+nm_l3_config_data_get_best_default_route(const NML3ConfigData *self, int addr_family)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ nm_assert_addr_family(addr_family);
- return self->best_default_route_x[NM_IS_IPv4 (addr_family)];
+ return self->best_default_route_x[NM_IS_IPv4(addr_family)];
}
/*****************************************************************************/
static gboolean
-_check_and_add_domain (GPtrArray **p_arr, const char *domain)
+_check_and_add_domain(GPtrArray **p_arr, const char *domain)
{
- gs_free char *copy = NULL;
- gsize len;
+ gs_free char *copy = NULL;
+ gsize len;
- nm_assert (p_arr);
- g_return_val_if_fail (domain, FALSE);
+ nm_assert(p_arr);
+ g_return_val_if_fail(domain, FALSE);
- if (domain[0] == '\0')
- return FALSE;
+ if (domain[0] == '\0')
+ return FALSE;
- if (domain[0] == '.' || strstr (domain, ".."))
- return FALSE;
+ if (domain[0] == '.' || strstr(domain, ".."))
+ return FALSE;
- len = strlen (domain);
- if (domain[len - 1] == '.') {
- copy = g_strndup (domain, len - 1);
- domain = copy;
- }
+ len = strlen(domain);
+ if (domain[len - 1] == '.') {
+ copy = g_strndup(domain, len - 1);
+ domain = copy;
+ }
- if (nm_strv_ptrarray_contains (*p_arr, domain))
- return FALSE;
+ if (nm_strv_ptrarray_contains(*p_arr, domain))
+ return FALSE;
- nm_strv_ptrarray_add_string_take (nm_strv_ptrarray_ensure (p_arr),
- g_steal_pointer (&copy)
- ?: g_strdup (domain));
- return TRUE;
+ nm_strv_ptrarray_add_string_take(nm_strv_ptrarray_ensure(p_arr),
+ g_steal_pointer(&copy) ?: g_strdup(domain));
+ return TRUE;
}
gconstpointer
-nm_l3_config_data_get_nameservers (const NML3ConfigData *self,
- int addr_family,
- guint *out_len)
+nm_l3_config_data_get_nameservers(const NML3ConfigData *self, int addr_family, guint *out_len)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- nm_assert_addr_family (addr_family);
- nm_assert (out_len);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ nm_assert_addr_family(addr_family);
+ nm_assert(out_len);
- return _garray_inaddr_get (self->nameservers_x[NM_IS_IPv4 (addr_family)], out_len);
+ return _garray_inaddr_get(self->nameservers_x[NM_IS_IPv4(addr_family)], out_len);
}
gboolean
-nm_l3_config_data_add_nameserver (NML3ConfigData *self,
- int addr_family,
- gconstpointer /* (const NMIPAddr *) */ nameserver)
+nm_l3_config_data_add_nameserver(NML3ConfigData * self,
+ int addr_family,
+ gconstpointer /* (const NMIPAddr *) */ nameserver)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
- nm_assert (nameserver);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
+ nm_assert(nameserver);
- return _garray_inaddr_add (&self->nameservers_x[NM_IS_IPv4 (addr_family)],
- addr_family,
- nameserver);
+ return _garray_inaddr_add(&self->nameservers_x[NM_IS_IPv4(addr_family)],
+ addr_family,
+ nameserver);
}
gboolean
-nm_l3_config_data_clear_nameservers (NML3ConfigData *self,
- int addr_family)
+nm_l3_config_data_clear_nameservers(NML3ConfigData *self, int addr_family)
{
- gs_unref_array GArray *old = NULL;
+ gs_unref_array GArray *old = NULL;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
- old = g_steal_pointer (&self->nameservers_x[NM_IS_IPv4 (addr_family)]);
- return (nm_g_array_len (old) > 0);
+ old = g_steal_pointer(&self->nameservers_x[NM_IS_IPv4(addr_family)]);
+ return (nm_g_array_len(old) > 0);
}
const in_addr_t *
-nm_l3_config_data_get_wins (const NML3ConfigData *self,
- guint *out_len)
+nm_l3_config_data_get_wins(const NML3ConfigData *self, guint *out_len)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- return _garray_inaddr_get (self->wins, out_len);
+ return _garray_inaddr_get(self->wins, out_len);
}
gboolean
-nm_l3_config_data_add_wins (NML3ConfigData *self,
- in_addr_t wins)
+nm_l3_config_data_add_wins(NML3ConfigData *self, in_addr_t wins)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- return _garray_inaddr_add (&self->wins,
- AF_INET,
- &wins);
+ return _garray_inaddr_add(&self->wins, AF_INET, &wins);
}
gboolean
-nm_l3_config_data_add_nis_server (NML3ConfigData *self,
- in_addr_t nis_server)
+nm_l3_config_data_add_nis_server(NML3ConfigData *self, in_addr_t nis_server)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- return _garray_inaddr_add (&self->nis_servers,
- AF_INET,
- &nis_server);
+ return _garray_inaddr_add(&self->nis_servers, AF_INET, &nis_server);
}
gboolean
-nm_l3_config_data_set_nis_domain (NML3ConfigData *self,
- const char *nis_domain)
+nm_l3_config_data_set_nis_domain(NML3ConfigData *self, const char *nis_domain)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- return nm_utils_strdup_reset (&self->nis_domain, nis_domain);
+ return nm_utils_strdup_reset(&self->nis_domain, nis_domain);
}
-const char *const*
-nm_l3_config_data_get_domains (const NML3ConfigData *self,
- int addr_family,
- guint *out_len)
+const char *const *
+nm_l3_config_data_get_domains(const NML3ConfigData *self, int addr_family, guint *out_len)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
- nm_assert (out_len);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
+ nm_assert(out_len);
- return nm_strv_ptrarray_get_unsafe (self->domains_x[NM_IS_IPv4 (addr_family)], out_len);
+ return nm_strv_ptrarray_get_unsafe(self->domains_x[NM_IS_IPv4(addr_family)], out_len);
}
gboolean
-nm_l3_config_data_add_domain (NML3ConfigData *self,
- int addr_family,
- const char *domain)
+nm_l3_config_data_add_domain(NML3ConfigData *self, int addr_family, const char *domain)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
- return _check_and_add_domain (&self->domains_x[NM_IS_IPv4 (addr_family)], domain);
+ return _check_and_add_domain(&self->domains_x[NM_IS_IPv4(addr_family)], domain);
}
-const char *const*
-nm_l3_config_data_get_searches (const NML3ConfigData *self,
- int addr_family,
- guint *out_len)
+const char *const *
+nm_l3_config_data_get_searches(const NML3ConfigData *self, int addr_family, guint *out_len)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- nm_assert_addr_family (addr_family);
- nm_assert (out_len);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ nm_assert_addr_family(addr_family);
+ nm_assert(out_len);
- return nm_strv_ptrarray_get_unsafe (self->searches_x[NM_IS_IPv4 (addr_family)], out_len);
+ return nm_strv_ptrarray_get_unsafe(self->searches_x[NM_IS_IPv4(addr_family)], out_len);
}
gboolean
-nm_l3_config_data_add_search (NML3ConfigData *self,
- int addr_family,
- const char *search)
+nm_l3_config_data_add_search(NML3ConfigData *self, int addr_family, const char *search)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
- return _check_and_add_domain (&self->searches_x[NM_IS_IPv4 (addr_family)], search);
+ return _check_and_add_domain(&self->searches_x[NM_IS_IPv4(addr_family)], search);
}
gboolean
-nm_l3_config_data_clear_searches (NML3ConfigData *self,
- int addr_family)
+nm_l3_config_data_clear_searches(NML3ConfigData *self, int addr_family)
{
- gs_unref_ptrarray GPtrArray *old = NULL;
+ gs_unref_ptrarray GPtrArray *old = NULL;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
- old = g_steal_pointer (&self->searches_x[NM_IS_IPv4 (addr_family)]);
- return (nm_g_ptr_array_len (old) > 0);
+ old = g_steal_pointer(&self->searches_x[NM_IS_IPv4(addr_family)]);
+ return (nm_g_ptr_array_len(old) > 0);
}
gboolean
-nm_l3_config_data_add_dns_option (NML3ConfigData *self,
- int addr_family,
- const char *dns_option)
+nm_l3_config_data_add_dns_option(NML3ConfigData *self, int addr_family, const char *dns_option)
{
- GPtrArray **p_arr;
+ GPtrArray **p_arr;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
- g_return_val_if_fail (dns_option, FALSE);
+ g_return_val_if_fail(dns_option, FALSE);
- if (dns_option[0] == '\0')
- return FALSE;
+ if (dns_option[0] == '\0')
+ return FALSE;
- p_arr = &self->dns_options_x[NM_IS_IPv4 (addr_family)];
+ p_arr = &self->dns_options_x[NM_IS_IPv4(addr_family)];
- if (nm_strv_ptrarray_contains (*p_arr, dns_option))
- return FALSE;
+ if (nm_strv_ptrarray_contains(*p_arr, dns_option))
+ return FALSE;
- nm_strv_ptrarray_add_string_dup (nm_strv_ptrarray_ensure (p_arr),
- dns_option);
- return TRUE;
+ nm_strv_ptrarray_add_string_dup(nm_strv_ptrarray_ensure(p_arr), dns_option);
+ return TRUE;
}
gboolean
-nm_l3_config_data_set_dns_priority (NML3ConfigData *self,
- int addr_family,
- int dns_priority)
+nm_l3_config_data_set_dns_priority(NML3ConfigData *self, int addr_family, int dns_priority)
{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
- const NML3ConfigDatFlags has_dns_priority_flag = NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY (IS_IPv4);
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
+ const NML3ConfigDatFlags has_dns_priority_flag =
+ NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY(IS_IPv4);
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
- if ( self->dns_priority_x[IS_IPv4] == dns_priority
- && NM_FLAGS_ANY (self->flags, has_dns_priority_flag))
- return FALSE;
+ if (self->dns_priority_x[IS_IPv4] == dns_priority
+ && NM_FLAGS_ANY(self->flags, has_dns_priority_flag))
+ return FALSE;
- self->flags |= has_dns_priority_flag;
- self->dns_priority_x[IS_IPv4] = dns_priority;
- return TRUE;
+ self->flags |= has_dns_priority_flag;
+ self->dns_priority_x[IS_IPv4] = dns_priority;
+ return TRUE;
}
gboolean
-nm_l3_config_data_set_mdns (NML3ConfigData *self,
- NMSettingConnectionMdns mdns)
+nm_l3_config_data_set_mdns(NML3ConfigData *self, NMSettingConnectionMdns mdns)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (self->mdns == mdns)
- return FALSE;
+ if (self->mdns == mdns)
+ return FALSE;
- self->mdns = mdns;
- return TRUE;
+ self->mdns = mdns;
+ return TRUE;
}
gboolean
-nm_l3_config_data_set_llmnr (NML3ConfigData *self,
- NMSettingConnectionLlmnr llmnr)
+nm_l3_config_data_set_llmnr(NML3ConfigData *self, NMSettingConnectionLlmnr llmnr)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (self->llmnr == llmnr)
- return FALSE;
+ if (self->llmnr == llmnr)
+ return FALSE;
- self->llmnr = llmnr;
- return TRUE;
+ self->llmnr = llmnr;
+ return TRUE;
}
NMIPRouteTableSyncMode
-nm_l3_config_data_get_route_table_sync (const NML3ConfigData *self,
- int addr_family)
+nm_l3_config_data_get_route_table_sync(const NML3ConfigData *self, int addr_family)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ nm_assert_addr_family(addr_family);
- return self->route_table_sync_x[NM_IS_IPv4 (addr_family)];
+ return self->route_table_sync_x[NM_IS_IPv4(addr_family)];
}
gboolean
-nm_l3_config_data_set_route_table_sync (NML3ConfigData *self,
- int addr_family,
- NMIPRouteTableSyncMode route_table_sync)
+nm_l3_config_data_set_route_table_sync(NML3ConfigData * self,
+ int addr_family,
+ NMIPRouteTableSyncMode route_table_sync)
{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
- if (self->route_table_sync_x[IS_IPv4] == route_table_sync)
- return FALSE;
+ if (self->route_table_sync_x[IS_IPv4] == route_table_sync)
+ return FALSE;
- self->route_table_sync_x [IS_IPv4] = route_table_sync;
- return TRUE;
+ self->route_table_sync_x[IS_IPv4] = route_table_sync;
+ return TRUE;
}
NMTernary
-nm_l3_config_data_get_metered (const NML3ConfigData *self)
+nm_l3_config_data_get_metered(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- return self->metered;
+ return self->metered;
}
gboolean
-nm_l3_config_data_set_metered (NML3ConfigData *self,
- NMTernary metered)
+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));
+ 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;
+ if (self->metered == metered)
+ return FALSE;
- self->metered = metered;
- return TRUE;
+ self->metered = metered;
+ return TRUE;
}
guint32
-nm_l3_config_data_get_mtu (const NML3ConfigData *self)
+nm_l3_config_data_get_mtu(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- return self->mtu;
+ return self->mtu;
}
gboolean
-nm_l3_config_data_set_mtu (NML3ConfigData *self,
- guint32 mtu)
+nm_l3_config_data_set_mtu(NML3ConfigData *self, guint32 mtu)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (self->mtu == mtu)
- return FALSE;
+ if (self->mtu == mtu)
+ return FALSE;
- self->mtu = mtu;
- return TRUE;
+ self->mtu = mtu;
+ return TRUE;
}
guint32
-nm_l3_config_data_get_ip6_mtu (const NML3ConfigData *self)
+nm_l3_config_data_get_ip6_mtu(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- return self->ip6_mtu;
+ return self->ip6_mtu;
}
gboolean
-nm_l3_config_data_set_ip6_mtu (NML3ConfigData *self,
- guint32 ip6_mtu)
+nm_l3_config_data_set_ip6_mtu(NML3ConfigData *self, guint32 ip6_mtu)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (self->ip6_mtu == ip6_mtu)
- return FALSE;
+ if (self->ip6_mtu == ip6_mtu)
+ return FALSE;
- self->ip6_mtu = ip6_mtu;
- return TRUE;
+ self->ip6_mtu = ip6_mtu;
+ return TRUE;
}
gboolean
-nm_l3_config_data_set_source (NML3ConfigData *self,
- NMIPConfigSource source)
+nm_l3_config_data_set_source(NML3ConfigData *self, NMIPConfigSource source)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (self->source == source)
- return FALSE;
+ if (self->source == source)
+ return FALSE;
- self->source = source;
- return TRUE;
+ self->source = source;
+ return TRUE;
}
NMSettingIP6ConfigPrivacy
-nm_l3_config_data_get_ip6_privacy (const NML3ConfigData *self)
+nm_l3_config_data_get_ip6_privacy(const NML3ConfigData *self)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- return self->ip6_privacy;
+ return self->ip6_privacy;
}
gboolean
-nm_l3_config_data_set_ip6_privacy (NML3ConfigData *self,
- NMSettingIP6ConfigPrivacy ip6_privacy)
+nm_l3_config_data_set_ip6_privacy(NML3ConfigData *self, NMSettingIP6ConfigPrivacy ip6_privacy)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert (NM_IN_SET (ip6_privacy, NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
- NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED,
- NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR,
- NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert(NM_IN_SET(ip6_privacy,
+ NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
+ NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED,
+ NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR,
+ NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR));
- if (self->ip6_privacy == ip6_privacy)
- return FALSE;
- self->ip6_privacy = ip6_privacy;
- nm_assert (self->ip6_privacy == ip6_privacy);
- return TRUE;
+ if (self->ip6_privacy == ip6_privacy)
+ return FALSE;
+ self->ip6_privacy = ip6_privacy;
+ nm_assert(self->ip6_privacy == ip6_privacy);
+ return TRUE;
}
gboolean
-nm_l3_config_data_get_ndisc_hop_limit (const NML3ConfigData *self,
- int *out_val)
+nm_l3_config_data_get_ndisc_hop_limit(const NML3ConfigData *self, int *out_val)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (!self->ndisc_hop_limit_set) {
- NM_SET_OUT (out_val, 0);
- return FALSE;
- }
- NM_SET_OUT (out_val, self->ndisc_hop_limit_val);
- return TRUE;
+ if (!self->ndisc_hop_limit_set) {
+ NM_SET_OUT(out_val, 0);
+ return FALSE;
+ }
+ NM_SET_OUT(out_val, self->ndisc_hop_limit_val);
+ return TRUE;
}
gboolean
-nm_l3_config_data_set_ndisc_hop_limit (NML3ConfigData *self,
- int val)
+nm_l3_config_data_set_ndisc_hop_limit(NML3ConfigData *self, int val)
{
- if ( self->ndisc_hop_limit_set
- && self->ndisc_hop_limit_val == val)
- return FALSE;
- self->ndisc_hop_limit_set = TRUE;
- self->ndisc_hop_limit_val = val;
- return TRUE;
+ if (self->ndisc_hop_limit_set && self->ndisc_hop_limit_val == val)
+ return FALSE;
+ self->ndisc_hop_limit_set = TRUE;
+ self->ndisc_hop_limit_val = val;
+ return TRUE;
}
gboolean
-nm_l3_config_data_get_ndisc_reachable_time_msec (const NML3ConfigData *self,
- guint32 *out_val)
+nm_l3_config_data_get_ndisc_reachable_time_msec(const NML3ConfigData *self, guint32 *out_val)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (!self->ndisc_reachable_time_msec_set) {
- NM_SET_OUT (out_val, 0);
- return FALSE;
- }
- NM_SET_OUT (out_val, self->ndisc_reachable_time_msec_val);
- return TRUE;
+ if (!self->ndisc_reachable_time_msec_set) {
+ NM_SET_OUT(out_val, 0);
+ return FALSE;
+ }
+ NM_SET_OUT(out_val, self->ndisc_reachable_time_msec_val);
+ return TRUE;
}
gboolean
-nm_l3_config_data_set_ndisc_reachable_time_msec (NML3ConfigData *self,
- guint32 val)
+nm_l3_config_data_set_ndisc_reachable_time_msec(NML3ConfigData *self, guint32 val)
{
- if ( self->ndisc_reachable_time_msec_set
- && self->ndisc_reachable_time_msec_val == val)
- return FALSE;
- self->ndisc_reachable_time_msec_set = TRUE;
- self->ndisc_reachable_time_msec_val = val;
- return TRUE;
+ if (self->ndisc_reachable_time_msec_set && self->ndisc_reachable_time_msec_val == val)
+ return FALSE;
+ self->ndisc_reachable_time_msec_set = TRUE;
+ self->ndisc_reachable_time_msec_val = val;
+ return TRUE;
}
gboolean
-nm_l3_config_data_get_ndisc_retrans_timer_msec (const NML3ConfigData *self,
- guint32 *out_val)
+nm_l3_config_data_get_ndisc_retrans_timer_msec(const NML3ConfigData *self, guint32 *out_val)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (!self->ndisc_retrans_timer_msec_set) {
- NM_SET_OUT (out_val, 0);
- return FALSE;
- }
- NM_SET_OUT (out_val, self->ndisc_retrans_timer_msec_val);
- return TRUE;
+ if (!self->ndisc_retrans_timer_msec_set) {
+ NM_SET_OUT(out_val, 0);
+ return FALSE;
+ }
+ NM_SET_OUT(out_val, self->ndisc_retrans_timer_msec_val);
+ return TRUE;
}
gboolean
-nm_l3_config_data_set_ndisc_retrans_timer_msec (NML3ConfigData *self,
- guint32 val)
+nm_l3_config_data_set_ndisc_retrans_timer_msec(NML3ConfigData *self, guint32 val)
{
- if ( self->ndisc_retrans_timer_msec_set
- && self->ndisc_retrans_timer_msec_val == val)
- return FALSE;
- self->ndisc_retrans_timer_msec_set = TRUE;
- self->ndisc_retrans_timer_msec_val = val;
- return TRUE;
+ if (self->ndisc_retrans_timer_msec_set && self->ndisc_retrans_timer_msec_val == val)
+ return FALSE;
+ self->ndisc_retrans_timer_msec_set = TRUE;
+ self->ndisc_retrans_timer_msec_val = val;
+ return TRUE;
}
/*****************************************************************************/
NMDhcpLease *
-nm_l3_config_data_get_dhcp_lease (const NML3ConfigData *self,
- int addr_family)
+nm_l3_config_data_get_dhcp_lease(const NML3ConfigData *self, int addr_family)
{
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
- return self->dhcp_lease_x[NM_IS_IPv4 (addr_family)];
+ return self->dhcp_lease_x[NM_IS_IPv4(addr_family)];
}
gboolean
-nm_l3_config_data_set_dhcp_lease (NML3ConfigData *self,
- int addr_family,
- NMDhcpLease *lease)
+nm_l3_config_data_set_dhcp_lease(NML3ConfigData *self, int addr_family, NMDhcpLease *lease)
{
- nm_auto_unref_dhcplease NMDhcpLease *lease_old = NULL;
- NMDhcpLease **p_lease;
+ nm_auto_unref_dhcplease NMDhcpLease *lease_old = NULL;
+ NMDhcpLease ** p_lease;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- p_lease = &self->dhcp_lease_x[NM_IS_IPv4 (addr_family)];
+ p_lease = &self->dhcp_lease_x[NM_IS_IPv4(addr_family)];
- if (*p_lease == lease)
- return FALSE;
+ if (*p_lease == lease)
+ return FALSE;
- if (lease)
- nm_dhcp_lease_ref (lease);
- lease_old = *p_lease;
- *p_lease = lease;
- return TRUE;
+ if (lease)
+ nm_dhcp_lease_ref(lease);
+ lease_old = *p_lease;
+ *p_lease = lease;
+ return TRUE;
}
gboolean
-nm_l3_config_data_set_dhcp_lease_from_options (NML3ConfigData *self,
- int addr_family,
- GHashTable *options_take)
+nm_l3_config_data_set_dhcp_lease_from_options(NML3ConfigData *self,
+ int addr_family,
+ GHashTable * options_take)
{
- nm_auto_unref_dhcplease NMDhcpLease *lease = NULL;
- nm_auto_unref_dhcplease NMDhcpLease *lease_old = NULL;
- NMDhcpLease **p_lease;
+ nm_auto_unref_dhcplease NMDhcpLease *lease = NULL;
+ nm_auto_unref_dhcplease NMDhcpLease *lease_old = NULL;
+ NMDhcpLease ** p_lease;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- if (options_take)
- lease = nm_dhcp_lease_new_from_options (g_steal_pointer (&options_take));
+ if (options_take)
+ lease = nm_dhcp_lease_new_from_options(g_steal_pointer(&options_take));
- p_lease = &self->dhcp_lease_x[NM_IS_IPv4 (addr_family)];
+ p_lease = &self->dhcp_lease_x[NM_IS_IPv4(addr_family)];
- if (*p_lease == lease)
- return FALSE;
+ if (*p_lease == lease)
+ return FALSE;
- lease_old = *p_lease;
- *p_lease = g_steal_pointer (&lease);
- return TRUE;
+ lease_old = *p_lease;
+ *p_lease = g_steal_pointer(&lease);
+ return TRUE;
}
/*****************************************************************************/
static int
-_dedup_multi_index_cmp (const NML3ConfigData *a,
- const NML3ConfigData *b,
- NMPObjectType obj_type)
+_dedup_multi_index_cmp(const NML3ConfigData *a, const NML3ConfigData *b, NMPObjectType obj_type)
{
- const NMDedupMultiHeadEntry *h_a = nm_l3_config_data_lookup_objs (a, obj_type);
- const NMDedupMultiHeadEntry *h_b = nm_l3_config_data_lookup_objs (b, obj_type);
- NMDedupMultiIter iter_a;
- NMDedupMultiIter iter_b;
+ const NMDedupMultiHeadEntry *h_a = nm_l3_config_data_lookup_objs(a, obj_type);
+ const NMDedupMultiHeadEntry *h_b = nm_l3_config_data_lookup_objs(b, obj_type);
+ NMDedupMultiIter iter_a;
+ NMDedupMultiIter iter_b;
- NM_CMP_SELF (h_a, h_b);
- NM_CMP_DIRECT (h_a->len, h_b->len);
+ NM_CMP_SELF(h_a, h_b);
+ NM_CMP_DIRECT(h_a->len, h_b->len);
- nm_assert (h_a->len > 0);
+ nm_assert(h_a->len > 0);
- nm_dedup_multi_iter_init (&iter_a, h_a);
- nm_dedup_multi_iter_init (&iter_b, h_b);
+ nm_dedup_multi_iter_init(&iter_a, h_a);
+ nm_dedup_multi_iter_init(&iter_b, h_b);
- while (TRUE) {
- const NMPObject *obj_a;
- const NMPObject *obj_b;
- gboolean have_a;
- gboolean have_b;
+ while (TRUE) {
+ const NMPObject *obj_a;
+ const NMPObject *obj_b;
+ gboolean have_a;
+ gboolean have_b;
- have_a = nm_platform_dedup_multi_iter_next_obj (&iter_a, &obj_a, obj_type);
- if (!have_a) {
- nm_assert (!nm_platform_dedup_multi_iter_next_obj (&iter_b, &obj_b, obj_type));
- return 0;
- }
+ have_a = nm_platform_dedup_multi_iter_next_obj(&iter_a, &obj_a, obj_type);
+ if (!have_a) {
+ nm_assert(!nm_platform_dedup_multi_iter_next_obj(&iter_b, &obj_b, obj_type));
+ return 0;
+ }
- have_b = nm_platform_dedup_multi_iter_next_obj (&iter_b, &obj_b, obj_type);
- nm_assert (have_b);
+ have_b = nm_platform_dedup_multi_iter_next_obj(&iter_b, &obj_b, obj_type);
+ nm_assert(have_b);
- NM_CMP_RETURN (nmp_object_cmp (obj_a, obj_b));
- }
+ NM_CMP_RETURN(nmp_object_cmp(obj_a, obj_b));
+ }
}
int
-nm_l3_config_data_cmp (const NML3ConfigData *a, const NML3ConfigData *b)
+nm_l3_config_data_cmp(const NML3ConfigData *a, const NML3ConfigData *b)
{
- int IS_IPv4;
+ int IS_IPv4;
- NM_CMP_SELF (a, b);
+ NM_CMP_SELF(a, b);
- NM_CMP_DIRECT (a->ifindex, b->ifindex);
+ NM_CMP_DIRECT(a->ifindex, b->ifindex);
- NM_CMP_DIRECT (a->flags, b->flags);
+ NM_CMP_DIRECT(a->flags, b->flags);
- NM_CMP_RETURN (_dedup_multi_index_cmp (a, b, NMP_OBJECT_TYPE_IP4_ADDRESS));
- NM_CMP_RETURN (_dedup_multi_index_cmp (a, b, NMP_OBJECT_TYPE_IP6_ADDRESS));
- NM_CMP_RETURN (_dedup_multi_index_cmp (a, b, NMP_OBJECT_TYPE_IP4_ROUTE));
- NM_CMP_RETURN (_dedup_multi_index_cmp (a, b, NMP_OBJECT_TYPE_IP6_ROUTE));
+ NM_CMP_RETURN(_dedup_multi_index_cmp(a, b, NMP_OBJECT_TYPE_IP4_ADDRESS));
+ NM_CMP_RETURN(_dedup_multi_index_cmp(a, b, NMP_OBJECT_TYPE_IP6_ADDRESS));
+ NM_CMP_RETURN(_dedup_multi_index_cmp(a, b, NMP_OBJECT_TYPE_IP4_ROUTE));
+ NM_CMP_RETURN(_dedup_multi_index_cmp(a, b, NMP_OBJECT_TYPE_IP6_ROUTE));
- for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) {
- const int addr_family = IS_IPv4 ? AF_INET : AF_INET6;
+ for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) {
+ const int addr_family = IS_IPv4 ? AF_INET : AF_INET6;
- NM_CMP_RETURN (nmp_object_cmp (a->best_default_route_x[IS_IPv4], b->best_default_route_x[IS_IPv4]));
+ NM_CMP_RETURN(
+ nmp_object_cmp(a->best_default_route_x[IS_IPv4], b->best_default_route_x[IS_IPv4]));
- NM_CMP_RETURN (_garray_inaddr_cmp (a->nameservers_x[IS_IPv4], b->nameservers_x[IS_IPv4], addr_family));
+ NM_CMP_RETURN(
+ _garray_inaddr_cmp(a->nameservers_x[IS_IPv4], b->nameservers_x[IS_IPv4], addr_family));
- NM_CMP_RETURN (nm_utils_hashtable_cmp (nm_dhcp_lease_get_options (a->dhcp_lease_x[IS_IPv4]),
- nm_dhcp_lease_get_options (b->dhcp_lease_x[IS_IPv4]),
- TRUE,
- nm_strcmp_with_data,
- nm_strcmp_with_data,
- NULL));
+ NM_CMP_RETURN(nm_utils_hashtable_cmp(nm_dhcp_lease_get_options(a->dhcp_lease_x[IS_IPv4]),
+ nm_dhcp_lease_get_options(b->dhcp_lease_x[IS_IPv4]),
+ TRUE,
+ nm_strcmp_with_data,
+ nm_strcmp_with_data,
+ NULL));
- NM_CMP_RETURN (nm_strv_ptrarray_cmp (a->domains_x[IS_IPv4], b->domains_x[IS_IPv4]));
- NM_CMP_RETURN (nm_strv_ptrarray_cmp (a->searches_x[IS_IPv4], b->searches_x[IS_IPv4]));
- NM_CMP_RETURN (nm_strv_ptrarray_cmp (a->dns_options_x[IS_IPv4], b->dns_options_x[IS_IPv4]));
+ NM_CMP_RETURN(nm_strv_ptrarray_cmp(a->domains_x[IS_IPv4], b->domains_x[IS_IPv4]));
+ NM_CMP_RETURN(nm_strv_ptrarray_cmp(a->searches_x[IS_IPv4], b->searches_x[IS_IPv4]));
+ NM_CMP_RETURN(nm_strv_ptrarray_cmp(a->dns_options_x[IS_IPv4], b->dns_options_x[IS_IPv4]));
- if (NM_FLAGS_ANY (a->flags, NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY (IS_IPv4)))
- NM_CMP_DIRECT (a->dns_priority_x[IS_IPv4], b->dns_priority_x[IS_IPv4]);
+ if (NM_FLAGS_ANY(a->flags, NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY(IS_IPv4)))
+ NM_CMP_DIRECT(a->dns_priority_x[IS_IPv4], b->dns_priority_x[IS_IPv4]);
- NM_CMP_DIRECT (a->route_table_sync_x[IS_IPv4], b->route_table_sync_x[IS_IPv4]);
- }
+ NM_CMP_DIRECT(a->route_table_sync_x[IS_IPv4], b->route_table_sync_x[IS_IPv4]);
+ }
- NM_CMP_RETURN (_garray_inaddr_cmp (a->wins, b->wins, AF_INET));
- NM_CMP_RETURN (_garray_inaddr_cmp (a->nis_servers, b->nis_servers, AF_INET));
- NM_CMP_FIELD_STR0 (a, b, nis_domain);
- NM_CMP_DIRECT (a->mdns, b->mdns);
- NM_CMP_DIRECT (a->llmnr, b->llmnr);
- NM_CMP_DIRECT (a->mtu, b->mtu);
- NM_CMP_DIRECT (a->ip6_mtu, b->ip6_mtu);
- NM_CMP_DIRECT_UNSAFE (a->metered, b->metered);
- NM_CMP_DIRECT_UNSAFE (a->ip6_privacy, b->ip6_privacy);
+ NM_CMP_RETURN(_garray_inaddr_cmp(a->wins, b->wins, AF_INET));
+ NM_CMP_RETURN(_garray_inaddr_cmp(a->nis_servers, b->nis_servers, AF_INET));
+ NM_CMP_FIELD_STR0(a, b, nis_domain);
+ NM_CMP_DIRECT(a->mdns, b->mdns);
+ NM_CMP_DIRECT(a->llmnr, b->llmnr);
+ NM_CMP_DIRECT(a->mtu, b->mtu);
+ NM_CMP_DIRECT(a->ip6_mtu, b->ip6_mtu);
+ NM_CMP_DIRECT_UNSAFE(a->metered, b->metered);
+ NM_CMP_DIRECT_UNSAFE(a->ip6_privacy, b->ip6_privacy);
- NM_CMP_DIRECT_UNSAFE (a->ndisc_hop_limit_set, b->ndisc_hop_limit_set);
- if (a->ndisc_hop_limit_set)
- NM_CMP_DIRECT (a->ndisc_hop_limit_val, b->ndisc_hop_limit_val);
+ NM_CMP_DIRECT_UNSAFE(a->ndisc_hop_limit_set, b->ndisc_hop_limit_set);
+ if (a->ndisc_hop_limit_set)
+ NM_CMP_DIRECT(a->ndisc_hop_limit_val, b->ndisc_hop_limit_val);
- NM_CMP_DIRECT_UNSAFE (a->ndisc_reachable_time_msec_set, b->ndisc_reachable_time_msec_set);
- if (a->ndisc_reachable_time_msec_set)
- NM_CMP_DIRECT (a->ndisc_reachable_time_msec_val, b->ndisc_reachable_time_msec_val);
+ NM_CMP_DIRECT_UNSAFE(a->ndisc_reachable_time_msec_set, b->ndisc_reachable_time_msec_set);
+ if (a->ndisc_reachable_time_msec_set)
+ NM_CMP_DIRECT(a->ndisc_reachable_time_msec_val, b->ndisc_reachable_time_msec_val);
- NM_CMP_DIRECT_UNSAFE (a->ndisc_retrans_timer_msec_set, b->ndisc_retrans_timer_msec_set);
- if (a->ndisc_retrans_timer_msec_set)
- NM_CMP_DIRECT (a->ndisc_retrans_timer_msec_val, b->ndisc_retrans_timer_msec_val);
+ NM_CMP_DIRECT_UNSAFE(a->ndisc_retrans_timer_msec_set, b->ndisc_retrans_timer_msec_set);
+ if (a->ndisc_retrans_timer_msec_set)
+ NM_CMP_DIRECT(a->ndisc_retrans_timer_msec_val, b->ndisc_retrans_timer_msec_val);
- NM_CMP_FIELD (a, b, source);
+ NM_CMP_FIELD(a, b, source);
- /* these fields are not considered by cmp():
+ /* these fields are not considered by cmp():
*
* - multi_idx
* - ref_count
* - is_sealed
*/
- return 0;
+ return 0;
}
/*****************************************************************************/
static const NMPObject *
-_data_get_direct_route_for_host (const NML3ConfigData *self,
- int addr_family,
- gconstpointer host,
- guint32 route_table)
+_data_get_direct_route_for_host(const NML3ConfigData *self,
+ int addr_family,
+ gconstpointer host,
+ guint32 route_table)
{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
- const NMPObject *best_route_obj = NULL;
- const NMPlatformIPXRoute *best_route = NULL;
- const NMPObject *item_obj;
- NMDedupMultiIter ipconf_iter;
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
+ const NMPObject * best_route_obj = NULL;
+ const NMPlatformIPXRoute *best_route = NULL;
+ const NMPObject * item_obj;
+ NMDedupMultiIter ipconf_iter;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE));
- nm_assert_addr_family (addr_family);
- nm_assert (host);
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+ nm_assert_addr_family(addr_family);
+ nm_assert(host);
- if (nm_ip_addr_is_null (addr_family, host))
- return NULL;
+ if (nm_ip_addr_is_null(addr_family, host))
+ return NULL;
- nm_l3_config_data_iter_obj_for_each (&ipconf_iter, self, &item_obj, NMP_OBJECT_TYPE_IP_ROUTE (IS_IPv4)) {
- const NMPlatformIPXRoute *item = NMP_OBJECT_CAST_IPX_ROUTE (item_obj);
+ nm_l3_config_data_iter_obj_for_each(&ipconf_iter,
+ self,
+ &item_obj,
+ NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))
+ {
+ const NMPlatformIPXRoute *item = NMP_OBJECT_CAST_IPX_ROUTE(item_obj);
- if (nm_ip_addr_is_null (addr_family,
- nm_platform_ip_route_get_gateway (addr_family, &item->rx)))
- continue;
+ if (nm_ip_addr_is_null(addr_family,
+ nm_platform_ip_route_get_gateway(addr_family, &item->rx)))
+ continue;
- if ( best_route
- && best_route->rx.plen > item->rx.plen)
- continue;
+ if (best_route && best_route->rx.plen > item->rx.plen)
+ continue;
- if (nm_platform_route_table_uncoerce (item->rx.table_coerced, TRUE) != route_table)
- continue;
+ if (nm_platform_route_table_uncoerce(item->rx.table_coerced, TRUE) != route_table)
+ continue;
- if (!nm_utils_ip_address_same_prefix (addr_family, host, item->rx.network_ptr, item->rx.plen))
- continue;
+ if (!nm_utils_ip_address_same_prefix(addr_family,
+ host,
+ item->rx.network_ptr,
+ item->rx.plen))
+ continue;
- if ( best_route
- && best_route->rx.metric <= item->rx.metric)
- continue;
+ if (best_route && best_route->rx.metric <= item->rx.metric)
+ continue;
- best_route_obj = item_obj;
- best_route = item;
- }
- return best_route_obj;
+ best_route_obj = item_obj;
+ best_route = item;
+ }
+ return best_route_obj;
}
/*****************************************************************************/
@@ -2008,744 +1929,743 @@ _data_get_direct_route_for_host (const NML3ConfigData *self,
* For IPv6, IFA_F_NOPREFIXROUTE is supported for a longer time and we don't do such a hack.
*/
GPtrArray *
-nm_l3_config_data_get_blacklisted_ip4_routes (const NML3ConfigData *self,
- gboolean is_vrf)
+nm_l3_config_data_get_blacklisted_ip4_routes(const NML3ConfigData *self, gboolean is_vrf)
{
- gs_unref_ptrarray GPtrArray *ip4_dev_route_blacklist = NULL;
- const NMPObject *my_addr_obj;
- NMDedupMultiIter iter;
+ gs_unref_ptrarray GPtrArray *ip4_dev_route_blacklist = NULL;
+ const NMPObject * my_addr_obj;
+ NMDedupMultiIter iter;
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
- /* For IPv6 slaac, we explicitly add the device-routes (onlink).
+ /* For IPv6 slaac, we explicitly add the device-routes (onlink).
* As we don't do that for IPv4 and manual IPv6 addresses. Add them here
* as dependent routes. */
- nm_l3_config_data_iter_obj_for_each (&iter, self, &my_addr_obj, NMP_OBJECT_TYPE_IP4_ADDRESS) {
- const NMPlatformIP4Address *const my_addr = NMP_OBJECT_CAST_IP4_ADDRESS (my_addr_obj);
- in_addr_t network_4;
- NMPlatformIPXRoute rx;
+ nm_l3_config_data_iter_obj_for_each(&iter, self, &my_addr_obj, NMP_OBJECT_TYPE_IP4_ADDRESS)
+ {
+ const NMPlatformIP4Address *const my_addr = NMP_OBJECT_CAST_IP4_ADDRESS(my_addr_obj);
+ in_addr_t network_4;
+ NMPlatformIPXRoute rx;
- if (my_addr->external)
- continue;
+ if (my_addr->external)
+ continue;
- nm_assert (my_addr->plen <= 32);
- if (my_addr->plen == 0)
- continue;
+ nm_assert(my_addr->plen <= 32);
+ if (my_addr->plen == 0)
+ continue;
- network_4 = nm_utils_ip4_address_clear_host_address (my_addr->peer_address,
- my_addr->plen);
+ network_4 = nm_utils_ip4_address_clear_host_address(my_addr->peer_address, my_addr->plen);
- if (nm_utils_ip4_address_is_zeronet (network_4)) {
- /* Kernel doesn't add device-routes for destinations that
+ if (nm_utils_ip4_address_is_zeronet(network_4)) {
+ /* Kernel doesn't add device-routes for destinations that
* start with 0.x.y.z. Skip them. */
- continue;
- }
+ continue;
+ }
- if ( my_addr->plen == 32
- && my_addr->address == my_addr->peer_address) {
- /* Kernel doesn't add device-routes for /32 addresses unless
+ if (my_addr->plen == 32 && my_addr->address == my_addr->peer_address) {
+ /* Kernel doesn't add device-routes for /32 addresses unless
* they have a peer. */
- continue;
- }
-
- rx.r4 = (NMPlatformIP4Route) {
- .ifindex = self->ifindex,
- .rt_source = NM_IP_CONFIG_SOURCE_KERNEL,
- .network = network_4,
- .plen = my_addr->plen,
- .pref_src = my_addr->address,
- .table_coerced = nm_platform_route_table_coerce (RT_TABLE_MAIN),
- .metric = NM_PLATFORM_ROUTE_METRIC_IP4_DEVICE_ROUTE,
- .scope_inv = nm_platform_route_scope_inv (NM_RT_SCOPE_LINK),
- };
- nm_platform_ip_route_normalize (AF_INET, &rx.rx);
-
- if (nm_l3_config_data_lookup_route (self,
- AF_INET,
- &rx.rx)) {
- /* we track such a route explicitly. Don't blacklist it. */
- continue;
- }
-
- if (!ip4_dev_route_blacklist)
- ip4_dev_route_blacklist = g_ptr_array_new_with_free_func ((GDestroyNotify) nmp_object_unref);
-
- g_ptr_array_add (ip4_dev_route_blacklist,
- nmp_object_new (NMP_OBJECT_TYPE_IP4_ROUTE, &rx));
- }
-
- return g_steal_pointer (&ip4_dev_route_blacklist);
+ continue;
+ }
+
+ rx.r4 = (NMPlatformIP4Route){
+ .ifindex = self->ifindex,
+ .rt_source = NM_IP_CONFIG_SOURCE_KERNEL,
+ .network = network_4,
+ .plen = my_addr->plen,
+ .pref_src = my_addr->address,
+ .table_coerced = nm_platform_route_table_coerce(RT_TABLE_MAIN),
+ .metric = NM_PLATFORM_ROUTE_METRIC_IP4_DEVICE_ROUTE,
+ .scope_inv = nm_platform_route_scope_inv(NM_RT_SCOPE_LINK),
+ };
+ nm_platform_ip_route_normalize(AF_INET, &rx.rx);
+
+ if (nm_l3_config_data_lookup_route(self, AF_INET, &rx.rx)) {
+ /* we track such a route explicitly. Don't blacklist it. */
+ continue;
+ }
+
+ if (!ip4_dev_route_blacklist)
+ ip4_dev_route_blacklist =
+ g_ptr_array_new_with_free_func((GDestroyNotify) nmp_object_unref);
+
+ g_ptr_array_add(ip4_dev_route_blacklist, nmp_object_new(NMP_OBJECT_TYPE_IP4_ROUTE, &rx));
+ }
+
+ return g_steal_pointer(&ip4_dev_route_blacklist);
}
/*****************************************************************************/
void
-nm_l3_config_data_add_dependent_routes (NML3ConfigData *self,
- int addr_family,
- guint32 route_table,
- guint32 route_metric,
- gboolean is_vrf)
-{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
- gs_unref_ptrarray GPtrArray *extra_onlink_routes = NULL;
- const NMPObject *my_addr_obj;
- const NMPObject *my_route_obj;
- NMPlatformIPXRoute rx;
- NMDedupMultiIter iter;
- in_addr_t network_4 = 0;
- guint i;
-
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
-
- /* For IPv6 slaac, we explicitly add the device-routes (onlink).
+nm_l3_config_data_add_dependent_routes(NML3ConfigData *self,
+ int addr_family,
+ guint32 route_table,
+ guint32 route_metric,
+ gboolean is_vrf)
+{
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
+ gs_unref_ptrarray GPtrArray *extra_onlink_routes = NULL;
+ const NMPObject * my_addr_obj;
+ const NMPObject * my_route_obj;
+ NMPlatformIPXRoute rx;
+ NMDedupMultiIter iter;
+ in_addr_t network_4 = 0;
+ guint i;
+
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
+
+ /* For IPv6 slaac, we explicitly add the device-routes (onlink).
* As we don't do that for IPv4 and manual IPv6 addresses. Add them here
* as dependent routes. */
- if (!IS_IPv4) {
- /* Pre-generate multicast route */
- rx.r6 = (NMPlatformIP6Route) {
- .ifindex = self->ifindex,
- .network.s6_addr[0] = 0xffu,
- .plen = 8,
- .table_coerced = nm_platform_route_table_coerce (RT_TABLE_LOCAL),
- .type_coerced = nm_platform_route_type_coerce (RTN_UNICAST),
- .metric = 256,
- };
- nm_l3_config_data_add_route (self, addr_family, NULL, &rx.rx);
- }
-
- nm_l3_config_data_iter_obj_for_each (&iter, self, &my_addr_obj, NMP_OBJECT_TYPE_IP_ADDRESS (IS_IPv4)) {
- const NMPlatformIPXAddress *const my_addr = NMP_OBJECT_CAST_IPX_ADDRESS (my_addr_obj);
-
- if (my_addr->ax.external)
- continue;
-
- if (IS_IPv4) {
- nm_assert (my_addr->a4.plen <= 32);
- if (my_addr->a4.plen == 0)
- continue;
- }
-
- if (IS_IPv4) {
- rx.r4 = (NMPlatformIP4Route) {
- .ifindex = self->ifindex,
- .rt_source = NM_IP_CONFIG_SOURCE_KERNEL,
- .network = my_addr->a4.address,
- .plen = 32,
- .pref_src = my_addr->a4.address,
- .type_coerced = nm_platform_route_type_coerce (RTN_LOCAL),
- .scope_inv = nm_platform_route_scope_inv (RT_SCOPE_HOST),
- .table_coerced = nm_platform_route_table_coerce (is_vrf ? route_table : RT_TABLE_LOCAL),
- };
- } else {
- rx.r6 = (NMPlatformIP6Route) {
- .ifindex = self->ifindex,
- .network = my_addr->a6.address,
- .plen = 128,
- .type_coerced = nm_platform_route_type_coerce (RTN_LOCAL),
- .metric = 0,
- .table_coerced = nm_platform_route_table_coerce (is_vrf ? route_table : RT_TABLE_LOCAL),
- };
- }
- nm_l3_config_data_add_route (self, addr_family, NULL, &rx.rx);
-
- if (my_addr->ax.plen == 0)
- continue;
-
- if (IS_IPv4) {
- network_4 = nm_utils_ip4_address_clear_host_address (my_addr->a4.peer_address,
- my_addr->a4.plen);
-
- if (nm_utils_ip4_address_is_zeronet (network_4)) {
- /* Kernel doesn't add device-routes for destinations that
+ if (!IS_IPv4) {
+ /* Pre-generate multicast route */
+ rx.r6 = (NMPlatformIP6Route){
+ .ifindex = self->ifindex,
+ .network.s6_addr[0] = 0xffu,
+ .plen = 8,
+ .table_coerced = nm_platform_route_table_coerce(RT_TABLE_LOCAL),
+ .type_coerced = nm_platform_route_type_coerce(RTN_UNICAST),
+ .metric = 256,
+ };
+ nm_l3_config_data_add_route(self, addr_family, NULL, &rx.rx);
+ }
+
+ nm_l3_config_data_iter_obj_for_each(&iter,
+ self,
+ &my_addr_obj,
+ NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4))
+ {
+ const NMPlatformIPXAddress *const my_addr = NMP_OBJECT_CAST_IPX_ADDRESS(my_addr_obj);
+
+ if (my_addr->ax.external)
+ continue;
+
+ if (IS_IPv4) {
+ nm_assert(my_addr->a4.plen <= 32);
+ if (my_addr->a4.plen == 0)
+ continue;
+ }
+
+ if (IS_IPv4) {
+ rx.r4 = (NMPlatformIP4Route){
+ .ifindex = self->ifindex,
+ .rt_source = NM_IP_CONFIG_SOURCE_KERNEL,
+ .network = my_addr->a4.address,
+ .plen = 32,
+ .pref_src = my_addr->a4.address,
+ .type_coerced = nm_platform_route_type_coerce(RTN_LOCAL),
+ .scope_inv = nm_platform_route_scope_inv(RT_SCOPE_HOST),
+ .table_coerced =
+ nm_platform_route_table_coerce(is_vrf ? route_table : RT_TABLE_LOCAL),
+ };
+ } else {
+ rx.r6 = (NMPlatformIP6Route){
+ .ifindex = self->ifindex,
+ .network = my_addr->a6.address,
+ .plen = 128,
+ .type_coerced = nm_platform_route_type_coerce(RTN_LOCAL),
+ .metric = 0,
+ .table_coerced =
+ nm_platform_route_table_coerce(is_vrf ? route_table : RT_TABLE_LOCAL),
+ };
+ }
+ nm_l3_config_data_add_route(self, addr_family, NULL, &rx.rx);
+
+ if (my_addr->ax.plen == 0)
+ continue;
+
+ if (IS_IPv4) {
+ network_4 =
+ nm_utils_ip4_address_clear_host_address(my_addr->a4.peer_address, my_addr->a4.plen);
+
+ if (nm_utils_ip4_address_is_zeronet(network_4)) {
+ /* Kernel doesn't add device-routes for destinations that
* start with 0.x.y.z. Skip them. */
- continue;
- }
+ continue;
+ }
- if ( my_addr->a4.plen == 32
- && my_addr->a4.address == my_addr->a4.peer_address) {
- /* Kernel doesn't add device-routes for /32 addresses unless
+ if (my_addr->a4.plen == 32 && my_addr->a4.address == my_addr->a4.peer_address) {
+ /* Kernel doesn't add device-routes for /32 addresses unless
* they have a peer. */
- continue;
- }
- } else {
- if (NM_FLAGS_HAS (my_addr->a6.n_ifa_flags, IFA_F_NOPREFIXROUTE))
- continue;
- }
-
- if (IS_IPv4) {
- rx.r4 = (NMPlatformIP4Route) {
- .ifindex = self->ifindex,
- .rt_source = NM_IP_CONFIG_SOURCE_KERNEL,
- .network = network_4,
- .plen = my_addr->a4.plen,
- .pref_src = my_addr->a4.address,
- .table_coerced = nm_platform_route_table_coerce (route_table),
- .metric = route_metric,
- .scope_inv = nm_platform_route_scope_inv (NM_RT_SCOPE_LINK),
- };
- nm_platform_ip_route_normalize (addr_family, &rx.rx);
- nm_l3_config_data_add_route (self, addr_family, NULL, &rx.rx);
- } else {
- const gboolean has_peer = !IN6_IS_ADDR_UNSPECIFIED (&my_addr->a6.peer_address);
- int routes_i;
-
- /* If we have an IPv6 peer, we add two /128 routes
+ continue;
+ }
+ } else {
+ if (NM_FLAGS_HAS(my_addr->a6.n_ifa_flags, IFA_F_NOPREFIXROUTE))
+ continue;
+ }
+
+ if (IS_IPv4) {
+ rx.r4 = (NMPlatformIP4Route){
+ .ifindex = self->ifindex,
+ .rt_source = NM_IP_CONFIG_SOURCE_KERNEL,
+ .network = network_4,
+ .plen = my_addr->a4.plen,
+ .pref_src = my_addr->a4.address,
+ .table_coerced = nm_platform_route_table_coerce(route_table),
+ .metric = route_metric,
+ .scope_inv = nm_platform_route_scope_inv(NM_RT_SCOPE_LINK),
+ };
+ nm_platform_ip_route_normalize(addr_family, &rx.rx);
+ nm_l3_config_data_add_route(self, addr_family, NULL, &rx.rx);
+ } else {
+ const gboolean has_peer = !IN6_IS_ADDR_UNSPECIFIED(&my_addr->a6.peer_address);
+ int routes_i;
+
+ /* If we have an IPv6 peer, we add two /128 routes
* (unless, both addresses are identical). */
- for (routes_i = 0; routes_i < 2; routes_i++) {
- struct in6_addr a6_stack;
- const struct in6_addr *a6;
- guint8 plen;
-
- if ( routes_i == 1
- && has_peer
- && IN6_ARE_ADDR_EQUAL (&my_addr->a6.address, &my_addr->a6.peer_address))
- break;
-
- if (has_peer) {
- if (routes_i == 0)
- a6 = &my_addr->a6.address;
- else
- a6 = &my_addr->a6.peer_address;
- plen = 128;
- } else {
- a6 = nm_utils_ip6_address_clear_host_address (&a6_stack, &my_addr->a6.address, my_addr->a6.plen);
- plen = my_addr->a6.plen;
- }
-
- rx.r6 = (NMPlatformIP6Route) {
- .ifindex = self->ifindex,
- .rt_source = NM_IP_CONFIG_SOURCE_KERNEL,
- .table_coerced = nm_platform_route_table_coerce (route_table),
- .metric = route_metric,
- .network = *a6,
- .plen = plen,
- };
- nm_platform_ip_route_normalize (addr_family, &rx.rx);
- nm_l3_config_data_add_route (self, addr_family, NULL, &rx.rx);
- }
- }
- }
-
- nm_l3_config_data_iter_obj_for_each (&iter, self, &my_route_obj, NMP_OBJECT_TYPE_IP_ROUTE (IS_IPv4)) {
- const NMPlatformIPXRoute *my_route = NMP_OBJECT_CAST_IPX_ROUTE (my_route_obj);
- NMPObject *new_route;
- NMPlatformIPXRoute *new_r;
- const NMIPAddr *p_gateway;
-
- if ( !NM_PLATFORM_IP_ROUTE_IS_DEFAULT (my_route)
- || NM_IS_IP_CONFIG_SOURCE_RTPROT (my_route->rx.rt_source))
- continue;
-
- p_gateway = nm_platform_ip_route_get_gateway (addr_family, &my_route->rx);
-
- if (nm_ip_addr_is_null (addr_family, p_gateway))
- continue;
-
- if (_data_get_direct_route_for_host (self,
- addr_family,
- p_gateway,
- nm_platform_route_table_uncoerce (my_route->rx.table_coerced, TRUE)))
- continue;
-
- new_route = nmp_object_clone (my_route_obj, FALSE);
- new_r = NMP_OBJECT_CAST_IPX_ROUTE (new_route);
- if (IS_IPv4) {
- new_r->r4.network = my_route->r4.gateway;
- new_r->r4.plen = 32;
- new_r->r4.gateway = 0;
- } else {
- new_r->r6.network = my_route->r6.gateway;
- new_r->r6.plen = 128;
- new_r->r6.gateway = in6addr_any;
- }
-
- /* we cannot add the route right away, because that invalidates the iteration. */
- if (!extra_onlink_routes)
- extra_onlink_routes = g_ptr_array_new_with_free_func ((GDestroyNotify) nmp_object_unref);
- g_ptr_array_add (extra_onlink_routes, new_route);
- }
- if (extra_onlink_routes) {
- for (i = 0; i < extra_onlink_routes->len; i++) {
- nm_l3_config_data_add_route_full (self,
- addr_family,
- extra_onlink_routes->pdata[i],
- NULL,
- NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
- NULL,
- NULL);
- }
- }
+ for (routes_i = 0; routes_i < 2; routes_i++) {
+ struct in6_addr a6_stack;
+ const struct in6_addr *a6;
+ guint8 plen;
+
+ if (routes_i == 1 && has_peer
+ && IN6_ARE_ADDR_EQUAL(&my_addr->a6.address, &my_addr->a6.peer_address))
+ break;
+
+ if (has_peer) {
+ if (routes_i == 0)
+ a6 = &my_addr->a6.address;
+ else
+ a6 = &my_addr->a6.peer_address;
+ plen = 128;
+ } else {
+ a6 = nm_utils_ip6_address_clear_host_address(&a6_stack,
+ &my_addr->a6.address,
+ my_addr->a6.plen);
+ plen = my_addr->a6.plen;
+ }
+
+ rx.r6 = (NMPlatformIP6Route){
+ .ifindex = self->ifindex,
+ .rt_source = NM_IP_CONFIG_SOURCE_KERNEL,
+ .table_coerced = nm_platform_route_table_coerce(route_table),
+ .metric = route_metric,
+ .network = *a6,
+ .plen = plen,
+ };
+ nm_platform_ip_route_normalize(addr_family, &rx.rx);
+ nm_l3_config_data_add_route(self, addr_family, NULL, &rx.rx);
+ }
+ }
+ }
+
+ nm_l3_config_data_iter_obj_for_each(&iter,
+ self,
+ &my_route_obj,
+ NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))
+ {
+ const NMPlatformIPXRoute *my_route = NMP_OBJECT_CAST_IPX_ROUTE(my_route_obj);
+ NMPObject * new_route;
+ NMPlatformIPXRoute * new_r;
+ const NMIPAddr * p_gateway;
+
+ if (!NM_PLATFORM_IP_ROUTE_IS_DEFAULT(my_route)
+ || NM_IS_IP_CONFIG_SOURCE_RTPROT(my_route->rx.rt_source))
+ continue;
+
+ p_gateway = nm_platform_ip_route_get_gateway(addr_family, &my_route->rx);
+
+ if (nm_ip_addr_is_null(addr_family, p_gateway))
+ continue;
+
+ if (_data_get_direct_route_for_host(
+ self,
+ addr_family,
+ p_gateway,
+ nm_platform_route_table_uncoerce(my_route->rx.table_coerced, TRUE)))
+ continue;
+
+ new_route = nmp_object_clone(my_route_obj, FALSE);
+ new_r = NMP_OBJECT_CAST_IPX_ROUTE(new_route);
+ if (IS_IPv4) {
+ new_r->r4.network = my_route->r4.gateway;
+ new_r->r4.plen = 32;
+ new_r->r4.gateway = 0;
+ } else {
+ new_r->r6.network = my_route->r6.gateway;
+ new_r->r6.plen = 128;
+ new_r->r6.gateway = in6addr_any;
+ }
+
+ /* we cannot add the route right away, because that invalidates the iteration. */
+ if (!extra_onlink_routes)
+ extra_onlink_routes = g_ptr_array_new_with_free_func((GDestroyNotify) nmp_object_unref);
+ g_ptr_array_add(extra_onlink_routes, new_route);
+ }
+ if (extra_onlink_routes) {
+ for (i = 0; i < extra_onlink_routes->len; i++) {
+ nm_l3_config_data_add_route_full(self,
+ addr_family,
+ extra_onlink_routes->pdata[i],
+ NULL,
+ NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
+ NULL,
+ NULL);
+ }
+ }
}
/*****************************************************************************/
static void
-_init_from_connection_ip (NML3ConfigData *self,
- int addr_family,
- NMConnection *connection,
- guint32 route_table,
- guint32 route_metric)
-{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
- NMSettingIPConfig *s_ip;
- guint naddresses;
- guint nroutes;
- guint nnameservers;
- guint nsearches;
- const char *gateway_str;
- NMIPAddr gateway_bin;
- guint i;
- int idx;
-
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
- nm_assert (!connection || NM_IS_CONNECTION (connection));
-
- if (!connection)
- return;
-
- s_ip = nm_connection_get_setting_ip_config (connection, addr_family);
- if (!s_ip)
- return;
-
- if ( !nm_setting_ip_config_get_never_default (s_ip)
- && (gateway_str = nm_setting_ip_config_get_gateway (s_ip))
- && inet_pton (addr_family, gateway_str, &gateway_bin) == 1
- && !nm_ip_addr_is_null (addr_family, &gateway_bin)) {
- NMPlatformIPXRoute r;
-
- if (IS_IPv4) {
- r.r4 = (NMPlatformIP4Route) {
- .rt_source = NM_IP_CONFIG_SOURCE_USER,
- .gateway = gateway_bin.addr4,
- .table_coerced = nm_platform_route_table_coerce (route_table),
- .metric = route_metric,
- };
- } else {
- r.r6 = (NMPlatformIP6Route) {
- .rt_source = NM_IP_CONFIG_SOURCE_USER,
- .gateway = gateway_bin.addr6,
- .table_coerced = nm_platform_route_table_coerce (route_table),
- .metric = route_metric,
- };
- }
-
- nm_l3_config_data_add_route (self, addr_family, NULL, &r.rx);
- }
-
- naddresses = nm_setting_ip_config_get_num_addresses (s_ip);
- for (i = 0; i < naddresses; i++) {
- NMIPAddress *s_addr = nm_setting_ip_config_get_address (s_ip, i);
- NMPlatformIPXAddress a;
- NMIPAddr addr_bin;
- GVariant *label;
-
- nm_assert (nm_ip_address_get_family (s_addr) == addr_family);
-
- nm_ip_address_get_address_binary (s_addr, &addr_bin);
-
- if (IS_IPv4) {
- a.a4 = (NMPlatformIP4Address) {
- .address = addr_bin.addr4,
- .peer_address = addr_bin.addr4,
- .plen = nm_ip_address_get_prefix (s_addr),
- .lifetime = NM_PLATFORM_LIFETIME_PERMANENT,
- .preferred = NM_PLATFORM_LIFETIME_PERMANENT,
- .addr_source = NM_IP_CONFIG_SOURCE_USER,
- };
- label = nm_ip_address_get_attribute (s_addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
- if (label)
- g_strlcpy (a.a4.label, g_variant_get_string (label, NULL), sizeof (a.a4.label));
-
- nm_assert (a.a4.plen <= 32);
- } else {
- a.a6 = (NMPlatformIP6Address) {
- .address = addr_bin.addr6,
- .plen = nm_ip_address_get_prefix (s_addr),
- .lifetime = NM_PLATFORM_LIFETIME_PERMANENT,
- .preferred = NM_PLATFORM_LIFETIME_PERMANENT,
- .addr_source = NM_IP_CONFIG_SOURCE_USER,
- };
-
- nm_assert (a.a6.plen <= 128);
- }
-
- nm_l3_config_data_add_address (self, addr_family, NULL, &a.ax);
- }
-
- nroutes = nm_setting_ip_config_get_num_routes (s_ip);
- for (i = 0; i < nroutes; i++) {
- NMIPRoute *s_route = nm_setting_ip_config_get_route (s_ip, i);
- NMPlatformIPXRoute r;
- NMIPAddr network_bin;
- NMIPAddr next_hop_bin;
- gint64 metric64;
- guint32 metric;
- guint plen;
-
- nm_assert (nm_ip_route_get_family (s_route) == addr_family);
-
- nm_ip_route_get_dest_binary (s_route, &network_bin);
- nm_ip_route_get_next_hop_binary (s_route, &next_hop_bin);
-
- metric64 = nm_ip_route_get_metric (s_route);
- if (metric64 < 0)
- metric = route_metric;
- else
- metric = metric64;
- metric = nm_utils_ip_route_metric_normalize (addr_family, metric);
-
- plen = nm_ip_route_get_prefix (s_route);
-
- nm_utils_ipx_address_clear_host_address (addr_family, &network_bin, &network_bin, plen);
-
- if (IS_IPv4) {
- r.r4 = (NMPlatformIP4Route) {
- .network = network_bin.addr4,
- .plen = nm_ip_route_get_prefix (s_route),
- .gateway = next_hop_bin.addr4,
- .metric = metric,
- .rt_source = NM_IP_CONFIG_SOURCE_USER,
- };
- nm_assert (r.r4.plen <= 32);
- } else {
- r.r6 = (NMPlatformIP6Route) {
- .network = network_bin.addr6,
- .plen = nm_ip_route_get_prefix (s_route),
- .gateway = next_hop_bin.addr6,
- .metric = metric,
- .rt_source = NM_IP_CONFIG_SOURCE_USER,
- };
- nm_assert (r.r6.plen <= 128);
- }
-
- nm_utils_ip_route_attribute_to_platform (addr_family,
- s_route,
- &r.rx,
- route_table);
-
- nm_l3_config_data_add_route (self, addr_family, NULL, &r.rx);
- }
-
- nnameservers = nm_setting_ip_config_get_num_dns (s_ip);
- for (i = 0; i < nnameservers; i++) {
- const char *s;
- NMIPAddr ip;
-
- s = nm_setting_ip_config_get_dns (s_ip, i);
- if (!nm_utils_parse_inaddr_bin (addr_family, s, NULL, &ip))
- continue;
- nm_l3_config_data_add_nameserver (self, addr_family, &ip);
- }
-
- nsearches = nm_setting_ip_config_get_num_dns_searches (s_ip);
- for (i = 0; i < nsearches; i++) {
- nm_l3_config_data_add_search (self,
- addr_family,
- nm_setting_ip_config_get_dns_search (s_ip, i));
- }
-
- idx = 0;
- while ((idx = nm_setting_ip_config_next_valid_dns_option (s_ip, i)) >= 0) {
- nm_l3_config_data_add_dns_option (self,
- addr_family,
- nm_setting_ip_config_get_dns_option (s_ip, i));
- idx++;
- }
-
- nm_l3_config_data_set_dns_priority (self,
- addr_family,
- nm_setting_ip_config_get_dns_priority (s_ip));
+_init_from_connection_ip(NML3ConfigData *self,
+ int addr_family,
+ NMConnection * connection,
+ guint32 route_table,
+ guint32 route_metric)
+{
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
+ NMSettingIPConfig *s_ip;
+ guint naddresses;
+ guint nroutes;
+ guint nnameservers;
+ guint nsearches;
+ const char * gateway_str;
+ NMIPAddr gateway_bin;
+ guint i;
+ int idx;
+
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
+ nm_assert(!connection || NM_IS_CONNECTION(connection));
+
+ if (!connection)
+ return;
+
+ s_ip = nm_connection_get_setting_ip_config(connection, addr_family);
+ if (!s_ip)
+ return;
+
+ if (!nm_setting_ip_config_get_never_default(s_ip)
+ && (gateway_str = nm_setting_ip_config_get_gateway(s_ip))
+ && inet_pton(addr_family, gateway_str, &gateway_bin) == 1
+ && !nm_ip_addr_is_null(addr_family, &gateway_bin)) {
+ NMPlatformIPXRoute r;
+
+ if (IS_IPv4) {
+ r.r4 = (NMPlatformIP4Route){
+ .rt_source = NM_IP_CONFIG_SOURCE_USER,
+ .gateway = gateway_bin.addr4,
+ .table_coerced = nm_platform_route_table_coerce(route_table),
+ .metric = route_metric,
+ };
+ } else {
+ r.r6 = (NMPlatformIP6Route){
+ .rt_source = NM_IP_CONFIG_SOURCE_USER,
+ .gateway = gateway_bin.addr6,
+ .table_coerced = nm_platform_route_table_coerce(route_table),
+ .metric = route_metric,
+ };
+ }
+
+ nm_l3_config_data_add_route(self, addr_family, NULL, &r.rx);
+ }
+
+ naddresses = nm_setting_ip_config_get_num_addresses(s_ip);
+ for (i = 0; i < naddresses; i++) {
+ NMIPAddress * s_addr = nm_setting_ip_config_get_address(s_ip, i);
+ NMPlatformIPXAddress a;
+ NMIPAddr addr_bin;
+ GVariant * label;
+
+ nm_assert(nm_ip_address_get_family(s_addr) == addr_family);
+
+ nm_ip_address_get_address_binary(s_addr, &addr_bin);
+
+ if (IS_IPv4) {
+ a.a4 = (NMPlatformIP4Address){
+ .address = addr_bin.addr4,
+ .peer_address = addr_bin.addr4,
+ .plen = nm_ip_address_get_prefix(s_addr),
+ .lifetime = NM_PLATFORM_LIFETIME_PERMANENT,
+ .preferred = NM_PLATFORM_LIFETIME_PERMANENT,
+ .addr_source = NM_IP_CONFIG_SOURCE_USER,
+ };
+ label = nm_ip_address_get_attribute(s_addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+ if (label)
+ g_strlcpy(a.a4.label, g_variant_get_string(label, NULL), sizeof(a.a4.label));
+
+ nm_assert(a.a4.plen <= 32);
+ } else {
+ a.a6 = (NMPlatformIP6Address){
+ .address = addr_bin.addr6,
+ .plen = nm_ip_address_get_prefix(s_addr),
+ .lifetime = NM_PLATFORM_LIFETIME_PERMANENT,
+ .preferred = NM_PLATFORM_LIFETIME_PERMANENT,
+ .addr_source = NM_IP_CONFIG_SOURCE_USER,
+ };
+
+ nm_assert(a.a6.plen <= 128);
+ }
+
+ nm_l3_config_data_add_address(self, addr_family, NULL, &a.ax);
+ }
+
+ nroutes = nm_setting_ip_config_get_num_routes(s_ip);
+ for (i = 0; i < nroutes; i++) {
+ NMIPRoute * s_route = nm_setting_ip_config_get_route(s_ip, i);
+ NMPlatformIPXRoute r;
+ NMIPAddr network_bin;
+ NMIPAddr next_hop_bin;
+ gint64 metric64;
+ guint32 metric;
+ guint plen;
+
+ nm_assert(nm_ip_route_get_family(s_route) == addr_family);
+
+ nm_ip_route_get_dest_binary(s_route, &network_bin);
+ nm_ip_route_get_next_hop_binary(s_route, &next_hop_bin);
+
+ metric64 = nm_ip_route_get_metric(s_route);
+ if (metric64 < 0)
+ metric = route_metric;
+ else
+ metric = metric64;
+ metric = nm_utils_ip_route_metric_normalize(addr_family, metric);
+
+ plen = nm_ip_route_get_prefix(s_route);
+
+ nm_utils_ipx_address_clear_host_address(addr_family, &network_bin, &network_bin, plen);
+
+ if (IS_IPv4) {
+ r.r4 = (NMPlatformIP4Route){
+ .network = network_bin.addr4,
+ .plen = nm_ip_route_get_prefix(s_route),
+ .gateway = next_hop_bin.addr4,
+ .metric = metric,
+ .rt_source = NM_IP_CONFIG_SOURCE_USER,
+ };
+ nm_assert(r.r4.plen <= 32);
+ } else {
+ r.r6 = (NMPlatformIP6Route){
+ .network = network_bin.addr6,
+ .plen = nm_ip_route_get_prefix(s_route),
+ .gateway = next_hop_bin.addr6,
+ .metric = metric,
+ .rt_source = NM_IP_CONFIG_SOURCE_USER,
+ };
+ nm_assert(r.r6.plen <= 128);
+ }
+
+ nm_utils_ip_route_attribute_to_platform(addr_family, s_route, &r.rx, route_table);
+
+ nm_l3_config_data_add_route(self, addr_family, NULL, &r.rx);
+ }
+
+ nnameservers = nm_setting_ip_config_get_num_dns(s_ip);
+ for (i = 0; i < nnameservers; i++) {
+ const char *s;
+ NMIPAddr ip;
+
+ s = nm_setting_ip_config_get_dns(s_ip, i);
+ if (!nm_utils_parse_inaddr_bin(addr_family, s, NULL, &ip))
+ continue;
+ nm_l3_config_data_add_nameserver(self, addr_family, &ip);
+ }
+
+ nsearches = nm_setting_ip_config_get_num_dns_searches(s_ip);
+ for (i = 0; i < nsearches; i++) {
+ nm_l3_config_data_add_search(self,
+ addr_family,
+ nm_setting_ip_config_get_dns_search(s_ip, i));
+ }
+
+ idx = 0;
+ while ((idx = nm_setting_ip_config_next_valid_dns_option(s_ip, i)) >= 0) {
+ nm_l3_config_data_add_dns_option(self,
+ addr_family,
+ nm_setting_ip_config_get_dns_option(s_ip, i));
+ idx++;
+ }
+
+ nm_l3_config_data_set_dns_priority(self,
+ addr_family,
+ nm_setting_ip_config_get_dns_priority(s_ip));
}
NML3ConfigData *
-nm_l3_config_data_new_from_connection (NMDedupMultiIndex *multi_idx,
- int ifindex,
- NMConnection *connection,
- guint32 route_table_4,
- guint32 route_table_6,
- guint32 route_metric_4,
- guint32 route_metric_6)
+nm_l3_config_data_new_from_connection(NMDedupMultiIndex *multi_idx,
+ int ifindex,
+ NMConnection * connection,
+ guint32 route_table_4,
+ guint32 route_table_6,
+ guint32 route_metric_4,
+ guint32 route_metric_6)
{
- NML3ConfigData *self;
+ NML3ConfigData *self;
- self = nm_l3_config_data_new (multi_idx, ifindex);
+ self = nm_l3_config_data_new(multi_idx, ifindex);
- _init_from_connection_ip (self, AF_INET, connection, route_table_4, route_metric_4);
- _init_from_connection_ip (self, AF_INET6, connection, route_table_6, route_metric_6);
- return self;
+ _init_from_connection_ip(self, AF_INET, connection, route_table_4, route_metric_4);
+ _init_from_connection_ip(self, AF_INET6, connection, route_table_6, route_metric_6);
+ return self;
}
static int
-sort_captured_addresses_4 (const CList *lst_a, const CList *lst_b, gconstpointer user_data)
+sort_captured_addresses_4(const CList *lst_a, const CList *lst_b, gconstpointer user_data)
{
- const NMPlatformIP4Address *addr_a = NMP_OBJECT_CAST_IP4_ADDRESS (c_list_entry (lst_a, NMDedupMultiEntry, lst_entries)->obj);
- const NMPlatformIP4Address *addr_b = NMP_OBJECT_CAST_IP4_ADDRESS (c_list_entry (lst_b, NMDedupMultiEntry, lst_entries)->obj);
+ const NMPlatformIP4Address *addr_a =
+ NMP_OBJECT_CAST_IP4_ADDRESS(c_list_entry(lst_a, NMDedupMultiEntry, lst_entries)->obj);
+ const NMPlatformIP4Address *addr_b =
+ NMP_OBJECT_CAST_IP4_ADDRESS(c_list_entry(lst_b, NMDedupMultiEntry, lst_entries)->obj);
- nm_assert (addr_a);
- nm_assert (addr_b);
+ nm_assert(addr_a);
+ nm_assert(addr_b);
- /* Primary addresses first */
- return NM_FLAGS_HAS (addr_a->n_ifa_flags, IFA_F_SECONDARY) -
- NM_FLAGS_HAS (addr_b->n_ifa_flags, IFA_F_SECONDARY);
+ /* Primary addresses first */
+ return NM_FLAGS_HAS(addr_a->n_ifa_flags, IFA_F_SECONDARY)
+ - NM_FLAGS_HAS(addr_b->n_ifa_flags, IFA_F_SECONDARY);
}
static int
-sort_captured_addresses_6 (const CList *lst_a, const CList *lst_b, gconstpointer user_data)
+sort_captured_addresses_6(const CList *lst_a, const CList *lst_b, gconstpointer user_data)
{
- NMSettingIP6ConfigPrivacy ipv6_privacy_rfc4941 = GPOINTER_TO_INT (user_data);
- const NMPlatformIP6Address *addr_a = NMP_OBJECT_CAST_IP6_ADDRESS (c_list_entry (lst_a, NMDedupMultiEntry, lst_entries)->obj);
- const NMPlatformIP6Address *addr_b = NMP_OBJECT_CAST_IP6_ADDRESS (c_list_entry (lst_b, NMDedupMultiEntry, lst_entries)->obj);
+ NMSettingIP6ConfigPrivacy ipv6_privacy_rfc4941 = GPOINTER_TO_INT(user_data);
+ const NMPlatformIP6Address *addr_a =
+ NMP_OBJECT_CAST_IP6_ADDRESS(c_list_entry(lst_a, NMDedupMultiEntry, lst_entries)->obj);
+ const NMPlatformIP6Address *addr_b =
+ NMP_OBJECT_CAST_IP6_ADDRESS(c_list_entry(lst_b, NMDedupMultiEntry, lst_entries)->obj);
- return nm_platform_ip6_address_pretty_sort_cmp (addr_a,
- addr_b,
- ipv6_privacy_rfc4941 == NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
+ return nm_platform_ip6_address_pretty_sort_cmp(
+ addr_a,
+ addr_b,
+ ipv6_privacy_rfc4941 == NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
}
static void
-_init_from_platform (NML3ConfigData *self,
- int addr_family,
- NMPlatform *platform,
- NMSettingIP6ConfigPrivacy ipv6_privacy_rfc4941)
-{
- const gboolean IS_IPv4 = NM_IS_IPv4 (addr_family);
- const NMDedupMultiHeadEntry *head_entry;
- const NMPObject *plobj = NULL;
- NMDedupMultiIter iter;
-
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert_addr_family (addr_family);
-
- head_entry = nm_platform_lookup_object (platform,
- IS_IPv4
- ? NMP_OBJECT_TYPE_IP4_ADDRESS
- : NMP_OBJECT_TYPE_IP6_ADDRESS,
- self->ifindex);
- if (head_entry) {
- if (IS_IPv4)
- self->has_routes_with_type_local_4_set = FALSE;
- else
- self->has_routes_with_type_local_6_set = FALSE;
- nmp_cache_iter_for_each (&iter, head_entry, &plobj) {
- if (!_l3_config_data_add_obj (self->multi_idx,
- &self->idx_addresses_x[IS_IPv4],
- self->ifindex,
- plobj,
- NULL,
- NM_L3_CONFIG_ADD_FLAGS_APPEND_FORCE,
- NULL,
- NULL))
- nm_assert_not_reached ();
- }
- head_entry = nm_l3_config_data_lookup_addresses (self, addr_family);
- nm_assert (head_entry);
- nm_dedup_multi_head_entry_sort (head_entry,
- IS_IPv4
- ? sort_captured_addresses_4
- : sort_captured_addresses_6,
- GINT_TO_POINTER (ipv6_privacy_rfc4941));
- }
-
- head_entry = nm_platform_lookup_object (platform,
- IS_IPv4
- ? NMP_OBJECT_TYPE_IP4_ROUTE
- : NMP_OBJECT_TYPE_IP6_ROUTE,
- self->ifindex);
- nmp_cache_iter_for_each (&iter, head_entry, &plobj)
- nm_l3_config_data_add_route (self, addr_family, plobj, NULL);
+_init_from_platform(NML3ConfigData * self,
+ int addr_family,
+ NMPlatform * platform,
+ NMSettingIP6ConfigPrivacy ipv6_privacy_rfc4941)
+{
+ const gboolean IS_IPv4 = NM_IS_IPv4(addr_family);
+ const NMDedupMultiHeadEntry *head_entry;
+ const NMPObject * plobj = NULL;
+ NMDedupMultiIter iter;
+
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert_addr_family(addr_family);
+
+ head_entry = nm_platform_lookup_object(platform,
+ IS_IPv4 ? NMP_OBJECT_TYPE_IP4_ADDRESS
+ : NMP_OBJECT_TYPE_IP6_ADDRESS,
+ self->ifindex);
+ if (head_entry) {
+ if (IS_IPv4)
+ self->has_routes_with_type_local_4_set = FALSE;
+ else
+ self->has_routes_with_type_local_6_set = FALSE;
+ nmp_cache_iter_for_each (&iter, head_entry, &plobj) {
+ if (!_l3_config_data_add_obj(self->multi_idx,
+ &self->idx_addresses_x[IS_IPv4],
+ self->ifindex,
+ plobj,
+ NULL,
+ NM_L3_CONFIG_ADD_FLAGS_APPEND_FORCE,
+ NULL,
+ NULL))
+ nm_assert_not_reached();
+ }
+ head_entry = nm_l3_config_data_lookup_addresses(self, addr_family);
+ nm_assert(head_entry);
+ nm_dedup_multi_head_entry_sort(head_entry,
+ IS_IPv4 ? sort_captured_addresses_4
+ : sort_captured_addresses_6,
+ GINT_TO_POINTER(ipv6_privacy_rfc4941));
+ }
+
+ head_entry =
+ nm_platform_lookup_object(platform,
+ IS_IPv4 ? NMP_OBJECT_TYPE_IP4_ROUTE : NMP_OBJECT_TYPE_IP6_ROUTE,
+ self->ifindex);
+ nmp_cache_iter_for_each (&iter, head_entry, &plobj)
+ nm_l3_config_data_add_route(self, addr_family, plobj, NULL);
}
NML3ConfigData *
-nm_l3_config_data_new_from_platform (NMDedupMultiIndex *multi_idx,
- int ifindex,
- NMPlatform *platform,
- NMSettingIP6ConfigPrivacy ipv6_privacy_rfc4941)
+nm_l3_config_data_new_from_platform(NMDedupMultiIndex * multi_idx,
+ int ifindex,
+ NMPlatform * platform,
+ NMSettingIP6ConfigPrivacy ipv6_privacy_rfc4941)
{
+ NML3ConfigData *self;
- NML3ConfigData *self;
-
- nm_assert (NM_IS_PLATFORM (platform));
- nm_assert (ifindex > 0);
+ nm_assert(NM_IS_PLATFORM(platform));
+ nm_assert(ifindex > 0);
- /* Slaves have no IP configuration */
- if (nm_platform_link_get_master (platform, ifindex) > 0)
- return NULL;
+ /* Slaves have no IP configuration */
+ if (nm_platform_link_get_master(platform, ifindex) > 0)
+ return NULL;
- self = nm_l3_config_data_new (multi_idx, ifindex);
+ self = nm_l3_config_data_new(multi_idx, ifindex);
- _init_from_platform (self, AF_INET, platform, ipv6_privacy_rfc4941);
- _init_from_platform (self, AF_INET6, platform, ipv6_privacy_rfc4941);
+ _init_from_platform(self, AF_INET, platform, ipv6_privacy_rfc4941);
+ _init_from_platform(self, AF_INET6, platform, ipv6_privacy_rfc4941);
- return self;
+ return self;
}
/*****************************************************************************/
void
-nm_l3_config_data_merge (NML3ConfigData *self,
+nm_l3_config_data_merge(NML3ConfigData * self,
const NML3ConfigData *src,
- NML3ConfigMergeFlags merge_flags,
- const guint32 *default_route_penalty_x /* length 2, for IS_IPv4 */,
+ NML3ConfigMergeFlags merge_flags,
+ const guint32 * default_route_penalty_x /* length 2, for IS_IPv4 */,
NML3ConfigMergeHookAddObj hook_add_addr,
- gpointer hook_user_data)
-{
- NMDedupMultiIter iter;
- const NMPObject *obj;
- int IS_IPv4;
-
- nm_assert (_NM_IS_L3_CONFIG_DATA (self, FALSE));
- nm_assert (_NM_IS_L3_CONFIG_DATA (src, TRUE));
-
- for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) {
- const int addr_family = IS_IPv4 ? AF_INET : AF_INET6;
- const NML3ConfigDatFlags has_dns_priority_flag = NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY (IS_IPv4);
-
- nm_l3_config_data_iter_obj_for_each (&iter,
- src,
- &obj,
- NMP_OBJECT_TYPE_IP_ADDRESS (IS_IPv4)) {
-
- if ( hook_add_addr
- && !hook_add_addr (src, obj, hook_user_data))
- continue;
-
- nm_l3_config_data_add_address_full (self,
- addr_family,
- obj,
- NULL,
- NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
- NULL);
- }
-
- if (!NM_FLAGS_HAS (merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_ROUTES)) {
- nm_l3_config_data_iter_obj_for_each (&iter,
- src,
- &obj,
- NMP_OBJECT_TYPE_IP_ROUTE (IS_IPv4)) {
- if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (NMP_OBJECT_CAST_IP_ROUTE (obj))) {
- if ( NM_FLAGS_HAS (merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DEFAULT_ROUTES)
- && !NM_FLAGS_HAS (src->flags, NM_L3_CONFIG_DAT_FLAGS_IGNORE_MERGE_NO_DEFAULT_ROUTES))
- continue;
-
- if ( default_route_penalty_x
- && default_route_penalty_x[IS_IPv4] > 0) {
- NMPlatformIPXRoute r;
-
- if (IS_IPv4)
- r.r4 = *NMP_OBJECT_CAST_IP4_ROUTE (obj);
- else
- r.r6 = *NMP_OBJECT_CAST_IP6_ROUTE (obj);
- r.rx.ifindex = self->ifindex;
- r.rx.metric = nm_utils_ip_route_metric_penalize (r.rx.metric, default_route_penalty_x[IS_IPv4]);
- nm_l3_config_data_add_route_full (self,
- addr_family,
- NULL,
- &r.rx,
- NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
- NULL,
- NULL);
- continue;
- }
- }
- nm_l3_config_data_add_route_full (self,
- addr_family,
- obj,
- NULL,
- NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
- NULL,
- NULL);
- }
- }
-
- if (!NM_FLAGS_HAS (merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS))
- _garray_inaddr_merge (&self->nameservers_x[IS_IPv4], src->nameservers_x[IS_IPv4], addr_family);
-
- if (!NM_FLAGS_HAS (merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS))
- _strv_ptrarray_merge (&self->domains_x[IS_IPv4], src->domains_x[IS_IPv4]);
-
- if (!NM_FLAGS_HAS (merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS))
- _strv_ptrarray_merge (&self->searches_x[IS_IPv4], src->searches_x[IS_IPv4]);
-
- if (!NM_FLAGS_HAS (merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS))
- _strv_ptrarray_merge (&self->dns_options_x[IS_IPv4], src->dns_options_x[IS_IPv4]);
-
- if ( !NM_FLAGS_ANY (self->flags, has_dns_priority_flag)
- && NM_FLAGS_ANY (src->flags, has_dns_priority_flag)) {
- self->dns_priority_x[IS_IPv4] = src->dns_priority_x[IS_IPv4];
- self->flags |= has_dns_priority_flag;
- }
-
- if (self->route_table_sync_x[IS_IPv4] == NM_IP_ROUTE_TABLE_SYNC_MODE_NONE)
- self->route_table_sync_x[IS_IPv4] = src->route_table_sync_x[IS_IPv4];
- }
-
- if (!NM_FLAGS_HAS (merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS)) {
- _garray_inaddr_merge (&self->wins, src->wins, AF_INET);
- _garray_inaddr_merge (&self->nis_servers, src->nis_servers, AF_INET);
-
- if ( !self->nis_domain
- && src->nis_domain)
- self->nis_domain = g_strdup (src->nis_domain);
- }
-
- if (self->mdns == NM_SETTING_CONNECTION_MDNS_DEFAULT)
- self->mdns = src->mdns;
-
- if (self->llmnr == NM_SETTING_CONNECTION_LLMNR_DEFAULT)
- self->llmnr = src->llmnr;
-
- if (self->metered == NM_TERNARY_DEFAULT)
- self->metered = src->metered;
-
- if (self->ip6_privacy == NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN)
- self->ip6_privacy = src->ip6_privacy;
-
- if ( !self->ndisc_hop_limit_set
- && src->ndisc_hop_limit_set) {
- self->ndisc_hop_limit_set = TRUE;
- self->ndisc_hop_limit_val = src->ndisc_hop_limit_val;
- }
-
- if ( !self->ndisc_reachable_time_msec_set
- && src->ndisc_reachable_time_msec_set) {
- self->ndisc_reachable_time_msec_set = TRUE;
- self->ndisc_reachable_time_msec_val = src->ndisc_reachable_time_msec_val;
- }
-
- if ( !self->ndisc_retrans_timer_msec_set
- && src->ndisc_retrans_timer_msec_set) {
- self->ndisc_retrans_timer_msec_set = TRUE;
- self->ndisc_retrans_timer_msec_val = src->ndisc_retrans_timer_msec_val;
- }
-
- if (self->mtu == 0u)
- self->mtu = src->mtu;
-
- if (self->ip6_mtu == 0u)
- self->ip6_mtu = src->ip6_mtu;
-
- /* self->source does not get merged. */
- /* self->dhcp_lease_x does not get merged. */
+ gpointer hook_user_data)
+{
+ NMDedupMultiIter iter;
+ const NMPObject *obj;
+ int IS_IPv4;
+
+ nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(src, TRUE));
+
+ for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) {
+ const int addr_family = IS_IPv4 ? AF_INET : AF_INET6;
+ const NML3ConfigDatFlags has_dns_priority_flag =
+ NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY(IS_IPv4);
+
+ nm_l3_config_data_iter_obj_for_each(&iter, src, &obj, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4))
+ {
+ if (hook_add_addr && !hook_add_addr(src, obj, hook_user_data))
+ continue;
+
+ nm_l3_config_data_add_address_full(self,
+ addr_family,
+ obj,
+ NULL,
+ NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
+ NULL);
+ }
+
+ if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_ROUTES)) {
+ nm_l3_config_data_iter_obj_for_each(&iter, src, &obj, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))
+ {
+ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT(NMP_OBJECT_CAST_IP_ROUTE(obj))) {
+ if (NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DEFAULT_ROUTES)
+ && !NM_FLAGS_HAS(src->flags,
+ NM_L3_CONFIG_DAT_FLAGS_IGNORE_MERGE_NO_DEFAULT_ROUTES))
+ continue;
+
+ if (default_route_penalty_x && default_route_penalty_x[IS_IPv4] > 0) {
+ NMPlatformIPXRoute r;
+
+ if (IS_IPv4)
+ r.r4 = *NMP_OBJECT_CAST_IP4_ROUTE(obj);
+ else
+ r.r6 = *NMP_OBJECT_CAST_IP6_ROUTE(obj);
+ r.rx.ifindex = self->ifindex;
+ r.rx.metric =
+ nm_utils_ip_route_metric_penalize(r.rx.metric,
+ default_route_penalty_x[IS_IPv4]);
+ nm_l3_config_data_add_route_full(self,
+ addr_family,
+ NULL,
+ &r.rx,
+ NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
+ NULL,
+ NULL);
+ continue;
+ }
+ }
+ nm_l3_config_data_add_route_full(self,
+ addr_family,
+ obj,
+ NULL,
+ NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
+ NULL,
+ NULL);
+ }
+ }
+
+ if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS))
+ _garray_inaddr_merge(&self->nameservers_x[IS_IPv4],
+ src->nameservers_x[IS_IPv4],
+ addr_family);
+
+ if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS))
+ _strv_ptrarray_merge(&self->domains_x[IS_IPv4], src->domains_x[IS_IPv4]);
+
+ if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS))
+ _strv_ptrarray_merge(&self->searches_x[IS_IPv4], src->searches_x[IS_IPv4]);
+
+ if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS))
+ _strv_ptrarray_merge(&self->dns_options_x[IS_IPv4], src->dns_options_x[IS_IPv4]);
+
+ if (!NM_FLAGS_ANY(self->flags, has_dns_priority_flag)
+ && NM_FLAGS_ANY(src->flags, has_dns_priority_flag)) {
+ self->dns_priority_x[IS_IPv4] = src->dns_priority_x[IS_IPv4];
+ self->flags |= has_dns_priority_flag;
+ }
+
+ if (self->route_table_sync_x[IS_IPv4] == NM_IP_ROUTE_TABLE_SYNC_MODE_NONE)
+ self->route_table_sync_x[IS_IPv4] = src->route_table_sync_x[IS_IPv4];
+ }
+
+ if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_DNS)) {
+ _garray_inaddr_merge(&self->wins, src->wins, AF_INET);
+ _garray_inaddr_merge(&self->nis_servers, src->nis_servers, AF_INET);
+
+ if (!self->nis_domain && src->nis_domain)
+ self->nis_domain = g_strdup(src->nis_domain);
+ }
+
+ if (self->mdns == NM_SETTING_CONNECTION_MDNS_DEFAULT)
+ self->mdns = src->mdns;
+
+ if (self->llmnr == NM_SETTING_CONNECTION_LLMNR_DEFAULT)
+ self->llmnr = src->llmnr;
+
+ if (self->metered == NM_TERNARY_DEFAULT)
+ self->metered = src->metered;
+
+ if (self->ip6_privacy == NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN)
+ self->ip6_privacy = src->ip6_privacy;
+
+ if (!self->ndisc_hop_limit_set && src->ndisc_hop_limit_set) {
+ self->ndisc_hop_limit_set = TRUE;
+ self->ndisc_hop_limit_val = src->ndisc_hop_limit_val;
+ }
+
+ if (!self->ndisc_reachable_time_msec_set && src->ndisc_reachable_time_msec_set) {
+ self->ndisc_reachable_time_msec_set = TRUE;
+ self->ndisc_reachable_time_msec_val = src->ndisc_reachable_time_msec_val;
+ }
+
+ if (!self->ndisc_retrans_timer_msec_set && src->ndisc_retrans_timer_msec_set) {
+ self->ndisc_retrans_timer_msec_set = TRUE;
+ self->ndisc_retrans_timer_msec_val = src->ndisc_retrans_timer_msec_val;
+ }
+
+ if (self->mtu == 0u)
+ self->mtu = src->mtu;
+
+ if (self->ip6_mtu == 0u)
+ self->ip6_mtu = src->ip6_mtu;
+
+ /* self->source does not get merged. */
+ /* self->dhcp_lease_x does not get merged. */
}
NML3ConfigData *
-nm_l3_config_data_new_clone (const NML3ConfigData *src,
- int ifindex)
+nm_l3_config_data_new_clone(const NML3ConfigData *src, int ifindex)
{
- NML3ConfigData *self;
+ NML3ConfigData *self;
- nm_assert (_NM_IS_L3_CONFIG_DATA (src, TRUE));
+ nm_assert(_NM_IS_L3_CONFIG_DATA(src, TRUE));
- /* pass 0, to use the original ifindex. You can also use this function to
+ /* pass 0, to use the original ifindex. You can also use this function to
* copy the configuration for a different ifindex. */
- nm_assert (ifindex >= 0);
- if (ifindex <= 0)
- ifindex = src->ifindex;
+ nm_assert(ifindex >= 0);
+ if (ifindex <= 0)
+ ifindex = src->ifindex;
- self = nm_l3_config_data_new (src->multi_idx, ifindex);
- nm_l3_config_data_merge (self, src, NM_L3_CONFIG_MERGE_FLAGS_NONE, NULL, NULL, NULL);
- return self;
+ self = nm_l3_config_data_new(src->multi_idx, ifindex);
+ nm_l3_config_data_merge(self, src, NM_L3_CONFIG_MERGE_FLAGS_NONE, NULL, NULL, NULL);
+ return self;
}