From 269474c382a075249b96166b36698bfea5685c09 Mon Sep 17 00:00:00 2001 From: Mary Strodl Date: Tue, 4 Feb 2025 22:40:17 -0500 Subject: [PATCH] clat: propagate network_id down to l3cfg --- src/core/ndisc/nm-ndisc.c | 8 ++++++-- src/core/ndisc/nm-ndisc.h | 3 ++- src/core/nm-l3-config-data.c | 26 ++++++++++++++++++++++++++ src/core/nm-l3-config-data.h | 4 ++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/core/ndisc/nm-ndisc.c b/src/core/ndisc/nm-ndisc.c index 1a2bf48072..758ce0a05c 100644 --- a/src/core/ndisc/nm-ndisc.c +++ b/src/core/ndisc/nm-ndisc.c @@ -109,7 +109,8 @@ nm_ndisc_data_to_l3cd(NMDedupMultiIndex *multi_idx, int ifindex, const NMNDiscData *rdata, NMSettingIP6ConfigPrivacy ip6_privacy, - NMUtilsIPv6IfaceId *token) + NMUtilsIPv6IfaceId *token, + const char *network_id) { nm_auto_unref_l3cd_init NML3ConfigData *l3cd = NULL; guint32 ifa_flags; @@ -218,6 +219,8 @@ nm_ndisc_data_to_l3cd(NMDedupMultiIndex *multi_idx, nm_l3_config_data_set_ip6_mtu(l3cd, rdata->mtu); if (token) nm_l3_config_data_set_ip6_token(l3cd, *token); + if (network_id) + nm_l3_config_data_set_network_id(l3cd, network_id); return g_steal_pointer(&l3cd); } @@ -437,7 +440,8 @@ nm_ndisc_emit_config_change(NMNDisc *self, NMNDiscConfigMap changed) nm_l3cfg_get_ifindex(priv->config.l3cfg), rdata, priv->config.ip6_privacy, - priv->iid_is_token ? &priv->iid : NULL); + priv->iid_is_token ? &priv->iid : NULL, + priv->config.network_id); l3cd = nm_l3_config_data_seal(l3cd); if (!nm_l3_config_data_equal(priv->l3cd, l3cd)) diff --git a/src/core/ndisc/nm-ndisc.h b/src/core/ndisc/nm-ndisc.h index 8f1a12a267..eda1e696d9 100644 --- a/src/core/ndisc/nm-ndisc.h +++ b/src/core/ndisc/nm-ndisc.h @@ -282,6 +282,7 @@ struct _NML3ConfigData *nm_ndisc_data_to_l3cd(NMDedupMultiIndex *multi_id int ifindex, const NMNDiscData *rdata, NMSettingIP6ConfigPrivacy ip6_privacy, - NMUtilsIPv6IfaceId *token); + NMUtilsIPv6IfaceId *token, + const char *network_id); #endif /* __NETWORKMANAGER_NDISC_H__ */ diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index 328f59b6ce..9d849744d8 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -122,6 +122,7 @@ struct _NML3ConfigData { NMSettingConnectionDnsOverTls dns_over_tls; NMSettingConnectionDnssec dnssec; NMUtilsIPv6IfaceId ip6_token; + NMRefString *network_id; NML3ConfigDatFlags flags; @@ -603,6 +604,10 @@ nm_l3_config_data_log(const NML3ConfigData *self, nm_utils_inet6_interface_identifier_to_token(&self->ip6_token, sbuf_addr)); } + if (self->network_id) { + _L("network-id: %s", self->network_id->str); + } + if (self->metered != NM_TERNARY_DEFAULT) _L("metered: %s", self->metered ? "yes" : "no"); @@ -822,6 +827,7 @@ nm_l3_config_data_unref(const NML3ConfigData *self) nm_ref_string_unref(mutable->nis_domain); nm_ref_string_unref(mutable->proxy_pac_url); nm_ref_string_unref(mutable->proxy_pac_script); + nm_ref_string_unref(mutable->network_id); nm_g_slice_free(mutable); } @@ -1957,6 +1963,22 @@ nm_l3_config_data_set_ip6_token(NML3ConfigData *self, NMUtilsIPv6IfaceId ipv6_to return TRUE; } +const char * +nm_l3_config_data_get_network_id(const NML3ConfigData *self) +{ + nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE)); + + return nm_ref_string_get_str(self->network_id); +} + +gboolean +nm_l3_config_data_set_network_id(NML3ConfigData *self, const char *value) +{ + nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE)); + + return nm_ref_string_reset_str(&self->network_id, value); +} + NMMptcpFlags nm_l3_config_data_get_mptcp_flags(const NML3ConfigData *self) { @@ -2484,6 +2506,7 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a, if (NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_OTHER)) { NM_CMP_DIRECT(a->flags, b->flags); NM_CMP_DIRECT(a->ip6_token.id, b->ip6_token.id); + NM_CMP_DIRECT_REF_STRING(a->network_id, b->network_id); NM_CMP_DIRECT(a->mtu, b->mtu); NM_CMP_DIRECT(a->ip6_mtu, b->ip6_mtu); NM_CMP_DIRECT_UNSAFE(a->metered, b->metered); @@ -3506,6 +3529,9 @@ nm_l3_config_data_merge(NML3ConfigData *self, if (self->ip6_token.id == 0) self->ip6_token.id = src->ip6_token.id; + if (!self->network_id) + self->network_id = nm_ref_string_ref(src->network_id); + self->metered = NM_MAX((NMTernary) self->metered, (NMTernary) src->metered); if (self->proxy_method == NM_PROXY_CONFIG_METHOD_UNKNOWN) diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h index 4102b6e137..081ac5c152 100644 --- a/src/core/nm-l3-config-data.h +++ b/src/core/nm-l3-config-data.h @@ -490,6 +490,10 @@ NMUtilsIPv6IfaceId nm_l3_config_data_get_ip6_token(const NML3ConfigData *self); gboolean nm_l3_config_data_set_ip6_token(NML3ConfigData *self, NMUtilsIPv6IfaceId ipv6_token); +gboolean nm_l3_config_data_set_network_id(NML3ConfigData *self, const char *network_id); + +const char *nm_l3_config_data_get_network_id(const NML3ConfigData *self); + NMMptcpFlags nm_l3_config_data_get_mptcp_flags(const NML3ConfigData *self); gboolean nm_l3_config_data_set_mptcp_flags(NML3ConfigData *self, NMMptcpFlags mptcp_flags);