mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
74 lines
1.5 KiB
Text
74 lines
1.5 KiB
Text
# $Id: drop-adapt.bro 6940 2009-11-14 00:38:53Z robin $
|
|
#
|
|
# Adjust load level based on packet drops.
|
|
#
|
|
|
|
@load load-level
|
|
|
|
# Increase load-level if packet drops are successively 'count' times
|
|
# above 'threshold' percent.
|
|
const drop_increase_count = 5 &redef;
|
|
const drop_increase_threshold = 5.0 &redef;
|
|
|
|
# Same for decreasing load-level.
|
|
const drop_decrease_count = 15 &redef;
|
|
const drop_decrease_threshold = 0.0 &redef;
|
|
|
|
# Minimum time to wait after a load-level increase before new decrease.
|
|
const drop_decrease_wait = 20 mins &redef;
|
|
|
|
global drop_last_stat: net_stats;
|
|
global drop_have_stats = F;
|
|
global drop_above = 0;
|
|
global drop_below = 0;
|
|
|
|
global drop_last_increase: time = 0;
|
|
|
|
event net_stats_update(t: time, ns: net_stats)
|
|
{
|
|
if ( drop_have_stats )
|
|
{
|
|
local new_recvd = ns$pkts_recvd - drop_last_stat$pkts_recvd;
|
|
local new_dropped =
|
|
ns$pkts_dropped - drop_last_stat$pkts_dropped;
|
|
|
|
local p = new_dropped * 100.0 / new_recvd;
|
|
|
|
drop_last_stat = ns;
|
|
|
|
if ( p >= 0 )
|
|
{
|
|
if ( p >= drop_increase_threshold )
|
|
{
|
|
if ( ++drop_above >= drop_increase_count )
|
|
{
|
|
increase_load_level();
|
|
drop_above = 0;
|
|
drop_last_increase = t;
|
|
}
|
|
}
|
|
else
|
|
drop_above = 0;
|
|
|
|
if ( t - drop_last_increase < drop_decrease_wait )
|
|
return;
|
|
|
|
if ( p <= drop_decrease_threshold )
|
|
{
|
|
if ( ++drop_below >= drop_decrease_count )
|
|
{
|
|
decrease_load_level();
|
|
drop_below = 0;
|
|
}
|
|
}
|
|
else
|
|
drop_below = 0;
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
drop_have_stats = T;
|
|
drop_last_stat = ns;
|
|
}
|
|
}
|