blob: 9b431713917f9fd6aafd209a315f0806a1573995 [file] [log] [blame]
Jonathan Hart062a2e82014-02-03 09:41:57 -08001package net.onrc.onos.ofcontroller.networkgraph;
2
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -08003/**
4 * Link Object stored in In-memory Topology.
5 *
6 * TODO REMOVE following design memo: This object itself may hold the DBObject,
7 * but this Object itself will not issue any read/write to the DataStore.
8 */
Jonathan Hart062a2e82014-02-03 09:41:57 -08009public class LinkImpl extends NetworkGraphObject implements Link {
Toshio Koide2f570c12014-02-06 16:55:32 -080010 protected Port srcPort;
11 protected Port dstPort;
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080012
Toshio Koide2f570c12014-02-06 16:55:32 -080013 protected static final Double DEFAULT_CAPACITY = Double.POSITIVE_INFINITY;
14 protected Double capacity = DEFAULT_CAPACITY;
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080015
Toshio Koide2f570c12014-02-06 16:55:32 -080016 protected static final int DEFAULT_COST = 1;
17 protected int cost = DEFAULT_COST;
Jonathan Hart891d0502014-02-10 10:04:08 -080018
19 private long srcSwitchDpid;
20 private long srcPortNumber;
21 private long dstSwitchDpid;
22 private long dstPortNumber;
23
24 /**
25 * Constructor for when a new link is being created because of a link
26 * discovery event.
27 * @param graph
28 * @param srcSwitchDpid
29 * @param srcPortNumber
30 * @param dstSwitchDpid
31 * @param dstPortNumber
32 */
33 public LinkImpl(NetworkGraph graph, long srcSwitchDpid, long srcPortNumber,
34 long dstSwitchDpid, long dstPortNumber) {
35 super(graph);
36
37 this.srcSwitchDpid = srcSwitchDpid;
38 this.srcPortNumber = srcPortNumber;
39 this.dstSwitchDpid = dstSwitchDpid;
40 this.dstPortNumber = dstPortNumber;
41 }
Jonathan Hart062a2e82014-02-03 09:41:57 -080042
Jonathan Hart891d0502014-02-10 10:04:08 -080043 /**
44 * Constructor for when a link is read from the database and the Ports
45 * already exist in the in-memory network graph.
46 * @param graph
47 * @param srcPort
48 * @param dstPort
49 */
Toshio Koide2f570c12014-02-06 16:55:32 -080050 public LinkImpl(NetworkGraph graph, Port srcPort, Port dstPort) {
Jonathan Hart062a2e82014-02-03 09:41:57 -080051 super(graph);
Toshio Koide2f570c12014-02-06 16:55:32 -080052 this.srcPort = srcPort;
53 this.dstPort = dstPort;
54 setToPorts();
55 }
56
57 protected void setToPorts() {
58 ((PortImpl)srcPort).setOutgoingLink(this);
59 ((PortImpl)srcPort).setIncomingLink(this);
60 }
61
62 protected void unsetFromPorts() {
63 ((PortImpl)srcPort).setOutgoingLink(null);
64 ((PortImpl)srcPort).setIncomingLink(null);
Jonathan Hart062a2e82014-02-03 09:41:57 -080065 }
66
67 @Override
68 public Port getSourcePort() {
Toshio Koide2f570c12014-02-06 16:55:32 -080069 return srcPort;
Jonathan Hart062a2e82014-02-03 09:41:57 -080070 }
71
72 @Override
73 public Port getDestinationPort() {
Toshio Koide2f570c12014-02-06 16:55:32 -080074 return dstPort;
Jonathan Hart062a2e82014-02-03 09:41:57 -080075 }
76
77 @Override
78 public Switch getSourceSwitch() {
Toshio Koide2f570c12014-02-06 16:55:32 -080079 return srcPort.getSwitch();
Jonathan Hart062a2e82014-02-03 09:41:57 -080080 }
81
82 @Override
83 public Switch getDestinationSwitch() {
Toshio Koide2f570c12014-02-06 16:55:32 -080084 return dstPort.getSwitch();
Jonathan Hart062a2e82014-02-03 09:41:57 -080085 }
86
87 @Override
88 public long getLastSeenTime() {
89 // TODO Auto-generated method stub
90 return 0;
91 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080092
Jonathan Hart062a2e82014-02-03 09:41:57 -080093 @Override
94 public int getCost() {
95 return cost;
96 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080097
Jonathan Hart062a2e82014-02-03 09:41:57 -080098 public void setCost(int cost) {
99 this.cost = cost;
100 }
101
102 @Override
Toshio Koide2f570c12014-02-06 16:55:32 -0800103 public Long getSourceSwitchDpid() {
Jonathan Hart891d0502014-02-10 10:04:08 -0800104 return srcSwitchDpid;
Jonathan Hart062a2e82014-02-03 09:41:57 -0800105 }
106
107 @Override
Toshio Koide2f570c12014-02-06 16:55:32 -0800108 public Long getSourcePortNumber() {
Jonathan Hart891d0502014-02-10 10:04:08 -0800109 return srcPortNumber;
Jonathan Hart062a2e82014-02-03 09:41:57 -0800110 }
111
Toshio Koide2f570c12014-02-06 16:55:32 -0800112 @Override
113 public Long getDestinationSwitchDpid() {
Jonathan Hart891d0502014-02-10 10:04:08 -0800114 return dstSwitchDpid;
Jonathan Hart062a2e82014-02-03 09:41:57 -0800115 }
116
117 @Override
Toshio Koide2f570c12014-02-06 16:55:32 -0800118 public Long getDestinationPortNumber() {
Jonathan Hart891d0502014-02-10 10:04:08 -0800119 return dstPortNumber;
Jonathan Hart062a2e82014-02-03 09:41:57 -0800120 }
121
Toshio Koide2f570c12014-02-06 16:55:32 -0800122 @Override
123 public Double getCapacity() {
124 return capacity;
125 }
126
127 @Override
128 public String toString() {
129 return String.format("%s --(cap:%f Mbps)--> %s",
130 getSourcePort().toString(),
131 getCapacity(),
132 getDestinationPort().toString());
Jonathan Hart062a2e82014-02-03 09:41:57 -0800133 }
134
Toshio Koide2f570c12014-02-06 16:55:32 -0800135 public void setCapacity(Double capacity) {
136 this.capacity = capacity;
137 }
Jonathan Hart062a2e82014-02-03 09:41:57 -0800138}