JioFiber Firmware Upgrade LUA Function
unknown
lua
3 years ago
10 kB
161
Indexable
function firmware.upgrade (filename, reboot, rebootTime, background, flags,upgradeFlag)
if (filename == nil) then
local systemConfig = db.getTable("firmUpdateSystemConfig", false)
filename = systemConfig[1].downloadPath
end
-- Outputs mentioned as comments but only for JCO4032. Your router may have different outputs. Check /tmp/system.db
local upgrade = db.getAttribute("environment", "name", "UPGRADE_PROGRAM", "value") -- /pfrm2.0/bin/firmd
local device = db.getAttribute("environment", "name", "DEVICE_NAME", "value") -- Reliance
local partitionImage1 = db.getAttribute("environment", "name", "FLASH_FIRM_PARTITION", "value") -- /dev/mtd2
local partitionImage2 = db.getAttribute("environment", "name", "FLASH_FIRM_PARTITION_IMAGE2", "value") -- /dev/mtd4
local partition2Image1 = db.getAttribute("environment", "name", "FLASH_FIRM_FS_PARTITION", "value") -- /dev/mtd3
local partition2Image2 = db.getAttribute("environment", "name", "FLASH_FIRM_FS_PARTITION_IMAGE2", "value") -- /dev/mtd7
local firmName = ""
if (util.fileExists ("/pfrm2.0/FIRMWARE_SIGNING_ENABLED1") == true or util.fileExists ("/pfrm2.0/FIRMWARE_SIGNING_ENABLED2") == true) then
-- Check the status returned from firmware integrityCheck scrcipt
upgradeCmd = "/pfrm2.0/bin/firmwareVerify.sh " .. filename .. " " .. upgradeFlag .. " >/dev/null"
os.execute (upgradeCmd)
local firmSignCheck = ""
f = io.open ("/tmp/firmCheckRes.txt", "r")
if(f ~= nil) then
firmSignCheck = f:read("*line")
f:close()
else
firmware.debugPrint("Firmware integrity check failed. Aborting upgrade ")
return "1"
end
if (firmSignCheck ~= nil) then
if ((string.find (string.lower(firmSignCheck), "error") ~= nil) or (string.find (string.lower(firmSignCheck), "sign or verify one file") ~= nil) or (string.find (string.lower(firmSignCheck), "no signature") ~= nil) or (string.find (string.lower(firmSignCheck), "mac and signing key cannot both") ~= nil) or (string.find (string.lower(firmSignCheck), "unsupported") ~= nil) or (string.find (string.lower(firmSignCheck), "failure") ~= nil)) then
firmware.debugPrint("Firmware integrity check failed. Aborting upgrade ")
return "1"
else
firmware.debugPrint("Firmware integrity check passed")
end
else
firmware.debugPrint("Firmware integrity check passed")
end
f = io.open ("/tmp/firmName", "r")
if(f ~= nil) then
firmName = f:read("*line")
f:close()
else
firmware.debugPrint("Firmware integrity check failed. Aborting upgrade ")
return "1"
end
end
if (util.fileExists ("/pfrm2.0/BRCMJCO300") or util.fileExists ("/pfrm2.0/ECONET")) then
local file = ""
if (util.fileExists ("/pfrm2.0/HW_FOXCONN_JCO500")) then
file = "HW_FOXCONN_JCO500"
elseif (util.fileExists ("/pfrm2.0/HW_JCO110")) then
file = "HW_JCO110"
elseif( util.fileExists("/pfrm2.0/HW_HG260ES")) then
file = "HW_HG260ES"
elseif( util.fileExists("/pfrm2.0/HW_HG261GU2")) then
file = "HW_HG261GU2"
elseif (util.fileExists("/pfrm2.0/HW_HG260X")) then
file = "HW_HG260X"
elseif(util.fileExists("/pfrm2.0/HW_FIBERHOME_JCO300"))then
file = "HW_FIBERHOME_JCO300"
elseif(util.fileExists("/pfrm2.0/HW_JCOW206"))then
file = "HW_JCOW206"
elseif(util.fileExists("/pfrm2.0/HW_JCOW401"))then
file = "HW_JCOW401"
elseif(util.fileExists("/pfrm2.0/HW_JCOW403"))then
file = "HW_JCOW403"
elseif(util.fileExists("/pfrm2.0/HW_JCOW404"))then
file = "HW_JCOW404"
elseif(util.fileExists("/pfrm2.0/HW_JCOW411"))then
file = "HW_JCOW411"
elseif(util.fileExists("/pfrm2.0/HW_JCO2031"))then
file = "JCO2031"
elseif(util.fileExists("/pfrm2.0/HW_JCO4031"))then
file = "JCO4031"
elseif(util.fileExists("/pfrm2.0/HW_JCOW414"))then
file = "JCOW414"
elseif(util.fileExists("/pfrm2.0/HW_JCO4032"))then
file = "JCO4032"
elseif(util.fileExists("/pfrm2.0/HW_JCOW407"))then
file = "JCOW407"
elseif(util.fileExists("/pfrm2.0/HW_JMA24"))then
file = "JMA24"
elseif(util.fileExists("/pfrm2.0/HW_JCOW402"))then
file = "JCOW402"
end
local firm_check_cmd = ""
if (file ~= nil) then
if (util.fileExists ("/pfrm2.0/FIRMWARE_SIGNING_ENABLED1") == true or util.fileExists ("/pfrm2.0/FIRMWARE_SIGNING_ENABLED2") == true) then
firm_check_cmd = "strings " .. firmName.. " | grep " ..file.. " > /tmp/firm_check.txt"
else
firm_check_cmd = "strings "..filename.." | grep " ..file.. " > /tmp/firm_check.txt"
end
end
os.execute(firm_check_cmd)
local firmCheck = ""
fp= io.open ("/tmp/firm_check.txt", "r")
if(fp ~= nil) then
firmCheck = fp:read("*line")
end
if (firmCheck ~= nil) then
if (string.match(firmCheck,file) == nil) then
return "2"
end
else
return "2"
end
end
if (util.fileExists("/pfrm2.0/HW_HG260X")) then
local filename = "/tmp/upgrade/download.dwn"
local s1 = "strings "..filename.." | grep HG260X_D2.96 > /tmp/dmz6.txt "
local s2 = "strings "..filename.." | grep HG260X_R2.96 >> /tmp/dmz6.txt "
local s3 = "strings "..filename.." | grep HG260X_D2.97 >> /tmp/dmz6.txt "
local s4 = "strings "..filename.." | grep HG260X_R2.97 >> /tmp/dmz6.txt "
os.execute(s1)
os.execute(s2)
os.execute(s3)
os.execute(s4)
local contents = ""
f = io.open ("/tmp/dmz6.txt", "r")
if(f ~= nil) then
contents = f:read("*all")
f:close()
else
f:close()
return "ERROR"
end
if(string.match(contents,"HG260X_D2.96") or string.match(contents,"HG260X_R2.96") or string.match(contents,"HG260X_R2.97") or string.match(contents,"HG260X_D2.97")) then
local query = "DROP TABLE dmz6"
local valid = db.execute(query)
if(valid)then
db.save2()
else
db.rollback()
end
end
end
local runningFirmware = ""
f = io.open("/tmp/runningFirmware","r")
if(f ~= nil) then
runningFirmware = f:read("*line")
f:close()
else
runningFirmware = "1"
end
if (runningFirmware == "1") then
partition = partitionImage2
partition2 = partition2Image2
else
partition = partitionImage1
partition2 = partition2Image1
end
-- TODO: local upgradeprep = db.getAttribute("environment", "name", "UPGRADEPREP_PROGRAM", "value")
if (util.fileExists ("/pfrm2.0/FIRMWARE_SIGNING_ENABLED1") == true or util.fileExists ("/pfrm2.0/FIRMWARE_SIGNING_ENABLED2") == true) then
cmd = upgrade .. " -f " .. firmName .. " -d " .. device .. " -p " .. partition
else
cmd = upgrade .. " -f " .. filename .. " -d " .. device .. " -p " .. partition
end
if (partition2) then
cmd = cmd .. " -s " .. partition2 .. " -R " .. partition2
end
-- creating files in flash for using them in sending 0BOOTSTRAP event in tr69
os.execute("touch " ..firmware.flashKeepAliveEvents)
--os.execute("touch " ..firmware.flashUpdradesManaged)
if (util.fileExists(firmware.serialNUMFile)) then
local serial = util.fileToString(firmware.serialNUMFile)
if(serial ~= nil) then
os.execute("/bin/echo " ..serial.. " > " ..firmware.flashserialNUMFile.. " ")
end
end
if (util.fileExists(firmware.prodclassFile)) then
local productclass = util.fileToString(firmware.prodclassFile)
if(productclass ~= nil) then
os.execute("/bin/echo " ..productclass.. " > " ..firmware.flashprodclassFile.. " " )
end
end
local filep = io.open(firmware.versionFile, "r")
local swVersion = ""
if (filep ~= nil) then
swVersion = filep:read("*l")
filep:close()
end
local fp = io.open(firmware.flashfirmwareVerFile,"w")
if (fp ~= nil) then
fp:write(swVersion)
io.close(fp)
end
if (tonumber(reboot) ~= 0) then
cmd = cmd .. " -r " .. rebootTime
if(util.fileExists("flash2/pfrm2.0/bin/ont_dc")) then
os.execute ("/flash2/pfrm2.0/bin/ont_dc -e REBOOT NA 1 NA NA NA")
else
os.execute ("/pfrm2.0/bin/ont_dc -e REBOOT NA 1 NA NA NA")
end
end
if (flags) then
cmd = cmd .. " " .. flags .. " "
end
if (tonumber(background) == 0) then
cmd = cmd .. " -F "
end
cmd = cmd .. "2> /dev/null"
firmware.debugPrint("Exec = " .. cmd)
status = os.execute (cmd)
if(util.fileExists("/pfrm2.0/DEVICE_REPEATER"))then
os.execute("/bin/ledctl1 ALL off;/bin/ledctl1 GREEN slowBlink;")
end
firmware.debugPrint("STATUS : " .. status)
if (status ~= 0) then
--create a file on Firmware upgrade Failure for DC
os.execute ("touch /flash/DC_Firm_Upgrade_Failure")
os.execute("rm -rf /flash/DC_Firm_Upgrade_Success")
else
--create a file on Firmware upgrade success for DC
os.execute ("touch /flash/DC_Firm_Upgrade_Success")
os.execute("rm -rf /flash/DC_Firm_Upgrade_Failure")
os.execute("touch /flash/MESH_CONFIG_UPGRADE")
os.execute ("rm -rf /flash/smartcable/iptables.sh")
os.execute ("rm -rf /flash/smartcable/ota.zip")
os.execute ("rm -rf /flash/smartcable/firmware_file_version.txt")
os.execute ("/bin/rm -rf /flash/ont_dc.conf")
if( util.fileExists("/pfrm2.0/HW_HG260ES") or util.fileExists("/pfrm2.0/HW_HG260X")) then
os.execute("/bin/ledctl WLAN off")
os.execute("/bin/ledctl WPS off")
end
firmware.voipCleanUp()
end
return status;
endEditor is loading...