blob: fc2fdee2ce45a1b28a7e46aa583fbbd795146e07 [file] [log] [blame]
Yixiao Chen39828a62016-09-14 14:37:06 -04001/*
2 * Copyright 2016 Open Networking Laboratory
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 */
16package org.onosproject.tenbi.topology.impl;
17
Hesam Rahimi01f6ae02017-02-01 13:57:00 -050018import static com.google.common.base.Preconditions.checkNotNull;
19
Yixiao Chen39828a62016-09-14 14:37:06 -040020import org.apache.felix.scr.annotations.Activate;
21import org.apache.felix.scr.annotations.Component;
22import org.apache.felix.scr.annotations.Deactivate;
23import org.apache.felix.scr.annotations.Reference;
24import org.apache.felix.scr.annotations.ReferenceCardinality;
25import org.apache.felix.scr.annotations.Service;
26import org.onosproject.event.AbstractListenerManager;
Henry Yua4e34f82016-11-06 18:30:59 -050027import org.onosproject.tetopology.management.api.TeTopologyEvent;
28import org.onosproject.tetopology.management.api.TeTopologyListener;
Yixiao Chen39828a62016-09-14 14:37:06 -040029import org.onosproject.tetopology.management.api.TeTopologyService;
30import org.onosproject.teyang.api.OperationType;
31import org.onosproject.teyang.utils.topology.NetworkConverter;
32import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork;
Hesam Rahimie96d0be2016-10-19 15:51:11 -040033import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork.OnosYangOpType;
Yixiao Chen39828a62016-09-14 14:37:06 -040034import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetworkOpParam;
35import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetworkService;
36import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks;
37import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworksState;
38import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.IetfNetworkTopology;
Henry Yua4e34f82016-11-06 18:30:59 -050039import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
40 .rev20151208.IetfNetworkTopologyOpParam;
41import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
42 .rev20151208.IetfNetworkTopologyService;
Hesam Rahimi01f6ae02017-02-01 13:57:00 -050043import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopology;
44import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopologyOpParam;
45import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.IetfTeTopologyService;
46import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
Henry Yua4e34f82016-11-06 18:30:59 -050047 .IetfTeTopologyEvent;
Hesam Rahimi01f6ae02017-02-01 13:57:00 -050048import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
Henry Yua4e34f82016-11-06 18:30:59 -050049 .IetfTeTopologyEventListener;
Yixiao Chen39828a62016-09-14 14:37:06 -040050import org.onosproject.yms.ymsm.YmsService;
51import org.slf4j.Logger;
52import org.slf4j.LoggerFactory;
53
54/**
55 * The IETF TE Topology NBI Manager implementation.
56 */
57@Component(immediate = true)
58@Service
59public class TeTopologyNbiManager
Henry Yua4e34f82016-11-06 18:30:59 -050060 extends AbstractListenerManager<IetfTeTopologyEvent, IetfTeTopologyEventListener>
61 implements IetfNetworkService, IetfNetworkTopologyService, IetfTeTopologyService {
Yixiao Chen39828a62016-09-14 14:37:06 -040062
63 private final Logger log = LoggerFactory.getLogger(getClass());
64
65 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
66 protected TeTopologyService teTopologyService;
67
68 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
69 protected YmsService ymsService;
70
Henry Yua4e34f82016-11-06 18:30:59 -050071
72 /**
73 * Activation helper function.
74 */
75 private void activateBasics() {
76 eventDispatcher.addSink(IetfTeTopologyEvent.class, listenerRegistry);
77 }
78
79 /**
80 * Deactivation helper function.
81 */
82 private void deactivateBasics() {
83 eventDispatcher.removeSink(IetfTeTopologyEvent.class);
84 }
85
Yixiao Chen39828a62016-09-14 14:37:06 -040086 @Activate
87 protected void activate() {
Henry Yua4e34f82016-11-06 18:30:59 -050088 activateBasics();
89
Yixiao Chen39828a62016-09-14 14:37:06 -040090 // Register 3 services with YMS.
91 ymsService.registerService(this, IetfNetworkService.class, null);
92 ymsService.registerService(this, IetfNetworkTopologyService.class, null);
93 ymsService.registerService(this, IetfTeTopologyService.class, null);
94
Henry Yua4e34f82016-11-06 18:30:59 -050095 // Listens to TE Topology events
96 teTopologyService.addListener(new InternalTeTopologyListener());
97
Yixiao Chen39828a62016-09-14 14:37:06 -040098 log.info("Started");
99 }
100
101 @Deactivate
102 protected void deactivate() {
Henry Yua4e34f82016-11-06 18:30:59 -0500103 deactivateBasics();
104
Yixiao Chen39828a62016-09-14 14:37:06 -0400105 // Unregister 3 services.
106 ymsService.unRegisterService(this, IetfNetworkService.class);
107 ymsService.unRegisterService(this, IetfNetworkTopologyService.class);
108 ymsService.unRegisterService(this, IetfTeTopologyService.class);
109
Hesam Rahimi41208102016-12-09 17:54:03 -0500110 teTopologyService.removeListener(new InternalTeTopologyListener());
Yixiao Chen39828a62016-09-14 14:37:06 -0400111 log.info("Stopped");
112 }
113
114 @Override
115 public IetfNetwork getIetfNetwork(IetfNetworkOpParam ietfNetwork) {
Yixiao Chen39828a62016-09-14 14:37:06 -0400116 checkNotNull(ietfNetwork, "getIetfNetwork: ietfNetwork cannot be null");
117
118 // Get the entire data tree from TE Subsystem core.
Henry Yu4b4a7eb2016-11-09 20:07:53 -0500119 org.onosproject.tetopology.management.api.Networks teNetworks = teTopologyService.networks();
Yixiao Chen39828a62016-09-14 14:37:06 -0400120
Hesam Rahimi41208102016-12-09 17:54:03 -0500121 // Build the sample networks for RESTCONF/YMS integration test
122// org.onosproject.tetopology.management.api.Networks teNetworks = new DefaultNetworks(DefaultBuilder
123// .sampleDomain1Networks());
124
Yixiao Chen39828a62016-09-14 14:37:06 -0400125 // Convert the TE Subsystem core data into YANG Objects.
Hesam Rahimi41208102016-12-09 17:54:03 -0500126 Networks networks = NetworkConverter
127 .teSubsystem2YangNetworks(teNetworks, OperationType.QUERY,
128 teTopologyService);
Yixiao Chen39828a62016-09-14 14:37:06 -0400129 NetworksState networkStates = NetworkConverter.teSubsystem2YangNetworkStates(teNetworks, OperationType.QUERY);
130
Henry Yua4e34f82016-11-06 18:30:59 -0500131 IetfNetworkOpParam.IetfNetworkBuilder builder = new IetfNetworkOpParam.IetfNetworkBuilder();
Yixiao Chen39828a62016-09-14 14:37:06 -0400132 IetfNetwork newNetwork = builder.networks(networks)
Henry Yua4e34f82016-11-06 18:30:59 -0500133 .networksState(networkStates)
134 .yangIetfNetworkOpType(OnosYangOpType.NONE)
135 .build();
Yixiao Chen39828a62016-09-14 14:37:06 -0400136
137 // processSubtreeFiltering() filters the entire data tree based on the
138 // user's query and returns the filtered data.
Henry Yua4e34f82016-11-06 18:30:59 -0500139 IetfNetwork result = ietfNetwork.processSubtreeFiltering(
Hesam Rahimi01f6ae02017-02-01 13:57:00 -0500140 newNetwork,
Henry Yua4e34f82016-11-06 18:30:59 -0500141 false);
Hesam Rahimi41208102016-12-09 17:54:03 -0500142 log.debug("result is: {}", result);
Henry Yua4e34f82016-11-06 18:30:59 -0500143 return result;
Yixiao Chen39828a62016-09-14 14:37:06 -0400144 }
145
146 @Override
147 public void setIetfNetwork(IetfNetworkOpParam ietfNetwork) {
148 // In H release, topology is discovered from south, no NBI Set is supported.
149 }
150
151 @Override
152 public IetfTeTopology getIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
153 // unused method.
154 return ietfTeTopology;
155 }
156
157 @Override
158 public void setIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
159 // unused methods.
160 }
161
162 @Override
163 public IetfTeTopology getAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam ietfTeTopology) {
164 // unused methods.
165 return ietfTeTopology;
166 }
167
168 @Override
169 public void setAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam augmentedIetfTeTopologyTeLinkEvent) {
170 // unused methods.
171 }
172
173 @Override
174 public IetfNetworkTopology getIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
175 // unused methods.
Henry Yua4e34f82016-11-06 18:30:59 -0500176 return ietfNetworkTopology;
Yixiao Chen39828a62016-09-14 14:37:06 -0400177 }
178
179 @Override
180 public void setIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
181 // unused methods.
182 }
183
184 @Override
185 public IetfNetwork getAugmentedIetfNetworkNetworks(IetfNetworkOpParam ietfNetwork) {
186 // unused methods.
187 return ietfNetwork;
188 }
189
190 @Override
191 public void setAugmentedIetfNetworkNetworks(IetfNetworkOpParam augmentedIetfNetworkNetworks) {
192 // unused methods.
193 }
194
Henry Yua4e34f82016-11-06 18:30:59 -0500195 private class InternalTeTopologyListener implements TeTopologyListener {
196 @Override
197 public void event(TeTopologyEvent event) {
Hesam Rahimi01f6ae02017-02-01 13:57:00 -0500198 IetfTeTopologyEvent yangEvent = NetworkConverter
199 .teTopoEvent2YangIetfTeTopoEvent(event);
Henry Yua4e34f82016-11-06 18:30:59 -0500200 post(yangEvent);
201 }
202 }
Yixiao Chen39828a62016-09-14 14:37:06 -0400203}