yjimmyy
Committed by Gerrit Code Review

Implement Oplink drivers for port adjacency

Change-Id: I3cdc402c4dac544a7cb48544352df758c416345d
/*
* Copyright 2016-present Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.optical;
import com.google.common.annotations.Beta;
/**
* Collection of keys for annotation for optical devices.
*/
@Beta
public final class OpticalAnnotations {
private OpticalAnnotations() {}
/**
* Annotation key for optical port's target power.
*/
public static final String TARGET_POWER = "targetPower";
/**
* Annotation key for optical port's current power.
*/
public static final String CURRENT_POWER = "currentPower";
/**
* Annotation key for optical port's neighbor's DeviceId#toString().
*/
public static final String NEIGHBOR_ID = "neighborDeviceId";
/**
* Annotation key for optical port's neighbor's PortNumber#toString().
*/
public static final String NEIGHBOR_PORT = "neighborPort";
}
......@@ -15,8 +15,6 @@
*/
package org.onosproject.net;
import com.google.common.annotations.Beta;
/**
* Collection of keys for annotation.
* <p>
......@@ -112,18 +110,6 @@ public final class AnnotationKeys {
public static final String STATIC_LAMBDA = "staticLambda";
/**
* Annotation key for optical port's target power.
*/
@Beta
public static final String TARGET_POWER = "targetPower";
/**
* Annotation key for optical port's current power.
*/
@Beta
public static final String CURRENT_POWER = "currentPower";
/**
* Annotation key for the static port.
*/
public static final String STATIC_PORT = "staticPort";
......
......@@ -22,5 +22,6 @@
<bundle>mvn:org.onosproject/openflowj/0.9.5.onos</bundle>
<bundle>mvn:${project.groupId}/onos-of-api/${project.version}</bundle>
</feature>
</features>
......
......@@ -18,13 +18,13 @@ package org.onosproject.driver.optical.power;
import java.util.Optional;
import org.onosproject.net.AnnotationKeys;
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.onosproject.net.Direction;
import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
import org.onosproject.net.behaviour.PowerConfig;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.optical.OpticalAnnotations;
import org.onosproject.openflow.controller.Dpid;
import org.onosproject.openflow.controller.OpenFlowController;
import org.onosproject.openflow.controller.OpenFlowSwitch;
......@@ -69,7 +69,7 @@ public class OplinkRoadmPowerConfig extends AbstractHandlerBehaviour
DeviceService deviceService = this.handler().get(DeviceService.class);
Port port = deviceService.getPort(this.data().deviceId(), portNum);
if (port != null) {
String currentPower = port.annotations().value(AnnotationKeys.CURRENT_POWER);
String currentPower = port.annotations().value(OpticalAnnotations.CURRENT_POWER);
if (currentPower != null) {
returnVal = Long.valueOf(currentPower);
}
......
/*
* Copyright 2016-present Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.drivers.optical;
import com.google.common.annotations.Beta;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.link.LinkDescription;
import org.onosproject.net.link.LinkProvider;
import org.onosproject.net.link.LinkProviderRegistry;
import org.onosproject.net.link.LinkProviderService;
import org.onosproject.net.provider.ProviderId;
import org.slf4j.Logger;
import static org.slf4j.LoggerFactory.getLogger;
/**
* Interface to allow for optical device drivers to add/remove links to
* the store. Acts as a proxy to LinkProviderService.
*
* Registers a dummy LinkProvider to get an instance of LinkProviderService.
*/
@Beta
@Component(immediate = true)
@Service
public class OpticalAdjacencyLinkManager implements OpticalAdjacencyLinkService {
private static final ProviderId PID =
new ProviderId("of", "org.onosproject.drivers.optical");
private final Logger log = getLogger(getClass());
private LinkProvider linkProvider = new StubLinkProvider();
private LinkProviderService linkProviderService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected LinkProviderRegistry linkProviderRegistry;
@Activate
public void activate() {
linkProviderService = linkProviderRegistry.register(linkProvider);
log.info("Started");
}
@Deactivate
public void deactivate() {
linkProviderRegistry.unregister(linkProvider);
log.info("Stopped");
}
/**
* Signals that an infrastructure link has been detected.
*
* @param linkDescription link information
*/
@Override
public void linkDetected(LinkDescription linkDescription) {
linkProviderService.linkDetected(linkDescription);
}
/**
* Signals that an infrastructure link has disappeared.
*
* @param linkDescription link information
*/
@Override
public void linkVanished(LinkDescription linkDescription) {
linkProviderService.linkVanished(linkDescription);
}
/**
* Signals that infrastructure links associated with the specified
* connect point have vanished.
*
* @param connectPoint connect point
*/
@Override
public void linksVanished(ConnectPoint connectPoint) {
linkProviderService.linksVanished(connectPoint);
}
/**
* Signals that infrastructure links associated with the specified
* device have vanished.
*
* @param deviceId device identifier
*/
@Override
public void linksVanished(DeviceId deviceId) {
linkProviderService.linksVanished(deviceId);
}
// Stub provider used to get LinkProviderService
private static final class StubLinkProvider implements LinkProvider {
@Override
public ProviderId id() {
return PID;
}
}
}
/*
* Copyright 2016-present Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.drivers.optical;
import com.google.common.annotations.Beta;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.link.LinkDescription;
/**
* Interface to allow for optical device drivers to add/remove links to
* the store. Acts as a proxy to LinkProviderService.
*/
@Beta
public interface OpticalAdjacencyLinkService {
/**
* Signals that an infrastructure link has been detected.
*
* @param linkDescription link information
*/
void linkDetected(LinkDescription linkDescription);
/**
* Signals that an infrastructure link has disappeared.
*
* @param linkDescription link information
*/
void linkVanished(LinkDescription linkDescription);
/**
* Signals that infrastructure links associated with the specified
* connect point have vanished.
*
* @param connectPoint connect point
*/
void linksVanished(ConnectPoint connectPoint);
/**
* Signals that infrastructure links associated with the specified
* device have vanished.
*
* @param deviceId device identifier
*/
void linksVanished(DeviceId deviceId);
}
......@@ -51,7 +51,7 @@
manufacturer="Oplink a Molex company" hwVersion="ROADM"
swVersion="of-agent">
<behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
impl="org.onosproject.driver.optical.handshaker.OplinkRoadmHandshaker"/>
impl="org.onosproject.driver.optical.handshaker.OplinkRoadm"/>
<behaviour api="org.onosproject.net.behaviour.LambdaQuery"
impl="org.onosproject.driver.optical.query.OplinkRoadmLambdaQuery"/>
<behaviour api="org.onosproject.net.optical.OpticalDevice"
......