mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-07 01:40:53 +01:00
platform: remove unnecessary NMPlatformLink.inet6_token.is_valid field
The only user of platform who accesses this field is NMDevice, when calling nm_platform_link_get_ipv6_token(). It cares more about whether the token is all-zero or set to something. Another use of inet6_token.is_valid was so that when we receive a netlink message without IFLA_INET6_TOKEN attribute, that we don't treat the value as zero, although it is just unknown. Fix that instead in a better way by setting the value from the cache, if IFLA_AF_SPEC doesn't provide it. Also, when printing the token in nm_platform_link_to_string() treat it as an IPv6 address (inet_ntop).
This commit is contained in:
parent
0c40bce314
commit
e5f63f2a50
3 changed files with 44 additions and 29 deletions
|
|
@ -798,9 +798,10 @@ _nl_nlmsg_type_to_str (guint16 type, char *buf, gsize len)
|
|||
static gboolean
|
||||
_parse_af_inet6 (NMPlatform *platform,
|
||||
struct nlattr *attr,
|
||||
NMUtilsIPv6IfaceId *out_iid,
|
||||
guint8 *out_iid_is_valid,
|
||||
guint8 *out_addr_gen_mode_inv)
|
||||
NMUtilsIPv6IfaceId *out_token,
|
||||
gboolean *out_token_valid,
|
||||
guint8 *out_addr_gen_mode_inv,
|
||||
gboolean *out_addr_gen_mode_valid)
|
||||
{
|
||||
static struct nla_policy policy[IFLA_INET6_MAX+1] = {
|
||||
[IFLA_INET6_FLAGS] = { .type = NLA_U32 },
|
||||
|
|
@ -814,7 +815,8 @@ _parse_af_inet6 (NMPlatform *platform,
|
|||
struct nlattr *tb[IFLA_INET6_MAX+1];
|
||||
int err;
|
||||
struct in6_addr i6_token;
|
||||
gboolean iid_is_valid = FALSE;
|
||||
gboolean token_valid = FALSE;
|
||||
gboolean addr_gen_mode_valid = FALSE;
|
||||
guint8 i6_addr_gen_mode_inv = 0;
|
||||
gboolean success = FALSE;
|
||||
|
||||
|
|
@ -831,8 +833,7 @@ _parse_af_inet6 (NMPlatform *platform,
|
|||
|
||||
if (_check_addr_or_errout (tb, IFLA_INET6_TOKEN, sizeof (struct in6_addr))) {
|
||||
nla_memcpy (&i6_token, tb[IFLA_INET6_TOKEN], sizeof (struct in6_addr));
|
||||
if (!IN6_IS_ADDR_UNSPECIFIED (&i6_token))
|
||||
iid_is_valid = TRUE;
|
||||
token_valid = TRUE;
|
||||
}
|
||||
|
||||
/* Hack to detect support addrgenmode of the kernel. We only parse
|
||||
|
|
@ -847,14 +848,18 @@ _parse_af_inet6 (NMPlatform *platform,
|
|||
* to signal "unset". */
|
||||
goto errout;
|
||||
}
|
||||
addr_gen_mode_valid = TRUE;
|
||||
}
|
||||
|
||||
success = TRUE;
|
||||
if (iid_is_valid) {
|
||||
nm_utils_ipv6_interface_identifier_get_from_addr (out_iid, &i6_token);
|
||||
*out_iid_is_valid = TRUE;
|
||||
if (token_valid) {
|
||||
*out_token_valid = token_valid;
|
||||
nm_utils_ipv6_interface_identifier_get_from_addr (out_token, &i6_token);
|
||||
}
|
||||
if (addr_gen_mode_valid) {
|
||||
*out_addr_gen_mode_valid = addr_gen_mode_valid;
|
||||
*out_addr_gen_mode_inv = i6_addr_gen_mode_inv;
|
||||
}
|
||||
*out_addr_gen_mode_inv = i6_addr_gen_mode_inv;
|
||||
errout:
|
||||
return success;
|
||||
}
|
||||
|
|
@ -1429,6 +1434,8 @@ _new_from_nl_link (NMPlatform *platform, const NMPCache *cache, struct nlmsghdr
|
|||
NMPObject *lnk_data = NULL;
|
||||
gboolean address_complete_from_cache = TRUE;
|
||||
gboolean lnk_data_complete_from_cache = TRUE;
|
||||
gboolean af_inet6_token_valid = FALSE;
|
||||
gboolean af_inet6_addr_gen_mode_valid = FALSE;
|
||||
|
||||
if (!nlmsg_valid_hdr (nlh, sizeof (*ifi)))
|
||||
return NULL;
|
||||
|
|
@ -1505,9 +1512,10 @@ _new_from_nl_link (NMPlatform *platform, const NMPCache *cache, struct nlmsghdr
|
|||
case AF_INET6:
|
||||
_parse_af_inet6 (platform,
|
||||
af_attr,
|
||||
&obj->link.inet6_token.iid,
|
||||
&obj->link.inet6_token.is_valid,
|
||||
&obj->link.inet6_addr_gen_mode_inv);
|
||||
&obj->link.inet6_token,
|
||||
&af_inet6_token_valid,
|
||||
&obj->link.inet6_addr_gen_mode_inv,
|
||||
&af_inet6_addr_gen_mode_valid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1549,7 +1557,9 @@ _new_from_nl_link (NMPlatform *platform, const NMPCache *cache, struct nlmsghdr
|
|||
|
||||
if ( completed_from_cache
|
||||
&& ( lnk_data_complete_from_cache
|
||||
|| address_complete_from_cache)) {
|
||||
|| address_complete_from_cache
|
||||
|| !af_inet6_token_valid
|
||||
|| !af_inet6_addr_gen_mode_valid)) {
|
||||
_lookup_cached_link (cache, obj->link.ifindex, completed_from_cache, &link_cached);
|
||||
if (link_cached) {
|
||||
if ( lnk_data_complete_from_cache
|
||||
|
|
@ -1568,6 +1578,10 @@ _new_from_nl_link (NMPlatform *platform, const NMPCache *cache, struct nlmsghdr
|
|||
}
|
||||
if (address_complete_from_cache)
|
||||
obj->link.addr = link_cached->link.addr;
|
||||
if (!af_inet6_token_valid)
|
||||
obj->link.inet6_token = link_cached->link.inet6_token;
|
||||
if (!af_inet6_addr_gen_mode_valid)
|
||||
obj->link.inet6_addr_gen_mode_inv = link_cached->link.inet6_addr_gen_mode_inv;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -923,8 +923,8 @@ nm_platform_link_get_ipv6_token (NMPlatform *self, int ifindex, NMUtilsIPv6Iface
|
|||
|
||||
|
||||
pllink = nm_platform_link_get (self, ifindex);
|
||||
if (pllink && pllink->inet6_token.is_valid) {
|
||||
*iid = pllink->inet6_token.iid;
|
||||
if (pllink && pllink->inet6_token.id) {
|
||||
*iid = pllink->inet6_token;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
|
@ -3067,7 +3067,7 @@ nm_platform_link_to_string (const NMPlatformLink *link, char *buf, gsize len)
|
|||
GString *str_flags;
|
||||
char str_addrmode[30];
|
||||
gs_free char *str_addr = NULL;
|
||||
gs_free char *str_inet6_token = NULL;
|
||||
char str_inet6_token[NM_UTILS_INET_ADDRSTRLEN];
|
||||
const char *str_link_type;
|
||||
|
||||
if (!nm_utils_to_string_buffer_init_null (link, &buf, &len))
|
||||
|
|
@ -3104,8 +3104,14 @@ nm_platform_link_to_string (const NMPlatformLink *link, char *buf, gsize len)
|
|||
|
||||
if (link->addr.len)
|
||||
str_addr = nm_utils_hwaddr_ntoa (link->addr.data, MIN (link->addr.len, sizeof (link->addr.data)));
|
||||
if (link->inet6_token.is_valid)
|
||||
str_inet6_token = nm_utils_hwaddr_ntoa (&link->inet6_token.iid, sizeof (link->inet6_token.iid));
|
||||
|
||||
if (link->inet6_token.id) {
|
||||
struct in6_addr a = IN6ADDR_ANY_INIT;
|
||||
|
||||
nm_utils_ipv6_addr_set_interface_identifier (&a, link->inet6_token);
|
||||
nm_utils_inet6_ntop (&a, str_inet6_token);
|
||||
} else
|
||||
str_inet6_token[0] = '\0';
|
||||
|
||||
str_link_type = nm_link_type_to_string (link->type);
|
||||
|
||||
|
|
@ -3139,8 +3145,8 @@ nm_platform_link_to_string (const NMPlatformLink *link, char *buf, gsize len)
|
|||
link->inet6_addr_gen_mode_inv ? nm_platform_link_inet6_addrgenmode2str (_nm_platform_uint8_inv (link->inet6_addr_gen_mode_inv), str_addrmode, sizeof (str_addrmode)) : "",
|
||||
str_addr ? " addr " : "",
|
||||
str_addr ? str_addr : "",
|
||||
str_inet6_token ? " inet6token " : "",
|
||||
str_inet6_token ? str_inet6_token : "",
|
||||
str_inet6_token[0] ? " inet6token " : "",
|
||||
str_inet6_token[0] ? str_inet6_token : "",
|
||||
link->driver ? " driver " : "",
|
||||
link->driver ? link->driver : "");
|
||||
g_string_free (str_flags, TRUE);
|
||||
|
|
@ -3798,13 +3804,11 @@ nm_platform_link_cmp (const NMPlatformLink *a, const NMPlatformLink *b)
|
|||
_CMP_FIELD (a, b, arptype);
|
||||
_CMP_FIELD (a, b, addr.len);
|
||||
_CMP_FIELD (a, b, inet6_addr_gen_mode_inv);
|
||||
_CMP_FIELD (a, b, inet6_token.is_valid);
|
||||
_CMP_FIELD_STR_INTERNED (a, b, kind);
|
||||
_CMP_FIELD_STR_INTERNED (a, b, driver);
|
||||
if (a->addr.len)
|
||||
_CMP_FIELD_MEMCMP_LEN (a, b, addr.data, a->addr.len);
|
||||
if (a->inet6_token.is_valid)
|
||||
_CMP_FIELD_MEMCMP (a, b, inet6_token.iid);
|
||||
_CMP_FIELD_MEMCMP (a, b, inet6_token);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -147,11 +147,8 @@ struct _NMPlatformLink {
|
|||
guint8 len;
|
||||
} addr;
|
||||
|
||||
/* rtnl_link_inet6_get_token() */
|
||||
struct {
|
||||
NMUtilsIPv6IfaceId iid;
|
||||
guint8 is_valid;
|
||||
} inet6_token;
|
||||
/* rtnl_link_inet6_get_token(), IFLA_INET6_TOKEN */
|
||||
NMUtilsIPv6IfaceId inet6_token;
|
||||
|
||||
/* The bitwise inverse of rtnl_link_inet6_get_addr_gen_mode(). It is inverse
|
||||
* to have a default of 0 -- meaning: unspecified. That way, a struct
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue