Skip to content

Commit

Permalink
feat(enodebd): Baicells QRTB firmware upgrade
Browse files Browse the repository at this point in the history
Added TR069 firmware upgrade support for Baicells running QRTB firmware.

Signed-off-by: Artur Dębski <artur.debski@freedomfi.com>
  • Loading branch information
Artur Dębski committed Apr 13, 2022
1 parent 0de62a7 commit 10bcfbf
Show file tree
Hide file tree
Showing 7 changed files with 351 additions and 6 deletions.
11 changes: 8 additions & 3 deletions lte/gateway/configs/enodebd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,12 @@ sas:
# Main config section for TR069 Download request for FW Upgrade
# `firmwares` is a dictionary of available firmwares with download details
# key is the firmware version signature. Value is an object with:
# "url": full url to the firmware file
# "username": [optional] auth credentials
# "password": [optional] auth credentials
# "url": string, full url to the firmware file
# "username": [optional] string, auth credentials
# "password": [optional] string, auth credentials
# "md5": [optional, Baicells mandatory] string, 32 character md5 sum
# "rawmode": [optional, Baicells mandatory] bool, Raw mode flag
# "md5" and "rawmode" params will be added to Download request if present in the config.
# `enbs` is a dictionary with serial-level eNB specific firmware upgrade configuration.
# key is the eNB serial number.
# value is a string matching firmware version listed in the `firmwares` section.
Expand All @@ -67,6 +70,8 @@ sas:
# url: "http://some_url/some_fw_file.ffw"
# username: "user"
# password: "password"
# md5: "12345678901234567890123456789012"
# rawmode: false
# "some_other_version":
# url: "http://some_other_url/some_other_fw_file.ffw"
# "some_yet_unused_version":
Expand Down
23 changes: 22 additions & 1 deletion lte/gateway/python/magma/enodebd/devices/baicells_qrtb.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,19 @@
AcsMsgAndTransition,
AcsReadMsgResult,
AddObjectsState,
CheckFirmwareUpgradeDownloadState,
DeleteObjectsState,
EnbSendRebootState,
EnodebAcsState,
ErrorState,
FirmwareUpgradeDownloadState,
GetObjectParametersState,
GetParametersState,
NotifyDPState,
SendGetTransientParametersState,
SetParameterValuesState,
WaitEmptyMessageState,
WaitForFirmwareUpgradeDownloadResponse,
WaitGetObjectParametersState,
WaitGetParametersState,
WaitGetTransientParametersState,
Expand Down Expand Up @@ -100,7 +103,25 @@ def _init_state_map(self) -> None:
self._state_map = {
# RemWait state seems not needed for QRTB
'wait_inform': WaitInformState(self, when_done='wait_empty', when_boot=None),
'wait_empty': WaitEmptyMessageState(self, when_done='get_transient_params'),
'wait_empty': WaitEmptyMessageState(self, when_done='check_fw_upgrade_download'),

# Download flow
'check_fw_upgrade_download': CheckFirmwareUpgradeDownloadState(
self,
when_download='fw_upgrade_download',
when_skip='get_transient_params',
),
'fw_upgrade_download': FirmwareUpgradeDownloadState(
self,
when_done='wait_fw_upgrade_download_response',
),
'wait_fw_upgrade_download_response': WaitForFirmwareUpgradeDownloadResponse(
self,
when_done='get_transient_params',
when_skip='get_transient_params',
),
# Download flow ends

'get_transient_params': SendGetTransientParametersState(self, when_done='wait_get_transient_params'),
'wait_get_transient_params': WaitGetTransientParametersState(
self,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,11 @@ def should_transition_to_firmware_upgrade_download(acs):
device_serial_number = acs.device_cfg.get_parameter(
ParameterName.SERIAL_NUMBER,
)
if not device_sw_version or not device_serial_number:
logger.debug(
f'Skipping FW Download for eNB, missing device config: {device_sw_version=}, {device_serial_number=}.',
)
return False
if acs.is_fw_upgrade_in_progress():
logger.debug(
'Skipping FW Download for eNB [%s], firmware upgrade in progress.',
Expand Down Expand Up @@ -402,14 +407,14 @@ def get_firmware_upgrade_download_config(acs):
acs, device_serial_number,
)
if fw_upgrade_config:
logger.info(f'Found {fw_upgrade_config=} for {device_serial_number=}')
logger.debug(f'Found {fw_upgrade_config=} for {device_serial_number=}')
return fw_upgrade_config
device_model = acs.device_name
fw_upgrade_config = _get_firmware_upgrade_download_config_for_model(
acs, device_model,
)
if fw_upgrade_config:
logger.info(f'Found {fw_upgrade_config=} for {device_model=}')
logger.debug(f'Found {fw_upgrade_config=} for {device_model=}')
return fw_upgrade_config


Expand Down
10 changes: 10 additions & 0 deletions lte/gateway/python/magma/enodebd/state_machines/enb_acs_states.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,12 +237,16 @@ def _get_download_parameters(self):
target_software_version_url = fw_upgrade_config.get('url', "")
username = fw_upgrade_config.get('username', "")
password = fw_upgrade_config.get('password', "")
md5 = fw_upgrade_config.get('md5', None)
rawmode = fw_upgrade_config.get('rawmode', None)

download_params_dict = {
"target_software_version": target_software_version,
"target_software_version_url": target_software_version_url,
"username": username,
"password": password,
"md5": md5,
"rawmode": rawmode,
}

return download_params_dict
Expand All @@ -264,6 +268,12 @@ def _build_download_request(self, download_params_dict: dict):
request.DelaySeconds = 0
request.SuccessURL = ""
request.FailureURL = ""

# Baicells specific settings
if download_params_dict['md5'] is not None:
request.Md5 = download_params_dict['md5']
if download_params_dict['rawmode'] is not None:
request.RawMode = bool(download_params_dict['rawmode'])
return request


Expand Down
8 changes: 8 additions & 0 deletions lte/gateway/python/magma/enodebd/tests/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,19 @@ pytest_test(
deps = [
"//dp/protos:enodebd_dp_python_proto",
"//lte/gateway/python/magma/enodebd/data_models:data_model",
"//lte/gateway/python/magma/enodebd/data_models:data_model_parameters",
"//lte/gateway/python/magma/enodebd/device_config:cbrs_consts",
"//lte/gateway/python/magma/enodebd/device_config:configuration_init",
"//lte/gateway/python/magma/enodebd/device_config:configuration_util",
"//lte/gateway/python/magma/enodebd/devices:baicells_qrtb",
"//lte/gateway/python/magma/enodebd/devices:device_utils",
"//lte/gateway/python/magma/enodebd/tests/test_utils:config_builder",
"//lte/gateway/python/magma/enodebd/tests/test_utils:enb_acs_builder",
"//lte/gateway/python/magma/enodebd/tests/test_utils:enodeb_handler",
"//lte/gateway/python/magma/enodebd/tests/test_utils:tr069_msg_builder",
"//lte/protos:mconfigs_python_proto",
"//orc8r/gateway/python/magma/common:service",
requirement("parameterized"),
],
)

Expand Down

0 comments on commit 10bcfbf

Please sign in to comment.