diff --git a/istoreenhance/Makefile b/istoreenhance/Makefile index 7a3f0b5e5..4c223d997 100644 --- a/istoreenhance/Makefile +++ b/istoreenhance/Makefile @@ -11,7 +11,7 @@ PKG_ARCH_ISTOREENHANCE:=$(ARCH) PKG_NAME:=istoreenhance # use PKG_SOURCE_DATE instead of PKG_VERSION for compitable -PKG_SOURCE_DATE:=0.3.2 +PKG_SOURCE_DATE:=0.3.3 PKG_RELEASE:=2 ARCH_HEXCODE:= ifeq ($(ARCH),x86_64) @@ -26,7 +26,7 @@ endif PKG_SOURCE_VERSION:=$(ARCH_HEXCODE) PKG_SOURCE:=iStoreEnhance-binary-$(PKG_SOURCE_DATE).tar.gz PKG_SOURCE_URL:=http://dl.istoreos.com/binary/iStoreEnhance/ -PKG_HASH:=fcdea07bc2a24ceae570cf1b72319ebeab3b36d02a36cb3acfddb4da4964d5aa +PKG_HASH:=63ec6ac774de9e345a21e4253ec299e4ed77a3cc9b94060cf28bafa167703ca0 PKG_BUILD_DIR:=$(BUILD_DIR)/iStoreEnhance-binary-$(PKG_SOURCE_DATE) diff --git a/luci-app-internet-detector/README.md b/luci-app-internet-detector/README.md index dc9e0ff35..ce9e26c86 100644 --- a/luci-app-internet-detector/README.md +++ b/luci-app-internet-detector/README.md @@ -8,6 +8,7 @@ Internet-detector is an application for checking the availability of the Interne ![](https://github.com/gSpotx2f/luci-app-internet-detector/blob/master/screenshots/internet-led.jpg) - Performing actions when connecting and disconnecting the Internet: rebooting device, restarting network or modem (internet-detector-mod-modem-restart), executing custom shell scripts. - Sending email notification when Internet access is restored (internet-detector-mod-email). + - Sending telegtam notification when Internet access is restored (internet-detector-mod-telegram). - The daemon is written entirely in Lua using the luaposix library. **OpenWrt >= 21.02.** @@ -19,22 +20,22 @@ Internet-detector is an application for checking the availability of the Interne ## Installation notes: opkg update - wget --no-check-certificate -O /tmp/internet-detector_1.6.1-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector_1.6.1-r1_all.ipk - opkg install /tmp/internet-detector_1.6.1-r1_all.ipk - rm /tmp/internet-detector_1.6.1-r1_all.ipk + wget --no-check-certificate -O /tmp/internet-detector_1.6.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector_1.6.2-r1_all.ipk + opkg install /tmp/internet-detector_1.6.2-r1_all.ipk + rm /tmp/internet-detector_1.6.2-r1_all.ipk service internet-detector start service internet-detector enable - wget --no-check-certificate -O /tmp/luci-app-internet-detector_1.6.1-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-app-internet-detector_1.6.1-r1_all.ipk - opkg install /tmp/luci-app-internet-detector_1.6.1-r1_all.ipk - rm /tmp/luci-app-internet-detector_1.6.1-r1_all.ipk + wget --no-check-certificate -O /tmp/luci-app-internet-detector_1.6.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-app-internet-detector_1.6.2-r1_all.ipk + opkg install /tmp/luci-app-internet-detector_1.6.2-r1_all.ipk + rm /tmp/luci-app-internet-detector_1.6.2-r1_all.ipk service rpcd restart i18n-ru: - wget --no-check-certificate -O /tmp/luci-i18n-internet-detector-ru_1.6.1-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-i18n-internet-detector-ru_1.6.1-r1_all.ipk - opkg install /tmp/luci-i18n-internet-detector-ru_1.6.1-r1_all.ipk - rm /tmp/luci-i18n-internet-detector-ru_1.6.1-r1_all.ipk + wget --no-check-certificate -O /tmp/luci-i18n-internet-detector-ru_1.6.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-i18n-internet-detector-ru_1.6.2-r1_all.ipk + opkg install /tmp/luci-i18n-internet-detector-ru_1.6.2-r1_all.ipk + rm /tmp/luci-i18n-internet-detector-ru_1.6.2-r1_all.ipk ## Screenshots: @@ -46,9 +47,9 @@ i18n-ru: **Dependences:** modemmanager. - wget --no-check-certificate -O /tmp/internet-detector-mod-modem-restart_1.6.1-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-modem-restart_1.6.1-r1_all.ipk - opkg install /tmp/internet-detector-mod-modem-restart_1.6.1-r1_all.ipk - rm /tmp/internet-detector-mod-modem-restart_1.6.1-r1_all.ipk + wget --no-check-certificate -O /tmp/internet-detector-mod-modem-restart_1.6.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-modem-restart_1.6.2-r1_all.ipk + opkg install /tmp/internet-detector-mod-modem-restart_1.6.2-r1_all.ipk + rm /tmp/internet-detector-mod-modem-restart_1.6.2-r1_all.ipk service internet-detector restart ![](https://github.com/gSpotx2f/luci-app-internet-detector/blob/master/screenshots/04.jpg) @@ -57,9 +58,9 @@ i18n-ru: **Dependences:** mailsend. - wget --no-check-certificate -O /tmp/internet-detector-mod-email_1.6.1-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-email_1.6.1-r1_all.ipk - opkg install /tmp/internet-detector-mod-email_1.6.1-r1_all.ipk - rm /tmp/internet-detector-mod-email_1.6.1-r1_all.ipk + wget --no-check-certificate -O /tmp/internet-detector-mod-email_1.6.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-email_1.6.2-r1_all.ipk + opkg install /tmp/internet-detector-mod-email_1.6.2-r1_all.ipk + rm /tmp/internet-detector-mod-email_1.6.2-r1_all.ipk service internet-detector restart ![](https://github.com/gSpotx2f/luci-app-internet-detector/blob/master/screenshots/05.jpg) @@ -68,9 +69,9 @@ i18n-ru: **Dependences:** curl. - wget --no-check-certificate -O /tmp/internet-detector-mod-telegram_1.6.1-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-telegram_1.6.1-r1_all.ipk - opkg install /tmp/internet-detector-mod-telegram_1.6.1-r1_all.ipk - rm /tmp/internet-detector-mod-telegram_1.6.1-r1_all.ipk + wget --no-check-certificate -O /tmp/internet-detector-mod-telegram_1.6.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-telegram_1.6.2-r1_all.ipk + opkg install /tmp/internet-detector-mod-telegram_1.6.2-r1_all.ipk + rm /tmp/internet-detector-mod-telegram_1.6.2-r1_all.ipk service internet-detector restart ![](https://github.com/gSpotx2f/luci-app-internet-detector/blob/master/screenshots/06.jpg) diff --git a/luci-app-internet-detector/internet-detector-mod-email/Makefile b/luci-app-internet-detector/internet-detector-mod-email/Makefile index d83878ac3..b629bd420 100644 --- a/luci-app-internet-detector/internet-detector-mod-email/Makefile +++ b/luci-app-internet-detector/internet-detector-mod-email/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=internet-detector-mod-email -PKG_VERSION:=1.6.1 +PKG_VERSION:=1.6.2 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/luci-app-internet-detector/internet-detector-mod-modem-restart/Makefile b/luci-app-internet-detector/internet-detector-mod-modem-restart/Makefile index eab3981df..4f530caa6 100644 --- a/luci-app-internet-detector/internet-detector-mod-modem-restart/Makefile +++ b/luci-app-internet-detector/internet-detector-mod-modem-restart/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=internet-detector-mod-modem-restart -PKG_VERSION:=1.6.1 +PKG_VERSION:=1.6.2 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/luci-app-internet-detector/internet-detector-mod-telegram/Makefile b/luci-app-internet-detector/internet-detector-mod-telegram/Makefile index ec82c32d8..1a243d902 100644 --- a/luci-app-internet-detector/internet-detector-mod-telegram/Makefile +++ b/luci-app-internet-detector/internet-detector-mod-telegram/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=internet-detector-mod-telegram -PKG_VERSION:=1.6.1 +PKG_VERSION:=1.6.2 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/luci-app-internet-detector/internet-detector/Makefile b/luci-app-internet-detector/internet-detector/Makefile index 922601814..ffef761f5 100644 --- a/luci-app-internet-detector/internet-detector/Makefile +++ b/luci-app-internet-detector/internet-detector/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=internet-detector -PKG_VERSION:=1.6.1 +PKG_VERSION:=1.6.2 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/luci-app-internet-detector/internet-detector/files/usr/lib/lua/internet-detector/modules/mod_led_control.lua b/luci-app-internet-detector/internet-detector/files/usr/lib/lua/internet-detector/modules/mod_led_control.lua index 2f0650bce..3166db9a4 100644 --- a/luci-app-internet-detector/internet-detector/files/usr/lib/lua/internet-detector/modules/mod_led_control.lua +++ b/luci-app-internet-detector/internet-detector/files/usr/lib/lua/internet-detector/modules/mod_led_control.lua @@ -1,51 +1,53 @@ -local unistd = require("posix.unistd") local dirent = require("posix.dirent") +local time = require("posix.time") +local unistd = require("posix.unistd") local Module = { - name = "mod_led_control", - runPrio = 10, - config = {}, - syslog = function(level, msg) return true end, - debugOutput = function(msg) return true end, - writeValue = function(filePath, str) return false end, - readValue = function(filePath) return nil end, - runInterval = 5, - sysLedsDir = "/sys/class/leds", - ledsPerInstance = 3, - ledAction1Default = 1, -- 1: off, 2: on, 3: blink - ledAction2Default = 1, - status = nil, - _enabled = false, - _leds = {}, - _counter = 0, + name = "mod_led_control", + runPrio = 10, + config = {}, + syslog = function(level, msg) return true end, + debugOutput = function(msg) return true end, + writeValue = function(filePath, str) return false end, + readValue = function(filePath) return nil end, + runInterval = 5, + sysLedsDir = "/sys/class/leds", + ledsPerInstance = 3, + ledAction1Default = 1, -- 1: off, 2: on, 3: blinking, 4: netdev + ledAction2Default = 1, + ledBlinkDelayDefault = 500, + ledNetlinkDeviceDefault = nil, + ledNetdevModeLinkDefault = "1", + ledNetdevModeRxDefault = "0", + ledNetdevModeTxDefault = "0", + status = nil, + _enabled = false, + _leds = {}, + _counter = 0, } -function Module:resetLeds() - local ok, dir = pcall(dirent.files, self.sysLedsDir) - if not ok then - return - end - for led in dir do - local brightness = string.format("%s/%s/brightness", self.sysLedsDir, led) - if unistd.access(brightness, "w") then - self.writeValue(brightness, 0) - end - end -end - function Module:setLedAttrs(t) t.ledDir = string.format("%s/%s", self.sysLedsDir, t.ledName) t.ledMaxBrightnessFile = string.format("%s/max_brightness", t.ledDir) t.ledBrightnessFile = string.format("%s/brightness", t.ledDir) - t.ledMaxBrightness = self.readValue(t.ledMaxBrightnessFile) or 1 + t.ledMaxBrightness = self.readValue(t.ledMaxBrightnessFile) or "1" t.ledTriggerFile = string.format("%s/trigger", t.ledDir) + t.ledDelayOnFile = string.format("%s/delay_on", t.ledDir) + t.ledDelayOffFile = string.format("%s/delay_off", t.ledDir) + t.ledDeviceNameFile = string.format("%s/device_name", t.ledDir) + t.ledLinkFile = string.format("%s/link", t.ledDir) + t.ledRxFile = string.format("%s/rx", t.ledDir) + t.ledTxFile = string.format("%s/tx", t.ledDir) t.ledPrevState = { brightness = self.readValue(t.ledBrightnessFile), trigger = self.readValue(t.ledTriggerFile), } if t.ledPrevState.trigger then - t.ledPrevState.trigger = t.ledPrevState.trigger:match("%[[%w%-_]+%]"):gsub("[%]%[]", "") + local val = t.ledPrevState.trigger:match("%[[%w%-_]+%]") + if val then + t.ledPrevState.trigger = val:gsub("[%]%[]", "") + end end end @@ -65,10 +67,43 @@ function Module:init(t) return end for i, l in ipairs(self._leds) do - if t["led" .. i .. "_name"] ~= nil then - l.ledName = t["led" .. i .. "_name"] - l.ledAction1 = tonumber(t["led" .. i .. "_action_1"]) or self.ledAction1Default - l.ledAction2 = tonumber(t["led" .. i .. "_action_2"]) or self.ledAction2Default + local led = "led" .. i + if t[led .. "_name"] ~= nil then + l.ledName = t[led .. "_name"] + l.ledAction1 = tonumber(t[led .. "_action_1"]) or self.ledAction1Default + l.ledAction2 = tonumber(t[led .. "_action_2"]) or self.ledAction2Default + l.ledBlinkOnDelay1 = tonumber(t[led .. "_blink_on_delay_1"]) or self.ledBlinkDelayDefault + l.ledBlinkOffDelay1 = tonumber(t[led .. "_blink_off_delay_1"]) or self.ledBlinkDelayDefault + l.ledBlinkOnDelay2 = tonumber(t[led .. "_blink_on_delay_2"]) or self.ledBlinkDelayDefault + l.ledBlinkOffDelay2 = tonumber(t[led .. "_blink_off_delay_2"]) or self.ledBlinkDelayDefault + l.ledNetlinkDevice1 = t[led .. "_netdev_device_1"] or self.ledNetlinkDeviceDefault + l.ledNetlinkDevice2 = t[led .. "_netdev_device_2"] or self.ledNetlinkDeviceDefault + l.ledNetdevModeLink1 = self.ledNetdevModeLinkDefault + l.ledNetdevModeTx1 = self.ledNetdevModeTxDefault + l.ledNetdevModeRx1 = self.ledNetdevModeRxDefault + l.ledNetdevModeLink2 = self.ledNetdevModeLinkDefault + l.ledNetdevModeTx2 = self.ledNetdevModeTxDefault + l.ledNetdevModeRx2 = self.ledNetdevModeRxDefault + local ndm1 = t[led .. "_netdev_mode_1"] + if ndm1 ~= nil and type(ndm1) == "table" then + local enabledFlags = {} + for _, v in ipairs(ndm1) do + enabledFlags[v] = "1" + end + l.ledNetdevModeLink1 = enabledFlags.link or "0" + l.ledNetdevModeTx1 = enabledFlags.tx or "0" + l.ledNetdevModeRx1 = enabledFlags.rx or "0" + end + local ndm2 = t[led .. "_netdev_mode_2"] + if ndm2 ~= nil and type(ndm2) == "table" then + local enabledFlags = {} + for _, v in ipairs(ndm2) do + enabledFlags[v] = "1" + end + l.ledNetdevModeLink2 = enabledFlags.link or "0" + l.ledNetdevModeTx2 = enabledFlags.tx or "0" + l.ledNetdevModeRx2 = enabledFlags.rx or "0" + end self:setLedAttrs(l) l.enabled = true else @@ -82,29 +117,119 @@ function Module:init(t) end end -function Module:setTriggerTimer(t) - self.writeValue(t.ledTriggerFile, "timer") +function Module:checkLedTimer(t) + return (unistd.access(t.ledDelayOnFile, "rw") and unistd.access(t.ledDelayOffFile, "rw")) +end + +function Module:checkLedNetdev(t) + return (unistd.access(t.ledDeviceNameFile, "rw") and + unistd.access(t.ledLinkFile, "rw") and + unistd.access(t.ledRxFile, "rw") and + unistd.access(t.ledTxFile, "rw")) end function Module:setTriggerNone(t) self.writeValue(t.ledTriggerFile, "none") + self.debugOutput(string.format( + "%s: LED TRIGGER SET: none, %s", self.name, t.ledTriggerFile)) +end + +function Module:setTriggerTimer(t, delayOn, delayOff) + if not delayOn then + delayOn = self.ledBlinkDelayDefault + end + if not delayOff then + delayOff = self.ledBlinkDelayDefault + end + + self.writeValue(t.ledTriggerFile, "timer") + + for i = 0, 10 do + if self:checkLedTimer(t) then + self.writeValue(t.ledDelayOnFile, delayOn) + self.writeValue(t.ledDelayOffFile, delayOff) + break + else + time.nanosleep({ tv_sec = 0, tv_nsec = 500000 }) + end + end + + self.debugOutput(string.format( + "%s: LED TRIGGER SET: timer, %s; delayOn = %s, delayOff = %s", + self.name, t.ledTriggerFile, tostring(delayOn), tostring(delayOff)) + ) +end + +function Module:setTriggerNetdev(t, device, link, tx, rx) + if not device then + return + end + + self.writeValue(t.ledTriggerFile, "netdev") + + for i = 0, 10 do + if self:checkLedNetdev(t) then + self.writeValue(t.ledDeviceNameFile, device) + self.writeValue(t.ledLinkFile, link) + self.writeValue(t.ledTxFile, tx) + self.writeValue(t.ledRxFile, rx) + break + else + time.nanosleep({ tv_sec = 0, tv_nsec = 500000 }) + end + end + + self.debugOutput(string.format( + "%s: LED TRIGGER SET: netdev, %s; device = %s, link = %s, rx = %s, tx = %s", + self.name, t.ledTriggerFile, tostring(device), tostring(link), tostring(rx), tostring(tx)) + ) end function Module:getCurrentTrigger(t) local trigger = self.readValue(t.ledTriggerFile) - if trigger and trigger:match("%[timer%]") then - return true + if trigger then + if trigger:match("%[timer%]") then + return "timer" + elseif trigger:match("%[netdev%]") then + return "netdev" + end end end +function Module:getTriggerValues(t, trigger) + local currentTrigger = self:getCurrentTrigger(t) + if trigger == currentTrigger then + if trigger == "timer" then + return { + trigger = currentTrigger, + delayOn = tonumber(self.readValue(t.ledDelayOnFile)), + delayOff = tonumber(self.readValue(t.ledDelayOffFile)), + } + elseif trigger == "netdev" then + return { + trigger = currentTrigger, + device = self.readValue(t.ledDeviceNameFile), + link = self.readValue(t.ledLinkFile), + tx = self.readValue(t.ledTxFile), + rx = self.readValue(t.ledRxFile), + } + end + end + return {} +end + function Module:on(t) self:setTriggerNone(t) self.writeValue(t.ledBrightnessFile, t.ledMaxBrightness) + + self.debugOutput(string.format("%s: LED ON: %s", self.name, t.ledBrightnessFile)) end function Module:off(t) self:setTriggerNone(t) - self.writeValue(t.ledBrightnessFile, 0) + self.writeValue(t.ledBrightnessFile, "0") + + self.debugOutput(string.format("%s: LED OFF: %s", self.name, t.ledBrightnessFile)) end function Module:getCurrentState(t) @@ -125,8 +250,21 @@ function Module:ledRunFunc(t, currentStatus) self:on(t) end elseif t.ledAction1 == 3 then - if not self:getCurrentTrigger(t) then - self:setTriggerTimer(t) + local triggerValues = self:getTriggerValues(t, "timer") + if (not next(triggerValues)) or (triggerValues.delayOn ~= t.ledBlinkOnDelay1 or + triggerValues.delayOff ~= t.ledBlinkOffDelay1) then + self:setTriggerTimer(t, t.ledBlinkOnDelay1, t.ledBlinkOffDelay1) + end + elseif t.ledAction1 == 4 then + local triggerValues = self:getTriggerValues(t, "netdev") + if (not next(triggerValues)) or (triggerValues.device ~= t.ledNetlinkDevice1 or + triggerValues.link ~= t.ledNetdevModeLink1 or + triggerValues.tx ~= t.ledNetdevModeTx1 or + triggerValues.rx ~= t.ledNetdevModeRx1) then + self:setTriggerNetdev(t, + t.ledNetlinkDevice1, t.ledNetdevModeLink1, + t.ledNetdevModeTx1, t.ledNetdevModeRx1 + ) end end else @@ -139,8 +277,21 @@ function Module:ledRunFunc(t, currentStatus) self:on(t) end elseif t.ledAction2 == 3 then - if not self:getCurrentTrigger(t) then - self:setTriggerTimer(t) + local triggerValues = self:getTriggerValues(t, "timer") + if (not next(triggerValues)) or (triggerValues.delayOn ~= t.ledBlinkOnDelay2 or + triggerValues.delayOff ~= t.ledBlinkOffDelay2) then + self:setTriggerTimer(t, t.ledBlinkOnDelay2, t.ledBlinkOffDelay2) + end + elseif t.ledAction2 == 4 then + local triggerValues = self:getTriggerValues(t, "netdev") + if (not next(triggerValues)) or (triggerValues.device ~= t.ledNetlinkDevice2 or + triggerValues.link ~= t.ledNetdevModeLink2 or + triggerValues.tx ~= t.ledNetdevModeTx2 or + triggerValues.rx ~= t.ledNetdevModeRx2) then + self:setTriggerNetdev(t, + t.ledNetlinkDevice2, t.ledNetdevModeLink2, + t.ledNetdevModeTx2, t.ledNetdevModeRx2 + ) end end end diff --git a/luci-app-internet-detector/internet-detector/files/usr/lib/lua/internet-detector/modules/mod_public_ip.lua b/luci-app-internet-detector/internet-detector/files/usr/lib/lua/internet-detector/modules/mod_public_ip.lua index 747085dfe..ae62e523e 100644 --- a/luci-app-internet-detector/internet-detector/files/usr/lib/lua/internet-detector/modules/mod_public_ip.lua +++ b/luci-app-internet-detector/internet-detector/files/usr/lib/lua/internet-detector/modules/mod_public_ip.lua @@ -350,12 +350,15 @@ end function Module:httpRequest(url) local retCode = 1, data - local iface = "" - if self.config.serviceConfig.iface then - iface = " --interface " .. self.config.serviceConfig.iface - end - local fh = io.popen(string.format( - '%s%s --connect-timeout %s %s "%s"; printf "\n$?";', self.curlExec, iface, self.timeout, self.curlParams, url), "r") + local curl = string.format( + '%s%s --connect-timeout %s %s "%s"; printf "\n$?";', + self.curlExec, + self.config.serviceConfig.iface and (" --interface " .. self.config.serviceConfig.iface) or "", + self.timeout, + self.curlParams, + url + ) + local fh = io.popen(curl, "r") if fh then data = fh:read("*a") fh:close() diff --git a/luci-app-internet-detector/luci-app-internet-detector/Makefile b/luci-app-internet-detector/luci-app-internet-detector/Makefile index d7769dcd7..89bb14cf5 100644 --- a/luci-app-internet-detector/luci-app-internet-detector/Makefile +++ b/luci-app-internet-detector/luci-app-internet-detector/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-internet-detector -PKG_VERSION:=1.6.1 +PKG_VERSION:=1.6.2 PKG_RELEASE:=1 LUCI_TITLE:=LuCI support for internet-detector LUCI_DEPENDS:=+internet-detector diff --git a/luci-app-internet-detector/luci-app-internet-detector/htdocs/luci-static/resources/view/internet-detector.js b/luci-app-internet-detector/luci-app-internet-detector/htdocs/luci-static/resources/view/internet-detector.js index 2f4d796ae..6b7eac1d6 100644 --- a/luci-app-internet-detector/luci-app-internet-detector/htdocs/luci-static/resources/view/internet-detector.js +++ b/luci-app-internet-detector/luci-app-internet-detector/htdocs/luci-static/resources/view/internet-detector.js @@ -624,7 +624,8 @@ return view.extend({ this.getInit(), uci.load(this.appName), ]).catch(e => { - ui.addNotification(null, E('p', _('An error has occurred') + ': %s'.format(e.message))); + ui.addNotification( + null, E('p', _('An error has occurred') + ': %s'.format(e.message))); }); }, @@ -749,6 +750,18 @@ return view.extend({ list.value(600, '10 ' + _('min')); } + function makeTimerDelayOptions(list) { + list.value(25, '25 ' + _('msec')); + list.value(50, '50 ' + _('msec')); + list.value(100, '100 ' + _('msec')); + list.value(250, '250 ' + _('msec')); + list.value(500, '500 ' + _('msec')); + list.value(750, '750 ' + _('msec')); + list.value(1000, '1 ' + _('sec')); + list.value(1500, '1.5 ' + _('sec')); + list.value(2000, '2 ' + _('sec')); + } + // enabled o = s.taboption('main', form.Flag, 'enabled', _('Enabled'), @@ -898,13 +911,14 @@ return view.extend({ this.leds.sort((a, b) => a.name > b.name); // enabled - o = s.taboption('led_control', form.Flag, 'mod_led_control_enabled', + o = s.taboption('led_control', form.Flag, + 'mod_led_control_enabled', _('Enabled')); o.rmempty = false; o.modalonly = true; - o = s.taboption('led_control', form.SectionValue, s.section, form.NamedSection, - s.section); + o = s.taboption('led_control', form.SectionValue, + s.section, form.NamedSection, s.section); o.depends({ mod_led_control_enabled: '1' }); ss = o.subsection; @@ -912,7 +926,8 @@ return view.extend({ ss.tab('led' + i + '_tab', _('LED') + ' ' + i); // led_name - o = ss.taboption('led' + i + '_tab', form.ListValue, 'mod_led_control_led' + i + '_name', + o = ss.taboption('led' + i + '_tab', form.ListValue, + 'mod_led_control_led' + i + '_name', _('LED Name')); o.modalonly = true; if(i > 1) { @@ -922,24 +937,117 @@ return view.extend({ this.leds.forEach(e => o.value(e.name)); // led_action_1 - o = ss.taboption('led' + i + '_tab', form.ListValue, 'mod_led_control_led' + i + '_action_1', - _('Action when connected')); + o = ss.taboption('led' + i + '_tab', form.ListValue, + 'mod_led_control_led' + i + '_action_1', + _('After connection')); o.depends({ ['mod_led_control_led' + i + '_name']: /.+/ }); o.modalonly = true; o.value(1, _('Off')); o.value(2, _('On')); - o.value(3, _('Blink')); + o.value(3, _('Blinking (kernel: timer)')); + o.value(4, _('Network device activity (kernel: netdev)')); o.default = '2'; + // blink_on_delay_1 + o = ss.taboption('led' + i + '_tab', form.ListValue, + 'mod_led_control_led' + i + '_blink_on_delay_1', + _('On-state delay'), + _('On-state delay for blinking option.')); + makeTimerDelayOptions(o); + o.depends({ ['mod_led_control_led' + i + '_action_1']: '3' }); + o.modalonly = true; + o.default = '500'; + + // blink_off_delay_1 + o = ss.taboption('led' + i + '_tab', form.ListValue, + 'mod_led_control_led' + i + '_blink_off_delay_1', + _('Off-state delay'), + _('Off-state delay for blinking option.')); + makeTimerDelayOptions(o); + o.depends({ ['mod_led_control_led' + i + '_action_1']: '3' }); + o.modalonly = true; + o.default = '500'; + + // netdev_device_1 + o = ss.taboption('led' + i + '_tab', widgets.DeviceSelect, + 'mod_led_control_led' + i + '_netdev_device_1', + _('Device'), + _('LED will display the link activity of this network device.') + ); + o.depends({ ['mod_led_control_led' + i + '_action_1']: '4' }); + o.modalonly = true; + o.rmempty = false; + o.noaliases = true; + + // netdev_mode_1 + o = ss.taboption('led' + i + '_tab', form.MultiValue, + 'mod_led_control_led' + i + '_netdev_mode_1', + _('LED mode') + ); + o.depends({ ['mod_led_control_led' + i + '_action_1']: '4' }); + o.modalonly = true; + o.value('link', _('Link On')); + o.value('tx', _('Tramsmit')); + o.value('rx', _('Receive')); + o.default = 'link'; + o.rmempty = false; + // led_action_2 - o = ss.taboption('led' + i + '_tab', form.ListValue, 'mod_led_control_led' + i + '_action_2', - _('Action when disconnected')); + o = ss.taboption('led' + i + '_tab', form.ListValue, + 'mod_led_control_led' + i + '_action_2', + _('After disconnection')); o.depends({ ['mod_led_control_led' + i + '_name']: /.+/ }); o.modalonly = true; o.value(1, _('Off')); o.value(2, _('On')); - o.value(3, _('Blink')); + o.value(3, _('Blinking (kernel: timer)')); + o.value(4, _('Network device activity (kernel: netdev)')); o.default = '1'; + + // blink_on_delay_2 + o = ss.taboption('led' + i + '_tab', form.ListValue, + 'mod_led_control_led' + i + '_blink_on_delay_2', + _('On-state delay'), + _('On-state delay for blinking option.')); + makeTimerDelayOptions(o); + o.depends({ ['mod_led_control_led' + i + '_action_2']: '3' }); + o.modalonly = true; + o.default = '500'; + + // blink_off_delay_2 + o = ss.taboption('led' + i + '_tab', form.ListValue, + 'mod_led_control_led' + i + '_blink_off_delay_2', + _('Off-state delay'), + _('Off-state delay for blinking option.')); + makeTimerDelayOptions(o); + o.depends({ ['mod_led_control_led' + i + '_action_2']: '3' }); + o.modalonly = true; + o.default = '500'; + + // netdev_device_2 + o = ss.taboption('led' + i + '_tab', widgets.DeviceSelect, + 'mod_led_control_led' + i + '_netdev_device_2', + _('Device'), + _('LED will display the link activity of this network device.') + ); + o.depends({ ['mod_led_control_led' + i + '_action_2']: '4' }); + o.modalonly = true; + o.rmempty = false; + o.noaliases = true; + + // netdev_mode_2 + o = ss.taboption('led' + i + '_tab', form.MultiValue, + 'mod_led_control_led' + i + '_netdev_mode_2', + _('LED mode') + ); + o.depends({ ['mod_led_control_led' + i + '_action_2']: '4' }); + o.modalonly = true; + o.value('link', _('Link On')); + o.value('tx', _('Tramsmit')); + o.value('rx', _('Receive')); + o.default = 'link'; + o.rmempty = false; + }; } else { o = s.taboption('led_control', form.DummyValue, '_dummy'); @@ -990,7 +1098,8 @@ return view.extend({ o.default = '300'; // disconnected_at_startup - o = s.taboption('reboot_device', form.Flag, 'mod_reboot_disconnected_at_startup', + o = s.taboption('reboot_device', form.Flag, + 'mod_reboot_disconnected_at_startup', _('On startup'), _('Reboot device if the Internet is disconnected at service startup.') ); @@ -1007,7 +1116,8 @@ return view.extend({ o.modalonly = true; // enabled - o = s.taboption('restart_network', form.Flag, 'mod_network_restart_enabled', + o = s.taboption('restart_network', form.Flag, + 'mod_network_restart_enabled', _('Enabled')); o.rmempty = false; o.modalonly = true; @@ -1022,7 +1132,8 @@ return view.extend({ o.modalonly = true; // ifaces - o = s.taboption('restart_network', widgets.DeviceSelect, 'mod_network_restart_ifaces', + o = s.taboption('restart_network', widgets.DeviceSelect, + 'mod_network_restart_ifaces', _('Device'), _('Network device or interface to restart. If not specified, then the network service is restarted.') ); @@ -1073,7 +1184,8 @@ return view.extend({ o.default = '0'; // disconnected_at_startup - o = s.taboption('restart_network', form.Flag, 'mod_network_restart_disconnected_at_startup', + o = s.taboption('restart_network', form.Flag, + 'mod_network_restart_disconnected_at_startup', _('On startup'), _('Restart network if the Internet is disconnected at service startup.') ); @@ -1092,7 +1204,8 @@ return view.extend({ o.modalonly = true; // enabled - o = s.taboption('restart_modem', form.Flag, 'mod_modem_restart_enabled', + o = s.taboption('restart_modem', form.Flag, + 'mod_modem_restart_enabled', _('Enabled'), ); o.rmempty = false; @@ -1140,7 +1253,8 @@ return view.extend({ o.modalonly = true; // iface - o = s.taboption('restart_modem', widgets.NetworkSelect, 'mod_modem_restart_iface', + o = s.taboption('restart_modem', widgets.NetworkSelect, + 'mod_modem_restart_iface', _('Interface'), _('ModemManger interface. If specified, it will be restarted after restarting ModemManager.') ); @@ -1168,7 +1282,8 @@ return view.extend({ o.default = '0'; // disconnected_at_startup - o = s.taboption('restart_modem', form.Flag, 'mod_modem_restart_disconnected_at_startup', + o = s.taboption('restart_modem', form.Flag, + 'mod_modem_restart_disconnected_at_startup', _('On startup'), _('Restart modem if the Internet is disconnected at service startup.') ); @@ -1292,7 +1407,8 @@ return view.extend({ if(this.currentAppMode !== '2') { // enable_ip_script - o = s.taboption('public_ip', form.Flag, 'mod_public_ip_enable_ip_script', + o = s.taboption('public_ip', form.Flag, + 'mod_public_ip_enable_ip_script', _('Enable public-ip-script')); o.rmempty = false; o.modalonly = true; @@ -1356,7 +1472,8 @@ return view.extend({ o.default = '0'; // host_alias - o = s.taboption('email', form.Value, 'mod_email_host_alias', + o = s.taboption('email', form.Value, + 'mod_email_host_alias', _('Host alias'), _('Host identifier in messages. If not specified, hostname will be used.')); o.modalonly = true; @@ -1412,7 +1529,8 @@ return view.extend({ o.modalonly = true; // message_at_startup - o = s.taboption('email', form.Flag, 'mod_email_message_at_startup', + o = s.taboption('email', form.Flag, + 'mod_email_message_at_startup', _('On startup'), _('Send message on service startup.') ); @@ -1443,7 +1561,8 @@ return view.extend({ o.modalonly = true; // enabled - o = s.taboption('telegram', form.Flag, 'mod_telegram_enabled', + o = s.taboption('telegram', form.Flag, + 'mod_telegram_enabled', _('Enable')); o.rmempty = false; o.modalonly = true; @@ -1481,7 +1600,8 @@ return view.extend({ o.default = '0'; // host_alias - o = s.taboption('telegram', form.Value, 'mod_telegram_host_alias', + o = s.taboption('telegram', form.Value, + 'mod_telegram_host_alias', _('Host alias'), _('Host identifier in messages. If not specified, hostname will be used.')); o.modalonly = true; @@ -1509,7 +1629,8 @@ return view.extend({ o.depends({ 'mod_telegram_api_token': /.+/ }); // message_at_startup - o = s.taboption('telegram', form.Flag, 'mod_telegram_message_at_startup', + o = s.taboption('telegram', form.Flag, + 'mod_telegram_message_at_startup', _('On startup'), _('Send message on service startup.') ); @@ -1540,8 +1661,8 @@ return view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('user_scripts', form.SectionValue, 'user_scripts_section', form.NamedSection, - s.section); + o = s.taboption('user_scripts', form.SectionValue, + 'user_scripts_section', form.NamedSection, s.section); ss = o.subsection; // up-script tab @@ -1588,7 +1709,8 @@ return view.extend({ // up_script_attempt_interval o = ss.taboption('user_scripts_up_script', this.CBITimeInput, - 'mod_user_scripts_up_script_attempt_interval', _('Attempt interval'), + 'mod_user_scripts_up_script_attempt_interval', + _('Attempt interval'), _('Interval between up-script runs.') ); o.default = '60'; @@ -1596,7 +1718,8 @@ return view.extend({ o.modalonly = true; // connected_at_startup - o = ss.taboption('user_scripts_up_script', form.Flag, 'mod_user_scripts_connected_at_startup', + o = ss.taboption('user_scripts_up_script', form.Flag, + 'mod_user_scripts_connected_at_startup', _('On startup'), _('Run up-script if the Internet is connected at service startup.') ); @@ -1647,7 +1770,8 @@ return view.extend({ // down_script_attempt_interval o = ss.taboption('user_scripts_down_script', this.CBITimeInput, - 'mod_user_scripts_down_script_attempt_interval', _('Attempt interval'), + 'mod_user_scripts_down_script_attempt_interval', + _('Attempt interval'), _('Interval between down-script runs.') ); o.default = '60'; @@ -1655,7 +1779,8 @@ return view.extend({ o.modalonly = true; // disconnected_at_startup - o = ss.taboption('user_scripts_down_script', form.Flag, 'mod_user_scripts_disconnected_at_startup', + o = ss.taboption('user_scripts_down_script', form.Flag, + 'mod_user_scripts_disconnected_at_startup', _('On startup'), _('Run down-script if the Internet is disconnected at service startup.') ); @@ -1672,13 +1797,15 @@ return view.extend({ o.modalonly = true; // enabled - o = s.taboption('regular_script', form.Flag, 'mod_regular_script_enabled', + o = s.taboption('regular_script', form.Flag, + 'mod_regular_script_enabled', _('Enabled')); o.rmempty = false; o.modalonly = true; // next run - o = s.taboption('regular_script', form.DummyValue, '_dummy', _('Next run')); + o = s.taboption('regular_script', form.DummyValue, + '_dummy', _('Next run')); o.rawhtml = true; o.default = '' + (this.modRegularScriptNextRun[s.section] || _('Not scheduled')) + ''; o.modalonly = true; diff --git a/luci-app-internet-detector/luci-app-internet-detector/po/ru/internet-detector.po b/luci-app-internet-detector/luci-app-internet-detector/po/ru/internet-detector.po index 5cf752d29..956922997 100644 --- a/luci-app-internet-detector/luci-app-internet-detector/po/ru/internet-detector.po +++ b/luci-app-internet-detector/luci-app-internet-detector/po/ru/internet-detector.po @@ -23,15 +23,23 @@ msgid "" "LED indicates the Internet status." msgstr "LED отображает статус Интернет." -msgid "Action when connected" -msgstr "Действие при подключении" +msgid "LED mode" +msgstr "Режим LED" -msgid "Action when disconnected" -msgstr "Действие при отключении" +msgid "" +"LED will display the link activity of this network device." +msgstr "" +"LED будет отображать активность линка этого сетевого устройства." msgid "Add instance" msgstr "Добавить экземпляр" +msgid "After connection" +msgstr "После подключения" + +msgid "After disconnection" +msgstr "После отключения" + msgid "Alive interval" msgstr "Интервал при подключении" @@ -53,8 +61,8 @@ msgstr "Попытки" msgid "Big: 248 bytes" msgstr "Большой: 248 байт" -msgid "Blink" -msgstr "Мигание" +msgid "Blinking (kernel: timer)" +msgstr "Мигание (kernel: timer)" msgid "Bot API token is missing!" msgstr "Отсутствует API токен бота!" @@ -267,6 +275,9 @@ msgstr "Гигантский: 9000 байт" msgid "LED control" msgstr "Управление LED" +msgid "Link On" +msgstr "Подключение" + msgid "Loading" msgstr "Загрузка" @@ -326,6 +337,9 @@ msgstr "" "Сетевое устройство для доступа в Интернет. Если не указано, используется " "устройство по умолчанию." +msgid "Network device activity (kernel: netdev)" +msgstr "Активность сетевого устройства (kernel: netdev)" + msgid "" "Network device or interface to restart. If not specified, then the network service is restarted." msgstr "" @@ -356,12 +370,24 @@ msgstr "Количество попыток запроса IP адреса" msgid "Off" msgstr "Выключить" +msgid "Off-state delay" +msgstr "Задержка выключенного состояния" + +msgid "Off-state delay for blinking option." +msgstr "Задержка выключенного состояния для опции мигания." + msgid "On" msgstr "Включить" msgid "On startup" msgstr "При запуске" +msgid "On-state delay" +msgstr "Задержка включённого состояния" + +msgid "On-state delay for blinking option." +msgstr "Задержка включённого состояния для опции мигания." + msgid "One of the following:" msgstr "Одно из следующих значений:" @@ -421,6 +447,9 @@ msgstr "Перезагрузка устройства" msgid "Reboot device if the Internet is disconnected at service startup." msgstr "Перезагрузка устройства если Интренет отключен при запуске службы." +msgid "Receive" +msgstr "Приём" + msgid "Recipient" msgstr "Получатель" @@ -565,6 +594,9 @@ msgstr "Таймаут между остановкой и запуском ин msgid "To support HTTP services you need to install curl." msgstr "Для поддержки HTTP сервисов необходимо установить curl." +msgid "Tramsmit" +msgstr "Передача" + msgid "Type a time string" msgstr "Введите строку времени" @@ -658,6 +690,9 @@ msgstr "мин" msgid "minutes" msgstr "минуты" +msgid "msec" +msgstr "мсек" + msgid "sec" msgstr "сек" diff --git a/luci-app-internet-detector/luci-app-internet-detector/po/templates/internet-detector.pot b/luci-app-internet-detector/luci-app-internet-detector/po/templates/internet-detector.pot index f31fe6af1..f3c277701 100644 --- a/luci-app-internet-detector/luci-app-internet-detector/po/templates/internet-detector.pot +++ b/luci-app-internet-detector/luci-app-internet-detector/po/templates/internet-detector.pot @@ -11,15 +11,22 @@ msgid "" "LED indicates the Internet status." msgstr "" -msgid "Action when connected" +msgid "LED mode" msgstr "" -msgid "Action when disconnected" +msgid "" +"LED will display the link activity of this network device." msgstr "" msgid "Add instance" msgstr "" +msgid "After connection" +msgstr "" + +msgid "After disconnection" +msgstr "" + msgid "Alive interval" msgstr "" @@ -41,7 +48,7 @@ msgstr "" msgid "Big: 248 bytes" msgstr "" -msgid "Blink" +msgid "Blinking (kernel: timer)" msgstr "" msgid "Bot API token is missing!" @@ -253,6 +260,9 @@ msgstr "" msgid "LED control" msgstr "" +msgid "Link On" +msgstr "" + msgid "Loading" msgstr "" @@ -303,6 +313,9 @@ msgid "" "interface is used." msgstr "" +msgid "Network device activity (kernel: netdev)" +msgstr "" + msgid "" "Network device or interface to restart. If not specified, then the network service is restarted." msgstr "" @@ -331,12 +344,24 @@ msgstr "" msgid "Off" msgstr "" +msgid "Off-state delay" +msgstr "" + +msgid "Off-state delay for blinking option." +msgstr "" + msgid "On" msgstr "" msgid "On startup" msgstr "" +msgid "On-state delay" +msgstr "" + +msgid "On-state delay for blinking option." +msgstr "" + msgid "One of the following:" msgstr "" @@ -393,6 +418,9 @@ msgstr "" msgid "Reboot device if the Internet is disconnected at service startup." msgstr "" +msgid "Receive" +msgstr "" + msgid "Recipient" msgstr "" @@ -537,6 +565,9 @@ msgstr "" msgid "To support HTTP services you need to install curl." msgstr "" +msgid "Tramsmit" +msgstr "" + msgid "Type a time string" msgstr "" @@ -622,6 +653,9 @@ msgstr "" msgid "minutes" msgstr "" +msgid "msec" +msgstr "" + msgid "sec" msgstr "" diff --git a/naiveproxy/Makefile b/naiveproxy/Makefile index b4c4d3792..f11a256c7 100644 --- a/naiveproxy/Makefile +++ b/naiveproxy/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=naiveproxy -PKG_VERSION:=138.0.7204.35-1 +PKG_VERSION:=139.0.7258.62-1 PKG_RELEASE:=1 # intel 80386 & riscv64 & cortex-a76 @@ -20,47 +20,47 @@ else ifeq ($(ARCH_PREBUILT),riscv64_riscv64) endif ifeq ($(ARCH_PACKAGES),aarch64_cortex-a53) - PKG_HASH:=45c8b1f19d53f3e0c30bd591a0ba29e511295f7eb9c5ebeaee9dcb483e477d44 + PKG_HASH:=88b631884518ad25eaee00350445824bb962283cf7665519d4d7b242605a95a4 else ifeq ($(ARCH_PACKAGES),aarch64_cortex-a72) - PKG_HASH:=2eb876e77a067f93e50370a1d7ebef497f948e76a732a698aac17b777c2e02da + PKG_HASH:=c8196e4ac5e60c933cdce968b1e630abf3577de1258a4c330eb99ea8649a177a else ifeq ($(ARCH_PACKAGES),aarch64_generic) - PKG_HASH:=b0303b6c1147d563454605e3e2fda651aa40a8a7189b3c15245389557539b516 + PKG_HASH:=7fa990948c429c36fd0778cd9125e08aed79d5e92be6675951540ddd7069b2fb else ifeq ($(ARCH_PACKAGES),arm_arm1176jzf-s_vfp) - PKG_HASH:=11f3aa85008935a7bce61e69117d0fec66b31ce7a8394d1ccb47f1fb66d00c35 + PKG_HASH:=51db374620c21797a732d11e17b7ddc31e9be681804ea3145938a24320aaa66a else ifeq ($(ARCH_PACKAGES),arm_arm926ej-s) - PKG_HASH:=c5838f4149efbc7b2e01d6f2c94f7585edc3b51ebc072e88f4e8d6e709125b02 + PKG_HASH:=abf5db455d57de10dec4b5e5d37903293bcbbe80a3baeb33aded53fb4d503db1 else ifeq ($(ARCH_PACKAGES),arm_cortex-a15_neon-vfpv4) - PKG_HASH:=a514d92010d2999ddbfe073e61dc9ea7f58414845077114979950ff5078a72ee + PKG_HASH:=4ea19599f0287da886c79b93d3ac7ae03727402587fa3af5fdd3d12ad2e2a58e else ifeq ($(ARCH_PACKAGES),arm_cortex-a5_vfpv4) - PKG_HASH:=1e2677d68d9c81b7505ada6ed146177e53dca708fa878c5105b87812df20c797 + PKG_HASH:=6824c79925f5cc9c3a8fd8a2090c982a0b30c0ce014aa90f99a2f36ed68ada9d else ifeq ($(ARCH_PACKAGES),arm_cortex-a7) - PKG_HASH:=e9047f458ecba7cfc4c722d0180c1a4d823d9edbde41e4abce0f293c52712b0f + PKG_HASH:=456c896ac9a26d41a6bc0aea74262780516203a143cfb530906ac9a580d35ab5 else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_neon-vfpv4) - PKG_HASH:=954cea8e06240e6391d7057765335c6ac20fdbc42dcde9d20c2e4aa55a75a9e1 + PKG_HASH:=0ac6f60ba0b90ef38aa88f1172b7119e07ec775b1776594afb51452f5b4af125 else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_vfpv4) - PKG_HASH:=6d739e11f4df930139744d982ee9e98050cf6778ff0af90bf5e128f789f26b61 + PKG_HASH:=361341cd9300e071f06545d92bf355bd83fe415af7392cffcd503e9207f273e5 else ifeq ($(ARCH_PACKAGES),arm_cortex-a8_vfpv3) - PKG_HASH:=8f3de0015d28c341d8dd303bd770ffaf4cf05767a4af3612218da78a54d01c6e + PKG_HASH:=04eaadc2c6cf300c788d8531cdf04821c91a751bae720c2fc4631ec6445a0cd8 else ifeq ($(ARCH_PACKAGES),arm_cortex-a9) - PKG_HASH:=bf15aaaf307ac86cbd3fc9c9a8a107103d2682ba227f54fd2d2a2def252b8fca + PKG_HASH:=523af9336b72da3a32f38d1975e86f15bdc859234f8e7f0a3c664fc31da2ce3f else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_neon) - PKG_HASH:=c5788e9ce8eef9d526390ef04966668ffd9e9f40af194257fb9600362585032f + PKG_HASH:=b20c2e0c098503d8b57c6ab70d70de401bb642a474521ccf0e700756ad7ed8e1 else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_vfpv3-d16) - PKG_HASH:=5c93593112ad72c75d35fc41b6d6ed3c1115dcf8aa30f9bc61303696f31fa551 + PKG_HASH:=9658d4f6a9a7e753774b1b231808c5267addc7cea94e2e93e7f823ec84e279e3 else ifeq ($(ARCH_PACKAGES),arm_mpcore) - PKG_HASH:=ee481d71ff9735e221f8a58601690f11315613f4e77678bbe3ab25236d5ad36a + PKG_HASH:=cfdcc0bfd70c689b01af8ebcc712f8a1431aeba77a4bc1522444268f9864d12d else ifeq ($(ARCH_PACKAGES),arm_xscale) - PKG_HASH:=3719a7d151c1d80250388cea32f74165772d8cc21b8bfa9c6a8db312ae19a0b8 + PKG_HASH:=5c7706b1cb19e27d4c0135feea6af245e19af684b9e2bb38c3cea80c9adb970c else ifeq ($(ARCH_PACKAGES),mipsel_24kc) - PKG_HASH:=1aa0c1fbe81242cf4c14a6c83fd32f8548a3691233c2078a640619c2b3bfd7c4 + PKG_HASH:=70e248ffa44a067ced6c178f3aef09097e7bbd6030cb7d3776866880ad954eb6 else ifeq ($(ARCH_PACKAGES),mipsel_mips32) - PKG_HASH:=9f909d879602a0feeb2535e0859339a0496cdd948fb2f64c491bc5cf324f93f0 + PKG_HASH:=a49e6088ddb1af6135fa2a46ba5c55db66b4a2ecd46cb6daf3776181a2e62296 else ifeq ($(ARCH_PACKAGES),riscv64) - PKG_HASH:=df183679a499ce65f3ff2e7561a551dd890c4acd6bfdeb97fdf729c97d195bac + PKG_HASH:=4f8163daea361188f8eec3c1794b78416b898aff226e33e82f8ae6f96d403ac3 else ifeq ($(ARCH_PACKAGES),x86) - PKG_HASH:=f9ca7ee068b2317c8a9e1155ed692cb99d3ba35f5ea4e0dcb56d63efa8764839 + PKG_HASH:=02e38a354b26ed8ebe7a753bac2f8a4a4b4210a23dcb430de0ab88b88b689f92 else ifeq ($(ARCH_PACKAGES),x86_64) - PKG_HASH:=c6a6526432d76a2a19412869fd37a99ffa9f832c992791fc26983965ad3f0726 + PKG_HASH:=df910463af15f53b5540dcb23a9858ba73dd2bc336eea9625ba0360bd3b29042 else PKG_HASH:=dummy endif