summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-07-21 11:57:31 +0200
committerThomas Haller <thaller@redhat.com>2020-07-23 15:29:25 +0200
commit62ea998d326424ffeec672db6a386ec2e1c813c9 (patch)
tree77cb65f09fbe7bd040fbec76f034c9bd148cb3fa
parentb5c563329ac3edc8334bd05ad8f8e8d7fd9c8a8d (diff)
downloadNetworkManager-62ea998d326424ffeec672db6a386ec2e1c813c9.tar.gz
l3cfg: track ifname in NML3Cfg
-rw-r--r--src/nm-l3cfg.c39
-rw-r--r--src/nm-l3cfg.h11
2 files changed, 50 insertions, 0 deletions
diff --git a/src/nm-l3cfg.c b/src/nm-l3cfg.c
index 6d2f26b8d8..5a0c08a492 100644
--- a/src/nm-l3cfg.c
+++ b/src/nm-l3cfg.c
@@ -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);
diff --git a/src/nm-l3cfg.h b/src/nm-l3cfg.h
index 731b2b46fe..d612161c07 100644
--- a/src/nm-l3cfg.h
+++ b/src/nm-l3cfg.h
@@ -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)
{