summary refs log tree commit diff
path: root/src/core/nm-l3-config-data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/nm-l3-config-data.c')
-rw-r--r--src/core/nm-l3-config-data.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c
index 2a722756..bcd0b62a 100644
--- a/src/core/nm-l3-config-data.c
+++ b/src/core/nm-l3-config-data.c
@@ -149,6 +149,8 @@ struct _NML3ConfigData {
 
     NMSettingIP6ConfigPrivacy ip6_privacy : 4;
 
+    NMMptcpFlags mptcp_flags : 18;
+
     bool is_sealed : 1;
 
     bool has_routes_with_type_local_4_set : 1;
@@ -582,6 +584,16 @@ nm_l3_config_data_log(const NML3ConfigData *self,
                                            NULL)));
     }
 
+    if (self->mptcp_flags != NM_MPTCP_FLAGS_NONE) {
+        gs_free char *s = NULL;
+
+        _L("mptcp-flags: %s",
+           (s = _nm_utils_enum_to_str_full(nm_mptcp_flags_get_type(),
+                                           self->mptcp_flags,
+                                           " ",
+                                           NULL)));
+    }
+
     if (self->ip6_token.id != 0) {
         _L("ipv6-token: %s",
            nm_utils_inet6_interface_identifier_to_token(&self->ip6_token, sbuf_addr));
@@ -694,6 +706,7 @@ nm_l3_config_data_new(NMDedupMultiIndex *multi_idx, int ifindex, NMIPConfigSourc
         .never_default_4               = NM_OPTION_BOOL_DEFAULT,
         .source                        = source,
         .ip6_privacy                   = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
+        .mptcp_flags                   = NM_MPTCP_FLAGS_NONE,
         .ndisc_hop_limit_set           = FALSE,
         .ndisc_reachable_time_msec_set = FALSE,
         .ndisc_retrans_timer_msec_set  = FALSE,
@@ -1875,6 +1888,30 @@ nm_l3_config_data_set_ip6_token(NML3ConfigData *self, NMUtilsIPv6IfaceId ipv6_to
     return TRUE;
 }
 
+NMMptcpFlags
+nm_l3_config_data_get_mptcp_flags(const NML3ConfigData *self)
+{
+    nm_assert(!self || _NM_IS_L3_CONFIG_DATA(self, TRUE));
+
+    if (!self)
+        return NM_MPTCP_FLAGS_NONE;
+
+    return self->mptcp_flags;
+}
+
+gboolean
+nm_l3_config_data_set_mptcp_flags(NML3ConfigData *self, NMMptcpFlags mptcp_flags)
+{
+    nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+    nm_assert(!NM_FLAGS_ANY(mptcp_flags, ~_NM_MPTCP_FLAGS_ALL));
+
+    if (self->mptcp_flags == mptcp_flags)
+        return FALSE;
+    self->mptcp_flags = mptcp_flags;
+    nm_assert(self->mptcp_flags == mptcp_flags);
+    return TRUE;
+}
+
 NMProxyConfigMethod
 nm_l3_config_data_get_proxy_method(const NML3ConfigData *self)
 {
@@ -2324,6 +2361,7 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a,
         NM_CMP_DIRECT_REF_STRING(a->proxy_pac_url, b->proxy_pac_url);
         NM_CMP_DIRECT_REF_STRING(a->proxy_pac_script, b->proxy_pac_script);
         NM_CMP_DIRECT_UNSAFE(a->ip6_privacy, b->ip6_privacy);
+        NM_CMP_DIRECT_UNSAFE(a->mptcp_flags, b->mptcp_flags);
 
         NM_CMP_DIRECT_UNSAFE(a->ndisc_hop_limit_set, b->ndisc_hop_limit_set);
         if (a->ndisc_hop_limit_set)
@@ -2613,9 +2651,6 @@ nm_l3_config_data_add_dependent_device_routes(NML3ConfigData       *self,
             const gboolean has_peer = !IN6_IS_ADDR_UNSPECIFIED(&addr_src->a6.peer_address);
             int            routes_i;
 
-            if (addr_src->ax.plen == 0)
-                continue;
-
             if (NM_FLAGS_HAS(addr_src->a6.n_ifa_flags, IFA_F_NOPREFIXROUTE))
                 continue;
 
@@ -2999,10 +3034,10 @@ nm_l3_config_data_merge(NML3ConfigData       *self,
                         gpointer                  hook_user_data)
 {
     static const guint32 x_default_route_metric_x[2]  = {NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6,
-                                                        NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4};
+                                                         NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4};
     static const guint32 x_default_route_penalty_x[2] = {0, 0};
     static const int     x_default_dns_priority_x[2]  = {NM_DNS_PRIORITY_DEFAULT_NORMAL,
-                                                    NM_DNS_PRIORITY_DEFAULT_NORMAL};
+                                                         NM_DNS_PRIORITY_DEFAULT_NORMAL};
     guint32              default_route_table_coerced_x[2];
     NMDedupMultiIter     iter;
     const NMPObject     *obj;
@@ -3245,6 +3280,9 @@ nm_l3_config_data_merge(NML3ConfigData       *self,
     if (self->ip6_privacy == NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN)
         self->ip6_privacy = src->ip6_privacy;
 
+    if (self->mptcp_flags == NM_MPTCP_FLAGS_NONE)
+        self->mptcp_flags = src->mptcp_flags;
+
     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;