]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemd-link: ethtool add support for more Wake up Lan setting (#6331)
authorSusant Sahani <ssahani@users.noreply.github.com>
Thu, 31 Aug 2017 10:44:43 +0000 (10:44 +0000)
committerLennart Poettering <lennart@poettering.net>
Thu, 31 Aug 2017 10:44:43 +0000 (12:44 +0200)
This works supports to configure nicast, multicast, broadcast, arp and SecureOn.

man/systemd.link.xml
src/udev/net/ethtool-util.c
src/udev/net/ethtool-util.h

index 1e4a1528db8988d09b4cae5097943db927289495..1a13a22877f9e34b864a15b7a1bb6acc3bee070a 100644 (file)
                 <para>Wake on PHY activity.</para>
               </listitem>
             </varlistentry>
+            <varlistentry>
+              <term><literal>unicast</literal></term>
+              <listitem>
+                <para>Wake on unicast messages.</para>
+              </listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><literal>multicast</literal></term>
+              <listitem>
+                <para>Wake on multicast messages.</para>
+              </listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><literal>broadcast</literal></term>
+              <listitem>
+                <para>Wake on broadcast messages.</para>
+              </listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><literal>arp</literal></term>
+              <listitem>
+                <para>Wake on ARP.</para>
+              </listitem>
+            </varlistentry>
             <varlistentry>
               <term><literal>magic</literal></term>
               <listitem>
                 </para>
               </listitem>
             </varlistentry>
+            <varlistentry>
+              <term><literal>secureon</literal></term>
+              <listitem>
+                <para>Enable secureon(tm) password for MagicPacket(tm).
+                </para>
+              </listitem>
+            </varlistentry>
             <varlistentry>
               <term><literal>off</literal></term>
               <listitem>
index 201fc2343726f3ffdbf3d132a2ab7d351fe09951..3e1481e4f7e0afd95752f5017b6bded1219937d6 100644 (file)
@@ -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) {
index 27ce0e0abada70dc772d3eca06953b9fafbb2f64..89c531ae081683e31f37a08fd2b72358fed2feae 100644 (file)
@@ -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