alshabib
Committed by Gerrit Code Review

method to annotate a device during driver init

Change-Id: I446a7444edcb98347694b8b568e65fa3614880a3
...@@ -16,10 +16,19 @@ ...@@ -16,10 +16,19 @@
16 package org.onosproject.driver.pipeline; 16 package org.onosproject.driver.pipeline;
17 17
18 import org.onlab.osgi.ServiceDirectory; 18 import org.onlab.osgi.ServiceDirectory;
19 +import org.onosproject.net.DefaultAnnotations;
20 +import org.onosproject.net.Device;
19 import org.onosproject.net.DeviceId; 21 import org.onosproject.net.DeviceId;
22 +import org.onosproject.net.MastershipRole;
20 import org.onosproject.net.PortNumber; 23 import org.onosproject.net.PortNumber;
21 import org.onosproject.net.behaviour.Pipeliner; 24 import org.onosproject.net.behaviour.Pipeliner;
22 import org.onosproject.net.behaviour.PipelinerContext; 25 import org.onosproject.net.behaviour.PipelinerContext;
26 +import org.onosproject.net.device.DefaultDeviceDescription;
27 +import org.onosproject.net.device.DeviceDescription;
28 +import org.onosproject.net.device.DeviceProvider;
29 +import org.onosproject.net.device.DeviceProviderRegistry;
30 +import org.onosproject.net.device.DeviceProviderService;
31 +import org.onosproject.net.device.DeviceService;
23 import org.onosproject.net.driver.AbstractHandlerBehaviour; 32 import org.onosproject.net.driver.AbstractHandlerBehaviour;
24 import org.onosproject.net.flow.DefaultFlowRule; 33 import org.onosproject.net.flow.DefaultFlowRule;
25 import org.onosproject.net.flow.DefaultTrafficTreatment; 34 import org.onosproject.net.flow.DefaultTrafficTreatment;
...@@ -34,8 +43,11 @@ import org.onosproject.net.flowobjective.FilteringObjective; ...@@ -34,8 +43,11 @@ import org.onosproject.net.flowobjective.FilteringObjective;
34 import org.onosproject.net.flowobjective.ForwardingObjective; 43 import org.onosproject.net.flowobjective.ForwardingObjective;
35 import org.onosproject.net.flowobjective.NextObjective; 44 import org.onosproject.net.flowobjective.NextObjective;
36 import org.onosproject.net.flowobjective.ObjectiveError; 45 import org.onosproject.net.flowobjective.ObjectiveError;
46 +import org.onosproject.net.provider.AbstractProvider;
47 +import org.onosproject.net.provider.ProviderId;
37 import org.slf4j.Logger; 48 import org.slf4j.Logger;
38 49
50 +import static com.google.common.base.Preconditions.checkNotNull;
39 import static org.slf4j.LoggerFactory.getLogger; 51 import static org.slf4j.LoggerFactory.getLogger;
40 52
41 /** 53 /**
...@@ -45,21 +57,35 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { ...@@ -45,21 +57,35 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner {
45 57
46 private final Logger log = getLogger(getClass()); 58 private final Logger log = getLogger(getClass());
47 59
60 + static final ProviderId PID = new ProviderId("olt", "org.onosproject.olt", true);
61 +
62 + static final String DEVICE = "isAccess";
63 + static final String OLT = "true";
64 +
48 private ServiceDirectory serviceDirectory; 65 private ServiceDirectory serviceDirectory;
49 private FlowRuleService flowRuleService; 66 private FlowRuleService flowRuleService;
50 private DeviceId deviceId; 67 private DeviceId deviceId;
51 68
69 + private DeviceProvider provider = new AnnotationProvider();
70 +
52 71
53 @Override 72 @Override
54 public void init(DeviceId deviceId, PipelinerContext context) { 73 public void init(DeviceId deviceId, PipelinerContext context) {
55 this.serviceDirectory = context.directory(); 74 this.serviceDirectory = context.directory();
56 this.deviceId = deviceId; 75 this.deviceId = deviceId;
57 - 76 + DeviceProviderRegistry registry =
77 + serviceDirectory.get(DeviceProviderRegistry.class);
58 flowRuleService = serviceDirectory.get(FlowRuleService.class); 78 flowRuleService = serviceDirectory.get(FlowRuleService.class);
59 79
60 - } 80 + try {
61 - 81 + DeviceProviderService providerService = registry.register(provider);
82 + providerService.deviceConnected(deviceId,
83 + description(deviceId, DEVICE, OLT));
84 + } finally {
85 + registry.unregister(provider);
86 + }
62 87
88 + }
63 89
64 @Override 90 @Override
65 public void filter(FilteringObjective filter) { 91 public void filter(FilteringObjective filter) {
...@@ -147,4 +173,52 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { ...@@ -147,4 +173,52 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner {
147 throw new UnsupportedOperationException("Single table does not next hop."); 173 throw new UnsupportedOperationException("Single table does not next hop.");
148 } 174 }
149 175
176 + /**
177 + * Build a device description.
178 + * @param deviceId a deviceId
179 + * @param key the key of the annotation
180 + * @param value the value for the annotation
181 + * @return a device description
182 + */
183 + private DeviceDescription description(DeviceId deviceId, String key, String value) {
184 + DeviceService deviceService = serviceDirectory.get(DeviceService.class);
185 + Device device = deviceService.getDevice(deviceId);
186 +
187 + checkNotNull(device, "Device not found in device service.");
188 +
189 + DefaultAnnotations.Builder builder = DefaultAnnotations.builder();
190 + if (value != null) {
191 + builder.set(key, value);
192 + } else {
193 + builder.remove(key);
194 + }
195 + return new DefaultDeviceDescription(device.id().uri(), device.type(),
196 + device.manufacturer(), device.hwVersion(),
197 + device.swVersion(), device.serialNumber(),
198 + device.chassisId(), builder.build());
199 + }
200 +
201 + /**
202 + * Simple ancillary provider used to annotate device.
203 + */
204 + private static final class AnnotationProvider
205 + extends AbstractProvider implements DeviceProvider {
206 + private AnnotationProvider() {
207 + super(PID);
208 + }
209 +
210 + @Override
211 + public void triggerProbe(DeviceId deviceId) {
212 + }
213 +
214 + @Override
215 + public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
216 + }
217 +
218 + @Override
219 + public boolean isReachable(DeviceId deviceId) {
220 + return false;
221 + }
222 + }
223 +
150 } 224 }
......