'use strict'; 'require view'; 'require form'; 'require tools.widgets as widgets'; return view.extend({ render: function() { let m, s, o; m = new form.Map('bcp38', _('BCP38'), _('This function blocks packets with private address destinations ' + 'from going out onto the internet as per %s'.format('BCP 38') + '
' + _('For IPv6, only source specific default routes are installed, so ' + 'no BCP38 firewall routes are needed.'))); s = m.section(form.TypedSection, 'bcp38', _('BCP38 config')); s.anonymous = true; o = s.option(form.Flag, 'enabled', _('Enable')); o.default = '0'; o.rmempty = false; o = s.option(form.Flag, 'detect_upstream', _('Auto-detect upstream IP'), _('Automatically attempt to detect whether the upstream IP ' + 'will be blocked by the configuration, adding an exception if so. ' + 'If this does not work correctly, you can add exceptions manually below.')); o.rmempty = false; o = s.option(widgets.DeviceSelect, 'interface', _('Interface name'), _('Interface to apply the blocking to (should be the upstream WAN interface).')); o.modalonly = true; o.noaliases = true; o.multiple = false; o.rmempty = false; o = s.option(form.DynamicList, 'match', _('Blocked IP ranges')); o.datatype = 'ip4addr'; o = s.option(form.DynamicList, 'nomatch', _('Allowed IP ranges'), _('Takes precedence over blocked ranges. ' + 'Use to whitelist your upstream network if you\'re behind a double NAT ' + 'and the auto-detection doesn\'t work.')); o.datatype = 'ip4addr'; return m.render(); }, });