Add global functions
This commit is contained in:
		
							parent
							
								
									41dac7b77b
								
							
						
					
					
						commit
						91a254cdec
					
				
					 3 changed files with 115 additions and 11 deletions
				
			
		
							
								
								
									
										54
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										54
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,5 +1,4 @@
 | 
			
		|||
Custom RouterOS Scripts
 | 
			
		||||
=======================
 | 
			
		||||
# Custom RouterOS Scripts
 | 
			
		||||
 | 
			
		||||
[RouterOS](https://mikrotik.com/software) is the operating system developed
 | 
			
		||||
by [MikroTik](https://mikrotik.com/aboutus) for networking tasks. This
 | 
			
		||||
| 
						 | 
				
			
			@ -9,21 +8,55 @@ to manage RouterOS devices or extend their functionality.
 | 
			
		|||
*Use at your own risk*, pay attention to
 | 
			
		||||
[license and warranty](#license-and-warranty)!
 | 
			
		||||
 | 
			
		||||
Requirements
 | 
			
		||||
------------
 | 
			
		||||
## Table of Contents
 | 
			
		||||
 | 
			
		||||
- [Custom RouterOS Scripts](#custom-routeros-scripts)
 | 
			
		||||
  - [Table of Contents](#table-of-contents)
 | 
			
		||||
  - [Requirements](#requirements)
 | 
			
		||||
  - [Installation](#installation)
 | 
			
		||||
    - [Initial Setup](#initial-setup)
 | 
			
		||||
    - [Adding a script](#adding-a-script)
 | 
			
		||||
  - [Available scripts](#available-scripts)
 | 
			
		||||
  - [License and warranty](#license-and-warranty)
 | 
			
		||||
  - [Upstream](#upstream)
 | 
			
		||||
 | 
			
		||||
## Requirements
 | 
			
		||||
 | 
			
		||||
This is a repository containing **custom** RouterOS scripts. These do depend
 | 
			
		||||
on upstream project. Visit
 | 
			
		||||
[RouterOS-Scripts](https://git.eworm.de/cgit/routeros-scripts/about/) and
 | 
			
		||||
follow the instructions there for the basic installation and setup.
 | 
			
		||||
 | 
			
		||||
Available scripts
 | 
			
		||||
-----------------
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
* [Hello World](doc/hello-world.md)
 | 
			
		||||
### Initial Setup
 | 
			
		||||
 | 
			
		||||
License and warranty
 | 
			
		||||
--------------------
 | 
			
		||||
Download the `global-functions-custom-phg.rsc` script:
 | 
			
		||||
 | 
			
		||||
```rsc
 | 
			
		||||
$ScriptInstallUpdate global-functions-custom-phg "base-url=https://git.s1q.dev/phg/routeros-scripts-custom/raw/branch/main/";
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
And finally load my custom functions and add a scheduler to load them on each startup.
 | 
			
		||||
 | 
			
		||||
```rsc
 | 
			
		||||
/system/script/run global-functions-custom-phg;
 | 
			
		||||
/system/scheduler/add name="global-scripts-custom-phg" start-time=startup on-event="/system/script/run global-functions-custom-phg;";
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Adding a script
 | 
			
		||||
 | 
			
		||||
To add a script from the repository run function `$ScriptInstallUpdate` with a comma separated list of script names, as well as the parameter `"base-url=https://git.s1q.dev/phg/routeros-scripts-custom/raw/branch/main/"`.
 | 
			
		||||
 | 
			
		||||
```rsc
 | 
			
		||||
$ScriptInstallUpdate ddns-hetzner,dns-to-ipv6-subnet-resolver "base-url=https://git.s1q.dev/phg/routeros-scripts-custom/raw/branch/main/";
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Available scripts
 | 
			
		||||
 | 
			
		||||
- [Hello World](doc/hello-world.md)
 | 
			
		||||
 | 
			
		||||
## License and warranty
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
| 
						 | 
				
			
			@ -35,8 +68,7 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
[GNU General Public License](COPYING.md) for more details.
 | 
			
		||||
 | 
			
		||||
Upstream
 | 
			
		||||
--------
 | 
			
		||||
## Upstream
 | 
			
		||||
 | 
			
		||||
URL:
 | 
			
		||||
[git.s1q.dev](https://git.s1q.dev/phg/routeros-scripts-custom)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										39
									
								
								global-functions-custom-phg.rsc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								global-functions-custom-phg.rsc
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
#!rsc by RouterOS
 | 
			
		||||
# RouterOS script: global-functions-custom-phg
 | 
			
		||||
# Copyright (c) 2025 Philip 'ShokiNN' Henning <mail@philip-henning.com>
 | 
			
		||||
# https://git.s1q.dev/phg/routeros-scripts-custom/about/COPYING.md
 | 
			
		||||
#
 | 
			
		||||
# requires RouterOS, version=7.14
 | 
			
		||||
#
 | 
			
		||||
# global functions for my custom scripts
 | 
			
		||||
# https://git.s1q.dev/phg/routeros-scripts-custom/about
 | 
			
		||||
 | 
			
		||||
:local ScriptName [ :jobname ];
 | 
			
		||||
 | 
			
		||||
# global variables not to be changed by user
 | 
			
		||||
:global GlobalFunctionsCustomPhgReady false;
 | 
			
		||||
 | 
			
		||||
# global functions
 | 
			
		||||
:global SafelyResolve
 | 
			
		||||
 | 
			
		||||
# Function: safelyResolve
 | 
			
		||||
#  - Takes a DNS string (e.g. "example.com")
 | 
			
		||||
#  - Takes an IP type [ipv4, ipv6]
 | 
			
		||||
#  - Returns a string of and IP address or false if it can't be resolved
 | 
			
		||||
:set SafelyResolve do={
 | 
			
		||||
  :do {
 | 
			
		||||
    :local DomainName [ :tostr $1 ];
 | 
			
		||||
    :if ( [ :tostr $2 ] = "ipv4" or [ :tostr $2 ] = "ipv6" ) do={
 | 
			
		||||
      :local IPType [ :tostr $2 ];
 | 
			
		||||
    } else={
 | 
			
		||||
      :local IPType "ipv4";
 | 
			
		||||
    }
 | 
			
		||||
    :local IP [:resolve domain-name="$DomainName" type=$IPType];
 | 
			
		||||
    :return "$IP";
 | 
			
		||||
  } on-error={
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# signal we are ready
 | 
			
		||||
:set GlobalFunctionsCustomPhgReady true;
 | 
			
		||||
							
								
								
									
										33
									
								
								template.rsc.tpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								template.rsc.tpl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
#!rsc by RouterOS
 | 
			
		||||
# RouterOS script: <script-filename>
 | 
			
		||||
# Copyright (c) <year> Philip 'ShokiNN' Henning <mail@philip-henning.com>
 | 
			
		||||
# https://git.s1q.dev/phg/routeros-scripts-custom/about/COPYING.md
 | 
			
		||||
#
 | 
			
		||||
# requires RouterOS, version=<min ros version>
 | 
			
		||||
#
 | 
			
		||||
# <short script description>
 | 
			
		||||
# https://git.s1q.dev/phg/routeros-scripts-custom/about/doc/<script-filename>.md
 | 
			
		||||
 | 
			
		||||
:global GlobalFunctionsReady;
 | 
			
		||||
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
 | 
			
		||||
 | 
			
		||||
:local ExitOK false;
 | 
			
		||||
:do {
 | 
			
		||||
  :local ScriptName [ :jobname ];
 | 
			
		||||
 | 
			
		||||
  :global LogPrint;
 | 
			
		||||
  :global ParseKeyValueStore;
 | 
			
		||||
  :global ScriptLock;
 | 
			
		||||
 | 
			
		||||
  # Local/global script specific variables
 | 
			
		||||
 | 
			
		||||
  :if ([ $ScriptLock $ScriptName ] = false) do={
 | 
			
		||||
    :set ExitOK true;
 | 
			
		||||
    :error false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Add Script from here:
 | 
			
		||||
 | 
			
		||||
} on-error={
 | 
			
		||||
  :global ExitError; $ExitError $ExitOK [ :jobname ];
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue