summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-10-26 21:35:18 +0100
committerThomas Haller <thaller@redhat.com>2015-11-02 13:57:01 +0100
commitb296325ccaa66f7c0994a40a377b69cdbfe01605 (patch)
tree42a5639a57aa183fe55b7c2cad495e6affd65ee7
parentdae0dbd53361988882158ce9d8af28000eda7645 (diff)
downloadNetworkManager-b296325ccaa66f7c0994a40a377b69cdbfe01605.tar.gz
platform: reimplement netlink flags/enum to string conversions
-rw-r--r--src/platform/nm-linux-platform.c4
-rw-r--r--src/platform/nm-platform.c126
-rw-r--r--src/platform/nm-platform.h5
-rw-r--r--src/platform/tests/test-general.c32
4 files changed, 93 insertions, 74 deletions
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index b092e080b1..553c981fad 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -3611,7 +3611,7 @@ link_change_flags (NMPlatform *platform, int ifindex, unsigned int flags, gboole
_LOGD ("link: change %d: flags %s '%s' (%d)", ifindex,
value ? "set" : "unset",
- rtnl_link_flags2str (flags, buf, sizeof (buf)),
+ nm_platform_link_flags2str (flags, buf, sizeof (buf)),
flags);
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);
_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;
}
#endif
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
index 480b07e18a..11ff1ae041 100644
--- a/src/platform/nm-platform.c
+++ b/src/platform/nm-platform.c
@@ -2514,7 +2514,7 @@ nm_platform_link_to_string (const NMPlatformLink *link, char *buf, gsize len)
if (link->flags) {
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);
}
@@ -2828,47 +2828,95 @@ nm_platform_ip4_address_to_string (const NMPlatformIP4Address *address, char *bu
return buf;
}
-/**
- * nm_platform_addr_flags2str: wrapper for rtnl_addr_flags2str(),
- * which might not yet support some recent address flags.
- **/
-void
-nm_platform_addr_flags2str (int flags, char *buf, size_t size)
+const char *
+nm_platform_link_flags2str (unsigned flags, char *buf, gsize len)
+{
+ static const NMUtilsFlags2StrDesc descs[] = {
+ NM_UTILS_FLAGS2STR (IFF_LOOPBACK, "loopback"),
+ NM_UTILS_FLAGS2STR (IFF_BROADCAST, "broadcast"),
+ NM_UTILS_FLAGS2STR (IFF_POINTOPOINT, "pointopoint"),
+ NM_UTILS_FLAGS2STR (IFF_MULTICAST, "multicast"),
+ NM_UTILS_FLAGS2STR (IFF_NOARP, "noarp"),
+ NM_UTILS_FLAGS2STR (IFF_ALLMULTI, "allmulti"),
+ NM_UTILS_FLAGS2STR (IFF_PROMISC, "promisc"),
+ NM_UTILS_FLAGS2STR (IFF_MASTER, "master"),
+ 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);
+};
+
+const char *
+nm_platform_link_inet6_addrgenmode2str (guint8 mode, char *buf, gsize len)
{
- if ( !NM_FLAGS_ANY (flags, IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE)
- || nm_platform_check_support_libnl_extended_ifa_flags ())
- rtnl_addr_flags2str (flags, buf, size);
- else {
- /* There are two recent flags IFA_F_MANAGETEMPADDR and IFA_F_NOPREFIXROUTE.
- * If libnl does not yet support them, add them by hand.
- * These two flags were introduced together with the extended ifa_flags
- * so check for nm_platform_check_support_libnl_extended_ifa_flags (). */
- gboolean has_other_unknown_flags = FALSE;
- size_t len;
-
- /* if there are unknown flags to rtnl_addr_flags2str(), libnl appends ','
- * to indicate them. We want to keep this behavior, if there are other
- * unknown flags present. */
-
- rtnl_addr_flags2str (flags & ~(IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE), buf, size);
-
- len = strlen (buf);
- if (len > 0) {
- has_other_unknown_flags = (buf[len - 1] == ',');
- if (!has_other_unknown_flags)
- g_strlcat (buf, ",", size);
- }
+ nm_utils_to_string_buffer_init (&buf, &len);
- if (NM_FLAGS_ALL (flags, IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE))
- g_strlcat (buf, IFA_F_MANAGETEMPADDR_STR","IFA_F_NOPREFIXROUTE_STR, size);
- else if (NM_FLAGS_HAS (flags, IFA_F_MANAGETEMPADDR))
- g_strlcat (buf, IFA_F_MANAGETEMPADDR_STR, size);
- else
- g_strlcat (buf, IFA_F_NOPREFIXROUTE_STR, size);
+ switch (mode) {
+ case NM_IN6_ADDR_GEN_MODE_NONE:
+ g_snprintf (buf, len, "none");
+ break;
+ case NM_IN6_ADDR_GEN_MODE_EUI64:
+ g_snprintf (buf, len, "eui64");
+ 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;
+}
+
+const char *
+nm_platform_addr_flags2str (unsigned flags, char *buf, gsize len)
+{
+ static const NMUtilsFlags2StrDesc descs[] = {
+ NM_UTILS_FLAGS2STR (IFA_F_SECONDARY, "secondary"),
+ 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);
+};
+
+const char *
+nm_platform_route_scope2str (int scope, char *buf, gsize len)
+{
+ nm_utils_to_string_buffer_init (&buf, &len);
- if (has_other_unknown_flags)
- g_strlcat (buf, ",", size);
+ 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,
source_to_string (route->source),
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 ? inet_ntop (AF_INET, &route->pref_src, s_pref_src, sizeof(s_pref_src)) : "");
return buf;
diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h
index 2c6831e32d..4554cefe3c 100644
--- a/src/platform/nm-platform.h
+++ b/src/platform/nm-platform.h
@@ -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_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);
diff --git a/src/platform/tests/test-general.c b/src/platform/tests/test-general.c
index 20522b5b85..f342e5653e 100644
--- a/src/platform/tests/test-general.c
+++ b/src/platform/tests/test-general.c
@@ -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 ();
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/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 ();
}