]>
Commit | Line | Data |
---|---|---|
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 |
7 | import os |
8 | ||
d486dd0d JF |
9 | try: |
10 | from ifupdown2.ifupdown.utils import utils | |
11 | from ifupdown2.ifupdownaddons.utilsbase import * | |
12 | except ImportError: | |
13 | from ifupdown.utils import utils | |
14 | from ifupdownaddons.utilsbase import * | |
15 | ||
15ef32ea RP |
16 | |
17 | class 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 | |
717cee31 RP |
88 | def start6(self, ifacename, wait=True, cmd_prefix=None): |
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') |
717cee31 | 95 | self._run_dhclient_cmd(cmd, cmd_prefix) |
15ef32ea | 96 | |
717cee31 RP |
97 | def stop6(self, ifacename, cmd_prefix=None): |
98 | cmd = ['/sbin/dhclient', '-6', '-x', '-pf', | |
004d1e65 JF |
99 | '/run/dhclient6.%s.pid' % ifacename, '-lf', |
100 | '/var/lib/dhcp/dhclient6.%s.leases' % ifacename, | |
717cee31 RP |
101 | '%s' %ifacename] |
102 | self._run_dhclient_cmd(cmd, cmd_prefix) | |
15ef32ea | 103 | |
717cee31 RP |
104 | def release6(self, ifacename, cmd_prefix=None): |
105 | cmd = ['/sbin/dhclient', '-6', '-r', '-pf', | |
20fd3a06 | 106 | '/run/dhclient6.%s.pid' %ifacename, |
de4104b0 | 107 | '-lf', '/var/lib/dhcp/dhclient6.%s.leases' % ifacename, |
717cee31 RP |
108 | '%s' %ifacename] |
109 | self._run_dhclient_cmd(cmd, cmd_prefix) |