about summary refs log tree commit diff
path: root/src/libnm-glib-aux/nm-shared-utils.h
diff options
context:
space:
mode:
authorSebastien Bacher <seb128@ubuntu.com>2022-05-17 15:30:19 +0200
committerSebastien Bacher <seb128@ubuntu.com>2022-05-17 15:30:19 +0200
commit1e636d8e5e986b9f2260c36bb87fb499d724085c (patch)
treeac613b9372adf622496a7d616050d7e1c09b4fba /src/libnm-glib-aux/nm-shared-utils.h
parentf4966e573c855d4667e6c236d8197d9949020e21 (diff)
parent1a31bc3c63474ca02c83b02add85ea4e740e5597 (diff)
Merge remote-tracking branch 'debian/debian/master' into ubuntu/master
Diffstat (limited to 'src/libnm-glib-aux/nm-shared-utils.h')
-rw-r--r--src/libnm-glib-aux/nm-shared-utils.h133
1 files changed, 92 insertions, 41 deletions
diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h
index 54550f27..daefa068 100644
--- a/src/libnm-glib-aux/nm-shared-utils.h
+++ b/src/libnm-glib-aux/nm-shared-utils.h
@@ -389,15 +389,43 @@ gboolean nm_utils_get_ipv6_interface_identifier(NMLinkType          link_type,
 
 /*****************************************************************************/
 
+/**
+ * _nm_utils_ip4_prefix_to_netmask:
+ * @prefix: a CIDR prefix
+ *
+ * Returns: the netmask represented by the prefix, in network byte order
+ **/
+static inline in_addr_t
+_nm_utils_ip4_prefix_to_netmask(guint32 prefix)
+{
+    nm_assert(prefix <= 32);
+    return prefix < 32 ? ~htonl(0xFFFFFFFFu >> prefix) : 0xFFFFFFFFu;
+}
+
+guint32 _nm_utils_ip4_get_default_prefix0(in_addr_t ip);
+guint32 _nm_utils_ip4_get_default_prefix(in_addr_t ip);
+
 gconstpointer
-nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint8 plen);
-in_addr_t              nm_utils_ip4_address_clear_host_address(in_addr_t addr, guint8 plen);
+nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint32 plen);
+
+/* nm_utils_ip4_address_clear_host_address:
+ * @addr: source ip6 address
+ * @plen: prefix length of network
+ *
+ * returns: the input address, with the host address set to 0.
+ */
+static inline in_addr_t
+nm_utils_ip4_address_clear_host_address(in_addr_t addr, guint32 plen)
+{
+    return addr & _nm_utils_ip4_prefix_to_netmask(plen);
+}
+
 const struct in6_addr *nm_utils_ip6_address_clear_host_address(struct in6_addr       *dst,
                                                                const struct in6_addr *src,
-                                                               guint8                 plen);
+                                                               guint32                plen);
 
 static inline int
-nm_utils_ip4_address_same_prefix_cmp(in_addr_t addr_a, in_addr_t addr_b, guint8 plen)
+nm_utils_ip4_address_same_prefix_cmp(in_addr_t addr_a, in_addr_t addr_b, guint32 plen)
 {
     NM_CMP_DIRECT(htonl(nm_utils_ip4_address_clear_host_address(addr_a, plen)),
                   htonl(nm_utils_ip4_address_clear_host_address(addr_b, plen)));
@@ -406,7 +434,21 @@ nm_utils_ip4_address_same_prefix_cmp(in_addr_t addr_a, in_addr_t addr_b, guint8
 
 int nm_utils_ip6_address_same_prefix_cmp(const struct in6_addr *addr_a,
                                          const struct in6_addr *addr_b,
-                                         guint8                 plen);
+                                         guint32                plen);
+
+static inline gboolean
+nm_utils_ip4_address_same_prefix(in_addr_t addr_a, in_addr_t addr_b, guint32 plen)
+{
+    return nm_utils_ip4_address_same_prefix_cmp(addr_a, addr_b, plen) == 0;
+}
+
+static inline gboolean
+nm_utils_ip6_address_same_prefix(const struct in6_addr *addr_a,
+                                 const struct in6_addr *addr_b,
+                                 guint8                 plen)
+{
+    return nm_utils_ip6_address_same_prefix_cmp(addr_a, addr_b, plen) == 0;
+}
 
 static inline int
 nm_utils_ip_address_same_prefix_cmp(int           addr_family,
@@ -414,8 +456,6 @@ nm_utils_ip_address_same_prefix_cmp(int           addr_family,
                                     gconstpointer addr_b,
                                     guint8        plen)
 {
-    nm_assert_addr_family(addr_family);
-
     NM_CMP_SELF(addr_a, addr_b);
 
     if (NM_IS_IPv4(addr_family)) {
@@ -428,20 +468,6 @@ nm_utils_ip_address_same_prefix_cmp(int           addr_family,
 }
 
 static inline gboolean
-nm_utils_ip4_address_same_prefix(in_addr_t addr_a, in_addr_t addr_b, guint8 plen)
-{
-    return nm_utils_ip4_address_same_prefix_cmp(addr_a, addr_b, plen) == 0;
-}
-
-static inline gboolean
-nm_utils_ip6_address_same_prefix(const struct in6_addr *addr_a,
-                                 const struct in6_addr *addr_b,
-                                 guint8                 plen)
-{
-    return nm_utils_ip6_address_same_prefix_cmp(addr_a, addr_b, plen) == 0;
-}
-
-static inline gboolean
 nm_utils_ip_address_same_prefix(int           addr_family,
                                 gconstpointer addr_a,
                                 gconstpointer addr_b,
@@ -458,6 +484,10 @@ nm_utils_ip_address_same_prefix(int           addr_family,
 
 /*****************************************************************************/
 
+gboolean nm_utils_ip_is_site_local(int addr_family, const void *address);
+
+/*****************************************************************************/
+
 #define NM_IPV4LL_NETWORK ((in_addr_t) (htonl(0xA9FE0000lu)))
 #define NM_IPV4LL_NETMASK ((in_addr_t) (htonl(0xFFFF0000lu)))
 
@@ -974,24 +1004,6 @@ nm_utils_escaped_tokens_options_escape_val(const char *val, char **out_to_free)
 
 /*****************************************************************************/
 
-guint32 _nm_utils_ip4_prefix_to_netmask(guint32 prefix);
-guint32 _nm_utils_ip4_get_default_prefix0(in_addr_t ip);
-guint32 _nm_utils_ip4_get_default_prefix(in_addr_t ip);
-
-gconstpointer
-nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint8 plen);
-in_addr_t              nm_utils_ip4_address_clear_host_address(in_addr_t addr, guint8 plen);
-const struct in6_addr *nm_utils_ip6_address_clear_host_address(struct in6_addr       *dst,
-                                                               const struct in6_addr *src,
-                                                               guint8                 plen);
-int                    nm_utils_ip6_address_same_prefix_cmp(const struct in6_addr *addr_a,
-                                                            const struct in6_addr *addr_b,
-                                                            guint8                 plen);
-
-gboolean nm_utils_ip_is_site_local(int addr_family, const void *address);
-
-/*****************************************************************************/
-
 gboolean nm_utils_parse_inaddr_bin_full(int         addr_family,
                                         gboolean    accept_legacy,
                                         const char *text,
@@ -1047,7 +1059,9 @@ int _nm_utils_ascii_str_to_bool(const char *str, int default_value);
 
 /*****************************************************************************/
 
-extern _nm_thread_local char _nm_utils_to_string_buffer[2096];
+#define NM_UTILS_TO_STRING_BUFFER_SIZE 2096
+
+extern _nm_thread_local char _nm_utils_to_string_buffer[NM_UTILS_TO_STRING_BUFFER_SIZE];
 
 void     nm_utils_to_string_buffer_init(char **buf, gsize *len);
 gboolean nm_utils_to_string_buffer_init_null(gconstpointer obj, char **buf, gsize *len);
@@ -1789,7 +1803,7 @@ nm_g_idle_add_source(GSourceFunc func, gpointer user_data)
     /* A convenience function to attach a new timeout source to the default GMainContext.
      * In that sense it's very similar to g_idle_add() except that it returns a
      * reference to the new source.  */
-    return nm_g_source_attach(nm_g_idle_source_new(G_PRIORITY_DEFAULT, func, user_data, NULL),
+    return nm_g_source_attach(nm_g_idle_source_new(G_PRIORITY_DEFAULT_IDLE, func, user_data, NULL),
                               NULL);
 }
 
@@ -1931,6 +1945,8 @@ nm_g_main_context_iterate_ready(GMainContext *context)
 
 void nm_g_main_context_iterate_for_msec(GMainContext *context, guint timeout_msec);
 
+gboolean nm_g_main_context_can_acquire(GMainContext *context);
+
 /*****************************************************************************/
 
 static inline int
@@ -2111,6 +2127,12 @@ char *nm_utils_g_slist_strlist_join(const GSList *a, const char *separator);
 
 /*****************************************************************************/
 
+static inline gpointer
+nm_g_array_data(const GArray *arr)
+{
+    return arr ? arr->data : NULL;
+}
+
 static inline guint
 nm_g_array_len(const GArray *arr)
 {
@@ -2708,6 +2730,8 @@ char *nm_utils_bin2hexstr_full(gconstpointer addr,
                                gboolean      upper_case,
                                char         *out);
 
+char *_nm_utils_bin2hexstr(gconstpointer src, gsize len, int final_len);
+
 #define nm_utils_bin2hexstr_a(addr, length, delimiter, upper_case, str_to_free)               \
     ({                                                                                        \
         gconstpointer _addr        = (addr);                                                  \
@@ -3139,6 +3163,33 @@ nm_strvarray_remove_first(GArray *strv, const char *needle)
     return TRUE;
 }
 
+static inline int
+nm_strvarray_cmp(const GArray *a, const GArray *b)
+{
+    NM_CMP_SELF(a, b);
+
+    return nm_strv_cmp_n((const char *const *) a->data,
+                         a->len,
+                         (const char *const *) b->data,
+                         b->len);
+}
+
+#define nm_strvarray_equal(a, b) (nm_strvarray_cmp((a), (b)) == 0)
+
+static inline int
+_nm_strvarray_cmp_strv(const GArray *strv, const char *const *ss, gsize ss_len)
+{
+    return nm_strv_cmp_n(strv ? (const char *const *) strv->data : NULL,
+                         strv ? ((gssize) strv->len) : -1,
+                         ss,
+                         ss_len);
+}
+#define nm_strvarray_cmp_strv(strv, ss, ss_len) \
+    _nm_strvarray_cmp_strv((strv), NM_CAST_STRV_CC(ss), (ss_len))
+
+#define nm_strvarray_equal_strv(strv, ss, ss_len) \
+    (nm_strvarray_cmp_strv((strv), (ss), (ss_len)) == 0)
+
 /*****************************************************************************/
 
 struct _NMVariantAttributeSpec {