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