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:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user