2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.bgpcep.pcep.topology.provider;
11 import com.google.common.base.Preconditions;
12 import org.opendaylight.protocol.pcep.PCEPSession;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs3;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersion;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.Tlvs;
19 final class SyncOptimization {
21 private final boolean dbVersionMatch;
22 private final boolean isSyncAvoidanceEnabled;
23 private final boolean isDeltaSyncEnabled;
24 private final boolean isDbVersionPresent;
25 private final boolean isTriggeredInitialSynEnable;
26 private final boolean isTriggeredReSynEnable;
28 public SyncOptimization(final PCEPSession session) {
29 Preconditions.checkNotNull(session);
30 final Tlvs remote = session.getRemoteTlvs();
31 final Tlvs local = session.localSessionCharacteristics();
32 final LspDbVersion localLspDbVersion = getLspDbVersion(local);
33 final LspDbVersion remoteLspDbVersion = getLspDbVersion(remote);
34 this.dbVersionMatch = compareLspDbVersion(localLspDbVersion, remoteLspDbVersion);
35 this.isSyncAvoidanceEnabled = isSyncAvoidance(local) && isSyncAvoidance(remote);
36 this.isDeltaSyncEnabled = isDeltaSync(local) && isDeltaSync(remote);
37 this.isDbVersionPresent = localLspDbVersion != null || remoteLspDbVersion != null;
38 this.isTriggeredInitialSynEnable = isTriggeredInitialSync(local) && isTriggeredInitialSync(remote);
39 this.isTriggeredReSynEnable = isTriggeredReSync(local) && isTriggeredReSync(remote);
42 public boolean doesLspDbMatch() {
43 return dbVersionMatch;
46 public boolean isSyncAvoidanceEnabled() {
47 return isSyncAvoidanceEnabled;
50 public boolean isDeltaSyncEnabled() {
51 return isDeltaSyncEnabled;
55 * @return isTriggeredInitialSynEnable
57 public boolean isTriggeredInitSyncEnabled() {
58 return isTriggeredInitialSynEnable;
61 public boolean isDbVersionPresent() {
62 return isDbVersionPresent;
65 private static LspDbVersion getLspDbVersion(final Tlvs openTlvs) {
66 if (openTlvs != null) {
67 final Tlvs3 tlvs3 = openTlvs.getAugmentation(Tlvs3.class);
68 if (tlvs3 != null && tlvs3.getLspDbVersion() != null
69 && tlvs3.getLspDbVersion().getLspDbVersionValue() != null) {
70 return tlvs3.getLspDbVersion();
76 private static boolean compareLspDbVersion(final LspDbVersion local, final LspDbVersion remote) {
77 if (local != null && remote != null) {
78 return local.equals(remote);
83 private static Stateful1 getStateful1(final Tlvs openTlvs) {
84 if (openTlvs != null) {
85 final Tlvs1 tlvs1 = openTlvs.getAugmentation(Tlvs1.class);
86 if (tlvs1 != null && tlvs1.getStateful() != null) {
87 return tlvs1.getStateful().getAugmentation(Stateful1.class);
93 private static boolean isSyncAvoidance(final Tlvs openTlvs) {
94 final Stateful1 stateful1 = getStateful1(openTlvs);
95 if (stateful1 != null && stateful1.isIncludeDbVersion() != null) {
96 return stateful1.isIncludeDbVersion();
101 private static boolean isDeltaSync(final Tlvs openTlvs) {
102 final Stateful1 stateful1 = getStateful1(openTlvs);
103 if (stateful1 != null && stateful1.isDeltaLspSyncCapability() != null) {
104 return stateful1.isDeltaLspSyncCapability();
109 private static boolean isTriggeredInitialSync(final Tlvs openTlvs) {
110 final Stateful1 stateful1 = getStateful1(openTlvs);
111 if (stateful1 != null && stateful1.isTriggeredInitialSync() != null) {
112 return stateful1.isTriggeredInitialSync();
117 private static boolean isTriggeredReSync(final Tlvs openTlvs) {
118 final Stateful1 stateful1 = getStateful1(openTlvs);
119 if (stateful1 != null && stateful1.isTriggeredResync() != null) {
120 return stateful1.isTriggeredResync();