blob: c5fd719c4cbf4bf19a522c5ad110fef51689060d [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;
hirokid8fd7862018-10-09 15:24:24 +090038import org.onosproject.yang.gen.v1.tapicommon.rev20181016.tapicommon.DefaultContext;
39import org.onosproject.yang.gen.v1.tapicommon.rev20181016.tapicommon.Uuid;
40import org.onosproject.yang.gen.v1.tapitopology.rev20181016.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) {
86 log.info("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) {
98 log.info("Remove device: {}", device);
99 }
100
101 @Override
102 public void addLink(Link link) {
103 log.info("Add link: {}", link);
hirokiec18d3a2018-05-16 15:27:37 -0700104
hiroki684aa2f2018-05-19 20:48:49 -0700105 // TODO: existence check
hirokiec18d3a2018-05-16 15:27:37 -0700106
107 // link
108 TapiNepRef srcNepRef = tapiResolver.getNepRef(link.src());
109 TapiNepRef dstNepRef = tapiResolver.getNepRef(link.dst());
110
hirokif4ed5212018-05-26 22:39:38 -0700111 TapiLinkHandler.create()
hirokiec18d3a2018-05-16 15:27:37 -0700112 .setTopologyUuid(topology.uuid())
hiroki684aa2f2018-05-19 20:48:49 -0700113 .addNep(srcNepRef)
hirokif4ed5212018-05-26 22:39:38 -0700114 .addNep(dstNepRef).add();
hirokibca3e932018-05-15 15:25:54 -0700115 }
116
117 @Override
118 public void removeLink(Link link) {
119 log.info("Remove link: {}", link);
120 }
121
122 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700123 public void addPort(Port port) {
124 log.info("Add port: {}", port);
hiroki684aa2f2018-05-19 20:48:49 -0700125
126 ConnectPoint cp = new ConnectPoint(port.element().id(), port.number());
127 if (tapiResolver.hasNepRef(cp)) {
hirokiec18d3a2018-05-16 15:27:37 -0700128 return;
129 }
130
131 TapiNodeRef nodeRef = tapiResolver.getNodeRef(port.element().id());
132 String nodeId = nodeRef.getNodeId();
133
134 // nep
hirokif4ed5212018-05-26 22:39:38 -0700135 TapiNepHandler nepBuilder = TapiNepHandler.create()
136 .setPort(port)
hirokiec18d3a2018-05-16 15:27:37 -0700137 .setTopologyUuid(topology.uuid())
138 .setNodeUuid(Uuid.fromString(nodeId));
139
hirokif4ed5212018-05-26 22:39:38 -0700140 // cep
141 TapiCepHandler cepBuilder = TapiCepHandler.create()
142 .setTopologyUuid(topology.uuid())
143 .setNodeUuid(Uuid.fromString(nodeId))
144 .setNepUuid(nepBuilder.getId())
145 .setParentNep();
146 nepBuilder.addCep(cepBuilder.getModelObject());
hirokiec18d3a2018-05-16 15:27:37 -0700147
hirokif4ed5212018-05-26 22:39:38 -0700148 if (TapiSipHandler.isSip(port)) {
149 TapiSipHandler sipBuilder = TapiSipHandler.create().setPort(port);
150 nepBuilder.addSip(sipBuilder.getId());
151
152 sipBuilder.add();
hirokiec18d3a2018-05-16 15:27:37 -0700153 }
hirokif4ed5212018-05-26 22:39:38 -0700154
155 nepBuilder.add();
hirokibca3e932018-05-15 15:25:54 -0700156 }
157
158 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700159 public void removePort(Port port) {
160 log.info("Remove port: {}", port);
161 }
162
hirokif4ed5212018-05-26 22:39:38 -0700163 /**
164 * Add Tapi Context to Dcs store.
165 */
hirokiec18d3a2018-05-16 15:27:37 -0700166 private void initDcsTapiContext() {
hirokif4ed5212018-05-26 22:39:38 -0700167 TapiContextHandler contextHandler = TapiContextHandler.create();
168 context = contextHandler.getModelObject();
169 contextHandler.add();
hirokiec18d3a2018-05-16 15:27:37 -0700170 }
171
hirokif4ed5212018-05-26 22:39:38 -0700172 /**
hirokid8fd7862018-10-09 15:24:24 +0900173 * Add Tapi TopologyContext and Topology to Dcs store.
hirokif4ed5212018-05-26 22:39:38 -0700174 *
175 * Assumed there is only one topology for ODTN Phase 1.0
176 */
hirokiec18d3a2018-05-16 15:27:37 -0700177 private void initDcsTapiTopology() {
hirokid8fd7862018-10-09 15:24:24 +0900178 TapiTopologyContextHandler topologyContextHandler = TapiTopologyContextHandler.create();
179 topologyContextHandler.add();
hirokif4ed5212018-05-26 22:39:38 -0700180 TapiTopologyHandler topologyHandler = TapiTopologyHandler.create();
hirokif4ed5212018-05-26 22:39:38 -0700181 topologyHandler.add();
hirokid8fd7862018-10-09 15:24:24 +0900182 topology = topologyHandler.getModelObject();
hirokiec18d3a2018-05-16 15:27:37 -0700183 }
hirokid8fd7862018-10-09 15:24:24 +0900184
185 /**
186 * Add Tapi ConnectivityContext to Dcs store.
187 *
188 * Assumed there is only one topology for ODTN Phase 1.0
189 */
190 private void initDcsTapiConnectivityContext() {
191 TapiConnectivityContextHandler connectivityContextHandler = TapiConnectivityContextHandler.create();
192 connectivityContextHandler.add();
193 }
194
hirokibca3e932018-05-15 15:25:54 -0700195}