# The minimum number of flooding clients required to gline
jcMinJFSizeToGline = 20
+# Grace period (no glines set) after a net burst or a net join
+jcGracePeriodBurstOrSplit = 60
+
# The gline reason to set when glining join flood offenders
-jcGlineReason = Flooding is not tollerated on this network!
+jcGlineReason = Flooding is not tolerated on this network
# The length in seconds for glines which are issued on join flood offenders
jcGlineLength = 3600
ncCutoff = atoi(dronescanConfig->Require("ncCutoff")->second.c_str());
rcInterval = atoi(dronescanConfig->Require("rcInterval")->second.c_str());
jcMinJoinToGline = atoi(dronescanConfig->Require("jcMinJoinToGline")->second.c_str());
+jcGracePeriodBurstOrSplit = atoi(dronescanConfig->Require("jcGracePeriodBurstOrSplit")->second.c_str());
jcMinJoinToGlineJOnly = atoi(dronescanConfig->Require("jcMinJoinToGlineJOnly")->second.c_str());
jcMinJoinsPerIPToGline = atoi(dronescanConfig->Require("jcMinJoinsPerIPToGline")->second.c_str());
jcJoinsPerIPTime = atoi(dronescanConfig->Require("jcJoinsPerIPTime")->second.c_str());
}
case EVT_NETBREAK :
{
+ lastSplitTime = ::time(0);
updateState();
break;
}
bool isoktogline2 = false;
for(;joinPartIt != joinPartEnd; ++joinPartIt )
{
- isoktogline = ((::time(0) - lastBurstTime) > 25 && jcGlineEnable && jChannel->getNumOfJoins() > jcMinJFSizeToGline && (jChannel->getNumOfParts() > jcMinJFSizeToGline || (joinPartIt->second.numOfJoins >= jcMinJoinToGlineJOnly && jChannel->getNumOfJoins() >= jcMinJFJOnlySizeToGline))) ? true : false;
+ isoktogline = ((::time(0) - lastBurstTime) >= (jcGracePeriodBurstOrSplit / 2) && (::time(0) - lastSplitTime) >= (jcGracePeriodBurstOrSplit / 2) && jcGlineEnable && jChannel->getNumOfJoins() > jcMinJFSizeToGline && (jChannel->getNumOfParts() > jcMinJFSizeToGline || (joinPartIt->second.numOfJoins >= jcMinJoinToGlineJOnly && jChannel->getNumOfJoins() >= jcMinJFJOnlySizeToGline))) ? true : false;
if (isoktogline)
isoktogline2 = true;
#ifdef ENABLE_LOG4CPLUS
}
/* Do join count processing if applicable */
-if ((::time(0) - lastBurstTime) < 60)
+if ((::time(0) - lastBurstTime) < jcGracePeriodBurstOrSplit)
return; /* Don't report join/floods right after a burst */
const string& channelName = theChannel->getName();
jcChanMapIterator jcChanIt = jcChanMap.find(channelName);
if (joinCount >= jcCutoff) {
string IP = xIP(theClient->getIP()).GetNumericIP();
jcFloodClients* jcFC;
- if ((::time(0) - lastBurstTime) >= 60 && jcGlineEnable) {
+ if ((::time(0) - lastBurstTime) >= jcGracePeriodBurstOrSplit && jcGlineEnable) {
clientsIPFloodMapType::const_iterator Itr = clientsIPFloodMap.find(IP);
if (Itr != clientsIPFloodMap.end()) {
jcFC = Itr->second;
clientsIPMapType clientsIPMap;
clientsIPFloodMapType clientsIPFloodMap;
int lastBurstTime;
+ int lastSplitTime;
/** Typedef of currently seen drone channels */
typedef std::map< std::string , activeChannel* > droneChannelsType;
/** Join counter config options */
unsigned int jcInterval;
unsigned int jcCutoff;
+ unsigned int jcGracePeriodBurstOrSplit;
unsigned int jcMinJoinToGline;
unsigned int jcMinJoinToGlineJOnly;
unsigned int jcMinJoinsPerIPToGline;