blob: abd0798f1a0c4fd3fe617545db6232dc817ae692 [file] [log] [blame]
hirokibca3e932018-05-15 15:25:54 -07001/*
2 * Copyright 2018-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 */
16
17package org.onosproject.odtn.internal;
18
hirokibca3e932018-05-15 15:25:54 -070019import org.onosproject.config.DynamicConfigService;
hirokiec18d3a2018-05-16 15:27:37 -070020import org.onosproject.net.ConnectPoint;
21import org.onosproject.net.Device;
22import org.onosproject.net.DeviceId;
23import org.onosproject.net.Link;
24import org.onosproject.net.Port;
hirokif4ed5212018-05-26 22:39:38 -070025import org.onosproject.odtn.TapiResolver;
26import org.onosproject.odtn.TapiTopologyManager;
hirokid8fd7862018-10-09 15:24:24 +090027import org.onosproject.odtn.utils.tapi.TapiConnectivityContextHandler;
hirokif4ed5212018-05-26 22:39:38 -070028import org.onosproject.odtn.utils.tapi.TapiCepHandler;
hirokif4ed5212018-05-26 22:39:38 -070029import org.onosproject.odtn.utils.tapi.TapiContextHandler;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070030import org.onosproject.odtn.utils.tapi.TapiLinkHandler;
hirokif4ed5212018-05-26 22:39:38 -070031import org.onosproject.odtn.utils.tapi.TapiNepHandler;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070032import org.onosproject.odtn.utils.tapi.TapiNepRef;
hirokif4ed5212018-05-26 22:39:38 -070033import org.onosproject.odtn.utils.tapi.TapiNodeHandler;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070034import org.onosproject.odtn.utils.tapi.TapiNodeRef;
hirokif4ed5212018-05-26 22:39:38 -070035import org.onosproject.odtn.utils.tapi.TapiSipHandler;
hirokid8fd7862018-10-09 15:24:24 +090036import org.onosproject.odtn.utils.tapi.TapiTopologyContextHandler;
hirokif4ed5212018-05-26 22:39:38 -070037import org.onosproject.odtn.utils.tapi.TapiTopologyHandler;
hiroki96ab3c22018-12-11 14:10:52 -080038import org.onosproject.yang.gen.v1.tapicommon.rev20181210.tapicommon.DefaultContext;
39import org.onosproject.yang.gen.v1.tapicommon.rev20181210.tapicommon.Uuid;
40import org.onosproject.yang.gen.v1.tapitopology.rev20181210.tapitopology.topologycontext.DefaultTopology;
hirokiec18d3a2018-05-16 15:27:37 -070041import org.onosproject.yang.model.ModelConverter;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070042import org.osgi.service.component.annotations.Activate;
43import org.osgi.service.component.annotations.Component;
44import org.osgi.service.component.annotations.Deactivate;
45import org.osgi.service.component.annotations.Reference;
46import org.osgi.service.component.annotations.ReferenceCardinality;
hirokiec18d3a2018-05-16 15:27:37 -070047import org.slf4j.Logger;
48
hirokibca3e932018-05-15 15:25:54 -070049import static org.slf4j.LoggerFactory.getLogger;
50
51/**
hirokif4ed5212018-05-26 22:39:38 -070052 * OSGi Component for ODTN TAPI topology manager application.
hirokibca3e932018-05-15 15:25:54 -070053 */
Ray Milkeyd84f89b2018-08-17 14:54:17 -070054@Component(immediate = true, service = TapiTopologyManager.class)
hirokibca3e932018-05-15 15:25:54 -070055public class DcsBasedTapiTopologyManager implements TapiTopologyManager {
56
57 private final Logger log = getLogger(getClass());
58
Ray Milkeyd84f89b2018-08-17 14:54:17 -070059 @Reference(cardinality = ReferenceCardinality.MANDATORY)
hirokibca3e932018-05-15 15:25:54 -070060 protected DynamicConfigService dcs;
61
Ray Milkeyd84f89b2018-08-17 14:54:17 -070062 @Reference(cardinality = ReferenceCardinality.MANDATORY)
hirokiec18d3a2018-05-16 15:27:37 -070063 protected ModelConverter modelConverter;
64
Ray Milkeyd84f89b2018-08-17 14:54:17 -070065 @Reference(cardinality = ReferenceCardinality.MANDATORY)
hiroki684aa2f2018-05-19 20:48:49 -070066 protected TapiResolver tapiResolver;
67
hirokif4ed5212018-05-26 22:39:38 -070068 private DefaultContext context;
69 private DefaultTopology topology;
hirokiec18d3a2018-05-16 15:27:37 -070070
hirokibca3e932018-05-15 15:25:54 -070071 @Activate
72 public void activate() {
hirokiec18d3a2018-05-16 15:27:37 -070073 initDcsTapiContext();
74 initDcsTapiTopology();
hirokid8fd7862018-10-09 15:24:24 +090075 initDcsTapiConnectivityContext();
hirokibca3e932018-05-15 15:25:54 -070076 log.info("Started");
77 }
78
79 @Deactivate
80 public void deactivate() {
81 log.info("Stopped");
82 }
83
84 @Override
85 public void addDevice(Device device) {
Andrea Campanella77e9b332018-11-29 13:33:19 -080086 log.debug("Add device: {}", device);
hirokiec18d3a2018-05-16 15:27:37 -070087 DeviceId deviceId = device.id();
88 if (tapiResolver.hasNodeRef(deviceId)) {
89 return;
90 }
hirokif4ed5212018-05-26 22:39:38 -070091 TapiNodeHandler.create()
hirokiec18d3a2018-05-16 15:27:37 -070092 .setTopologyUuid(topology.uuid())
hirokif4ed5212018-05-26 22:39:38 -070093 .setDeviceId(deviceId).add();
hirokibca3e932018-05-15 15:25:54 -070094 }
95
96 @Override
97 public void removeDevice(Device device) {
Andrea Campanella77e9b332018-11-29 13:33:19 -080098 //TODO Implement
99 log.warn("NOT-IMPLEMENTED, Remove device: {}", device);
hirokibca3e932018-05-15 15:25:54 -0700100 }
101
102 @Override
103 public void addLink(Link link) {
Andrea Campanella77e9b332018-11-29 13:33:19 -0800104 log.debug("Add link: {}", link);
hirokiec18d3a2018-05-16 15:27:37 -0700105
hiroki684aa2f2018-05-19 20:48:49 -0700106 // TODO: existence check
hirokiec18d3a2018-05-16 15:27:37 -0700107
108 // link
109 TapiNepRef srcNepRef = tapiResolver.getNepRef(link.src());
110 TapiNepRef dstNepRef = tapiResolver.getNepRef(link.dst());
111
hirokif4ed5212018-05-26 22:39:38 -0700112 TapiLinkHandler.create()
hirokiec18d3a2018-05-16 15:27:37 -0700113 .setTopologyUuid(topology.uuid())
hiroki684aa2f2018-05-19 20:48:49 -0700114 .addNep(srcNepRef)
hirokif4ed5212018-05-26 22:39:38 -0700115 .addNep(dstNepRef).add();
hirokibca3e932018-05-15 15:25:54 -0700116 }
117
118 @Override
119 public void removeLink(Link link) {
Andrea Campanella77e9b332018-11-29 13:33:19 -0800120 //TODO Implement
121 log.warn("NOT-IMPLEMENTED, Remove link: {}", link);
hirokibca3e932018-05-15 15:25:54 -0700122 }
123
124 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700125 public void addPort(Port port) {
Andrea Campanella77e9b332018-11-29 13:33:19 -0800126 log.debug("Add port: {}", port);
hiroki684aa2f2018-05-19 20:48:49 -0700127
128 ConnectPoint cp = new ConnectPoint(port.element().id(), port.number());
129 if (tapiResolver.hasNepRef(cp)) {
hirokiec18d3a2018-05-16 15:27:37 -0700130 return;
131 }
132
133 TapiNodeRef nodeRef = tapiResolver.getNodeRef(port.element().id());
134 String nodeId = nodeRef.getNodeId();
135
136 // nep
hirokif4ed5212018-05-26 22:39:38 -0700137 TapiNepHandler nepBuilder = TapiNepHandler.create()
138 .setPort(port)
hirokiec18d3a2018-05-16 15:27:37 -0700139 .setTopologyUuid(topology.uuid())
140 .setNodeUuid(Uuid.fromString(nodeId));
141
hirokif4ed5212018-05-26 22:39:38 -0700142 // cep
143 TapiCepHandler cepBuilder = TapiCepHandler.create()
144 .setTopologyUuid(topology.uuid())
145 .setNodeUuid(Uuid.fromString(nodeId))
146 .setNepUuid(nepBuilder.getId())
147 .setParentNep();
148 nepBuilder.addCep(cepBuilder.getModelObject());
hirokiec18d3a2018-05-16 15:27:37 -0700149
hirokif4ed5212018-05-26 22:39:38 -0700150 if (TapiSipHandler.isSip(port)) {
151 TapiSipHandler sipBuilder = TapiSipHandler.create().setPort(port);
152 nepBuilder.addSip(sipBuilder.getId());
153
154 sipBuilder.add();
hirokiec18d3a2018-05-16 15:27:37 -0700155 }
hirokif4ed5212018-05-26 22:39:38 -0700156
157 nepBuilder.add();
hirokibca3e932018-05-15 15:25:54 -0700158 }
159
160 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700161 public void removePort(Port port) {
Andrea Campanella77e9b332018-11-29 13:33:19 -0800162 //TODO implement
163 log.warn("NOT-IMPLEMENTED, Remove port: {}", port);
hirokiec18d3a2018-05-16 15:27:37 -0700164 }
165
hirokif4ed5212018-05-26 22:39:38 -0700166 /**
167 * Add Tapi Context to Dcs store.
168 */
hirokiec18d3a2018-05-16 15:27:37 -0700169 private void initDcsTapiContext() {
hirokif4ed5212018-05-26 22:39:38 -0700170 TapiContextHandler contextHandler = TapiContextHandler.create();
171 context = contextHandler.getModelObject();
172 contextHandler.add();
hirokiec18d3a2018-05-16 15:27:37 -0700173 }
174
hirokif4ed5212018-05-26 22:39:38 -0700175 /**
hirokid8fd7862018-10-09 15:24:24 +0900176 * Add Tapi TopologyContext and Topology to Dcs store.
hirokif4ed5212018-05-26 22:39:38 -0700177 *
178 * Assumed there is only one topology for ODTN Phase 1.0
179 */
hirokiec18d3a2018-05-16 15:27:37 -0700180 private void initDcsTapiTopology() {
hirokid8fd7862018-10-09 15:24:24 +0900181 TapiTopologyContextHandler topologyContextHandler = TapiTopologyContextHandler.create();
182 topologyContextHandler.add();
hirokif4ed5212018-05-26 22:39:38 -0700183 TapiTopologyHandler topologyHandler = TapiTopologyHandler.create();
hirokif4ed5212018-05-26 22:39:38 -0700184 topologyHandler.add();
hirokid8fd7862018-10-09 15:24:24 +0900185 topology = topologyHandler.getModelObject();
hirokiec18d3a2018-05-16 15:27:37 -0700186 }
hirokid8fd7862018-10-09 15:24:24 +0900187
188 /**
189 * Add Tapi ConnectivityContext to Dcs store.
190 *
191 * Assumed there is only one topology for ODTN Phase 1.0
192 */
193 private void initDcsTapiConnectivityContext() {
194 TapiConnectivityContextHandler connectivityContextHandler = TapiConnectivityContextHandler.create();
195 connectivityContextHandler.add();
196 }
197
hirokibca3e932018-05-15 15:25:54 -0700198}