58a151de0856d2e24761b44fafaddf345d38fcf1
[oweals/luci.git] / modules / luci-mod-network / htdocs / luci-static / resources / view / network / routes.js
1 'use strict';
2 'require view';
3 'require form';
4 'require network';
5 'require tools.widgets as widgets';
6
7 return view.extend({
8         load: function() {
9                 return network.getDevices();
10         },
11
12         render: function(netdevs) {
13                 var m, s, o;
14
15                 m = new form.Map('network', _('Routes'), _('Routes specify over which interface and gateway a certain host or network can be reached.'));
16                 m.tabbed = true;
17
18                 for (var i = 4; i <= 6; i += 2) {
19                         s = m.section(form.GridSection, (i == 4) ? 'route' : 'route6', (i == 4) ? _('Static IPv4 Routes') : _('Static IPv6 Routes'));
20                         s.anonymous = true;
21                         s.addremove = true;
22                         s.sortable = true;
23
24                         s.tab('general', _('General Settings'));
25                         s.tab('advanced', _('Advanced Settings'));
26
27                         o = s.taboption('general', widgets.NetworkSelect, 'interface', _('Interface'));
28                         o.rmempty = false;
29                         o.nocreate = true;
30
31                         o = s.taboption('general', form.Value, 'target', _('Target'), (i == 4) ? _('Host-<abbr title="Internet Protocol Address">IP</abbr> or Network') : _('<abbr title="Internet Protocol Version 6">IPv6</abbr>-Address or Network (CIDR)'));
32                         o.datatype = (i == 4) ? 'ip4addr' : 'ip6addr';
33                         o.rmempty = false;
34
35                         if (i == 4) {
36                                 o = s.taboption('general', form.Value, 'netmask', _('<abbr title="Internet Protocol Version 4">IPv4</abbr>-Netmask'), _('if target is a network'));
37                                 o.placeholder = '255.255.255.255';
38                                 o.datatype = 'ip4addr';
39                                 o.rmempty = true;
40                         }
41
42                         o = s.taboption('general', form.Value, 'gateway', (i == 4) ? _('<abbr title="Internet Protocol Version 4">IPv4</abbr>-Gateway') : _('<abbr title="Internet Protocol Version 6">IPv6</abbr>-Gateway'));
43                         o.datatype = (i == 4) ? 'ip4addr' : 'ip6addr';
44                         o.rmempty = true;
45
46                         o = s.taboption('advanced', form.Value, 'metric', _('Metric'));
47                         o.placeholder = 0;
48                         o.datatype = (i == 4) ? 'range(0,255)' : 'range(0,65535)';
49                         o.rmempty = true;
50                         o.textvalue = function(section_id) {
51                                 return this.cfgvalue(section_id) || 0;
52                         };
53
54                         o = s.taboption('advanced', form.Value, 'mtu', _('MTU'));
55                         o.placeholder = 1500;
56                         o.datatype = 'range(64,9000)';
57                         o.rmempty = true;
58                         o.modalonly = true;
59
60                         o = s.taboption('advanced', form.ListValue, 'type', _('Route type'));
61                         o.value('', 'unicast');
62                         o.value('local');
63                         o.value('broadcast');
64                         o.value('multicast');
65                         o.value('unreachable');
66                         o.value('prohibit');
67                         o.value('blackhole');
68                         o.value('anycast');
69                         o.default = '';
70                         o.rmempty = true;
71                         o.modalonly = true;
72
73                         o = s.taboption('advanced', form.Value, 'table', _('Route table'));
74                         o.value('local', 'local (255)');
75                         o.value('main', 'main (254)');
76                         o.value('default', 'default (253)');
77                         o.rmempty = true;
78                         o.modalonly = true;
79                         o.cfgvalue = function(section_id) {
80                                 var cfgvalue = this.super('cfgvalue', [section_id]);
81                                 return cfgvalue || 'main';
82                         };
83
84                         o = s.taboption('advanced', form.Value, 'source', _('Source Address'));
85                         o.placeholder = E('em', _('automatic'));
86                         for (var j = 0; j < netdevs.length; j++) {
87                                 var addrs = netdevs[j].getIPAddrs();
88                                 for (var k = 0; k < addrs.length; k++)
89                                         o.value(addrs[k].split('/')[0]);
90                         }
91                         o.datatype = (i == 4) ? 'ip4addr' : 'ip6addr';
92                         o.default = '';
93                         o.rmempty = true;
94                         o.modalonly = true;
95
96                         o = s.taboption('advanced', form.Flag, 'onlink', _('On-Link route'));
97                         o.default = o.disabled;
98                         o.rmempty = true;
99                 }
100
101                 return m.render();
102         }
103 });