Merge pull request #2631 from blocktrron/cellular-support
gluon-core / web: add cellular WWAN support
This commit is contained in:
commit
40cf3bc905
55
package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
Executable file
55
package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local uci = require('simple-uci').cursor()
|
||||||
|
local platform = require 'gluon.platform'
|
||||||
|
|
||||||
|
if not platform.is_cellular_device() then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_or_delete(package, section, option, val)
|
||||||
|
if val ~= nil and string.len(val) ~= 0 then
|
||||||
|
uci:set(package, section, option, val)
|
||||||
|
else
|
||||||
|
uci:delete(package, section, option)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function setup_ncm_qmi(devpath, control_type, delay)
|
||||||
|
local pdptype = uci:get('gluon', 'cellular', 'pdptype')
|
||||||
|
|
||||||
|
local pincode = uci:get('gluon', 'cellular', 'pin')
|
||||||
|
local username = uci:get('gluon', 'cellular', 'username')
|
||||||
|
local password = uci:get('gluon', 'cellular', 'password')
|
||||||
|
|
||||||
|
uci:section('network', 'interface', 'cellular', {
|
||||||
|
proto = control_type,
|
||||||
|
device = devpath,
|
||||||
|
disabled = not uci:get_bool('gluon', 'cellular', 'enabled'),
|
||||||
|
pdptype = pdptype,
|
||||||
|
apn = uci:get('gluon', 'cellular', 'apn'),
|
||||||
|
})
|
||||||
|
|
||||||
|
if pdptype ~= 'IP' then
|
||||||
|
uci:set('network', 'cellular', 'ipv6', 'auto')
|
||||||
|
else
|
||||||
|
uci:delete('network', 'cellular', 'ipv6')
|
||||||
|
end
|
||||||
|
|
||||||
|
set_or_delete('network', 'cellular', 'pincode', pincode)
|
||||||
|
set_or_delete('network', 'cellular', 'username', username)
|
||||||
|
set_or_delete('network', 'cellular', 'password', password)
|
||||||
|
set_or_delete('network', 'cellular', 'delay', delay)
|
||||||
|
end
|
||||||
|
|
||||||
|
if platform.match('ath79', 'nand', {
|
||||||
|
'zte,mf281',
|
||||||
|
}) then
|
||||||
|
setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15)
|
||||||
|
elseif platform.match('ipq40xx', 'generic', {
|
||||||
|
'glinet,gl-ap1300',
|
||||||
|
}) then
|
||||||
|
setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
|
||||||
|
end
|
||||||
|
|
||||||
|
uci:save('network')
|
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/lua
|
#!/usr/bin/lua
|
||||||
|
|
||||||
local uci = require('simple-uci').cursor()
|
local uci = require('simple-uci').cursor()
|
||||||
|
local platform = require 'gluon.platform'
|
||||||
|
|
||||||
|
|
||||||
local defaults = uci:get_first('firewall', 'defaults')
|
local defaults = uci:get_first('firewall', 'defaults')
|
||||||
@ -16,8 +17,18 @@ local function reject_input_on_wan(zone)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function add_cellular_wan(zone)
|
||||||
|
if zone.name == 'wan' then
|
||||||
|
uci:set('firewall', zone['.name'], 'network', {'wan', 'wan6', 'cellular_4', 'cellular_6'})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
uci:foreach('firewall', 'zone', reject_input_on_wan)
|
uci:foreach('firewall', 'zone', reject_input_on_wan)
|
||||||
|
|
||||||
|
if platform.is_cellular_device() then
|
||||||
|
uci:foreach('firewall', 'zone', add_cellular_wan)
|
||||||
|
end
|
||||||
|
|
||||||
for _, zone in ipairs({'mesh', 'loc_client', 'wired_mesh'}) do
|
for _, zone in ipairs({'mesh', 'loc_client', 'wired_mesh'}) do
|
||||||
-- Other packages assign interfaces to these zones
|
-- Other packages assign interfaces to these zones
|
||||||
uci:section('firewall', 'zone', zone, {
|
uci:section('firewall', 'zone', zone, {
|
||||||
|
@ -69,4 +69,18 @@ function M.is_outdoor_device()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.is_cellular_device()
|
||||||
|
if M.match('ath79', 'nand', {
|
||||||
|
'zte,mf281',
|
||||||
|
}) then
|
||||||
|
return true
|
||||||
|
elseif M.match('ipq40xx', 'generic', {
|
||||||
|
'glinet,gl-ap1300',
|
||||||
|
}) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
12
package/gluon-web-cellular/Makefile
Normal file
12
package/gluon-web-cellular/Makefile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-web-cellular
|
||||||
|
|
||||||
|
include ../gluon.mk
|
||||||
|
|
||||||
|
define Package/gluon-web-cellular
|
||||||
|
DEPENDS:=+gluon-web-admin
|
||||||
|
TITLE:=UI for activating cellular WAN
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackageGluon,gluon-web-cellular))
|
37
package/gluon-web-cellular/i18n/gluon-web-cellular.pot
Normal file
37
package/gluon-web-cellular/i18n/gluon-web-cellular.pot
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
|
msgid "APN"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Cellular"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Enabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "IPv4"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "IPv4/IPv6"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "IPv6"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "SIM PIN"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Username"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"You can enable uplink via cellular service. If you decide so, the VPN "
|
||||||
|
"connection is established using the integrated WWAN modem."
|
||||||
|
msgstr ""
|
@ -0,0 +1,7 @@
|
|||||||
|
local platform = require 'gluon.platform'
|
||||||
|
|
||||||
|
package 'gluon-web-cellular'
|
||||||
|
|
||||||
|
if platform.is_cellular_device() then
|
||||||
|
entry({"admin", "cellular"}, model("admin/cellular"), _("Cellular"), 30)
|
||||||
|
end
|
@ -0,0 +1,54 @@
|
|||||||
|
local uci = require("simple-uci").cursor()
|
||||||
|
|
||||||
|
local f = Form(translate("Cellular"))
|
||||||
|
|
||||||
|
local s = f:section(Section, nil, translate(
|
||||||
|
'You can enable uplink via cellular service. If you decide so, the VPN connection is established '
|
||||||
|
.. 'using the integrated WWAN modem.'
|
||||||
|
))
|
||||||
|
|
||||||
|
local enabled = s:option(Flag, "enabled", translate("Enabled"))
|
||||||
|
enabled.default = uci:get('gluon', 'cellular') and uci:get_bool('gluon', 'cellular', 'enabled')
|
||||||
|
|
||||||
|
local pin = s:option(Value, "pin", translate("SIM PIN"))
|
||||||
|
pin:depends(enabled, true)
|
||||||
|
pin.default = uci:get('gluon', 'cellular', 'pin')
|
||||||
|
|
||||||
|
local apn = s:option(Value, "apn", translate("APN"))
|
||||||
|
apn:depends(enabled, true)
|
||||||
|
apn.default = uci:get('gluon', 'cellular', 'apn')
|
||||||
|
|
||||||
|
local pdptype = s:option(ListValue, "type", translate("Type"))
|
||||||
|
pdptype:depends(enabled, true)
|
||||||
|
pdptype:value("IP", translate("IPv4"))
|
||||||
|
pdptype:value("IPV6", translate("IPv6"))
|
||||||
|
pdptype:value("IPV4V6", translate("IPv4/IPv6"))
|
||||||
|
pdptype.default = uci:get('gluon', 'cellular', 'pdptype') or "IP"
|
||||||
|
|
||||||
|
local username = s:option(Value, "username", translate("Username"))
|
||||||
|
username:depends(enabled, true)
|
||||||
|
username.default = uci:get('gluon', 'cellular', 'username')
|
||||||
|
|
||||||
|
local password = s:option(Value, "password", translate("Password"))
|
||||||
|
password:depends(enabled, true)
|
||||||
|
password.default = uci:get('gluon', 'cellular', 'password')
|
||||||
|
|
||||||
|
function f:write()
|
||||||
|
local cellular_enabled = false
|
||||||
|
if enabled.data then
|
||||||
|
cellular_enabled = true
|
||||||
|
end
|
||||||
|
|
||||||
|
uci:section('gluon', 'cellular', 'cellular', {
|
||||||
|
enabled = cellular_enabled,
|
||||||
|
apn = apn.data,
|
||||||
|
pdptype = pdptype.data,
|
||||||
|
pin = pin.data,
|
||||||
|
username = username.data,
|
||||||
|
password = password.data,
|
||||||
|
})
|
||||||
|
|
||||||
|
uci:commit('gluon')
|
||||||
|
end
|
||||||
|
|
||||||
|
return f
|
Loading…
Reference in New Issue
Block a user