3 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
5 * This program and the accompanying materials are made available under the
6 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7 * and is available at http://www.eclipse.org/legal/epl-v10.html
10 package org.opendaylight.controller.protocol_plugin.openflow.internal;
12 import java.util.ArrayList;
13 import java.util.List;
15 import org.opendaylight.controller.protocol_plugin.openflow.vendorextension.v6extension.V6StatsReply;
16 import org.openflow.protocol.statistics.OFFlowStatisticsReply;
17 import org.openflow.protocol.statistics.OFStatistics;
19 import org.opendaylight.controller.sal.core.Node;
20 import org.opendaylight.controller.sal.flowprogrammer.Flow;
21 import org.opendaylight.controller.sal.reader.FlowOnNode;
24 * Converts an openflow list of flow statistics in a SAL list of FlowOnNode objects
29 public class FlowStatisticsConverter {
30 private List<OFStatistics> ofStatsList;
31 private List<FlowOnNode> flowOnNodeList;
33 public FlowStatisticsConverter(List<OFStatistics> statsList) {
34 if (statsList == null) {// || statsList.isEmpty()) {
35 this.ofStatsList = new ArrayList<OFStatistics>(1); // dummy list
37 this.ofStatsList = statsList; //new ArrayList<OFStatistics>(statsList);
39 this.flowOnNodeList = null;
42 public List<FlowOnNode> getFlowOnNodeList(Node node) {
43 if (ofStatsList != null && flowOnNodeList == null) {
44 flowOnNodeList = new ArrayList<FlowOnNode>();
45 FlowConverter flowConverter = null;
46 OFFlowStatisticsReply ofFlowStat;
47 V6StatsReply v6StatsReply;
48 for (OFStatistics ofStat : ofStatsList) {
49 FlowOnNode flowOnNode = null;
50 if (ofStat instanceof OFFlowStatisticsReply) {
51 ofFlowStat = (OFFlowStatisticsReply) ofStat;
52 flowConverter = new FlowConverter(ofFlowStat.getMatch(),
53 ofFlowStat.getActions());
54 Flow flow = flowConverter.getFlow(node);
55 flow.setPriority(ofFlowStat.getPriority());
56 flow.setIdleTimeout(ofFlowStat.getIdleTimeout());
57 flow.setHardTimeout(ofFlowStat.getHardTimeout());
58 flowOnNode = new FlowOnNode(flow);
59 flowOnNode.setByteCount(ofFlowStat.getByteCount());
60 flowOnNode.setPacketCount(ofFlowStat.getPacketCount());
61 flowOnNode.setDurationSeconds(ofFlowStat
62 .getDurationSeconds());
63 flowOnNode.setDurationNanoseconds(ofFlowStat
64 .getDurationNanoseconds());
65 } else if (ofStat instanceof V6StatsReply) {
66 v6StatsReply = (V6StatsReply) ofStat;
67 flowConverter = new FlowConverter(v6StatsReply.getMatch(),
68 v6StatsReply.getActions());
69 Flow flow = flowConverter.getFlow(node);
70 flow.setPriority(v6StatsReply.getPriority());
71 flow.setIdleTimeout(v6StatsReply.getIdleTimeout());
72 flow.setHardTimeout(v6StatsReply.getHardTimeout());
73 flowOnNode = new FlowOnNode(flow);
74 flowOnNode.setByteCount(v6StatsReply.getByteCount());
75 flowOnNode.setPacketCount(v6StatsReply.getPacketCount());
76 flowOnNode.setDurationSeconds(v6StatsReply
77 .getDurationSeconds());
78 flowOnNode.setDurationNanoseconds(v6StatsReply
79 .getDurationNanoseconds());
83 flowOnNodeList.add(flowOnNode);
86 return flowOnNodeList;