blob: 659e984dc865c1bef7ebccd009a7c58c42cb4f80 [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;
35import org.onosproject.odtn.utils.tapi.TapiLinkHandler;
36import org.onosproject.odtn.utils.tapi.TapiCepHandler;
hirokiec18d3a2018-05-16 15:27:37 -070037import org.onosproject.odtn.utils.tapi.TapiNepRef;
38import org.onosproject.odtn.utils.tapi.TapiNodeRef;
hirokif4ed5212018-05-26 22:39:38 -070039import org.onosproject.odtn.utils.tapi.TapiContextHandler;
40import org.onosproject.odtn.utils.tapi.TapiNepHandler;
41import org.onosproject.odtn.utils.tapi.TapiNodeHandler;
42import org.onosproject.odtn.utils.tapi.TapiSipHandler;
43import org.onosproject.odtn.utils.tapi.TapiTopologyHandler;
hirokiec18d3a2018-05-16 15:27:37 -070044import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.DefaultContext;
45import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
46import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.DefaultTopology;
hirokiec18d3a2018-05-16 15:27:37 -070047import org.onosproject.yang.model.ModelConverter;
hirokiec18d3a2018-05-16 15:27:37 -070048import org.slf4j.Logger;
49
hirokibca3e932018-05-15 15:25:54 -070050import static org.slf4j.LoggerFactory.getLogger;
51
52/**
hirokif4ed5212018-05-26 22:39:38 -070053 * OSGi Component for ODTN TAPI topology manager application.
hirokibca3e932018-05-15 15:25:54 -070054 */
55@Component(immediate = true)
56@Service
57public class DcsBasedTapiTopologyManager implements TapiTopologyManager {
58
59 private final Logger log = getLogger(getClass());
60
61 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
62 protected DynamicConfigService dcs;
63
hirokiec18d3a2018-05-16 15:27:37 -070064 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
65 protected ModelConverter modelConverter;
66
hiroki684aa2f2018-05-19 20:48:49 -070067 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
68 protected TapiResolver tapiResolver;
69
hirokif4ed5212018-05-26 22:39:38 -070070 private DefaultContext context;
71 private DefaultTopology topology;
hirokiec18d3a2018-05-16 15:27:37 -070072
hirokibca3e932018-05-15 15:25:54 -070073 @Activate
74 public void activate() {
hirokiec18d3a2018-05-16 15:27:37 -070075 initDcsTapiContext();
76 initDcsTapiTopology();
hirokibca3e932018-05-15 15:25:54 -070077 log.info("Started");
78 }
79
80 @Deactivate
81 public void deactivate() {
82 log.info("Stopped");
83 }
84
85 @Override
86 public void addDevice(Device device) {
87 log.info("Add device: {}", device);
hirokiec18d3a2018-05-16 15:27:37 -070088 DeviceId deviceId = device.id();
89 if (tapiResolver.hasNodeRef(deviceId)) {
90 return;
91 }
hirokif4ed5212018-05-26 22:39:38 -070092 TapiNodeHandler.create()
hirokiec18d3a2018-05-16 15:27:37 -070093 .setTopologyUuid(topology.uuid())
hirokif4ed5212018-05-26 22:39:38 -070094 .setDeviceId(deviceId).add();
hirokibca3e932018-05-15 15:25:54 -070095 }
96
97 @Override
98 public void removeDevice(Device device) {
99 log.info("Remove device: {}", device);
100 }
101
102 @Override
103 public void addLink(Link link) {
104 log.info("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) {
120 log.info("Remove link: {}", link);
121 }
122
123 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700124 public void addPort(Port port) {
125 log.info("Add port: {}", port);
hiroki684aa2f2018-05-19 20:48:49 -0700126
127 ConnectPoint cp = new ConnectPoint(port.element().id(), port.number());
128 if (tapiResolver.hasNepRef(cp)) {
hirokiec18d3a2018-05-16 15:27:37 -0700129 return;
130 }
131
132 TapiNodeRef nodeRef = tapiResolver.getNodeRef(port.element().id());
133 String nodeId = nodeRef.getNodeId();
134
135 // nep
hirokif4ed5212018-05-26 22:39:38 -0700136 TapiNepHandler nepBuilder = TapiNepHandler.create()
137 .setPort(port)
hirokiec18d3a2018-05-16 15:27:37 -0700138 .setTopologyUuid(topology.uuid())
139 .setNodeUuid(Uuid.fromString(nodeId));
140
hirokif4ed5212018-05-26 22:39:38 -0700141 // cep
142 TapiCepHandler cepBuilder = TapiCepHandler.create()
143 .setTopologyUuid(topology.uuid())
144 .setNodeUuid(Uuid.fromString(nodeId))
145 .setNepUuid(nepBuilder.getId())
146 .setParentNep();
147 nepBuilder.addCep(cepBuilder.getModelObject());
hirokiec18d3a2018-05-16 15:27:37 -0700148
hirokif4ed5212018-05-26 22:39:38 -0700149 if (TapiSipHandler.isSip(port)) {
150 TapiSipHandler sipBuilder = TapiSipHandler.create().setPort(port);
151 nepBuilder.addSip(sipBuilder.getId());
152
153 sipBuilder.add();
hirokiec18d3a2018-05-16 15:27:37 -0700154 }
hirokif4ed5212018-05-26 22:39:38 -0700155
156 nepBuilder.add();
hirokibca3e932018-05-15 15:25:54 -0700157 }
158
159 @Override
hirokiec18d3a2018-05-16 15:27:37 -0700160 public void removePort(Port port) {
161 log.info("Remove port: {}", port);
162 }
163
hirokif4ed5212018-05-26 22:39:38 -0700164 /**
165 * Add Tapi Context to Dcs store.
166 */
hirokiec18d3a2018-05-16 15:27:37 -0700167 private void initDcsTapiContext() {
hirokif4ed5212018-05-26 22:39:38 -0700168 TapiContextHandler contextHandler = TapiContextHandler.create();
169 context = contextHandler.getModelObject();
170 contextHandler.add();
hirokiec18d3a2018-05-16 15:27:37 -0700171 }
172
hirokif4ed5212018-05-26 22:39:38 -0700173 /**
174 * Add Tapi Topology to Dcs store.
175 *
176 * Assumed there is only one topology for ODTN Phase 1.0
177 */
hirokiec18d3a2018-05-16 15:27:37 -0700178 private void initDcsTapiTopology() {
hirokif4ed5212018-05-26 22:39:38 -0700179 TapiTopologyHandler topologyHandler = TapiTopologyHandler.create();
180 topology = topologyHandler.getModelObject();
181 topologyHandler.add();
hirokiec18d3a2018-05-16 15:27:37 -0700182 }
hirokibca3e932018-05-15 15:25:54 -0700183}