mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-01 13:55:36 +00:00
2008-11-07 Dan Williams <dcbw@redhat.com>
* src/nm-ip4-config.c src/nm-ip4-config.h - (nm_ip4_config_diff): new function; return the difference between two IP4 configs - (nm_ip4_config_compare): change into nm_ip4_config_diff git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@4275 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
parent
40ea311602
commit
9340a4122f
|
@ -1,3 +1,11 @@
|
|||
2008-11-07 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* src/nm-ip4-config.c
|
||||
src/nm-ip4-config.h
|
||||
- (nm_ip4_config_diff): new function; return the difference between two
|
||||
IP4 configs
|
||||
- (nm_ip4_config_compare): change into nm_ip4_config_diff
|
||||
|
||||
2008-11-05 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* nm-ip4-config.c
|
||||
|
|
|
@ -544,95 +544,54 @@ addr_array_compare (GArray *a, GArray *b)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_ip4_config_compare (NMIP4Config *a,
|
||||
NMIP4Config *b,
|
||||
NMIP4ConfigCompareFlags flags)
|
||||
NMIP4ConfigCompareFlags
|
||||
nm_ip4_config_diff (NMIP4Config *a, NMIP4Config *b)
|
||||
{
|
||||
NMIP4ConfigPrivate *a_priv = NM_IP4_CONFIG_GET_PRIVATE (a);
|
||||
NMIP4ConfigPrivate *b_priv = NM_IP4_CONFIG_GET_PRIVATE (b);
|
||||
NMIP4ConfigPrivate *a_priv;
|
||||
NMIP4ConfigPrivate *b_priv;
|
||||
NMIP4ConfigCompareFlags flags = NM_IP4_COMPARE_FLAG_NONE;
|
||||
|
||||
g_return_val_if_fail (NM_IS_IP4_CONFIG (a), FALSE);
|
||||
g_return_val_if_fail (NM_IS_IP4_CONFIG (b), FALSE);
|
||||
if ((a && !b) || (b && !a))
|
||||
return 0xFFFFFFFF;
|
||||
if (!a && !b)
|
||||
return NM_IP4_COMPARE_FLAG_NONE;
|
||||
|
||||
if (flags == NM_IP4_COMPARE_FLAG_EXACT)
|
||||
flags = 0xFFFFFFFF;
|
||||
a_priv = NM_IP4_CONFIG_GET_PRIVATE (a);
|
||||
b_priv = NM_IP4_CONFIG_GET_PRIVATE (b);
|
||||
|
||||
if (flags & NM_IP4_COMPARE_FLAG_ADDRESSES) {
|
||||
/* Ensure all A exist in B */
|
||||
if (!addr_slist_compare (a_priv->addresses, b_priv->addresses))
|
||||
return FALSE;
|
||||
if ( !addr_slist_compare (a_priv->addresses, b_priv->addresses)
|
||||
|| !addr_slist_compare (b_priv->addresses, a_priv->addresses))
|
||||
flags |= NM_IP4_COMPARE_FLAG_ADDRESSES;
|
||||
|
||||
/* Ensure all B exist in A */
|
||||
if (!addr_slist_compare (b_priv->addresses, a_priv->addresses))
|
||||
return FALSE;
|
||||
}
|
||||
if (a_priv->ptp_address != b_priv->ptp_address)
|
||||
flags |= NM_IP4_COMPARE_FLAG_PTP_ADDRESS;
|
||||
|
||||
if (flags & NM_IP4_COMPARE_FLAG_PTP_ADDRESS) {
|
||||
if (a_priv->ptp_address != b_priv->ptp_address)
|
||||
return FALSE;
|
||||
}
|
||||
if ( (a_priv->nameservers->len != b_priv->nameservers->len)
|
||||
|| !addr_array_compare (a_priv->nameservers, b_priv->nameservers)
|
||||
|| !addr_array_compare (b_priv->nameservers, a_priv->nameservers))
|
||||
flags |= NM_IP4_COMPARE_FLAG_NAMESERVERS;
|
||||
|
||||
if (flags & NM_IP4_COMPARE_FLAG_NAMESERVERS) {
|
||||
if (a_priv->nameservers->len != b_priv->nameservers->len) /* Shortcut */
|
||||
return FALSE;
|
||||
if ( !route_slist_compare (a_priv->routes, b_priv->routes)
|
||||
|| !route_slist_compare (b_priv->routes, a_priv->routes))
|
||||
flags |= NM_IP4_COMPARE_FLAG_ROUTES;
|
||||
|
||||
/* Ensure all A exist in B */
|
||||
if (!addr_array_compare (a_priv->nameservers, b_priv->nameservers))
|
||||
return FALSE;
|
||||
if ( (a_priv->domains->len != b_priv->domains->len)
|
||||
|| !string_array_compare (a_priv->domains, b_priv->domains)
|
||||
|| !string_array_compare (b_priv->domains, a_priv->domains))
|
||||
flags |= NM_IP4_COMPARE_FLAG_DOMAINS;
|
||||
|
||||
/* Ensure all B exist in A */
|
||||
if (!addr_array_compare (b_priv->nameservers, a_priv->nameservers))
|
||||
return FALSE;
|
||||
}
|
||||
if ( (a_priv->searches->len != b_priv->searches->len)
|
||||
|| !string_array_compare (a_priv->searches, b_priv->searches)
|
||||
|| !string_array_compare (b_priv->searches, a_priv->searches))
|
||||
flags |= NM_IP4_COMPARE_FLAG_SEARCHES;
|
||||
|
||||
if (flags & NM_IP4_COMPARE_FLAG_ROUTES) {
|
||||
/* Ensure all A exist in B */
|
||||
if (!route_slist_compare (a_priv->routes, b_priv->routes))
|
||||
return FALSE;
|
||||
if (a_priv->mtu != b_priv->mtu)
|
||||
flags |= NM_IP4_COMPARE_FLAG_MTU;
|
||||
|
||||
/* Ensure all B exist in A */
|
||||
if (!route_slist_compare (b_priv->routes, a_priv->routes))
|
||||
return FALSE;
|
||||
}
|
||||
if (a_priv->mss != b_priv->mss)
|
||||
flags |= NM_IP4_COMPARE_FLAG_MSS;
|
||||
|
||||
if (flags & NM_IP4_COMPARE_FLAG_DOMAINS) {
|
||||
if (a_priv->domains->len != b_priv->domains->len) /* Shortcut */
|
||||
return FALSE;
|
||||
|
||||
/* Ensure all A exist in B */
|
||||
if (!string_array_compare (a_priv->domains, b_priv->domains))
|
||||
return FALSE;
|
||||
|
||||
/* Ensure all B exist in A */
|
||||
if (!string_array_compare (b_priv->domains, a_priv->domains))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (flags & NM_IP4_COMPARE_FLAG_SEARCHES) {
|
||||
if (a_priv->searches->len != b_priv->searches->len) /* Shortcut */
|
||||
return FALSE;
|
||||
|
||||
/* Ensure all A exist in B */
|
||||
if (!string_array_compare (a_priv->searches, b_priv->searches))
|
||||
return FALSE;
|
||||
|
||||
/* Ensure all B exist in A */
|
||||
if (!string_array_compare (b_priv->searches, a_priv->searches))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (flags & NM_IP4_COMPARE_FLAG_MTU) {
|
||||
if (a_priv->mtu != b_priv->mtu)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (flags & NM_IP4_COMPARE_FLAG_MSS) {
|
||||
if (a_priv->mss != b_priv->mss)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return flags;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -102,7 +102,7 @@ void nm_ip4_config_set_mss (NMIP4Config *config, guint32 ms
|
|||
struct rtnl_addr *nm_ip4_config_to_rtnl_addr (NMIP4Config *config, guint32 i, guint32 flags);
|
||||
|
||||
typedef enum {
|
||||
NM_IP4_COMPARE_FLAG_EXACT = 0x00000000, /* match exactly */
|
||||
NM_IP4_COMPARE_FLAG_NONE = 0x00000000, /* match nothing, kinda pointless */
|
||||
NM_IP4_COMPARE_FLAG_ADDRESSES = 0x00000001,
|
||||
NM_IP4_COMPARE_FLAG_PTP_ADDRESS = 0x00000002,
|
||||
NM_IP4_COMPARE_FLAG_NAMESERVERS = 0x00000004,
|
||||
|
@ -110,9 +110,11 @@ typedef enum {
|
|||
NM_IP4_COMPARE_FLAG_DOMAINS = 0x00000010,
|
||||
NM_IP4_COMPARE_FLAG_SEARCHES = 0x00000020,
|
||||
NM_IP4_COMPARE_FLAG_MTU = 0x00000040,
|
||||
NM_IP4_COMPARE_FLAG_MSS = 0x00000080
|
||||
NM_IP4_COMPARE_FLAG_MSS = 0x00000080,
|
||||
NM_IP4_COMPARE_FLAG_ALL = 0xFFFFFFFF /* match everything */
|
||||
} NMIP4ConfigCompareFlags;
|
||||
|
||||
gboolean nm_ip4_config_compare (NMIP4Config *a, NMIP4Config *b, NMIP4ConfigCompareFlags flags);
|
||||
/* Returns a bitfield representing how the two IP4 configs differ */
|
||||
NMIP4ConfigCompareFlags nm_ip4_config_diff (NMIP4Config *a, NMIP4Config *b);
|
||||
|
||||
#endif /* NM_IP4_CONFIG_H */
|
||||
|
|
Loading…
Reference in a new issue