Facebook  -  Twitter      

Questo forum fa uso dei cookie
Questo forum utilizza i cookie per memorizzare i dettagli del tuo login o della tua ultima visita. I cookie sono piccoli files di testo salvati nel computer; i cookie da noi utilizzati sono relativi unicamente ai servizi da noi forniti direttamente o dai banner pubblicitari. I cookie su questo forum salvano inoltre i dettagli relativi alle discussioni lette e alle tue preferenze personali. Sei pregato di selezionare il tasto OKAY se sei consapevole della presenza di questi files e ci autorizzi ad utilizarli per le informazioni specificate.

Indipendentemente dalla tua scelta un cookie verrà salvato per memorizzare nel tuo pc la risposta a questo form. Puoi modificare le impostazioni relative ai cookie nelle preferenze del tuo browser.

  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[Mikrotik] Automatically Create Simple Queues

#1
Information 
Summery
I had the need to be able to create simples queues based on addresses added to the ip firewall address list.
A requirement was also to be able to report on the bandwidth used per queue .
I this example I have a firewall rule to log the source address of traffic going out of the router wan interface.

Codice:
add action=add-src-to-address-list address-list="i was on the internet"
address-list-timeout=0s chain=forward comment="log-src address of forward wan traffic"
disabled=no out-interface=wan
The script set consist of 4 scripts. • Create Queues
• Update Bandwith Usage
• Report Bandwith Usage
• Reset Batwith Usage

I schedule both the update and reporting script using the scheduler.
The update script I execute every 15min and the reporting script once a day

Create Queues

This script is used to created simple queues for each address found in the ip firewall address list belonging to the list specified in the script

Codice:
:local hostip

Codice:
      :local list

Codice:
      :local testvalue

Codice:
     

Codice:
      :log info "******************** starting - address list queue create ********************"


Codice:
      :foreach i in=[/ip firewall address-list find] do={


Codice:
             :set list ([/ip firewall address-list get $i list] )

Codice:
             :set hostip ([/ip firewall address-list get $i address] )


Codice:
             :set testvalue [/queue simple find name=$hostip]


Codice:
             :if ([:len $testvalue] <= 0) do={

Codice:
                    :if ($list = "i was on the internet") do={


Codice:
                            /queue simple add name=$hostip comment="$hostip*0"  target=$hostip queue=default/default total-queue=default


Codice:
                     } else={

Codice:
         

Codice:
                                }

Codice:
                     } else={

Codice:
                       

Codice:
                       }

Codice:
      }

Codice:
     

Codice:
      :log info "******************** ending - address lsit queue create ********************"

Codice:
     


Update Statistics
The update script makes use of the comment fields to store items descriptions and statistics (Bytes Used)
A example comment filed for ip queues simpel looks like:
add burst-limit=0/0 burst-threshold=0/0 burst-time=0s/0s comment= 192.168.20.216*1691120 direction=both disabled=no interface=all limit-at= 0/0 max-limit=0/0 name=192.168.20.216 packet-marks="" parent=none priority=

Codice:
8 queue=default/default target-addresses=192.168.20.216/32 total-queue=default


Codice:
:local content

Codice:
      :local i

Codice:
     

Codice:
      :local megstotal

Codice:
      :local bytestotal

Codice:
      :local bytescurrent

Codice:
     

Codice:
      :local bytessaved

Codice:
      :local megssaved

Codice:
     

Codice:
      :local bytesdowncurrent

Codice:
      :local megsdowncurrent

Codice:
     

Codice:
      :local megsupcurrent

Codice:
      :local bytesupcurrent

Codice:
     

Codice:
      :log info "******************** starting - queue usage update ********************"

Codice:
     

Codice:
      :foreach i in=[/queue simple find comment !=""] do={

Codice:
     

Codice:
             :set content [/queue simple get $i comment]

Codice:
     

Codice:
             :if ([:find $content "*"] != "") do={

Codice:
                    :local pos1 [:find $content "*"]

Codice:
                    :local pos2 [:len $content]

Codice:
     

Codice:
                    :set bytescurrent [/queue simple get $i bytes]

Codice:
     

Codice:
                   :local pos3 [:find $bytescurrent "/"]

Codice:
                   :local pos4 [:len $bytescurrent]

Codice:
     

Codice:
                   :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                   :set megssaved ($bytessaved  / 1048576)

Codice:
             

Codice:
                   :set bytesupcurrent ([:pick $bytescurrent 0 ($pos3)])

Codice:
                   :set megsupcurrent ($bytesupcurrent / 1048576)

Codice:
     

Codice:
                   :set bytesdowncurrent ([:pick $bytescurrent ($pos3+1) $pos4])

Codice:
                   :set megsdowncurrent ($bytesdowncurrent  / 1048576)

Codice:
     

Codice:
                   :set megstotal ($megsupcurrent + $megsdowncurrent + $megssaved)

Codice:
                   :set bytestotal ($bytesupcurrent + $bytesdowncurrent + $bytessaved)    

Codice:
     

Codice:
                    /queue simple set $i comment="$[:pick $content 0 ($pos1)]*$bytestotal"

Codice:
                    /queue simple reset-counters $i

Codice:
                }

Codice:
      }

Codice:
      :log info "******************** ending - queue usage update ********************"



The Reset Script

The reset script will reset all counters back to a *0

Codice:
:local content

Codice:
      :local i

Codice:
     

Codice:
      :log info "******************** starting - queue usage update reset********************"

Codice:
     

Codice:
      :foreach i in=[/queue simple find comment !=""] do={

Codice:
     

Codice:
             :set content [/queue simple get $i comment]

Codice:
     

Codice:
             :if ([:find $content "*"] != "") do={

Codice:
                    :local pos1 [:find $content "*"]

Codice:
                    :local pos2 [:len $content]

Codice:
     

Codice:
                    /queue simple set $i comment="$[:pick $content 0 ($pos1)]*0"

Codice:
                    /queue simple reset-counters $i

Codice:
             }

Codice:
      }

Codice:
      :log info "******************** ending - queue usage update reset ********************"



The Report Script.

The report script will look for items in the ip queues simpel which has a * in the comment field. The reported unit would be in MB.

Codice:
:global scriptemail

Codice:
     

Codice:
      :local content

Codice:
      :local i

Codice:
      :local queuehostname

Codice:
      :local queuehostip

Codice:
     

Codice:
      :local bytessaved

Codice:
      :local megssaved      

Codice:
     

Codice:
      :local logcontenttemp ""      

Codice:
      :local logcontent ""          


Codice:
      :set logcontenttemp "Good Day \n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")

Codice:
     

Codice:
      :set logcontenttemp "This is an automated notification, please do not reply to this email"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "Please see below the usage stats for your ip queue: \n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")

Codice:
     

Codice:
      :set logcontenttemp "**************************************Simple Queue*************************************"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :foreach i in=[/queue simple find comment !=""] do={

Codice:
     

Codice:
             :set content [/queue simple get $i comment]

Codice:
     

Codice:
             :if ([:find $content "*"] != "") do={

Codice:
                    :local pos1 [:find $content "*"]

Codice:
                    :local pos2 [:len $content]

Codice:
     

Codice:
                    :set queuehostname [:pick $content 0 ($pos1)]

Codice:
                    :set queuehostip [/queue simple get $i target]

Codice:
     

Codice:
                    :set bytessaved ([:pick $content ($pos1+1) $pos2])

Codice:
                    :set megssaved ($bytessaved  / 1048576)      


Codice:
                    :set logcontenttemp "$queuehostname"


Codice:
                    :for x from=1 to=( 55 - [:len $logcontenttemp]) step=1 do={

Codice:
                           :set logcontenttemp ("$logcontenttemp" . " ")

Codice:
                    }

Codice:
                           

Codice:
                    :set logcontenttemp ("$logcontenttemp" . " Used: " . "$megssaved" . "mb")

Codice:
                    :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")    


Codice:
           

Codice:
             }


Codice:
       }      


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        


Codice:
      :set logcontenttemp "***************************************************************************************"                                        

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")    

Codice:
     

Codice:
      :set logcontenttemp "KEY:"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "1 Megabyte (Mb) = 1000000 bytes (b)"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "1 Gigabyte (Gb) = 1000 Megabytes (Mb) \n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "Should you have any queries, please contact your account manager"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
      :set logcontenttemp "\n\r"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")        


Codice:
      :set logcontenttemp "Kind Regrads"

Codice:
      :set logcontent ("$logcontent

Codice:
" ."$logcontenttemp")


Codice:
       /tool e-mail send to=$scriptemail   subject="$[/system identity get name] queue usage report"  body="$logcontent" tls=yes

Codice:
     


Cita messaggio


[-]
Condividi/Segnala (Mostra tutti)
Facebook Linkedin Twitter

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
Information [Mikrotik] Script to create directory berryberry 0 309 11-06-2015, 09:29
Ultimo messaggio: berryberry

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Utenti che stanno guardando questa discussione:
1 Ospite(i)


Powered by MyBB, © 2002-2017 MyBB Group.