Skip to content

Commit e4867f0

Browse files
committed
Add option when installing to enable connman dhcp
1 parent 17d8bef commit e4867f0

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

cli/python/src/client/cmd_client.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ def get_vpn_status(self, vpn_acc: str) -> dict:
265265
logger.debug(f'Something wrong when getting VPN status. Error[{err}]')
266266
return {'connected': False}
267267

268-
def do_install(self, service_opts: UnixServiceOpts, auto_startup: bool = False):
268+
def do_install(self, service_opts: UnixServiceOpts, auto_startup: bool = False, auto_connman_dhcp: bool = False):
269269
FileHelper.mkdirs(self.opts.vpn_dir.parent)
270270
FileHelper.unpack_archive(ClientOpts.get_resource(ClientOpts.VPN_ZIP), self.opts.vpn_dir)
271271
FileHelper.mkdirs([self.opts.vpn_dir, self.opts.runtime_dir])
@@ -282,7 +282,7 @@ def do_install(self, service_opts: UnixServiceOpts, auto_startup: bool = False):
282282
self._dump_cache_service(svc_opts)
283283
self.device.ip_resolver.add_hook(svc_opts.service_name,
284284
{'{{WORKING_DIR}}': f'{self.opts.vpn_dir}', '{{VPN_CLIENT_CLI}}': cmd})
285-
self.device.dns_resolver.create_config(svc_opts.service_name)
285+
self.device.dns_resolver.create_config(svc_opts.service_name, auto_connman_dhcp)
286286
self.storage.empty()
287287
self.opts.export_env()
288288

@@ -383,7 +383,7 @@ def lease_vpn_ip(self, account: str, log_lvl=logger.DEBUG):
383383
loop_interval(lambda: self.get_vpn_status(account)['connected'],
384384
'Unable connect VPN. Please check log for more detail', max_retries=3, interval=1)
385385
nic = self.opts.account_to_nic(account)
386-
if self.device.dns_resolver.is_connman():
386+
if not self.device.dns_resolver.is_enable_connman_dhcp():
387387
logger.log(logger.WARN, f'Please lease VPN IP manually by ' +
388388
f'[{self.device.ip_resolver.lease_ip(account, nic, daemon=True, is_execute=False)}]')
389389
return
@@ -477,6 +477,8 @@ def __download(downloader_opts: DownloaderOpt):
477477
@click.option("--auto-dnsmasq", type=bool, default=False, flag_value=True, help="Give a try to install dnsmasq")
478478
@click.option("--dnsmasq/--no-dnsmasq", type=bool, default=True, flag_value=False,
479479
help="By default, dnsmasq is used as local DNS cache. Disabled it if using default System DNS resolver")
480+
@click.option("--auto-connman-dhcp", type=bool, flag_value=True,
481+
help="Auto start DHCP Client after connecting VPN when using connman")
480482
@vpn_client_opts
481483
@dev_mode_opts(opt_name=ClientOpts.OPT_NAME)
482484
@unix_service_opts(ClientOpts.vpn_service_name())
@@ -485,7 +487,7 @@ def __download(downloader_opts: DownloaderOpt):
485487
@verbose_opts
486488
@permission
487489
def install(vpn_opts: ClientOpts, svc_opts: UnixServiceOpts, auto_startup: bool, auto_dnsmasq: bool, dnsmasq: bool,
488-
force: bool):
490+
auto_connman_dhcp: bool, force: bool):
489491
executor = VPNClientExecutor(vpn_opts).probe(log_lvl=logger.INFO)
490492
dns_resolver = executor.device.dns_resolver
491493
if not dnsmasq and not dns_resolver.is_connman():
@@ -501,7 +503,7 @@ def install(vpn_opts: ClientOpts, svc_opts: UnixServiceOpts, auto_startup: bool,
501503
if dnsmasq and not dns_resolver.is_dnsmasq_available() and not dns_resolver.is_connman():
502504
executor.device.install_dnsmasq(auto_dnsmasq)
503505
logger.info(f'Installing VPN client into [{vpn_opts.vpn_dir}] and register service[{svc_opts.service_name}]...')
504-
executor.do_install(svc_opts, auto_startup)
506+
executor.do_install(svc_opts, auto_startup, auto_connman_dhcp)
505507
logger.done()
506508

507509

@@ -544,7 +546,8 @@ def _reconnect_vpn(_executor: VPNClientExecutor, _default_acc: str, _current_acc
544546
default_acc, current_acc, svc_opts, backup_dir = executor.backup_config()
545547
executor.do_uninstall(keep_vpn=False, keep_dnsmasq=True, service_opts=svc_opts)
546548
logger.info(f'Re-install VPN client into [{vpn_opts.vpn_dir}]...')
547-
executor.do_install(service_opts=svc_opts, auto_startup=False)
549+
executor.do_install(service_opts=svc_opts, auto_startup=False,
550+
auto_connman_dhcp=executor.device.dns_resolver.is_enable_connman_dhcp())
548551
executor.restore_config(backup_dir, keep_backup)
549552
_reconnect_vpn(executor, default_acc, current_acc)
550553
logger.done()

cli/python/src/client/device_resolver.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ class DNSResolver(AppConvention):
518518
DNS_ORIGIN_FILE = 'resolv.origin.conf'
519519
VPN_DNS_RESOLV_CFG = 'resolv.vpn.conf'
520520
VPN_NAMESERVER_HOOK_CFG = 'vpn-runtime-nameserver.conf'
521+
CONNMAN_DHCP = 'connman-dhcp'
521522

522523
def __init__(self, resource_dir: Union[str, Path], runtime_dir: Union[str, Path], unix_service: UnixService,
523524
log_lvl: int = logger.DEBUG, silent: bool = True):
@@ -526,6 +527,7 @@ def __init__(self, resource_dir: Union[str, Path], runtime_dir: Union[str, Path]
526527
self.origin_resolv_cfg = DNSResolver.DNS_SYSTEM_FILE.parent.joinpath(DNSResolver.DNS_ORIGIN_FILE)
527528
self.vpn_resolv_cfg = DNSResolver.DNS_SYSTEM_FILE.parent.joinpath(DNSResolver.VPN_DNS_RESOLV_CFG)
528529
self.vpn_hook_cfg = self.runtime_dir.joinpath(self.VPN_NAMESERVER_HOOK_CFG)
530+
self.connman_dhcp = self.runtime_dir.joinpath(self.CONNMAN_DHCP)
529531

530532
def probe(self) -> 'DNSResolver':
531533
self.kind = next(
@@ -544,11 +546,15 @@ def probe(self) -> 'DNSResolver':
544546
def is_connman(self) -> bool:
545547
return self.kind is DNSResolverType.CONNMAN
546548

549+
def is_enable_connman_dhcp(self) -> bool:
550+
return self.is_connman() and FileHelper.read_file_by_line(self.connman_dhcp, '0').lower() in ('true', 't', '1')
551+
547552
def is_dnsmasq_available(self):
548553
return self.kind.is_dnsmasq() or self._is_dnsmasq
549554

550-
def create_config(self, vpn_service: str):
555+
def create_config(self, vpn_service: str, auto_connman_dhcp: bool):
551556
if self.is_connman():
557+
FileHelper.write_file(self.connman_dhcp, str(auto_connman_dhcp))
552558
return
553559
if not FileHelper.is_readable(self.origin_resolv_cfg):
554560
logger.info(f'Backup System DNS config file to [{self.origin_resolv_cfg}]...')

0 commit comments

Comments
 (0)