From 74be726e927f454df211702bbb24c3c08e522290 Mon Sep 17 00:00:00 2001 From: Nigel Kukard <nkukard@lbsd.net> Date: Fri, 25 Oct 2013 11:36:44 +0000 Subject: [PATCH] Refactored variable names and disabled use of ECN --- opentrafficshaper/plugins/tc/tc.pm | 64 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/opentrafficshaper/plugins/tc/tc.pm b/opentrafficshaper/plugins/tc/tc.pm index 21cec95..44e128e 100644 --- a/opentrafficshaper/plugins/tc/tc.pm +++ b/opentrafficshaper/plugins/tc/tc.pm @@ -316,17 +316,17 @@ sub do_add # Only if we have TX limits setup process them if (defined($changes->{'TrafficLimitTx'})) { # Generate our limit TC class - my $txLimitTcClass = _reserveLimitTcClass($txInterface,$lid); + my $txLimitTcClass = _reserveTcClassByLimitID($txInterface,$lid); # Get traffic class TC class my $classID = $changes->{'ClassID'}; - my $txClassTcClass = _getClassTcClass($txInterface,$classID); + my $txTrafficClassTcClass = _getTcClassFromClassID($txInterface,$classID); # Grab some hash table ID's we need my $txIP3HtHex = $tcFilterMappings->{$txInterface}->{'dst'}->{$matchPriority}->{$ip1}->{$ip2}->{$ip3}->{'id'}; # And hex our IP component my $ip4Hex = toHex($ip4); - $logger->log(LOG_DEBUG,"[TC] Linking TX IP '$limit->{'IP'}' to class '$txClassTcClass' at hash endpoint '$txIP3HtHex:$ip4Hex'"); + $logger->log(LOG_DEBUG,"[TC] Linking TX IP '$limit->{'IP'}' to class '$txTrafficClassTcClass' at hash endpoint '$txIP3HtHex:$ip4Hex'"); # Add shaping classes - _tc_class_add($changeSet,$txInterface,TC_ROOT_CLASS,$txClassTcClass,$txLimitTcClass,$changes->{'TrafficLimitTx'},$changes->{'TrafficLimitTxBurst'},$trafficPriority); + _tc_class_add($changeSet,$txInterface,TC_ROOT_CLASS,$txTrafficClassTcClass,$txLimitTcClass,$changes->{'TrafficLimitTx'},$changes->{'TrafficLimitTxBurst'},$trafficPriority); # Link filter to traffic flow (class) _tc_filter_add_flowlink($changeSet,$txInterface,TC_ROOT_CLASS,$trafficPriority,$config->{'ip_protocol'},$txIP3HtHex,$ip4Hex,"dst",16,$limit->{'IP'},$txLimitTcClass); # Add optimizations @@ -342,17 +342,17 @@ sub do_add # Only if we have RX limits setup process them if (defined($changes->{'TrafficLimitRx'})) { # Generate our limit TC class - my $rxLimitTcClass = _reserveLimitTcClass($rxInterface,$lid); + my $rxLimitTcClass = _reserveTcClassByLimitID($rxInterface,$lid); # Get traffic class TC class my $classID = $changes->{'ClassID'}; - my $rxClassTcClass = _getClassTcClass($rxInterface,$classID); + my $rxTrafficClassTcClass = _getTcClassFromClassID($rxInterface,$classID); # Grab some hash table ID's we need my $rxIP3HtHex = $tcFilterMappings->{$rxInterface}->{'src'}->{$matchPriority}->{$ip1}->{$ip2}->{$ip3}->{'id'}; # And hex our IP component my $ip4Hex = toHex($ip4); - $logger->log(LOG_DEBUG,"[TC] Linking RX IP '$limit->{'IP'}' to class '$rxClassTcClass' at hash endpoint '$rxIP3HtHex:$ip4Hex'"); + $logger->log(LOG_DEBUG,"[TC] Linking RX IP '$limit->{'IP'}' to class '$rxTrafficClassTcClass' at hash endpoint '$rxIP3HtHex:$ip4Hex'"); # Add shaping classes - _tc_class_add($changeSet,$rxInterface,TC_ROOT_CLASS,$rxClassTcClass,$rxLimitTcClass,$changes->{'TrafficLimitRx'},$changes->{'TrafficLimitRxBurst'},$trafficPriority); + _tc_class_add($changeSet,$rxInterface,TC_ROOT_CLASS,$rxTrafficClassTcClass,$rxLimitTcClass,$changes->{'TrafficLimitRx'},$changes->{'TrafficLimitRxBurst'},$trafficPriority); # Link filter to traffic flow (class) _tc_filter_add_flowlink($changeSet,$rxInterface,TC_ROOT_CLASS,$trafficPriority,$config->{'ip_protocol'},$rxIP3HtHex,$ip4Hex,"src",12,$limit->{'IP'},$rxLimitTcClass); # Add optimizations @@ -441,15 +441,15 @@ sub do_change my $txLimitTcClass = getLimitAttribute($lid,'tc.txclass'); my $rxLimitTcClass = getLimitAttribute($lid,'tc.rxclass'); # Grab our minor classes - my $txClassTcClass = _getClassTcClass($txInterface,$classID); - my $rxClassTcClass = _getClassTcClass($rxInterface,$classID); + my $txTrafficClassTcClass = _getTcClassFromClassID($txInterface,$classID); + my $rxTrafficClassTcClass = _getTcClassFromClassID($rxInterface,$classID); # Grab traffic priority my $trafficPriority = getTrafficPriority($classID); # Generate changeset my $changeSet = TC::ChangeSet->new(); - _tc_class_change($changeSet,$txInterface,TC_ROOT_CLASS,$txClassTcClass,$txLimitTcClass,$trafficLimitTx,$trafficLimitTxBurst,$trafficPriority); - _tc_class_change($changeSet,$rxInterface,TC_ROOT_CLASS,$rxClassTcClass,$rxLimitTcClass,$trafficLimitRx,$trafficLimitRxBurst,$trafficPriority); + _tc_class_change($changeSet,$txInterface,TC_ROOT_CLASS,$txTrafficClassTcClass,$txLimitTcClass,$trafficLimitTx,$trafficLimitTxBurst,$trafficPriority); + _tc_class_change($changeSet,$rxInterface,TC_ROOT_CLASS,$rxTrafficClassTcClass,$rxLimitTcClass,$trafficLimitRx,$trafficLimitRxBurst,$trafficPriority); # Post changeset $kernel->post("_tc" => "queue" => $changeSet); @@ -493,8 +493,8 @@ sub do_remove my $classID = getLimitAttribute($lid,'tc.live.ClassID'); my $trafficPriority = getTrafficPriority($classID); # Grab our minor classes - my $txClassTcClass = _getClassTcClass($txInterface,$classID); - my $rxClassTcClass = _getClassTcClass($rxInterface,$classID); + my $txTrafficClassTcClass = _getTcClassFromClassID($txInterface,$classID); + my $rxTrafficClassTcClass = _getTcClassFromClassID($rxInterface,$classID); # Clear up the filter @@ -520,13 +520,13 @@ sub do_remove $changeSet->add([ '/sbin/tc','class','del', 'dev',$txInterface, - 'parent',"1:$txClassTcClass", + 'parent',"1:$txTrafficClassTcClass", 'classid',"1:$txLimitTcClass", ]); $changeSet->add([ '/sbin/tc','class','del', 'dev',$rxInterface, - 'parent',"1:$rxClassTcClass", + 'parent',"1:$rxTrafficClassTcClass", 'classid',"1:$rxLimitTcClass", ]); @@ -637,7 +637,7 @@ sub _tc_iface_init # Create our parent classes foreach my $classID (sort {$a <=> $b} keys %{$classes}) { # We don't really need the result, we just need the class created - _reserveClassTcClass($interface,$classID); + _reserveTcClassByClassID($interface,$classID); } # Do we have a default pool? if so we must direct traffic there @@ -646,7 +646,7 @@ sub _tc_iface_init my $defaultPoolClass; if (defined($defaultPool)) { # Push unclassified traffic to this class - $defaultPoolClass = _getClassTcClass($interface,$defaultPool); + $defaultPoolClass = _getTcClassFromClassID($interface,$defaultPool); push(@qdiscOpts,'default',$defaultPoolClass); } @@ -673,7 +673,7 @@ sub _tc_iface_init # Setup the classes while ((my $classID, my $class) = each(%{$classes})) { - my $classTcClass = _getClassTcClass($interface,$classID); + my $trafficClassTcClass = _getTcClassFromClassID($interface,$classID); my $trafficPriority = getTrafficPriority($classID); @@ -682,7 +682,7 @@ sub _tc_iface_init '/sbin/tc','class','add', 'dev',$interface, 'parent','1:1', - 'classid',"1:$classTcClass", + 'classid',"1:$trafficClassTcClass", 'htb', 'rate',"$class->{'cir'}kbit", 'ceil',"$class->{'limit'}kbit", @@ -733,7 +733,8 @@ sub _tc_iface_init 'limit',$redLimit, 'burst',$redBurst, 'avpkt',$redAvPkt, - 'ecn' +# NK: ECN may cause excessive dips in traffic if there is an exceptional amount of traffic +# 'ecn' # XXX: Very new kernels only ... use redflowlimit in future # 'sfq', # 'divisor','16384', @@ -754,7 +755,8 @@ sub _tc_iface_init 'limit',$redLimit, 'burst',$redBurst, 'avpkt',$redAvPkt, - 'ecn' +# NK: ECN may cause excessive dips in traffic if there is an exceptional amount of traffic +# 'ecn' ]); } @@ -777,7 +779,7 @@ sub _tc_class_optimize $rateBand2 = PRIO_RATE_BURST_MIN if ($rateBand2 < PRIO_RATE_BURST_MIN); my $rateBand2Burst = ($rateBand2 / 8) * PRIO_RATE_BURST_MAXM; - my $prioTcClass = _reservePrioTcClass($interface,$limitTcClass); + my $prioTcClass = _reserveMajorTcClassByPrioClass($interface,$limitTcClass); # # DEFINE 3 PRIO BANDS @@ -1219,7 +1221,7 @@ sub _tc_filter_add # Function to add a TC class sub _tc_class_add { - my ($changeSet,$interface,$majorTcClass,$classTcClass,$limitTcClass,$rate,$ceil,$trafficPriority) = @_; + my ($changeSet,$interface,$majorTcClass,$trafficClassTcClass,$limitTcClass,$rate,$ceil,$trafficPriority) = @_; # Set burst to a sane value my $burst = int($ceil / 8 / 5); @@ -1228,7 +1230,7 @@ sub _tc_class_add $changeSet->add([ '/sbin/tc','class','add', 'dev',$interface, - 'parent',"$majorTcClass:$classTcClass", + 'parent',"$majorTcClass:$trafficClassTcClass", 'classid',"$majorTcClass:$limitTcClass", 'htb', 'rate', "${rate}kbit", @@ -1242,7 +1244,7 @@ sub _tc_class_add # Function to change a TC class sub _tc_class_change { - my ($changeSet,$interface,$majorTcClass,$classTcClass,$limitTcClass,$rate,$ceil,$trafficPriority) = @_; + my ($changeSet,$interface,$majorTcClass,$trafficClassTcClass,$limitTcClass,$rate,$ceil,$trafficPriority) = @_; # Set burst to a sane value @@ -1252,7 +1254,7 @@ sub _tc_class_change $changeSet->add([ '/sbin/tc','class','change', 'dev',$interface, - 'parent',"$majorTcClass:$classTcClass", + 'parent',"$majorTcClass:$trafficClassTcClass", 'classid',"$majorTcClass:$limitTcClass", 'htb', 'rate', "${rate}kbit", @@ -1264,7 +1266,7 @@ sub _tc_class_change # Get a limit class TC class -sub _reserveLimitTcClass +sub _reserveTcClassByLimitID { my ($interface,$lid) = @_; @@ -1273,7 +1275,7 @@ sub _reserveLimitTcClass # Get a traffic class TC class -sub _reserveClassTcClass +sub _reserveTcClassByClassID { my ($interface,$classID) = @_; @@ -1283,7 +1285,7 @@ sub _reserveClassTcClass # Get a prio class TC class # This is a MAJOR class! -sub _reservePrioTcClass +sub _reserveMajorTcClassByPrioClass { my ($interface,$classID) = @_; @@ -1292,7 +1294,7 @@ sub _reservePrioTcClass # Return TC class using class -sub _getClassTcClass +sub _getTcClassFromClassID { my ($interface,$classID) = @_; -- GitLab