l3cfg: track ifname in NML3Cfg

This commit is contained in:
Thomas Haller 2020-07-21 11:57:31 +02:00
parent b5c563329a
commit 62ea998d32
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 50 additions and 0 deletions

View file

@ -5,6 +5,7 @@
#include "nm-l3cfg.h"
#include "platform/nm-platform.h"
#include "platform/nmp-object.h"
#include "nm-netns.h"
/*****************************************************************************/
@ -35,9 +36,43 @@ G_DEFINE_TYPE (NML3Cfg, nm_l3cfg, G_TYPE_OBJECT)
/*****************************************************************************/
static void
_load_link (NML3Cfg *self, gboolean initial)
{
nm_auto_nmpobj const NMPObject *obj_old = NULL;
const NMPObject *obj;
const char *ifname;
const char *ifname_old;
obj = nm_platform_link_get_obj (self->priv.platform, self->priv.ifindex, TRUE);
if ( initial
&& obj == self->priv.pllink)
return;
obj_old = g_steal_pointer (&self->priv.pllink);
self->priv.pllink = nmp_object_ref (obj);
ifname_old = nmp_object_link_get_ifname (obj_old);
ifname = nmp_object_link_get_ifname (self->priv.pllink);
if (initial) {
_LOGT ("link ifname changed: %s%s%s (initial)",
NM_PRINT_FMT_QUOTE_STRING (ifname));
} else if (!nm_streq0 (ifname, ifname_old)) {
_LOGT ("link ifname changed: %s%s%s (was %s%s%s)",
NM_PRINT_FMT_QUOTE_STRING (ifname),
NM_PRINT_FMT_QUOTE_STRING (ifname_old));
}
}
/*****************************************************************************/
void
_nm_l3cfg_notify_platform_change_on_idle (NML3Cfg *self, guint32 obj_type_flags)
{
if (NM_FLAGS_ANY (obj_type_flags, nmp_object_type_to_flags (NMP_OBJECT_TYPE_LINK)))
_load_link (self, FALSE);
}
/*****************************************************************************/
@ -89,6 +124,8 @@ constructed (GObject *object)
NM_HASH_OBFUSCATE_PTR (self->priv.netns));
G_OBJECT_CLASS (nm_l3cfg_parent_class)->constructed (object);
_load_link (self, TRUE);
}
NML3Cfg *
@ -111,6 +148,8 @@ finalize (GObject *object)
g_clear_object (&self->priv.netns);
g_clear_object (&self->priv.platform);
nm_clear_pointer (&self->priv.pllink, nmp_object_unref);
_LOGT ("finalized");
G_OBJECT_CLASS (nm_l3cfg_parent_class)->finalize (object);

View file

@ -3,6 +3,8 @@
#ifndef __NM_L3CFG_H__
#define __NM_L3CFG_H__
#include "platform/nmp-object.h"
#define NM_TYPE_L3CFG (nm_l3cfg_get_type ())
#define NM_L3CFG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_L3CFG, NML3Cfg))
#define NM_L3CFG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_L3CFG, NML3CfgClass))
@ -19,6 +21,7 @@ struct _NML3Cfg {
NMNetns *netns;
NMPlatform *platform;
int ifindex;
const NMPObject *pllink;
} priv;
};
@ -42,6 +45,14 @@ nm_l3cfg_get_ifindex (const NML3Cfg *self)
return self->priv.ifindex;
}
static inline const char *
nm_l3cfg_get_ifname (const NML3Cfg *self)
{
nm_assert (NM_IS_L3CFG (self));
return nmp_object_link_get_ifname (self->priv.pllink);
}
static inline NMNetns *
nm_l3cfg_get_netns (const NML3Cfg *self)
{