]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Revert "network: DHCP6 client- Allow to send manual DUID"
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 22 Aug 2023 05:12:10 +0000 (14:12 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 24 Aug 2023 10:50:36 +0000 (19:50 +0900)
This reverts commits 89e73ce86fb115c2e319bf9f28b63efad2975495 and
543d2a4d45ba199a62c87b3bf69dfd4ff55abf0c.

The commit assign "custom" to fixed DUID type 5. When making DUID fully
configurable, the type number should be also configurable. Also, the
fully custom DUID should be acceptable for DHCPv4.

man/networkd.conf.xml
src/libsystemd-network/dhcp-identifier.c
src/libsystemd-network/dhcp-identifier.h
src/libsystemd-network/sd-dhcp6-client.c
src/network/networkd-dhcp-common.c
src/network/networkd-dhcp6.c
test/test-network/conf/25-dhcp-client-ipv6-only-custom-client-identifier.network [deleted file]
test/test-network/systemd-networkd-tests.py

index 9fa925e85c87d7ff96260fcbabd918205f46b2ee..bf597cac2ecb0e70ccb5d792e95d07e5fd77bd9a 100644 (file)
             </para></listitem>
           </varlistentry>
 
-          <varlistentry>
-            <term><option>custom</option></term>
-            <listitem><para>If <literal>DUIDType=custom</literal>, then the <literal>DUIDRawData=</literal> value will
-            used be as custom identifier. If <literal>DUIDType=custom</literal> is specified then the
-            <literal>DUIDRawData=</literal> key is mandatory. Note it applies only on DHCPv6 clients.</para></listitem>
-          </varlistentry>
-
           <varlistentry>
             <term><option>uuid</option></term>
             <listitem><para>If <literal>DUIDType=uuid</literal>, and <varname>DUIDRawData=</varname> is not set,
index 83fb6ce3408d4d79eeae58764f79cbf8302f1f17..a27d67a315dfe685e8f45a7015d2adc234b19949 100644 (file)
 #define USEC_2000       ((usec_t) 946684800000000) /* 2000-01-01 00:00:00 UTC */
 
 static const char * const duid_type_table[_DUID_TYPE_MAX] = {
-        [DUID_TYPE_LLT]    = "DUID-LLT",
-        [DUID_TYPE_EN]     = "DUID-EN/Vendor",
-        [DUID_TYPE_LL]     = "DUID-LL",
-        [DUID_TYPE_UUID]   = "UUID",
-        [DUID_TYPE_CUSTOM] = "Custom",
+        [DUID_TYPE_LLT]  = "DUID-LLT",
+        [DUID_TYPE_EN]   = "DUID-EN/Vendor",
+        [DUID_TYPE_LL]   = "DUID-LL",
+        [DUID_TYPE_UUID] = "UUID",
 };
 
 DEFINE_STRING_TABLE_LOOKUP_TO_STRING(duid_type, DUIDType);
index 1ac34761573ccdf8d6efd53a53fba588608cbda0..523dfc4a71ba18df6f4cc7f0dbeaf932b3a35c07 100644 (file)
@@ -17,7 +17,6 @@ typedef enum DUIDType {
         DUID_TYPE_EN        = 2,
         DUID_TYPE_LL        = 3,
         DUID_TYPE_UUID      = 4,
-        DUID_TYPE_CUSTOM    = 5,
         _DUID_TYPE_MAX,
         _DUID_TYPE_INVALID  = -EINVAL,
 } DUIDType;
index e8d99718b301583eef66062be2bbccb35aa6b571..2f4053caad01ed630478c367498ac706e28dbd03 100644 (file)
@@ -212,14 +212,10 @@ static int dhcp6_client_set_duid_internal(
                         log_dhcp6_client(client, "Using DUID of type %i of incorrect length, proceeding.", duid_type);
                 }
 
-                if (duid_type == DUID_TYPE_CUSTOM) {
-                        memcpy(&client->duid, duid, duid_len);
-                        client->duid_len = duid_len;
-                } else {
-                        client->duid.type = htobe16(duid_type);
-                        memcpy(&client->duid.raw.data, duid, duid_len);
-                        client->duid_len = sizeof(client->duid.type) + duid_len;
-                }
+                client->duid.type = htobe16(duid_type);
+                memcpy(&client->duid.raw.data, duid, duid_len);
+                client->duid_len = sizeof(client->duid.type) + duid_len;
+
         } else {
                 r = dhcp_identifier_set_duid(duid_type, &client->hw_addr, client->arp_type, llt_time,
                                              client->test_mode, &client->duid, &client->duid_len);
index baf80cb6442b19ce132077a0ae261333ce84bf62..5f9ef80e3e5b681ff9a2e7faa0dcbfcf1d8b4cef 100644 (file)
@@ -1106,11 +1106,10 @@ static const char * const dhcp_option_data_type_table[_DHCP_OPTION_DATA_MAX] = {
 DEFINE_STRING_TABLE_LOOKUP(dhcp_option_data_type, DHCPOptionDataType);
 
 static const char* const duid_type_table[_DUID_TYPE_MAX] = {
-        [DUID_TYPE_LLT]    = "link-layer-time",
-        [DUID_TYPE_EN]     = "vendor",
-        [DUID_TYPE_LL]     = "link-layer",
-        [DUID_TYPE_UUID]   = "uuid",
-        [DUID_TYPE_CUSTOM] = "custom",
+        [DUID_TYPE_LLT]  = "link-layer-time",
+        [DUID_TYPE_EN]   = "vendor",
+        [DUID_TYPE_LL]   = "link-layer",
+        [DUID_TYPE_UUID] = "uuid",
 };
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(duid_type, DUIDType);
 
index e0f0850898872b239051c3e1c0c79e434ab6065d..00c767e1fb8f8411a5bafbb62da16d6990d5d04a 100644 (file)
@@ -555,11 +555,6 @@ static int dhcp6_set_identifier(Link *link, sd_dhcp6_client *client) {
         }
 
         duid = link_get_dhcp6_duid(link);
-
-        if (duid->type == DUID_TYPE_CUSTOM && duid->raw_data_len == 0)
-                return log_link_debug_errno(link, SYNTHETIC_ERRNO(EINVAL),
-                                            "DHCPv6 CLIENT: Missing DUID Raw Data as duid type set to 'custom': %m");
-
         if (duid->type == DUID_TYPE_LLT && duid->raw_data_len == 0)
                 r = sd_dhcp6_client_set_duid_llt(client, duid->llt_time);
         else
diff --git a/test/test-network/conf/25-dhcp-client-ipv6-only-custom-client-identifier.network b/test/test-network/conf/25-dhcp-client-ipv6-only-custom-client-identifier.network
deleted file mode 100644 (file)
index edd5b7f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Match]
-Name=veth99
-
-[Network]
-DHCP=ipv6
-IPv6Token=::1a:2b:3c:4d
-
-[Route]
-Gateway=_ipv6ra
-Destination=2001:1234:5:9fff:ff:ff:ff:ff/128
-
-[DHCPv6]
-DUIDType=custom
-DUIDRawData=00:00:ab:11:f9:2a:c2:77:29:f9:5c:00
index 5910d0d8da6a6f125d629cd1f83f36f3ce9bc94a..bd1a10507b0c02c24c75eae716b3da527d839eaf 100755 (executable)
@@ -5020,41 +5020,6 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
         self.assertIn('DHCPREPLY(veth-peer)', output)
         self.assertNotIn('rapid-commit', output)
 
-    def test_dhcp_client_ipv6_only_with_custom_client_identifier(self):
-        copy_network_unit('25-veth.netdev', '25-dhcp-server-veth-peer.network', '25-dhcp-client-ipv6-only-custom-client-identifier.network')
-
-        start_networkd()
-        self.wait_online(['veth-peer:carrier'])
-        start_dnsmasq()
-        self.wait_online(['veth99:routable', 'veth-peer:routable'])
-
-        # checking address
-        output = check_output('ip address show dev veth99 scope global')
-        print(output)
-        self.assertRegex(output, r'inet6 2600::[0-9a-f:]*/128 scope global dynamic noprefixroute')
-        self.assertNotIn('192.168.5', output)
-
-        # checking semi-static route
-        output = check_output('ip -6 route list dev veth99 2001:1234:5:9fff:ff:ff:ff:ff')
-        print(output)
-        self.assertRegex(output, 'via fe80::1034:56ff:fe78:9abd')
-
-        # Confirm that ipv6 token is not set in the kernel
-        output = check_output('ip token show dev veth99')
-        print(output)
-        self.assertRegex(output, 'token :: dev veth99')
-
-        print('## dnsmasq log')
-        output = read_dnsmasq_log_file()
-        print(output)
-        self.assertIn('DHCPSOLICIT(veth-peer) 00:00:ab:11:f9:2a:c2:77:29:f9:5c:00', output)
-        self.assertNotIn('DHCPADVERTISE(veth-peer)', output)
-        self.assertNotIn('DHCPREQUEST(veth-peer)', output)
-        self.assertIn('DHCPREPLY(veth-peer)', output)
-        self.assertIn('sent size:  0 option: 14 rapid-commit', output)
-
-        stop_dnsmasq()
-
     def test_dhcp_client_ipv4_only(self):
         copy_network_unit('25-veth.netdev', '25-dhcp-server-veth-peer.network', '25-dhcp-client-ipv4-only.network')