Jonathan Hart | 472062d | 2014-04-03 10:56:48 -0700 | [diff] [blame] | 1 | package net.onrc.onos.core.topology; |
Jonathan Hart | 062a2e8 | 2014-02-03 09:41:57 -0800 | [diff] [blame] | 2 | |
Yuta HIGUCHI | db1b830 | 2014-06-26 10:50:39 -0700 | [diff] [blame] | 3 | import java.util.Map; |
4 | |||||
Yuta HIGUCHI | 02ccb8c | 2014-07-10 11:29:45 -0700 | [diff] [blame] | 5 | import net.onrc.onos.core.util.LinkTuple; |
6 | |||||
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 7 | import org.apache.commons.lang.Validate; |
Jonathan Hart | 25bd53e | 2014-04-30 23:44:09 -0700 | [diff] [blame] | 8 | |
Yuta HIGUCHI | 181d34d | 2014-02-05 15:05:46 -0800 | [diff] [blame] | 9 | /** |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 10 | * Handler to Link object stored in In-memory Topology snapshot. |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 11 | * <p/> |
Yuta HIGUCHI | 181d34d | 2014-02-05 15:05:46 -0800 | [diff] [blame] | 12 | */ |
Jonathan Hart | e37e4e2 | 2014-05-13 19:12:02 -0700 | [diff] [blame] | 13 | public class LinkImpl extends TopologyObject implements Link { |
Yuta HIGUCHI | 181d34d | 2014-02-05 15:05:46 -0800 | [diff] [blame] | 14 | |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 15 | private final LinkTuple id; |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 16 | |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 17 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 18 | /** |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 19 | * Creates a Link handler object. |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 20 | * |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 21 | * @param topology Topology instance this object belongs to |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 22 | * @param linkTuple Link identifier |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 23 | */ |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 24 | LinkImpl(TopologyInternal topology, LinkTuple linkTuple) { |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 25 | super(topology); |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 26 | Validate.notNull(linkTuple); |
27 | this.id = linkTuple; | ||||
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 28 | } |
Toshio Koide | 2f570c1 | 2014-02-06 16:55:32 -0800 | [diff] [blame] | 29 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 30 | @Override |
Yuta HIGUCHI | 02ccb8c | 2014-07-10 11:29:45 -0700 | [diff] [blame] | 31 | public LinkTuple getLinkTuple() { |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 32 | return id; |
Yuta HIGUCHI | 02ccb8c | 2014-07-10 11:29:45 -0700 | [diff] [blame] | 33 | } |
34 | |||||
35 | @Override | ||||
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 36 | public Switch getSrcSwitch() { |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 37 | topology.acquireReadLock(); |
38 | try { | ||||
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 39 | return topology.getSwitch(id.getSrc().getDpid()); |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 40 | } finally { |
41 | topology.releaseReadLock(); | ||||
42 | } | ||||
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 43 | } |
Pavlin Radoslavov | 7c8f69a | 2014-02-19 19:01:45 -0800 | [diff] [blame] | 44 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 45 | @Override |
46 | public Port getSrcPort() { | ||||
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 47 | topology.acquireReadLock(); |
48 | try { | ||||
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 49 | return topology.getPort(id.getSrc()); |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 50 | } finally { |
51 | topology.releaseReadLock(); | ||||
52 | } | ||||
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 53 | } |
Pavlin Radoslavov | 7c8f69a | 2014-02-19 19:01:45 -0800 | [diff] [blame] | 54 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 55 | @Override |
56 | public Switch getDstSwitch() { | ||||
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 57 | topology.acquireReadLock(); |
58 | try { | ||||
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 59 | return topology.getSwitch(id.getDst().getDpid()); |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 60 | } finally { |
61 | topology.releaseReadLock(); | ||||
62 | } | ||||
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 63 | } |
Pavlin Radoslavov | 7c8f69a | 2014-02-19 19:01:45 -0800 | [diff] [blame] | 64 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 65 | @Override |
66 | public Port getDstPort() { | ||||
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 67 | topology.acquireReadLock(); |
68 | try { | ||||
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 69 | return topology.getPort(id.getDst()); |
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 70 | } finally { |
71 | topology.releaseReadLock(); | ||||
72 | } | ||||
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 73 | } |
Jonathan Hart | 062a2e8 | 2014-02-03 09:41:57 -0800 | [diff] [blame] | 74 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 75 | @Override |
76 | public long getLastSeenTime() { | ||||
77 | // TODO Auto-generated method stub | ||||
Yuta HIGUCHI | bf0a871 | 2014-06-30 18:59:46 -0700 | [diff] [blame] | 78 | throw new UnsupportedOperationException("Not implemented yet"); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 79 | } |
Yuta HIGUCHI | 181d34d | 2014-02-05 15:05:46 -0800 | [diff] [blame] | 80 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 81 | @Override |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 82 | public Double getCapacity() { |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 83 | return this.topology.getLinkEvent(id).getCapacity(); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 84 | } |
Toshio Koide | 0c9106d | 2014-02-19 15:26:38 -0800 | [diff] [blame] | 85 | |
Praseed Balakrishnan | fa21be1 | 2014-07-15 14:42:26 -0700 | [diff] [blame^] | 86 | /** |
87 | * Returns the link type of the link. | ||||
88 | * | ||||
89 | * @return {@link net.onrc.onos.core.topology.LinkType} for this link | ||||
90 | */ | ||||
91 | @Override | ||||
92 | public LinkType getLinkType() { | ||||
93 | return LinkType.valueOf(getStringAttribute(TopologyElement.ELEMENT_TYPE, | ||||
94 | LinkType.ETHERNET_LINK.toString())); | ||||
95 | } | ||||
96 | |||||
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 97 | @Override |
Yuta HIGUCHI | db1b830 | 2014-06-26 10:50:39 -0700 | [diff] [blame] | 98 | public String getStringAttribute(String attr) { |
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 99 | return this.topology.getLinkEvent(id).getStringAttribute(attr); |
Yuta HIGUCHI | db1b830 | 2014-06-26 10:50:39 -0700 | [diff] [blame] | 100 | } |
101 | |||||
102 | @Override | ||||
Yuta HIGUCHI | db1b830 | 2014-06-26 10:50:39 -0700 | [diff] [blame] | 103 | public String getStringAttribute(String attr, String def) { |
104 | final String v = getStringAttribute(attr); | ||||
105 | if (v == null) { | ||||
106 | return def; | ||||
107 | } else { | ||||
108 | return v; | ||||
109 | } | ||||
110 | } | ||||
111 | |||||
112 | @Override | ||||
113 | public Map<String, String> getAllStringAttributes() { | ||||
Yuta HIGUCHI | 8b389a7 | 2014-07-18 13:50:00 -0700 | [diff] [blame] | 114 | return this.topology.getLinkEvent(id).getAllStringAttributes(); |
Yuta HIGUCHI | db1b830 | 2014-06-26 10:50:39 -0700 | [diff] [blame] | 115 | } |
116 | |||||
117 | @Override | ||||
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 118 | public String toString() { |
119 | return String.format("%s --(cap:%f Mbps)--> %s", | ||||
120 | getSrcPort().toString(), | ||||
121 | getCapacity(), | ||||
122 | getDstPort().toString()); | ||||
123 | } | ||||
Praseed Balakrishnan | 57ed843 | 2014-06-26 11:49:56 -0700 | [diff] [blame] | 124 | |
125 | |||||
126 | /** | ||||
127 | * Returns the type of topology object. | ||||
128 | * | ||||
129 | * @return the type of the topology object | ||||
130 | */ | ||||
131 | @Override | ||||
132 | public String getType() { | ||||
Yuta HIGUCHI | dbc3312 | 2014-07-10 13:32:32 -0700 | [diff] [blame] | 133 | return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET_LAYER); |
Praseed Balakrishnan | 57ed843 | 2014-06-26 11:49:56 -0700 | [diff] [blame] | 134 | } |
Praseed Balakrishnan | 2aa6c0b | 2014-07-17 11:42:05 -0700 | [diff] [blame] | 135 | |
136 | /** | ||||
137 | * Returns the config state of topology element. | ||||
138 | * | ||||
139 | * @return ConfigState | ||||
140 | */ | ||||
141 | @Override | ||||
142 | public ConfigState getConfigState() { | ||||
143 | return ConfigState.valueOf(getStringAttribute(TopologyElement.ELEMENT_CONFIG_STATE)); | ||||
144 | } | ||||
145 | |||||
146 | /** | ||||
147 | * Returns the status of topology element. | ||||
148 | * | ||||
149 | * @return AdminStatus | ||||
150 | */ | ||||
151 | @Override | ||||
152 | public AdminStatus getStatus() { | ||||
153 | return AdminStatus.valueOf(getStringAttribute(TopologyElement.ELEMENT_ADMIN_STATUS)); | ||||
154 | } | ||||
Jonathan Hart | 062a2e8 | 2014-02-03 09:41:57 -0800 | [diff] [blame] | 155 | } |