blob: 1cd53ada5c93e6df5e144335132687643bb26e06 [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
Yixiao Chen39828a62016-09-14 14:37:06 -040018import org.apache.felix.scr.annotations.Activate;
19import org.apache.felix.scr.annotations.Component;
20import org.apache.felix.scr.annotations.Deactivate;
21import org.apache.felix.scr.annotations.Reference;
22import org.apache.felix.scr.annotations.ReferenceCardinality;
23import org.apache.felix.scr.annotations.Service;
24import org.onosproject.event.AbstractListenerManager;
Henry Yua4e34f82016-11-06 18:30:59 -050025import org.onosproject.tetopology.management.api.TeTopologyEvent;
26import org.onosproject.tetopology.management.api.TeTopologyListener;
Yixiao Chen39828a62016-09-14 14:37:06 -040027import org.onosproject.tetopology.management.api.TeTopologyService;
28import org.onosproject.teyang.api.OperationType;
29import org.onosproject.teyang.utils.topology.NetworkConverter;
30import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork;
Hesam Rahimie96d0be2016-10-19 15:51:11 -040031import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork.OnosYangOpType;
Yixiao Chen39828a62016-09-14 14:37:06 -040032import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetworkOpParam;
33import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetworkService;
34import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks;
35import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworksState;
36import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.IetfNetworkTopology;
Henry Yua4e34f82016-11-06 18:30:59 -050037import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
38 .rev20151208.IetfNetworkTopologyOpParam;
39import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
40 .rev20151208.IetfNetworkTopologyService;
Yixiao Chen39828a62016-09-14 14:37:06 -040041import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopology;
42import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyOpParam;
Henry Yua4e34f82016-11-06 18:30:59 -050043import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyService;
44import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
45 .IetfTeTopologyEvent;
46import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
47 .IetfTeTopologyEventListener;
Yixiao Chen39828a62016-09-14 14:37:06 -040048import org.onosproject.yms.ymsm.YmsService;
49import org.slf4j.Logger;
50import org.slf4j.LoggerFactory;
51
Henry Yua4e34f82016-11-06 18:30:59 -050052import static com.google.common.base.Preconditions.checkNotNull;
53
Yixiao Chen39828a62016-09-14 14:37:06 -040054/**
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
110 log.info("Stopped");
111 }
112
113 @Override
114 public IetfNetwork getIetfNetwork(IetfNetworkOpParam ietfNetwork) {
Yixiao Chen39828a62016-09-14 14:37:06 -0400115 checkNotNull(ietfNetwork, "getIetfNetwork: ietfNetwork cannot be null");
116
117 // Get the entire data tree from TE Subsystem core.
118 org.onosproject.tetopology.management.api.Networks teNetworks = teTopologyService.getNetworks();
119
120 // Convert the TE Subsystem core data into YANG Objects.
121 Networks networks = NetworkConverter.teSubsystem2YangNetworks(teNetworks, OperationType.QUERY);
122 NetworksState networkStates = NetworkConverter.teSubsystem2YangNetworkStates(teNetworks, OperationType.QUERY);
123
Henry Yua4e34f82016-11-06 18:30:59 -0500124 IetfNetworkOpParam.IetfNetworkBuilder builder = new IetfNetworkOpParam.IetfNetworkBuilder();
Yixiao Chen39828a62016-09-14 14:37:06 -0400125 IetfNetwork newNetwork = builder.networks(networks)
Henry Yua4e34f82016-11-06 18:30:59 -0500126 .networksState(networkStates)
127 .yangIetfNetworkOpType(OnosYangOpType.NONE)
128 .build();
Yixiao Chen39828a62016-09-14 14:37:06 -0400129
130 // processSubtreeFiltering() filters the entire data tree based on the
131 // user's query and returns the filtered data.
Henry Yua4e34f82016-11-06 18:30:59 -0500132 IetfNetwork result = ietfNetwork.processSubtreeFiltering(
133 (IetfNetworkOpParam) newNetwork,
134 false);
135 return result;
Yixiao Chen39828a62016-09-14 14:37:06 -0400136 }
137
138 @Override
139 public void setIetfNetwork(IetfNetworkOpParam ietfNetwork) {
140 // In H release, topology is discovered from south, no NBI Set is supported.
141 }
142
143 @Override
144 public IetfTeTopology getIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
145 // unused method.
146 return ietfTeTopology;
147 }
148
149 @Override
150 public void setIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
151 // unused methods.
152 }
153
154 @Override
155 public IetfTeTopology getAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam ietfTeTopology) {
156 // unused methods.
157 return ietfTeTopology;
158 }
159
160 @Override
161 public void setAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam augmentedIetfTeTopologyTeLinkEvent) {
162 // unused methods.
163 }
164
165 @Override
166 public IetfNetworkTopology getIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
167 // unused methods.
Henry Yua4e34f82016-11-06 18:30:59 -0500168 return ietfNetworkTopology;
Yixiao Chen39828a62016-09-14 14:37:06 -0400169 }
170
171 @Override
172 public void setIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
173 // unused methods.
174 }
175
176 @Override
177 public IetfNetwork getAugmentedIetfNetworkNetworks(IetfNetworkOpParam ietfNetwork) {
178 // unused methods.
179 return ietfNetwork;
180 }
181
182 @Override
183 public void setAugmentedIetfNetworkNetworks(IetfNetworkOpParam augmentedIetfNetworkNetworks) {
184 // unused methods.
185 }
186
Henry Yua4e34f82016-11-06 18:30:59 -0500187 private class InternalTeTopologyListener implements TeTopologyListener {
188 @Override
189 public void event(TeTopologyEvent event) {
190 IetfTeTopologyEvent yangEvent = NetworkConverter.teTopoEvent2YangIetfTeTopoEvent(event);
191 post(yangEvent);
192 }
193 }
Yixiao Chen39828a62016-09-14 14:37:06 -0400194}