networkd: simplify and display all devtypes

Every place the kernel actually calls SET_NETDEV_DEVTYPE, it's adding a
piece of information that looks useful and relevant for us to use. So
let's use it when it's there.

The previous matching based on the corresponding ARPHRD didn't really
make much sense. The more sensible logic for getting a textual
representation of the link type is to see if the kernel supplies a
devtype. If it does, great. If not, then we can fall back on the ARPHRD,
as before.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld
2018-01-29 21:02:44 +01:00
parent a18461bc7d
commit f119082e7a
+3 -20
View File
@@ -63,28 +63,11 @@ static int link_get_type_string(unsigned short iftype, sd_device *d, char **ret)
assert(ret);
if (d) {
const char *devtype = NULL, *id = NULL;
const char *devtype = NULL;
(void) sd_device_get_devtype(d, &devtype);
/* WLANs have iftype ARPHRD_ETHER, but we want
* to show a more useful type string for
* them */
if (iftype == ARPHRD_ETHER) {
if (streq_ptr(devtype, "wlan"))
id = "wlan";
else if (streq_ptr(devtype, "wwan"))
id = "wwan";
}
/* Likewise, WireGuard has iftype ARPHRD_NONE,
* since it's layer 3, but we of course want
* something more useful than that. */
if (iftype == ARPHRD_NONE && streq_ptr(devtype, "wireguard"))
id = "wireguard";
if (id) {
p = strdup(id);
if (!isempty(devtype)) {
p = strdup(devtype);
if (!p)
return -ENOMEM;