Nothing Fancy , just short notes for script command reference purposes!
Following is a very simple 2 minutes instant cooked noddle
type script. It will simply check the gateway status acquired by the dhcp-client using ARP ping, , if it fails, then it will simply try to renew the ip by release/renew. Its very basic level, but its interesting to see how Mikrotik can really help you in day to day task by facilitated with the Tik level scripting !
Regard’s
Syed Jahanzaib
# Mikrotik Script - Tested with 5.x # Script to check default gateway acquired by dhcp client on specific interface, # Lot of room for improvements and modification but following was enough for some particular task, # You can add BOUND status as well too, but i wanted this particular checking, you can add whatever you like # Syed Jahanzaib == aacable AT hotmail DOT com - https:// aacable DOT wordpress DOT com # Feb,2018 # Setting Variables # Set Interface name which will get DHCP ip , This is the only option you may need to modify :local INTERFACE "wan1" # Number of Ping Count, how many times mikrotik should ping the target device :local PINGCOUNT "5" # Ping threshold, how many values should set alert, like if 5 out of 5 goes out :local PINGTS "5" :local i 0; #:local i value=0; :local F 0; :local date; :local time; :log info "Checking default gateway for $INTERFACE interfaces." :local DHCPGW [ /ip dhcp-client get [/ip dhcp-client find where interface=$INTERFACE ] gateway ] # IF there is no default gateway on dhcpclient interface or if interface is disabled, then error :if ([:len $DHCPGW] = 0) do={ :log error "No DEFAULT gateway found on $INTERFACE interface @ $date $time ..." # Try to renew ip /ip dhcp-client release $INTERFACE /ip dhcp-client renew $INTERFACE # Exit the script without further process ... I found this recently because in mikrotik there is no EXIT 1 error :error } # PING host $PINGCOUNT times :for i from=1 to=$PINGCOUNT do={ :if ([/ping arp-ping=yes interface=$INTERFACE $DHCPGW count=1]=0) do={:set F ($F + 1)} :delay 1; }; # If no ping found then give error and do action :if (($F=$PINGTS)) do={ :log error "PING to $DHCPGW via $INTERFACE is DOWN! @ $date $time " # Take action if unable to ping gateway /ip dhcp-client release $INTERFACE /ip dhcp-client renew $INTERFACE } else={ :log warning "PING to $DHCPGW via $INTERFACE is UP! @ $date $time " }