},
transformHostHints: function(family, hosts) {
- var choice_values = [], choice_labels = {};
+ var choice_values = [],
+ choice_labels = {},
+ ip6addrs = {},
+ ipaddrs = {};
+
+ for (var mac in hosts) {
+ L.toArray(hosts[mac].ipaddrs).forEach(function(ip) {
+ ipaddrs[ip] = mac;
+ });
+
+ L.toArray(hosts[mac].ip6addrs).forEach(function(ip) {
+ ip6addrs[ip] = mac;
+ });
+ }
if (!family || family == 'ipv4') {
- L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
- var val = hosts[mac].ipv4,
- txt = hosts[mac].name || mac;
+ L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ip) {
+ var val = ip,
+ txt = hosts[ipaddrs[ip]].name || ipaddrs[ip];
choice_values.push(val);
choice_labels[val] = E([], [ val, ' (', E('strong', {}, [txt]), ')' ]);
}
if (!family || family == 'ipv6') {
- L.sortedKeys(hosts, 'ipv6', 'addr').forEach(function(mac) {
- var val = hosts[mac].ipv6,
- txt = hosts[mac].name || mac;
+ L.sortedKeys(ip6addrs, null, 'addr').forEach(function(ip) {
+ var val = ip,
+ txt = hosts[ip6addrs[ip]].name || ip6addrs[ip];
choice_values.push(val);
choice_labels[val] = E([], [ val, ' (', E('strong', {}, [txt]), ')' ]);
L.sortedKeys(hosts).forEach(function(mac) {
o.value(mac, E([], [ mac, ' (', E('strong', {}, [
- hosts[mac].name || hosts[mac].ipv4 || hosts[mac].ipv6 || '?'
+ hosts[mac].name ||
+ (hosts[mac].ipaddrs && hosts[mac].ipaddrs.length && hosts[mac].ipaddrs[0]) ||
+ (hosts[mac].ip6addrs && hosts[mac].ip6addrs.length && hosts[mac].ip6addrs[0]) || '?'
]), ')' ]));
});
o.rmempty = false;
- Object.keys(hosts).sort().forEach(function(mac) {
- o.value(mac, E([], [ mac, ' (', E('strong', [hosts[mac].name || hosts[mac].ipv4 || hosts[mac].ipv6 || '?']), ')' ]));
+ L.sortedKeys(hosts).forEach(function(mac) {
+ o.value(mac, E([], [ mac, ' (', E('strong', [
+ hosts[mac].name ||
+ L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0] ||
+ L.toArray(hosts[mac].ip6addrs || hosts[mac].ipv6)[0] ||
+ '?'
+ ]), ')' ]));
});
if (has_ewk) {
* the corresponding host.
*/
getHostnameByMACAddr: function(mac) {
- return this.hosts[mac] ? this.hosts[mac].name : null;
+ return this.hosts[mac]
+ ? (this.hosts[mac].name || null)
+ : null;
},
/**
* the corresponding host.
*/
getIPAddrByMACAddr: function(mac) {
- return this.hosts[mac] ? this.hosts[mac].ipv4 : null;
+ return this.hosts[mac]
+ ? (L.toArray(this.hosts[mac].ipaddrs || this.hosts[mac].ipv4)[0] || null)
+ : null;
},
/**
* the corresponding host.
*/
getIP6AddrByMACAddr: function(mac) {
- return this.hosts[mac] ? this.hosts[mac].ipv6 : null;
+ return this.hosts[mac]
+ ? (L.toArray(this.hosts[mac].ip6addrs || this.hosts[mac].ipv6)[0] || null)
+ : null;
},
/**
* the corresponding host.
*/
getHostnameByIPAddr: function(ipaddr) {
- for (var mac in this.hosts)
- if (this.hosts[mac].ipv4 == ipaddr && this.hosts[mac].name != null)
- return this.hosts[mac].name;
+ for (var mac in this.hosts) {
+ if (this.hosts[mac].name == null)
+ continue;
+
+ var addrs = L.toArray(this.hosts[mac].ipaddrs || this.hosts[mac].ipv4);
+
+ for (var i = 0; i < addrs.length; i++)
+ if (addrs[i] == ipaddr)
+ return this.hosts[mac].name;
+ }
+
return null;
},
* the corresponding host.
*/
getMACAddrByIPAddr: function(ipaddr) {
- for (var mac in this.hosts)
- if (this.hosts[mac].ipv4 == ipaddr)
- return mac;
+ for (var mac in this.hosts) {
+ var addrs = L.toArray(this.hosts[mac].ipaddrs || this.hosts[mac].ipv4);
+
+ for (var i = 0; i < addrs.length; i++)
+ if (addrs[i] == ipaddr)
+ return mac;
+ }
+
return null;
},
/**
* Lookup the hostname associated with the given IPv6 address.
*
- * @param {string} ipaddr
+ * @param {string} ip6addr
* The IPv6 address to lookup.
*
* @returns {null|string}
* the corresponding host.
*/
getHostnameByIP6Addr: function(ip6addr) {
- for (var mac in this.hosts)
- if (this.hosts[mac].ipv6 == ip6addr && this.hosts[mac].name != null)
- return this.hosts[mac].name;
+ for (var mac in this.hosts) {
+ if (this.hosts[mac].name == null)
+ continue;
+
+ var addrs = L.toArray(this.hosts[mac].ip6addrs || this.hosts[mac].ipv6);
+
+ for (var i = 0; i < addrs.length; i++)
+ if (addrs[i] == ip6addr)
+ return this.hosts[mac].name;
+ }
+
return null;
},
/**
* Lookup the MAC address associated with the given IPv6 address.
*
- * @param {string} ipaddr
+ * @param {string} ip6addr
* The IPv6 address to lookup.
*
* @returns {null|string}
* the corresponding host.
*/
getMACAddrByIP6Addr: function(ip6addr) {
- for (var mac in this.hosts)
- if (this.hosts[mac].ipv6 == ip6addr)
- return mac;
+ for (var mac in this.hosts) {
+ var addrs = L.toArray(this.hosts[mac].ip6addrs || this.hosts[mac].ipv6);
+
+ for (var i = 0; i < addrs.length; i++)
+ if (addrs[i] == ip6addr)
+ return mac;
+ }
+
return null;
},
*/
getMACHints: function(preferIp6) {
var rv = [];
+
for (var mac in this.hosts) {
var hint = this.hosts[mac].name ||
- this.hosts[mac][preferIp6 ? 'ipv6' : 'ipv4'] ||
- this.hosts[mac][preferIp6 ? 'ipv4' : 'ipv6'];
+ L.toArray(this.hosts[mac][preferIp6 ? 'ip6addrs' : 'ipaddrs'] || this.hosts[mac][preferIp6 ? 'ipv6' : 'ipv4'])[0] ||
+ L.toArray(this.hosts[mac][preferIp6 ? 'ipaddrs' : 'ip6addrs'] || this.hosts[mac][preferIp6 ? 'ipv4' : 'ipv6'])[0];
rv.push([mac, hint]);
}
+
return rv.sort(function(a, b) { return a[0] > b[0] });
}
});
node.addEventListener('cbi-dropdown-change', L.bind(function(ipopt, section_id, ev) {
var mac = ev.detail.value.value;
- if (mac == null || mac == '' || !hosts[mac] || !hosts[mac].ipv4)
+ if (mac == null || mac == '' || !hosts[mac])
+ return;
+
+ var iphint = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0];
+ if (iphint == null)
return;
var ip = ipopt.formvalue(section_id);
var node = ipopt.map.findElement('id', ipopt.cbid(section_id));
if (node)
- dom.callClassMethod(node, 'setValue', hosts[mac].ipv4);
+ dom.callClassMethod(node, 'setValue', iphint);
}, this, ipopt, section_id));
return node;
};
Object.keys(hosts).forEach(function(mac) {
- var hint = hosts[mac].name || hosts[mac].ipv4;
+ var hint = hosts[mac].name || L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0];
so.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac);
});
return true;
};
+
+ var ipaddrs = {};
+
Object.keys(hosts).forEach(function(mac) {
- if (hosts[mac].ipv4) {
- var hint = hosts[mac].name;
- so.value(hosts[mac].ipv4, hint ? '%s (%s)'.format(hosts[mac].ipv4, hint) : hosts[mac].ipv4);
- }
+ 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);
});
so = ss.option(form.Value, 'leasetime', _('Lease time'));
exp = '%t'.format(lease.expires);
var hint = lease.macaddr ? hosts[lease.macaddr] : null,
- name = hint ? (hint.name || hint.ipv4 || hint.ipv6) : null,
+ name = hint ? (hint.name || L.toArray(hint.ipaddrs || hint.ipv4)[0] || L.toArray(hint.ip6addrs || hint.ipv6)[0]) : null,
host = null;
if (name && lease.hostname && lease.hostname != name && lease.ip6addr != name)
o = s.option(form.Value, 'ip', _('IP address'));
o.datatype = 'ipaddr';
o.rmempty = true;
- L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
- o.value(hosts[mac].ipv4, '%s (%s)'.format(
- hosts[mac].ipv4,
- hosts[mac].name || mac
- ));
+
+ 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();