platform: reimplement netlink flags/enum to string conversions
This commit is contained in:
@@ -3611,7 +3611,7 @@ link_change_flags (NMPlatform *platform, int ifindex, unsigned int flags, gboole
|
|||||||
|
|
||||||
_LOGD ("link: change %d: flags %s '%s' (%d)", ifindex,
|
_LOGD ("link: change %d: flags %s '%s' (%d)", ifindex,
|
||||||
value ? "set" : "unset",
|
value ? "set" : "unset",
|
||||||
rtnl_link_flags2str (flags, buf, sizeof (buf)),
|
nm_platform_link_flags2str (flags, buf, sizeof (buf)),
|
||||||
flags);
|
flags);
|
||||||
|
|
||||||
return do_change_link (platform, change, FALSE);
|
return do_change_link (platform, change, FALSE);
|
||||||
@@ -3683,7 +3683,7 @@ link_set_user_ipv6ll_enabled (NMPlatform *platform, int ifindex, gboolean enable
|
|||||||
|
|
||||||
rtnl_link_inet6_set_addr_gen_mode (nlo, mode);
|
rtnl_link_inet6_set_addr_gen_mode (nlo, mode);
|
||||||
_LOGD ("link: change %d: set IPv6 address generation mode to %s",
|
_LOGD ("link: change %d: set IPv6 address generation mode to %s",
|
||||||
ifindex, rtnl_link_inet6_addrgenmode2str (mode, buf, sizeof (buf)));
|
ifindex, nm_platform_link_inet6_addrgenmode2str (mode, buf, sizeof (buf)));
|
||||||
return do_change_link (platform, nlo, TRUE) == NM_PLATFORM_ERROR_SUCCESS;
|
return do_change_link (platform, nlo, TRUE) == NM_PLATFORM_ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2514,7 +2514,7 @@ nm_platform_link_to_string (const NMPlatformLink *link, char *buf, gsize len)
|
|||||||
if (link->flags) {
|
if (link->flags) {
|
||||||
char str_flags_buf[64];
|
char str_flags_buf[64];
|
||||||
|
|
||||||
rtnl_link_flags2str (link->flags, str_flags_buf, sizeof (str_flags_buf));
|
nm_platform_link_flags2str (link->flags, str_flags_buf, sizeof (str_flags_buf));
|
||||||
g_string_append_printf (str_flags, ";%s", str_flags_buf);
|
g_string_append_printf (str_flags, ";%s", str_flags_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2828,47 +2828,95 @@ nm_platform_ip4_address_to_string (const NMPlatformIP4Address *address, char *bu
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
const char *
|
||||||
* nm_platform_addr_flags2str: wrapper for rtnl_addr_flags2str(),
|
nm_platform_link_flags2str (unsigned flags, char *buf, gsize len)
|
||||||
* which might not yet support some recent address flags.
|
|
||||||
**/
|
|
||||||
void
|
|
||||||
nm_platform_addr_flags2str (int flags, char *buf, size_t size)
|
|
||||||
{
|
{
|
||||||
if ( !NM_FLAGS_ANY (flags, IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE)
|
static const NMUtilsFlags2StrDesc descs[] = {
|
||||||
|| nm_platform_check_support_libnl_extended_ifa_flags ())
|
NM_UTILS_FLAGS2STR (IFF_LOOPBACK, "loopback"),
|
||||||
rtnl_addr_flags2str (flags, buf, size);
|
NM_UTILS_FLAGS2STR (IFF_BROADCAST, "broadcast"),
|
||||||
else {
|
NM_UTILS_FLAGS2STR (IFF_POINTOPOINT, "pointopoint"),
|
||||||
/* There are two recent flags IFA_F_MANAGETEMPADDR and IFA_F_NOPREFIXROUTE.
|
NM_UTILS_FLAGS2STR (IFF_MULTICAST, "multicast"),
|
||||||
* If libnl does not yet support them, add them by hand.
|
NM_UTILS_FLAGS2STR (IFF_NOARP, "noarp"),
|
||||||
* These two flags were introduced together with the extended ifa_flags
|
NM_UTILS_FLAGS2STR (IFF_ALLMULTI, "allmulti"),
|
||||||
* so check for nm_platform_check_support_libnl_extended_ifa_flags (). */
|
NM_UTILS_FLAGS2STR (IFF_PROMISC, "promisc"),
|
||||||
gboolean has_other_unknown_flags = FALSE;
|
NM_UTILS_FLAGS2STR (IFF_MASTER, "master"),
|
||||||
size_t len;
|
NM_UTILS_FLAGS2STR (IFF_SLAVE, "slave"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_DEBUG, "debug"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_DYNAMIC, "dynamic"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_AUTOMEDIA, "automedia"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_PORTSEL, "portsel"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_NOTRAILERS, "notrailers"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_UP, "up"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_RUNNING, "running"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_LOWER_UP, "lowerup"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_DORMANT, "dormant"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFF_ECHO, "echo"),
|
||||||
|
};
|
||||||
|
return nm_utils_flags2str (descs, G_N_ELEMENTS (descs), flags, buf, len);
|
||||||
|
};
|
||||||
|
|
||||||
/* if there are unknown flags to rtnl_addr_flags2str(), libnl appends ','
|
const char *
|
||||||
* to indicate them. We want to keep this behavior, if there are other
|
nm_platform_link_inet6_addrgenmode2str (guint8 mode, char *buf, gsize len)
|
||||||
* unknown flags present. */
|
{
|
||||||
|
nm_utils_to_string_buffer_init (&buf, &len);
|
||||||
|
|
||||||
rtnl_addr_flags2str (flags & ~(IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE), buf, size);
|
switch (mode) {
|
||||||
|
case NM_IN6_ADDR_GEN_MODE_NONE:
|
||||||
len = strlen (buf);
|
g_snprintf (buf, len, "none");
|
||||||
if (len > 0) {
|
break;
|
||||||
has_other_unknown_flags = (buf[len - 1] == ',');
|
case NM_IN6_ADDR_GEN_MODE_EUI64:
|
||||||
if (!has_other_unknown_flags)
|
g_snprintf (buf, len, "eui64");
|
||||||
g_strlcat (buf, ",", size);
|
break;
|
||||||
|
case NM_IN6_ADDR_GEN_MODE_STABLE_PRIVACY:
|
||||||
|
g_snprintf (buf, len, "stable-privacy");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_snprintf (buf, len, "%u", (unsigned) mode);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
if (NM_FLAGS_ALL (flags, IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE))
|
const char *
|
||||||
g_strlcat (buf, IFA_F_MANAGETEMPADDR_STR","IFA_F_NOPREFIXROUTE_STR, size);
|
nm_platform_addr_flags2str (unsigned flags, char *buf, gsize len)
|
||||||
else if (NM_FLAGS_HAS (flags, IFA_F_MANAGETEMPADDR))
|
{
|
||||||
g_strlcat (buf, IFA_F_MANAGETEMPADDR_STR, size);
|
static const NMUtilsFlags2StrDesc descs[] = {
|
||||||
else
|
NM_UTILS_FLAGS2STR (IFA_F_SECONDARY, "secondary"),
|
||||||
g_strlcat (buf, IFA_F_NOPREFIXROUTE_STR, size);
|
NM_UTILS_FLAGS2STR (IFA_F_NODAD, "nodad"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFA_F_OPTIMISTIC, "optimistic"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFA_F_HOMEADDRESS, "homeaddress"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFA_F_DEPRECATED, "deprecated"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFA_F_TENTATIVE, "tentative"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFA_F_PERMANENT, "permanent"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFA_F_MANAGETEMPADDR, "mngtmpaddr"),
|
||||||
|
NM_UTILS_FLAGS2STR (IFA_F_NOPREFIXROUTE, "noprefixroute"),
|
||||||
|
};
|
||||||
|
return nm_utils_flags2str (descs, G_N_ELEMENTS (descs), flags, buf, len);
|
||||||
|
};
|
||||||
|
|
||||||
if (has_other_unknown_flags)
|
const char *
|
||||||
g_strlcat (buf, ",", size);
|
nm_platform_route_scope2str (int scope, char *buf, gsize len)
|
||||||
|
{
|
||||||
|
nm_utils_to_string_buffer_init (&buf, &len);
|
||||||
|
|
||||||
|
switch (scope) {
|
||||||
|
case 255:
|
||||||
|
g_snprintf (buf, len, "nowhere");
|
||||||
|
break;
|
||||||
|
case 254:
|
||||||
|
g_snprintf (buf, len, "host");
|
||||||
|
break;
|
||||||
|
case 200:
|
||||||
|
g_snprintf (buf, len, "site");
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
g_snprintf (buf, len, "global");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_snprintf (buf, len, "%d", scope);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2980,7 +3028,7 @@ nm_platform_ip4_route_to_string (const NMPlatformIP4Route *route, char *buf, gsi
|
|||||||
route->mss,
|
route->mss,
|
||||||
source_to_string (route->source),
|
source_to_string (route->source),
|
||||||
route->scope_inv ? " scope " : "",
|
route->scope_inv ? " scope " : "",
|
||||||
route->scope_inv ? (rtnl_scope2str (nm_platform_route_scope_inv (route->scope_inv), str_scope, sizeof (str_scope))) : "",
|
route->scope_inv ? (nm_platform_route_scope2str (nm_platform_route_scope_inv (route->scope_inv), str_scope, sizeof (str_scope))) : "",
|
||||||
route->pref_src ? " pref-src " : "",
|
route->pref_src ? " pref-src " : "",
|
||||||
route->pref_src ? inet_ntop (AF_INET, &route->pref_src, s_pref_src, sizeof(s_pref_src)) : "");
|
route->pref_src ? inet_ntop (AF_INET, &route->pref_src, s_pref_src, sizeof(s_pref_src)) : "");
|
||||||
return buf;
|
return buf;
|
||||||
|
@@ -796,7 +796,10 @@ gboolean nm_platform_check_support_libnl_extended_ifa_flags (void);
|
|||||||
gboolean nm_platform_check_support_kernel_extended_ifa_flags (NMPlatform *self);
|
gboolean nm_platform_check_support_kernel_extended_ifa_flags (NMPlatform *self);
|
||||||
gboolean nm_platform_check_support_user_ipv6ll (NMPlatform *self);
|
gboolean nm_platform_check_support_user_ipv6ll (NMPlatform *self);
|
||||||
|
|
||||||
void nm_platform_addr_flags2str (int flags, char *buf, size_t size);
|
const char *nm_platform_link_flags2str (unsigned flags, char *buf, gsize len);
|
||||||
|
const char *nm_platform_link_inet6_addrgenmode2str (guint8 mode, char *buf, gsize len);
|
||||||
|
const char *nm_platform_addr_flags2str (unsigned flags, char *buf, gsize len);
|
||||||
|
const char *nm_platform_route_scope2str (int scope, char *buf, gsize len);
|
||||||
|
|
||||||
int nm_platform_ip_address_cmp_expiry (const NMPlatformIPAddress *a, const NMPlatformIPAddress *b);
|
int nm_platform_ip_address_cmp_expiry (const NMPlatformIPAddress *a, const NMPlatformIPAddress *b);
|
||||||
|
|
||||||
|
@@ -53,37 +53,6 @@ test_link_get_all (void)
|
|||||||
|
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
|
|
||||||
static void
|
|
||||||
test_nm_platform_ip6_address_to_string_flags (void)
|
|
||||||
{
|
|
||||||
NMPlatformIP6Address addr = { 0 };
|
|
||||||
|
|
||||||
g_assert_cmpstr (strstr (nm_platform_ip6_address_to_string (&addr, NULL, 0), " flags "), ==, NULL);
|
|
||||||
|
|
||||||
addr.flags = IFA_F_MANAGETEMPADDR;
|
|
||||||
nmtst_assert_str_has_substr (nm_platform_ip6_address_to_string (&addr, NULL, 0), " flags mngtmpaddr ");
|
|
||||||
|
|
||||||
addr.flags = IFA_F_NOPREFIXROUTE;
|
|
||||||
nmtst_assert_str_has_substr (nm_platform_ip6_address_to_string (&addr, NULL, 0), " flags noprefixroute ");
|
|
||||||
|
|
||||||
addr.flags = IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE;
|
|
||||||
nmtst_assert_str_has_substr (nm_platform_ip6_address_to_string (&addr, NULL, 0), " flags mngtmpaddr,noprefixroute ");
|
|
||||||
|
|
||||||
addr.flags = IFA_F_TENTATIVE | IFA_F_NOPREFIXROUTE;
|
|
||||||
nmtst_assert_str_has_substr (nm_platform_ip6_address_to_string (&addr, NULL, 0), " flags tentative,noprefixroute ");
|
|
||||||
|
|
||||||
addr.flags = IFA_F_TENTATIVE | IFA_F_PERMANENT | IFA_F_MANAGETEMPADDR| IFA_F_NOPREFIXROUTE;
|
|
||||||
nmtst_assert_str_has_substr (nm_platform_ip6_address_to_string (&addr, NULL, 0), " flags tentative,permanent,mngtmpaddr,noprefixroute ");
|
|
||||||
|
|
||||||
addr.flags = IFA_F_TENTATIVE | IFA_F_PERMANENT | IFA_F_MANAGETEMPADDR| IFA_F_NOPREFIXROUTE | 0x8000;
|
|
||||||
nmtst_assert_str_has_substr (nm_platform_ip6_address_to_string (&addr, NULL, 0), " flags tentative,permanent,mngtmpaddr,noprefixroute, ");
|
|
||||||
|
|
||||||
addr.flags = IFA_F_TENTATIVE | IFA_F_PERMANENT | IFA_F_MANAGETEMPADDR| IFA_F_NOPREFIXROUTE | ((G_MAXUINT - (G_MAXUINT >> 1)) >> 1);
|
|
||||||
nmtst_assert_str_has_substr (nm_platform_ip6_address_to_string (&addr, NULL, 0), " flags tentative,permanent,mngtmpaddr,noprefixroute, ");
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************/
|
|
||||||
|
|
||||||
NMTST_DEFINE ();
|
NMTST_DEFINE ();
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -93,7 +62,6 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
g_test_add_func ("/general/init_linux_platform", test_init_linux_platform);
|
g_test_add_func ("/general/init_linux_platform", test_init_linux_platform);
|
||||||
g_test_add_func ("/general/link_get_all", test_link_get_all);
|
g_test_add_func ("/general/link_get_all", test_link_get_all);
|
||||||
g_test_add_func ("/general/nm_platform_ip6_address_to_string/flags", test_nm_platform_ip6_address_to_string_flags);
|
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user