s.tab('tftp', _('TFTP Settings'));
s.tab('advanced', _('Advanced Settings'));
s.tab('leases', _('Static Leases'));
+ s.tab('hosts', _('Hostnames'));
s.taboption('general', form.Flag, 'domainneeded',
_('Domain required'),
_('Prevent listening on these interfaces.'));
o.optional = true;
+ o = s.taboption('hosts', form.SectionValue, '__hosts__', form.GridSection, 'domain', null,
+ _('Hostnames are used to bind a domain name to an IP address. This setting is redundant for hostnames already configured with static leases, but it can be useful to rebind an FQDN.'));
+
+ ss = o.subsection;
+
+ ss.addremove = true;
+ ss.anonymous = true;
+ ss.sortable = true;
+
+ so = ss.option(form.Value, 'name', _('Hostname'));
+ so.datatype = 'hostname';
+ so.rmempty = true;
+
+ so = ss.option(form.Value, 'ip', _('IP address'));
+ so.datatype = 'ipaddr';
+ so.rmempty = true;
+
+ var ipaddrs = {};
+
+ Object.keys(hosts).forEach(function(mac) {
+ var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4);
+
+ for (var i = 0; i < addrs.length; i++)
+ ipaddrs[addrs[i]] = hosts[mac].name || mac;
+ });
+
+ L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
+ so.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
+ });
+
o = s.taboption('leases', form.SectionValue, '__leases__', form.GridSection, 'host', null,
_('Static leases are used to assign fixed IP addresses and symbolic hostnames to DHCP clients. They are also required for non-dynamic interface configurations where only hosts with a corresponding lease are served.') + '<br />' +
_('Use the <em>Add</em> Button to add a new lease entry. The <em>MAC address</em> identifies the host, the <em>IPv4 address</em> specifies the fixed address to use, and the <em>Hostname</em> is assigned as a symbolic name to the requesting host. The optional <em>Lease time</em> can be used to set non-standard host-specific lease time, e.g. 12h, 3d or infinite.'));
return _('The IP address is outside of any DHCP pool address range');
};
- var ipaddrs = {};
-
- Object.keys(hosts).forEach(function(mac) {
- var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4);
-
- for (var i = 0; i < addrs.length; i++)
- ipaddrs[addrs[i]] = hosts[mac].name;
- });
-
L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
so.value(ipv4, ipaddrs[ipv4] ? '%s (%s)'.format(ipv4, ipaddrs[ipv4]) : ipv4);
});
+++ /dev/null
-'use strict';
-'require view';
-'require rpc';
-'require form';
-
-return view.extend({
- callHostHints: rpc.declare({
- object: 'luci-rpc',
- method: 'getHostHints',
- expect: { '': {} }
- }),
-
- load: function() {
- return this.callHostHints();
- },
-
- render: function(hosts) {
- var m, s, o;
-
- m = new form.Map('dhcp', _('Hostnames'));
-
- s = m.section(form.GridSection, 'domain', _('Host entries'));
- s.addremove = true;
- s.anonymous = true;
- s.sortable = true;
-
- o = s.option(form.Value, 'name', _('Hostname'));
- o.datatype = 'hostname';
- o.rmempty = true;
-
- o = s.option(form.Value, 'ip', _('IP address'));
- o.datatype = 'ipaddr';
- o.rmempty = true;
-
- var ipaddrs = {};
-
- Object.keys(hosts).forEach(function(mac) {
- var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4);
-
- for (var i = 0; i < addrs.length; i++)
- ipaddrs[addrs[i]] = hosts[mac].name || mac;
- });
-
- L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
- o.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
- });
-
- return m.render();
- }
-});