blob: 4c4d532f270bc4054fb206c288fe9270c140646f [file] [log] [blame]
Yixiao Chen39828a62016-09-14 14:37:06 -04001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016 Open Networking Foundation
Yixiao Chen39828a62016-09-14 14:37:06 -04003 *
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 */
16package org.onosproject.tenbi.topology.impl;
17
Hesam Rahimi01f6ae02017-02-01 13:57:00 -050018import static com.google.common.base.Preconditions.checkNotNull;
19
Ray Milkeyd84f89b2018-08-17 14:54:17 -070020import org.osgi.service.component.annotations.Activate;
21import org.osgi.service.component.annotations.Component;
22import org.osgi.service.component.annotations.Deactivate;
23import org.osgi.service.component.annotations.Reference;
24import org.osgi.service.component.annotations.ReferenceCardinality;
Yixiao Chen39828a62016-09-14 14:37:06 -040025import org.onosproject.event.AbstractListenerManager;
Henry Yua4e34f82016-11-06 18:30:59 -050026import org.onosproject.tetopology.management.api.TeTopologyEvent;
27import org.onosproject.tetopology.management.api.TeTopologyListener;
Yixiao Chen39828a62016-09-14 14:37:06 -040028import org.onosproject.tetopology.management.api.TeTopologyService;
29import org.onosproject.teyang.api.OperationType;
30import org.onosproject.teyang.utils.topology.NetworkConverter;
31import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork;
Hesam Rahimie96d0be2016-10-19 15:51:11 -040032import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork.OnosYangOpType;
Yixiao Chen39828a62016-09-14 14:37:06 -040033import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetworkOpParam;
34import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetworkService;
35import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks;
36import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworksState;
37import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.IetfNetworkTopology;
Henry Yua4e34f82016-11-06 18:30:59 -050038import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
39 .rev20151208.IetfNetworkTopologyOpParam;
40import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
41 .rev20151208.IetfNetworkTopologyService;
Hesam Rahimi01f6ae02017-02-01 13:57:00 -050042import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopology;
43import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopologyOpParam;
44import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopologyService;
45import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
Henry Yua4e34f82016-11-06 18:30:59 -050046 .IetfTeTopologyEvent;
Hesam Rahimi01f6ae02017-02-01 13:57:00 -050047import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
Henry Yua4e34f82016-11-06 18:30:59 -050048 .IetfTeTopologyEventListener;
Yixiao Chen39828a62016-09-14 14:37:06 -040049import org.onosproject.yms.ymsm.YmsService;
50import org.slf4j.Logger;
51import org.slf4j.LoggerFactory;
52
53/**
54 * The IETF TE Topology NBI Manager implementation.
55 */
Ray Milkeyd84f89b2018-08-17 14:54:17 -070056@Component(immediate = true, service = { IetfNetworkService.class, IetfNetworkTopologyService.class, IetfTeTopologyService.class })
Yixiao Chen39828a62016-09-14 14:37:06 -040057public class TeTopologyNbiManager
Henry Yua4e34f82016-11-06 18:30:59 -050058 extends AbstractListenerManager<IetfTeTopologyEvent, IetfTeTopologyEventListener>
59 implements IetfNetworkService, IetfNetworkTopologyService, IetfTeTopologyService {
Yixiao Chen39828a62016-09-14 14:37:06 -040060
61 private final Logger log = LoggerFactory.getLogger(getClass());
62
Ray Milkeyd84f89b2018-08-17 14:54:17 -070063 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Yixiao Chen39828a62016-09-14 14:37:06 -040064 protected TeTopologyService teTopologyService;
65
Ray Milkeyd84f89b2018-08-17 14:54:17 -070066 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Yixiao Chen39828a62016-09-14 14:37:06 -040067 protected YmsService ymsService;
68
Henry Yua4e34f82016-11-06 18:30:59 -050069
70 /**
71 * Activation helper function.
72 */
73 private void activateBasics() {
74 eventDispatcher.addSink(IetfTeTopologyEvent.class, listenerRegistry);
75 }
76
77 /**
78 * Deactivation helper function.
79 */
80 private void deactivateBasics() {
81 eventDispatcher.removeSink(IetfTeTopologyEvent.class);
82 }
83
Yixiao Chen39828a62016-09-14 14:37:06 -040084 @Activate
85 protected void activate() {
Henry Yua4e34f82016-11-06 18:30:59 -050086 activateBasics();
87
Yixiao Chen39828a62016-09-14 14:37:06 -040088 // Register 3 services with YMS.
89 ymsService.registerService(this, IetfNetworkService.class, null);
90 ymsService.registerService(this, IetfNetworkTopologyService.class, null);
91 ymsService.registerService(this, IetfTeTopologyService.class, null);
92
Henry Yua4e34f82016-11-06 18:30:59 -050093 // Listens to TE Topology events
94 teTopologyService.addListener(new InternalTeTopologyListener());
95
Yixiao Chen39828a62016-09-14 14:37:06 -040096 log.info("Started");
97 }
98
99 @Deactivate
100 protected void deactivate() {
Henry Yua4e34f82016-11-06 18:30:59 -0500101 deactivateBasics();
102
Yixiao Chen39828a62016-09-14 14:37:06 -0400103 // Unregister 3 services.
104 ymsService.unRegisterService(this, IetfNetworkService.class);
105 ymsService.unRegisterService(this, IetfNetworkTopologyService.class);
106 ymsService.unRegisterService(this, IetfTeTopologyService.class);
107
Hesam Rahimi41208102016-12-09 17:54:03 -0500108 teTopologyService.removeListener(new InternalTeTopologyListener());
Yixiao Chen39828a62016-09-14 14:37:06 -0400109 log.info("Stopped");
110 }
111
112 @Override
113 public IetfNetwork getIetfNetwork(IetfNetworkOpParam ietfNetwork) {
Yixiao Chen39828a62016-09-14 14:37:06 -0400114 checkNotNull(ietfNetwork, "getIetfNetwork: ietfNetwork cannot be null");
115
116 // Get the entire data tree from TE Subsystem core.
Henry Yu4b4a7eb2016-11-09 20:07:53 -0500117 org.onosproject.tetopology.management.api.Networks teNetworks = teTopologyService.networks();
Yixiao Chen39828a62016-09-14 14:37:06 -0400118
Hesam Rahimi41208102016-12-09 17:54:03 -0500119 // Build the sample networks for RESTCONF/YMS integration test
120// org.onosproject.tetopology.management.api.Networks teNetworks = new DefaultNetworks(DefaultBuilder
121// .sampleDomain1Networks());
122
Yixiao Chen39828a62016-09-14 14:37:06 -0400123 // Convert the TE Subsystem core data into YANG Objects.
Hesam Rahimi41208102016-12-09 17:54:03 -0500124 Networks networks = NetworkConverter
125 .teSubsystem2YangNetworks(teNetworks, OperationType.QUERY,
126 teTopologyService);
Yixiao Chen39828a62016-09-14 14:37:06 -0400127 NetworksState networkStates = NetworkConverter.teSubsystem2YangNetworkStates(teNetworks, OperationType.QUERY);
128
Henry Yua4e34f82016-11-06 18:30:59 -0500129 IetfNetworkOpParam.IetfNetworkBuilder builder = new IetfNetworkOpParam.IetfNetworkBuilder();
Yixiao Chen39828a62016-09-14 14:37:06 -0400130 IetfNetwork newNetwork = builder.networks(networks)
Henry Yua4e34f82016-11-06 18:30:59 -0500131 .networksState(networkStates)
132 .yangIetfNetworkOpType(OnosYangOpType.NONE)
133 .build();
Yixiao Chen39828a62016-09-14 14:37:06 -0400134
135 // processSubtreeFiltering() filters the entire data tree based on the
136 // user's query and returns the filtered data.
Henry Yua4e34f82016-11-06 18:30:59 -0500137 IetfNetwork result = ietfNetwork.processSubtreeFiltering(
Hesam Rahimi01f6ae02017-02-01 13:57:00 -0500138 newNetwork,
Henry Yua4e34f82016-11-06 18:30:59 -0500139 false);
Hesam Rahimi41208102016-12-09 17:54:03 -0500140 log.debug("result is: {}", result);
Henry Yua4e34f82016-11-06 18:30:59 -0500141 return result;
Yixiao Chen39828a62016-09-14 14:37:06 -0400142 }
143
144 @Override
145 public void setIetfNetwork(IetfNetworkOpParam ietfNetwork) {
146 // In H release, topology is discovered from south, no NBI Set is supported.
147 }
148
149 @Override
150 public IetfTeTopology getIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
151 // unused method.
152 return ietfTeTopology;
153 }
154
155 @Override
156 public void setIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
157 // unused methods.
158 }
159
160 @Override
161 public IetfTeTopology getAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam ietfTeTopology) {
162 // unused methods.
163 return ietfTeTopology;
164 }
165
166 @Override
167 public void setAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam augmentedIetfTeTopologyTeLinkEvent) {
168 // unused methods.
169 }
170
171 @Override
172 public IetfNetworkTopology getIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
173 // unused methods.
Henry Yua4e34f82016-11-06 18:30:59 -0500174 return ietfNetworkTopology;
Yixiao Chen39828a62016-09-14 14:37:06 -0400175 }
176
177 @Override
178 public void setIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
179 // unused methods.
180 }
181
182 @Override
183 public IetfNetwork getAugmentedIetfNetworkNetworks(IetfNetworkOpParam ietfNetwork) {
184 // unused methods.
185 return ietfNetwork;
186 }
187
188 @Override
189 public void setAugmentedIetfNetworkNetworks(IetfNetworkOpParam augmentedIetfNetworkNetworks) {
190 // unused methods.
191 }
192
Henry Yua4e34f82016-11-06 18:30:59 -0500193 private class InternalTeTopologyListener implements TeTopologyListener {
194 @Override
195 public void event(TeTopologyEvent event) {
Hesam Rahimi01f6ae02017-02-01 13:57:00 -0500196 IetfTeTopologyEvent yangEvent = NetworkConverter
Aihua Guo0a6998c2017-02-08 18:14:18 -0500197 .teTopoEvent2YangIetfTeTopoEvent(event, teTopologyService);
Henry Yua4e34f82016-11-06 18:30:59 -0500198 post(yangEvent);
199 }
200 }
Yixiao Chen39828a62016-09-14 14:37:06 -0400201}