blob: ea7a506c625d19360019048048656552d741b3c6 [file] [log] [blame]
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -07001/*
Sudeep Desaibffe1532020-01-21 16:43:46 +05302 * Copyright 2020-present Open Networking Foundation
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -07003 *
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
16 * This work was partially supported by EC H2020 project METRO-HAUL (761727).
17 */
18
19package org.onosproject.drivers.odtn;
20
21import com.google.common.collect.Range;
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070022import org.onlab.osgi.DefaultServiceDirectory;
Sudeep Desaibffe1532020-01-21 16:43:46 +053023import org.onosproject.drivers.odtn.openconfig.TerminalDevicePowerConfig;
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070024import org.onosproject.net.DeviceId;
25import org.onosproject.net.Port;
26import org.onosproject.net.PortNumber;
27import org.onosproject.net.behaviour.PowerConfig;
28import org.onosproject.net.device.DeviceService;
Sudeep Desaibffe1532020-01-21 16:43:46 +053029import org.onosproject.netconf.DatastoreId;
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070030
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070031import java.util.Optional;
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070032
33/**
34 * Driver Implementation of the PowerConfig for OpenConfig terminal devices.
35 */
36public class GrooveOpenConfigDevicePowerConfig<T>
Sudeep Desaibffe1532020-01-21 16:43:46 +053037 extends TerminalDevicePowerConfig<T> implements PowerConfig<T> {
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070038
39 /**
Sudeep Desaibffe1532020-01-21 16:43:46 +053040 * Construct a rpc target power message.
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070041 *
Sudeep Desaibffe1532020-01-21 16:43:46 +053042 * @param filter to build rpc
43 * @return RPC payload
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070044 */
Sudeep Desaibffe1532020-01-21 16:43:46 +053045 @Override
46 public StringBuilder getTargetPowerRequestRpc(String filter) {
47 StringBuilder rpc = new StringBuilder();
48 rpc.append("<get>")
49 .append("<filter type='subtree'>")
50 .append(filter)
51 .append("</filter>")
52 .append("</get>");
53 return rpc;
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070054 }
55
56 /**
Sudeep Desaibffe1532020-01-21 16:43:46 +053057 * Construct a rpc target power message.
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070058 *
Sudeep Desaibffe1532020-01-21 16:43:46 +053059 * @return RPC payload
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070060 */
Sudeep Desaibffe1532020-01-21 16:43:46 +053061 @Override
62 public DatastoreId getDataStoreId() {
63 return DatastoreId.RUNNING;
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070064 }
65
66 /**
Sudeep Desaibffe1532020-01-21 16:43:46 +053067 * Construct a rpc target power message.
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070068 *
Sudeep Desaibffe1532020-01-21 16:43:46 +053069 * @param name for optical channel name
70 * @param power to build rpc for target output power configuration
71 * @return RPC payload
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070072 */
73 @Override
Sudeep Desaibffe1532020-01-21 16:43:46 +053074 public StringBuilder parsePortRequestRpc(Double power, String name) {
75 StringBuilder rpc = new StringBuilder();
76 rpc.append("<component>").append("<name>").append(name).append("</name>");
77 if (power != null) {
78 // This is an edit-config operation.
79 rpc.append("<optical-channel xmlns=\"http://openconfig.net/yang/terminal-device\">")
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070080 .append("<config>")
Sudeep Desaibffe1532020-01-21 16:43:46 +053081 .append("<target-output-power>")
82 .append(power)
83 .append("</target-output-power>")
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070084 .append("</config>")
Sudeep Desaibffe1532020-01-21 16:43:46 +053085 .append("</optical-channel>");
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070086 }
Sudeep Desaibffe1532020-01-21 16:43:46 +053087 return rpc;
88 }
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070089
Sudeep Desaibffe1532020-01-21 16:43:46 +053090 @Override
91 public Optional<Range<Double>> getTargetPowerRange(PortNumber port, Object component) {
92 // Only line ports have power
93 DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
94 DeviceId deviceId = did();
95 if (deviceService.getPort(deviceId, port).type() == Port.Type.OCH) {
96 return Optional.of(Range.open(-20., 6.));
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070097 }
Sudeep Desaibffe1532020-01-21 16:43:46 +053098 return Optional.empty();
Andrea Campanellaa9cdaf62019-09-08 10:30:16 -070099 }
100}