diff options
author | Susant Sahani <ssahani@users.noreply.github.com> | 2017-08-31 10:44:43 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2017-08-31 12:44:43 +0200 |
commit | 617da14cfd3ed898fcd1616dc7129a2756cfb347 (patch) | |
tree | 2f3111372cf185c39609d876de6deb3b1a16df44 /src/udev | |
parent | ec9d3a7e1d8beceb2aef11a3ce8a15c0e53130a4 (diff) | |
download | systemd-617da14cfd3ed898fcd1616dc7129a2756cfb347.tar.gz systemd-617da14cfd3ed898fcd1616dc7129a2756cfb347.tar.bz2 systemd-617da14cfd3ed898fcd1616dc7129a2756cfb347.zip |
systemd-link: ethtool add support for more Wake up Lan setting (#6331)
This works supports to configure nicast, multicast, broadcast, arp and SecureOn.
Diffstat (limited to 'src/udev')
-rw-r--r-- | src/udev/net/ethtool-util.c | 81 | ||||
-rw-r--r-- | src/udev/net/ethtool-util.h | 5 |
2 files changed, 63 insertions, 23 deletions
diff --git a/src/udev/net/ethtool-util.c b/src/udev/net/ethtool-util.c index 201fc23437..3e1481e4f7 100644 --- a/src/udev/net/ethtool-util.c +++ b/src/udev/net/ethtool-util.c @@ -41,9 +41,14 @@ DEFINE_STRING_TABLE_LOOKUP(duplex, Duplex); DEFINE_CONFIG_PARSE_ENUM(config_parse_duplex, duplex, Duplex, "Failed to parse duplex setting"); static const char* const wol_table[_WOL_MAX] = { - [WOL_PHY] = "phy", - [WOL_MAGIC] = "magic", - [WOL_OFF] = "off" + [WOL_PHY] = "phy", + [WOL_UCAST] = "unicast", + [WOL_MCAST] = "multicast", + [WOL_BCAST] = "broadcast", + [WOL_ARP] = "arp", + [WOL_MAGIC] = "magic", + [WOL_MAGICSECURE] = "secureon", + [WOL_OFF] = "off" }; DEFINE_STRING_TABLE_LOOKUP(wol, WakeOnLan); @@ -195,26 +200,56 @@ int ethtool_set_wol(int *fd, const char *ifname, WakeOnLan wol) { return -errno; switch (wol) { - case WOL_PHY: - if (ecmd.wolopts != WAKE_PHY) { - ecmd.wolopts = WAKE_PHY; - need_update = true; - } - break; - case WOL_MAGIC: - if (ecmd.wolopts != WAKE_MAGIC) { - ecmd.wolopts = WAKE_MAGIC; - need_update = true; - } - break; - case WOL_OFF: - if (ecmd.wolopts != 0) { - ecmd.wolopts = 0; - need_update = true; - } - break; - default: - break; + case WOL_PHY: + if (ecmd.wolopts != WAKE_PHY) { + ecmd.wolopts = WAKE_PHY; + need_update = true; + } + break; + case WOL_UCAST: + if (ecmd.wolopts != WAKE_UCAST) { + ecmd.wolopts = WAKE_UCAST; + need_update = true; + } + break; + case WOL_MCAST: + if (ecmd.wolopts != WAKE_MCAST) { + ecmd.wolopts = WAKE_MCAST; + need_update = true; + } + break; + case WOL_BCAST: + if (ecmd.wolopts != WAKE_BCAST) { + ecmd.wolopts = WAKE_BCAST; + need_update = true; + } + break; + case WOL_ARP: + if (ecmd.wolopts != WAKE_ARP) { + ecmd.wolopts = WAKE_ARP; + need_update = true; + } + break; + case WOL_MAGIC: + if (ecmd.wolopts != WAKE_MAGIC) { + ecmd.wolopts = WAKE_MAGIC; + need_update = true; + } + break; + case WOL_MAGICSECURE: + if (ecmd.wolopts != WAKE_MAGICSECURE) { + ecmd.wolopts = WAKE_MAGICSECURE; + need_update = true; + } + break; + case WOL_OFF: + if (ecmd.wolopts != 0) { + ecmd.wolopts = 0; + need_update = true; + } + break; + default: + break; } if (need_update) { diff --git a/src/udev/net/ethtool-util.h b/src/udev/net/ethtool-util.h index 27ce0e0aba..89c531ae08 100644 --- a/src/udev/net/ethtool-util.h +++ b/src/udev/net/ethtool-util.h @@ -37,7 +37,12 @@ typedef enum Duplex { typedef enum WakeOnLan { WOL_PHY, + WOL_UCAST, + WOL_MCAST, + WOL_BCAST, + WOL_ARP, WOL_MAGIC, + WOL_MAGICSECURE, WOL_OFF, _WOL_MAX, _WOL_INVALID = -1 |