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