Skip to content
Snippets Groups Projects

Draft: Implement initial functionality

Closed Martin Matějek requested to merge dev into master
All threads resolved!
Files
8
@@ -12,7 +12,7 @@ import turrishw
from foris_controller.exceptions import BackendCommandFailed
from foris_controller_backends.cmdline import BaseCmdLine
from foris_controller_backends.maintain import MaintainCommands
from foris_controller_backends.networks import NetworksUci
from foris_controller_backends.networks import NetworksWanUci
from foris_controller_backends.uci import (
UciBackend,
get_option_named,
@@ -45,6 +45,7 @@ class WWanUci:
res = WWanUci._match_wwan_interface(if_name, dev_no, qmi_ctl_device, sim_status)
if not res:
# We could not find existing uci configuration for given device -> return defaults
qmi_devices.append({
"id": dev_no,
"enabled": False,
@@ -54,7 +55,7 @@ class WWanUci:
"pincode": "",
"authentication": {"auth_type": "none"},
"sim_status": sim_status,
}) # default/empty values
})
else:
qmi_devices.append(res)
@@ -100,7 +101,7 @@ class WWanUci:
else:
extra_auth = {"auth_type": "none"}
enabled = NetworksUci.is_designated_as_wan(if_name)
enabled = NetworksWanUci.is_designated_as_wan(if_name)
return {
"id": dev_no,
@@ -163,12 +164,18 @@ class WWanUci:
backend.set_option("network", wdev_name, "password", password)
# switch uplink to wireless wan
NetworksUci.set_wan_firewall_zone_interfaces(backend, (wdev_name,))
NetworksWanUci.set_wan_firewall_zone_interfaces(backend, (wdev_name,))
MaintainCommands().restart_network()
return True
@staticmethod
def disable_wwan(id: int):
with UciBackend() as backend:
# reset to default wan
NetworksWanUci.set_wan_firewall_zone_interfaces(backend)
@staticmethod
def _get_id_from_dev_name(dev_name: str) -> typing.Optional[int]:
"""Extract device id (number) from its name.
@@ -192,6 +199,14 @@ class WWanCmd(BaseCmdLine):
just whether SIM card is 'working' or not.
"""
try:
# There are two utilities to fetch information from QMI modem - 'qmicli' and 'uqmi'.
# 'qmicli' is more recent and it looks like it is actively
# maintained, but at the moment it can produce only text output.
# 'uqmi' is older and it could get stuck while trying to fetch SIM
# state informations on certain modems. But it produces json output.
#
# Therefore I decided to go with 'uqmi' and set timeout for its
# process, in case it gets stuck.
stdout, _ = WWanCmd._run_command_and_check_retval(
["/sbin/uqmi", "-d", ctl_device, "--uim-get-sim-state"],
expected_retval=0, timeout=20
@@ -213,7 +228,7 @@ class WWanCmd(BaseCmdLine):
if not pin_status:
return "failure" # no SIM detected
if pin_status != "verified":
if pin_status not in {"verified","disabled"}:
return "failure" # SIM is not active or bad pin?
return "ok"