diff options
author | Thomas Haller <thaller@redhat.com> | 2020-07-21 11:57:31 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-07-23 15:29:25 +0200 |
commit | 62ea998d326424ffeec672db6a386ec2e1c813c9 (patch) | |
tree | 77cb65f09fbe7bd040fbec76f034c9bd148cb3fa | |
parent | b5c563329ac3edc8334bd05ad8f8e8d7fd9c8a8d (diff) | |
download | NetworkManager-62ea998d326424ffeec672db6a386ec2e1c813c9.tar.gz |
l3cfg: track ifname in NML3Cfg
-rw-r--r-- | src/nm-l3cfg.c | 39 | ||||
-rw-r--r-- | src/nm-l3cfg.h | 11 |
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) { |