mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-08 04:30:36 +01:00
device: merge branch 'th/device-update-default-route'
This commit is contained in:
commit
a787c7db43
1 changed files with 43 additions and 20 deletions
|
|
@ -280,11 +280,11 @@ typedef struct _NMDevicePrivate {
|
|||
NMIP4Config * wwan_ip4_config; /* WWAN configuration */
|
||||
GSList * vpn4_configs; /* VPNs which use this device */
|
||||
struct {
|
||||
gboolean v4_has;
|
||||
gboolean v4_is_assumed;
|
||||
bool v4_has;
|
||||
bool v4_is_assumed;
|
||||
bool v6_has;
|
||||
bool v6_is_assumed;
|
||||
NMPlatformIP4Route v4;
|
||||
gboolean v6_has;
|
||||
gboolean v6_is_assumed;
|
||||
NMPlatformIP6Route v6;
|
||||
} default_route;
|
||||
|
||||
|
|
@ -879,6 +879,34 @@ nm_device_get_ip6_route_metric (NMDevice *self)
|
|||
return _get_ipx_route_metric (self, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
_update_default_route (NMDevice *self, int addr_family, gboolean has, gboolean is_assumed)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
bool *p_has, *p_is_assumed;
|
||||
|
||||
nm_assert (NM_IN_SET (addr_family, 0, AF_INET, AF_INET6));
|
||||
|
||||
if (addr_family == AF_INET) {
|
||||
p_has = &priv->default_route.v4_has;
|
||||
p_is_assumed = &priv->default_route.v4_is_assumed;
|
||||
} else {
|
||||
p_has = &priv->default_route.v6_has;
|
||||
p_is_assumed = &priv->default_route.v6_is_assumed;
|
||||
}
|
||||
|
||||
if (*p_has == has && *p_is_assumed == is_assumed)
|
||||
return;
|
||||
|
||||
*p_has = has;
|
||||
*p_is_assumed = is_assumed;
|
||||
|
||||
if (addr_family == AF_INET)
|
||||
nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), self);
|
||||
else
|
||||
nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), self);
|
||||
}
|
||||
|
||||
const NMPlatformIP4Route *
|
||||
nm_device_get_ip4_default_route (NMDevice *self, gboolean *out_is_assumed)
|
||||
{
|
||||
|
|
@ -2634,11 +2662,11 @@ nm_device_removed (NMDevice *self)
|
|||
* is reacting via NM_DEVICE_IP4_CONFIG_CHANGED/NM_DEVICE_IP6_CONFIG_CHANGED
|
||||
* signal. As NMPolicy registered the NMIPxConfig instances in NMDnsManager,
|
||||
* these would be leaked otherwise. */
|
||||
priv->default_route.v4_has = FALSE;
|
||||
priv->default_route.v4_is_assumed = TRUE;
|
||||
_update_default_route (self, AF_INET, priv->default_route.v4_has, TRUE);
|
||||
_update_default_route (self, AF_INET6, priv->default_route.v6_has, TRUE);
|
||||
_update_default_route (self, AF_INET, FALSE, TRUE);
|
||||
_update_default_route (self, AF_INET6, FALSE, TRUE);
|
||||
nm_device_set_ip4_config (self, NULL, 0, FALSE, FALSE, NULL);
|
||||
priv->default_route.v6_has = FALSE;
|
||||
priv->default_route.v6_is_assumed = TRUE;
|
||||
nm_device_set_ip6_config (self, NULL, FALSE, FALSE, NULL);
|
||||
}
|
||||
|
||||
|
|
@ -10036,20 +10064,15 @@ _cleanup_generic_post (NMDevice *self, CleanupType cleanup_type)
|
|||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
priv->default_route.v4_has = FALSE;
|
||||
priv->default_route.v6_has = FALSE;
|
||||
|
||||
if (cleanup_type == CLEANUP_TYPE_DECONFIGURE) {
|
||||
priv->default_route.v4_is_assumed = FALSE;
|
||||
priv->default_route.v6_is_assumed = FALSE;
|
||||
nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), self);
|
||||
nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), self);
|
||||
_update_default_route (self, AF_INET, FALSE, FALSE);
|
||||
_update_default_route (self, AF_INET6, FALSE, FALSE);
|
||||
} else {
|
||||
_update_default_route (self, AF_INET, priv->default_route.v4_has, TRUE);
|
||||
_update_default_route (self, AF_INET6, priv->default_route.v6_has, TRUE);
|
||||
}
|
||||
|
||||
priv->default_route.v4_is_assumed = TRUE;
|
||||
priv->default_route.v6_is_assumed = TRUE;
|
||||
nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), self);
|
||||
nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), self);
|
||||
_update_default_route (self, AF_INET, FALSE, TRUE);
|
||||
_update_default_route (self, AF_INET6, FALSE, TRUE);
|
||||
|
||||
priv->v4_commit_first_time = TRUE;
|
||||
priv->v6_commit_first_time = TRUE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue