mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-05 07:40:28 +01:00
platform: let NMPObject implement NMDedupIndexObj
This commit is contained in:
parent
f9202c2ac1
commit
6d9c3eab38
7 changed files with 228 additions and 22 deletions
|
|
@ -190,6 +190,19 @@ nm_utils_exp10 (gint16 ex)
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
guint
|
||||
nm_utils_in6_addr_hash (const struct in6_addr *addr)
|
||||
{
|
||||
guint hash = (guint) 0x897da53981a13ULL;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof (*addr); i++)
|
||||
hash = NM_HASH_COMBINE (hash, ((const guint8 *) addr)[i]);
|
||||
return hash;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
* nm_ethernet_address_is_valid:
|
||||
* @addr: pointer to a binary or ASCII Ethernet address
|
||||
|
|
|
|||
|
|
@ -109,6 +109,8 @@ extern const NMIPAddr nm_ip_addr_zero;
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
guint nm_utils_in6_addr_hash (const struct in6_addr *addr);
|
||||
|
||||
gboolean nm_ethernet_address_is_valid (gconstpointer addr, gssize len);
|
||||
|
||||
gconstpointer nm_utils_ipx_address_clear_host_address (int family, gpointer dst, gconstpointer src, guint8 plen);
|
||||
|
|
|
|||
|
|
@ -4290,6 +4290,26 @@ nm_platform_lnk_vxlan_cmp (const NMPlatformLnkVxlan *a, const NMPlatformLnkVxlan
|
|||
return 0;
|
||||
}
|
||||
|
||||
guint
|
||||
nm_platform_ip4_address_hash (const NMPlatformIP4Address *obj)
|
||||
{
|
||||
guint h = 469681301;
|
||||
|
||||
if (obj) {
|
||||
h = NM_HASH_COMBINE (h, obj->ifindex);
|
||||
h = NM_HASH_COMBINE (h, obj->address);
|
||||
h = NM_HASH_COMBINE (h, obj->plen);
|
||||
h = NM_HASH_COMBINE (h, obj->peer_address);
|
||||
h = NM_HASH_COMBINE (h, obj->addr_source);
|
||||
h = NM_HASH_COMBINE (h, obj->timestamp);
|
||||
h = NM_HASH_COMBINE (h, obj->lifetime);
|
||||
h = NM_HASH_COMBINE (h, obj->preferred);
|
||||
h = NM_HASH_COMBINE (h, obj->n_ifa_flags);
|
||||
h = NM_HASH_COMBINE (h, g_str_hash (obj->label));
|
||||
}
|
||||
return h;
|
||||
}
|
||||
|
||||
int
|
||||
nm_platform_ip4_address_cmp (const NMPlatformIP4Address *a, const NMPlatformIP4Address *b)
|
||||
{
|
||||
|
|
@ -4307,6 +4327,25 @@ nm_platform_ip4_address_cmp (const NMPlatformIP4Address *a, const NMPlatformIP4A
|
|||
return 0;
|
||||
}
|
||||
|
||||
guint
|
||||
nm_platform_ip6_address_hash (const NMPlatformIP6Address *obj)
|
||||
{
|
||||
guint h = 605908909;
|
||||
|
||||
if (obj) {
|
||||
h = NM_HASH_COMBINE (h, obj->ifindex);
|
||||
h = NM_HASH_COMBINE (h, nm_utils_in6_addr_hash (&obj->address));
|
||||
h = NM_HASH_COMBINE (h, obj->plen);
|
||||
h = NM_HASH_COMBINE (h, nm_utils_in6_addr_hash (&obj->peer_address));
|
||||
h = NM_HASH_COMBINE (h, obj->addr_source);
|
||||
h = NM_HASH_COMBINE (h, obj->timestamp);
|
||||
h = NM_HASH_COMBINE (h, obj->lifetime);
|
||||
h = NM_HASH_COMBINE (h, obj->preferred);
|
||||
h = NM_HASH_COMBINE (h, obj->n_ifa_flags);
|
||||
}
|
||||
return h;
|
||||
}
|
||||
|
||||
int
|
||||
nm_platform_ip6_address_cmp (const NMPlatformIP6Address *a, const NMPlatformIP6Address *b)
|
||||
{
|
||||
|
|
@ -4327,6 +4366,37 @@ nm_platform_ip6_address_cmp (const NMPlatformIP6Address *a, const NMPlatformIP6A
|
|||
return 0;
|
||||
}
|
||||
|
||||
guint
|
||||
nm_platform_ip4_route_hash (const NMPlatformIP4Route *obj)
|
||||
{
|
||||
guint h = 1228913327;
|
||||
|
||||
if (obj) {
|
||||
h = NM_HASH_COMBINE (h, obj->ifindex);
|
||||
h = NM_HASH_COMBINE (h, obj->network);
|
||||
h = NM_HASH_COMBINE (h, obj->plen);
|
||||
h = NM_HASH_COMBINE (h, obj->metric);
|
||||
h = NM_HASH_COMBINE (h, obj->gateway);
|
||||
h = NM_HASH_COMBINE (h, obj->rt_source);
|
||||
h = NM_HASH_COMBINE (h, obj->mss);
|
||||
h = NM_HASH_COMBINE (h, obj->scope_inv);
|
||||
h = NM_HASH_COMBINE (h, obj->pref_src);
|
||||
h = NM_HASH_COMBINE (h, obj->rt_cloned);
|
||||
h = NM_HASH_COMBINE (h, obj->tos);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_window);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_cwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_initcwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_initrwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_mtu);
|
||||
h = NM_HASH_COMBINE (h, obj->window);
|
||||
h = NM_HASH_COMBINE (h, obj->cwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->initcwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->initrwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->mtu);
|
||||
}
|
||||
return h;
|
||||
}
|
||||
|
||||
int
|
||||
nm_platform_ip4_route_cmp_full (const NMPlatformIP4Route *a, const NMPlatformIP4Route *b, gboolean consider_host_part)
|
||||
{
|
||||
|
|
@ -4360,6 +4430,38 @@ nm_platform_ip4_route_cmp_full (const NMPlatformIP4Route *a, const NMPlatformIP4
|
|||
return 0;
|
||||
}
|
||||
|
||||
guint
|
||||
nm_platform_ip6_route_hash (const NMPlatformIP6Route *obj)
|
||||
{
|
||||
guint h = 1053326051;
|
||||
|
||||
if (obj) {
|
||||
h = NM_HASH_COMBINE (h, obj->ifindex);
|
||||
h = NM_HASH_COMBINE (h, nm_utils_in6_addr_hash (&obj->network));
|
||||
h = NM_HASH_COMBINE (h, obj->plen);
|
||||
h = NM_HASH_COMBINE (h, obj->metric);
|
||||
h = NM_HASH_COMBINE (h, nm_utils_in6_addr_hash (&obj->gateway));
|
||||
h = NM_HASH_COMBINE (h, nm_utils_in6_addr_hash (&obj->pref_src));
|
||||
h = NM_HASH_COMBINE (h, nm_utils_in6_addr_hash (&obj->src));
|
||||
h = NM_HASH_COMBINE (h, obj->src_plen);
|
||||
h = NM_HASH_COMBINE (h, obj->rt_source);
|
||||
h = NM_HASH_COMBINE (h, obj->mss);
|
||||
h = NM_HASH_COMBINE (h, obj->rt_cloned);
|
||||
h = NM_HASH_COMBINE (h, obj->tos);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_window);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_cwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_initcwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_initrwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->lock_mtu);
|
||||
h = NM_HASH_COMBINE (h, obj->window);
|
||||
h = NM_HASH_COMBINE (h, obj->cwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->initcwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->initrwnd);
|
||||
h = NM_HASH_COMBINE (h, obj->mtu);
|
||||
}
|
||||
return h;
|
||||
}
|
||||
|
||||
int
|
||||
nm_platform_ip6_route_cmp_full (const NMPlatformIP6Route *a, const NMPlatformIP6Route *b, gboolean consider_host_part)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1024,6 +1024,11 @@ nm_platform_ip6_route_cmp (const NMPlatformIP6Route *a, const NMPlatformIP6Route
|
|||
return nm_platform_ip6_route_cmp_full (a, b, TRUE);
|
||||
}
|
||||
|
||||
guint nm_platform_ip4_address_hash (const NMPlatformIP4Address *obj);
|
||||
guint nm_platform_ip6_address_hash (const NMPlatformIP6Address *obj);
|
||||
guint nm_platform_ip4_route_hash (const NMPlatformIP4Route *obj);
|
||||
guint nm_platform_ip6_route_hash (const NMPlatformIP6Route *obj);
|
||||
|
||||
gboolean nm_platform_check_support_kernel_extended_ifa_flags (NMPlatform *self);
|
||||
gboolean nm_platform_check_support_user_ipv6ll (NMPlatform *self);
|
||||
|
||||
|
|
|
|||
|
|
@ -74,17 +74,6 @@ struct _NMPCache {
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static inline guint
|
||||
_id_hash_ip6_addr (const struct in6_addr *addr)
|
||||
{
|
||||
guint hash = (guint) 0x897da53981a13ULL;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof (*addr); i++)
|
||||
hash = NM_HASH_COMBINE (hash, ((const guint8 *) addr)[i]);
|
||||
return hash;
|
||||
}
|
||||
|
||||
static int
|
||||
_vlan_xgress_qos_mappings_cmp (guint n_map,
|
||||
const NMVlanQosMapping *map1,
|
||||
|
|
@ -566,6 +555,37 @@ _vt_cmd_plobj_to_string_id (ip6_address, NMPlatformIP6Address, "%d: %s",
|
|||
_vt_cmd_plobj_to_string_id (ip4_route, NMPlatformIP4Route, "%d: %s/%d %d", obj->ifindex, nm_utils_inet4_ntop ( obj->network, buf1), obj->plen, obj->metric);
|
||||
_vt_cmd_plobj_to_string_id (ip6_route, NMPlatformIP6Route, "%d: %s/%d %d", obj->ifindex, nm_utils_inet6_ntop (&obj->network, buf1), obj->plen, obj->metric);
|
||||
|
||||
guint
|
||||
nmp_object_hash (const NMPObject *obj)
|
||||
{
|
||||
const NMPClass *klass;
|
||||
|
||||
if (!obj)
|
||||
return 0;
|
||||
|
||||
g_return_val_if_fail (NMP_OBJECT_IS_VALID (obj), 0);
|
||||
|
||||
klass = NMP_OBJECT_GET_CLASS (obj);
|
||||
|
||||
if (klass->cmd_obj_hash)
|
||||
return klass->cmd_obj_hash (obj);
|
||||
if (klass->cmd_plobj_hash)
|
||||
return klass->cmd_plobj_hash (&obj->object);
|
||||
return GPOINTER_TO_UINT (obj);
|
||||
}
|
||||
|
||||
static guint
|
||||
_vt_cmd_obj_hash_not_implemented (const NMPObject *obj)
|
||||
{
|
||||
g_return_val_if_reached (0);
|
||||
}
|
||||
|
||||
static guint
|
||||
_vt_cmd_plobj_hash_not_implemented (const NMPlatformObject *obj)
|
||||
{
|
||||
g_return_val_if_reached (0);
|
||||
}
|
||||
|
||||
int
|
||||
nmp_object_cmp (const NMPObject *obj1, const NMPObject *obj2)
|
||||
{
|
||||
|
|
@ -860,7 +880,7 @@ _vt_cmd_plobj_id_hash (ip6_address, NMPlatformIP6Address, {
|
|||
hash = (guint) 2907861637u;
|
||||
hash = hash + ((guint) obj->ifindex);
|
||||
/* for IPv6 addresses, the prefix length is not part of the primary identifier. */
|
||||
hash = NM_HASH_COMBINE (hash, _id_hash_ip6_addr (&obj->address));
|
||||
hash = NM_HASH_COMBINE (hash, nm_utils_in6_addr_hash (&obj->address));
|
||||
})
|
||||
_vt_cmd_plobj_id_hash (ip4_route, NMPlatformIP4Route, {
|
||||
hash = (guint) 2569857221u;
|
||||
|
|
@ -877,7 +897,7 @@ _vt_cmd_plobj_id_hash (ip6_route, NMPlatformIP6Route, {
|
|||
hash = NM_HASH_COMBINE (hash,
|
||||
({
|
||||
struct in6_addr n1;
|
||||
_id_hash_ip6_addr (nm_utils_ip6_address_clear_host_address (&n1, &obj->network, obj->plen));
|
||||
nm_utils_in6_addr_hash (nm_utils_ip6_address_clear_host_address (&n1, &obj->network, obj->plen));
|
||||
}));
|
||||
})
|
||||
|
||||
|
|
@ -1306,6 +1326,48 @@ _vt_cmd_obj_init_cache_id_ipx_route (const NMPObject *obj, NMPCacheIdType id_typ
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static NMDedupMultiObj *
|
||||
_vt_dedup_obj_get_ref (const NMDedupMultiObj *obj)
|
||||
{
|
||||
NMPObject *o = (NMPObject *) obj;
|
||||
|
||||
if (NMP_OBJECT_IS_STACKINIT (o)) {
|
||||
return (NMDedupMultiObj *) nmp_object_new (NMP_OBJECT_GET_TYPE (o),
|
||||
&o->object);
|
||||
}
|
||||
return (NMDedupMultiObj *) nmp_object_ref (o);
|
||||
}
|
||||
|
||||
static void
|
||||
_vt_dedup_obj_put_ref (NMDedupMultiObj *obj)
|
||||
{
|
||||
nmp_object_unref ((NMPObject *) obj);
|
||||
}
|
||||
|
||||
static guint
|
||||
_vt_dedup_obj_full_hash (const NMDedupMultiObj *obj)
|
||||
{
|
||||
return nmp_object_hash ((NMPObject *) obj);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_vt_dedup_obj_full_equal (const NMDedupMultiObj *obj_a,
|
||||
const NMDedupMultiObj *obj_b)
|
||||
{
|
||||
return nmp_object_equal ((NMPObject *) obj_a,
|
||||
(NMPObject *) obj_b);
|
||||
}
|
||||
|
||||
#define DEDUP_MULTI_OBJ_CLASS_INIT() \
|
||||
{ \
|
||||
.obj_get_ref = _vt_dedup_obj_get_ref, \
|
||||
.obj_put_ref = _vt_dedup_obj_put_ref, \
|
||||
.obj_full_hash = _vt_dedup_obj_full_hash, \
|
||||
.obj_full_equal = _vt_dedup_obj_full_equal, \
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
gboolean
|
||||
nmp_cache_use_udev_get (const NMPCache *cache)
|
||||
{
|
||||
|
|
@ -2115,6 +2177,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.signal_type = NM_PLATFORM_SIGNAL_LINK_CHANGED,
|
||||
.supported_cache_ids = _supported_cache_ids_link,
|
||||
.cmd_obj_init_cache_id = _vt_cmd_obj_init_cache_id_link,
|
||||
.cmd_obj_hash = _vt_cmd_obj_hash_not_implemented,
|
||||
.cmd_obj_cmp = _vt_cmd_obj_cmp_link,
|
||||
.cmd_obj_copy = _vt_cmd_obj_copy_link,
|
||||
.cmd_obj_stackinit_id = _vt_cmd_obj_stackinit_id_link,
|
||||
|
|
@ -2127,9 +2190,11 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_link,
|
||||
.cmd_plobj_to_string_id = _vt_cmd_plobj_to_string_id_link,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_link_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_link_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_IP4_ADDRESS - 1] = {
|
||||
.parent = DEDUP_MULTI_OBJ_CLASS_INIT(),
|
||||
.obj_type = NMP_OBJECT_TYPE_IP4_ADDRESS,
|
||||
.sizeof_data = sizeof (NMPObjectIP4Address),
|
||||
.sizeof_public = sizeof (NMPlatformIP4Address),
|
||||
|
|
@ -2147,9 +2212,11 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip4_address,
|
||||
.cmd_plobj_to_string_id = _vt_cmd_plobj_to_string_id_ip4_address,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_ip4_address_to_string,
|
||||
.cmd_plobj_hash = (guint (*) (const NMPlatformObject *obj)) nm_platform_ip4_address_hash,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_ip4_address_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_IP6_ADDRESS - 1] = {
|
||||
.parent = DEDUP_MULTI_OBJ_CLASS_INIT(),
|
||||
.obj_type = NMP_OBJECT_TYPE_IP6_ADDRESS,
|
||||
.sizeof_data = sizeof (NMPObjectIP6Address),
|
||||
.sizeof_public = sizeof (NMPlatformIP6Address),
|
||||
|
|
@ -2167,9 +2234,11 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip6_address,
|
||||
.cmd_plobj_to_string_id = _vt_cmd_plobj_to_string_id_ip6_address,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_ip6_address_to_string,
|
||||
.cmd_plobj_hash = (guint (*) (const NMPlatformObject *obj)) nm_platform_ip6_address_hash,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_ip6_address_cmp
|
||||
},
|
||||
[NMP_OBJECT_TYPE_IP4_ROUTE - 1] = {
|
||||
.parent = DEDUP_MULTI_OBJ_CLASS_INIT(),
|
||||
.obj_type = NMP_OBJECT_TYPE_IP4_ROUTE,
|
||||
.sizeof_data = sizeof (NMPObjectIP4Route),
|
||||
.sizeof_public = sizeof (NMPlatformIP4Route),
|
||||
|
|
@ -2187,9 +2256,11 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip4_route,
|
||||
.cmd_plobj_to_string_id = _vt_cmd_plobj_to_string_id_ip4_route,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_ip4_route_to_string,
|
||||
.cmd_plobj_hash = (guint (*) (const NMPlatformObject *obj)) nm_platform_ip4_route_hash,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_ip4_route_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_IP6_ROUTE - 1] = {
|
||||
.parent = DEDUP_MULTI_OBJ_CLASS_INIT(),
|
||||
.obj_type = NMP_OBJECT_TYPE_IP6_ROUTE,
|
||||
.sizeof_data = sizeof (NMPObjectIP6Route),
|
||||
.sizeof_public = sizeof (NMPlatformIP6Route),
|
||||
|
|
@ -2207,6 +2278,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.cmd_plobj_id_hash = _vt_cmd_plobj_id_hash_ip6_route,
|
||||
.cmd_plobj_to_string_id = _vt_cmd_plobj_to_string_id_ip6_route,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_ip6_route_to_string,
|
||||
.cmd_plobj_hash = (guint (*) (const NMPlatformObject *obj)) nm_platform_ip6_route_hash,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_ip6_route_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_GRE - 1] = {
|
||||
|
|
@ -2216,6 +2288,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "gre",
|
||||
.lnk_link_type = NM_LINK_TYPE_GRE,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_gre_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_gre_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_INFINIBAND - 1] = {
|
||||
|
|
@ -2225,6 +2298,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "infiniband",
|
||||
.lnk_link_type = NM_LINK_TYPE_INFINIBAND,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_infiniband_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_infiniband_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_IP6TNL - 1] = {
|
||||
|
|
@ -2234,6 +2308,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "ip6tnl",
|
||||
.lnk_link_type = NM_LINK_TYPE_IP6TNL,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_ip6tnl_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_ip6tnl_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_IPIP - 1] = {
|
||||
|
|
@ -2243,6 +2318,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "ipip",
|
||||
.lnk_link_type = NM_LINK_TYPE_IPIP,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_ipip_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_ipip_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_MACSEC - 1] = {
|
||||
|
|
@ -2252,6 +2328,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "macsec",
|
||||
.lnk_link_type = NM_LINK_TYPE_MACSEC,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_macsec_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_macsec_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_MACVLAN - 1] = {
|
||||
|
|
@ -2261,6 +2338,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "macvlan",
|
||||
.lnk_link_type = NM_LINK_TYPE_MACVLAN,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_macvlan_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_macvlan_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_MACVTAP - 1] = {
|
||||
|
|
@ -2270,6 +2348,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "macvtap",
|
||||
.lnk_link_type = NM_LINK_TYPE_MACVTAP,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_macvlan_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_macvlan_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_SIT - 1] = {
|
||||
|
|
@ -2279,6 +2358,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "sit",
|
||||
.lnk_link_type = NM_LINK_TYPE_SIT,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_sit_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_sit_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_VLAN - 1] = {
|
||||
|
|
@ -2287,11 +2367,13 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.sizeof_public = sizeof (NMPlatformLnkVlan),
|
||||
.obj_type_name = "vlan",
|
||||
.lnk_link_type = NM_LINK_TYPE_VLAN,
|
||||
.cmd_obj_hash = _vt_cmd_obj_hash_not_implemented,
|
||||
.cmd_obj_cmp = _vt_cmd_obj_cmp_lnk_vlan,
|
||||
.cmd_obj_copy = _vt_cmd_obj_copy_lnk_vlan,
|
||||
.cmd_obj_dispose = _vt_cmd_obj_dispose_lnk_vlan,
|
||||
.cmd_obj_to_string = _vt_cmd_obj_to_string_lnk_vlan,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_vlan_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_vlan_cmp,
|
||||
},
|
||||
[NMP_OBJECT_TYPE_LNK_VXLAN - 1] = {
|
||||
|
|
@ -2301,6 +2383,7 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = {
|
|||
.obj_type_name = "vxlan",
|
||||
.lnk_link_type = NM_LINK_TYPE_VXLAN,
|
||||
.cmd_plobj_to_string = (const char *(*) (const NMPlatformObject *obj, char *buf, gsize len)) nm_platform_lnk_vxlan_to_string,
|
||||
.cmd_plobj_hash = _vt_cmd_plobj_hash_not_implemented,
|
||||
.cmd_plobj_cmp = (int (*) (const NMPlatformObject *obj1, const NMPlatformObject *obj2)) nm_platform_lnk_vxlan_cmp,
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#define __NMP_OBJECT_H__
|
||||
|
||||
#include "nm-utils/nm-obj.h"
|
||||
#include "nm-utils/nm-dedup-multi.h"
|
||||
#include "nm-platform.h"
|
||||
#include "nm-multi-index.h"
|
||||
|
||||
|
|
@ -139,7 +140,7 @@ struct _NMPCacheId {
|
|||
};
|
||||
|
||||
typedef struct {
|
||||
NMObjBaseClass parent;
|
||||
NMDedupMultiObjClass parent;
|
||||
const char *obj_type_name;
|
||||
int sizeof_data;
|
||||
int sizeof_public;
|
||||
|
|
@ -158,6 +159,7 @@ typedef struct {
|
|||
* initialize @id and set @out_id to it. Otherwise, @out_id is NULL. */
|
||||
gboolean (*cmd_obj_init_cache_id) (const NMPObject *obj, NMPCacheIdType id_type, NMPCacheId *id, const NMPCacheId **out_id);
|
||||
|
||||
guint (*cmd_obj_hash) (const NMPObject *obj);
|
||||
int (*cmd_obj_cmp) (const NMPObject *obj1, const NMPObject *obj2);
|
||||
void (*cmd_obj_copy) (NMPObject *dst, const NMPObject *src);
|
||||
void (*cmd_obj_stackinit_id) (NMPObject *obj, const NMPObject *src);
|
||||
|
|
@ -172,6 +174,7 @@ typedef struct {
|
|||
guint (*cmd_plobj_id_hash) (const NMPlatformObject *obj);
|
||||
const char *(*cmd_plobj_to_string_id) (const NMPlatformObject *obj, char *buf, gsize buf_size);
|
||||
const char *(*cmd_plobj_to_string) (const NMPlatformObject *obj, char *buf, gsize len);
|
||||
guint (*cmd_plobj_hash) (const NMPlatformObject *obj);
|
||||
int (*cmd_plobj_cmp) (const NMPlatformObject *obj1, const NMPlatformObject *obj2);
|
||||
} NMPClass;
|
||||
|
||||
|
|
@ -269,7 +272,7 @@ typedef struct {
|
|||
|
||||
struct _NMPObject {
|
||||
union {
|
||||
NMObjBaseInst parent;
|
||||
NMDedupMultiObj parent;
|
||||
const NMPClass *_class;
|
||||
};
|
||||
guint _ref_count;
|
||||
|
|
@ -398,6 +401,7 @@ const NMPObject *nmp_object_stackinit_id_ip4_route (NMPObject *obj, int ifindex,
|
|||
const NMPObject *nmp_object_stackinit_id_ip6_route (NMPObject *obj, int ifindex, const struct in6_addr *network, guint8 plen, guint32 metric);
|
||||
|
||||
const char *nmp_object_to_string (const NMPObject *obj, NMPObjectToStringMode to_string_mode, char *buf, gsize buf_size);
|
||||
guint nmp_object_hash (const NMPObject *obj);
|
||||
int nmp_object_cmp (const NMPObject *obj1, const NMPObject *obj2);
|
||||
gboolean nmp_object_equal (const NMPObject *obj1, const NMPObject *obj2);
|
||||
void nmp_object_copy (NMPObject *dst, const NMPObject *src, gboolean id_only);
|
||||
|
|
|
|||
|
|
@ -59,18 +59,15 @@ test_obj_base (void)
|
|||
STATIC_ASSERT (sizeof (o->parent) == sizeof (GTypeInstance));
|
||||
|
||||
STATIC_ASSERT (&c->parent == (void *) c);
|
||||
STATIC_ASSERT (&c->parent.g_type_class == (void *) c);
|
||||
STATIC_ASSERT (&c->parent.g_type == (void *) c);
|
||||
STATIC_ASSERT (&c->parent.g_type == &k->g_type);
|
||||
STATIC_ASSERT (&c->parent.parent.g_type_class == (void *) c);
|
||||
STATIC_ASSERT (&c->parent.parent.g_type == (void *) c);
|
||||
STATIC_ASSERT (&c->parent.parent.g_type == &k->g_type);
|
||||
|
||||
STATIC_ASSERT (sizeof (c->parent) == sizeof (GTypeClass));
|
||||
STATIC_ASSERT (sizeof (c->parent.parent) == sizeof (GTypeClass));
|
||||
|
||||
STATIC_ASSERT (&o->parent == (void *) o);
|
||||
STATIC_ASSERT (&o->parent.klass == (void *) &o->_class);
|
||||
|
||||
STATIC_ASSERT (G_STRUCT_OFFSET (NMPObject, _ref_count) == sizeof (NMObjBaseInst));
|
||||
STATIC_ASSERT (G_STRUCT_OFFSET (NMPClass, obj_type_name) == sizeof (NMObjBaseClass));
|
||||
|
||||
obj = (NMObjBaseInst *) obj_cancellable;
|
||||
g_assert (!NMP_CLASS_IS_VALID ((NMPClass *) obj->klass));
|
||||
g_assert (G_TYPE_CHECK_INSTANCE_TYPE (obj, G_TYPE_CANCELLABLE));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue