import NetworkManager-1.36.0-4.el9_0
This commit is contained in:
		
						commit
						e2baef0495
					
				
							
								
								
									
										1
									
								
								.NetworkManager.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.NetworkManager.metadata
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | adbe8e9eef649ac73c4fbaefd71a1335d4d016cd SOURCES/NetworkManager-1.36.0.tar.xz | ||||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | SOURCES/NetworkManager-1.36.0.tar.xz | ||||||
							
								
								
									
										14
									
								
								SOURCES/00-server.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								SOURCES/00-server.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | # This configuration file changes NetworkManager's behavior to | ||||||
|  | # what's expected on "traditional UNIX server" type deployments. | ||||||
|  | # | ||||||
|  | # See "man NetworkManager.conf" for more information about these | ||||||
|  | # and other keys. | ||||||
|  | 
 | ||||||
|  | [main] | ||||||
|  | # Do not do automatic (DHCP/SLAAC) configuration on ethernet devices | ||||||
|  | # with no other matching connections. | ||||||
|  | no-auto-default=* | ||||||
|  | 
 | ||||||
|  | # Ignore the carrier (cable plugged in) state when attempting to | ||||||
|  | # activate static-IP connections. | ||||||
|  | ignore-carrier=* | ||||||
							
								
								
									
										62
									
								
								SOURCES/1001-wwan-dns-fix-rh2059138.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								SOURCES/1001-wwan-dns-fix-rh2059138.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | |||||||
|  | From 7ba52fdcfeeb1e5400bcecb9fa93b3099dcccb47 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Beniamino Galvani <bgalvani@redhat.com> | ||||||
|  | Date: Fri, 25 Feb 2022 10:06:48 +0100 | ||||||
|  | Subject: [PATCH] core: initialize l3cd dns-priority for ppp and wwan | ||||||
|  | 
 | ||||||
|  | For devices that configure IP by themselves (by returning | ||||||
|  | "->ready_for_ip_config() = TRUE" and implementing | ||||||
|  | ->act_stage3_ip_config()), we skip manual configuration. Currently,
 | ||||||
|  | manual configuration is the only one that sets flag HAS_DNS_PRIORITY | ||||||
|  | into the resulting l3cd. | ||||||
|  | 
 | ||||||
|  | So, the merged l3cd for such devices misses a dns-priority and is | ||||||
|  | ignored by the DNS manager. | ||||||
|  | 
 | ||||||
|  | Explicitly initialize the priority to 0; in this way, the default | ||||||
|  | value for the device will be set in the final l3cd during the merge. | ||||||
|  | 
 | ||||||
|  | Fixes: 58287cbcc0c8 ('core: rework IP configuration in NetworkManager using layer 3 configuration') | ||||||
|  | 
 | ||||||
|  | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/931 | ||||||
|  | (cherry picked from commit b2e559fab2fa5adbf4e159fc1c2cadd3d965b01b) | ||||||
|  | (cherry picked from commit bfd3216584e9fe1eb0b6f3f81e3eb75a40877775) | ||||||
|  | ---
 | ||||||
|  |  src/core/devices/wwan/nm-modem-broadband.c | 2 ++ | ||||||
|  |  src/core/ppp/nm-ppp-manager.c              | 1 + | ||||||
|  |  2 files changed, 3 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/core/devices/wwan/nm-modem-broadband.c b/src/core/devices/wwan/nm-modem-broadband.c
 | ||||||
|  | index f5336d3750..b585652e5d 100644
 | ||||||
|  | --- a/src/core/devices/wwan/nm-modem-broadband.c
 | ||||||
|  | +++ b/src/core/devices/wwan/nm-modem-broadband.c
 | ||||||
|  | @@ -1032,6 +1032,7 @@ stage3_ip_config_start(NMModem *modem, int addr_family, NMModemIPMethod ip_metho
 | ||||||
|  |          l3cd = nm_l3_config_data_new(nm_platform_get_multi_idx(NM_PLATFORM_GET), | ||||||
|  |                                       ifindex, | ||||||
|  |                                       NM_IP_CONFIG_SOURCE_WWAN); | ||||||
|  | +        nm_l3_config_data_set_dns_priority(l3cd, AF_INET, 0);
 | ||||||
|  |   | ||||||
|  |          address = (NMPlatformIP4Address){ | ||||||
|  |              .address      = address_network, | ||||||
|  | @@ -1118,6 +1119,7 @@ stage3_ip_config_start(NMModem *modem, int addr_family, NMModemIPMethod ip_metho
 | ||||||
|  |          l3cd = nm_l3_config_data_new(nm_platform_get_multi_idx(NM_PLATFORM_GET), | ||||||
|  |                                       ifindex, | ||||||
|  |                                       NM_IP_CONFIG_SOURCE_WWAN); | ||||||
|  | +        nm_l3_config_data_set_dns_priority(l3cd, AF_INET6, 0);
 | ||||||
|  |   | ||||||
|  |          do_auto = TRUE; | ||||||
|  |   | ||||||
|  | diff --git a/src/core/ppp/nm-ppp-manager.c b/src/core/ppp/nm-ppp-manager.c
 | ||||||
|  | index dd6b1bc7f0..5761d59d39 100644
 | ||||||
|  | --- a/src/core/ppp/nm-ppp-manager.c
 | ||||||
|  | +++ b/src/core/ppp/nm-ppp-manager.c
 | ||||||
|  | @@ -545,6 +545,7 @@ impl_ppp_manager_set_ip4_config(NMDBusObject                      *obj,
 | ||||||
|  |                                   NM_IP_CONFIG_SOURCE_PPP); | ||||||
|  |   | ||||||
|  |      nm_l3_config_data_set_mtu(l3cd, mtu); | ||||||
|  | +    nm_l3_config_data_set_dns_priority(l3cd, AF_INET, 0);
 | ||||||
|  |   | ||||||
|  |      address = (NMPlatformIP4Address){ | ||||||
|  |          .plen = 32, | ||||||
|  | -- 
 | ||||||
|  | 2.34.1 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,332 @@ | |||||||
|  | From b55842ac0803b59fe8675464191180e44634ce1f Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Thomas Haller <thaller@redhat.com> | ||||||
|  | Date: Tue, 22 Feb 2022 22:08:18 +0100 | ||||||
|  | Subject: [PATCH 1/2] core: reject unsupported flags for CheckpointCreate D-Bus | ||||||
|  |  request | ||||||
|  | 
 | ||||||
|  | (cherry picked from commit df6ee44fb2b96cf05aaeeee500c75d7d91b37404) | ||||||
|  | (cherry picked from commit 4cfc2245d382b0b869bd52238eecd17f1c10af1c) | ||||||
|  | ---
 | ||||||
|  |  src/core/nm-manager.c | 34 +++++++++++++++++++++++++--------- | ||||||
|  |  1 file changed, 25 insertions(+), 9 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c
 | ||||||
|  | index b440b22457f2..53ef1754bb72 100644
 | ||||||
|  | --- a/src/core/nm-manager.c
 | ||||||
|  | +++ b/src/core/nm-manager.c
 | ||||||
|  | @@ -7453,15 +7453,30 @@ impl_manager_checkpoint_create(NMDBusObject                      *obj,
 | ||||||
|  |                                 GDBusMethodInvocation             *invocation, | ||||||
|  |                                 GVariant                          *parameters) | ||||||
|  |  { | ||||||
|  | -    NMManager        *self = NM_MANAGER(obj);
 | ||||||
|  | -    NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE(self);
 | ||||||
|  | -    NMAuthChain      *chain;
 | ||||||
|  | -    char            **devices;
 | ||||||
|  | -    guint32           rollback_timeout;
 | ||||||
|  | -    guint32           flags;
 | ||||||
|  | +    NMManager         *self = NM_MANAGER(obj);
 | ||||||
|  | +    NMManagerPrivate  *priv = NM_MANAGER_GET_PRIVATE(self);
 | ||||||
|  | +    NMAuthChain       *chain;
 | ||||||
|  | +    gs_strfreev char **devices = NULL;
 | ||||||
|  | +    guint32            rollback_timeout;
 | ||||||
|  | +    guint32            flags;
 | ||||||
|  |   | ||||||
|  |      G_STATIC_ASSERT_EXPR(sizeof(flags) <= sizeof(NMCheckpointCreateFlags)); | ||||||
|  |   | ||||||
|  | +    g_variant_get(parameters, "(^aouu)", &devices, &rollback_timeout, &flags);
 | ||||||
|  | +
 | ||||||
|  | +    if ((NMCheckpointCreateFlags) flags != flags
 | ||||||
|  | +        || NM_FLAGS_ANY(flags,
 | ||||||
|  | +                        ~((guint32) (NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL
 | ||||||
|  | +                                     | NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS
 | ||||||
|  | +                                     | NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES
 | ||||||
|  | +                                     | NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING)))) {
 | ||||||
|  | +        g_dbus_method_invocation_return_error_literal(invocation,
 | ||||||
|  | +                                                      NM_MANAGER_ERROR,
 | ||||||
|  | +                                                      NM_MANAGER_ERROR_INVALID_ARGUMENTS,
 | ||||||
|  | +                                                      "Invalid flags");
 | ||||||
|  | +        return;
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  |      chain = nm_auth_chain_new_context(invocation, checkpoint_auth_done_cb, self); | ||||||
|  |      if (!chain) { | ||||||
|  |          g_dbus_method_invocation_return_error_literal(invocation, | ||||||
|  | @@ -7471,11 +7486,12 @@ impl_manager_checkpoint_create(NMDBusObject                      *obj,
 | ||||||
|  |          return; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | -    g_variant_get(parameters, "(^aouu)", &devices, &rollback_timeout, &flags);
 | ||||||
|  | -
 | ||||||
|  |      c_list_link_tail(&priv->auth_lst_head, nm_auth_chain_parent_lst_list(chain)); | ||||||
|  |      nm_auth_chain_set_data(chain, "audit-op", NM_AUDIT_OP_CHECKPOINT_CREATE, NULL); | ||||||
|  | -    nm_auth_chain_set_data(chain, "devices", devices, (GDestroyNotify) g_strfreev);
 | ||||||
|  | +    nm_auth_chain_set_data(chain,
 | ||||||
|  | +                           "devices",
 | ||||||
|  | +                           g_steal_pointer(&devices),
 | ||||||
|  | +                           (GDestroyNotify) g_strfreev);
 | ||||||
|  |      nm_auth_chain_set_data(chain, "flags", GUINT_TO_POINTER(flags), NULL); | ||||||
|  |      nm_auth_chain_set_data(chain, "timeout", GUINT_TO_POINTER(rollback_timeout), NULL); | ||||||
|  |      nm_auth_chain_add_call(chain, NM_AUTH_PERMISSION_CHECKPOINT_ROLLBACK, TRUE); | ||||||
|  | -- 
 | ||||||
|  | 2.35.1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | From 3c417c8338bf44292d4869763587286c7d492c0c Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Thomas Haller <thaller@redhat.com> | ||||||
|  | Date: Tue, 22 Feb 2022 21:55:57 +0100 | ||||||
|  | Subject: [PATCH 2/2] core: preserve external ports during checkpoint rollback | ||||||
|  | 
 | ||||||
|  | When we have a bridge interface with ports attached externally (that is, | ||||||
|  | not by NetworkManager itself), then it can make sense that during | ||||||
|  | checkpoint rollback we want to keep those ports attached. | ||||||
|  | 
 | ||||||
|  | During rollback, we may need to deactivate the bridge device and | ||||||
|  | re-activate it. Implement this, by setting a flag before deactivating, | ||||||
|  | which prevents external ports to be detached. The flag gets cleared, | ||||||
|  | when the device state changes to activated (the following activation) | ||||||
|  | or unmanaged. | ||||||
|  | 
 | ||||||
|  | This is an ugly solution, for several reasons. | ||||||
|  | 
 | ||||||
|  | For one, NMDevice tracks its ports in the "slaves" list. But what | ||||||
|  | it does is ugly. There is no clear concept to understand what it | ||||||
|  | actually tacks. For example, it tracks externally added interfaces | ||||||
|  | (nm_device_sys_iface_state_is_external()) that are attached while | ||||||
|  | not being connected. But it also tracks interfaces that we want to attach | ||||||
|  | during activation (but which are not yet actually enslaved). It also tracks | ||||||
|  | slaves that have no actual netdev device (OVS). So it's not clear what this | ||||||
|  | list contains and what it should contain at any point in time. When we skip | ||||||
|  | the change of the slaves states during nm_device_master_release_slaves_all(), | ||||||
|  | it's not really clear what the effects are. It's ugly, but probably correct | ||||||
|  | enough. What would be better, if we had a clear purpose of what the | ||||||
|  | lists (or several lists) mean. E.g. a list of all ports that are | ||||||
|  | currently, physically attached vs. a list of ports we want to attach vs. | ||||||
|  | a list of OVS slaves that have no actual netdev device. | ||||||
|  | 
 | ||||||
|  | Another problem is that we attach state on the device | ||||||
|  | ("activation_state_preserve_external_ports"), which should linger there | ||||||
|  | during the deactivation and reactivation. How can we be sure that we don't | ||||||
|  | leave that flag dangling there, and that the desired following activation | ||||||
|  | is the one we cared about? If the follow-up activation fails short (e.g. an | ||||||
|  | unmanaged command comes first), will we properly disconnect the slaves? | ||||||
|  | Should we even? In practice, it might be correct enough. | ||||||
|  | 
 | ||||||
|  | Also, we only implement this for bridges. I think this is where it makes | ||||||
|  | the most sense. And after all, it's an odd thing to preserve unknown, | ||||||
|  | external things during a rollback -- unknown, because we have no knowledge | ||||||
|  | about why these ports are attached and what to do with them. | ||||||
|  | 
 | ||||||
|  | Also, the change doesn't remember the ports that were attached when the | ||||||
|  | checkpoint was created. Instead, we preserve all ports that are attached | ||||||
|  | during rollback. That seems more useful and easier to implement. So we | ||||||
|  | don't actually rollback to the configuration when the checkpoint was | ||||||
|  | created. Instead, we rollback, but keep external devices. | ||||||
|  | 
 | ||||||
|  | Also, we do this now by default and introduce a flag to get the previous | ||||||
|  | behavior. | ||||||
|  | 
 | ||||||
|  | https://bugzilla.redhat.com/show_bug.cgi?id=2035519 | ||||||
|  | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/ # 909 | ||||||
|  | (cherry picked from commit 98b3056604fc565f273c264b892086a75a4db0e9) | ||||||
|  | (cherry picked from commit 351ca13358f62f85af675672c3399141bec092cd) | ||||||
|  | ---
 | ||||||
|  |  src/core/devices/nm-device.c              | 71 ++++++++++++++++++++++- | ||||||
|  |  src/core/devices/nm-device.h              |  2 + | ||||||
|  |  src/core/nm-checkpoint.c                  |  5 ++ | ||||||
|  |  src/core/nm-manager.c                     |  3 +- | ||||||
|  |  src/libnm-core-public/nm-dbus-interface.h | 16 +++-- | ||||||
|  |  5 files changed, 90 insertions(+), 7 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
 | ||||||
|  | index 35360ceebb7b..a11486d54be3 100644
 | ||||||
|  | --- a/src/core/devices/nm-device.c
 | ||||||
|  | +++ b/src/core/devices/nm-device.c
 | ||||||
|  | @@ -76,6 +76,7 @@
 | ||||||
|  |  #include "nm-hostname-manager.h" | ||||||
|  |   | ||||||
|  |  #include "nm-device-generic.h" | ||||||
|  | +#include "nm-device-bridge.h"
 | ||||||
|  |  #include "nm-device-vlan.h" | ||||||
|  |  #include "nm-device-vrf.h" | ||||||
|  |  #include "nm-device-wireguard.h" | ||||||
|  | @@ -483,9 +484,12 @@ typedef struct _NMDevicePrivate {
 | ||||||
|  |   | ||||||
|  |      NMUtilsStableType current_stable_id_type : 3; | ||||||
|  |   | ||||||
|  | +    bool activation_state_preserve_external_ports : 1;
 | ||||||
|  | +
 | ||||||
|  |      bool nm_owned : 1; /* whether the device is a device owned and created by NM */ | ||||||
|  |   | ||||||
|  | -    bool  assume_state_guess_assume : 1;
 | ||||||
|  | +    bool assume_state_guess_assume : 1;
 | ||||||
|  | +
 | ||||||
|  |      char *assume_state_connection_uuid; | ||||||
|  |   | ||||||
|  |      guint64 udi_id; | ||||||
|  | @@ -7666,8 +7670,19 @@ nm_device_master_release_slaves(NMDevice *self)
 | ||||||
|  |      c_list_for_each_safe (iter, safe, &priv->slaves) { | ||||||
|  |          SlaveInfo *info = c_list_entry(iter, SlaveInfo, lst_slave); | ||||||
|  |   | ||||||
|  | +        if (priv->activation_state_preserve_external_ports
 | ||||||
|  | +            && nm_device_sys_iface_state_is_external(info->slave)) {
 | ||||||
|  | +            _LOGT(LOGD_DEVICE,
 | ||||||
|  | +                  "master: preserve external port %s",
 | ||||||
|  | +                  nm_device_get_iface(info->slave));
 | ||||||
|  | +            continue;
 | ||||||
|  | +        }
 | ||||||
|  |          nm_device_master_release_one_slave(self, info->slave, TRUE, FALSE, reason); | ||||||
|  |      } | ||||||
|  | +
 | ||||||
|  | +    /* We only need this flag for a short time. It served its purpose. Clear
 | ||||||
|  | +     * it again. */
 | ||||||
|  | +    nm_device_activation_state_set_preserve_external_ports(self, FALSE);
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | @@ -15386,6 +15401,16 @@ _set_state_full(NMDevice *self, NMDeviceState state, NMDeviceStateReason reason,
 | ||||||
|  |      if (state > NM_DEVICE_STATE_DISCONNECTED) | ||||||
|  |          nm_device_assume_state_reset(self); | ||||||
|  |   | ||||||
|  | +    if (state < NM_DEVICE_STATE_UNAVAILABLE
 | ||||||
|  | +        || (state >= NM_DEVICE_STATE_IP_CONFIG && state < NM_DEVICE_STATE_ACTIVATED)) {
 | ||||||
|  | +        /* preserve-external-ports is used by NMCheckpoint to activate a master
 | ||||||
|  | +         * device, and preserve already attached ports. This means, this state is only
 | ||||||
|  | +         * relevant during the deactivation and the following activation of the
 | ||||||
|  | +         * right profile. Once we are sufficiently far in the activation of the
 | ||||||
|  | +         * intended profile, we clear the state again. */
 | ||||||
|  | +        nm_device_activation_state_set_preserve_external_ports(self, FALSE);
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  |      if (state <= NM_DEVICE_STATE_UNAVAILABLE) { | ||||||
|  |          if (available_connections_del_all(self)) | ||||||
|  |              _notify(self, PROP_AVAILABLE_CONNECTIONS); | ||||||
|  | @@ -15790,6 +15815,50 @@ nm_device_get_state(NMDevice *self)
 | ||||||
|  |      return NM_DEVICE_GET_PRIVATE(self)->state; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +/*****************************************************************************/
 | ||||||
|  | +
 | ||||||
|  | +/**
 | ||||||
|  | + * nm_device_activation_state_set_preserve_external_ports:
 | ||||||
|  | + * @self: the NMDevice.
 | ||||||
|  | + * @flag: whether to set or clear the the flag.
 | ||||||
|  | + *
 | ||||||
|  | + * This sets an internal flag to true, which does something specific.
 | ||||||
|  | + * For non-master devices, it has no effect. For master devices, this
 | ||||||
|  | + * will prevent to detach all external ports, until the next activation
 | ||||||
|  | + * completes.
 | ||||||
|  | + *
 | ||||||
|  | + * This is used during checkpoint/rollback. We may want to preserve
 | ||||||
|  | + * externally attached ports during the restore. NMCheckpoint will
 | ||||||
|  | + * call this before doing a re-activation. By setting the flag,
 | ||||||
|  | + * we basically preserve such ports.
 | ||||||
|  | + *
 | ||||||
|  | + * Once we reach again ACTIVATED state, the flag gets cleared. This
 | ||||||
|  | + * only has effect for the next activation cycle. */
 | ||||||
|  | +void
 | ||||||
|  | +nm_device_activation_state_set_preserve_external_ports(NMDevice *self, gboolean flag)
 | ||||||
|  | +{
 | ||||||
|  | +    NMDevicePrivate *priv;
 | ||||||
|  | +
 | ||||||
|  | +    g_return_if_fail(NM_IS_DEVICE(self));
 | ||||||
|  | +
 | ||||||
|  | +    priv = NM_DEVICE_GET_PRIVATE(self);
 | ||||||
|  | +
 | ||||||
|  | +    if (!NM_IS_DEVICE_BRIDGE(self)) {
 | ||||||
|  | +        /* This is actually only implemented for bridge devices. While it might
 | ||||||
|  | +         * make sense for bond/team or OVS, it's not clear that it is actually
 | ||||||
|  | +         * useful or desirable. */
 | ||||||
|  | +        return;
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  | +    if (priv->activation_state_preserve_external_ports == flag)
 | ||||||
|  | +        return;
 | ||||||
|  | +
 | ||||||
|  | +    priv->activation_state_preserve_external_ports = flag;
 | ||||||
|  | +    _LOGD(LOGD_DEVICE,
 | ||||||
|  | +          "activation-state: preserve-external-ports %s",
 | ||||||
|  | +          flag ? "enabled" : "disabled");
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  /*****************************************************************************/ | ||||||
|  |  /* NMConfigDevice interface related stuff */ | ||||||
|  |   | ||||||
|  | diff --git a/src/core/devices/nm-device.h b/src/core/devices/nm-device.h
 | ||||||
|  | index cfcd4ade6d80..a7badb861087 100644
 | ||||||
|  | --- a/src/core/devices/nm-device.h
 | ||||||
|  | +++ b/src/core/devices/nm-device.h
 | ||||||
|  | @@ -444,6 +444,8 @@ NMDeviceType nm_device_get_device_type(NMDevice *dev);
 | ||||||
|  |  NMLinkType   nm_device_get_link_type(NMDevice *dev); | ||||||
|  |  NMMetered    nm_device_get_metered(NMDevice *dev); | ||||||
|  |   | ||||||
|  | +void nm_device_activation_state_set_preserve_external_ports(NMDevice *self, gboolean flag);
 | ||||||
|  | +
 | ||||||
|  |  guint32 nm_device_get_route_table(NMDevice *self, int addr_family); | ||||||
|  |  guint32 nm_device_get_route_metric(NMDevice *dev, int addr_family); | ||||||
|  |   | ||||||
|  | diff --git a/src/core/nm-checkpoint.c b/src/core/nm-checkpoint.c
 | ||||||
|  | index 0153af970de7..5b48f91aa515 100644
 | ||||||
|  | --- a/src/core/nm-checkpoint.c
 | ||||||
|  | +++ b/src/core/nm-checkpoint.c
 | ||||||
|  | @@ -282,6 +282,11 @@ restore_and_activate_connection(NMCheckpoint *self, DeviceCheckpoint *dev_checkp
 | ||||||
|  |           * an internal subject. */ | ||||||
|  |          if (nm_device_get_state(dev_checkpoint->device) > NM_DEVICE_STATE_DISCONNECTED | ||||||
|  |              && nm_device_get_state(dev_checkpoint->device) < NM_DEVICE_STATE_DEACTIVATING) { | ||||||
|  | +            if (!NM_FLAGS_HAS(priv->flags, NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS)) {
 | ||||||
|  | +                nm_device_activation_state_set_preserve_external_ports(dev_checkpoint->device,
 | ||||||
|  | +                                                                       TRUE);
 | ||||||
|  | +            }
 | ||||||
|  | +
 | ||||||
|  |              nm_device_state_changed(dev_checkpoint->device, | ||||||
|  |                                      NM_DEVICE_STATE_DEACTIVATING, | ||||||
|  |                                      NM_DEVICE_STATE_REASON_NEW_ACTIVATION); | ||||||
|  | diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c
 | ||||||
|  | index 53ef1754bb72..6c73d237c845 100644
 | ||||||
|  | --- a/src/core/nm-manager.c
 | ||||||
|  | +++ b/src/core/nm-manager.c
 | ||||||
|  | @@ -7469,7 +7469,8 @@ impl_manager_checkpoint_create(NMDBusObject                      *obj,
 | ||||||
|  |                          ~((guint32) (NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL | ||||||
|  |                                       | NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS | ||||||
|  |                                       | NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES | ||||||
|  | -                                     | NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING)))) {
 | ||||||
|  | +                                     | NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING
 | ||||||
|  | +                                     | NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS)))) {
 | ||||||
|  |          g_dbus_method_invocation_return_error_literal(invocation, | ||||||
|  |                                                        NM_MANAGER_ERROR, | ||||||
|  |                                                        NM_MANAGER_ERROR_INVALID_ARGUMENTS, | ||||||
|  | diff --git a/src/libnm-core-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h
 | ||||||
|  | index fe2a6c09db58..0d23c7d7a793 100644
 | ||||||
|  | --- a/src/libnm-core-public/nm-dbus-interface.h
 | ||||||
|  | +++ b/src/libnm-core-public/nm-dbus-interface.h
 | ||||||
|  | @@ -959,17 +959,23 @@ typedef enum {
 | ||||||
|  |   *   overlapping younger checkpoints. This opts-in that the | ||||||
|  |   *   checkpoint can be automatically destroyed by the rollback | ||||||
|  |   *   of an older checkpoint. Since: 1.12. | ||||||
|  | + * @NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS: during rollback,
 | ||||||
|  | + *   by default externally added ports attached to bridge devices are preserved.
 | ||||||
|  | + *   With this flag, the rollback detaches all external ports.
 | ||||||
|  | + *   This only has an effect for bridge ports. Before 1.38, 1.36.2, this was the default
 | ||||||
|  | + *   behavior. Since: 1.38, 1.36.2.
 | ||||||
|  |   * | ||||||
|  |   * The flags for CheckpointCreate call | ||||||
|  |   * | ||||||
|  |   * Since: 1.4 (gi flags generated since 1.12) | ||||||
|  |   */ | ||||||
|  |  typedef enum { /*< flags >*/ | ||||||
|  | -               NM_CHECKPOINT_CREATE_FLAG_NONE                   = 0,
 | ||||||
|  | -               NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL            = 0x01,
 | ||||||
|  | -               NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS = 0x02,
 | ||||||
|  | -               NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES = 0x04,
 | ||||||
|  | -               NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING      = 0x08,
 | ||||||
|  | +               NM_CHECKPOINT_CREATE_FLAG_NONE                       = 0,
 | ||||||
|  | +               NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL                = 0x01,
 | ||||||
|  | +               NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS     = 0x02,
 | ||||||
|  | +               NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES     = 0x04,
 | ||||||
|  | +               NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING          = 0x08,
 | ||||||
|  | +               NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS = 0x10,
 | ||||||
|  |  } NMCheckpointCreateFlags; | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | -- 
 | ||||||
|  | 2.35.1 | ||||||
|  | 
 | ||||||
							
								
								
									
										52
									
								
								SOURCES/1003-fix-ovsdb-removal-ports-rhbz1935026.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								SOURCES/1003-fix-ovsdb-removal-ports-rhbz1935026.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | From 482f9671c69800de2077d2dab9352a9b385115d3 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Lubomir Rintel <lkundrak@v3.sk> | ||||||
|  | Date: Tue, 22 Feb 2022 16:18:40 +0100 | ||||||
|  | Subject: [PATCH] ovs-port: fix removal of ovsdb entry if the interface goes | ||||||
|  |  away | ||||||
|  | 
 | ||||||
|  | Hope third time is the charm. | ||||||
|  | 
 | ||||||
|  | The idea here is to remove the OVSDB entry if the device actually went away | ||||||
|  | violently (like, the it was actually removed from the platform), but keep it if | ||||||
|  | we're shutting down. | ||||||
|  | 
 | ||||||
|  | Fixes-test: @ovs_nmstate | ||||||
|  | Fixes: 966413e78f14 ('ovs-port: avoid removing the OVSDB entry if we're shutting down') | ||||||
|  | Fixes: ecc73eb239e6 ('ovs-port: always remove the OVSDB entry on slave release') | ||||||
|  | 
 | ||||||
|  | https://bugzilla.redhat.com/show_bug.cgi?id=2055665 | ||||||
|  | (cherry picked from commit 65fdfb25006acc3c67059792579dd7a770d04768) | ||||||
|  | (cherry picked from commit fee7328c86e5fe8171f8382492f147e7d263891b) | ||||||
|  | ---
 | ||||||
|  |  src/core/devices/ovs/nm-device-ovs-port.c | 8 +++++--- | ||||||
|  |  1 file changed, 5 insertions(+), 3 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/core/devices/ovs/nm-device-ovs-port.c b/src/core/devices/ovs/nm-device-ovs-port.c
 | ||||||
|  | index 8406c3648cef..116f58c43ace 100644
 | ||||||
|  | --- a/src/core/devices/ovs/nm-device-ovs-port.c
 | ||||||
|  | +++ b/src/core/devices/ovs/nm-device-ovs-port.c
 | ||||||
|  | @@ -188,8 +188,10 @@ del_iface_cb(GError *error, gpointer user_data)
 | ||||||
|  |  static void | ||||||
|  |  release_slave(NMDevice *device, NMDevice *slave, gboolean configure) | ||||||
|  |  { | ||||||
|  | -    NMDeviceOvsPort *self = NM_DEVICE_OVS_PORT(device);
 | ||||||
|  | -    bool slave_removed = nm_device_sys_iface_state_get(slave) == NM_DEVICE_SYS_IFACE_STATE_REMOVED;
 | ||||||
|  | +    NMDeviceOvsPort *self              = NM_DEVICE_OVS_PORT(device);
 | ||||||
|  | +    bool             slave_not_managed = !NM_IN_SET(nm_device_sys_iface_state_get(slave),
 | ||||||
|  | +                                        NM_DEVICE_SYS_IFACE_STATE_MANAGED,
 | ||||||
|  | +                                        NM_DEVICE_SYS_IFACE_STATE_ASSUME);
 | ||||||
|  |   | ||||||
|  |      _LOGI(LOGD_DEVICE, "releasing ovs interface %s", nm_device_get_ip_iface(slave)); | ||||||
|  |   | ||||||
|  | @@ -197,7 +199,7 @@ release_slave(NMDevice *device, NMDevice *slave, gboolean configure)
 | ||||||
|  |       * removed and thus we're called with configure=FALSE), we still need | ||||||
|  |       * to make sure its OVSDB entry is gone. | ||||||
|  |       */ | ||||||
|  | -    if (configure || slave_removed) {
 | ||||||
|  | +    if (configure || slave_not_managed) {
 | ||||||
|  |          nm_ovsdb_del_interface(nm_ovsdb_get(), | ||||||
|  |                                 nm_device_get_iface(slave), | ||||||
|  |                                 del_iface_cb, | ||||||
|  | -- 
 | ||||||
|  | 2.35.1 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,82 @@ | |||||||
|  | From 118561e284ff7f28421b19530d4471075b89645c Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Beniamino Galvani <bgalvani@redhat.com> | ||||||
|  | Date: Thu, 10 Mar 2022 12:07:49 +0100 | ||||||
|  | Subject: [PATCH] n-dhcp4: discard NAKs from other servers in SELECTING | ||||||
|  | 
 | ||||||
|  | I got a report of a scenario where multiple servers reply to a REQUEST | ||||||
|  | in SELECTING, and all servers send NAKs except the one which sent the | ||||||
|  | offer, which replies with a ACK. In that scenario, n-dhcp4 is not able | ||||||
|  | to obtain a lease because it restarts from INIT as soon as the first | ||||||
|  | NAK is received. For comparison, dhclient can get a lease because it | ||||||
|  | ignores all NAKs in SELECTING. | ||||||
|  | 
 | ||||||
|  | Arguably, the network is misconfigured there, but it would be great if | ||||||
|  | n-dhcp4 could still work in such scenario. | ||||||
|  | 
 | ||||||
|  | According to RFC 2131, ACK and NAK messages from server must contain a | ||||||
|  | server-id option. The RFC doesn't explicitly say that the client | ||||||
|  | should check the option, but I think it's a reasonable thing to do, at | ||||||
|  | least for NAKs. | ||||||
|  | 
 | ||||||
|  | This patch stores the server-id of the REQUEST in SELECTING, and | ||||||
|  | compares it with the server-id from NAKs, to discard other servers' | ||||||
|  | replies. | ||||||
|  | 
 | ||||||
|  | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1144 | ||||||
|  | ---
 | ||||||
|  |  src/n-dhcp4/src/n-dhcp4-c-connection.c | 19 +++++++++++++++++++ | ||||||
|  |  src/n-dhcp4/src/n-dhcp4-private.h      |  1 + | ||||||
|  |  2 files changed, 20 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/n-dhcp4/src/n-dhcp4-c-connection.c b/src/n-dhcp4/src/n-dhcp4-c-connection.c
 | ||||||
|  | index 4aba97393d..2f660e3b30 100644
 | ||||||
|  | --- a/src/n-dhcp4/src/n-dhcp4-c-connection.c
 | ||||||
|  | +++ b/src/n-dhcp4/src/n-dhcp4-c-connection.c
 | ||||||
|  | @@ -705,6 +705,7 @@ int n_dhcp4_c_connection_select_new(NDhcp4CConnection *connection,
 | ||||||
|  |          message->userdata.start_time = offer->userdata.start_time; | ||||||
|  |          message->userdata.base_time = offer->userdata.base_time; | ||||||
|  |          message->userdata.client_addr = client.s_addr; | ||||||
|  | +        message->userdata.server_id = server.s_addr;
 | ||||||
|  |          n_dhcp4_incoming_get_xid(offer, &xid); | ||||||
|  |          n_dhcp4_outgoing_set_xid(message, xid); | ||||||
|  |   | ||||||
|  | @@ -1224,6 +1225,24 @@ int n_dhcp4_c_connection_dispatch_io(NDhcp4CConnection *connection,
 | ||||||
|  |                                        serv_addr, sizeof(serv_addr))); | ||||||
|  |          } | ||||||
|  |   | ||||||
|  | +        if (type == N_DHCP4_MESSAGE_NAK &&
 | ||||||
|  | +            connection->request->userdata.server_id != INADDR_ANY) {
 | ||||||
|  | +                struct in_addr server;
 | ||||||
|  | +
 | ||||||
|  | +                r = n_dhcp4_incoming_query_server_identifier(message, &server);
 | ||||||
|  | +                if (r)
 | ||||||
|  | +                        return N_DHCP4_E_AGAIN;
 | ||||||
|  | +
 | ||||||
|  | +                if (connection->request->userdata.server_id != server.s_addr) {
 | ||||||
|  | +                        n_dhcp4_log(connection->log_queue,
 | ||||||
|  | +                                    LOG_DEBUG,
 | ||||||
|  | +                                    "discarded NAK with wrong server-id %s",
 | ||||||
|  | +                                    inet_ntop(AF_INET, &server,
 | ||||||
|  | +                                              serv_addr, sizeof(serv_addr)));
 | ||||||
|  | +                        return N_DHCP4_E_AGAIN;
 | ||||||
|  | +                }
 | ||||||
|  | +        }
 | ||||||
|  | +
 | ||||||
|  |          switch (type) { | ||||||
|  |          case N_DHCP4_MESSAGE_OFFER: | ||||||
|  |          case N_DHCP4_MESSAGE_ACK: | ||||||
|  | diff --git a/src/n-dhcp4/src/n-dhcp4-private.h b/src/n-dhcp4/src/n-dhcp4-private.h
 | ||||||
|  | index db7b24ff7d..191e946e70 100644
 | ||||||
|  | --- a/src/n-dhcp4/src/n-dhcp4-private.h
 | ||||||
|  | +++ b/src/n-dhcp4/src/n-dhcp4-private.h
 | ||||||
|  | @@ -202,6 +202,7 @@ struct NDhcp4Outgoing {
 | ||||||
|  |                  uint8_t type; | ||||||
|  |                  uint8_t message_type; | ||||||
|  |                  uint32_t client_addr; | ||||||
|  | +                uint32_t server_id;
 | ||||||
|  |                  uint64_t start_time; | ||||||
|  |                  uint64_t base_time; | ||||||
|  |                  uint64_t send_time; | ||||||
|  | -- 
 | ||||||
|  | 2.35.1 | ||||||
|  | 
 | ||||||
							
								
								
									
										10
									
								
								SOURCES/20-connectivity-fedora.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								SOURCES/20-connectivity-fedora.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | # Enable connectivity checking for NetworkManager. | ||||||
|  | # See `man NetworkManager.conf`. | ||||||
|  | # | ||||||
|  | # Note that connectivity checking works badly with rp_filter set to | ||||||
|  | # strict. Check "/proc/sys/net/ipv4/conf/*/rp_filter". | ||||||
|  | [connectivity] | ||||||
|  | enabled=true | ||||||
|  | uri=http://fedoraproject.org/static/hotspot.txt | ||||||
|  | response=OK | ||||||
|  | interval=300 | ||||||
							
								
								
									
										10
									
								
								SOURCES/20-connectivity-redhat.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								SOURCES/20-connectivity-redhat.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | # Enable connectivity checking for NetworkManager. | ||||||
|  | # See `man NetworkManager.conf`. | ||||||
|  | # | ||||||
|  | # Note that connectivity checking works badly with rp_filter set to | ||||||
|  | # strict. Check "/proc/sys/net/ipv4/conf/*/rp_filter". | ||||||
|  | [connectivity] | ||||||
|  | enabled=true | ||||||
|  | uri=http://static.redhat.com/test/rhel-networkmanager.txt | ||||||
|  | response=OK | ||||||
|  | interval=300 | ||||||
							
								
								
									
										15
									
								
								SOURCES/70-nm-connectivity.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								SOURCES/70-nm-connectivity.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | # The Strict mode of RFC3704 Reverse Path filtering breaks some pretty | ||||||
|  | # common and reasonable use cases. | ||||||
|  | # | ||||||
|  | # Notably, it makes it impossible for NetworkManager to do connectivity | ||||||
|  | # check on a newly arriving default route (it starts with a higher metric | ||||||
|  | # and is bumped lower if there's connectivity). | ||||||
|  | # | ||||||
|  | # Kernel's default is 0 (no filter), systemd configures a Loose filter since | ||||||
|  | # commit 230450d4e4f1 ('sysctl.d: switch net.ipv4.conf.all.rp_filter from 1 | ||||||
|  | # to 2'). However, RHEL systemd package happens to default to Strict mode | ||||||
|  | # for historic reasons. Let's override it if we're doing connectivity | ||||||
|  | # checking. | ||||||
|  | 
 | ||||||
|  | # Source route verification | ||||||
|  | net.ipv4.conf.all.rp_filter = 0 | ||||||
							
								
								
									
										52
									
								
								SOURCES/NetworkManager.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								SOURCES/NetworkManager.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | # Configuration file for NetworkManager. | ||||||
|  | # | ||||||
|  | # See "man 5 NetworkManager.conf" for details. | ||||||
|  | # | ||||||
|  | # The directories /usr/lib/NetworkManager/conf.d/ and /run/NetworkManager/conf.d/ | ||||||
|  | # can contain additional .conf snippets installed by packages. These files are | ||||||
|  | # read before NetworkManager.conf and have thus lowest priority. | ||||||
|  | # The directory /etc/NetworkManager/conf.d/ can contain additional .conf | ||||||
|  | # snippets. Those snippets are merged last and overwrite the settings from this main | ||||||
|  | # file. | ||||||
|  | # | ||||||
|  | # The files within one conf.d/ directory are read in asciibetical order. | ||||||
|  | # | ||||||
|  | # You can prevent loading a file /usr/lib/NetworkManager/conf.d/NAME.conf | ||||||
|  | # by having a file NAME.conf in either /run/NetworkManager/conf.d/ or /etc/NetworkManager/conf.d/. | ||||||
|  | # Likewise, snippets from /run can be prevented from loading by placing | ||||||
|  | # a file with the same name in /etc/NetworkManager/conf.d/. | ||||||
|  | # | ||||||
|  | # If two files define the same key, the one that is read afterwards will overwrite | ||||||
|  | # the previous one. | ||||||
|  | 
 | ||||||
|  | [main] | ||||||
|  | #plugins=keyfile,ifcfg-rh | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [logging] | ||||||
|  | # When debugging NetworkManager, enabling debug logging is of great help. | ||||||
|  | # | ||||||
|  | # Logfiles contain no passwords and little sensitive information. But please | ||||||
|  | # check before posting the file online. You can also personally hand over the | ||||||
|  | # logfile to a NM developer to treat it confidential. Meet us on #nm on Libera.Chat. | ||||||
|  | # | ||||||
|  | # You can also change the log-level at runtime via | ||||||
|  | #   $ nmcli general logging level TRACE domains ALL | ||||||
|  | # However, usually it's cleaner to enable debug logging | ||||||
|  | # in the configuration and restart NetworkManager so that | ||||||
|  | # debug logging is enabled from the start. | ||||||
|  | # | ||||||
|  | # You will find the logfiles in syslog, for example via | ||||||
|  | #   $ journalctl -u NetworkManager | ||||||
|  | # | ||||||
|  | # Please post full logfiles for bug reports without pre-filtering or truncation. | ||||||
|  | # Also, for debugging the entire `journalctl` output can be interesting. Don't | ||||||
|  | # limit unnecessarily with `journalctl -u`. Exceptions are if you are worried | ||||||
|  | # about private data. Check before posting logfiles! | ||||||
|  | # | ||||||
|  | # Note that debug logging of NetworkManager can be quite verbose. Some messages | ||||||
|  | # might be rate-limited by the logging daemon (see RateLimitIntervalSec, RateLimitBurst | ||||||
|  | # in man journald.conf). Please disable rate-limiting before collecting debug logs! | ||||||
|  | # | ||||||
|  | #level=TRACE | ||||||
|  | #domains=ALL | ||||||
							
								
								
									
										3937
									
								
								SPECS/NetworkManager.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3937
									
								
								SPECS/NetworkManager.spec
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user