Skip to content

Instantly share code, notes, and snippets.

@cyanide-burnout
Last active October 8, 2024 16:39
Show Gist options
  • Save cyanide-burnout/433bb6678a5de7824ead68b27cab879c to your computer and use it in GitHub Desktop.
Save cyanide-burnout/433bb6678a5de7824ead68b27cab879c to your computer and use it in GitHub Desktop.
MikroTik DHCP script for VoIP telephony: get server list from Option 120, update routes, provision server list to PBX
:global list ""
:if ($bound=1) do={
:local alphabet "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F\10\11\12\13\14\15\16\17\18\19\1A\1B\1C\1D\1E\1F\
\20\21\22\23\24\25\26\27\28\29\2A\2B\2C\2D\2E\2F\30\31\32\33\34\35\36\37\38\39\3A\3B\3C\3D\3E\3F\
\40\41\42\43\44\45\46\47\48\49\4A\4B\4C\4D\4E\4F\50\51\52\53\54\55\56\57\58\59\5A\5B\5C\5D\5E\5F\
\60\61\62\63\64\65\66\67\68\69\6A\6B\6C\6D\6E\6F\70\71\72\73\74\75\76\77\78\79\7A\7B\7C\7D\7E\7F\
\80\81\82\83\84\85\86\87\88\89\8A\8B\8C\8D\8E\8F\90\91\92\93\94\95\96\97\98\99\9A\9B\9C\9D\9E\9F\
\A0\A1\A2\A3\A4\A5\A6\A7\A8\A9\AA\AB\AC\AD\AE\AF\B0\B1\B2\B3\B4\B5\B6\B7\B8\B9\BA\BB\BC\BD\BE\BF\
\C0\C1\C2\C3\C4\C5\C6\C7\C8\C9\CA\CB\CC\CD\CE\CF\D0\D1\D2\D3\D4\D5\D6\D7\D8\D9\DA\DB\DC\DD\DE\DF\
\E0\E1\E2\E3\E4\E5\E6\E7\E8\E9\EA\EB\EC\ED\EE\EF\F0\F1\F2\F3\F4\F5\F6\F7\F8\F9\FA\FB\FC\FD\FE\FF"
:local option ($"lease-options"->"120")
:if ([:pick $option 0]="\01") do={
/ip route remove [find where comment="ims-core" and routing-table="main" ]
:for index from=1 to=([:len $option] - 1) step=4 do={
:local triplet ([:find $alphabet [:pick $option $index] -1] . "." . [:find $alphabet [:pick $option ($index + 1)] -1] . "." . [:find $alphabet [:pick $option ($index + 2)] -1])
:local address ($triplet . "." . [:find $alphabet [:pick $option ($index + 3)] -1])
:local network ($triplet . ".0/24")
:set list ($list . $address . ",")
:if ([:len [/ip route find routing-table="main" and dst-address=$network]]=0) do={
/ip route add comment="ims-core" routing-table="main" dst-address=$network gateway=($"gateway-address" . "%" . $"interface") }
}
}
:log info ("SIP server list: " . $list)
/tool fetch mode=http url=http://192.168.2.2/pubx/hook.php http-method=post http-data=$list output=none
}
}
@shaposhnikoff
Copy link

cool stuff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment