From 686a5c37b4e191fdbebd4b58dbfae27af4e11e80 Mon Sep 17 00:00:00 2001 From: Anatoly Bubenkov Date: Sat, 5 Nov 2022 17:14:34 +0100 Subject: [PATCH] Add notify-on-dhcp-lease script --- doc/notify-on-dhcp-lease.d/notification.avif | Bin 0 -> 12586 bytes doc/notify-on-dhcp-lease.md | 47 +++++++++++++ notify-on-dhcp-lease | 68 +++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 doc/notify-on-dhcp-lease.d/notification.avif create mode 100644 doc/notify-on-dhcp-lease.md create mode 100644 notify-on-dhcp-lease diff --git a/doc/notify-on-dhcp-lease.d/notification.avif b/doc/notify-on-dhcp-lease.d/notification.avif new file mode 100644 index 0000000000000000000000000000000000000000..d426e29c7be3eafc9edfddb2ca02336f17da441b GIT binary patch literal 12586 zcmb_?byQSc*zXyJ?(P`6q`SLBx=}iZ9ER=?>5>kS5)hC^S{jw^76B0{B}700;T!bT z_g&w;f80OrUTdG{x1ZkooIUG#761SMvG?+aS@}Ti0mQhau26eESE!Y}h8&+90N`f3 z+Id;s$`FIi(bfh28v+0fYUA|>-%=N-^&dC5FsPU7FBu5&6oEGH?Lp8ag!GpTPZL3IIj&Hs+poNSNhlEuyIX@>dn+GaJ_UCd_h0Ey{FNZY zN`6rL+j*;a=dS?a+7;?*XRM(OSixW}P#Y^RsJj~v+}57c&(-BtmkkQH`yC9iYa3fn z8$@!T+fe_kZc|6BaH63wI1E7@pfDSEgp?TS3A4L(fY@CM;*p7%_%Ns+^cM#m9UVcj zt$g?t!XdXD9BLbP7dQ;=j);YWf13*uJ|Z_aFSxFXJjB?<6oU2%zy#Q0-uBWr!-+Tfb75?(!-nxJDw{ugG z|D$gYSN^+qS5E}@A3u&zwZFDrj{2&9_%>Gm=5OaF_peV+=LkbnHZytMzGp_A3!+wcCDEua9n11^XO2Oz*b z#7YqWyzKlC-zxwpxWoM6PzOgZh#caE*+JCYY`E`0_<8yH0pRw&-s%9r3F)tU2qGQ+ zmlyF30HkbhZf-jN<=tZffTl+PfcfcP9%~okM}`al-p1Q_!+n1HL%t;_h+hFbfEb_v zXaPom4d4R!0b#`Nf-Il}+y%4%eZT}T2W$XGz!j0XFAxNT15rRckOE`?xj+F>0z3z* zfd-%j=mdI!*T4uc3Csa2z&fx6>;p%@8E^>#fzUuWAR-V2hz`UI;so)7L_yLZCD1*P zF31FA3333rfxJOMpogG%P%0=FR0OI3)q~nVy`Uk`6le*w0onz91zjM4k+6}7k!X-u zka&rrnk@S(wkQ|UakOGh*k&=+Ik&2OCAT=ZPB8?!;A+00rBb|Z)Fcz2;Ob_M) zi-HxvT3}PKJs1uS0mp$e!NuSja69-7cm})<{tW(sjEYQz3_<2XmOxfTHbAyP_CO9n zPC(8@evaIXJb*ldyn%d#e2s#GLXE z+7{Y(bS!i_bbfSYbW?OU^a%7!^h)$D^l9{M^h*qU3}y^*3@r>>41bJdjAt0_7!w#< z7?+p?n5>vmnEIGbnBkb&m^GM#nC~!8u&}Tgu*9%*u%K9BSlL*0SZ}d5uzp|@Vsl_C zU_Ze2#!kX6$L_&i!al*l!C}FX#WBV4!b!rZ!0E?%kMkXu2$vgI4c8Vo6gLmI8Fw1@ z01pF?8BY$+94`Pb6R#0(0`D_E20jbE0=^Y~2!0-Z8~y_RDFG1yAAuHuD?tK5CBYEE z4j~#L3!xIBEny^K31L6sCJ~s3kw}5ahUg*DGonGFEn-w+R$?_`C*pYGYT|L?BN9Rq zK@vj}KaxC>S0wACU{V%RHBuMSWYPxGdD06q8ZtRDJF-}^8nS7!b8;$jS#mq_IPzNZ zIr0k%2!#@bGsR zN2yO~XlYbvU^F>2{WPCxNoi$iooLf(yJ&ami0Gv0pmgbU-E?~p5{Mkc1(FRJfE>|N z)2q^Z(-+Z?(_b>MG8iyKFw`=vGGa1{GTJkyGxjkaG0`z;FaIV2k4Vo#uTt+!UtT|1f5m{!z}ukD5YO;|VTIwjk)lzm(Yi5@ zaj@}-38e|tq}3G7)X=od^z^>c{fzrt4}=~>J(xFRHS;qYGN&|mF@I%&XJKX0Xo+HJ zWLar>Wu;|RY;|g_X8pwa$VR~?%VytJ);8UC*G|eV)o$Bf%0AV8$3e;=&0*J3#xc|J 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 ℹ️ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. + +Description +----------- + +This script is run from scheduler periodically, checking for LTE state changes. + +### Sample notification + +![notify-on-dhcp-lease notification](notify-on-dhcp-lease.d/notification.avif) + +Requirements and installation +----------------------------- + +Just install the script: + + $ScriptInstallUpdate notify-on-dhcp-lease; + +Requires lease-script installed: + + $ScriptInstallUpdate lease-script; + +Configuration +------------- + +The configuration goes to `global-config-overlay`, there are no additional parameters. + +Also notification settings are required for +[e-mail](mod/notification-email.md), +[matrix](mod/notification-matrix.md) and/or +[telegram](mod/notification-telegram.md). + +See also +-------- + +* [Notify on RouterOS update](check-routeros-update.md) +* [Install LTE firmware upgrade](unattended-lte-firmware-upgrade.md) + +--- +[◀ Go back to main README](../README.md) +[▲ Go back to top](#top) diff --git a/notify-on-dhcp-lease b/notify-on-dhcp-lease new file mode 100644 index 00000000..2f3fa432 --- /dev/null +++ b/notify-on-dhcp-lease @@ -0,0 +1,68 @@ +#!rsc by RouterOS +# RouterOS script: notify-on-dhcp-lease +# Copyright (c) 2018-2022 Christian Hesse +# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md +# +# provides: lease-script, order=90 +# +# send notification on a new DHCP lease +# https://git.eworm.de/cgit/routeros-scripts/about/doc/notify-on-dhcp-lease.md + +:local 0 "notify-on-dhcp-lease"; +:global GlobalFunctionsReady; +:while ($GlobalFunctionsReady != true) do={ :delay 500ms; } + +:global Identity; + +:global IfThenElse; +:global LogPrintExit2; +:global ScriptLock; +:global SendNotification2; +:global SymbolForNotification; +:global WaitFullyConnected; + +$ScriptLock $0; + +:global CurrentLeases; + +:if ([ :typeof $CurrentLeases ] != "array") do={ + :global CurrentLeases ({}); +} + +$WaitFullyConnected; + +$LogPrintExit2 debug $0 ("Prepared") false; +$LogPrintExit2 debug $0 ("Searching for leases") false; +:local FoundLeases ({}); + +:foreach Lease in=[ /ip/dhcp-server/lease/find where dynamic=yes status=bound ] do={ + :local LeaseVal [ /ip/dhcp-server/lease/get $Lease ]; + :local MacAddress ($LeaseVal->"mac-address"); + :local IpAddress ($LeaseVal->"address"); + :local Hostname ($LeaseVal->"host-name"); + :local Comment ($LeaseVal->"comment"); + :local LeaseName ("$MacAddress::$IpAddress::$Hostname::$Comment"); + :local CurrentLease ($CurrentLeases->$MacAddress); + :local Message ("New DHCP lease: $LeaseName."); + :if ( $CurrentLease = nil ) do={ + $LogPrintExit2 info $0 ($Message) false; + $SendNotification2 ({ origin=$0; \ + subject=([ $SymbolForNotification "sparkles" ] . "New DHCP lease"); \ + message=($Message); silent=true }); + :set ($CurrentLeases->$MacAddress) ($LeaseName); + } else={ + $LogPrintExit2 debug $0 ("Lease $LeaseName already known.") false; + } + :set ($FoundLeases->$MacAddress) ($LeaseName); +} + +:foreach MacAddress,LeaseName in=$CurrentLeases do={ + :if ($FoundLeases->$MacAddress = nil) do={ + :local Message ("A DHCP lease $LeaseName has been released."); + $LogPrintExit2 info $0 ($Message) false; + $SendNotification2 ({ origin=$0; \ + subject=([ $SymbolForNotification "sparkles" ] . "A DHCP lease has been released"); \ + message=($Message); silent=true }); + :set ($CurrentLeases->$MacAddress) (nil); + } +} \ No newline at end of file