diff --git a/opentrafficshaper/plugins/configmanager.pm b/opentrafficshaper/plugins/configmanager.pm index 0cc4c29c1e93d2556f895bfe1d6c53d131e971cc..0c54759a6526195a0b8758878a4cec3695b67952 100644 --- a/opentrafficshaper/plugins/configmanager.pm +++ b/opentrafficshaper/plugins/configmanager.pm @@ -2199,8 +2199,6 @@ sub createPoolMember # Add pool member $poolMembers->{$poolMember->{'ID'}} = $poolMember; - # Link interface IP address map - $interfaceIPMap->{$pool->{'InterfaceGroupID'}}->{$poolMember->{'IPAddress'}}->{$poolMember->{'ID'}} = $poolMember; # Link pool map $poolMemberMap->{$pool->{'ID'}}->{$poolMember->{'ID'}} = $poolMember; @@ -2213,8 +2211,36 @@ sub createPoolMember setPoolMemberShaperState($poolMember->{'ID'},SHAPER_NOTLIVE); - # Pool member needs updating - $poolMemberChangeQueue->{$poolMember->{'ID'}} = $poolMember; + # Check for IP conflicts + if ( + defined($interfaceIPMap->{$pool->{'InterfaceGroupID'}}->{$poolMember->{'IPAddress'}}) && + (my @conflicts = keys %{$interfaceIPMap->{$pool->{'InterfaceGroupID'}}->{$poolMember->{'IPAddress'}}}) > 0 + ) { + # Loop wiht conflicts and build some log items to use + my @logItems; + foreach my $pmid (@conflicts) { + my $cPoolMember = $poolMembers->{$pmid}; + my $cPool = $pools->{$cPoolMember->{'PoolID'}}; + push(@logItems,sprintf("Pool:%s/Member:%s",$cPool->{'Name'},$cPoolMember->{'Username'})); + } + + $logger->log(LOG_NOTICE,"[CONFIGMANAGER] Pool '%s' member '%s' IP '%s' conflicts with: %s", + $pool->{'Name'}, + $poolMember->{'Username'}, + $poolMember->{'IPAddress'}, + join(", ",@logItems) + ); + + setPoolMemberShaperState($poolMember->{'ID'},SHAPER_CONFLICT); + + # We don't have to add it to the queue + } else { + # Pool member needs updating + $poolMemberChangeQueue->{$poolMember->{'ID'}} = $poolMember; + } + + # Link interface IP address map, we must do the check above FIRST, and that neds the pool to be added to the pool map + $interfaceIPMap->{$pool->{'InterfaceGroupID'}}->{$poolMember->{'IPAddress'}}->{$poolMember->{'ID'}} = $poolMember; # Resolve overrides, there may of been no pool members, now there is one and we may be able to apply an override _override_resolve([$pool->{'ID'}]);