Add IPv6 support
Split IPv4 and IPv6 calculations into different JS files to make them easier to understand. IDE decided to format HTML code and I left it as-is.
This commit is contained in:
		
							
								
								
									
										44
									
								
								calculations.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								calculations.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | function inet_ntoa(mode, addrint) { | ||||||
|  |     var fn = "inet_ntoa_" + mode; | ||||||
|  |     return window[fn](addrint); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function inet_aton(mode, addrint) { | ||||||
|  |     var fn = "inet_aton_" + mode; | ||||||
|  |     return window[fn](addrint); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function network_address(mode, addrint) { | ||||||
|  |     var fn = "network_address_" + mode; | ||||||
|  |     return window[fn](addrint); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_addresses(mode, addrint) { | ||||||
|  |     var fn = "subnet_addresses_" + mode; | ||||||
|  |     return window[fn](addrint); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_first_address_useable(mode, addrint) { | ||||||
|  |     var fn = "subnet_first_address_useable_" + mode; | ||||||
|  |     return window[fn](addrint); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_last_address_useable(mode, addrint) { | ||||||
|  |     var fn = "subnet_last_address_useable_" + mode; | ||||||
|  |     return window[fn](addrint); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_last_address(mode, subnet, mask) { | ||||||
|  |     var fn = "subnet_last_address_" + mode; | ||||||
|  |     return window[fn](mode, subnet, mask); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_netmask(mode, addrint) { | ||||||
|  |     var fn = "subnet_netmask_" + mode; | ||||||
|  |     return window[fn](addrint); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function num_hosts(mode, useableFirst, useableLast) { | ||||||
|  |     var fn = "num_hosts_" + mode; | ||||||
|  |     return window[fn](useableFirst, useableLast); | ||||||
|  | } | ||||||
							
								
								
									
										60
									
								
								calculations_4.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								calculations_4.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | function inet_ntoa_4(addrint) { | ||||||
|  |     return ( | ||||||
|  |         ((addrint >> 24) & 0xff) + | ||||||
|  |         "." + | ||||||
|  |         ((addrint >> 16) & 0xff) + | ||||||
|  |         "." + | ||||||
|  |         ((addrint >> 8) & 0xff) + | ||||||
|  |         "." + | ||||||
|  |         (addrint & 0xff) | ||||||
|  |     ); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | function inet_aton_4(addrstr) { | ||||||
|  |     var re = /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/; | ||||||
|  |     var res = re.exec(addrstr); | ||||||
|  |  | ||||||
|  |     if (res === null) { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for (var i = 1; i <= 4; i++) { | ||||||
|  |         if (res[i] < 0 || res[i] > 255) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return (res[1] << 24) | (res[2] << 16) | (res[3] << 8) | res[4]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function network_address_4(ip, mask) { | ||||||
|  |     var maskbits = 0; | ||||||
|  |     for (var i = 31 - mask; i >= 0; i--) { | ||||||
|  |         ip &= ~1 << i; | ||||||
|  |     } | ||||||
|  |     return ip; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_addresses_4(mask) { | ||||||
|  |     return 1 << (32 - mask); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_first_address_useable_4(addrint) { | ||||||
|  |     return addrint + 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_last_address_useable_4(addrint) { | ||||||
|  |     return addrint - 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_last_address_4(mode, subnet, mask) { | ||||||
|  |     return subnet + subnet_addresses(mode, mask) - 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_netmask_4(mask) { | ||||||
|  |     return network_address(4, 0xffffffff, mask); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function num_hosts_4(useableFirst, useableLast) { | ||||||
|  |     return 1 + useableLast - useableFirst; | ||||||
|  | } | ||||||
							
								
								
									
										79
									
								
								calculations_6.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								calculations_6.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  | function inet_ntoa_6(addrint) { | ||||||
|  |     return "" + | ||||||
|  |         ((addrint >> 112n) & BigInt(0xffff)).toString(16) + | ||||||
|  |         ":" + | ||||||
|  |         ((addrint >> 96n) & BigInt(0xffff)).toString(16) + | ||||||
|  |         ":" + | ||||||
|  |         ((addrint >> 80n) & BigInt(0xffff)).toString(16) + | ||||||
|  |         ":" + | ||||||
|  |         ((addrint >> 64n) & BigInt(0xffff)).toString(16) + | ||||||
|  |         ":" + | ||||||
|  |         ((addrint >> 48n) & BigInt(0xffff)).toString(16) + | ||||||
|  |         ":" + | ||||||
|  |         ((addrint >> 32n) & BigInt(0xffff)).toString(16) + | ||||||
|  |         ":" + | ||||||
|  |         ((addrint >> 16n) & BigInt(0xffff)).toString(16) + | ||||||
|  |         ":" + | ||||||
|  |         (addrint & BigInt(0xffff)).toString(16); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function inet_aton_6(addrstr) { | ||||||
|  |     var re = | ||||||
|  |         /^([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})$/; | ||||||
|  |     var res = re.exec(addrstr); | ||||||
|  |  | ||||||
|  |     if (res === null) { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for (var i = 1; i <= 8; i++) { | ||||||
|  |         if (res[i] < 0 || res[i] > 0xffff) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     var r1 = BigInt(parseInt(res[1], 16)) << 112n; | ||||||
|  |     var r2 = BigInt(parseInt(res[2], 16)) << 96n; | ||||||
|  |     var r3 = BigInt(parseInt(res[3], 16)) << 80n; | ||||||
|  |     var r4 = BigInt(parseInt(res[4], 16)) << 64n; | ||||||
|  |     var r5 = BigInt(parseInt(res[5], 16)) << 48n; | ||||||
|  |     var r6 = BigInt(parseInt(res[6], 16)) << 32n; | ||||||
|  |     var r7 = BigInt(parseInt(res[7], 16)) << 16n; | ||||||
|  |     var r8 = BigInt(parseInt(res[8], 16)); | ||||||
|  |  | ||||||
|  |     var rt = r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8; | ||||||
|  |  | ||||||
|  |     return rt; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function network_address_6(ip, mask) { | ||||||
|  |     var maskbits = 0; | ||||||
|  |     for (var i = 128 - mask; i >= 0; i--) { | ||||||
|  |         ip &= ~1 << i; | ||||||
|  |     } | ||||||
|  |     return ip; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_addresses_6(mask) { | ||||||
|  |     return 1n << (128n - BigInt(mask)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_first_address_useable_6(addrint) { | ||||||
|  |     return addrint + 1n; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_last_address_useable_6(addrint) { | ||||||
|  |     return addrint - 1n; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_last_address_6(mode, subnet, mask) { | ||||||
|  |     return subnet + subnet_addresses(mode, mask) - 1n; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function subnet_netmask_6(mask) { | ||||||
|  |     return undefined; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function num_hosts_6(useableFirst, useableLast) { | ||||||
|  |     return 1n + useableLast - useableFirst; | ||||||
|  | } | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| <? | <?php | ||||||
| for ($i=0;$i<=32; $i++) { | for ($i=0;$i<=128; $i++) { | ||||||
|  |  | ||||||
| $str = '/'.$i; | $str = '/'.$i; | ||||||
| $font = 2; | $font = 2; | ||||||
|   | |||||||
							
								
								
									
										1076
									
								
								subnets.html
									
									
									
									
									
								
							
							
						
						
									
										1076
									
								
								subnets.html
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user
	 Yehuda Katz
					Yehuda Katz