Skip to content
This repository was archived by the owner on Nov 13, 2023. It is now read-only.

Commit 494338e

Browse files
Sumanth SathyanarayanaSumanth Sathyanarayana
authored andcommitted
Added another variable called actualStats (HashMap) which gets the values from flowStats and will be passed as the statsReply to solve the problem of clearing of the map-flowStats and the flag is set as sent by the switch
1 parent 0988537 commit 494338e

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

src/org/flowvisor/classifier/FVClassifier.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import org.openflow.protocol.OFMessage;
7777
import org.openflow.protocol.OFPhysicalPort;
7878
import org.openflow.protocol.OFPort;
79+
import org.openflow.protocol.OFStatisticsReply.OFStatisticsReplyFlags;
7980
import org.openflow.protocol.OFType;
8081
import org.openflow.protocol.OFError.OFHelloFailedCode;
8182
import org.openflow.protocol.action.OFAction;
@@ -127,6 +128,8 @@ public class FVClassifier implements FVEventHandler, FVSendMsg, FlowMapChangedLi
127128
private boolean statsWindowOpen = true;
128129
private HashMap<String, ArrayList<FVFlowStatisticsReply>> flowStats =
129130
new HashMap<String, ArrayList<FVFlowStatisticsReply>>();
131+
private HashMap<String, ArrayList<FVFlowStatisticsReply>> actualStats =
132+
new HashMap<String, ArrayList<FVFlowStatisticsReply>>();
130133
private ConcurrentLinkedQueue<String> toDeleteSlices = new ConcurrentLinkedQueue<String>();
131134

132135
// OFPP_FLOOD
@@ -984,8 +987,9 @@ public boolean isRateLimited(String sliceName) {
984987

985988
private synchronized ArrayList<FVFlowStatisticsReply> getFlowStats(String sliceName) {
986989
ArrayList<FVFlowStatisticsReply> stats = new ArrayList<FVFlowStatisticsReply>();
987-
if (flowStats.get(sliceName) != null)
988-
stats.addAll(flowStats.get(sliceName));
990+
if (actualStats.get(sliceName) != null)
991+
stats.addAll(actualStats.get(sliceName));
992+
FVLog.log(LogLevel.DEBUG, null, actualStats.toString());
989993
return stats;
990994
}
991995

@@ -1045,7 +1049,7 @@ private boolean matchContainsPort(FVFlowStatisticsReply reply, short outPort) {
10451049
return false;
10461050
}
10471051

1048-
public void sendFlowStatsResp(FVSlicer fvSlicer, FVStatisticsRequest original) {
1052+
public void sendFlowStatsResp(FVSlicer fvSlicer, FVStatisticsRequest original, short flag) {
10491053
FVFlowStatisticsRequest orig = (FVFlowStatisticsRequest) original.getStatistics().get(0);
10501054

10511055

@@ -1069,7 +1073,7 @@ public void sendFlowStatsResp(FVSlicer fvSlicer, FVStatisticsRequest original) {
10691073

10701074
}
10711075
statsReply.setStatistics(stats);
1072-
1076+
statsReply.setFlags(flag);
10731077
statsReply.setXid(original.getXid());
10741078

10751079
statsReply.setVersion(original.getVersion());
@@ -1084,8 +1088,7 @@ public void sendFlowStatsResp(FVSlicer fvSlicer, FVStatisticsRequest original) {
10841088

10851089

10861090
public synchronized void classifyFlowStats(FVStatisticsReply fvStatisticsReply) {
1087-
1088-
flowStats.clear();
1091+
actualStats.clear();
10891092
List<OFStatistics> stats = fvStatisticsReply.getStatistics();
10901093
for (OFStatistics s : stats) {
10911094
FVFlowStatisticsReply stat = (FVFlowStatisticsReply) s;
@@ -1098,6 +1101,11 @@ public synchronized void classifyFlowStats(FVStatisticsReply fvStatisticsReply)
10981101
stat.setCookie(pair.getCookie());
10991102
addToFlowStats(stat, pair.getSliceName());
11001103
}
1104+
actualStats.putAll(flowStats);
1105+
FVLog.log(LogLevel.DEBUG, this, " actualStats: ",actualStats.toString(), "flowStats: ", flowStats.toString());
1106+
if ((fvStatisticsReply.getFlags() != OFStatisticsReplyFlags.REPLY_MORE.getTypeValue()) ){
1107+
flowStats.clear();
1108+
}
11011109
for (String slice : toDeleteSlices) {
11021110
cleanUpFlowMods(slice);
11031111
}

src/org/flowvisor/message/statistics/FVFlowStatisticsReply.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.flowvisor.message.FVStatisticsReply;
99
import org.flowvisor.message.FVStatisticsRequest;
1010
import org.flowvisor.slicer.FVSlicer;
11+
import org.openflow.protocol.OFStatisticsReply.OFStatisticsReplyFlags;
1112
import org.openflow.protocol.statistics.OFFlowStatisticsReply;
1213
import org.openflow.protocol.statistics.OFStatisticsType;
1314

@@ -33,10 +34,14 @@ public void classifyFromSwitch(FVStatisticsReply msg, FVClassifier fvClassifier)
3334
return;
3435
}
3536
FVStatisticsRequest original = (FVStatisticsRequest) pair.getOFMessage();
36-
if (original.getStatisticType() == OFStatisticsType.FLOW)
37-
fvClassifier.sendFlowStatsResp(pair.getSlicer(), original);
38-
else if (original.getStatisticType() == OFStatisticsType.AGGREGATE)
39-
fvClassifier.sendAggStatsResp(pair.getSlicer(), original);
37+
38+
if(msg.getFlags() != OFStatisticsReplyFlags.REPLY_MORE.getTypeValue()){
39+
if (original.getStatisticType() == OFStatisticsType.FLOW)
40+
fvClassifier.sendFlowStatsResp(pair.getSlicer(), original, msg.getFlags());
41+
//fvClassifier.sendFlowStatsResp(pair.getSlicer(), original);
42+
else if (original.getStatisticType() == OFStatisticsType.AGGREGATE)
43+
fvClassifier.sendAggStatsResp(pair.getSlicer(), original);
44+
}
4045
}
4146

4247

src/org/flowvisor/message/statistics/FVFlowStatisticsRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void sliceFromController(FVStatisticsRequest msg, FVClassifier fvClassifi
2626
FVSlicer fvSlicer) {
2727
FVMessageUtil.translateXidMsg(msg,fvClassifier, fvSlicer);
2828
if (!fvClassifier.pollFlowTableStats(msg))
29-
fvClassifier.sendFlowStatsResp(fvSlicer, msg);
29+
fvClassifier.sendFlowStatsResp(fvSlicer, msg, (short)0);
3030

3131
}
3232

0 commit comments

Comments
 (0)