blob: 21374c213ed0d987f973436c5bff8b09a3bbe993 [file] [log] [blame]
Alessio Giorgetti648b5382018-02-15 18:35:45 +01001/*
2 * Copyright 2016-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.drivers.lumentum;
17
18import org.onlab.util.Frequency;
19import org.onlab.util.Spectrum;
Alessio Giorgetti648b5382018-02-15 18:35:45 +010020import org.onosproject.net.GridType;
alessio1bf2a632019-06-04 15:47:39 +020021import org.onosproject.net.ChannelSpacing;
Alessio Giorgetti648b5382018-02-15 18:35:45 +010022import org.onosproject.net.OchSignal;
alessio1bf2a632019-06-04 15:47:39 +020023import org.onosproject.net.Port;
Alessio Giorgetti648b5382018-02-15 18:35:45 +010024import org.onosproject.net.PortNumber;
25import org.onosproject.net.behaviour.LambdaQuery;
alessio1bf2a632019-06-04 15:47:39 +020026import org.onosproject.net.device.DeviceService;
Alessio Giorgetti648b5382018-02-15 18:35:45 +010027import org.onosproject.net.driver.AbstractHandlerBehaviour;
28
alessio1bf2a632019-06-04 15:47:39 +020029import java.util.Collections;
Alessio Giorgetti648b5382018-02-15 18:35:45 +010030import java.util.Set;
31import java.util.stream.IntStream;
32import java.util.stream.Collectors;
Alessio Giorgetti648b5382018-02-15 18:35:45 +010033
34/**
35 * Implementation of lambda query interface for Lumentum ROADMs.
36 *
37 * Tested on both Lumentum SDN ROADM and Lumentum ROADM-A Whitebox.
38 *
39 * 96 OchSignals of 50 GHz, center frequencies range 191.350 - 196.100 THz.
40 * 48 OchSignals of 100 GHz, center frequencies 191.375 - 196.075 THz
41 */
42public class LumentumRoadmLambdaQuery extends AbstractHandlerBehaviour implements LambdaQuery {
43
44
45 public static final GridType GRID_TYPE = GridType.DWDM;
46
47 public static final ChannelSpacing CHANNEL_SPACING_50 = ChannelSpacing.CHL_50GHZ;
48 public static final Frequency START_CENTER_FREQ_50 = Frequency.ofGHz(191_350);
49 public static final Frequency END_CENTER_FREQ_50 = Frequency.ofGHz(196_100);
50 private static final int LAMBDA_COUNT_50 = 96;
51
52 public static final ChannelSpacing CHANNEL_SPACING_100 = ChannelSpacing.CHL_100GHZ;
53 public static final Frequency START_CENTER_FREQ_100 = Frequency.ofGHz(191_375);
54 public static final Frequency END_CENTER_FREQ_100 = Frequency.ofGHz(196_075);
55 private static final int LAMBDA_COUNT_100 = 48;
56
57 @Override
alessio1bf2a632019-06-04 15:47:39 +020058 public Set<OchSignal> queryLambdas(PortNumber portNumber) {
59 DeviceService deviceService = this.handler().get(DeviceService.class);
60 Port port = deviceService.getPort(data().deviceId(), portNumber);
Alessio Giorgetti648b5382018-02-15 18:35:45 +010061
alessioda91ea92019-07-19 18:38:54 +020062 if ((port.type() == Port.Type.FIBER) || (port.type() == Port.Type.OMS)) {
Alessio Giorgetti648b5382018-02-15 18:35:45 +010063
alessio1bf2a632019-06-04 15:47:39 +020064 //Complete set of 50GHz OchSignal
65 int startMultiplier50 = (int) (START_CENTER_FREQ_50.subtract(Spectrum.CENTER_FREQUENCY).asHz()
66 / Frequency.ofGHz(50).asHz());
Alessio Giorgetti648b5382018-02-15 18:35:45 +010067
alessio1bf2a632019-06-04 15:47:39 +020068 Set<OchSignal> channels50 = IntStream.range(0, LAMBDA_COUNT_50)
69 .mapToObj(x -> new OchSignal(GRID_TYPE, CHANNEL_SPACING_50,
70 startMultiplier50 + x,
71 4))
72 .collect(Collectors.toSet());
73
74 /*//Complete set of 100GHz OchSignal
Alessio Giorgetti648b5382018-02-15 18:35:45 +010075 int startMultiplier100 = (int) (START_CENTER_FREQ_100.subtract(Spectrum.CENTER_FREQUENCY).asHz()
76 / Frequency.ofGHz(100).asHz());
77
78 Set<OchSignal> channels100 = IntStream.range(0, LAMBDA_COUNT_100)
79 .mapToObj(x -> new OchSignal(GRID_TYPE,
80 CHANNEL_SPACING_100, startMultiplier100 + x, 8))
81 .collect(Collectors.toSet());
82
alessio1bf2a632019-06-04 15:47:39 +020083 Set<OchSignal> channels = Sets.union(channels50, channels100);*/
Alessio Giorgetti648b5382018-02-15 18:35:45 +010084
alessio1bf2a632019-06-04 15:47:39 +020085 return channels50;
86 } else {
87 return Collections.emptySet();
88 }
Alessio Giorgetti648b5382018-02-15 18:35:45 +010089 }
90}
91
92