core: don't use flags for nm_system_apply_ip[46]_config

nm_platform_*_sync() functions check the cached kernel configuration
items (addresses, routes) before adding addresses to the kernel.
Therefore we don't need to be so careful about pushing NetworkManager
configuration to the kernel.

This patch helps to avoid having to compare nm_ip[46]_config objects,
which should only be created when a configuration change is being
performed.
This commit is contained in:
Pavel Šimerda
2013-07-01 22:58:58 +02:00
parent 7a7d171d6a
commit ca6b360089
5 changed files with 22 additions and 28 deletions

View File

@@ -4344,7 +4344,7 @@ nm_device_set_ip4_config (NMDevice *self,
priv->ip4_config = g_object_ref (new_config); priv->ip4_config = g_object_ref (new_config);
if (commit) if (commit)
success = nm_system_apply_ip4_config (ip_ifindex, new_config, nm_device_get_priority (self), diff); success = nm_system_apply_ip4_config (ip_ifindex, new_config, nm_device_get_priority (self));
if (success || !commit) { if (success || !commit) {
/* Export over D-Bus */ /* Export over D-Bus */
@@ -4401,7 +4401,7 @@ nm_device_set_ip6_config (NMDevice *self,
priv->ip6_config = g_object_ref (new_config); priv->ip6_config = g_object_ref (new_config);
if (commit) if (commit)
success = nm_system_apply_ip6_config (ip_ifindex, new_config, nm_device_get_priority (self), diff); success = nm_system_apply_ip6_config (ip_ifindex, new_config, nm_device_get_priority (self));
if (success || !commit) { if (success || !commit) {
/* Export over D-Bus */ /* Export over D-Bus */

View File

@@ -1625,8 +1625,7 @@ vpn_connection_deactivated (NMPolicy *policy, NMVPNConnection *vpn)
if (parent_ip4) { if (parent_ip4) {
if (!nm_system_apply_ip4_config (nm_device_get_ip_ifindex (parent), if (!nm_system_apply_ip4_config (nm_device_get_ip_ifindex (parent),
parent_ip4, parent_ip4,
nm_device_get_priority (parent), nm_device_get_priority (parent))) {
NM_IP4_COMPARE_FLAG_ADDRESSES | NM_IP4_COMPARE_FLAG_ROUTES)) {
nm_log_err (LOGD_VPN, "failed to re-apply VPN parent device IPv4 addresses and routes."); nm_log_err (LOGD_VPN, "failed to re-apply VPN parent device IPv4 addresses and routes.");
} }
} }
@@ -1646,8 +1645,7 @@ vpn_connection_deactivated (NMPolicy *policy, NMVPNConnection *vpn)
if (parent_ip6) { if (parent_ip6) {
if (!nm_system_apply_ip6_config (nm_device_get_ip_ifindex (parent), if (!nm_system_apply_ip6_config (nm_device_get_ip_ifindex (parent),
parent_ip6, parent_ip6,
nm_device_get_priority (parent), nm_device_get_priority (parent))) {
NM_IP6_COMPARE_FLAG_ADDRESSES | NM_IP6_COMPARE_FLAG_ROUTES)) {
nm_log_err (LOGD_VPN, "failed to re-apply VPN parent device IPv6 addresses and routes."); nm_log_err (LOGD_VPN, "failed to re-apply VPN parent device IPv6 addresses and routes.");
} }
} }

View File

@@ -144,17 +144,16 @@ nm_system_add_ip4_vpn_gateway_route (NMDevice *parent_device, guint32 vpn_gw)
* *
*/ */
gboolean gboolean
nm_system_apply_ip4_config (int ifindex, nm_system_apply_ip4_config (int ifindex, NMIP4Config *config, int priority)
NMIP4Config *config,
int priority,
NMIP4ConfigCompareFlags flags)
{ {
int mtu = nm_ip4_config_get_mtu (config);
int i; int i;
g_return_val_if_fail (ifindex > 0, FALSE); g_return_val_if_fail (ifindex > 0, FALSE);
g_return_val_if_fail (config != NULL, FALSE); g_return_val_if_fail (config != NULL, FALSE);
if (flags & NM_IP4_COMPARE_FLAG_ADDRESSES) { /* Addresses */
{
int count = nm_ip4_config_get_num_addresses (config); int count = nm_ip4_config_get_num_addresses (config);
NMIP4Address *config_address; NMIP4Address *config_address;
GArray *addresses = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP4Address), count); GArray *addresses = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP4Address), count);
@@ -172,7 +171,8 @@ nm_system_apply_ip4_config (int ifindex,
g_array_unref (addresses); g_array_unref (addresses);
} }
if (flags & NM_IP4_COMPARE_FLAG_ROUTES) { /* Routes */
{
int count = nm_ip4_config_get_num_routes (config); int count = nm_ip4_config_get_num_routes (config);
NMIP4Route *config_route; NMIP4Route *config_route;
GArray *routes = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP4Route), count); GArray *routes = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP4Route), count);
@@ -205,10 +205,9 @@ nm_system_apply_ip4_config (int ifindex,
g_array_unref (routes); g_array_unref (routes);
} }
if (flags & NM_IP4_COMPARE_FLAG_MTU) { /* MTU */
if (nm_ip4_config_get_mtu (config)) if (mtu && mtu != nm_platform_link_get_mtu (ifindex))
nm_platform_link_set_mtu (ifindex, nm_ip4_config_get_mtu (config)); nm_platform_link_set_mtu (ifindex, mtu);
}
return TRUE; return TRUE;
} }
@@ -323,15 +322,15 @@ nm_system_add_ip6_vpn_gateway_route (NMDevice *parent_device,
gboolean gboolean
nm_system_apply_ip6_config (int ifindex, nm_system_apply_ip6_config (int ifindex,
NMIP6Config *config, NMIP6Config *config,
int priority, int priority)
NMIP6ConfigCompareFlags flags)
{ {
int i; int i;
g_return_val_if_fail (ifindex > 0, FALSE); g_return_val_if_fail (ifindex > 0, FALSE);
g_return_val_if_fail (config != NULL, FALSE); g_return_val_if_fail (config != NULL, FALSE);
if (flags & NM_IP6_COMPARE_FLAG_ADDRESSES) { /* Addresses */
{
int count = nm_ip6_config_get_num_addresses (config); int count = nm_ip6_config_get_num_addresses (config);
NMIP6Address *config_address; NMIP6Address *config_address;
GArray *addresses = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP6Address), count); GArray *addresses = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP6Address), count);
@@ -349,7 +348,8 @@ nm_system_apply_ip6_config (int ifindex,
g_array_unref (addresses); g_array_unref (addresses);
} }
if (flags & NM_IP6_COMPARE_FLAG_ROUTES) { /* Routes */
{
int count = nm_ip6_config_get_num_routes (config); int count = nm_ip6_config_get_num_routes (config);
NMIP6Route *config_route; NMIP6Route *config_route;
GArray *routes = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP6Route), count); GArray *routes = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP6Route), count);

View File

@@ -34,13 +34,11 @@ NMPlatformIP6Route *nm_system_add_ip6_vpn_gateway_route (NMDevice *parent_device
gboolean nm_system_apply_ip4_config (int ifindex, gboolean nm_system_apply_ip4_config (int ifindex,
NMIP4Config *config, NMIP4Config *config,
int priority, int priority);
NMIP4ConfigCompareFlags flags);
gboolean nm_system_apply_ip6_config (int ifindex, gboolean nm_system_apply_ip6_config (int ifindex,
NMIP6Config *config, NMIP6Config *config,
int priority, int priority);
NMIP6ConfigCompareFlags flags);
gboolean nm_system_apply_bonding_config (const char *iface, gboolean nm_system_apply_bonding_config (const char *iface,
NMSettingBond *s_bond); NMSettingBond *s_bond);

View File

@@ -609,14 +609,12 @@ nm_vpn_connection_apply_config (NMVPNConnection *connection)
nm_platform_link_set_up (priv->ip_ifindex); nm_platform_link_set_up (priv->ip_ifindex);
if (priv->ip4_config) { if (priv->ip4_config) {
if (!nm_system_apply_ip4_config (priv->ip_ifindex, priv->ip4_config, if (!nm_system_apply_ip4_config (priv->ip_ifindex, priv->ip4_config, 0))
0, NM_IP4_COMPARE_FLAG_ALL))
return FALSE; return FALSE;
} }
if (priv->ip6_config) { if (priv->ip6_config) {
if (!nm_system_apply_ip6_config (priv->ip_ifindex, priv->ip6_config, if (!nm_system_apply_ip6_config (priv->ip_ifindex, priv->ip6_config, 0))
0, NM_IP6_COMPARE_FLAG_ALL))
/* FIXME: remove ip4 config */ /* FIXME: remove ip4 config */
return FALSE; return FALSE;
} }