blob: a014a483151f074182659673cd2049eb6f506992 [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
18import static com.google.common.base.Preconditions.checkNotNull;
19
20import 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;
27import 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;
37import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
38 .IetfNetworkTopologyOpParam;
39import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
40 .IetfNetworkTopologyService;
41import 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;
43import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
44 .IetfTeTopologyService;
45import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
46 .ietftetopology.IetfTeTopologyEvent;
47import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
48 .ietftetopology.IetfTeTopologyEventListener;
49import org.onosproject.yms.ymsm.YmsService;
50import org.slf4j.Logger;
51import org.slf4j.LoggerFactory;
52
53/**
54 * The IETF TE Topology NBI Manager implementation.
55 */
56@Component(immediate = true)
57@Service
58public class TeTopologyNbiManager
59 extends AbstractListenerManager<IetfTeTopologyEvent, IetfTeTopologyEventListener>
60 implements IetfNetworkService, IetfNetworkTopologyService, IetfTeTopologyService {
61
62 private final Logger log = LoggerFactory.getLogger(getClass());
63
64 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
65 protected TeTopologyService teTopologyService;
66
67 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
68 protected YmsService ymsService;
69
70 @Activate
71 protected void activate() {
72 // Register 3 services with YMS.
73 ymsService.registerService(this, IetfNetworkService.class, null);
74 ymsService.registerService(this, IetfNetworkTopologyService.class, null);
75 ymsService.registerService(this, IetfTeTopologyService.class, null);
76
77 log.info("Started");
78 }
79
80 @Deactivate
81 protected void deactivate() {
82 // Unregister 3 services.
83 ymsService.unRegisterService(this, IetfNetworkService.class);
84 ymsService.unRegisterService(this, IetfNetworkTopologyService.class);
85 ymsService.unRegisterService(this, IetfTeTopologyService.class);
86
87 log.info("Stopped");
88 }
89
90 @Override
91 public IetfNetwork getIetfNetwork(IetfNetworkOpParam ietfNetwork) {
92 log.info("getIetfNetwork: input {}", ietfNetwork);
93
94 checkNotNull(ietfNetwork, "getIetfNetwork: ietfNetwork cannot be null");
95
96 // Get the entire data tree from TE Subsystem core.
97 org.onosproject.tetopology.management.api.Networks teNetworks = teTopologyService.getNetworks();
98
99 // Convert the TE Subsystem core data into YANG Objects.
100 Networks networks = NetworkConverter.teSubsystem2YangNetworks(teNetworks, OperationType.QUERY);
101 NetworksState networkStates = NetworkConverter.teSubsystem2YangNetworkStates(teNetworks, OperationType.QUERY);
102
103 IetfNetworkOpParam.IetfNetworkBuilder builder = new IetfNetworkOpParam.IetfNetworkBuilder();
104 IetfNetwork newNetwork = builder.networks(networks)
105 .networksState(networkStates)
Hesam Rahimie96d0be2016-10-19 15:51:11 -0400106 .yangIetfNetworkOpType(OnosYangOpType.NONE)
Yixiao Chen39828a62016-09-14 14:37:06 -0400107 .build();
108
109 // processSubtreeFiltering() filters the entire data tree based on the
110 // user's query and returns the filtered data.
Hesam Rahimie96d0be2016-10-19 15:51:11 -0400111 return ietfNetwork.processSubtreeFiltering(
112 (IetfNetworkOpParam) newNetwork,
113 false);
Yixiao Chen39828a62016-09-14 14:37:06 -0400114 }
115
116 @Override
117 public void setIetfNetwork(IetfNetworkOpParam ietfNetwork) {
118 // In H release, topology is discovered from south, no NBI Set is supported.
119 }
120
121 @Override
122 public IetfTeTopology getIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
123 // unused method.
124 return ietfTeTopology;
125 }
126
127 @Override
128 public void setIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
129 // unused methods.
130 }
131
132 @Override
133 public IetfTeTopology getAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam ietfTeTopology) {
134 // unused methods.
135 return ietfTeTopology;
136 }
137
138 @Override
139 public void setAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam augmentedIetfTeTopologyTeLinkEvent) {
140 // unused methods.
141 }
142
143 @Override
144 public IetfNetworkTopology getIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
145 // unused methods.
146 return ietfNetworkTopology;
147 }
148
149 @Override
150 public void setIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
151 // unused methods.
152 }
153
154 @Override
155 public IetfNetwork getAugmentedIetfNetworkNetworks(IetfNetworkOpParam ietfNetwork) {
156 // unused methods.
157 return ietfNetwork;
158 }
159
160 @Override
161 public void setAugmentedIetfNetworkNetworks(IetfNetworkOpParam augmentedIetfNetworkNetworks) {
162 // unused methods.
163 }
164
165}