| 
									
										
										
										
											2021-09-17 16:23:53 +02:00
										 |  |  | #!rsc by RouterOS | 
					
						
							| 
									
										
										
										
											2021-11-15 20:22:56 +01:00
										 |  |  | # RouterOS script: mod/ipcalc | 
					
						
							| 
									
										
										
										
											2022-01-01 21:38:15 +01:00
										 |  |  | # Copyright (c) 2020-2022 Christian Hesse <mail@eworm.de> | 
					
						
							| 
									
										
										
										
											2021-09-17 16:23:53 +02:00
										 |  |  | # https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :global IPCalc; | 
					
						
							| 
									
										
										
										
											2021-12-09 20:55:15 +01:00
										 |  |  | :global IPCalcReturn; | 
					
						
							| 
									
										
										
										
											2021-09-17 16:23:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-09 20:55:15 +01:00
										 |  |  | # print netmask, network, min host, max host and broadcast | 
					
						
							| 
									
										
										
										
											2021-09-17 16:23:53 +02:00
										 |  |  | :set IPCalc do={ | 
					
						
							|  |  |  |   :local Input [ :tostr $1 ]; | 
					
						
							| 
									
										
										
										
											2021-12-09 20:55:15 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   :global IPCalcReturn; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   :local Values [ $IPCalcReturn $1 ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   :put ( \ | 
					
						
							|  |  |  |     "Address:   " . $Values->"address" . "\n\r" . \ | 
					
						
							|  |  |  |     "Netmask:   " . $Values->"netmask" . "\n\r" . \ | 
					
						
							|  |  |  |     "Network:   " . $Values->"network" . "\n\r" . \ | 
					
						
							|  |  |  |     "HostMin:   " . $Values->"hostmin" . "\n\r" . \ | 
					
						
							|  |  |  |     "HostMax:   " . $Values->"hostmax" . "\n\r" . \ | 
					
						
							|  |  |  |     "Broadcast: " . $Values->"broadcast"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # calculate and return netmask, network, min host, max host and broadcast | 
					
						
							|  |  |  | :set IPCalcReturn do={ | 
					
						
							|  |  |  |   :local Input [ :tostr $1 ]; | 
					
						
							| 
									
										
										
										
											2021-09-17 16:23:53 +02:00
										 |  |  |   :local Address [ :toip [ :pick $Input 0 [ :find $Input "/" ] ] ]; | 
					
						
							|  |  |  |   :local Bits [ :tonum [ :pick $Input ([ :find $Input "/" ] + 1) [ :len $Input ] ] ]; | 
					
						
							|  |  |  |   :local Mask ((255.255.255.255 << (32 - $Bits)) & 255.255.255.255); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   :local Return { | 
					
						
							|  |  |  |     "address"=$Address; | 
					
						
							|  |  |  |     "netmask"=$Mask; | 
					
						
							|  |  |  |     "networkaddress"=($Address & $Mask); | 
					
						
							|  |  |  |     "networkbits"=$Bits; | 
					
						
							|  |  |  |     "network"=(($Address & $Mask) . "/" . $Bits); | 
					
						
							|  |  |  |     "hostmin"=(($Address & $Mask) | 0.0.0.1); | 
					
						
							|  |  |  |     "hostmax"=(($Address | ~$Mask) ^ 0.0.0.1); | 
					
						
							|  |  |  |     "broadcast"=($Address | ~$Mask); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   :return $Return; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-12-09 20:55:15 +01:00
										 |  |  | 
 |