platform: add addr parameter to NMPlatformLink
This commit is contained in:
@@ -928,6 +928,7 @@ init_link (NMPlatform *platform, NMPlatformLink *info, struct rtnl_link *rtnllin
|
|||||||
GUdevDevice *udev_device;
|
GUdevDevice *udev_device;
|
||||||
const char *name;
|
const char *name;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
struct nl_addr *nladdr;
|
||||||
|
|
||||||
g_return_val_if_fail (rtnllink, FALSE);
|
g_return_val_if_fail (rtnllink, FALSE);
|
||||||
|
|
||||||
@@ -952,6 +953,17 @@ init_link (NMPlatform *platform, NMPlatformLink *info, struct rtnl_link *rtnllin
|
|||||||
if (info->type == NM_LINK_TYPE_VLAN)
|
if (info->type == NM_LINK_TYPE_VLAN)
|
||||||
info->vlan_id = rtnl_link_vlan_get_id (rtnllink);
|
info->vlan_id = rtnl_link_vlan_get_id (rtnllink);
|
||||||
|
|
||||||
|
if ((nladdr = rtnl_link_get_addr (rtnllink))) {
|
||||||
|
unsigned int l = 0;
|
||||||
|
|
||||||
|
l = nl_addr_get_len (nladdr);
|
||||||
|
if (l > 0 && l <= NM_UTILS_HWADDR_LEN_MAX) {
|
||||||
|
G_STATIC_ASSERT (NM_UTILS_HWADDR_LEN_MAX == sizeof (info->addr.data));
|
||||||
|
memcpy (info->addr.data, nl_addr_get_binary_addr (nladdr), l);
|
||||||
|
info->addr.len = l;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
udev_device = g_hash_table_lookup (priv->udev_devices, GINT_TO_POINTER (info->ifindex));
|
udev_device = g_hash_table_lookup (priv->udev_devices, GINT_TO_POINTER (info->ifindex));
|
||||||
if (udev_device) {
|
if (udev_device) {
|
||||||
info->driver = nmp_utils_udev_get_driver (udev_device);
|
info->driver = nmp_utils_udev_get_driver (udev_device);
|
||||||
|
@@ -38,6 +38,8 @@
|
|||||||
#include "nm-enum-types.h"
|
#include "nm-enum-types.h"
|
||||||
#include "nm-core-internal.h"
|
#include "nm-core-internal.h"
|
||||||
|
|
||||||
|
G_STATIC_ASSERT (sizeof ( ((NMPlatformLink *) NULL)->addr.data ) == NM_UTILS_HWADDR_LEN_MAX);
|
||||||
|
|
||||||
#define debug(...) nm_log_dbg (LOGD_PLATFORM, __VA_ARGS__)
|
#define debug(...) nm_log_dbg (LOGD_PLATFORM, __VA_ARGS__)
|
||||||
|
|
||||||
#define NM_PLATFORM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_PLATFORM, NMPlatformPrivate))
|
#define NM_PLATFORM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_PLATFORM, NMPlatformPrivate))
|
||||||
@@ -2759,6 +2761,14 @@ nm_platform_ip6_route_to_string (const NMPlatformIP6Route *route)
|
|||||||
return c < 0 ? -1 : 1; \
|
return c < 0 ? -1 : 1; \
|
||||||
} G_STMT_END
|
} G_STMT_END
|
||||||
|
|
||||||
|
#define _CMP_FIELD_MEMCMP_LEN(a, b, field, len) \
|
||||||
|
G_STMT_START { \
|
||||||
|
int c = memcmp (&((a)->field), &((b)->field), \
|
||||||
|
MIN (len, sizeof ((a)->field))); \
|
||||||
|
if (c != 0) \
|
||||||
|
return c < 0 ? -1 : 1; \
|
||||||
|
} G_STMT_END
|
||||||
|
|
||||||
#define _CMP_FIELD_MEMCMP(a, b, field) \
|
#define _CMP_FIELD_MEMCMP(a, b, field) \
|
||||||
G_STMT_START { \
|
G_STMT_START { \
|
||||||
int c = memcmp (&((a)->field), &((b)->field), \
|
int c = memcmp (&((a)->field), &((b)->field), \
|
||||||
@@ -2783,9 +2793,12 @@ nm_platform_link_cmp (const NMPlatformLink *a, const NMPlatformLink *b)
|
|||||||
_CMP_FIELD (a, b, arp);
|
_CMP_FIELD (a, b, arp);
|
||||||
_CMP_FIELD (a, b, mtu);
|
_CMP_FIELD (a, b, mtu);
|
||||||
_CMP_FIELD_BOOL (a, b, initialized);
|
_CMP_FIELD_BOOL (a, b, initialized);
|
||||||
|
_CMP_FIELD (a, b, addr.len);
|
||||||
_CMP_FIELD_STR_INTERNED (a, b, kind);
|
_CMP_FIELD_STR_INTERNED (a, b, kind);
|
||||||
_CMP_FIELD_STR0 (a, b, udi);
|
_CMP_FIELD_STR0 (a, b, udi);
|
||||||
_CMP_FIELD_STR_INTERNED (a, b, driver);
|
_CMP_FIELD_STR_INTERNED (a, b, driver);
|
||||||
|
if (a->addr.len)
|
||||||
|
_CMP_FIELD_MEMCMP_LEN (a, b, addr.data, a->addr.len);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -101,6 +101,12 @@ struct _NMPlatformLink {
|
|||||||
int master;
|
int master;
|
||||||
int parent;
|
int parent;
|
||||||
|
|
||||||
|
/* rtnl_link_get_addr() */
|
||||||
|
struct {
|
||||||
|
guint8 data[20]; /* NM_UTILS_HWADDR_LEN_MAX */
|
||||||
|
guint8 len;
|
||||||
|
} addr;
|
||||||
|
|
||||||
/* rtnl_link_vlan_get_id(), IFLA_VLAN_ID */
|
/* rtnl_link_vlan_get_id(), IFLA_VLAN_ID */
|
||||||
guint16 vlan_id;
|
guint16 vlan_id;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user