function CheckNumber(Value, MinRange, MaxRange) { var t = parseInt(Value, 10); if (isNaN(t) == true) { return false; } if (t < MinRange || t > MaxRange) { return false; } return true; } function IsIPv6AddressUshortValid(Short) { /* 必须小于四 */ if (Short.length > 4) { return false; } /* 每一位必须合法 */ for (var i = 0; i < Short.length; i++) { var Char = Short.charAt(i); if (!((Char >= '0' && Char <= '9') || (Char >= 'a' && Char <= 'f') || (Char >= 'A' && Char <= 'F'))) { return false; } } return true; } function IsStandardIPv6AddressValid(Address) { /* :不能出现在开头和结尾 */ if ((Address.charAt(0) == ':') || (Address.charAt(Address.length-1) == ':')) { return false; } /* 最多只允许有7个: */ List = Address.split(":"); if (List.length > 8) { return false; } /* 每个USHORT必须是合法的 */ for (var i = 0; i < List.length; i++) { if (false == IsIPv6AddressUshortValid(List[i])) { return false; } } return true; } function IsIPv6AddressValid(Address) { /* ::则直接返回 */ if (Address == "::") { return true; } /* 长度为0则不合法 */ if (Address.length < 3) { return false; } /* 只允许有一个:: */ var List = Address.split("::"); if (List.length > 2) { return false; } /* 判断:的个数 */ if (List.length == 1) if (Address.split(":").length != 8) { return false; } if (List.length > 1) if (Address.split(":").length > 8) { return false; } /* 判断每个小的IP地址是否合法 */ List = Address.split("::"); for (var i = 0; i < List.length; i++) { if (false == IsStandardIPv6AddressValid(List[i])) { return false; } } return true; } function IsIPv6ZeroAddress(Address) { for (var i = 0; i < Address.length; i++) { if (Address.charAt(i) != '0' && Address.charAt(i) != ':') { return false; } } return true; } function IsIPv6LoopBackAddress(Address) { if (Address.substr(Address.length-1,1) == "1") { if (IsIPv6ZeroAddress(Address.substr(0, Address.length-1)+"0") == true) { return true; } } return false; } function isValidVenderClassID(val) { for ( var i = 0 ; i < val.length ; i++ ) { var ch = val.charAt(i); if (ch == '&' || ch == '*' || ch == '(' || ch == ')' || ch == '`' || ch == ';' || ch == '\"' || ch == '\'' || ch == '<' || ch == '>' || ch == '#' || ch == '|') { return ch; } } return ''; } function SearchTr069WanInstanceId() { var CurWanService = ''; var Wan = GetWanList(); for(var i = 0; i < Wan.length; i++) { CurWanService = Wan[i].ServiceList; if (CurWanService.indexOf("TR069") >=0 ) { return Wan[i].domain; } } return ""; } /*以下代码完成WAN的检测和提交Form参数的填充*****************/ function GetRouteWanCount() { var WanList = GetWanList(); var Count = 0; for (var i = 0; i < WanList.length; i++) { if (WanList[i].Mode == "IP_Routed") { Count++; } } return Count; } function CheckWan(Wan) { /* 在添加的时候需要判断路由wan规格 */ if ((Wan.domain == null || (Wan.domain != null && Wan.domain.length < 10)) && GetRouteWanCount() >= 4 && Wan.Mode == "IP_Routed") { AlertMsg("RouteWanIsFull"); return false; } /*判断VlanID是否合法,以及是否已被使用*/ var VlanID = Wan.VlanId; if (Wan.EnableVlan == "1") if ( "" == VlanID) { AlertMsg("VlanIdMustBeInput"); return false; } /* 使能vlan,才检查vlan是否合法(1~4094) */ if ( "1" == Wan.EnableVlan) { if ((isNaN(Wan.VlanId) || parseInt(Wan.VlanId) > 4094 || parseInt(Wan.VlanId) < 1) && (('PPPoE_Bridged' == Wan.Mode) || ('IP_Bridged' == Wan.Mode))) { AlertMsg("VlanIdRang1"); return false; } if ((isNaN(Wan.VlanId) || parseInt(Wan.VlanId) > 4094 || parseInt(Wan.VlanId) < 1) && ('IP_Routed' == Wan.Mode)) { AlertMsg("VlanIdRang2"); return false; } } if ( Wan.VlanId.length > 1 && Wan.VlanId.charAt(0) == '0' ) { AlertMsg("VlanIdFirstChar"); return false; } for (var iVlan=0; iVlan < GetWanList().length; iVlan++ ) { if (GetWanList()[iVlan].domain != Wan.domain && GetWanList()[iVlan].VlanId == parseInt(((Wan.VlanId=="")?"0":Wan.VlanId))) { AlertMsg("VlanIdIsUserd"); return false; } } /*判断Multi cast VlanID是否合法,以及是否已被使用*/ var IPv4MultiVlanID = Wan.IPv4WanMVlanId; if ( "" != IPv4MultiVlanID) { if (isNaN(IPv4MultiVlanID) || parseInt(IPv4MultiVlanID) > 4094 || parseInt(IPv4MultiVlanID) < 0) { AlertMsg("MVlanIdRang1"); return false; } if ( IPv4MultiVlanID.length > 1 && IPv4MultiVlanID.charAt(0) == '0' ) { AlertMsg("MVlanIdFirstChar"); return false; } } /*如果是bridge类型,则无需后面对Route参数的校验,直接返回*/ if('IP_Bridged' == Wan.Mode) { return true; } /* 新添加WAN口 */ if ("ADD" == EditFlag) { /* 当前要创建TR069 WAN口,判断是否已经创建了TR069 WAN,如果是则返回失败 */ if('IP_Routed' == Wan.Mode) { var addWanService = Wan.ServiceList; var currInstanceId = SearchTr069WanInstanceId(); if(currInstanceId != "" && currInstanceId != Wan.domain && addWanService.indexOf("TR069") >= 0) { AlertMsg("OnlyOneTr069Wan"); return false; } } } /*校验ipgetmode时static时,各参数情况*/ if(('1' == Wan.IPv4Enable)&&('Static' == Wan.IPv4AddressMode)&&(Wan.IPv4SubnetMask == '')) { AlertMsg("SubMaskInput"); return false; } if ('1' == Wan.IPv4Enable && Wan.IPv4AddressMode == 'Static' && (isValidIpAddress(Wan.IPv4IPAddress) == false || isAbcIpAddress(Wan.IPv4IPAddress) == false)) { AlertMsg("IPAddressInvalid"); return false; } if ('1' == Wan.IPv4Enable && Wan.IPv4AddressMode == 'Static' && isValidSubnetMask(Wan.IPv4SubnetMask) == false ) { AlertMsg("SubMaskInvalid"); return false; } if ('1' == Wan.IPv4Enable && Wan.IPv4AddressMode == 'Static' && Wan.IPv4PrimaryDNS != '' && (isValidIpAddress(Wan.IPv4PrimaryDNS) == false || isAbcIpAddress(Wan.IPv4PrimaryDNS) == false)) { AlertMsg("FirstDnsInvalid"); return false; } if ('1' == Wan.IPv4Enable && Wan.IPv4AddressMode == 'Static' && Wan.IPv4SecondaryDNS != '' && (isValidIpAddress(Wan.IPv4SecondaryDNS) == false || isAbcIpAddress(Wan.IPv4SecondaryDNS) == false)) { AlertMsg("SecondDnsInvalid"); return false; } if ('1' == Wan.IPv4Enable && Wan.IPv4AddressMode == 'Static' && (isValidIpAddress(Wan.IPv4Gateway) == false || isAbcIpAddress(Wan.IPv4Gateway) == false)) { AlertMsg("WanGateWayInvalid"); return false; } if ('1' == Wan.IPv4Enable && Wan.IPv4AddressMode == 'Static' && (Wan.IPv4Gateway == Wan.IPv4IPAddress)) { AlertMsg("IPAddressSameAsGateWay"); return false; } if('1' == Wan.IPv4Enable && Wan.IPv4AddressMode == 'Static' && false==isSameSubNet(Wan.IPv4IPAddress, Wan.IPv4SubnetMask, Wan.IPv4Gateway, Wan.IPv4SubnetMask)) { AlertMsg("IPAddressNotInGateWay"); return false; } if('1' == Wan.IPv4Enable && Wan.IPv4AddressMode == 'Static') { var addr = IpAddress2DecNum(Wan.IPv4IPAddress); var mask = SubnetAddress2DecNum(Wan.IPv4SubnetMask); var gwaddr = IpAddress2DecNum(Wan.IPv4Gateway); if ( (addr & (~mask)) == (~mask) ) { AlertMsg("WANIPAddressInvalid"); return false; } if ( (addr & (~mask)) == 0 ) { AlertMsg("WANIPAddressInvalid"); return false; } if ( (gwaddr & (~mask)) == (~mask) ) { AlertMsg("WANGateWayIPAddressInvalid"); return false; } if ( (gwaddr & (~mask)) == 0 ) { AlertMsg("WANGateWayIPAddressInvalid"); return false; } } if ('1' == Wan.IPv4Enable && 'Static' == Wan.IPv4AddressMode) { for (var iIP=0; iIP < GetWanList().length; iIP++) { if (GetWanList()[iIP].domain != Wan.domain && GetWanList()[iIP].IPv4IPAddress == Wan.IPv4IPAddress) { AlertMsg("IPAddressIsUserd"); return false; } } } /*校验pppop时,密码不能为空*/ if ('1' == Wan.IPv4Enable && "1" != Wan.IPv6Enable && 'PPPoE' == Wan.EncapMode) { var usr = Wan.UserName; var psw = Wan.Password; var DiaMode = Wan.IPv4DialMode; var Idletime = Wan.IPv4DialIdleTime; /* if ( "" == usr.value ) { AlertMsg("PPPUserNameInput"); return false; } else if ("" == psw.value) { AlertMsg("PPPPasswordInput"); return false; } */ if (DiaMode == "OnDemand") { if (!(Idletime <= 86400)) { AlertMsg("DiaIdleTime1"); return false; } } } if ('1' == Wan.IPv4Enable && "DHCP" == Wan.IPv4AddressMode) { if ('' != isValidVenderClassID(Wan.IPv4VendorId)) { AlertMsg("VendorIdInvalid"); return false; } } /* 校验IPV6前缀 */ if (Wan.IPv6Enable == "1" && Wan.IPv6PrefixMode == "Static") { if (Wan.IPv6StaticPrefix.length == 0) { AlertMsg("IPv6PrefixEmpty"); return false; } var List = Wan.IPv6StaticPrefix.split("/"); if (List.length != 2) { AlertMsg("IPv6PrefixInvalid"); return false; } if (parseInt(List[1]) < 1 || isNaN(parseInt(List[1])) == true || parseInt(List[1]) > 64) { AlertMsg("IPv6PrefixInvalid"); return false; } if (IsIPv6AddressValid(List[0]) == false) { AlertMsg("IPv6PrefixInvalid"); return false; } if ( IsIPv6ZeroAddress(List[0]) == true) { AlertMsg("IPv6PrefixInvalid"); return false; } if (parseInt(List[0].split(":")[0], 16) >= parseInt("0xFF00", 16)) { AlertMsg("IPv6PrefixInvalid"); return false; } } /* 校验地址掩码 */ if (Wan.IPv6Enable == "1" && Wan.IPv6AddressMode == "AutoConfigured" && Wan.IPv6AddressStuff.length > 0) { var List = Wan.IPv6AddressStuff.split("/"); if (List.length != 2) { AlertMsg("IPv6PrefixMaskInvalid"); return false; } if (isNaN(parseInt(List[1])) == true || parseInt(List[1]) != 64) { AlertMsg("IPv6PrefixMaskInvalid"); return false; } if (IsIPv6AddressValid(List[0]) == false) { AlertMsg("IPv6PrefixMaskInvalid"); return false; } } /* 校验地址 */ if (Wan.IPv6Enable == "1" && Wan.IPv6AddressMode == "Static") { if (Wan.IPv6IPAddress.length == 0) { AlertMsg("IPv6AddressEmpty"); return false; } if (IsIPv6AddressValid(Wan.IPv6IPAddress) == false) { AlertMsg("IPv6AddressInvalid"); return false; } if (parseInt(Wan.IPv6IPAddress.split(":")[0], 16) >= parseInt("0xFF00", 16)) { AlertMsg("IPv6AddressInvalid"); return false; } if (IsIPv6ZeroAddress(Wan.IPv6IPAddress) == true) { AlertMsg("IPv6AddressInvalid"); return false; } if (IsIPv6LoopBackAddress(Wan.IPv6IPAddress) == true) { AlertMsg("IPv6AddressInvalid"); return false; } /* 校验DNS */ if (Wan.IPv6PrimaryDNS.length > 0 && IsIPv6AddressValid(Wan.IPv6PrimaryDNS) == false) { AlertMsg("IPv6FirstDnsInvalid"); return false; } if (Wan.IPv6SecondaryDNS.length > 0 && IsIPv6AddressValid(Wan.IPv6SecondaryDNS) == false) { AlertMsg("IPv6SecondDnsInvalid"); return false; } } /* 如果输入了IPv6的组播Vlan则就不应该输入错误 */ if (0 < Wan.IPv6WanMVlanId.length) { if (false == CheckNumber(Wan.IPv6WanMVlanId, 1, 4094)) { AlertMsg("IPv6MVlanRange"); return false; } } return true; }