blob: 585e2823f1dbc91e2034fee3ece12c823262296a [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;
hirokif4ed5212018-05-26 22:39:38 -070027import org.onosproject.odtn.utils.tapi.TapiCepHandler;
hirokif4ed5212018-05-26 22:39:38 -070028import org.onosproject.odtn.utils.tapi.TapiContextHandler;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070029import org.onosproject.odtn.utils.tapi.TapiLinkHandler;
hirokif4ed5212018-05-26 22:39:38 -070030import org.onosproject.odtn.utils.tapi.TapiNepHandler;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070031import org.onosproject.odtn.utils.tapi.TapiNepRef;
hirokif4ed5212018-05-26 22:39:38 -070032import org.onosproject.odtn.utils.tapi.TapiNodeHandler;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070033import org.onosproject.odtn.utils.tapi.TapiNodeRef;
hirokif4ed5212018-05-26 22:39:38 -070034import org.onosproject.odtn.utils.tapi.TapiSipHandler;
35import org.onosproject.odtn.utils.tapi.TapiTopologyHandler;
hirokiec18d3a2018-05-16 15:27:37 -070036import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.DefaultContext;
37import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
38import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.DefaultTopology;
hirokiec18d3a2018-05-16 15:27:37 -070039import org.onosproject.yang.model.ModelConverter;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070040import org.osgi.service.component.annotations.Activate;
41import org.osgi.service.component.annotations.Component;
42import org.osgi.service.component.annotations.Deactivate;
43import org.osgi.service.component.annotations.Reference;
44import org.osgi.service.component.annotations.ReferenceCardinality;
hirokiec18d3a2018-05-16 15:27:37 -070045import org.slf4j.Logger;
46
hirokibca3e932018-05-15 15:25:54 -070047import static org.slf4j.LoggerFactory.getLogger;
48
49/**
hirokif4ed5212018-05-26 22:39:38 -070050 * OSGi Component for ODTN TAPI topology manager application.
hirokibca3e932018-05-15 15:25:54 -070051 */
Ray Milkeyd84f89b2018-08-17 14:54:17 -070052@Component(immediate = true, service = TapiTopologyManager.class)
hirokibca3e932018-05-15 15:25:54 -070053public class DcsBasedTapiTopologyManager implements TapiTopologyManager {
54
55 private final Logger log = getLogger(getClass());
56
Ray Milkeyd84f89b2018-08-17 14:54:17 -070057 @Reference(cardinality = ReferenceCardinality.MANDATORY)
hirokibca3e932018-05-15 15:25:54 -070058 protected DynamicConfigService dcs;
59
Ray Milkeyd84f89b2018-08-17 14:54:17 -070060 @Reference(cardinality = ReferenceCardinality.MANDATORY)
hirokiec18d3a2018-05-16 15:27:37 -070061 protected ModelConverter modelConverter;
62
Ray Milkeyd84f89b2018-08-17 14:54:17 -070063 @Reference(cardinality = ReferenceCardinality.MANDATORY)
hiroki684aa2f2018-05-19 20:48:49 -070064 protected TapiResolver tapiResolver;
65
hirokif4ed5212018-05-26 22:39:38 -070066 private DefaultContext context;
67 private DefaultTopology topology;
hirokiec18d3a2018-05-16 15:27:37 -070068
hirokibca3e932018-05-15 15:25:54 -070069 @Activate
70 public void activate() {
hirokiec18d3a2018-05-16 15:27:37 -070071 initDcsTapiContext();
72 initDcsTapiTopology();
hirokibca3e932018-05-15 15:25:54 -070073 log.info("Started");
74 }
75
76 @Deactivate
77 public void deactivate() {
78 log.info("Stopped");
79 }
80
81 @Override
82 public void addDevice(Device device) {
83 log.info("Add device: {}", device);
hirokiec18d3a2018-05-16 15:27:37 -070084 DeviceId deviceId = device.id();
85 if (tapiResolver.hasNodeRef(deviceId)) {
86 return;
87 }
hirokif4ed5212018-05-26 22:39:38 -070088 TapiNodeHandler.create()
hirokiec18d3a2018-05-16 15:27:37 -070089 .setTopologyUuid(topology.uuid())
hirokif4ed5212018-05-26 22:39:38 -070090 .setDeviceId(deviceId).add();
hirokibca3e932018-05-15 15:25:54 -070091 }
92
93 @Override
94 public void removeDevice(Device device) {
95 log.info("Remove device: {}", device);
96 }
97
98 @Override
99 public void addLink(Link link) {
100 log.info("Add link: {}", link);
hirokiec18d3a2018-05-16 15:27:37 -0700101
hiroki684aa2f2018-05-19 20:48:49 -0700102 // TODO: existence check
hirokiec18d3a2018-05-16 15:27:37 -0700103
104 // link
105 TapiNepRef srcNepRef = tapiResolver.getNepRef(link.src());
106 TapiNepRef dstNepRef = tapiResolver.getNepRef(link.dst());
107
hirokif4ed5212018-05-26 22:39:38 -0700108 TapiLinkHandler.create()
hirokiec18d3a2018-05-16 15:27:37 -0700109 .setTopologyUuid(topology.uuid())
hiroki684aa2f2018-05-19 20:48:49 -0700110 .addNep(srcNepRef)
hirokif4ed5212018-05-26 22:39:38 -0700111 .addNep(dstNepRef).add();
hirokibca3e932018-05-15 15:25:54 -0700112 }
113
114 @Override
115 public void removeLink(Link link) {
116 log.info("Remove link: {}", link);
117 }
118
119 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700120 public void addPort(Port port) {
121 log.info("Add port: {}", port);
hiroki684aa2f2018-05-19 20:48:49 -0700122
123 ConnectPoint cp = new ConnectPoint(port.element().id(), port.number());
124 if (tapiResolver.hasNepRef(cp)) {
hirokiec18d3a2018-05-16 15:27:37 -0700125 return;
126 }
127
128 TapiNodeRef nodeRef = tapiResolver.getNodeRef(port.element().id());
129 String nodeId = nodeRef.getNodeId();
130
131 // nep
hirokif4ed5212018-05-26 22:39:38 -0700132 TapiNepHandler nepBuilder = TapiNepHandler.create()
133 .setPort(port)
hirokiec18d3a2018-05-16 15:27:37 -0700134 .setTopologyUuid(topology.uuid())
135 .setNodeUuid(Uuid.fromString(nodeId));
136
hirokif4ed5212018-05-26 22:39:38 -0700137 // cep
138 TapiCepHandler cepBuilder = TapiCepHandler.create()
139 .setTopologyUuid(topology.uuid())
140 .setNodeUuid(Uuid.fromString(nodeId))
141 .setNepUuid(nepBuilder.getId())
142 .setParentNep();
143 nepBuilder.addCep(cepBuilder.getModelObject());
hirokiec18d3a2018-05-16 15:27:37 -0700144
hirokif4ed5212018-05-26 22:39:38 -0700145 if (TapiSipHandler.isSip(port)) {
146 TapiSipHandler sipBuilder = TapiSipHandler.create().setPort(port);
147 nepBuilder.addSip(sipBuilder.getId());
148
149 sipBuilder.add();
hirokiec18d3a2018-05-16 15:27:37 -0700150 }
hirokif4ed5212018-05-26 22:39:38 -0700151
152 nepBuilder.add();
hirokibca3e932018-05-15 15:25:54 -0700153 }
154
155 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700156 public void removePort(Port port) {
157 log.info("Remove port: {}", port);
158 }
159
hirokif4ed5212018-05-26 22:39:38 -0700160 /**
161 * Add Tapi Context to Dcs store.
162 */
hirokiec18d3a2018-05-16 15:27:37 -0700163 private void initDcsTapiContext() {
hirokif4ed5212018-05-26 22:39:38 -0700164 TapiContextHandler contextHandler = TapiContextHandler.create();
165 context = contextHandler.getModelObject();
166 contextHandler.add();
hirokiec18d3a2018-05-16 15:27:37 -0700167 }
168
hirokif4ed5212018-05-26 22:39:38 -0700169 /**
170 * Add Tapi Topology to Dcs store.
171 *
172 * Assumed there is only one topology for ODTN Phase 1.0
173 */
hirokiec18d3a2018-05-16 15:27:37 -0700174 private void initDcsTapiTopology() {
hirokif4ed5212018-05-26 22:39:38 -0700175 TapiTopologyHandler topologyHandler = TapiTopologyHandler.create();
176 topology = topologyHandler.getModelObject();
177 topologyHandler.add();
hirokiec18d3a2018-05-16 15:27:37 -0700178 }
hirokibca3e932018-05-15 15:25:54 -0700179}