]> git.proxmox.com Git - mirror_ifupdown2.git/blame - ifupdown2/ifupdownaddons/dhclient.py
Merge pull request #116 from rajendra-dendukuri/dhcp6_duid
[mirror_ifupdown2.git] / ifupdown2 / ifupdownaddons / dhclient.py
CommitLineData
15ef32ea
RP
1#!/usr/bin/python
2#
d486dd0d 3# Copyright 2014-2017 Cumulus Networks, Inc. All rights reserved.
15ef32ea
RP
4# Author: Roopa Prabhu, roopa@cumulusnetworks.com
5#
6
15ef32ea
RP
7import os
8
d486dd0d
JF
9try:
10 from ifupdown2.ifupdown.utils import utils
11 from ifupdown2.ifupdownaddons.utilsbase import *
12except ImportError:
13 from ifupdown.utils import utils
14 from ifupdownaddons.utilsbase import *
15
15ef32ea
RP
16
17class dhclient(utilsBase):
18 """ This class contains helper methods to interact with the dhclient
19 utility """
20
21 def _pid_exists(self, pidfilename):
22 if os.path.exists(pidfilename):
23 pid = self.read_file_oneline(pidfilename)
24 if not os.path.exists('/proc/%s' %pid):
25 return False
26 else:
27 return False
28 return True
29
30 def is_running(self, ifacename):
31 return self._pid_exists('/run/dhclient.%s.pid' %ifacename)
32
33 def is_running6(self, ifacename):
34 return self._pid_exists('/run/dhclient6.%s.pid' %ifacename)
35
717cee31
RP
36 def _run_dhclient_cmd(self, cmd, cmd_prefix=None):
37 if not cmd_prefix:
38 cmd_aslist = []
39 else:
40 cmd_aslist = cmd_prefix.split()
41 if cmd_aslist:
42 cmd_aslist.extend(cmd)
43 else:
44 cmd_aslist = cmd
a193d8d1 45 utils.exec_commandl(cmd_aslist, stdout=None, stderr=None)
717cee31
RP
46
47 def stop(self, ifacename, cmd_prefix=None):
15ef32ea
RP
48 if os.path.exists('/sbin/dhclient3'):
49 cmd = ['/sbin/dhclient3', '-x', '-pf',
50 '/run/dhclient.%s.pid' %ifacename, '-lf',
51 '/var/lib/dhcp3/dhclient.%s.leases' %ifacename,
52 '%s' %ifacename]
53 else:
54 cmd = ['/sbin/dhclient', '-x', '-pf',
55 '/run/dhclient.%s.pid' %ifacename,
56 '-lf', '/var/lib/dhcp/dhclient.%s.leases' %ifacename,
57 '%s' %ifacename]
717cee31 58 self._run_dhclient_cmd(cmd, cmd_prefix)
15ef32ea 59
717cee31 60 def start(self, ifacename, wait=True, cmd_prefix=None):
15ef32ea
RP
61 if os.path.exists('/sbin/dhclient3'):
62 cmd = ['/sbin/dhclient3', '-pf',
63 '/run/dhclient.%s.pid' %ifacename,
64 '-lf', '/var/lib/dhcp3/dhclient.%s.leases' %ifacename,
65 '%s' %ifacename]
66 else:
717cee31
RP
67 cmd = ['/sbin/dhclient', '-pf',
68 '/run/dhclient.%s.pid' %ifacename, '-lf',
69 '/var/lib/dhcp/dhclient.%s.leases' %ifacename,
15ef32ea 70 '%s' %ifacename]
a0a8d7e0 71 if not wait:
6d359159 72 cmd.append('-nw')
717cee31 73 self._run_dhclient_cmd(cmd, cmd_prefix)
15ef32ea 74
717cee31 75 def release(self, ifacename, cmd_prefix=None):
15ef32ea
RP
76 if os.path.exists('/sbin/dhclient3'):
77 cmd = ['/sbin/dhclient3', '-r', '-pf',
78 '/run/dhclient.%s.pid' %ifacename, '-lf',
79 '/var/lib/dhcp3/dhclient.%s.leases' %ifacename,
80 '%s' %ifacename]
81 else:
82 cmd = ['/sbin/dhclient', '-r', '-pf',
83 '/run/dhclient.%s.pid' %ifacename,
84 '-lf', '/var/lib/dhcp/dhclient.%s.leases' %ifacename,
85 '%s' %ifacename]
717cee31 86 self._run_dhclient_cmd(cmd, cmd_prefix)
15ef32ea 87
f62cfb7b 88 def start6(self, ifacename, wait=True, cmd_prefix=None, duid=None):
717cee31 89 cmd = ['/sbin/dhclient', '-6', '-pf',
15ef32ea 90 '/run/dhclient6.%s.pid' %ifacename, '-lf',
004d1e65 91 '/var/lib/dhcp/dhclient6.%s.leases' % ifacename,
6d359159 92 '%s' %ifacename]
a0a8d7e0 93 if not wait:
6d359159 94 cmd.append('-nw')
f62cfb7b
RD
95 if duid is not None:
96 cmd.append('-D')
97 cmd.append(duid)
717cee31 98 self._run_dhclient_cmd(cmd, cmd_prefix)
15ef32ea 99
f62cfb7b 100 def stop6(self, ifacename, cmd_prefix=None, duid=None):
717cee31 101 cmd = ['/sbin/dhclient', '-6', '-x', '-pf',
004d1e65
JF
102 '/run/dhclient6.%s.pid' % ifacename, '-lf',
103 '/var/lib/dhcp/dhclient6.%s.leases' % ifacename,
717cee31 104 '%s' %ifacename]
f62cfb7b
RD
105 if duid is not None:
106 cmd.append('-D')
107 cmd.append(duid)
717cee31 108 self._run_dhclient_cmd(cmd, cmd_prefix)
15ef32ea 109
f62cfb7b 110 def release6(self, ifacename, cmd_prefix=None, duid=None):
717cee31 111 cmd = ['/sbin/dhclient', '-6', '-r', '-pf',
20fd3a06 112 '/run/dhclient6.%s.pid' %ifacename,
de4104b0 113 '-lf', '/var/lib/dhcp/dhclient6.%s.leases' % ifacename,
717cee31 114 '%s' %ifacename]
f62cfb7b
RD
115 if duid is not None:
116 cmd.append('-D')
117 cmd.append(duid)
717cee31 118 self._run_dhclient_cmd(cmd, cmd_prefix)