summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2017-11-30 11:22:34 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2017-12-06 09:53:18 +0100
commiteae63475d9e3ec11bec93ac7d6c5cf2d48de133f (patch)
tree9b171b0e793cc0dfab32fda47bdcc6ddae46fb1d
parent4cbf5947796c6d3776e8481644e992558a4b452a (diff)
downloadNetworkManager-eae63475d9e3ec11bec93ac7d6c5cf2d48de133f.tar.gz
core: add generic functions for set operations
-rw-r--r--src/nm-ip4-config.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h
index 174ea5113a..f53ba02007 100644
--- a/src/nm-ip4-config.h
+++ b/src/nm-ip4-config.h
@@ -405,4 +405,54 @@ nm_ip_config_get_dns_option (const NMIPConfig *self, guint i)
_NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_dns_option, nm_ip6_config_get_dns_option, i);
}
+#define _NM_IP_CONFIG_DISPATCH_SET_OP(dst, src, v4_func, v6_func, ...) \
+ G_STMT_START { \
+ gpointer _dst = (dst); \
+ gconstpointer _src = (src); \
+ int family = nm_ip_config_get_addr_family (_dst); \
+ \
+ nm_assert (family == nm_ip_config_get_addr_family (_src)); \
+ if (family == AF_INET) { \
+ v4_func ((NMIP4Config *) _dst, (const NMIP4Config *) _src, ##__VA_ARGS__); \
+ } else { \
+ nm_assert (family == AF_INET6); \
+ v6_func ((NMIP6Config *) _dst, (const NMIP6Config *) _src, ##__VA_ARGS__); \
+ } \
+ } G_STMT_END
+
+static inline void
+nm_ip_config_intersect (NMIPConfig *dst,
+ const NMIPConfig *src,
+ guint32 default_route_metric_penalty)
+{
+ _NM_IP_CONFIG_DISPATCH_SET_OP (dst, src,
+ nm_ip4_config_intersect,
+ nm_ip6_config_intersect,
+ default_route_metric_penalty);
+}
+
+static inline void
+nm_ip_config_subtract (NMIPConfig *dst,
+ const NMIPConfig *src,
+ guint32 default_route_metric_penalty)
+{
+ _NM_IP_CONFIG_DISPATCH_SET_OP (dst, src,
+ nm_ip4_config_subtract,
+ nm_ip6_config_subtract,
+ default_route_metric_penalty);
+}
+
+static inline void
+nm_ip_config_merge (NMIPConfig *dst,
+ const NMIPConfig *src,
+ NMIPConfigMergeFlags merge_flags,
+ guint32 default_route_metric_penalty)
+{
+ _NM_IP_CONFIG_DISPATCH_SET_OP (dst, src,
+ nm_ip4_config_merge,
+ nm_ip6_config_merge,
+ merge_flags,
+ default_route_metric_penalty);
+}
+
#endif /* __NETWORKMANAGER_IP4_CONFIG_H__ */