summaryrefslogtreecommitdiff
path: root/src/udev
diff options
context:
space:
mode:
authorSusant Sahani <ssahani@users.noreply.github.com>2017-08-31 10:44:43 +0000
committerLennart Poettering <lennart@poettering.net>2017-08-31 12:44:43 +0200
commit617da14cfd3ed898fcd1616dc7129a2756cfb347 (patch)
tree2f3111372cf185c39609d876de6deb3b1a16df44 /src/udev
parentec9d3a7e1d8beceb2aef11a3ce8a15c0e53130a4 (diff)
downloadsystemd-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.c81
-rw-r--r--src/udev/net/ethtool-util.h5
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