blob: 5f964141ebbd5a470bdb39bf5b8285a897c9dabf [file] [log] [blame]
HIGUCHI Yuta356086e2013-06-12 15:21:19 -07001package net.onrc.onos.ofcontroller.util;
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -08002
3import java.util.ArrayList;
4
Pavlin Radoslavovad008e02013-02-21 18:42:42 -08005import org.codehaus.jackson.annotate.JsonProperty;
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -08006
7/**
8 * The class representing the Data Path.
9 */
10public class DataPath {
11 private SwitchPort srcPort; // The source port
12 private SwitchPort dstPort; // The destination port
13 private ArrayList<FlowEntry> flowEntries; // The Flow Entries
14
15 /**
16 * Default constructor.
17 */
18 public DataPath() {
Pavlin Radoslavovb6f53542013-03-01 16:02:14 -080019 srcPort = new SwitchPort();
20 dstPort = new SwitchPort();
Pavlin Radoslavovf83aa442013-02-26 14:09:01 -080021 flowEntries = new ArrayList<FlowEntry>();
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080022 }
23
24 /**
25 * Get the data path source port.
26 *
27 * @return the data path source port.
28 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080029 @JsonProperty("srcPort")
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080030 public SwitchPort srcPort() { return srcPort; }
31
32 /**
33 * Set the data path source port.
34 *
35 * @param srcPort the data path source port to set.
36 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080037 @JsonProperty("srcPort")
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080038 public void setSrcPort(SwitchPort srcPort) {
39 this.srcPort = srcPort;
40 }
41
42 /**
43 * Get the data path destination port.
44 *
45 * @return the data path destination port.
46 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080047 @JsonProperty("dstPort")
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080048 public SwitchPort dstPort() { return dstPort; }
49
50 /**
51 * Set the data path destination port.
52 *
53 * @param dstPort the data path destination port to set.
54 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080055 @JsonProperty("dstPort")
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080056 public void setDstPort(SwitchPort dstPort) {
57 this.dstPort = dstPort;
58 }
59
60 /**
61 * Get the data path flow entries.
62 *
63 * @return the data path flow entries.
64 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080065 @JsonProperty("flowEntries")
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080066 public ArrayList<FlowEntry> flowEntries() { return flowEntries; }
67
68 /**
69 * Set the data path flow entries.
70 *
71 * @param flowEntries the data path flow entries to set.
72 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080073 @JsonProperty("flowEntries")
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080074 public void setFlowEntries(ArrayList<FlowEntry> flowEntries) {
75 this.flowEntries = flowEntries;
76 }
77
78 /**
Pavlin Radoslavovdbaaf2e2013-03-29 04:25:55 -070079 * Get a string with the summary of the shortest-path data path
80 * computation.
81 *
82 * NOTE: This method assumes the DataPath was created by
83 * using FlowManager::getShortestPath() so the inPort and outPort
84 * of the Flow Entries are set.
85 * NOTE: This method is a temporary solution and will be removed
86 * in the future.
87 *
88 * @return a string with the summary of the shortest-path
89 * data path computation if valid, otherwise the string "X".
90 * If the shortest-path was valid, The string has the following form:
91 * inPort/dpid/outPort;inPort/dpid/outPort;...
92 */
93 public String dataPathSummary() {
94 String resultStr = new String();
95 if (this.flowEntries != null) {
96 for (FlowEntry flowEntry : this.flowEntries) {
97 // The data path summary string
98 resultStr = resultStr +
99 flowEntry.inPort().toString() + "/"
100 + flowEntry.dpid().toString() + "/" +
101 flowEntry.outPort().toString() + ";";
102 }
103 }
104 if (resultStr.isEmpty())
105 resultStr = "X"; // Invalid shortest-path
106 return resultStr;
107 }
108
109 /**
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800110 * Convert the data path to a string.
111 *
Pavlin Radoslavovad008e02013-02-21 18:42:42 -0800112 * The string has the following form:
Pavlin Radoslavova10a9a82013-02-22 11:47:54 -0800113 * [src=01:01:01:01:01:01:01:01/1111 flowEntry=<entry1> flowEntry=<entry2> flowEntry=<entry3> dst=02:02:02:02:02:02:02:02/2222]
Pavlin Radoslavovad008e02013-02-21 18:42:42 -0800114 *
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800115 * @return the data path as a string.
116 */
117 @Override
118 public String toString() {
Pavlin Radoslavova10a9a82013-02-22 11:47:54 -0800119 String ret = "[src=" + this.srcPort.toString();
Pavlin Radoslavovad008e02013-02-21 18:42:42 -0800120
121 for (FlowEntry fe : flowEntries) {
Pavlin Radoslavova10a9a82013-02-22 11:47:54 -0800122 ret += " flowEntry=" + fe.toString();
Pavlin Radoslavovad008e02013-02-21 18:42:42 -0800123 }
Pavlin Radoslavova10a9a82013-02-22 11:47:54 -0800124 ret += " dst=" + this.dstPort.toString() + "]";
Pavlin Radoslavovad008e02013-02-21 18:42:42 -0800125
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800126 return ret;
127 }
128}