]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: dhcp: Policy to specify DUID type to use on dhcpv6 requests
authorRajendra Dendukuri <rajendra.dendukuri@broadcom.com>
Sat, 6 Jul 2019 22:14:38 +0000 (15:14 -0700)
committerRajendra Dendukuri <rajendra.dendukuri@broadcom.com>
Sat, 6 Jul 2019 22:14:38 +0000 (15:14 -0700)
Add a ifupdown2 policy attribute dhcp6-duid to allow user to specify the DUID type
to be used on an IPv6 enabled interface.

Signed-off-by: Rajendra Dendukuri <rajendra.dendukuri@broadcom.com>
ifupdown2/addons/dhcp.py
ifupdown2/ifupdownaddons/dhclient.py

index 4d87f7cd7efd27dbd24dbfa0e4be12c0fa5fe8e9..ca4198842196eb5a5d8d29655fc8d6e99b5f5af3 100644 (file)
@@ -68,6 +68,8 @@ class dhcp(moduleBase):
             except:
                 timeout = 10
                 pass
+            dhcp6_duid = policymanager.policymanager_api.get_iface_default(module_name=self.__class__.__name__, \
+                ifname=ifaceobj.name, attr='dhcp6-duid')
 
             vrf = ifaceobj.get_attr_value_first('vrf')
             if (vrf and self.vrf_exec_cmd_prefix and
@@ -103,7 +105,7 @@ class dhcp(moduleBase):
                         self.sysctl_set('net.ipv6.conf.%s' %ifaceobj.name +
                                 '.autoconf', autoconf)
                         try:
-                            self.dhclientcmd.stop6(ifaceobj.name)
+                            self.dhclientcmd.stop6(ifaceobj.name, duid=dhcp6_duid)
                         except:
                             pass
                     #add delay before starting IPv6 dhclient to
@@ -118,7 +120,7 @@ class dhcp(moduleBase):
                         if r:
                             self.dhclientcmd.start6(ifaceobj.name,
                                                     wait=wait,
-                                                    cmd_prefix=dhclient_cmd_prefix)
+                                                    cmd_prefix=dhclient_cmd_prefix, duid=dhcp6_duid)
                             return
                         timeout -= 1
                         if timeout:
@@ -144,8 +146,10 @@ class dhcp(moduleBase):
         if (vrf and self.vrf_exec_cmd_prefix and
             self.ipcmd.link_exists(vrf)):
             dhclient_cmd_prefix = '%s %s' %(self.vrf_exec_cmd_prefix, vrf)
+        dhcp6_duid = policymanager.policymanager_api.get_iface_default(module_name=self.__class__.__name__, \
+            ifname=ifaceobj.name, attr='dhcp6-duid')
         if 'inet6' in ifaceobj.addr_family:
-            self.dhclientcmd.release6(ifaceobj.name, dhclient_cmd_prefix)
+            self.dhclientcmd.release6(ifaceobj.name, dhclient_cmd_prefix, duid=dhcp6_duid)
         if 'inet' in ifaceobj.addr_family:
             self.dhclientcmd.release(ifaceobj.name, dhclient_cmd_prefix)
 
index d8f8924422d887782066d763f0b2a5a39e471848..4d907f59507eb45c8fee714a3d3b84d4e0e75879 100644 (file)
@@ -85,25 +85,34 @@ class dhclient(utilsBase):
                    '%s' %ifacename]
         self._run_dhclient_cmd(cmd, cmd_prefix)
 
-    def start6(self, ifacename, wait=True, cmd_prefix=None):
+    def start6(self, ifacename, wait=True, cmd_prefix=None, duid=None):
         cmd = ['/sbin/dhclient', '-6', '-pf',
                 '/run/dhclient6.%s.pid' %ifacename, '-lf',
                 '/var/lib/dhcp/dhclient6.%s.leases' % ifacename,
                 '%s' %ifacename]
         if not wait:
             cmd.append('-nw')
+        if duid is not None:
+            cmd.append('-D')
+            cmd.append(duid)
         self._run_dhclient_cmd(cmd, cmd_prefix)
 
-    def stop6(self, ifacename, cmd_prefix=None):
+    def stop6(self, ifacename, cmd_prefix=None, duid=None):
         cmd = ['/sbin/dhclient', '-6', '-x', '-pf',
                '/run/dhclient6.%s.pid' % ifacename, '-lf',
                '/var/lib/dhcp/dhclient6.%s.leases' % ifacename,
                '%s' %ifacename]
+        if duid is not None:
+            cmd.append('-D')
+            cmd.append(duid)
         self._run_dhclient_cmd(cmd, cmd_prefix)
 
-    def release6(self, ifacename, cmd_prefix=None):
+    def release6(self, ifacename, cmd_prefix=None, duid=None):
         cmd = ['/sbin/dhclient', '-6', '-r', '-pf',
                '/run/dhclient6.%s.pid' %ifacename,
               '-lf', '/var/lib/dhcp/dhclient6.%s.leases' % ifacename,
                '%s' %ifacename]
+        if duid is not None:
+            cmd.append('-D')
+            cmd.append(duid)
         self._run_dhclient_cmd(cmd, cmd_prefix)