'use strict'; 'require uci'; 'require form'; 'require network'; network.registerPatternVirtual(/^l2tp-.+$/); return network.registerProtocol('l2tp', { getI18n: function() { return _('L2TP'); }, getIfname: function() { return this._ubus('l3_device') || 'l2tp-%s'.format(this.sid); }, getOpkgPackage: function() { return 'xl2tpd'; }, isFloating: function() { return true; }, isVirtual: function() { return true; }, getDevices: function() { return null; }, containsDevice: function(ifname) { return (network.getIfnameOf(ifname) == this.getIfname()); }, renderFormOptions: function(s) { var dev = this.getL3Device() || this.getDevice(), o; o = s.taboption('general', form.Value, 'server', _('L2TP Server')); o.datatype = 'or(host(1), hostport(1))'; s.taboption('general', form.Value, 'username', _('PAP/CHAP username')); o = s.taboption('general', form.Value, 'password', _('PAP/CHAP password')); o.password = true; if (L.hasSystemFeature('ipv6')) { o = s.taboption('advanced', form.ListValue, 'ipv6', _('Obtain IPv6-Address'), _('Enable IPv6 negotiation on the PPP link')); o.value('auto', _('Automatic')); o.value('0', _('Disabled')); o.value('1', _('Manual')); o.default = 'auto'; } o = s.taboption('advanced', form.Flag, 'defaultroute', _('Use default gateway'), _('If unchecked, no default route is configured')); o.default = o.enabled; o = s.taboption('advanced', form.Flag, 'peerdns', _('Use DNS servers advertised by peer'), _('If unchecked, the advertised DNS server addresses are ignored')); o.default = o.enabled; o = s.taboption('advanced', form.DynamicList, 'dns', _('Use custom DNS servers')); o.depends('peerdns', '0'); o.datatype = 'ipaddr'; o.cast = 'string'; o = s.taboption('advanced', form.Value, 'metric', _('Use gateway metric')); o.placeholder = '0'; o.datatype = 'uinteger'; o = s.taboption('advanced', form.Value, 'mtu', _('Override MTU')); o.placeholder = dev ? (dev.getMTU() || '1500') : '1500'; o.datatype = 'max(9200)'; } });