Open Kilda Java Documentation
ISwitchImpl.java
Go to the documentation of this file.
1 package org.openkilda.simulator.classes;
2 
8 
9 import org.projectfloodlight.openflow.types.DatapathId;
10 
11 import java.util.ArrayList;
12 import java.util.HashMap;
13 import java.util.List;
14 import java.util.Map;
15 
16 public class ISwitchImpl implements ISwitch {
17  private DatapathId dpid;
18  private List<IPortImpl> ports = new ArrayList<>();
19  private Map<Long, IFlow> flows = new HashMap<>();
20  private int controlPlaneLatency = 0;
21  private SwitchState state = SwitchState.DEACTIVATED;
22  private int maxPorts = 0;
23 
24  public ISwitchImpl() throws SimulatorException {
25  this(new SwitchId("00"));
26  }
27 
28  public ISwitchImpl(SwitchId dpid) throws SimulatorException {
29  this(dpid, 0, PortStateType.DOWN);
30  }
31 
32  public ISwitchImpl(SwitchId dpid, int numOfPorts, PortStateType portState) throws SimulatorException {
33  setDpid(dpid);
34  maxPorts = numOfPorts;
35  int count = 0;
36  while (count < numOfPorts) {
37  IPortImpl port = new IPortImpl(this, portState, ports.size());
38  addPort(port);
39  count++;
40  }
41  }
42 
43  @Override
44  public void modState(SwitchState state) throws SimulatorException {
45  this.state = state;
46 
47  switch (state) {
48  case ADDED:
49  break;
50  case ACTIVATED:
51  activate();
52  break;
53  case DEACTIVATED:
54  case REMOVED:
55  deactivate();
56  break;
57  case CHANGED:
58  throw new SimulatorException("Received modState of CHANGED, no idea why");
59  default:
60  throw new SimulatorException(String.format("Unknown state %s", state));
61  }
62  }
63 
64  @Override
65  public void activate() {
66  state = SwitchState.ACTIVATED;
67  }
68 
69  @Override
70  public void deactivate() {
71  state = SwitchState.DEACTIVATED;
72  }
73 
74  @Override
75  public boolean isActive() {
76  return state == SwitchState.ACTIVATED ? true : false;
77  }
78 
79  @Override
80  public int getControlPlaneLatency() {
81  return controlPlaneLatency;
82  }
83 
84  @Override
85  public void setControlPlaneLatency(int controlPlaneLatency) {
86  this.controlPlaneLatency = controlPlaneLatency;
87  }
88 
89  @Override
90  public DatapathId getDpid() {
91  return dpid;
92  }
93 
94  @Override
95  public String getDpidAsString() {
96  return dpid.toString();
97  }
98 
99  @Override
100  public void setDpid(DatapathId dpid) {
101  this.dpid = dpid;
102  }
103 
104  @Override
105  public void setDpid(SwitchId dpid) {
106  this.dpid = DatapathId.of(dpid.toString());
107  }
108 
109  @Override
110  public List<IPortImpl> getPorts() {
111  return ports;
112  }
113 
114  @Override
115  public IPortImpl getPort(int portNum) throws SimulatorException {
116  try {
117  return ports.get(portNum);
118  } catch (IndexOutOfBoundsException e) {
119  throw new SimulatorException(String.format("Port %d is not defined on %s", portNum, getDpidAsString()));
120  }
121  }
122 
123  @Override
125  if (ports.size() < maxPorts) {
126  ports.add(port);
127  } else {
128  throw new SimulatorException(String.format("Switch already has reached maxPorts of %d"
129  + "", maxPorts));
130  }
131  return port.getNumber();
132  }
133 
134  @Override
135  public int getMaxPorts() {
136  return maxPorts;
137  }
138 
139  @Override
140  public void setMaxPorts(int maxPorts) {
141  this.maxPorts = maxPorts;
142  }
143 
144  @Override
145  public Map<Long, IFlow> getFlows() {
146  return flows;
147  }
148 
149  @Override
150  public IFlow getFlow(long cookie) throws SimulatorException {
151  try {
152  return flows.get(cookie);
153  } catch (IndexOutOfBoundsException e) {
154  throw new SimulatorException(String.format("Flow %d could not be found.", cookie));
155  }
156  }
157 
158  @Override
159  public void addFlow(IFlow flow) throws SimulatorException {
160  if (flows.containsKey(flow.getCookie())) {
161  throw new SimulatorException(String.format("Flow %s already exists.", flow.toString()));
162  }
163  flows.put(flow.getCookie(), flow);
164  }
165 
166  @Override
167  public void modFlow(IFlow flow) throws SimulatorException {
168  delFlow(flow.getCookie());
169  addFlow(flow);
170  }
171 
172  @Override
173  public void delFlow(long cookie) throws SimulatorException {
174  flows.remove(cookie);
175  }
176 
177  @Override
178  public List<PortStatsEntry> getPortStats() {
179  return null;
180  }
181 
182  @Override
183  public PortStatsEntry getPortStats(int portNum) {
184  return null;
185  }
186 }
ISwitchImpl(SwitchId dpid, int numOfPorts, PortStateType portState)
int count
Definition: generator.py:19
void setControlPlaneLatency(int controlPlaneLatency)
PortStatsEntry getPortStats(int portNum)