blob: b528f23d11f5b8e5ca3fd617460ac9cb1721d283 [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
19import org.apache.felix.scr.annotations.Activate;
20import org.apache.felix.scr.annotations.Component;
21import org.apache.felix.scr.annotations.Deactivate;
22import org.apache.felix.scr.annotations.Reference;
23import org.apache.felix.scr.annotations.ReferenceCardinality;
24import org.apache.felix.scr.annotations.Service;
25import org.onosproject.config.DynamicConfigService;
hirokibca3e932018-05-15 15:25:54 -070026
hirokiec18d3a2018-05-16 15:27:37 -070027import org.onosproject.net.ConnectPoint;
28import org.onosproject.net.Device;
29import org.onosproject.net.DeviceId;
30import org.onosproject.net.Link;
31import org.onosproject.net.Port;
32
hirokif4ed5212018-05-26 22:39:38 -070033import org.onosproject.odtn.TapiResolver;
34import org.onosproject.odtn.TapiTopologyManager;
hirokid8fd7862018-10-09 15:24:24 +090035import org.onosproject.odtn.utils.tapi.TapiConnectivityContextHandler;
hirokif4ed5212018-05-26 22:39:38 -070036import org.onosproject.odtn.utils.tapi.TapiLinkHandler;
37import org.onosproject.odtn.utils.tapi.TapiCepHandler;
hirokiec18d3a2018-05-16 15:27:37 -070038import org.onosproject.odtn.utils.tapi.TapiNepRef;
39import org.onosproject.odtn.utils.tapi.TapiNodeRef;
hirokif4ed5212018-05-26 22:39:38 -070040import org.onosproject.odtn.utils.tapi.TapiContextHandler;
41import org.onosproject.odtn.utils.tapi.TapiNepHandler;
42import org.onosproject.odtn.utils.tapi.TapiNodeHandler;
43import org.onosproject.odtn.utils.tapi.TapiSipHandler;
hirokid8fd7862018-10-09 15:24:24 +090044import org.onosproject.odtn.utils.tapi.TapiTopologyContextHandler;
hirokif4ed5212018-05-26 22:39:38 -070045import org.onosproject.odtn.utils.tapi.TapiTopologyHandler;
hirokid8fd7862018-10-09 15:24:24 +090046import org.onosproject.yang.gen.v1.tapicommon.rev20181016.tapicommon.DefaultContext;
47import org.onosproject.yang.gen.v1.tapicommon.rev20181016.tapicommon.Uuid;
48import org.onosproject.yang.gen.v1.tapitopology.rev20181016.tapitopology.topologycontext.DefaultTopology;
hirokiec18d3a2018-05-16 15:27:37 -070049import org.onosproject.yang.model.ModelConverter;
hirokiec18d3a2018-05-16 15:27:37 -070050import org.slf4j.Logger;
51
hirokibca3e932018-05-15 15:25:54 -070052import static org.slf4j.LoggerFactory.getLogger;
53
54/**
hirokif4ed5212018-05-26 22:39:38 -070055 * OSGi Component for ODTN TAPI topology manager application.
hirokibca3e932018-05-15 15:25:54 -070056 */
57@Component(immediate = true)
58@Service
59public class DcsBasedTapiTopologyManager implements TapiTopologyManager {
60
61 private final Logger log = getLogger(getClass());
62
63 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
64 protected DynamicConfigService dcs;
65
hirokiec18d3a2018-05-16 15:27:37 -070066 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
67 protected ModelConverter modelConverter;
68
hiroki684aa2f2018-05-19 20:48:49 -070069 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
70 protected TapiResolver tapiResolver;
71
hirokif4ed5212018-05-26 22:39:38 -070072 private DefaultContext context;
73 private DefaultTopology topology;
hirokiec18d3a2018-05-16 15:27:37 -070074
hirokibca3e932018-05-15 15:25:54 -070075 @Activate
76 public void activate() {
hirokiec18d3a2018-05-16 15:27:37 -070077 initDcsTapiContext();
78 initDcsTapiTopology();
hirokid8fd7862018-10-09 15:24:24 +090079 initDcsTapiConnectivityContext();
hirokibca3e932018-05-15 15:25:54 -070080 log.info("Started");
81 }
82
83 @Deactivate
84 public void deactivate() {
85 log.info("Stopped");
86 }
87
88 @Override
89 public void addDevice(Device device) {
90 log.info("Add device: {}", device);
hirokiec18d3a2018-05-16 15:27:37 -070091 DeviceId deviceId = device.id();
92 if (tapiResolver.hasNodeRef(deviceId)) {
93 return;
94 }
hirokif4ed5212018-05-26 22:39:38 -070095 TapiNodeHandler.create()
hirokiec18d3a2018-05-16 15:27:37 -070096 .setTopologyUuid(topology.uuid())
hirokif4ed5212018-05-26 22:39:38 -070097 .setDeviceId(deviceId).add();
hirokibca3e932018-05-15 15:25:54 -070098 }
99
100 @Override
101 public void removeDevice(Device device) {
102 log.info("Remove device: {}", device);
103 }
104
105 @Override
106 public void addLink(Link link) {
107 log.info("Add link: {}", link);
hirokiec18d3a2018-05-16 15:27:37 -0700108
hiroki684aa2f2018-05-19 20:48:49 -0700109 // TODO: existence check
hirokiec18d3a2018-05-16 15:27:37 -0700110
111 // link
112 TapiNepRef srcNepRef = tapiResolver.getNepRef(link.src());
113 TapiNepRef dstNepRef = tapiResolver.getNepRef(link.dst());
114
hirokif4ed5212018-05-26 22:39:38 -0700115 TapiLinkHandler.create()
hirokiec18d3a2018-05-16 15:27:37 -0700116 .setTopologyUuid(topology.uuid())
hiroki684aa2f2018-05-19 20:48:49 -0700117 .addNep(srcNepRef)
hirokif4ed5212018-05-26 22:39:38 -0700118 .addNep(dstNepRef).add();
hirokibca3e932018-05-15 15:25:54 -0700119 }
120
121 @Override
122 public void removeLink(Link link) {
123 log.info("Remove link: {}", link);
124 }
125
126 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700127 public void addPort(Port port) {
128 log.info("Add port: {}", port);
hiroki684aa2f2018-05-19 20:48:49 -0700129
130 ConnectPoint cp = new ConnectPoint(port.element().id(), port.number());
131 if (tapiResolver.hasNepRef(cp)) {
hirokiec18d3a2018-05-16 15:27:37 -0700132 return;
133 }
134
135 TapiNodeRef nodeRef = tapiResolver.getNodeRef(port.element().id());
136 String nodeId = nodeRef.getNodeId();
137
138 // nep
hirokif4ed5212018-05-26 22:39:38 -0700139 TapiNepHandler nepBuilder = TapiNepHandler.create()
140 .setPort(port)
hirokiec18d3a2018-05-16 15:27:37 -0700141 .setTopologyUuid(topology.uuid())
142 .setNodeUuid(Uuid.fromString(nodeId));
143
hirokif4ed5212018-05-26 22:39:38 -0700144 // cep
145 TapiCepHandler cepBuilder = TapiCepHandler.create()
146 .setTopologyUuid(topology.uuid())
147 .setNodeUuid(Uuid.fromString(nodeId))
148 .setNepUuid(nepBuilder.getId())
149 .setParentNep();
150 nepBuilder.addCep(cepBuilder.getModelObject());
hirokiec18d3a2018-05-16 15:27:37 -0700151
hirokif4ed5212018-05-26 22:39:38 -0700152 if (TapiSipHandler.isSip(port)) {
153 TapiSipHandler sipBuilder = TapiSipHandler.create().setPort(port);
154 nepBuilder.addSip(sipBuilder.getId());
155
156 sipBuilder.add();
hirokiec18d3a2018-05-16 15:27:37 -0700157 }
hirokif4ed5212018-05-26 22:39:38 -0700158
159 nepBuilder.add();
hirokibca3e932018-05-15 15:25:54 -0700160 }
161
162 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700163 public void removePort(Port port) {
164 log.info("Remove port: {}", port);
165 }
166
hirokif4ed5212018-05-26 22:39:38 -0700167 /**
168 * Add Tapi Context to Dcs store.
169 */
hirokiec18d3a2018-05-16 15:27:37 -0700170 private void initDcsTapiContext() {
hirokif4ed5212018-05-26 22:39:38 -0700171 TapiContextHandler contextHandler = TapiContextHandler.create();
172 context = contextHandler.getModelObject();
173 contextHandler.add();
hirokiec18d3a2018-05-16 15:27:37 -0700174 }
175
hirokif4ed5212018-05-26 22:39:38 -0700176 /**
hirokid8fd7862018-10-09 15:24:24 +0900177 * Add Tapi TopologyContext and Topology to Dcs store.
hirokif4ed5212018-05-26 22:39:38 -0700178 *
179 * Assumed there is only one topology for ODTN Phase 1.0
180 */
hirokiec18d3a2018-05-16 15:27:37 -0700181 private void initDcsTapiTopology() {
hirokid8fd7862018-10-09 15:24:24 +0900182 TapiTopologyContextHandler topologyContextHandler = TapiTopologyContextHandler.create();
183 topologyContextHandler.add();
hirokif4ed5212018-05-26 22:39:38 -0700184 TapiTopologyHandler topologyHandler = TapiTopologyHandler.create();
hirokif4ed5212018-05-26 22:39:38 -0700185 topologyHandler.add();
hirokid8fd7862018-10-09 15:24:24 +0900186 topology = topologyHandler.getModelObject();
hirokiec18d3a2018-05-16 15:27:37 -0700187 }
hirokid8fd7862018-10-09 15:24:24 +0900188
189 /**
190 * Add Tapi ConnectivityContext to Dcs store.
191 *
192 * Assumed there is only one topology for ODTN Phase 1.0
193 */
194 private void initDcsTapiConnectivityContext() {
195 TapiConnectivityContextHandler connectivityContextHandler = TapiConnectivityContextHandler.create();
196 connectivityContextHandler.add();
197 }
198
hirokibca3e932018-05-15 15:25:54 -0700199}