CNlucius
Committed by Gerrit Code Review

ONOS-2624

Fix host annotations of host description

Change-Id: I4822741e8cdef5c9620f5f2b8cf260fc0f523bf9
1 -package org.onosproject.store.host.impl; 1 +package org.onosproject.store.host.impl;
2 - 2 +
3 -import static com.google.common.base.Preconditions.checkNotNull; 3 +import static com.google.common.base.Preconditions.checkNotNull;
4 -import static org.onosproject.net.DefaultAnnotations.merge; 4 +import static org.onosproject.net.DefaultAnnotations.merge;
5 -import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED; 5 +import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
6 -import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED; 6 +import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
7 -import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED; 7 +import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
8 -import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.PUT; 8 +import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.PUT;
9 -import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.REMOVE; 9 +import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.REMOVE;
10 -import static org.slf4j.LoggerFactory.getLogger; 10 +import static org.slf4j.LoggerFactory.getLogger;
11 - 11 +
12 -import java.util.Collection; 12 +import java.util.Collection;
13 -import java.util.Collections; 13 +import java.util.Collections;
14 -import java.util.Objects; 14 +import java.util.Objects;
15 -import java.util.Set; 15 +import java.util.Set;
16 -import java.util.function.Predicate; 16 +import java.util.function.Predicate;
17 -import java.util.stream.Collectors; 17 +import java.util.stream.Collectors;
18 - 18 +
19 -import org.apache.felix.scr.annotations.Activate; 19 +import org.apache.felix.scr.annotations.Activate;
20 -import org.apache.felix.scr.annotations.Component; 20 +import org.apache.felix.scr.annotations.Component;
21 -import org.apache.felix.scr.annotations.Deactivate; 21 +import org.apache.felix.scr.annotations.Deactivate;
22 -import org.apache.felix.scr.annotations.Reference; 22 +import org.apache.felix.scr.annotations.Reference;
23 -import org.apache.felix.scr.annotations.ReferenceCardinality; 23 +import org.apache.felix.scr.annotations.ReferenceCardinality;
24 -import org.apache.felix.scr.annotations.Service; 24 +import org.apache.felix.scr.annotations.Service;
25 -import org.onlab.packet.IpAddress; 25 +import org.onlab.packet.IpAddress;
26 -import org.onlab.packet.MacAddress; 26 +import org.onlab.packet.MacAddress;
27 -import org.onlab.packet.VlanId; 27 +import org.onlab.packet.VlanId;
28 -import org.onlab.util.KryoNamespace; 28 +import org.onlab.util.KryoNamespace;
29 -import org.onosproject.net.Annotations; 29 +import org.onosproject.net.Annotations;
30 -import org.onosproject.net.ConnectPoint; 30 +import org.onosproject.net.ConnectPoint;
31 -import org.onosproject.net.DefaultAnnotations; 31 +import org.onosproject.net.DefaultAnnotations;
32 -import org.onosproject.net.DefaultHost; 32 +import org.onosproject.net.DefaultHost;
33 -import org.onosproject.net.DeviceId; 33 +import org.onosproject.net.DeviceId;
34 -import org.onosproject.net.Host; 34 +import org.onosproject.net.Host;
35 -import org.onosproject.net.HostId; 35 +import org.onosproject.net.HostId;
36 -import org.onosproject.net.host.HostDescription; 36 +import org.onosproject.net.host.HostDescription;
37 -import org.onosproject.net.host.HostEvent; 37 +import org.onosproject.net.host.HostEvent;
38 -import org.onosproject.net.host.HostStore; 38 +import org.onosproject.net.host.HostStore;
39 -import org.onosproject.net.host.HostStoreDelegate; 39 +import org.onosproject.net.host.HostStoreDelegate;
40 -import org.onosproject.net.host.PortAddresses; 40 +import org.onosproject.net.host.PortAddresses;
41 -import org.onosproject.net.host.HostEvent.Type; 41 +import org.onosproject.net.host.HostEvent.Type;
42 -import org.onosproject.net.provider.ProviderId; 42 +import org.onosproject.net.provider.ProviderId;
43 -import org.onosproject.store.AbstractStore; 43 +import org.onosproject.store.AbstractStore;
44 -import org.onosproject.store.serializers.KryoNamespaces; 44 +import org.onosproject.store.serializers.KryoNamespaces;
45 -import org.onosproject.store.service.EventuallyConsistentMap; 45 +import org.onosproject.store.service.EventuallyConsistentMap;
46 -import org.onosproject.store.service.EventuallyConsistentMapEvent; 46 +import org.onosproject.store.service.EventuallyConsistentMapEvent;
47 -import org.onosproject.store.service.EventuallyConsistentMapListener; 47 +import org.onosproject.store.service.EventuallyConsistentMapListener;
48 -import org.onosproject.store.service.LogicalClockService; 48 +import org.onosproject.store.service.LogicalClockService;
49 -import org.onosproject.store.service.StorageService; 49 +import org.onosproject.store.service.StorageService;
50 -import org.slf4j.Logger; 50 +import org.slf4j.Logger;
51 - 51 +
52 -import com.google.common.collect.HashMultimap; 52 +import com.google.common.collect.HashMultimap;
53 -import com.google.common.collect.ImmutableMultimap; 53 +import com.google.common.collect.ImmutableMultimap;
54 -import com.google.common.collect.ImmutableSet; 54 +import com.google.common.collect.ImmutableSet;
55 -import com.google.common.collect.Multimaps; 55 +import com.google.common.collect.Multimaps;
56 -import com.google.common.collect.SetMultimap; 56 +import com.google.common.collect.SetMultimap;
57 -import com.google.common.collect.Sets; 57 +import com.google.common.collect.Sets;
58 - 58 +
59 -/** 59 +/**
60 - * Manages the inventory of hosts using a {@code EventuallyConsistentMap}. 60 + * Manages the inventory of hosts using a {@code EventuallyConsistentMap}.
61 - */ 61 + */
62 -@Component(immediate = true) 62 +@Component(immediate = true)
63 -@Service 63 +@Service
64 -public class ECHostStore 64 +public class ECHostStore
65 - extends AbstractStore<HostEvent, HostStoreDelegate> 65 + extends AbstractStore<HostEvent, HostStoreDelegate>
66 - implements HostStore { 66 + implements HostStore {
67 - 67 +
68 - private final Logger log = getLogger(getClass()); 68 + private final Logger log = getLogger(getClass());
69 - 69 +
70 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 70 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
71 - protected StorageService storageService; 71 + protected StorageService storageService;
72 - 72 +
73 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 73 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
74 - protected LogicalClockService clockService; 74 + protected LogicalClockService clockService;
75 - 75 +
76 - // Hosts tracked by their location 76 + // Hosts tracked by their location
77 - private final SetMultimap<ConnectPoint, Host> locations = 77 + private final SetMultimap<ConnectPoint, Host> locations =
78 - Multimaps.synchronizedSetMultimap( 78 + Multimaps.synchronizedSetMultimap(
79 - HashMultimap.<ConnectPoint, Host>create()); 79 + HashMultimap.<ConnectPoint, Host>create());
80 - 80 +
81 - private final SetMultimap<ConnectPoint, PortAddresses> portAddresses = 81 + private final SetMultimap<ConnectPoint, PortAddresses> portAddresses =
82 - Multimaps.synchronizedSetMultimap( 82 + Multimaps.synchronizedSetMultimap(
83 - HashMultimap.<ConnectPoint, PortAddresses>create()); 83 + HashMultimap.<ConnectPoint, PortAddresses>create());
84 - 84 +
85 - private EventuallyConsistentMap<HostId, DefaultHost> hosts; 85 + private EventuallyConsistentMap<HostId, DefaultHost> hosts;
86 - 86 +
87 - private EventuallyConsistentMapListener<HostId, DefaultHost> hostLocationTracker = 87 + private EventuallyConsistentMapListener<HostId, DefaultHost> hostLocationTracker =
88 - new HostLocationTracker(); 88 + new HostLocationTracker();
89 - 89 +
90 - @Activate 90 + @Activate
91 - public void activate() { 91 + public void activate() {
92 - KryoNamespace.Builder hostSerializer = KryoNamespace.newBuilder() 92 + KryoNamespace.Builder hostSerializer = KryoNamespace.newBuilder()
93 - .register(KryoNamespaces.API); 93 + .register(KryoNamespaces.API);
94 - 94 +
95 - hosts = storageService.<HostId, DefaultHost>eventuallyConsistentMapBuilder() 95 + hosts = storageService.<HostId, DefaultHost>eventuallyConsistentMapBuilder()
96 - .withName("onos-hosts") 96 + .withName("onos-hosts")
97 - .withSerializer(hostSerializer) 97 + .withSerializer(hostSerializer)
98 - .withTimestampProvider((k, v) -> clockService.getTimestamp()) 98 + .withTimestampProvider((k, v) -> clockService.getTimestamp())
99 - .build(); 99 + .build();
100 - 100 +
101 - hosts.addListener(hostLocationTracker); 101 + hosts.addListener(hostLocationTracker);
102 - 102 +
103 - log.info("Started"); 103 + log.info("Started");
104 - } 104 + }
105 - 105 +
106 - @Deactivate 106 + @Deactivate
107 - public void deactivate() { 107 + public void deactivate() {
108 - hosts.removeListener(hostLocationTracker); 108 + hosts.removeListener(hostLocationTracker);
109 - hosts.destroy(); 109 + hosts.destroy();
110 - locations.clear(); 110 + locations.clear();
111 - portAddresses.clear(); 111 + portAddresses.clear();
112 - 112 +
113 - log.info("Stopped"); 113 + log.info("Stopped");
114 - } 114 + }
115 - 115 +
116 - @Override 116 + @Override
117 - public HostEvent createOrUpdateHost(ProviderId providerId, 117 + public HostEvent createOrUpdateHost(ProviderId providerId,
118 - HostId hostId, 118 + HostId hostId,
119 - HostDescription hostDescription) { 119 + HostDescription hostDescription) {
120 - DefaultHost currentHost = hosts.get(hostId); 120 + DefaultHost currentHost = hosts.get(hostId);
121 - if (currentHost == null) { 121 + if (currentHost == null) {
122 - DefaultHost newhost = new DefaultHost( 122 + DefaultHost newhost = new DefaultHost(
123 - providerId, 123 + providerId,
124 - hostId, 124 + hostId,
125 - hostDescription.hwAddress(), 125 + hostDescription.hwAddress(),
126 - hostDescription.vlan(), 126 + hostDescription.vlan(),
127 - hostDescription.location(), 127 + hostDescription.location(),
128 - ImmutableSet.copyOf(hostDescription.ipAddress())); 128 + ImmutableSet.copyOf(hostDescription.ipAddress()),
129 - hosts.put(hostId, newhost); 129 + hostDescription.annotations());
130 - return new HostEvent(HOST_ADDED, newhost); 130 + hosts.put(hostId, newhost);
131 - } 131 + return new HostEvent(HOST_ADDED, newhost);
132 - return updateHost(providerId, hostId, hostDescription, currentHost); 132 + }
133 - } 133 + return updateHost(providerId, hostId, hostDescription, currentHost);
134 - 134 + }
135 - @Override 135 +
136 - public HostEvent removeHost(HostId hostId) { 136 + @Override
137 - Host host = hosts.remove(hostId); 137 + public HostEvent removeHost(HostId hostId) {
138 - return host != null ? new HostEvent(HOST_REMOVED, host) : null; 138 + Host host = hosts.remove(hostId);
139 - } 139 + return host != null ? new HostEvent(HOST_REMOVED, host) : null;
140 - 140 + }
141 - @Override 141 +
142 - public int getHostCount() { 142 + @Override
143 - return hosts.size(); 143 + public int getHostCount() {
144 - } 144 + return hosts.size();
145 - 145 + }
146 - @Override 146 +
147 - public Iterable<Host> getHosts() { 147 + @Override
148 - return ImmutableSet.copyOf(hosts.values()); 148 + public Iterable<Host> getHosts() {
149 - } 149 + return ImmutableSet.copyOf(hosts.values());
150 - 150 + }
151 - @Override 151 +
152 - public Host getHost(HostId hostId) { 152 + @Override
153 - return hosts.get(hostId); 153 + public Host getHost(HostId hostId) {
154 - } 154 + return hosts.get(hostId);
155 - 155 + }
156 - @Override 156 +
157 - public Set<Host> getHosts(VlanId vlanId) { 157 + @Override
158 - return filter(hosts.values(), host -> Objects.equals(host.vlan(), vlanId)); 158 + public Set<Host> getHosts(VlanId vlanId) {
159 - } 159 + return filter(hosts.values(), host -> Objects.equals(host.vlan(), vlanId));
160 - 160 + }
161 - @Override 161 +
162 - public Set<Host> getHosts(MacAddress mac) { 162 + @Override
163 - return filter(hosts.values(), host -> Objects.equals(host.mac(), mac)); 163 + public Set<Host> getHosts(MacAddress mac) {
164 - } 164 + return filter(hosts.values(), host -> Objects.equals(host.mac(), mac));
165 - 165 + }
166 - @Override 166 +
167 - public Set<Host> getHosts(IpAddress ip) { 167 + @Override
168 - return filter(hosts.values(), host -> host.ipAddresses().contains(ip)); 168 + public Set<Host> getHosts(IpAddress ip) {
169 - } 169 + return filter(hosts.values(), host -> host.ipAddresses().contains(ip));
170 - 170 + }
171 - @Override 171 +
172 - public Set<Host> getConnectedHosts(ConnectPoint connectPoint) { 172 + @Override
173 - return ImmutableSet.copyOf(locations.get(connectPoint)); 173 + public Set<Host> getConnectedHosts(ConnectPoint connectPoint) {
174 - } 174 + return ImmutableSet.copyOf(locations.get(connectPoint));
175 - 175 + }
176 - @Override 176 +
177 - public Set<Host> getConnectedHosts(DeviceId deviceId) { 177 + @Override
178 - return ImmutableMultimap.copyOf(locations) 178 + public Set<Host> getConnectedHosts(DeviceId deviceId) {
179 - .entries() 179 + return ImmutableMultimap.copyOf(locations)
180 - .stream() 180 + .entries()
181 - .filter(entry -> entry.getKey().deviceId().equals(deviceId)) 181 + .stream()
182 - .map(entry -> entry.getValue()) 182 + .filter(entry -> entry.getKey().deviceId().equals(deviceId))
183 - .collect(Collectors.toSet()); 183 + .map(entry -> entry.getValue())
184 - } 184 + .collect(Collectors.toSet());
185 - 185 + }
186 - @Override 186 +
187 - public void updateAddressBindings(PortAddresses addresses) { 187 + @Override
188 - portAddresses.put(addresses.connectPoint(), addresses); 188 + public void updateAddressBindings(PortAddresses addresses) {
189 - } 189 + portAddresses.put(addresses.connectPoint(), addresses);
190 - 190 + }
191 - @Override 191 +
192 - public void removeAddressBindings(PortAddresses addresses) { 192 + @Override
193 - portAddresses.remove(addresses.connectPoint(), addresses); 193 + public void removeAddressBindings(PortAddresses addresses) {
194 - } 194 + portAddresses.remove(addresses.connectPoint(), addresses);
195 - 195 + }
196 - @Override 196 +
197 - public void clearAddressBindings(ConnectPoint connectPoint) { 197 + @Override
198 - portAddresses.removeAll(connectPoint); 198 + public void clearAddressBindings(ConnectPoint connectPoint) {
199 - } 199 + portAddresses.removeAll(connectPoint);
200 - 200 + }
201 - @Override 201 +
202 - public Set<PortAddresses> getAddressBindings() { 202 + @Override
203 - return ImmutableSet.copyOf(portAddresses.values()); 203 + public Set<PortAddresses> getAddressBindings() {
204 - } 204 + return ImmutableSet.copyOf(portAddresses.values());
205 - 205 + }
206 - @Override 206 +
207 - public Set<PortAddresses> getAddressBindingsForPort(ConnectPoint connectPoint) { 207 + @Override
208 - synchronized (portAddresses) { 208 + public Set<PortAddresses> getAddressBindingsForPort(ConnectPoint connectPoint) {
209 - Set<PortAddresses> addresses = portAddresses.get(connectPoint); 209 + synchronized (portAddresses) {
210 - return addresses == null ? Collections.emptySet() : ImmutableSet.copyOf(addresses); 210 + Set<PortAddresses> addresses = portAddresses.get(connectPoint);
211 - } 211 + return addresses == null ? Collections.emptySet() : ImmutableSet.copyOf(addresses);
212 - } 212 + }
213 - 213 + }
214 - private Set<Host> filter(Collection<DefaultHost> collection, Predicate<DefaultHost> predicate) { 214 +
215 - return collection.stream().filter(predicate).collect(Collectors.toSet()); 215 + private Set<Host> filter(Collection<DefaultHost> collection, Predicate<DefaultHost> predicate) {
216 - } 216 + return collection.stream().filter(predicate).collect(Collectors.toSet());
217 - 217 + }
218 - // checks for type of update to host, sends appropriate event 218 +
219 - private HostEvent updateHost(ProviderId providerId, 219 + // checks for type of update to host, sends appropriate event
220 - HostId hostId, 220 + private HostEvent updateHost(ProviderId providerId,
221 - HostDescription descr, 221 + HostId hostId,
222 - DefaultHost currentHost) { 222 + HostDescription descr,
223 - 223 + DefaultHost currentHost) {
224 - final boolean hostMoved = !currentHost.location().equals(descr.location()); 224 +
225 - if (hostMoved || 225 + final boolean hostMoved = !currentHost.location().equals(descr.location());
226 - !currentHost.ipAddresses().containsAll(descr.ipAddress()) || 226 + if (hostMoved ||
227 - !descr.annotations().keys().isEmpty()) { 227 + !currentHost.ipAddresses().containsAll(descr.ipAddress()) ||
228 - 228 + !descr.annotations().keys().isEmpty()) {
229 - Set<IpAddress> addresses = Sets.newHashSet(currentHost.ipAddresses()); 229 +
230 - addresses.addAll(descr.ipAddress()); 230 + Set<IpAddress> addresses = Sets.newHashSet(currentHost.ipAddresses());
231 - Annotations annotations = merge((DefaultAnnotations) currentHost.annotations(), 231 + addresses.addAll(descr.ipAddress());
232 - descr.annotations()); 232 + Annotations annotations = merge((DefaultAnnotations) currentHost.annotations(),
233 - 233 + descr.annotations());
234 - DefaultHost updatedHost = new DefaultHost(providerId, currentHost.id(), 234 +
235 - currentHost.mac(), currentHost.vlan(), 235 + DefaultHost updatedHost = new DefaultHost(providerId, currentHost.id(),
236 - descr.location(), 236 + currentHost.mac(), currentHost.vlan(),
237 - addresses, 237 + descr.location(),
238 - annotations); 238 + addresses,
239 - 239 + annotations);
240 - // TODO: We need a way to detect conflicting changes and abort update. 240 +
241 - hosts.put(hostId, updatedHost); 241 + // TODO: We need a way to detect conflicting changes and abort update.
242 - locations.remove(currentHost.location(), currentHost); 242 + hosts.put(hostId, updatedHost);
243 - locations.put(updatedHost.location(), updatedHost); 243 + locations.remove(currentHost.location(), currentHost);
244 - 244 + locations.put(updatedHost.location(), updatedHost);
245 - HostEvent.Type eventType = hostMoved ? Type.HOST_MOVED : Type.HOST_UPDATED; 245 +
246 - return new HostEvent(eventType, updatedHost); 246 + HostEvent.Type eventType = hostMoved ? Type.HOST_MOVED : Type.HOST_UPDATED;
247 - } 247 + return new HostEvent(eventType, updatedHost);
248 - return null; 248 + }
249 - } 249 + return null;
250 - 250 + }
251 - private class HostLocationTracker implements EventuallyConsistentMapListener<HostId, DefaultHost> { 251 +
252 - @Override 252 + private class HostLocationTracker implements EventuallyConsistentMapListener<HostId, DefaultHost> {
253 - public void event(EventuallyConsistentMapEvent<HostId, DefaultHost> event) { 253 + @Override
254 - DefaultHost host = checkNotNull(event.value()); 254 + public void event(EventuallyConsistentMapEvent<HostId, DefaultHost> event) {
255 - if (event.type() == PUT) { 255 + DefaultHost host = checkNotNull(event.value());
256 - boolean isNew = locations.put(host.location(), host); 256 + if (event.type() == PUT) {
257 - notifyDelegate(new HostEvent(isNew ? HOST_ADDED : HOST_UPDATED, host)); 257 + boolean isNew = locations.put(host.location(), host);
258 - } else if (event.type() == REMOVE) { 258 + notifyDelegate(new HostEvent(isNew ? HOST_ADDED : HOST_UPDATED, host));
259 - if (locations.remove(host.location(), host)) { 259 + } else if (event.type() == REMOVE) {
260 - notifyDelegate(new HostEvent(HOST_REMOVED, host)); 260 + if (locations.remove(host.location(), host)) {
261 - } 261 + notifyDelegate(new HostEvent(HOST_REMOVED, host));
262 - 262 + }
263 - } 263 +
264 - } 264 + }
265 - } 265 + }
266 -} 266 + }
267 +}
......
1 -/* 1 +/*
2 - * Copyright 2015 Open Networking Laboratory 2 + * Copyright 2015 Open Networking Laboratory
3 - * 3 + *
4 - * Licensed under the Apache License, Version 2.0 (the "License"); 4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License. 5 + * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at 6 + * You may obtain a copy of the License at
7 - * 7 + *
8 - * http://www.apache.org/licenses/LICENSE-2.0 8 + * http://www.apache.org/licenses/LICENSE-2.0
9 - * 9 + *
10 - * Unless required by applicable law or agreed to in writing, software 10 + * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS, 11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and 13 + * See the License for the specific language governing permissions and
14 - * limitations under the License. 14 + * limitations under the License.
15 - */ 15 + */
16 -package org.onosproject.ovsdb.provider.host; 16 +package org.onosproject.ovsdb.provider.host;
17 - 17 +
18 -import static com.google.common.base.Preconditions.checkNotNull; 18 +import static com.google.common.base.Preconditions.checkNotNull;
19 -import static org.onlab.util.Tools.toHex; 19 +import static org.onlab.util.Tools.toHex;
20 -import static org.slf4j.LoggerFactory.getLogger; 20 +import static org.slf4j.LoggerFactory.getLogger;
21 - 21 +
22 -import java.net.URI; 22 +import java.net.URI;
23 -import java.net.URISyntaxException; 23 +import java.net.URISyntaxException;
24 - 24 +
25 -import org.apache.felix.scr.annotations.Activate; 25 +import org.apache.felix.scr.annotations.Activate;
26 -import org.apache.felix.scr.annotations.Component; 26 +import org.apache.felix.scr.annotations.Component;
27 -import org.apache.felix.scr.annotations.Deactivate; 27 +import org.apache.felix.scr.annotations.Deactivate;
28 -import org.apache.felix.scr.annotations.Reference; 28 +import org.apache.felix.scr.annotations.Reference;
29 -import org.apache.felix.scr.annotations.ReferenceCardinality; 29 +import org.apache.felix.scr.annotations.ReferenceCardinality;
30 -import org.apache.felix.scr.annotations.Service; 30 +import org.apache.felix.scr.annotations.Service;
31 -import org.onlab.packet.VlanId; 31 +import org.onlab.packet.VlanId;
32 -import org.onosproject.core.CoreService; 32 +import org.onosproject.core.CoreService;
33 -import org.onosproject.net.DefaultAnnotations; 33 +import org.onosproject.net.DefaultAnnotations;
34 -import org.onosproject.net.DeviceId; 34 +import org.onosproject.net.DeviceId;
35 -import org.onosproject.net.Host; 35 +import org.onosproject.net.Host;
36 -import org.onosproject.net.HostId; 36 +import org.onosproject.net.HostId;
37 -import org.onosproject.net.HostLocation; 37 +import org.onosproject.net.HostLocation;
38 -import org.onosproject.net.PortNumber; 38 +import org.onosproject.net.PortNumber;
39 -import org.onosproject.net.host.DefaultHostDescription; 39 +import org.onosproject.net.SparseAnnotations;
40 -import org.onosproject.net.host.HostDescription; 40 +import org.onosproject.net.host.DefaultHostDescription;
41 -import org.onosproject.net.host.HostProvider; 41 +import org.onosproject.net.host.HostDescription;
42 -import org.onosproject.net.host.HostProviderRegistry; 42 +import org.onosproject.net.host.HostProvider;
43 -import org.onosproject.net.host.HostProviderService; 43 +import org.onosproject.net.host.HostProviderRegistry;
44 -import org.onosproject.net.host.HostService; 44 +import org.onosproject.net.host.HostProviderService;
45 -import org.onosproject.net.provider.AbstractProvider; 45 +import org.onosproject.net.host.HostService;
46 -import org.onosproject.net.provider.ProviderId; 46 +import org.onosproject.net.provider.AbstractProvider;
47 -import org.onosproject.ovsdb.controller.EventSubject; 47 +import org.onosproject.net.provider.ProviderId;
48 -import org.onosproject.ovsdb.controller.OvsdbController; 48 +import org.onosproject.ovsdb.controller.EventSubject;
49 -import org.onosproject.ovsdb.controller.OvsdbEvent; 49 +import org.onosproject.ovsdb.controller.OvsdbController;
50 -import org.onosproject.ovsdb.controller.OvsdbEventListener; 50 +import org.onosproject.ovsdb.controller.OvsdbEvent;
51 -import org.onosproject.ovsdb.controller.OvsdbEventSubject; 51 +import org.onosproject.ovsdb.controller.OvsdbEventListener;
52 -import org.slf4j.Logger; 52 +import org.onosproject.ovsdb.controller.OvsdbEventSubject;
53 - 53 +import org.slf4j.Logger;
54 -/** 54 +
55 - * Provider which uses an ovsdb controller to detect host. 55 +/**
56 - */ 56 + * Provider which uses an ovsdb controller to detect host.
57 -@Component(immediate = true) 57 + */
58 -@Service 58 +@Component(immediate = true)
59 -public class OvsdbHostProvider extends AbstractProvider implements HostProvider { 59 +@Service
60 - private final Logger log = getLogger(getClass()); 60 +public class OvsdbHostProvider extends AbstractProvider implements HostProvider {
61 - 61 + private final Logger log = getLogger(getClass());
62 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 62 +
63 - protected HostProviderRegistry providerRegistry; 63 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
64 - 64 + protected HostProviderRegistry providerRegistry;
65 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 65 +
66 - protected HostService hostService; 66 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
67 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 67 + protected HostService hostService;
68 - protected CoreService coreService; 68 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
69 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 69 + protected CoreService coreService;
70 - protected OvsdbController controller; 70 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
71 - 71 + protected OvsdbController controller;
72 - private HostProviderService providerService; 72 +
73 - private OvsdbEventListener innerEventListener = new InnerOvsdbEventListener(); 73 + private HostProviderService providerService;
74 - 74 + private OvsdbEventListener innerEventListener = new InnerOvsdbEventListener();
75 - @Activate 75 +
76 - public void activate() { 76 + @Activate
77 - providerService = providerRegistry.register(this); 77 + public void activate() {
78 - controller.addOvsdbEventListener(innerEventListener); 78 + providerService = providerRegistry.register(this);
79 - log.info("Started"); 79 + controller.addOvsdbEventListener(innerEventListener);
80 - } 80 + log.info("Started");
81 - 81 + }
82 - @Deactivate 82 +
83 - public void deactivate() { 83 + @Deactivate
84 - providerRegistry.unregister(this); 84 + public void deactivate() {
85 - providerService = null; 85 + providerRegistry.unregister(this);
86 - log.info("Stopped"); 86 + providerService = null;
87 - } 87 + log.info("Stopped");
88 - 88 + }
89 - public OvsdbHostProvider() { 89 +
90 - super(new ProviderId("ovsdb", "org.onosproject.ovsdb.provider.host")); 90 + public OvsdbHostProvider() {
91 - } 91 + super(new ProviderId("ovsdb", "org.onosproject.ovsdb.provider.host"));
92 - 92 + }
93 - @Override 93 +
94 - public void triggerProbe(Host host) { 94 + @Override
95 - log.info("Triggering probe on host {}", host); 95 + public void triggerProbe(Host host) {
96 - } 96 + log.info("Triggering probe on host {}", host);
97 - 97 + }
98 - private class InnerOvsdbEventListener implements OvsdbEventListener { 98 +
99 - 99 + private class InnerOvsdbEventListener implements OvsdbEventListener {
100 - @Override 100 +
101 - public void handle(OvsdbEvent<EventSubject> event) { 101 + @Override
102 - OvsdbEventSubject subject = null; 102 + public void handle(OvsdbEvent<EventSubject> event) {
103 - if (event.subject() instanceof OvsdbEventSubject) { 103 + OvsdbEventSubject subject = null;
104 - subject = (OvsdbEventSubject) event.subject(); 104 + if (event.subject() instanceof OvsdbEventSubject) {
105 - } 105 + subject = (OvsdbEventSubject) event.subject();
106 - checkNotNull(subject, "EventSubject is not null"); 106 + }
107 - // If ifaceid is null,it indicates this is not a vm port. 107 + checkNotNull(subject, "EventSubject is not null");
108 - if (subject.ifaceid() == null) { 108 + // If ifaceid is null,it indicates this is not a vm port.
109 - return; 109 + if (subject.ifaceid() == null) {
110 - } 110 + return;
111 - switch (event.type()) { 111 + }
112 - case PORT_ADDED: 112 + switch (event.type()) {
113 - HostId hostId = HostId.hostId(subject.hwAddress(), null); 113 + case PORT_ADDED:
114 - DeviceId deviceId = DeviceId.deviceId(uri(subject.dpid().value())); 114 + HostId hostId = HostId.hostId(subject.hwAddress(), null);
115 - PortNumber portNumber = PortNumber.portNumber(subject 115 + DeviceId deviceId = DeviceId.deviceId(uri(subject.dpid().value()));
116 - .portNumber().value(), subject.portName().value()); 116 + PortNumber portNumber = PortNumber.portNumber(subject
117 - HostLocation loaction = new HostLocation(deviceId, portNumber, 117 + .portNumber().value(), subject.portName().value());
118 - 0L); 118 + HostLocation loaction = new HostLocation(deviceId, portNumber,
119 - DefaultAnnotations annotations = DefaultAnnotations.builder() 119 + 0L);
120 - .set("ifaceid", subject.ifaceid().value()).build(); 120 + SparseAnnotations annotations = DefaultAnnotations.builder()
121 - HostDescription hostDescription = new DefaultHostDescription( 121 + .set("ifaceid", subject.ifaceid().value()).build();
122 - subject.hwAddress(), 122 + HostDescription hostDescription = new DefaultHostDescription(
123 - VlanId.vlanId(), 123 + subject.hwAddress(),
124 - loaction, 124 + VlanId.vlanId(),
125 - annotations); 125 + loaction,
126 - providerService.hostDetected(hostId, hostDescription); 126 + annotations);
127 - break; 127 + providerService.hostDetected(hostId, hostDescription);
128 - case PORT_REMOVED: 128 + break;
129 - HostId host = HostId.hostId(subject.hwAddress(), null); 129 + case PORT_REMOVED:
130 - providerService.hostVanished(host); 130 + HostId host = HostId.hostId(subject.hwAddress(), null);
131 - break; 131 + providerService.hostVanished(host);
132 - default: 132 + break;
133 - break; 133 + default:
134 - } 134 + break;
135 - 135 + }
136 - } 136 +
137 - 137 + }
138 - } 138 +
139 - 139 + }
140 - public URI uri(String value) { 140 +
141 - try { 141 + public URI uri(String value) {
142 - return new URI("of", toHex(Long.valueOf(value)), null); 142 + try {
143 - } catch (URISyntaxException e) { 143 + return new URI("of", toHex(Long.valueOf(value)), null);
144 - return null; 144 + } catch (URISyntaxException e) {
145 - } 145 + return null;
146 - } 146 + }
147 -} 147 + }
148 +}
......