ba673b4a0bf031c9379b96bd6141359818c01cce
[oweals/luci.git] / protocols / luci-proto-ncm / htdocs / luci-static / resources / protocol / ncm.js
1 'use strict';
2 'require rpc';
3 'require form';
4 'require network';
5
6 var callTTYDevices = rpc.declare({
7         object: 'luci',
8         method: 'getTTYDevices',
9         params: [ 'with_cdc', 'with_tts' ],
10         expect: { result: [] }
11 });
12
13 network.registerPatternVirtual(/^ncm-.+$/);
14 network.registerErrorCode('CONFIGURE_FAILED',  _('Configuration failed'));
15 network.registerErrorCode('DISCONNECT_FAILED', _('Disconnection attempt failed'));
16 network.registerErrorCode('FINALIZE_FAILED',   _('Finalizing failed'));
17 network.registerErrorCode('GETINFO_FAILED',    _('Modem information query failed'));
18 network.registerErrorCode('INITIALIZE_FAILED', _('Initialization failure'));
19 network.registerErrorCode('SETMODE_FAILED',    _('Setting operation mode failed'));
20 network.registerErrorCode('UNSUPPORTED_MODEM', _('Unsupported modem'));
21
22 return network.registerProtocol('ncm', {
23         getI18n: function() {
24                 return _('NCM');
25         },
26
27         getIfname: function() {
28                 return this._ubus('l3_device') || 'wan';
29         },
30
31         getOpkgPackage: function() {
32                 return 'comgt-ncm';
33         },
34
35         isFloating: function() {
36                 return true;
37         },
38
39         isVirtual: function() {
40                 return true;
41         },
42
43         getDevices: function() {
44                 return null;
45         },
46
47         containsDevice: function(ifname) {
48                 return (network.getIfnameOf(ifname) == this.getIfname());
49         },
50
51         renderFormOptions: function(s) {
52                 var o;
53
54                 o = s.taboption('general', form.Value, 'device', _('Modem device'));
55                 o.rmempty = false;
56                 o.load = function(section_id) {
57                         return callTTYDevices(true, false).then(L.bind(function(devices) {
58                                 if (Array.isArray(devices))
59                                         for (var i = 0; i < devices.length; i++)
60                                                 if (/(ttyUSB|cdc-wdm)/.test(devices[i]))
61                                                         this.value(devices[i]);
62
63                                 return form.Value.prototype.load.apply(this, [section_id]);
64                         }, this));
65                 };
66
67                 o = s.taboption('general', form.Value, 'service', _('Service Type'));
68                 o.value('', _('Modem default'));
69                 o.value('preferlte', _('Prefer LTE'));
70                 o.value('preferumts', _('Prefer UMTS'));
71                 o.value('lte', 'LTE');
72                 o.value('umts', 'UMTS/GPRS');
73                 o.value('gsm', _('GPRS only'));
74                 o.value('auto', _('auto'));
75
76                 o = s.taboption('general', form.ListValue, 'pdptype', _('IP Protocol'));
77                 o.default = 'IP';
78                 o.value('IP', _('IPv4'));
79                 o.value('IPV4V6', _('IPv4+IPv6'));
80                 o.value('IPV6', _('IPv6'));
81
82                 s.taboption('general', form.Value, 'apn', _('APN'));
83                 s.taboption('general', form.Value, 'pincode', _('PIN'));
84                 s.taboption('general', form.Value, 'username', _('PAP/CHAP username'));
85
86                 o = s.taboption('general', form.Value, 'password', _('PAP/CHAP password'));
87                 o.password = true;
88
89                 o = s.taboption('general', form.Value, 'dialnumber', _('Dial number'));
90                 o.placeholder = '*99***1#';
91
92                 if (L.hasSystemFeature('ipv6')) {
93                         o = s.taboption('advanced', form.ListValue, 'ipv6', _('Obtain IPv6-Address'));
94                         o.value('auto', _('Automatic'));
95                         o.value('0', _('Disabled'));
96                         o.value('1', _('Manual'));
97                         o.default = 'auto';
98                 }
99
100                 o = s.taboption('advanced', form.Value, 'delay', _('Modem init timeout'), _('Maximum amount of seconds to wait for the modem to become ready'));
101                 o.placeholder = '10';
102                 o.datatype    = 'min(1)';
103
104                 o = s.taboption('advanced', form.Flag, 'defaultroute', _('Default gateway'), _('If unchecked, no default route is configured'));
105                 o.default = o.enabled;
106
107                 o = s.taboption('advanced', form.Value, 'metric', _('Use gateway metric'));
108                 o.placeholder = '0';
109                 o.datatype    = 'uinteger';
110                 o.depends('defaultroute', '1');
111
112                 o = s.taboption('advanced', form.Flag, 'peerdns', _('Use DNS servers advertised by peer'), _('If unchecked, the advertised DNS server addresses are ignored'));
113                 o.default = o.enabled;
114
115                 o = s.taboption('advanced', form.DynamicList, 'dns', _('Use custom DNS servers'));
116                 o.depends('peerdns', '0');
117                 o.datatype = 'ipaddr';
118         }
119 });