]>
git.proxmox.com Git - mirror_ifupdown2.git/blob - addons/ppp.py
5 import ifupdown
.statemanager
as statemanager
6 import ifupdown
.ifupdownflags
as ifupdownflags
9 from ifupdown
.iface
import *
10 from ifupdown
.utils
import utils
11 from ifupdownaddons
.modulebase
import moduleBase
12 from ifupdownaddons
.iproute2
import iproute2
13 from ifupdown
.netlink
import netlink
14 from ifupdown
.exceptions
import moduleNotSupported
15 except ImportError, e
:
16 raise ImportError (str(e
) + "- required module not found")
18 class ppp (moduleBase
):
19 _modinfo
= { 'mhelp' : 'create/configure ppp interfaces',
22 { 'help' : 'Provider file in ppp',
23 'validvals' : ['<text>'],
25 'example' : ['dsl-provider']},
27 { 'help' : 'Physical underlay device to use for ppp if any',
28 'validvals' : ['<interface>'],
30 'example' : ['ppp-physdev eth1']},
35 def __init__ (self
, *args
, **kargs
):
36 moduleBase
.__init
__ (self
, *args
, **kargs
)
37 if not os
.path
.exists('/usr/bin/pon'):
38 raise moduleNotSupported('module init failed: no /usr/bin/pon found')
41 def _is_my_interface (self
, ifaceobj
):
42 if ifaceobj
.addr_method
== "ppp" and ifaceobj
.get_attr_value_first ('provider'):
46 def _up (self
, ifaceobj
):
50 provider
= ifaceobj
.get_attr_value_first ('provider')
55 ppp_file
= os
.path
.join('/etc/ppp/peers', provider
)
56 if not os
.path
.isfile(ppp_file
):
57 self
.log_warn('Invalid ppp provider file does not exist')
61 saved_ifaceobjs
= statemanager
.statemanager_api
.get_ifaceobjs(ifaceobj
.name
)
63 old_provider
= saved_ifaceobjs
[0].get_attr_value_first ('provider')
64 old_config
= saved_ifaceobjs
[0].get_attr_value_first ('provider_file')
66 config
= hashlib
.sha256(open(ppp_file
, 'rb').read()).hexdigest()
67 # Always save the current config files hash
68 ifaceobj
.update_config('provider_file', config
)
70 if not self
.ipcmd
.link_exists(ifaceobj
.name
):
71 utils
.exec_commandl(['/usr/bin/pon', provider
], stdout
=None, stderr
=None)
72 elif old_config
and old_config
!= config
:
73 # Restart on config change
74 utils
.exec_commandl(['/usr/bin/poff', provider
], stdout
=None, stderr
=None)
75 utils
.exec_commandl(['/usr/bin/pon', provider
], stdout
=None, stderr
=None)
76 elif old_provider
and old_provider
!= provider
:
77 # Restart on provider change
78 utils
.exec_commandl(['/usr/bin/poff', old_provider
], stdout
=None, stderr
=None)
79 utils
.exec_commandl(['/usr/bin/pon', provider
], stdout
=None, stderr
=None)
82 self
.log_warn (str (e
))
84 def _down (self
, ifaceobj
):
85 if not ifupdownflags
.flags
.PERFMODE
and not self
.ipcmd
.link_exists (ifaceobj
.name
):
88 provider
= ifaceobj
.get_attr_value_first ('provider')
89 utils
.exec_commandl(['/usr/bin/poff', provider
], stdout
=None, stderr
=None)
91 self
.log_warn (str (e
))
93 def get_dependent_ifacenames(self
, ifaceobj
, ifacenames_all
=None):
94 if not self
._is
_my
_interface
(ifaceobj
):
97 device
= ifaceobj
.get_attr_value_first ('ppp-physdev')
103 def _query_check (self
, ifaceobj
, ifaceobjcurr
):
104 if not self
.ipcmd
.link_exists(ifaceobj
.name
):
107 ifaceobjcurr
.status
= ifaceStatus
.SUCCESS
109 def _query_running(self
, ifaceobjrunning
):
110 if not self
.ipcmd
.link_exists(ifaceobjrunning
.name
):
113 # Operations supported by this addon (yet).
117 'query-checkcurr' : _query_check
,
118 'query-running' : _query_running
,
122 return self
._run
_ops
.keys()
124 def _init_command_handlers (self
):
126 self
.ipcmd
= iproute2 ()
128 def run (self
, ifaceobj
, operation
, query_ifaceobj
= None, **extra_args
):
129 op_handler
= self
._run
_ops
.get (operation
)
133 if operation
!= 'query-running' and not self
._is
_my
_interface
(ifaceobj
):
136 self
._init
_command
_handlers
()
137 if operation
== 'query-checkcurr':
138 op_handler (self
, ifaceobj
, query_ifaceobj
)
140 op_handler (self
, ifaceobj
)