mirror of
https://github.com/openwrt/luci.git
synced 2025-12-21 19:14:34 +04:00
luci-base: fix static proto trace-back when a netmask is set but no IP is set
A trace-back is produced when a netmask is set, and the contents of the IPv4 address field are removed or otherwise unset. Signed-off-by: Paul Donald <newtwen+github@gmail.com>
This commit is contained in:
@@ -8,26 +8,38 @@ function isCIDR(value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function calculateBroadcast(s, use_cfgvalue) {
|
function calculateBroadcast(s, use_cfgvalue) {
|
||||||
var readfn = use_cfgvalue ? 'cfgvalue' : 'formvalue',
|
const readfn = use_cfgvalue ? 'cfgvalue' : 'formvalue';
|
||||||
addropt = s.children.filter(function(o) { return o.option == 'ipaddr'})[0],
|
const addropt = s.children.find(o => o.option == 'ipaddr');
|
||||||
addrvals = addropt ? L.toArray(addropt[readfn](s.section)) : [],
|
const addrvals = addropt ? L.toArray(addropt[readfn](s.section)) : [];
|
||||||
maskopt = s.children.filter(function(o) { return o.option == 'netmask'})[0],
|
const maskopt = s.children.find(o => o.option == 'netmask');
|
||||||
maskval = maskopt ? maskopt[readfn](s.section) : null,
|
const maskval = maskopt ? maskopt[readfn](s.section) : null;
|
||||||
firstsubnet = maskval ? addrvals[0] + '/' + maskval : addrvals.filter(function(a) { return a.indexOf('/') > 0 })[0];
|
let firstsubnet = null;
|
||||||
|
|
||||||
if (firstsubnet == null)
|
/* only form a subnet if both parts exist */
|
||||||
|
if (addrvals.length && addrvals[0] && maskval)
|
||||||
|
firstsubnet = addrvals[0] + '/' + maskval;
|
||||||
|
else if (addrvals.length)
|
||||||
|
firstsubnet = addrvals.find(a => a.indexOf('/') > 0);
|
||||||
|
|
||||||
|
if (!firstsubnet)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var addr_mask = firstsubnet.split('/'),
|
const [addr_str, mask_str] = firstsubnet.split('/');
|
||||||
addr = validation.parseIPv4(addr_mask[0]),
|
const addr = validation.parseIPv4(addr_str);
|
||||||
mask = addr_mask[1];
|
if (!addr)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
let mask = mask_str;
|
||||||
|
|
||||||
if (!isNaN(mask))
|
if (!isNaN(mask))
|
||||||
mask = validation.parseIPv4(network.prefixToMask(+mask));
|
mask = validation.parseIPv4(network.prefixToMask(+mask));
|
||||||
else
|
else
|
||||||
mask = validation.parseIPv4(mask);
|
mask = validation.parseIPv4(mask);
|
||||||
|
|
||||||
var bc = [
|
if (!mask)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
const bc = [
|
||||||
addr[0] | (~mask[0] >>> 0 & 255),
|
addr[0] | (~mask[0] >>> 0 & 255),
|
||||||
addr[1] | (~mask[1] >>> 0 & 255),
|
addr[1] | (~mask[1] >>> 0 & 255),
|
||||||
addr[2] | (~mask[2] >>> 0 & 255),
|
addr[2] | (~mask[2] >>> 0 & 255),
|
||||||
|
|||||||
Reference in New Issue
Block a user