diff options
author | CNlucius <lukai1@huawei.com> | 2016-09-13 11:40:12 +0800 |
---|---|---|
committer | CNlucius <lukai1@huawei.com> | 2016-09-13 11:41:53 +0800 |
commit | b731e2f1dd0972409b136aebc7b463dd72c9cfad (patch) | |
tree | 5107d7d80c19ad8076c2c97c2b5ef8d1cf3ab903 /framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl | |
parent | ee93993458266114c29271a481ef9ce7ce621b2a (diff) |
ONOSFW-171
O/S-SFC-ONOS scenario documentation
Change-Id: I51ae1cf736ea24ab6680f8edca1b2bf5dd598365
Signed-off-by: CNlucius <lukai1@huawei.com>
Diffstat (limited to 'framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl')
4 files changed, 0 insertions, 501 deletions
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java deleted file mode 100644 index bfc6a995..00000000 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright 2015 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.newresource.impl; - -import com.google.common.collect.Lists; -import org.onlab.packet.MplsLabel; -import org.onlab.packet.VlanId; -import org.onlab.util.ItemNotFoundException; -import org.onosproject.net.Device; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Port; -import org.onosproject.net.OchPort; -import org.onosproject.net.OchSignal; -import org.onosproject.net.PortNumber; -import org.onosproject.net.TributarySlot; -import org.onosproject.net.OduSignalType; -import org.onosproject.net.behaviour.LambdaQuery; -import org.onosproject.net.behaviour.MplsQuery; -import org.onosproject.net.behaviour.VlanQuery; -import org.onosproject.net.device.DeviceEvent; -import org.onosproject.net.device.DeviceListener; -import org.onosproject.net.driver.DriverHandler; -import org.onosproject.net.driver.DriverService; -import org.onosproject.net.newresource.ResourceAdminService; -import org.onosproject.net.newresource.ResourcePath; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Collections; -import java.util.List; -import java.util.SortedSet; -import java.util.concurrent.ExecutorService; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * An implementation of DeviceListener registering devices as resources. - */ -final class ResourceDeviceListener implements DeviceListener { - - private static final Logger log = LoggerFactory.getLogger(ResourceDeviceListener.class); - - private static final int MAX_VLAN_ID = VlanId.MAX_VLAN; - private static final List<VlanId> ENTIRE_VLAN_IDS = getEntireVlans(); - - private static final int MAX_MPLS_LABEL = 1048576; - private static final List<MplsLabel> ENTIRE_MPLS_LABELS = getEntireMplsLabels(); - - private static final int TOTAL_ODU2_TRIBUTARY_SLOTS = 8; - private static final int TOTAL_ODU4_TRIBUTARY_SLOTS = 80; - private static final List<TributarySlot> ENTIRE_ODU2_TRIBUTARY_SLOTS = getEntireOdu2TributarySlots(); - private static final List<TributarySlot> ENTIRE_ODU4_TRIBUTARY_SLOTS = getEntireOdu4TributarySlots(); - - private final ResourceAdminService adminService; - private final DriverService driverService; - private final ExecutorService executor; - - /** - * Creates an instance with the specified ResourceAdminService and ExecutorService. - * - * @param adminService instance invoked to register resources - * @param executor executor used for processing resource registration - */ - ResourceDeviceListener(ResourceAdminService adminService, DriverService driverService, - ExecutorService executor) { - this.adminService = checkNotNull(adminService); - this.driverService = checkNotNull(driverService); - this.executor = checkNotNull(executor); - } - - @Override - public void event(DeviceEvent event) { - Device device = event.subject(); - switch (event.type()) { - case DEVICE_ADDED: - registerDeviceResource(device); - break; - case DEVICE_REMOVED: - unregisterDeviceResource(device); - break; - case PORT_ADDED: - registerPortResource(device, event.port()); - break; - case PORT_REMOVED: - unregisterPortResource(device, event.port()); - break; - default: - break; - } - } - - private void registerDeviceResource(Device device) { - executor.submit(() -> adminService.registerResources(ResourcePath.discrete(device.id()))); - } - - private void unregisterDeviceResource(Device device) { - executor.submit(() -> adminService.unregisterResources(ResourcePath.discrete(device.id()))); - } - - private void registerPortResource(Device device, Port port) { - ResourcePath portPath = ResourcePath.discrete(device.id(), port.number()); - executor.submit(() -> { - adminService.registerResources(portPath); - - // for VLAN IDs - if (isVlanEnabled(device.id(), port.number())) { - adminService.registerResources(Lists.transform(ENTIRE_VLAN_IDS, portPath::child)); - } - - // for MPLS labels - if (isMplsEnabled(device.id(), port.number())) { - adminService.registerResources(Lists.transform(ENTIRE_MPLS_LABELS, portPath::child)); - } - - // for Lambdas - SortedSet<OchSignal> lambdas = queryLambdas(device.id(), port.number()); - if (!lambdas.isEmpty()) { - adminService.registerResources(lambdas.stream() - .map(portPath::child) - .collect(Collectors.toList())); - } - - // for Tributary slots - // TODO: need to define Behaviour to make a query about OCh port - switch (port.type()) { - case OCH: - // register ODU TributarySlots against the OCH port - registerTributarySlotsResources(((OchPort) port).signalType(), portPath); - break; - default: - break; - } - }); - } - - private void registerTributarySlotsResources(OduSignalType oduSignalType, ResourcePath portPath) { - switch (oduSignalType) { - case ODU2: - adminService.registerResources(Lists.transform(ENTIRE_ODU2_TRIBUTARY_SLOTS, portPath::child)); - break; - case ODU4: - adminService.registerResources(Lists.transform(ENTIRE_ODU4_TRIBUTARY_SLOTS, portPath::child)); - break; - default: - break; - } - } - - private void unregisterPortResource(Device device, Port port) { - ResourcePath resource = ResourcePath.discrete(device.id(), port.number()); - executor.submit(() -> adminService.unregisterResources(resource)); - } - - private SortedSet<OchSignal> queryLambdas(DeviceId did, PortNumber port) { - try { - DriverHandler handler = driverService.createHandler(did); - if (handler == null) { - return Collections.emptySortedSet(); - } - LambdaQuery query = handler.behaviour(LambdaQuery.class); - return query.queryLambdas(port); - } catch (ItemNotFoundException e) { - return Collections.emptySortedSet(); - } - } - - private boolean isVlanEnabled(DeviceId device, PortNumber port) { - try { - DriverHandler handler = driverService.createHandler(device); - if (handler == null) { - return false; - } - - VlanQuery query = handler.behaviour(VlanQuery.class); - return query != null && query.isEnabled(port); - } catch (ItemNotFoundException e) { - return false; - } - } - - private boolean isMplsEnabled(DeviceId device, PortNumber port) { - try { - DriverHandler handler = driverService.createHandler(device); - if (handler == null) { - return false; - } - - MplsQuery query = handler.behaviour(MplsQuery.class); - return query != null && query.isEnabled(port); - } catch (ItemNotFoundException e) { - return false; - } - } - - private static List<VlanId> getEntireVlans() { - return IntStream.range(0, MAX_VLAN_ID) - .mapToObj(x -> VlanId.vlanId((short) x)) - .collect(Collectors.toList()); - } - - private static List<MplsLabel> getEntireMplsLabels() { - // potentially many objects are created - return IntStream.range(0, MAX_MPLS_LABEL) - .mapToObj(MplsLabel::mplsLabel) - .collect(Collectors.toList()); - } - - private static List<TributarySlot> getEntireOdu2TributarySlots() { - return IntStream.rangeClosed(1, TOTAL_ODU2_TRIBUTARY_SLOTS) - .mapToObj(TributarySlot::of) - .collect(Collectors.toList()); - } - private static List<TributarySlot> getEntireOdu4TributarySlots() { - return IntStream.rangeClosed(1, TOTAL_ODU4_TRIBUTARY_SLOTS) - .mapToObj(TributarySlot::of) - .collect(Collectors.toList()); - } -} diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java deleted file mode 100644 index 3014951a..00000000 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright 2015 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.newresource.impl; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableList; -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.event.AbstractListenerManager; -import org.onosproject.net.newresource.ResourceAdminService; -import org.onosproject.net.newresource.ResourceAllocation; -import org.onosproject.net.newresource.ResourceConsumer; -import org.onosproject.net.newresource.ResourceEvent; -import org.onosproject.net.newresource.ResourceListener; -import org.onosproject.net.newresource.ResourceService; -import org.onosproject.net.newresource.ResourcePath; -import org.onosproject.net.newresource.ResourceStore; -import org.onosproject.net.newresource.ResourceStoreDelegate; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * An implementation of ResourceService. - */ -@Component(immediate = true) -@Service -@Beta -public final class ResourceManager extends AbstractListenerManager<ResourceEvent, ResourceListener> - implements ResourceService, ResourceAdminService { - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected ResourceStore store; - - private final ResourceStoreDelegate delegate = new InternalStoreDelegate(); - - @Activate - public void activate() { - store.setDelegate(delegate); - eventDispatcher.addSink(ResourceEvent.class, listenerRegistry); - } - - @Deactivate - public void deactivate() { - store.unsetDelegate(delegate); - eventDispatcher.removeSink(ResourceEvent.class); - } - - @Override - public List<ResourceAllocation> allocate(ResourceConsumer consumer, - List<ResourcePath> resources) { - checkNotNull(consumer); - checkNotNull(resources); - - boolean success = store.allocate(resources, consumer); - if (!success) { - return ImmutableList.of(); - } - - return resources.stream() - .map(x -> new ResourceAllocation(x, consumer)) - .collect(Collectors.toList()); - } - - @Override - public boolean release(List<ResourceAllocation> allocations) { - checkNotNull(allocations); - - List<ResourcePath> resources = allocations.stream() - .map(ResourceAllocation::resource) - .collect(Collectors.toList()); - List<ResourceConsumer> consumers = allocations.stream() - .map(ResourceAllocation::consumer) - .collect(Collectors.toList()); - - return store.release(resources, consumers); - } - - @Override - public boolean release(ResourceConsumer consumer) { - checkNotNull(consumer); - - Collection<ResourceAllocation> allocations = getResourceAllocations(consumer); - return release(ImmutableList.copyOf(allocations)); - } - - @Override - public Optional<ResourceAllocation> getResourceAllocation(ResourcePath resource) { - checkNotNull(resource); - - Optional<ResourceConsumer> consumer = store.getConsumer(resource); - return consumer.map(x -> new ResourceAllocation(resource, x)); - } - - @Override - public <T> Collection<ResourceAllocation> getResourceAllocations(ResourcePath parent, Class<T> cls) { - checkNotNull(parent); - checkNotNull(cls); - - Collection<ResourcePath> resources = store.getAllocatedResources(parent, cls); - List<ResourceAllocation> allocations = new ArrayList<>(resources.size()); - for (ResourcePath resource: resources) { - // We access store twice in this method, then the store may be updated by others - Optional<ResourceConsumer> consumer = store.getConsumer(resource); - if (consumer.isPresent()) { - allocations.add(new ResourceAllocation(resource, consumer.get())); - } - } - - return allocations; - } - - @Override - public Collection<ResourceAllocation> getResourceAllocations(ResourceConsumer consumer) { - checkNotNull(consumer); - - Collection<ResourcePath> resources = store.getResources(consumer); - return resources.stream() - .map(x -> new ResourceAllocation(x, consumer)) - .collect(Collectors.toList()); - } - - @Override - public Collection<ResourcePath> getAvailableResources(ResourcePath parent) { - checkNotNull(parent); - - Collection<ResourcePath> children = store.getChildResources(parent); - return children.stream() - // We access store twice in this method, then the store may be updated by others - .filter(x -> !store.getConsumer(x).isPresent()) - .collect(Collectors.toList()); - } - - @Override - public boolean isAvailable(ResourcePath resource) { - checkNotNull(resource); - - Optional<ResourceConsumer> consumer = store.getConsumer(resource); - return !consumer.isPresent(); - } - - @Override - public boolean registerResources(List<ResourcePath> resources) { - checkNotNull(resources); - - return store.register(resources); - } - - @Override - public boolean unregisterResources(List<ResourcePath> resources) { - checkNotNull(resources); - - return store.register(resources); - } - - private class InternalStoreDelegate implements ResourceStoreDelegate { - @Override - public void notify(ResourceEvent event) { - post(event); - } - } -} diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceRegistrar.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceRegistrar.java deleted file mode 100644 index e8042661..00000000 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceRegistrar.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2015 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.newresource.impl; - -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.onosproject.net.device.DeviceListener; -import org.onosproject.net.device.DeviceService; -import org.onosproject.net.driver.DriverService; -import org.onosproject.net.newresource.ResourceAdminService; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -import static org.onlab.util.Tools.groupedThreads; - -/** - * A class registering resources when they are detected. - */ -@Component(immediate = true) -@Beta -public final class ResourceRegistrar { - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected ResourceAdminService adminService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected DriverService driverService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected DeviceService deviceService; - - private DeviceListener deviceListener; - private final ExecutorService executor = - Executors.newSingleThreadExecutor(groupedThreads("onos/resource", "registrar")); - - @Activate - public void activate() { - deviceListener = new ResourceDeviceListener(adminService, driverService, executor); - deviceService.addListener(deviceListener); - } - - @Deactivate - public void deactivate() { - deviceService.removeListener(deviceListener); - } -} diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/package-info.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/package-info.java deleted file mode 100644 index bddfdfc1..00000000 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/newresource/impl/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2015 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. - */ - -/** - * Implementation of the generic network resource subsystem. - */ -package org.onosproject.net.newresource.impl;
\ No newline at end of file |