blob: 9113e3f5b6f09c2baee2d8e8afe82913a0736432 [file] [log] [blame]
chengfan8ea6a562016-11-26 16:37:02 +08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016 Open Networking Foundation
chengfan8ea6a562016-11-26 16:37:02 +08003 *
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 */
16
17package org.onosproject.teyang.utils.tunnel;
18
19import com.google.common.collect.Lists;
20import org.onosproject.tetopology.management.api.TeTopologyKey;
21import org.onosproject.tetopology.management.api.node.TeNodeKey;
22import org.onosproject.tetopology.management.api.node.TtpKey;
23import org.onosproject.tetunnel.api.tunnel.DefaultTeTunnel;
24import org.onosproject.tetunnel.api.tunnel.TeTunnel;
25import org.onosproject.tetunnel.api.tunnel.TeTunnelKey;
26import org.onosproject.tetunnel.api.tunnel.path.DefaultTePath;
27import org.onosproject.tetunnel.api.tunnel.path.DefaultTeRouteUnnumberedLink;
28import org.onosproject.tetunnel.api.tunnel.path.TePath;
29import org.onosproject.tetunnel.api.tunnel.path.TeRouteSubobject;
30import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.IetfTe;
31import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.IetfTeOpParam;
32import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.DefaultTe;
33import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.Te;
34import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.pathparamsconfig.Type;
chaodeyu2a0e59d2017-02-11 21:29:34 +080035import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.pathparamsconfig.type.DefaultDynamic;
36import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.pathparamsconfig.type.DefaultExplicit;
37import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.pathparamsconfig.type.explicit.DefaultExplicitRouteObjects;
38import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.pathparamsconfig.type.explicit.ExplicitRouteObjects;
chengfan8ea6a562016-11-26 16:37:02 +080039import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelproperties.Config;
chaodeyu2a0e59d2017-02-11 21:29:34 +080040import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelproperties.DefaultPrimaryPaths;
chengfan8ea6a562016-11-26 16:37:02 +080041import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelproperties.DefaultState;
42import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelproperties.PrimaryPaths;
43import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelproperties.State;
chaodeyu2a0e59d2017-02-11 21:29:34 +080044import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelsgrouping.DefaultTunnels;
chengfan8ea6a562016-11-26 16:37:02 +080045import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelsgrouping.Tunnels;
chaodeyu2a0e59d2017-02-11 21:29:34 +080046import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelsgrouping.tunnels.DefaultTunnel;
47import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelsgrouping.tunnels.Tunnel;
chengfan8ea6a562016-11-26 16:37:02 +080048import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.LspProt1Forn;
49import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.LspProtBidir1To1;
50import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.LspProtReroute;
chaodeyu2a0e59d2017-02-11 21:29:34 +080051import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.LspProtRerouteExtra;
chengfan8ea6a562016-11-26 16:37:02 +080052import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.LspProtType;
53import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.LspProtUnidir1To1;
54import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.LspProtUnprotected;
chaodeyu2a0e59d2017-02-11 21:29:34 +080055import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.PathSignalingRsvpte;
chengfan8ea6a562016-11-26 16:37:02 +080056import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.PathSignalingSr;
57import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.RouteIncludeEro;
58import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.StateDown;
59import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.StateUp;
60import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TunnelP2Mp;
61import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TunnelP2p;
62import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TunnelType;
chaodeyu2a0e59d2017-02-11 21:29:34 +080063import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.DefaultUnnumberedLink;
64import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.UnnumberedLink;
chengfan8ea6a562016-11-26 16:37:02 +080065import org.slf4j.Logger;
66
67import java.util.ArrayList;
68import java.util.List;
69
chaodeyu2a0e59d2017-02-11 21:29:34 +080070import static com.google.common.base.Strings.isNullOrEmpty;
71import static org.onlab.packet.ONOSLLDP.DEFAULT_NAME;
chengfan8ea6a562016-11-26 16:37:02 +080072import static org.onosproject.tetunnel.api.tunnel.TeTunnel.LspProtectionType;
73import static org.onosproject.tetunnel.api.tunnel.path.TeRouteSubobject.Type.UNNUMBERED_LINK;
74import static org.onosproject.teyang.utils.tunnel.BasicConverter.bytesToLong;
75import static org.onosproject.teyang.utils.tunnel.BasicConverter.ipToLong;
76import static org.onosproject.teyang.utils.tunnel.BasicConverter.longToByte;
77import static org.onosproject.teyang.utils.tunnel.BasicConverter.longToIp;
78import static org.slf4j.LoggerFactory.getLogger;
79
80
81/**
82 * Tunnel convert utils.
83 */
84public final class TunnelConverter {
85
86 private static final Logger log = getLogger(TunnelConverter.class);
87 private static final String DEFAULT_PATH_NAME = "ietfPath";
88 private static final String DEFAULT_PATH_CONSTRAINT = "ietfPath";
89 private static final int DEFAULT_PATH_PREFERENCE = 1;
90 private static final boolean DEFAULT_CSPF_STATE = true;
91 private static final boolean DEFAULT_LOCKDOWN_STATE = true;
92
93 // no instantiation
94 private TunnelConverter() {
95 }
96
97 /**
98 * Build a general IETF TE object with a giving tunnel list. for there are
99 * many kind of attributes in IETF TE, now we only care about the tunnel
100 * attributes.
101 *
102 * @param tunnels tunnels in the TE network
103 * @return IETF te info in the TE network
104 */
105 public static IetfTe buildIetfTeWithTunnels(List<Tunnel> tunnels) {
106 Tunnels teTunnels = new DefaultTunnels
107 .TunnelsBuilder()
108 .tunnel(tunnels)
109 .build();
110 Te te = new DefaultTe
111 .TeBuilder()
112 .tunnels(teTunnels)
113 .build();
114 return new IetfTeOpParam
115 .IetfTeBuilder()
116 .te(te)
117 .yangIetfTeOpType(IetfTe.OnosYangOpType.NONE)
118 .build();
119 }
120
chaodeyu2a0e59d2017-02-11 21:29:34 +0800121 public static IetfTe buildIetfTe(TeTunnel teTunnel, boolean isConfig) {
122 Tunnel tunnel = te2YangTunnelConverter(teTunnel, isConfig);
chengfan8ea6a562016-11-26 16:37:02 +0800123 return buildIetfTeWithTunnels(Lists.newArrayList(tunnel));
124 }
125
126 /**
127 * Converts a specific te tunnel defined in the APP to the general te tunnel
128 * defined in YANG model.
129 *
130 * @param tunnel te tunnel defined in APP
chaodeyu2a0e59d2017-02-11 21:29:34 +0800131 * @param isConfig true if tunnel is to be built with config attributes;
132 * false if built with state attributes
chengfan8ea6a562016-11-26 16:37:02 +0800133 * @return tunnel defined in YANG model
134 */
chaodeyu2a0e59d2017-02-11 21:29:34 +0800135 public static Tunnel te2YangTunnelConverter(TeTunnel tunnel, boolean isConfig) {
chengfan8ea6a562016-11-26 16:37:02 +0800136 List<PrimaryPaths> pathsList = new ArrayList<>();
chaodeyu2a0e59d2017-02-11 21:29:34 +0800137
138 if (tunnel.primaryPaths() != null) {
139 tunnel.primaryPaths()
140 .forEach(tePath -> pathsList.add(te2YangPrimaryPath(tePath)));
141 }
142
chengfan8ea6a562016-11-26 16:37:02 +0800143 tunnel.primaryPaths()
144 .forEach(tePath -> pathsList.add(te2YangPrimaryPath(tePath)));
145
146 Tunnel.TunnelBuilder builder = new DefaultTunnel
147 .TunnelBuilder()
148 .type(te2YangTunnelType(tunnel.type()))
chaodeyu2a0e59d2017-02-11 21:29:34 +0800149 .name(validName(tunnel.name()))
chengfan8ea6a562016-11-26 16:37:02 +0800150 .identifier(tunnel.teTunnelKey().teTunnelId())
151 .state(te2YangTunnelState(tunnel))
152 .primaryPaths(pathsList);
chaodeyu2a0e59d2017-02-11 21:29:34 +0800153 Tunnel.TunnelBuilder tunnelBuilder = isConfig ?
154 builder.config(te2YangTunnelConfig(tunnel)) :
155 builder.state(te2YangTunnelState(tunnel));
chengfan8ea6a562016-11-26 16:37:02 +0800156
chaodeyu2a0e59d2017-02-11 21:29:34 +0800157 return tunnelBuilder.build();
chengfan8ea6a562016-11-26 16:37:02 +0800158 }
159
160 private static State te2YangTunnelState(TeTunnel tunnel) {
161 State.StateBuilder stateBuilder = new DefaultState.StateBuilder();
chaodeyu2a0e59d2017-02-11 21:29:34 +0800162 stateBuilder.name(validName(tunnel.name()))
chengfan8ea6a562016-11-26 16:37:02 +0800163 .identifier((int) tunnel.teTunnelKey().teTunnelId())
164 .source((longToIp(tunnel.srcNode().teNodeId())))
165 .destination((longToIp(tunnel.dstNode().teNodeId())))
166 .srcTpId(longToByte(tunnel.srcTp().ttpId()))
167 .dstTpId(longToByte(tunnel.dstTp().ttpId()))
168 .adminStatus(te2YangStateType(tunnel.adminStatus()))
169 .lspProtectionType(
170 te2YangProtectionType(tunnel.lspProtectionType()))
171 .type(te2YangTunnelType(tunnel.type()))
172 .build();
173 return stateBuilder.build();
174 }
175
chaodeyu2a0e59d2017-02-11 21:29:34 +0800176 private static Config te2YangTunnelConfig(TeTunnel tunnel) {
177 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.
178 rev20160705.ietfte.tunnelproperties.DefaultConfig.ConfigBuilder
179 configBuilder = new org.onosproject.yang.gen.v1.urn.ietf.params.
180 xml.ns.yang.ietf.te.rev20160705.ietfte.tunnelproperties.
181 DefaultConfig.ConfigBuilder();
182
183 configBuilder.name(validName(tunnel.name()))
184 .identifier((int) tunnel.teTunnelKey().teTunnelId())
185 .source((longToIp(tunnel.srcNode().teNodeId())))
186 .destination((longToIp(tunnel.dstNode().teNodeId())))
187 .srcTpId(longToByte(tunnel.srcTp().ttpId()))
188 .dstTpId(longToByte(tunnel.dstTp().ttpId()))
189 .adminStatus(te2YangStateType(tunnel.adminStatus()))
190 .lspProtectionType(
191 te2YangProtectionType(tunnel.lspProtectionType()))
192 .type(te2YangTunnelType(tunnel.type()))
193 .build();
194 return configBuilder.build();
195 }
196
197 private static String validName(String name) {
198 //for name is a required attribute, here we give a default name if not
199 //configured
200 return isNullOrEmpty(name) ? DEFAULT_NAME : name;
201 }
202
chengfan8ea6a562016-11-26 16:37:02 +0800203 private static PrimaryPaths te2YangPrimaryPath(TePath tePath) {
204 DefaultPrimaryPaths.PrimaryPathsBuilder builder = new DefaultPrimaryPaths
205 .PrimaryPathsBuilder()
206 .name(DEFAULT_PATH_NAME)
207 .preference(DEFAULT_PATH_PREFERENCE)
208 .state(te2YangPrimaryPathState(tePath))
209 .yangPrimaryPathsOpType(IetfTe.OnosYangOpType.NONE);
210 return builder.build();
211 }
212
213 private static org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
214 .te.rev20160705.ietfte.p2pprimarypathparams.State
215 te2YangPrimaryPathState(TePath tePath) {
216
217 List<TeRouteSubobject> teRouteSubobjects = tePath.explicitRoute();
218
219 List<ExplicitRouteObjects> routeObjects = new ArrayList<>();
220 teRouteSubobjects.forEach(teRouteSubobject -> {
221 routeObjects.add(te2YangRouteSubobject(teRouteSubobject));
222 });
223 DefaultExplicit.ExplicitBuilder explicitBuilder =
224 DefaultExplicit.builder().explicitRouteObjects(routeObjects);
225
226 return new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.
227 te.rev20160705.ietfte.p2pprimarypathparams.DefaultState
228 .StateBuilder()
229 .type(explicitBuilder.build())
230 .pathNamedConstraint(DEFAULT_PATH_CONSTRAINT)
231 .noCspf(DEFAULT_CSPF_STATE)
232 .lockdown(DEFAULT_LOCKDOWN_STATE)
233 .build();
234 }
235
236 private static ExplicitRouteObjects
237 te2YangRouteSubobject(TeRouteSubobject routeSubobject) {
238
239 TeRouteSubobject.Type type = routeSubobject.type();
240 UnnumberedLink yanglink = null;
241 //TODO implement other kind of TeRouteSubobject type
242 if (type == UNNUMBERED_LINK) {
243 DefaultTeRouteUnnumberedLink unnumberedLink =
244 (DefaultTeRouteUnnumberedLink) routeSubobject;
245 TeNodeKey nodeKey = unnumberedLink.node();
246 TtpKey ttpKey = unnumberedLink.ttp();
247
248 yanglink = DefaultUnnumberedLink.builder()
249 .routerId(longToIp(nodeKey.teNodeId()))
250 .interfaceId(ttpKey.ttpId())
251 .build();
252
253 }
254
255 //TODO implement other kind of explicitRoute usage type
256 return DefaultExplicitRouteObjects.builder()
257 .type(yanglink)
258 .explicitRouteUsage(RouteIncludeEro.class)
259 .build();
260 }
261
262 /**
263 * Converts a YANG TE tunnel defined in the YANG model to a specific TE
264 * tunnel defined in the TE tunnel APP.
265 *
Henry Yuad441142016-12-01 17:00:37 -0500266 * @param tunnel yang tunnel object
267 * @param topologyKey key of the TE topology to which this tunnel belongs
chengfan8ea6a562016-11-26 16:37:02 +0800268 * @return default Te tunnel defined in TE tunnel APP
269 */
270 public static DefaultTeTunnel yang2TeTunnel(org.onosproject.yang.gen.v1.
271 urn.ietf.params.xml.
272 ns.yang.ietf.te.
273 rev20160705.ietfte.
274 tunnelsgrouping.
275 tunnels.Tunnel
276 tunnel,
277 TeTopologyKey topologyKey) {
278 //get config info
279 Config config = tunnel.config();
280
281 //build basic attribute, node and ttp
282 TeNodeKey srcNodeKey = new TeNodeKey(topologyKey, ipToLong(config.source()));
283 TeNodeKey dstNodeKey = new TeNodeKey(topologyKey, ipToLong(config.destination()));
284
285 TtpKey srcTtpKey = new TtpKey(srcNodeKey, bytesToLong(config.srcTpId()));
286 TtpKey dstTtpKey = new TtpKey(srcNodeKey, bytesToLong(config.dstTpId()));
287
288 //check if paths have been set
289 List<PrimaryPaths> primaryPaths = tunnel.primaryPaths();
290 List<TePath> paths = new ArrayList<>();
291 primaryPaths.forEach(primaryPath -> paths.add(
292 yang2TePrimaryPaths(primaryPath, topologyKey)));
293
294 //build the te tunnel
295 DefaultTeTunnel.Builder builder = new DefaultTeTunnel.Builder();
296
297 return builder.teTunnelKey(new TeTunnelKey(topologyKey, config.identifier()))
298 .name(config.name())
299 .type(yang2TeTunnelType(config.type()))
300 .lspProtectionType(yang2TeProtectionType(config.lspProtectionType()))
301 .adminState(yang2TeStateType(config.adminStatus()))
302 .srcNode(srcNodeKey)
303 .dstNode(dstNodeKey)
304 .srcTp(srcTtpKey)
305 .dstTp(dstTtpKey)
306 .primaryPaths(paths).build();
307 }
308
309 private static TePath yang2TePrimaryPaths(PrimaryPaths primaryPath,
310 TeTopologyKey topologyKey) {
311 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.
312 rev20160705.ietfte.p2pprimarypathparams.Config
313 pathConfig = primaryPath.config();
314
315 TePath tePath;
316 TePath.Type tePathType = null;
317 Type type = pathConfig.type();
318
319 if (type == null) {
320 return new DefaultTePath(TePath.Type.DYNAMIC,
321 Lists.newArrayList(),
322 Lists.newArrayList(),
323 Lists.newArrayList());
324 }
325
326 Class<? extends Type> typeClass = type.getClass();
327
328 List<TeRouteSubobject> routeSubobjects = new ArrayList<>();
329
330 if (typeClass.isAssignableFrom(DefaultExplicit.class)) {
331 DefaultExplicit explicitPath = (DefaultExplicit) type;
332 explicitPath
333 .explicitRouteObjects()
334 .forEach(o -> routeSubobjects.add(
335 yang2TeRouteSubobject(o, topologyKey)));
336 tePathType = TePath.Type.EXPLICIT;
337
338 } else if (typeClass.isAssignableFrom(DefaultDynamic.class)) {
339 tePathType = TePath.Type.DYNAMIC;
340 }
341
342 tePath = new DefaultTePath(tePathType,
343 Lists.newArrayList(),
344 routeSubobjects,
345 Lists.newArrayList());
346 return tePath;
347 }
348
349 private static TeRouteSubobject
350 yang2TeRouteSubobject(ExplicitRouteObjects routeObject,
351 TeTopologyKey topologyKey) {
352
353 //TODO implement other types of route type
354 DefaultUnnumberedLink type = (DefaultUnnumberedLink) routeObject.type();
355 TeNodeKey nodeKey = new TeNodeKey(topologyKey, ipToLong(type.routerId()));
356 TtpKey tpId = new TtpKey(nodeKey, type.interfaceId());
357 return new DefaultTeRouteUnnumberedLink(nodeKey, tpId);
358 }
359
360 private static TeTunnel.Type yang2TeTunnelType(Class type) {
361 TeTunnel.Type tunnelType = null;
362 if (type.isAssignableFrom(TunnelP2Mp.class)) {
363 tunnelType = TeTunnel.Type.P2MP;
364 } else if (type.isAssignableFrom(TunnelP2p.class)) {
365 tunnelType = TeTunnel.Type.P2P;
366 } else if (type.isAssignableFrom(PathSignalingRsvpte.class)) {
367 tunnelType = TeTunnel.Type.PATH_SIGNALING_RSVPTE;
368 } else if (type.isAssignableFrom(PathSignalingSr.class)) {
369 tunnelType = TeTunnel.Type.PATH_SIGNALING_SR;
370 }
371 return tunnelType;
372 }
373
374
375 private static Class<? extends TunnelType> te2YangTunnelType(TeTunnel.Type type) {
376 Class<? extends TunnelType> tunnelType = null;
377 switch (type) {
378
379 case P2P:
380 tunnelType = TunnelP2p.class;
381 break;
382 case P2MP:
383 tunnelType = TunnelP2Mp.class;
384 break;
385 case PATH_SIGNALING_RSVPTE:
386 tunnelType = PathSignalingRsvpte.class;
387
388 break;
389 case PATH_SIGNALING_SR:
390 tunnelType = PathSignalingSr.class;
391 break;
392 default:
393 log.error("Unknown te tunnel type {}", type.toString());
394 }
395 return tunnelType;
396 }
397
398 private static LspProtectionType
399 yang2TeProtectionType(Class<? extends LspProtType> protType) {
400 LspProtectionType type = null;
401 if (protType.isAssignableFrom(LspProt1Forn.class)) {
402 type = LspProtectionType.LSP_PROT_1_FOR_N;
403 } else if (protType.isAssignableFrom(LspProtBidir1To1.class)) {
404 type = LspProtectionType.LSP_PROT_BIDIR_1_TO_1;
405 } else if (protType.isAssignableFrom(LspProtReroute.class)) {
406 type = LspProtectionType.LSP_PROT_REROUTE;
407 } else if (protType.isAssignableFrom(LspProtRerouteExtra.class)) {
408 type = LspProtectionType.LSP_PROT_REROUTE_EXTRA;
409 } else if (protType.isAssignableFrom(LspProtUnidir1To1.class)) {
410 type = LspProtectionType.LSP_PROT_UNIDIR_1_TO_1;
411 } else if (protType.isAssignableFrom(LspProtUnprotected.class)) {
412 type = LspProtectionType.LSP_PROT_UNPROTECTED;
413 }
414 return type;
415 }
416
417 private static Class<? extends LspProtType>
418 te2YangProtectionType(LspProtectionType protType) {
419 Class<? extends LspProtType> type = null;
420 switch (protType) {
421
422 case LSP_PROT_UNPROTECTED:
423 type = LspProtUnprotected.class;
424 break;
425 case LSP_PROT_REROUTE:
426 type = LspProtReroute.class;
427 break;
428 case LSP_PROT_REROUTE_EXTRA:
429 type = LspProtRerouteExtra.class;
430 break;
431 case LSP_PROT_UNIDIR_1_TO_1:
432 type = LspProtUnidir1To1.class;
433 break;
434 case LSP_PROT_BIDIR_1_TO_1:
435 type = LspProtBidir1To1.class;
436 break;
437 case LSP_PROT_1_FOR_N:
438 type = LspProt1Forn.class;
439 break;
440 default:
441 log.error("Unknown te tunnel type {}", protType.toString());
442 }
443 return type;
444 }
445
446 private static TeTunnel.State
447 yang2TeStateType(Class<? extends org.onosproject.yang.gen.v1.urn.ietf.
448 params.xml.ns.yang.ietf.te.types.
449 rev20160705.ietftetypes.StateType> stateType) {
450 TeTunnel.State teStateType = null;
451 if (stateType.isAssignableFrom(StateUp.class)) {
452 teStateType = TeTunnel.State.UP;
453 } else if (stateType.isAssignableFrom(StateDown.class)) {
454 teStateType = TeTunnel.State.DOWN;
455 }
456 return teStateType;
457 }
458
459 private static Class<? extends org.onosproject.yang.gen.v1.urn.ietf.params.
460 xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.StateType>
461 te2YangStateType(TeTunnel.State stateType) {
462 Class<? extends org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.
463 ietf.te.types.rev20160705.ietftetypes.StateType> state = null;
464
465 switch (stateType) {
466
467 case DOWN:
468 state = StateDown.class;
469 break;
470 case UP:
471 state = StateUp.class;
472 break;
473 default:
474 log.error("Unknown te tunnel type {}", stateType.toString());
475
476 }
477 return state;
478 }
479}